=begin
===============================================================================
地图显示变量 By 喵呜喵5
===============================================================================
【说明】
在地图上显示变量,支持许多的自定义操作
=end
$m5script ||= {};raise("需要喵呜喵5基础脚本的支持") unless $m5script[:M5Base]
$m5script[:M5Var20140815] = 20160307;M5script.version(20150706)
module M5Var20140815;VAR_CONFIG =[
=begin
#==============================================================================
# 设定部分
#==============================================================================
下面的每一对大括号对应地图上的一个窗口,中间的内容就是窗口的属性
具体的格式请参考下面给出的范例(※注意每大括号最后的逗号)
添加内容的格式为:
需要设置的属性: 属性的值 ,
(※ 冒号和属性的值之间请加上空格,不要忘记每条设置最后的逗号)
可以设置的属性如下:
VAR 要显示的变量的ID
X 窗口左上角的X坐标
Y 窗口左上角的Y坐标
X2 窗口右下角的X坐标
Y2 窗口右下角的Y坐标
Z 窗口的Z高度,可以为负数
高度比较大的窗口将遮住高度比较低的窗口
HINT1 在变量的数值前面显示的提示文字(前后要加英文引号)
HINT2 在变量的数值后面显示的提示文字(前后要加英文引号)
POSX 窗口文字的起始X坐标
POSY 窗口文字的起始Y坐标
BACK 窗口的背景图片,文件放在Graphics/System/下(前后要加英文引号)
文件不存在时,窗口背景透明
SX 背景图片的X坐标
SY 背景图片的Y坐标
SWI 窗口的开关ID,当对应ID的开关打开时不显示这个窗口
INV_SWI 窗口的开关ID,当对应ID的开关【关闭】时不显示这个窗口
EVAL 窗口显示的内容变为代码的返回值,VAR属性将被忽略(需要双引号)
如果不懂意思的话请不要设置这个属性
SCENE 窗口只在特定的 Scene 才显示,如果不懂意思的话请不要设置这个属性
=end
{
SCENE: Scene_Status,
BACK: "图片",
},
] # 请不要删除这行
Z = 200 # 如果窗口遮住其他不希望遮住的内容了,请调小这个数值
SWI = nil # 对应ID的开关打开时,关闭本脚本的功能,不在地图上显示变量,
# 这个全局开关优先于各个窗口单独设置的开关
# 我的其他需要本脚本支持的脚本也会受到这个开关的影响而失效
# 如果不需要这个开关的话,这里请填 nil
INV_SWI = nil # 对应ID的开关【关闭】时,关闭本脚本的功能,不在地图上显示变量,
# 这个全局开关优先于各个窗口单独设置的开关以及上面设置的开关
# 我的其他需要本脚本支持的脚本也会受到这个开关的影响而失效
# 如果不需要这个开关的话,这里请填 nil
#==============================================================================
# 设定结束
#==============================================================================
class Window_Var < M5script::Window_Var
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
def initialize(config,cal)
super(config,cal)
update
refresh if @config[:ONLY]
end
#--------------------------------------------------------------------------
# ● 获取窗口的设置
#--------------------------------------------------------------------------
def get_config(config)
super(config)
@config[:Z] += Z
@config[:HINT1] ||= ""
@config[:HINT2] ||= ""
@config[:POSX] ||= 0
@config[:POSY] ||= 0
return if @config[:EVAL]
@config[:EVAL] = "$game_variables[#{@config[:VAR]}]"
end
#--------------------------------------------------------------------------
# ● 更新
#--------------------------------------------------------------------------
def update
super
return if update_close_judge
@background_sprite.opacity = 255 if @background_sprite and \
@background_sprite.opacity != 255
open if close?
update_content unless @config[:ONLY]
end
#--------------------------------------------------------------------------
# ● 更新窗口的关闭判断
#--------------------------------------------------------------------------
def update_close_judge
if close_judge
@background_sprite.opacity = 0 if @background_sprite and \
@background_sprite.opacity != 0
close if open?
return true
end
false
end
#--------------------------------------------------------------------------
# ● 窗口是否应该关闭? (true:关闭)
#--------------------------------------------------------------------------
def close_judge
return true if INV_SWI && !$game_switches[INV_SWI]
return true if SWI && $game_switches[SWI]
return true if @config[:INV_SWI] && !$game_switches[@config[:INV_SWI]]
return true if @config[:SWI] && $game_switches[@config[:SWI]]
false
end
#--------------------------------------------------------------------------
# ● 更新窗口内容
#--------------------------------------------------------------------------
def update_content
cont = @cont
begin
@cont = eval(@config[:EVAL]).to_s
rescue
p "窗口:#{@config}","错误:#{$!.to_s}","追踪:#{$!.backtrace}"
msgbox('地图显示变量脚本的某个窗口发生错误,错误信息已输出到控制台')
exit
end
refresh unless cont == @cont
end
#--------------------------------------------------------------------------
# ● 描绘文字
#--------------------------------------------------------------------------
def refresh
if @config[:ONLY] then @word = "#{@config[:HINT1]}#{@config[:HINT2]}"
else @word = "#{@config[:HINT1]}#{@cont.to_i}#{@config[:HINT2]}"
end
update_placement
update_position
draw_text_ex(@config[:POSX], @config[:POSY], @word)
end
end
end # M5Var20140815
#--------------------------------------------------------------------------
# ● Scene_Base
#--------------------------------------------------------------------------
class Scene_Base
#--------------------------------------------------------------------------
# ● 生成窗口
#--------------------------------------------------------------------------
alias m5_20131103_start start
def start
m5_20131103_start
@m5_20140815_cal_size_window = M5script::Window_Cal.new
@m5_20140815_var_windows = []
(M5Var20140815::VAR_CONFIG + self.class.m5_20150517_window).each do |config|
next unless config
next unless self.class == (config[:SCENE] ? config[:SCENE] : Scene_Map)
if !(config[:VAR] || config[:EVAL])
next unless (config[:HINT1] || config[:HINT2])
config[:ONLY] = true
end
@m5_20140815_var_windows.push(
M5Var20140815::Window_Var.new(config,@m5_20140815_cal_size_window) )
end
@m5_20140815_var_windows.compact!
end
#--------------------------------------------------------------------------
# ● 更新窗口
#--------------------------------------------------------------------------
alias m5_20131103_update update
def update
m5_20131103_update
return if scene_changing?
return unless @m5_20140815_var_windows
@m5_20140815_var_windows.each {|window| window.update if window}
end
#--------------------------------------------------------------------------
# ● 释放窗口
#--------------------------------------------------------------------------
alias m5_20131103_terminate terminate
def terminate
m5_20131103_terminate
return unless @m5_20140815_var_windows
@m5_20140815_var_windows.each {|window| window.dispose if window}
end
#--------------------------------------------------------------------------
# ● 为其他脚本提供的接口
#--------------------------------------------------------------------------
def self.m5_20150517_window(config = nil)
@m5_20150517_add_window ||= []
return @m5_20150517_add_window unless config
hash = { EVAL: "#{config}.text", SCENE: self }
[:X, :Y, :X2, :Y2, :Z, :BACK, :SX, :SY, :POSX, :POSY, :SWI,
:INV_SWI].each do |key|
hash[key] = config.const_get(key) rescue nil
end
@m5_20150517_add_window.push hash
end
end