Project1

标题: 改下八云紫的时间脚本 [打印本页]

作者: zhanghao    时间: 2009-2-7 00:55
标题: 改下八云紫的时间脚本
贴:http://rpg.blue/viewthread.php?tid=107431想要加上每天的某时某分就触发同一件事,如果可以能加上星期的更好。我想要星期一到星期五触发一件事,星期六和星期天又触发其他的事
再加两个:实现睡觉,就是问下某个事件就到第二天。还有加开始与暂停和消失,暂停后又可以开始,时间是继续的 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 八云紫    时间: 2009-2-7 02:47
  1. #==============================================================================
  2. #                            ■ 时间系统
  3. #------------------------------------------------------------------------------
  4. #                             by 八云 紫
  5. #==============================================================================

  6. #==============================================================================
  7. # ■ Time_byz
  8. #------------------------------------------------------------------------------
  9. #  定义 时间相关的 信息。
  10. #==============================================================================

  11. module Time_byz
  12.   #--------------初始化定义---------------
  13.   #  起始时间 [秒,分,时,日,月,  年]
  14.   INIT_TIME = [55,58,23,28,02,2008]
  15.   #--------------时间格式定义-------------
  16.   # 时间流失方式
  17.   # true.. 按帧数的倍数流失;false.. 按现实时间流失
  18.   TIME_MODULE = true
  19.   #---------------速度定义----------------
  20.   # 流失速度(越大速度越慢)
  21.   TIME_SPEED = 60
  22.   # 流失速度单位
  23.   # 1..时;2..分;3..秒
  24.   TIME_UNIT = 3
  25.   
  26.   #---------------事件定义----------------
  27.   TIME_EVENT = {
  28.     # 事件的起始条件就是时间,但是时间的格式要与起始时间的相同。
  29.     # 事件使用的是 公共事件,为了避免使用太多的公共事件,所以增加变量操作,
  30.     # 以便于在相同的公共事件里可以使用条件分歧。
  31.     # [秒,分,时,日,月,  年] => [变量ID,变量改变后的值,公共事件ID],
  32.       [00,59,23,28,02,2008] => [1, 1, 1],
  33.   }  # 这个不要去掉
  34.   
  35.   #---------------窗口定义----------------
  36.   WINDOW_X = 0
  37.   WINDOW_Y = 0
  38.   
  39. =begin

  40.   ---------------------------------------
  41.              时间间隔的判断
  42.   ---------------------------------------
  43.   1. 首先需要先定义一个计时器
  44.     $game_system.set_byz_timer(id)
  45.     其中的 id 可以是任何数字,字符串。
  46.   2. 然后在需要计算时间间隔的地方使用 条件分歧 里的脚本, 里面可以写上
  47.     $game_system.after_time(id) > 5
  48.     这里的 id 要和定义的时候一致。 这个的意思是 时间经过 5秒后.....
  49.    
  50. =end
  51. end
  52.   
  53. #==============================================================================
  54. # ■ Game_System
  55. #------------------------------------------------------------------------------
  56. #  处理系统附属数据的类。也可执行诸如交通工具、 BGM 等管理之类的功能。
  57. # 本类的实例请参考$game_system 。
  58. #==============================================================================

  59. class Game_System
  60.   #--------------------------------------------------------------------------
  61.   # ● 定义实例变量
  62.   #--------------------------------------------------------------------------  
  63.   attr_accessor :time_now
  64.   attr_accessor :byz_timer
  65.   attr_accessor :run_time
  66.   #--------------------------------------------------------------------------
  67.   # ● 初始化对像
  68.   #--------------------------------------------------------------------------  
  69.   alias old_initialize initialize
  70.   def initialize
  71.     if Time_byz::TIME_MODULE
  72.       year = Time_byz::INIT_TIME[5];
  73.       mon  = Time_byz::INIT_TIME[4];
  74.       day  = Time_byz::INIT_TIME[3];
  75.       hour = Time_byz::INIT_TIME[2];
  76.       min  = Time_byz::INIT_TIME[1];
  77.       sec  = Time_byz::INIT_TIME[0];
  78.       @time_now = Time.local(year, mon, day, hour, min, sec);
  79.     else
  80.       @time_now = Time.new;
  81.     end
  82.     @byz_timer = [];
  83.     @run_time = true;
  84.     old_initialize
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 增加时间
  88.   #--------------------------------------------------------------------------  
  89.   def add_time(unit)
  90.     case unit
  91.     when 3
  92.       @time_now += 1;
  93.     when 2
  94.       @time_now += 60;
  95.     when 1
  96.       @time_now += 3600;
  97.     end
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 设定时间计时器
  101.   #--------------------------------------------------------------------------  
  102.   def set_byz_timer(id)
  103.     @byz_timer[id] = @time_now;
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 计算时间 (秒数)
  107.   #--------------------------------------------------------------------------
  108.   def after_time(id)
  109.     return 0 if @byz_timer[id] == nil;
  110.     return @time_now - @byz_timer[id];
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 返回时间[秒,分,时,日,月, 年, 星期]
  114.   #--------------------------------------------------------------------------  
  115.   def return_time(type, array_time)
  116.     logo = 6;
  117.     now_time = [];
  118.     loop do
  119.       counts_the_power = type /(10 ** logo);
  120.       type %= 10 ** logo;
  121.       if counts_the_power == 1;
  122.         case logo
  123.         when 6
  124.           times = @time_now.sec;
  125.         when 5
  126.           times = @time_now.min;
  127.         when 4
  128.           times = @time_now.hour;
  129.         when 3
  130.           times = @time_now.mday;
  131.         when 2
  132.           times = @time_now.mon;
  133.         when 1
  134.           times = @time_now.year;
  135.         when 0
  136.           times = @time_now.wday;
  137.         end
  138.         now_time.push(times);
  139.       end
  140.       logo -= 1;
  141.       break if logo <= 0;
  142.     end
  143.     return now_time == array_time;
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 时间设置[秒,分,时,日,月,  年]
  147.   #--------------------------------------------------------------------------
  148.   def set_times(sec, min, hour, mday, mon, year)
  149.     @time_now = Time.local(year, mon, day, hour, min, sec);
  150.   end
  151.   
  152. end
  153. #==============================================================================
  154. # ■ Window_Byz_Time
  155. #------------------------------------------------------------------------------
  156. #  调试画面、个别显示开关及变量的窗口。
  157. #==============================================================================

  158. class Window_Byz_Time < Window_Base
  159.   #--------------------------------------------------------------------------
  160.   # ● 初始化对像
  161.   #     x      : 窗口 X 座标
  162.   #     y      : 窗口 Y 座标
  163.   #--------------------------------------------------------------------------
  164.   def initialize(x, y)
  165.     super(x, y, 170, 87);
  166.     if Time_byz::TIME_MODULE
  167.       @time_speed = Time_byz::TIME_SPEED;
  168.     else
  169.       @time_speed = 60;
  170.     end
  171.     @time = @time_speed - 1;
  172.     refresh;
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 刷新
  176.   #--------------------------------------------------------------------------
  177.   def refresh
  178.     return unless $game_system.run_time;
  179.     @time += 1;
  180.     if @time_speed == @time;
  181.       $game_system.add_time(Time_byz::TIME_UNIT);
  182.       draw_time($game_system.time_now);
  183.       event_run;
  184.       @time = 0;
  185.     end
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 描绘
  189.   #--------------------------------------------------------------------------
  190.   def draw_time(time)
  191.     self.contents.clear;
  192.     text = $game_system.time_now.strftime("%X")
  193.     self.contents.draw_text(0, 0, 105, WLH, text, 2);
  194.     text = $game_system.time_now.strftime("%Y年%m月%d日");
  195.     self.contents.draw_text(0, 32, 170, WLH, text);
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● 启动事件
  199.   #--------------------------------------------------------------------------
  200.   def event_run
  201.     array = ($game_system.time_now.to_a)[0,6];
  202.     if Time_byz::TIME_EVENT[array] != nil
  203.       unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
  204.         variables_id     = Time_byz::TIME_EVENT[array][0];
  205.         variables_number = Time_byz::TIME_EVENT[array][1];
  206.         commonevent_id   = Time_byz::TIME_EVENT[array][2];
  207.         $game_variables[variables_id] = variables_number;
  208.         $game_temp.common_event_id = commonevent_id;
  209.       end
  210.     end
  211.   end
  212. end
  213. #==============================================================================
  214. # ■ Scene_Map
  215. #------------------------------------------------------------------------------
  216. #  处理地图画面的类。
  217. #==============================================================================

  218. class Scene_Map < Scene_Base
  219.   
  220.   alias old_start start
  221.   #--------------------------------------------------------------------------
  222.   # ● 开始处理
  223.   #--------------------------------------------------------------------------
  224.   def start
  225.     old_start;
  226.     @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
  227.   end
  228.   alias old_terminate terminate
  229.   #--------------------------------------------------------------------------
  230.   # ● 结束处理
  231.   #--------------------------------------------------------------------------
  232.   def terminate
  233.     old_terminate;
  234.     @time_window.dispose;
  235.   end
  236.   alias old_update update
  237.   #--------------------------------------------------------------------------
  238.   # ● 更新画面
  239.   #--------------------------------------------------------------------------
  240.   def update
  241.     old_update;
  242.     @time_window.refresh;
  243.   end
  244. end
