#==============================================================================
# ■ 地图显示变量
# 作者:影月千秋
# 版本:V 1.0
# 最近更新:2014.02.08
# 适用:VA
#------------------------------------------------------------------------------
# ● 简介
# 在地图上显示变量,可以附加文字
#==============================================================================
# ● 使用方法
# 将此脚本插入到其他脚本以下,Main以上,在下方进行设置即可
#==============================================================================
# ● 更新
# V 1.0 2014.02.08 新建
#==============================================================================
# ● 声明
# 本脚本来自【影月千秋】,使用、修改和转载请保留此信息
#==============================================================================
#==============================================================================
# ■ Smomo::VarWin
#==============================================================================
module Smomo
module VarWin
SWI = 0
# 当此开关打开 才会显示变量
# 如果想要一直显示 就设为0
Var = [
# 变量和显示方式
#·填写方式
# [[横坐标, 纵坐标], "显示模板", [需要显示的变量ID], 可省略{窗口背景是否可见}]
# 最后一项如果省略 默认可见
# 横纵坐标是显示位置左上角的坐标
# 显示模板是sprintf使用的格式化字符串,对于不懂脚本的人:
# 使用【%s】来代替变量,使用【%02d】控制变量格式
# 看不懂的话 下面有例子
# 需要显示的变量形如【[3,9,10]】依次显示三个变量
#
#·例子
# 先假设1号变量的值为 19,2号为 4
# 下面两个例子省略前后两个项目 但是实际操作时前面一个必须填写
# "苹果有%s个, 香蕉有%s个",[1,2]
# 显示为:苹果有19个, 香蕉有4个
# "现在是%02d分%02d秒",[1,2]
# 显示为:现在是19分04秒
#
#·特别说明
# 显示模板中 允许使用跳脱字符和对话框用的控制符 但是控制符需要多些一个\
# 比如\I[9]绘制九号图标 写成 \\I[9]
# 换行符之类跳脱字符 原样写即可
# 比如 \n 还是 \n
# 模板 ↓ 复制下面一行(或第二行) 填写后按Ctrl + Q即可生效
#~ [[0,0], "%04d.%02d.%02d", [1,2,3], false],
#~ [[0,0], "口袋上有%s个洞", [4]],
[[0,0], "\\I[224]%04d年%02d月%02d日", [5,6,7], false],
[[0,100],"我要填坑,\\{还有%s天!\\}",[8], true],
[[0,200],"换个行看看吧╮(╯▽╰)╭\n再换个行\n变量的值:%s",[9]],
#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+#
#------------------------------------------------------------------------------#
# 请勿跨过这块区域 #
#------------------------------------------------------------------------------#
#+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=#
"close the array"
] # close the array
Var.pop
Var.each_with_index{|v, i| Var[i][3] = true if v[3].nil?}
end
end
#==============================================================================
# ■ Window_MoVarShow
#==============================================================================
class Window_MoVarShow < Window_Base
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------
def initialize(x, y, opa, fmt, *varid)
@fmt = fmt
@varid = varid
@vars = []
@varid.each_with_index{|id, index| @vars[index] = $game_variables[id]}
super(x, y, *window_size)
self.openness = 0
self.opacity = opa ? 255 : 0
refresh
end
#--------------------------------------------------------------------------
# ● 获取窗口合适的大小
#--------------------------------------------------------------------------
def window_size
temp_win = Window_Base.new(Graphics.width, 0, Graphics.width, 1)
temp_win.reset_font_settings
sr = temp_win.convert_escape_characters(sprintf(@fmt, *@vars))
wd = 0
pos = {:x =>0, :y =>0, :new_x =>0, :height => temp_win.calc_line_height(sr)}
sr.each_line do |s|
s.gsub!(/[\n]/){""}
temp_win.process_character(s.slice!(0, 1), s, pos) until s.empty?
wd = [pos[:x], wd].max
pos[:x] = pos[:new_x]
pos[:y] += pos[:height]
pos[:height] = temp_win.calc_line_height(s)
end
temp_win.dispose
[wd + standard_padding * 2, pos[:y] + standard_padding * 2]
end
#--------------------------------------------------------------------------
# ● 更新
#--------------------------------------------------------------------------
def update
super
if Smomo::VarWin::SWI == 0 || $game_switches[Smomo::VarWin::SWI]
open if close?
refresh if $game_map.need_refresh
else
close if open?
end
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
contents.clear
@varid.each_with_index{|id, index| @vars[index] = $game_variables[id]}
self.move(self.x, self.y, *window_size)
draw_text_ex(0, 0, sprintf(@fmt, *@vars))
end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# ● 生成所有窗口
#--------------------------------------------------------------------------
alias :mo_241e43c6451d79ce81a94bc0b22c3ea5_caw :create_all_windows
def create_all_windows
mo_241e43c6451d79ce81a94bc0b22c3ea5_caw
create_mo_var_show_window
end
#--------------------------------------------------------------------------
# ● 生成变量窗口
#--------------------------------------------------------------------------
def create_mo_var_show_window
@mo_var_show_window = []
Smomo::VarWin::Var.each_with_index do |((x, y), fmt, vars, opa), id|
@mo_var_show_window[id] = Window_MoVarShow.new(x, y, opa, fmt, *vars)
end
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
alias :mo_241e43c6451d79ce81a94bc0b22c3ea5_update :update
def update
update_mo_var_show_window
mo_241e43c6451d79ce81a94bc0b22c3ea5_update
end
#--------------------------------------------------------------------------
# ● 更新变量窗口
#--------------------------------------------------------------------------
def update_mo_var_show_window
@mo_var_show_window.each{|win| win.update}
end
end