查看: 96|回复: 0

[转载发布] 第二货币脚本(整合版)

[复制链接]
  • TA的每日心情
    开心
    昨天 10:15
  • 签到天数: 73 天

    连续签到: 1 天

    [LV.6]常住居民II

    2044

    主题

    86

    回帖

    8602

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    -2
    卡币
    6460
    OK点
    16
    积分
    8602
    发表于 2024-4-12 23:00:57 | 显示全部楼层 |阅读模式
    声明:


      此脚本是我初学脚本时练手用的,当时本想发布,可是因为当时比较忙忘了此事……今天就一并发出来吧。 可能有语法等错误,BUG基本已修复,如有其他问题欢迎反馈。 这个脚本是子弹君于2014年发布的,整合原因只是一个朋友希望可以同时使用多个, 因此我对其进行了调整。我还增添了一些便捷操作,以实现能将多种第二货币快速整合起来的时候能更容易操作。另外,我还增加了显示图标的功能以及在对话中显示第二货币窗口的功能。 但是,解释权和版权仍然归原作者所有。本人只负责对我修改的地方进行BUG修复。声明一下,此处因为并非完全转载所以写明原创发布,可我实际上只是进行了一些修改,不占有版权。


    截图


    脚本
    [Ruby] 纯文本查看 复制代码
    #encoding:utf-8
    # =============================================================================
    # 第二货币(整合版)        by 子弹君
    # 版本 : 1.1
    # 整合 : MCCF
    # 原出处:[url]https://rpg. blue/thread-371630-1-1.html[/url]
    # =============================================================================
    # 整合版更新记录:
    # -----------------------------------------------------------------------------
    # 2019.2.2  - V1.0制作完成,在P1发布
    # 2014.9.19 - 原版发布
    # =============================================================================
    =begin
     
      介绍:
      可以利用变量实现第二货币,整合版还可以设定多种第二货币,并增添了更完整的说明。
      
      使用方法:
      1. 插入到插件脚本之下,Main之上。
      2. 调整设定部分,所有的值都是一一对应的,但是BOMB_STH、BOMB_ICON和BOMB_CU不写
         也可以,会视为不需要此功能。
      3. “显示文字”当中可以用\B[n],显示n号第二货币窗口。但是暂不能同时显示多个窗口。
         
      整合注:
      这个脚本是子弹君于2014年发布的,整合原因只是一个朋友希望可以同时使用多个,
      因此我对其进行了调整。
      我还增添了一些便捷操作,以实现能将多种第二货币快速整合起来的时候能更容易操作。
      另外,我还增加了显示图标的功能以及在对话中显示第二货币窗口的功能。
      
      不过,解释权和版权仍然归原作者所有。本人只负责对我修改的地方进行BUG修复。
      声明一下,我没有针对作者 子弹君 也没有任何恶意,毕竟我学脚本也只有一个多月,
      我只是进行了一些修改,不占有版权。
     
    =end
    #=============================================================================
    # 设定部分:
    #=============================================================================
    module BOMB
      module DEHB
     
        def self.format_Y(id)
          return Graphics.height - (24 + 12 * 2) * (id + 1)
        end
        # 整合新增选项:自动获取id号货币窗口的显示位置,可按如下方式调用
     
        BOMB_X = [0, 0, 0, Graphics.width - 160]
        # 调整窗口的X坐标(建议按照前三个的格式)
     
        BOMB_Y = [format_Y(1), format_Y(2), format_Y(3), format_Y(0)]
        # 调整窗口的Y坐标(建议按照前三个的格式)
     
        BOMB_VAL = [1, 2, 3, 4]
        # 设置一个变量,等于货币的数量(修改值即可修改货币数量)
     
        BOMB_STH = [5, nil, nil , 6]
        # 设置一个开关,开启时第二货币窗口打开,关闭时关闭(可选)。 
     
        BOMB_ICON = [187]
        # 整合新增:这里设置货币的图标ID(可选,不写默认无图标)
     
        BOMB_CU = ["", "能量", "修为", "只箭"]
        # 这里设置货币的单位(可选,不写默认为空)
     
      end
    end
    #==============================================================================
    # ■ BOMB_Gold
    #------------------------------------------------------------------------------
    #  显示持有第二货币的窗口(可以重复使用)
    #==============================================================================
    class BOMB_Gold < Window_Base
     
      #--------------------------------------------------------------------------
      # ● 初始化对象
      #--------------------------------------------------------------------------
      def initialize(index)
        super(0, 0, window_width, fitting_height(1))
        refresh(index)
      end
      #--------------------------------------------------------------------------
      # ● 获取窗口的宽度
      #--------------------------------------------------------------------------
      def window_width
        return 160
      end
      #--------------------------------------------------------------------------
      # ● 刷新
      #--------------------------------------------------------------------------
      def refresh(index)
        contents.clear
        draw_icon(currency_icon(index), 0, 0) if currency_icon(index) != nil
        draw_currency_value(value(index), currency_unit(index), 4, 0, contents.width - 8)
      end
      #--------------------------------------------------------------------------
      # ● 获取货币单位
      #--------------------------------------------------------------------------
      def currency_unit(index)
        return BOMB::DEHB::BOMB_CU[index - 1]
      end
      #--------------------------------------------------------------------------
      # ● 获取持有金钱
      #--------------------------------------------------------------------------
      def value(index)
        $game_variables[BOMB::DEHB::BOMB_VAL[index - 1]]
      end
      #--------------------------------------------------------------------------
      # ● 获取货币图标
      #--------------------------------------------------------------------------
      def currency_icon(index)
        return BOMB::DEHB::BOMB_ICON[index - 1]
      end
    end
     
    #==============================================================================
    # ■ Scene_Menu
    #------------------------------------------------------------------------------
    #  菜单画面
    #==============================================================================
    class Scene_Menu < Scene_MenuBase
     
      #--------------------------------------------------------------------------
      # ● 开始处理
      #--------------------------------------------------------------------------
      alias bomb2014919_start start
      def start
        bomb2014919_start
        create_bomb_window
      end
      #--------------------------------------------------------------------------
      # ● 生成第二货币窗口
      #--------------------------------------------------------------------------
      def create_bomb_window
        @bomb_window = [] * (BOMB::DEHB::BOMB_VAL.length + 1)
        for i in 1..BOMB::DEHB::BOMB_VAL.length
          if BOMB::DEHB::BOMB_STH[i - 1] != nil 
            @bomb_window[i] = BOMB_Gold.new(i)
            @bomb_window[i].x = BOMB::DEHB::BOMB_X[i - 1]
            @bomb_window[i].y = BOMB::DEHB::BOMB_Y[i - 1]
            if $game_switches[BOMB::DEHB::BOMB_STH[i - 1]]
              @bomb_window[i].show
            else
              @bomb_window[i].hide
            end
          else
            @bomb_window[i] = BOMB_Gold.new(i)
            @bomb_window[i].x = BOMB::DEHB::BOMB_X[i - 1]
            @bomb_window[i].y = BOMB::DEHB::BOMB_Y[i - 1]
          end
        end
      end
      #--------------------------------------------------------------------------
      # ● 释放所有窗口
      #--------------------------------------------------------------------------
      alias bomb2014919_dispose_all_windows dispose_all_windows
      def dispose_all_windows
        bomb2014919_dispose_all_windows
        dispose_bomb_windows
      end
      #--------------------------------------------------------------------------
      # ● 更新所有窗口
      #--------------------------------------------------------------------------
      alias bomb2014919_update_all_windows update_all_windows
      def update_all_windows
        bomb2014919_update_all_windows
        update_bomb_windows
      end
      #--------------------------------------------------------------------------
      # ● 更新第二货币窗口
      #--------------------------------------------------------------------------
      def update_bomb_windows
        for i in 1..@bomb_window.length - 1
          @bomb_window[i].update
          if BOMB::DEHB::BOMB_STH[i - 1] != nil
            if $game_switches[BOMB::DEHB::BOMB_STH[i - 1]]
              @bomb_window[i].show
            else
              @bomb_window[i].hide
            end
          end
        end
      end
      #--------------------------------------------------------------------------
      # ● 释放第二货币窗口
      #--------------------------------------------------------------------------
      def dispose_bomb_windows
        for i in 1..@bomb_window.length - 1
          @bomb_window[i].dispose
        end
      end
    end
    class Window_Base < Window
      #--------------------------------------------------------------------------
      # ● 获取控制符的实际形式(这个方法会破坏原始数据)
      #--------------------------------------------------------------------------
      def obtain_escape_code(text)
        text.slice!(/^[\B\$\.\|\^!><\{\}\\]|^[A-Z]+/i)
      end
    end
     
    #==============================================================================
    # ■ Window_Message
    #------------------------------------------------------------------------------
    #  显示文字信息的窗口。
    #==============================================================================
     
    class Window_Message < Window_Base
      #--------------------------------------------------------------------------
      # ● 生成所有窗口
      #--------------------------------------------------------------------------
      alias bomb2014919_create_all_windows create_all_windows
      def create_all_windows
        bomb2014919_create_all_windows
        create_bomb_windows
      end
      #--------------------------------------------------------------------------
      # ● 释放所有窗口
      #--------------------------------------------------------------------------
      alias bomb2014919_dispose_all_windows dispose_all_windows
      def dispose_all_windows
        bomb2014919_dispose_all_windows
        dispose_bomb_windows
      end
      #--------------------------------------------------------------------------
      # ● 更新所有窗口
      #--------------------------------------------------------------------------
      alias bomb2014919_update_all_windows update_all_windows
      def update_all_windows
        bomb2014919_update_all_windows
        update_bomb_windows
      end
      #--------------------------------------------------------------------------
      # ● 生成第二货币窗口
      #--------------------------------------------------------------------------
      def create_bomb_windows
        @bomb_window = [] * BOMB::DEHB::BOMB_VAL.length
        for i in 1..BOMB::DEHB::BOMB_VAL.length
          @bomb_window[i] = BOMB_Gold.new(i)
          @bomb_window[i].x = 0
          @bomb_window[i].y = 0
          @bomb_window[i].openness = 0
        end
      end
      #--------------------------------------------------------------------------
      # ● 更新第二货币窗口
      #--------------------------------------------------------------------------
      def update_bomb_windows
        for i in 1..@bomb_window.length - 1
          @bomb_window[i].update
        end
        update_bomb_placement
      end
      #--------------------------------------------------------------------------
      # ● 释放第二货币窗口
      #--------------------------------------------------------------------------
      def dispose_bomb_windows
        for i in 1..@bomb_window.length - 1
          @bomb_window[i].dispose
        end
      end
      #--------------------------------------------------------------------------
      # ● 显示(单个)第二货币窗口
      #--------------------------------------------------------------------------
      def show_bomb_window(index)
        if @bomb_window[index] && show_bomb_window?
          hide_bomb_window
          @bomb_show = index
          @bomb_window[@bomb_show].open.show
        elsif @bomb_window[index]
          @bomb_show = index
          @bomb_window[@bomb_show].open.show
        else   # 如果显示了一个不存在的第二货币窗口,则只隐藏并清空原来的第二货币窗口
          close_bomb_window if show_bomb_window?  # 只在显示了的情况下才隐藏
          @bomb_show = nil
        end
      end
      #--------------------------------------------------------------------------
      # ● 隐藏第二货币窗口
      #--------------------------------------------------------------------------
      def hide_bomb_window
        @bomb_window[@bomb_show].close.hide if show_bomb_window?
      end
      #--------------------------------------------------------------------------
      # ● 更新第二货币窗口的位置
      #--------------------------------------------------------------------------
      def update_bomb_placement
        if show_bomb_window? && @bomb_window[@bomb_show]
          @bomb_window[@bomb_show].x = Graphics.width - @bomb_window[@bomb_show].width
          @bomb_window[@bomb_show].y = @gold_window.height
        end
      end
      #--------------------------------------------------------------------------
      # ● 判定是否已显示了第二货币窗口
      #--------------------------------------------------------------------------
      def show_bomb_window?
        @bomb_show != nil
      end
      #--------------------------------------------------------------------------
      # ● 处理纤程的主逻辑
      #--------------------------------------------------------------------------
      def fiber_main
        $game_message.visible = true
        update_background
        update_placement
        loop do
          process_all_text if $game_message.has_text?
          process_input
          $game_message.clear
          @gold_window.close
          hide_bomb_window
          Fiber.yield
          break unless text_continue?
        end
        close_and_wait
        $game_message.visible = false
        @fiber = nil
      end
      #--------------------------------------------------------------------------
      # ● 控制符的处理
      #     code : 控制符的实际形式(比如“\C[1]”是“C”)
      #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
      #     pos  : 绘制位置 {:x, :y, :new_x, :height}
      #--------------------------------------------------------------------------
      def process_escape_character(code, text, pos)
        case code.upcase
        when '$'
          @gold_window.open
        when 'B'
          show_bomb_window(obtain_escape_param(text))
        when '.'
          wait(15)
        when '|'
          wait(60)
        when '!'
          input_pause
        when '>'
          @line_show_fast = true
        when '<'
          @line_show_fast = false
        when '^'
          @pause_skip = true
        else
          super
        end
      end
    end

    范例工程


    更新记录
    2014.9.19 - 原版发布
    2019.2.2  - V1.0制作完成,在P1发布

    接下来打算更新商店可用第二货币以及对话时可同时调出多个不同的第二货币窗口的相关内容。


                 本帖来自P1论坛作者MCCF,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg. blue/forum.php?mod=viewthread&tid=411881  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-9-21 14:32 , Processed in 0.053627 second(s), 41 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表