复制代码


新增加了三个功能,不过都没有测试。

用法:

    1.判断时间
    调用函数: $game_system.return_time(标志, 判断的时间)
    用法:
      按照 [秒,分,时,日,月, 年, 星期] 的顺序设置 标准 。 比如 要判断 年月,就这么写
  [秒,分,时,日,月, 年, 星期]
   0  0  0  0  1   1   0         所以, 标志就是 0000110 。
      然后 判断的时间 写上要判断的具体时间 上例就是 [5, 2009], 注意,一定要用  [] 括起来。

    2.设置时间
    调用函数: $game_system.set_times(秒,分,时,日,月, 年)
    用法:调用就可以了。

    3.时间流动暂停开关
    改变 $game_system.run_time 的值就可以了。
    true:  流动  
    false: 暂停

作者: zhanghao    时间: 2009-2-7 05:55
放在事件的脚本没用啊!且判断时间和设置时间有什么用啊。最后那个不会改是加“=”吗?

使用第二个时出错:◆ 2009-02-06 21:56:50
错误类型 :
        变量未定义
错误信息 :
        Section097:153:in `set_times'undefined local variable or method `day' for #<Game_System:0x1017080>
错误可能发生的相关位置 :
        Game_Interpreter : 第 1685 行 : command_355
        腳本加載控制 : 第  行
        Game_Interpreter : 第 388 行 : eval
        Game_Interpreter : 第 1685 行 : command_355
        Game_Interpreter : 第 388 行 : execute_command
        Game_Interpreter : 第 134 行 : update
        Game_Interpreter : 第 99 行 : loop
        Game_Interpreter : 第 136 行 : update
        Scene_Map : 第 56 行 : ani_update
        任务 : 第 7 行 : old_update
        sj : 第 247 行 : _update
        T地图名显示 : 第 258 行 : update
        Scene_Base : 第 19 行 : main
        Scene_Base : 第 16 行 : loop
        Scene_Base : 第 21 行 : main
        腳本錯誤回溯 : 第 33 行 : run
        腳本錯誤回溯 : 第 147 行
-------------66RPG-------------------
◆ 2009-02-06 21:57:08
错误类型 :
        变量未定义
