设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
123
返回列表 发新帖
楼主: zhanghao
打印 上一主题 下一主题

改下八云紫的时间脚本

 关闭 [复制链接]

Lv2.观梦者

神隐的主犯

梦石
0
星屑
278
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

21
发表于 2009-2-12 02:43:31 | 只看该作者
  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 行~~~
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
180 小时
注册时间
2008-2-6
帖子
92
22
 楼主| 发表于 2009-2-12 03:29:27 | 只看该作者
很棒,但时间判断有什么用呢?
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
278
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

23
发表于 2009-2-12 06:54:48 | 只看该作者
以下引用zhanghao于2009-2-11 19:29:27的发言:

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


比如说,可以用来判断现在是不是 09年7月8日  ,是的话,就触发剧情什么的~~~~

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
180 小时
注册时间
2008-2-6
帖子
92
24
 楼主| 发表于 2009-2-13 04:38:10 | 只看该作者
那个判断时间怎么用啊
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
278
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

25
发表于 2009-2-13 04:41:18 | 只看该作者
吾不是有说明么?

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

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

//
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-1 07:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表