搜索附件  

Project1 (1).zip

 

第二货币脚本(整合版):
声明:


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


截图


脚本
[Ruby] 纯文本查看 复制代码
#encoding:utf-8
# =============================================================================
# 第二货币(整合版)        by 子弹君
# 版本 : 1.1
# 整合 : MCCF
# 原出处:https://rpg. blue/thread-371630-1-1.html
# =============================================================================
# 整合版更新记录:
# -----------------------------------------------------------------------------
# 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 = BOMB_Gold.new(i)
        @bomb_window.x = BOMB::DEHB::BOMB_X[i - 1]
        @bomb_window.y = BOMB::DEHB::BOMB_Y[i - 1]
        if $game_switches[BOMB::DEHB::BOMB_STH[i - 1]]
          @bomb_window.show
        else
          @bomb_window.hide
        end
      else
        @bomb_window = BOMB_Gold.new(i)
        @bomb_window.x = BOMB::DEHB::BOMB_X[i - 1]
        @bomb_window.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.update
      if BOMB::DEHB::BOMB_STH[i - 1] != nil
        if $game_switches[BOMB::DEHB::BOMB_STH[i - 1]]
          @bomb_window.show
        else
          @bomb_window.hide
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 释放第二货币窗口
  #--------------------------------------------------------------------------
  def dispose_bomb_windows
    for i in 1..@bomb_window.length - 1
      @bomb_window.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 = BOMB_Gold.new(i)
      @bomb_window.x = 0
      @bomb_window.y = 0
      @bomb_window.openness = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 更新第二货币窗口
  #--------------------------------------------------------------------------
  def update_bomb_windows
    for i in 1..@bomb_window.length - 1
      @bomb_window.update
    end
    update_bomb_placement
  end
  #--------------------------------------------------------------------------
  # ● 释放第二货币窗口
  #--------------------------------------------------------------------------
  def dispose_bomb_windows
    for i in 1..@bomb_window.length - 1
      @bomb_window.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在线咨询功能删除,谢谢。
Loading...

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

GMT+8, 2024-11-22 00:40 , Processed in 0.040719 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.