错误信息 :
        Section097:153:in `set_times'undefined local variable or method `day' for #<Game_System:0x1017080>
错误可能发生的相关位置 :
        Game_Interpreter : 第 1685 行 : command_355
        腳本加載控制 : 第  行
        Game_Interpreter : 第 388 行 : eval
        Game_Interpreter : 第 1685 行 : command_355
        Game_Interpreter : 第 388 行 : execute_command
        Game_Interpreter : 第 134 行 : update
        Game_Interpreter : 第 99 行 : loop
        Game_Interpreter : 第 136 行 : update
        Scene_Map : 第 56 行 : ani_update
        任务 : 第 7 行 : old_update
        sj : 第 247 行 : _update
        T地图名显示 : 第 258 行 : update
        Scene_Base : 第 19 行 : main
        Scene_Base : 第 16 行 : loop
        Scene_Base : 第 21 行 : main
        腳本錯誤回溯 : 第 33 行 : run
        腳本錯誤回溯 : 第 147 行
-------------66RPG-------------------

作者: zhanghao    时间: 2009-2-7 18:18
莫非没人会,还是懒得改啊。求各位帮下,应该不是很复杂啊
作者: zh99998    时间: 2009-2-7 19:28
问一下LZ用的什么查错脚本
好强大……

那个错误貌似是脚本的故障

暂停开关用法
$game_system.run_time = true
$game_system.run_time = false
作者: zhanghao    时间: 2009-2-7 19:47
回LS用原来的脚本出错,使用八云蓝的脚本没反应。。
不要暂停也可以只求睡觉和第一个


