#==============================================================================
# ■ 时间系统
#------------------------------------------------------------------------------
# by 八云 紫
#==============================================================================
#==============================================================================
# ■ Time_byz
#------------------------------------------------------------------------------
# 定义 时间相关的 信息。
#==============================================================================
module Time_byz
#--------------初始化定义---------------
# 起始时间 [秒,分,时,日,月, 年]
INIT_TIME = [30,30,08,01,08,2014]
#--------------时间格式定义-------------
# 时间流失方式
# true.. 按帧数的倍数流失;false.. 按现实时间流失
TIME_MODULE = true
#---------------速度定义----------------
# 流失速度(越大速度越慢)
TIME_SPEED = 60
# 流失速度单位
# 1..时;2..分;3..秒
TIME_UNIT = 3
#---------------事件定义----------------
TIME_EVENT = {
# 事件的起始条件就是时间,但是时间的格式要与起始时间的相同。
# 事件使用的是 公共事件,为了避免使用太多的公共事件,所以增加变量操作,
# 以便于在相同的公共事件里可以使用条件分歧。
# [秒,分,时,日,月, 年] => [变量ID,变量改变后的值,公共事件ID]
[00,59,23,28,02,2008] => [1, 1, 1]
} # 这个不要去掉
#---------------窗口定义----------------
WINDOW_X = 0
WINDOW_Y = 0
=begin
---------------------------------------
时间间隔的判断
---------------------------------------
1. 首先需要先定义一个计时器
$game_system.set_byz_timer(id)
其中的 id 可以是任何数字,字符串。
2. 然后在需要计算时间间隔的地方使用 条件分歧 里的脚本, 里面可以写上
$game_system.after_time(id) > 5
这里的 id 要和定义的时候一致。 这个的意思是 时间经过 5秒后.....
=end
end
#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
# 处理系统附属数据的类。也可执行诸如交通工具、 BGM 等管理之类的功能。
# 本类的实例请参考$game_system 。
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :time_now
attr_accessor :byz_timer
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
alias old_initialize initialize
def initialize
if Time_byz::TIME_MODULE
year = Time_byz::INIT_TIME[5];
mon = Time_byz::INIT_TIME[4];
day = Time_byz::INIT_TIME[3];
hour = Time_byz::INIT_TIME[2];
min = Time_byz::INIT_TIME[1];
sec = Time_byz::INIT_TIME[0];
@time_now = Time.local(year, mon, day, hour, min, sec);
else
@time_now = Time.new;
end
@byz_timer = []
old_initialize
end
#--------------------------------------------------------------------------
# ● 增加时间
#--------------------------------------------------------------------------
def add_time(unit)
case unit
when 3
@time_now += 1;
when 2
@time_now += 60;
when 1
@time_now += 3600;
end
end
#--------------------------------------------------------------------------
# ● 设定时间计时器
#--------------------------------------------------------------------------
def set_byz_timer(id)
@byz_timer[id] = @time_now;
end
#--------------------------------------------------------------------------
# ● 计算时间 (秒数)
#--------------------------------------------------------------------------
def after_time(id)
return 0 if @byz_timer[id] == nil;
return @time_now - @byz_timer[id];
end
end
#==============================================================================
# ■ Window_Byz_Time
#------------------------------------------------------------------------------
# 调试画面、个别显示开关及变量的窗口。
#==============================================================================
class Window_Byz_Time < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
# x : 窗口 X 座标
# y : 窗口 Y 座标
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 170, 87);
if Time_byz::TIME_MODULE
@time_speed = Time_byz::TIME_SPEED;
else
@time_speed = 60;
end
[url=home.php?mod=space&uid=134219]@Time[/url] = @time_speed - 1;
refresh;
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
[url=home.php?mod=space&uid=134219]@Time[/url] += 1;
if @time_speed == @time;
$game_system.add_time(Time_byz::TIME_UNIT);
draw_time($game_system.time_now);
event_run;
[url=home.php?mod=space&uid=134219]@Time[/url] = 0;
end
end
#--------------------------------------------------------------------------
# ● 描绘
#--------------------------------------------------------------------------
def draw_time(time)
self.contents.clear;
text = $game_system.time_now.strftime("%X")
self.contents.draw_text(0, 0, 105, WLH, text, 2);
text = $game_system.time_now.strftime("%Y年%m月%d日");
self.contents.draw_text(0, 32, 170, WLH, text);
end
#--------------------------------------------------------------------------
# ● 启动事件
#--------------------------------------------------------------------------
def event_run
array = ($game_system.time_now.to_a)[0,6];
if Time_byz::TIME_EVENT[array] != nil
unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
variables_id = Time_byz::TIME_EVENT[array][0];
variables_number = Time_byz::TIME_EVENT[array][1];
commonevent_id = Time_byz::TIME_EVENT[array][2];
$game_variables[variables_id] = variables_number;
$game_temp.common_event_id = commonevent_id;
end
end
end
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
# 处理地图画面的类。
#==============================================================================
class Scene_Map < Scene_Base
alias old_start start
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
def start
old_start;
@time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
end
alias old_terminate terminate
#--------------------------------------------------------------------------
# ● 结束处理
#--------------------------------------------------------------------------
def terminate
old_terminate;
@time_window.dispose;
end
alias old_update update
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
old_update;
@time_window.refresh;
end
end