#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