只好等待了..............
作者: zh99998    时间: 2009-2-7 20:09
现在八云大人貌似没有RM……所以脚本没有测试……有错误也正常
差不多还有1个星期了
如果不急用就等几天,急用的话就悬赏吧……
作者: 八云紫    时间: 2009-2-7 21:49
不好意思呀,是吾写错单词了,用这个替换:

  1. #==============================================================================
  2. #                            ■ 时间系统
  3. #------------------------------------------------------------------------------
  4. #                             by 八云 紫
  5. #==============================================================================

  6. #==============================================================================
  7. # ■ Time_byz
  8. #------------------------------------------------------------------------------
  9. #  定义 时间相关的 信息。
  10. #==============================================================================

  11. module Time_byz
  12.   #--------------初始化定义---------------
  13.   #  起始时间 [秒,分,时,日,月,  年]
  14.   INIT_TIME = [55,58,23,28,02,2008]
  15.   #--------------时间格式定义-------------
  16.   # 时间流失方式
  17.   # true.. 按帧数的倍数流失;false.. 按现实时间流失
  18.   TIME_MODULE = true
  19.   #---------------速度定义----------------
  20.   # 流失速度(越大速度越慢)
  21.   TIME_SPEED = 60
  22.   # 流失速度单位
  23.   # 1..时;2..分;3..秒
  24.   TIME_UNIT = 3
  25.   
  26.   #---------------事件定义----------------
  27.   TIME_EVENT = {
  28.     # 事件的起始条件就是时间,但是时间的格式要与起始时间的相同。
  29.     # 事件使用的是 公共事件,为了避免使用太多的公共事件,所以增加变量操作,
  30.     # 以便于在相同的公共事件里可以使用条件分歧。
  31.     # [秒,分,时,日,月,  年] => [变量ID,变量改变后的值,公共事件ID],
  32.       [00,59,23,28,02,2008] => [1, 1, 1],
  33.   }  # 这个不要去掉
  34.   
  35.   #---------------窗口定义----------------
  36.   WINDOW_X = 0
  37.   WINDOW_Y = 0
  38.   
  39. =begin

  40.   ---------------------------------------
  41.              时间间隔的判断
  42.   ---------------------------------------
  43.   1. 首先需要先定义一个计时器
  44.     $game_system.set_byz_timer(id)
  45.     其中的 id 可以是任何数字,字符串。
  46.   2. 然后在需要计算时间间隔的地方使用 条件分歧 里的脚本, 里面可以写上
  47.     $game_system.after_time(id) > 5
  48.     这里的 id 要和定义的时候一致。 这个的意思是 时间经过 5秒后.....
  49.    
  50. =end
  51. end
  52.   
  53. #==============================================================================
  54. # ■ Game_System
  55. #------------------------------------------------------------------------------
  56. #  处理系统附属数据的类。也可执行诸如交通工具、 BGM 等管理之类的功能。
  57. # 本类的实例请参考$game_system 。
  58. #==============================================================================

  59. class Game_System
  60.   #--------------------------------------------------------------------------
  61.   # ● 定义实例变量
  62.   #--------------------------------------------------------------------------  
  63.   attr_accessor :time_now
  64.   attr_accessor :byz_timer
  65.   attr_accessor :run_time
  66.   #--------------------------------------------------------------------------
  67.   # ● 初始化对像
  68.   #--------------------------------------------------------------------------  
  69.   alias old_initialize initialize
  70.   def initialize
  71.     if Time_byz::TIME_MODULE
  72.       year = Time_byz::INIT_TIME[5];
  73.       mon  = Time_byz::INIT_TIME[4];
  74.       day  = Time_byz::INIT_TIME[3];
  75.       hour = Time_byz::INIT_TIME[2];
  76.       min  = Time_byz::INIT_TIME[1];
  77.       sec  = Time_byz::INIT_TIME[0];
  78.       @time_now = Time.local(year, mon, day, hour, min, sec);
  79.     else
  80.       @time_now = Time.new;
  81.     end
  82.     @byz_timer = [];
  83.     @run_time = true;
  84.     old_initialize
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 增加时间
  88.   #--------------------------------------------------------------------------  
  89.   def add_time(unit)
  90.     case unit
  91.     when 3
  92.       @time_now += 1;
  93.     when 2
  94.       @time_now += 60;
  95.     when 1
  96.       @time_now += 3600;
  97.     end
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 设定时间计时器
  101.   #--------------------------------------------------------------------------  
  102.   def set_byz_timer(id)
  103.     @byz_timer[id] = @time_now;
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 计算时间 (秒数)
  107.   #--------------------------------------------------------------------------
  108.   def after_time(id)
  109.     return 0 if @byz_timer[id] == nil;
  110.     return @time_now - @byz_timer[id];
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 返回时间[秒,分,时,日,月, 年, 星期]
  114.   #--------------------------------------------------------------------------  
  115.   def return_time(type, array_time)
  116.     logo = 6;
  117.     now_time = [];
  118.     loop do
  119.       counts_the_power = type /(10 ** logo);
  120.       type %= 10 ** logo;
  121.       if counts_the_power == 1;
  122.         case logo
  123.         when 6
  124.           times = @time_now.sec;
  125.         when 5
  126.           times = @time_now.min;
  127.         when 4
  128.           times = @time_now.hour;
  129.         when 3
  130.           times = @time_now.mday;
  131.         when 2
  132.           times = @time_now.mon;
  133.         when 1
  134.           times = @time_now.year;
  135.         when 0
  136.           times = @time_now.wday;
  137.         end
  138.         now_time.push(times);
  139.       end
  140.       logo -= 1;
  141.       break if logo <= 0;
  142.     end
  143.     return now_time == array_time;
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 时间设置[秒,分,时,日,月,  年]
  147.   #--------------------------------------------------------------------------
  148.   def set_times(sec, min, hour, day, mon, year)
  149.     @time_now = Time.local(year, mon, day, hour, min, sec);
  150.   end
  151.   
  152. end
  153. #==============================================================================
  154. # ■ Window_Byz_Time
  155. #------------------------------------------------------------------------------
  156. #  调试画面、个别显示开关及变量的窗口。
  157. #==============================================================================

  158. class Window_Byz_Time < Window_Base
  159.   #--------------------------------------------------------------------------
  160.   # ● 初始化对像
  161.   #     x      : 窗口 X 座标
  162.   #     y      : 窗口 Y 座标
  163.   #--------------------------------------------------------------------------
  164.   def initialize(x, y)
  165.     super(x, y, 170, 87);
  166.     if Time_byz::TIME_MODULE
  167.       @time_speed = Time_byz::TIME_SPEED;
  168.     else
  169.       @time_speed = 60;
  170.     end
  171.     @time = @time_speed - 1;
  172.     refresh;
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 刷新
  176.   #--------------------------------------------------------------------------
  177.   def refresh
  178.     @time += 1;
  179.     if @time_speed == @time;
  180.       $game_system.add_time(Time_byz::TIME_UNIT) unless $game_system.run_time;
  181.       draw_time($game_system.time_now);
  182.       event_run;
  183.       @time = 0;
  184.     end
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 描绘
  188.   #--------------------------------------------------------------------------
  189.   def draw_time(time)
  190.     self.contents.clear;
  191.     text = $game_system.time_now.strftime("%X")
  192.     self.contents.draw_text(0, 0, 105, WLH, text, 2);
  193.     text = $game_system.time_now.strftime("%Y年%m月%d日");
  194.     self.contents.draw_text(0, 32, 170, WLH, text);
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 启动事件
  198.   #--------------------------------------------------------------------------
  199.   def event_run
  200.     array = ($game_system.time_now.to_a)[0,6];
  201.     if Time_byz::TIME_EVENT[array] != nil
  202.       unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
  203.         variables_id     = Time_byz::TIME_EVENT[array][0];
  204.         variables_number = Time_byz::TIME_EVENT[array][1];
  205.         commonevent_id   = Time_byz::TIME_EVENT[array][2];
  206.         $game_variables[variables_id] = variables_number;
  207.         $game_temp.common_event_id = commonevent_id;
  208.       end
  209.     end
  210.   end
  211. end
  212. #==============================================================================
  213. # ■ Scene_Map
  214. #------------------------------------------------------------------------------
  215. #  处理地图画面的类。
  216. #==============================================================================

  217. class Scene_Map < Scene_Base
  218.   
  219.   alias old_start start
  220.   #--------------------------------------------------------------------------
  221.   # ● 开始处理
  222.   #--------------------------------------------------------------------------
  223.   def start
  224.     old_start;
  225.     @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
  226.   end
  227.   alias old_terminate terminate
  228.   #--------------------------------------------------------------------------
  229.   # ● 结束处理
  230.   #--------------------------------------------------------------------------
  231.   def terminate
  232.     old_terminate;
  233.     @time_window.dispose;
  234.   end
  235.   alias old_update update
  236.   #--------------------------------------------------------------------------
  237.   # ● 更新画面
  238.   #--------------------------------------------------------------------------
  239.   def update
  240.     old_update;
  241.     @time_window.refresh;
  242.   end
  243. end
复制代码

作者: zhanghao    时间: 2009-2-7 21:57
LS好棒
判断时间脚本没用。怎么回事?
判断时间有什么用啊?能增加睡觉功能吗?想要加上每天的某时某分就触发同一件事,如果可以能加上星期的更好。我想要星期一到星期五触发一件事,星期六和星期天又触发其他的事,能实现吗?

作者: 八云紫    时间: 2009-2-7 22:01
以下引用zhanghao于2009-2-7 13:57:24的发言:

LS好棒
判断时间脚本没用。怎么回事?
判断时间有什么用啊?能增加睡觉功能吗?想要加上每天的某时某分就触发同一件事,如果可以能加上星期的更好。我想要星期一到星期五触发一件事,星期六和星期天又触发其他的事,能实现吗?


没有 RM 无法测试啊, 只有按照记忆来写了。

LZ 如果不急的哈,等吾回家后在帮汝写一个完整的吧~~~~

实在是不好意思~~~
作者: zhanghao    时间: 2009-2-7 22:03
不是很急。尽量快就行了,谢谢再谢谢
作者: 八云紫    时间: 2009-2-7 22:04
以下引用zhanghao于2009-2-7 14:03:33的发言:

不是很急。尽量快就行了,谢谢再谢谢


大概三天后就回家了。~~~~~
作者: zhanghao    时间: 2009-2-11 20:40
顶起这个贴子,希望某某人不要忘记诺言

以下引用楼下zh99998于2009-2-11 12:43:56(善于用编辑,怕被扣分)的发言:

从QQ上看貌似八云大人今天已经回家了^0^

太好了!

以下引用zh99998于2009-2-11 12:43:56的发言:(再次善用编辑)

问一下楼主用的什么查错脚本……


[本贴由作者于 2009-2-11 12:45:22 最后编辑]


snstar2006给我的一个范例里的,不知道是什么,直接用了
作者: zh99998    时间: 2009-2-11 20:43
问一下楼主用的什么查错脚本……
作者: 雪流星    时间: 2009-2-11 21:14
这个:【vx】错误脚本详细提示和添加错误日志
搜索一下就有了,柳之一写的
作者: zh99998    时间: 2009-2-11 21:23
谢……
流星大人有空的时候帮忙看下我的RTP路径的问题OK?

(啊,楼主不要踹我啊~~)
作者: 八云紫    时间: 2009-2-11 21:34
测试啊测试,今晚再写吧~~~~现在好忙~~~
作者: 八云紫    时间: 2009-2-11 22:23
小小的连贴一下,脚本完成。

  1. #==============================================================================
  2. #                            ■ 时间系统
  3. #------------------------------------------------------------------------------
  4. #                             by 八云 紫
  5. #==============================================================================

  6. #==============================================================================
  7. # ■ Time_byz
  8. #------------------------------------------------------------------------------
  9. #  定义 时间相关的 信息。
  10. #==============================================================================

  11. module Time_byz
  12.   #--------------初始化定义---------------
  13.   #  起始时间 [秒,分,时,日,月,  年]
  14.   INIT_TIME = [55,58,23,28,02,2008]
  15.   #--------------时间格式定义-------------
  16.   # 时间流失方式
  17.   # true.. 按帧数的倍数流失;false.. 按现实时间流失
  18.   TIME_MODULE = true
  19.   #---------------速度定义----------------
  20.   # 流失速度(越大速度越慢)
  21.   TIME_SPEED = 60
  22.   # 流失速度单位
  23.   # 1..时;2..分;3..秒;4..日
  24.   TIME_UNIT = 4
  25.   
  26.   #---------------事件定义----------------
  27.   TIME_EVENT = {
  28.     # 事件的起始条件就是时间,但是时间的格式要与起始时间的相同。
  29.     # 事件使用的是 公共事件,为了避免使用太多的公共事件,所以增加变量操作,
  30.     # 以便于在相同的公共事件里可以使用条件分歧。
  31.     # [秒,分,时,日,月,  年] => [变量ID,变量改变后的值,公共事件ID],
  32.       [00,59,23,28,02,2008] => [1, 1, 1],
  33.   }  # 这个不要去掉
  34.   
  35.   #---------------窗口定义----------------
  36.   WINDOW_X = 0
  37.   WINDOW_Y = 0
  38.   
  39. =begin

  40.   ---------------------------------------
  41.              时间间隔的判断
  42.   ---------------------------------------
  43.   1. 首先需要先定义一个计时器
  44.     $game_system.set_byz_timer(id)
  45.     其中的 id 可以是任何数字,字符串。
  46.   2. 然后在需要计算时间间隔的地方使用 条件分歧 里的脚本, 里面可以写上
  47.     $game_system.after_time(id) > 5
  48.     这里的 id 要和定义的时候一致。 这个的意思是 时间经过 5秒后.....
  49.    
  50. =end
  51. end
  52.   
  53. #==============================================================================
  54. # ■ Game_System
  55. #------------------------------------------------------------------------------
  56. #  处理系统附属数据的类。也可执行诸如交通工具、 BGM 等管理之类的功能。
  57. # 本类的实例请参考$game_system 。
  58. #==============================================================================

  59. class Game_System
  60.   #--------------------------------------------------------------------------
  61.   # ● 定义实例变量
  62.   #--------------------------------------------------------------------------  
  63.   attr_accessor :time_now
  64.   attr_accessor :byz_timer
  65.   attr_accessor :run_time
  66.   #--------------------------------------------------------------------------
  67.   # ● 初始化对像
  68.   #--------------------------------------------------------------------------  
  69.   alias old_initialize initialize
  70.   def initialize
  71.     if Time_byz::TIME_MODULE
  72.       year = Time_byz::INIT_TIME[5];
  73.       mon  = Time_byz::INIT_TIME[4];
  74.       day  = Time_byz::INIT_TIME[3];
  75.       hour = Time_byz::INIT_TIME[2];
  76.       min  = Time_byz::INIT_TIME[1];
  77.       sec  = Time_byz::INIT_TIME[0];
  78.       @time_now = Time.local(year, mon, day, hour, min, sec);
  79.     else
  80.       @time_now = Time.new;
  81.     end
  82.     @byz_timer = [];
  83.     @run_time = true;
  84.     old_initialize
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 增加时间
  88.   #--------------------------------------------------------------------------  
  89.   def add_time(unit)
  90.     case unit
  91.     when 4
  92.       @time_now += 3600 * 24;
  93.     when 3
  94.       @time_now += 1;
  95.     when 2
  96.       @time_now += 60;
  97.     when 1
  98.       @time_now += 3600;
  99.     end
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 设定时间计时器
  103.   #--------------------------------------------------------------------------  
  104.   def set_byz_timer(id)
  105.     @byz_timer[id] = @time_now;
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 计算时间 (秒数)
  109.   #--------------------------------------------------------------------------
  110.   def after_time(id)
  111.     return 0 if @byz_timer[id] == nil;
  112.     return @time_now - @byz_timer[id];
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 返回时间[秒,分,时,日,月, 年, 星期]
  116.   #--------------------------------------------------------------------------  
  117.   def return_time(type, array_time)
  118.     logo = 6;
  119.     now_time = [];
  120.     loop do
  121.       counts_the_power = type /(10 ** logo);
  122.       type %= 10 ** logo;
  123.       if counts_the_power == 1;
  124.         case logo
  125.         when 6
  126.           times = @time_now.sec;
  127.         when 5
  128.           times = @time_now.min;
  129.         when 4
  130.           times = @time_now.hour;
  131.         when 3
  132.           times = @time_now.mday;
  133.         when 2
  134.           times = @time_now.mon;
  135.         when 1
  136.           times = @time_now.year;
  137.         when 0
  138.           times = @time_now.wday;
  139.         end
  140.         now_time.push(times);
  141.       end
  142.       logo -= 1;
  143.       break if logo < 0;
  144.     end
  145.     return now_time == array_time;
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 时间跳跃 1..时;2..分;3..秒
  149.   #--------------------------------------------------------------------------
  150.   def bound_times(type, number)
  151.     case type
  152.     when 3
  153.       @time_now += number;
  154.     when 2
  155.       @time_now += 60 * number;
  156.     when 1
  157.       @time_now += 3600 * number;
  158.     end
  159.   end
  160. end
  161. #==============================================================================
  162. # ■ Window_Byz_Time
  163. #------------------------------------------------------------------------------
  164. #  调试画面、个别显示开关及变量的窗口。
  165. #==============================================================================

  166. class Window_Byz_Time < Window_Base
  167.   #--------------------------------------------------------------------------
  168.   # ● 初始化对像
  169.   #     x      : 窗口 X 座标
  170.   #     y      : 窗口 Y 座标
  171.   #--------------------------------------------------------------------------
  172.   def initialize(x, y)
  173.     super(x, y, 170, 87);
  174.     if Time_byz::TIME_MODULE
  175.       @time_speed = Time_byz::TIME_SPEED;
  176.     else
  177.       @time_speed = 60;
  178.     end
  179.     @time = @time_speed - 1;
  180.     refresh;
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 刷新
  184.   #--------------------------------------------------------------------------
  185.   def refresh
  186.     return unless $game_system.run_time;
  187.     @time += 1;
  188.     if @time_speed == @time;
  189.       $game_system.add_time(Time_byz::TIME_UNIT);
  190.       draw_time($game_system.time_now);
  191.       event_run;
  192.       @time = 0;
  193.     end
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 描绘
  197.   #--------------------------------------------------------------------------
  198.   def draw_time(time)
  199.     self.contents.clear;
  200.     text = $game_system.time_now.strftime("%X")
  201.     self.contents.draw_text(0, 0, 105, WLH, text, 2);
  202.     text = $game_system.time_now.strftime("%Y年%m月%d日");
  203.     self.contents.draw_text(0, 32, 170, WLH, text);
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 启动事件
  207.   #--------------------------------------------------------------------------
  208.   def event_run
  209.     array = ($game_system.time_now.to_a)[0,6];
  210.     if Time_byz::TIME_EVENT[array] != nil
  211.       unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
  212.         variables_id     = Time_byz::TIME_EVENT[array][0];
  213.         variables_number = Time_byz::TIME_EVENT[array][1];
  214.         commonevent_id   = Time_byz::TIME_EVENT[array][2];
  215.         $game_variables[variables_id] = variables_number;
  216.         $game_temp.common_event_id = commonevent_id;
  217.       end
  218.     end
  219.   end
  220. end
  221. #==============================================================================
  222. # ■ Scene_Map
  223. #------------------------------------------------------------------------------
  224. #  处理地图画面的类。
  225. #==============================================================================

  226. class Scene_Map < Scene_Base
  227.   
  228.   alias old_start start
  229.   #--------------------------------------------------------------------------
  230.   # ● 开始处理
  231.   #--------------------------------------------------------------------------
  232.   def start
  233.     old_start;
  234.     @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
  235.   end
  236.   alias old_terminate terminate
  237.   #--------------------------------------------------------------------------
  238.   # ● 结束处理
  239.   #--------------------------------------------------------------------------
  240.   def terminate
  241.     old_terminate;
  242.     @time_window.dispose;
  243.   end
  244.   alias old_update update
  245.   #--------------------------------------------------------------------------
  246.   # ● 更新画面
  247.   #--------------------------------------------------------------------------
  248.   def update
  249.     old_update;
  250.     @time_window.refresh;
  251.   end
  252. end
复制代码


用法:

   1.判断时间
   调用函数: $game_system.return_time(标志, 判断的时间)
   用法:
     按照 [秒,分,时,日,月, 年, 星期] 的顺序设置 标准 。 比如 要判断 年月,就这么写
[秒,分,时,日,月, 年, 星期]
  0  0  0  0  1   1   0         所以, 标志就是 0000110 。
     然后 判断的时间 写上要判断的具体时间 上例就是 [5, 2009], 注意,一定要用  [] 括起来。

   2.时间流动暂停开关
   改变 $game_system.run_time 的值就可以了。
   true:  流动  
   false: 暂停

   2.时间快进
   调用函数: $game_system.bound_times(标志, 数值)
   用法:标志有三个值, 1..时;2..分;3..秒
         数值 是要跳跃的数值
   例:  $game_system.bound_times(1, 8)
   说明:时间快进到8小时以后~~ [LINE]1,#dddddd[/LINE]版主对此帖的评论:『连贴扣分』,积分『-10』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: zhanghao    时间: 2009-2-12 01:42
脚本很强大,但貌似您理解错了.....我想要的是问下事件就跳到明天的某个特定时间。(如9点睡觉,跳到明天6点。10点睡也是跳到明天6点)
如果实在太忙,就等您有空时再做吧。我的不急。
P.S.:我不是伸手党,脚本太难了
作者: 八云紫    时间: 2009-2-12 01:47
这样啊,让吾改改好了~~~
作者: 八云紫    时间: 2009-2-12 02:43
  1. #==============================================================================
  2. #                            ■ 时间系统
  3. #------------------------------------------------------------------------------
  4. #                             by 八云 紫
  5. #==============================================================================

  6. #==============================================================================
  7. # ■ Time_byz
  8. #------------------------------------------------------------------------------
  9. #  定义 时间相关的 信息。
  10. #==============================================================================

  11. module Time_byz
  12.   #--------------初始化定义---------------
  13.   #  起始时间 [秒,分,时,日,月,  年]
  14.   INIT_TIME = [55,58,23,28,02,2008]
  15.   #--------------时间格式定义-------------
  16.   # 时间流失方式
  17.   # true.. 按帧数的倍数流失;false.. 按现实时间流失
  18.   TIME_MODULE = true
  19.   #---------------速度定义----------------
  20.   # 流失速度(越大速度越慢)
  21.   TIME_SPEED = 60
  22.   # 流失速度单位
  23.   # 1..时;2..分;3..秒;4..日
  24.   TIME_UNIT = 3
  25.   
  26.   #---------------事件定义----------------
  27.   TIME_EVENT = {
  28.     # 事件的起始条件就是时间,但是时间的格式要与起始时间的相同。
  29.     # 事件使用的是 公共事件,为了避免使用太多的公共事件,所以增加变量操作,
  30.     # 以便于在相同的公共事件里可以使用条件分歧。
  31.     # [秒,分,时,日,月,  年] => [变量ID,变量改变后的值,公共事件ID],
  32.       [00,59,23,28,02,2008] => [1, 1, 1],
  33.   }  # 这个不要去掉
  34.   
  35.   #---------------窗口定义----------------
  36.   WINDOW_X = 0
  37.   WINDOW_Y = 0
  38.   
  39.   #-------------睡眠时间定义----------------
  40.   # 小时
  41.   SLEEP_TIME_HOUR = 8
  42.   # 分
  43.   SLEEP_TIME_MIN = 0
  44.   # 秒
  45.   SLEEP_TIME_SEC = 0
  46. =begin

  47.   ---------------------------------------
  48.              时间间隔的判断
  49.   ---------------------------------------
  50.   1. 首先需要先定义一个计时器
  51.     $game_system.set_byz_timer(id)
  52.     其中的 id 可以是任何数字,字符串。
  53.   2. 然后在需要计算时间间隔的地方使用 条件分歧 里的脚本, 里面可以写上
  54.     $game_system.after_time(id) > 5
  55.     这里的 id 要和定义的时候一致。 这个的意思是 时间经过 5秒后.....
  56.    
  57. =end
  58. end
  59.   
  60. #==============================================================================
  61. # ■ Game_System
  62. #------------------------------------------------------------------------------
  63. #  处理系统附属数据的类。也可执行诸如交通工具、 BGM 等管理之类的功能。
  64. # 本类的实例请参考$game_system 。
  65. #==============================================================================

  66. class Game_System
  67.   #--------------------------------------------------------------------------
  68.   # ● 定义实例变量
  69.   #--------------------------------------------------------------------------  
  70.   attr_accessor :time_now
  71.   attr_accessor :byz_timer
  72.   attr_accessor :run_time
  73.   #--------------------------------------------------------------------------
  74.   # ● 初始化对像
  75.   #--------------------------------------------------------------------------  
  76.   alias old_initialize initialize
  77.   def initialize
  78.     if Time_byz::TIME_MODULE
  79.       year = Time_byz::INIT_TIME[5];
  80.       mon  = Time_byz::INIT_TIME[4];
  81.       day  = Time_byz::INIT_TIME[3];
  82.       hour = Time_byz::INIT_TIME[2];
  83.       min  = Time_byz::INIT_TIME[1];
  84.       sec  = Time_byz::INIT_TIME[0];
  85.       @time_now = Time.local(year, mon, day, hour, min, sec);
  86.     else
  87.       @time_now = Time.new;
  88.     end
  89.     @byz_timer = [];
  90.     @run_time = true;
  91.     old_initialize
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 增加时间
  95.   #--------------------------------------------------------------------------  
  96.   def add_time(unit)
  97.     case unit
  98.     when 4
  99.       @time_now += 3600 * 24;
  100.     when 3
  101.       @time_now += 1;
  102.     when 2
  103.       @time_now += 60;
  104.     when 1
  105.       @time_now += 3600;
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 设定时间计时器
  110.   #--------------------------------------------------------------------------  
  111.   def set_byz_timer(id)
  112.     @byz_timer[id] = @time_now;
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 计算时间 (秒数)
  116.   #--------------------------------------------------------------------------
  117.   def after_time(id)
  118.     return 0 if @byz_timer[id] == nil;
  119.     return @time_now - @byz_timer[id];
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 返回时间[秒,分,时,日,月, 年, 星期]
  123.   #--------------------------------------------------------------------------  
  124.   def return_time(type, array_time)
  125.     logo = 6;
  126.     now_time = [];
  127.     loop do
  128.       counts_the_power = type /(10 ** logo);
  129.       type %= 10 ** logo;
  130.       if counts_the_power == 1;
  131.         case logo
  132.         when 6
  133.           times = @time_now.sec;
  134.         when 5
  135.           times = @time_now.min;
  136.         when 4
  137.           times = @time_now.hour;
  138.         when 3
  139.           times = @time_now.mday;
  140.         when 2
  141.           times = @time_now.mon;
  142.         when 1
  143.           times = @time_now.year;
  144.         when 0
  145.           times = @time_now.wday;
  146.         end
  147.         now_time.push(times);
  148.       end
  149.       logo -= 1;
  150.       break if logo < 0;
  151.     end
  152.     return now_time == array_time;
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 时间跳跃 1..时;2..分;3..秒
  156.   #--------------------------------------------------------------------------
  157.   def bound_times(type, number)
  158.     case type
  159.     when 3
  160.       @time_now += number;
  161.     when 2
  162.       @time_now += 60 * number;
  163.     when 1
  164.       @time_now += 3600 * number;
  165.     end
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 睡眠
  169.   #--------------------------------------------------------------------------  
  170.   def sleep_time
  171.     hour = Time_byz::SLEEP_TIME_HOUR % 24;
  172.     min = Time_byz::SLEEP_TIME_MIN % 60;
  173.     sec = Time_byz::SLEEP_TIME_SEC % 60;
  174.     @time_now += 3600 * 24;
  175.     year = @time_now.year
  176.     mon  = @time_now.mon
  177.     day  = @time_now.mday
  178.     @time_now = Time.local(year, mon, day, hour, min, sec);
  179.   end
  180.   
  181. end
  182. #==============================================================================
  183. # ■ Window_Byz_Time
  184. #------------------------------------------------------------------------------
  185. #  调试画面、个别显示开关及变量的窗口。
  186. #==============================================================================

  187. class Window_Byz_Time < Window_Base
  188.   #--------------------------------------------------------------------------
  189.   # ● 初始化对像
  190.   #     x      : 窗口 X 座标
  191.   #     y      : 窗口 Y 座标
  192.   #--------------------------------------------------------------------------
  193.   def initialize(x, y)
  194.     super(x, y, 170, 87);
  195.     if Time_byz::TIME_MODULE
  196.       @time_speed = Time_byz::TIME_SPEED;
  197.     else
  198.       @time_speed = 60;
  199.     end
  200.     @time = @time_speed - 1;
  201.     refresh;
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 刷新
  205.   #--------------------------------------------------------------------------
  206.   def refresh
  207.     return unless $game_system.run_time;
  208.     @time += 1;
  209.     if @time_speed == @time;
  210.       $game_system.add_time(Time_byz::TIME_UNIT);
  211.       draw_time($game_system.time_now);
  212.       event_run;
  213.       @time = 0;
  214.     end
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 描绘
  218.   #--------------------------------------------------------------------------
  219.   def draw_time(time)
  220.     self.contents.clear;
  221.     text = $game_system.time_now.strftime("%X")
  222.     self.contents.draw_text(0, 0, 105, WLH, text, 2);
  223.     text = $game_system.time_now.strftime("%Y年%m月%d日");
  224.     self.contents.draw_text(0, 32, 170, WLH, text);
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● 启动事件
  228.   #--------------------------------------------------------------------------
  229.   def event_run
  230.     array = ($game_system.time_now.to_a)[0,6];
  231.     if Time_byz::TIME_EVENT[array] != nil
  232.       unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
  233.         variables_id     = Time_byz::TIME_EVENT[array][0];
  234.         variables_number = Time_byz::TIME_EVENT[array][1];
  235.         commonevent_id   = Time_byz::TIME_EVENT[array][2];
  236.         $game_variables[variables_id] = variables_number;
  237.         $game_temp.common_event_id = commonevent_id;
  238.       end
  239.     end
  240.   end
  241. end
  242. #==============================================================================
  243. # ■ Scene_Map
  244. #------------------------------------------------------------------------------
  245. #  处理地图画面的类。
  246. #==============================================================================

  247. class Scene_Map < Scene_Base
  248.   
  249.   alias old_start start
  250.   #--------------------------------------------------------------------------
  251.   # ● 开始处理
  252.   #--------------------------------------------------------------------------
  253.   def start
  254.     old_start;
  255.     @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
  256.   end
  257.   alias old_terminate terminate
  258.   #--------------------------------------------------------------------------
  259.   # ● 结束处理
  260.   #--------------------------------------------------------------------------
  261.   def terminate
  262.     old_terminate;
  263.     @time_window.dispose;
  264.   end
  265.   alias old_update update
  266.   #--------------------------------------------------------------------------
  267.   # ● 更新画面
  268.   #--------------------------------------------------------------------------
  269.   def update
  270.     old_update;
  271.     @time_window.refresh;
  272.   end
  273. end
复制代码


用法: 调用 $game_system.sleep_time 即可。
       睡眠之后的时间设定参照 脚本 41 行~~~ [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: zhanghao    时间: 2009-2-12 03:29
很棒,但时间判断有什么用呢?
作者: 八云紫    时间: 2009-2-12 06:54
以下引用zhanghao于2009-2-11 19:29:27的发言:

很棒,但时间判断有什么用呢?


比如说,可以用来判断现在是不是 09年7月8日  ,是的话,就触发剧情什么的~~~~
作者: zhanghao    时间: 2009-2-13 04:38
那个判断时间怎么用啊
作者: 八云紫    时间: 2009-2-13 04:41
吾不是有说明么?

1.判断时间
   调用函数: $game_system.return_time(标志, 判断的时间)
   用法:
     按照 [秒,分,时,日,月, 年, 星期] 的顺序设置 标准 。 比如 要判断 年月,就这么写
[秒,分,时,日,月, 年, 星期]
  0  0  0  0  1   1   0         所以, 标志就是 0000110 。
     然后 判断的时间 写上要判断的具体时间 上例就是 [5, 2009], 注意,一定要用  [] 括起来。





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1