Project1

标题: [VX] 简易时间脚本 [打印本页]

作者: 八云紫    时间: 2008-10-19 20:25
标题: [VX] 简易时间脚本
先贴上范例:

http://rpg.blue/upload_program/d/八云紫_时间_104847546.rar

使用说明脚本里有说。

功能:
   1. 在地图上显示 时间;
   2. 在 某个 时间里调用事件, 比如 10点 的时候,说话;(举例,举例)

   

   3. 可以计算 时间间隔,可以做出 “种树, 过 60 秒,然后摘果实” 这样的效果。

[LINE]1,#dddddd[/LINE]

以下是代码:

  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.   #--------------------------------------------------------------------------
  66.   # ● 初始化对像
  67.   #--------------------------------------------------------------------------  
  68.   alias old_initialize initialize
  69.   def initialize
  70.     if Time_byz::TIME_MODULE
  71.       year = Time_byz::INIT_TIME[5];
  72.       mon  = Time_byz::INIT_TIME[4];
  73.       day  = Time_byz::INIT_TIME[3];
  74.       hour = Time_byz::INIT_TIME[2];
  75.       min  = Time_byz::INIT_TIME[1];
  76.       sec  = Time_byz::INIT_TIME[0];
  77.       @time_now = Time.local(year, mon, day, hour, min, sec);
  78.     else
  79.       @time_now = Time.new;
  80.     end
  81.     @byz_timer = []
  82.     old_initialize
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 增加时间
  86.   #--------------------------------------------------------------------------  
  87.   def add_time(unit)
  88.     case unit
  89.     when 3
  90.       @time_now += 1;
  91.     when 2
  92.       @time_now += 60;
  93.     when 1
  94.       @time_now += 3600;
  95.     end
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 设定时间计时器
  99.   #--------------------------------------------------------------------------  
  100.   def set_byz_timer(id)
  101.     @byz_timer[id] = @time_now;
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 计算时间 (秒数)
  105.   #--------------------------------------------------------------------------
  106.   def after_time(id)
  107.     return 0 if @byz_timer[id] == nil;
  108.     return @time_now - @byz_timer[id];
  109.   end
  110. end
  111. #==============================================================================
  112. # ■ Window_Byz_Time
  113. #------------------------------------------------------------------------------
  114. #  调试画面、个别显示开关及变量的窗口。
  115. #==============================================================================

  116. class Window_Byz_Time < Window_Base
  117.   #--------------------------------------------------------------------------
  118.   # ● 初始化对像
  119.   #     x      : 窗口 X 座标
  120.   #     y      : 窗口 Y 座标
  121.   #--------------------------------------------------------------------------
  122.   def initialize(x, y)
  123.     super(x, y, 170, 87);
  124.     if Time_byz::TIME_MODULE
  125.       @time_speed = Time_byz::TIME_SPEED;
  126.     else
  127.       @time_speed = 60;
  128.     end
  129.     @time = @time_speed - 1;
  130.     refresh;
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 刷新
  134.   #--------------------------------------------------------------------------
  135.   def refresh
  136.     @time += 1;
  137.     if @time_speed == @time;
  138.       $game_system.add_time(Time_byz::TIME_UNIT);
  139.       draw_time($game_system.time_now);
  140.       event_run;
  141.       @time = 0;
  142.     end
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 描绘
  146.   #--------------------------------------------------------------------------
  147.   def draw_time(time)
  148.     self.contents.clear;
  149.     text = $game_system.time_now.strftime("%X")
  150.     self.contents.draw_text(0, 0, 105, WLH, text, 2);
  151.     text = $game_system.time_now.strftime("%Y年%m月%d日");
  152.     self.contents.draw_text(0, 32, 170, WLH, text);
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 启动事件
  156.   #--------------------------------------------------------------------------
  157.   def event_run
  158.     array = ($game_system.time_now.to_a)[0,6];
  159.     if Time_byz::TIME_EVENT[array] != nil
  160.       unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
  161.         variables_id     = Time_byz::TIME_EVENT[array][0];
  162.         variables_number = Time_byz::TIME_EVENT[array][1];
  163.         commonevent_id   = Time_byz::TIME_EVENT[array][2];
  164.         $game_variables[variables_id] = variables_number;
  165.         $game_temp.common_event_id = commonevent_id;
  166.       end
  167.     end
  168.   end
  169. end
  170. #==============================================================================
  171. # ■ Scene_Map
  172. #------------------------------------------------------------------------------
  173. #  处理地图画面的类。
  174. #==============================================================================

  175. class Scene_Map < Scene_Base
  176.   
  177.   alias old_start start
  178.   #--------------------------------------------------------------------------
  179.   # ● 开始处理
  180.   #--------------------------------------------------------------------------
  181.   def start
  182.     old_start;
  183.     @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
  184.   end
  185.   alias old_terminate terminate
  186.   #--------------------------------------------------------------------------
  187.   # ● 结束处理
  188.   #--------------------------------------------------------------------------
  189.   def terminate
  190.     old_terminate;
  191.     @time_window.dispose;
  192.   end
  193.   alias old_update update
  194.   #--------------------------------------------------------------------------
  195.   # ● 更新画面
  196.   #--------------------------------------------------------------------------
  197.   def update
  198.     old_update;
  199.     @time_window.refresh;
  200.   end
  201. end
复制代码

作者: 木葬枫    时间: 2008-10-19 20:27
好像说明了不能用吧?
[LINE]1,#dddddd[/LINE]
脚本使用权归塑望所有?
作者: 八云紫    时间: 2008-10-19 20:29
以下引用木葬枫于2008-10-19 12:27:19的发言:

好像说明了不能用吧?

脚本使用权归塑望所有?

[本贴由作者于 2008-10-19 12:28:03 最后编辑]


嘛,这个是 不厚道 的改进版。{/tp}

而且, 他的申请没有按照规则。(好吧,规则是在他之后定的)
作者: 木葬枫    时间: 2008-10-19 20:36
呐……那就不厚道地收下了………
[LINE]1,#dddddd[/LINE]
回去可以种花了………
>_<
作者: 約束    时间: 2008-10-20 02:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2008-10-20 02:27
以下引用約束于2008-10-19 18:23:49的发言:

种八云紫-=

春天在园子播下种子,到了秋天……

什么?种出一堆八云紫? 你错了-=

其实有八云紫,八云蓝,八云橙,八云绿,八云黄……


彩虹啊????
作者: 約束    时间: 2008-10-20 02:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 千落樱·念晓    时间: 2008-10-20 02:43
种樱花………
种出来后折下来放主人房间里……
>_<
作者: 塑望    时间: 2008-10-20 18:18
{/fd}.....原来你已经发布了....话说发到技术区....

{/hx}为人民服务的好娃子..捏
作者: 八云紫    时间: 2008-10-20 18:19
以下引用塑望于2008-10-20 10:18:40的发言:

.....原来你已经发布了....话说发到技术区....

为人民服务的好娃子..捏


技术区人少,先放在 提问区 晾几天,然后我自己再转到 技术区去。
作者: link006007    时间: 2008-10-20 19:04
RM 有一个bug  就是公共事件的"抢用"(个人术语)... ...{/gg}
作者: 八云紫    时间: 2008-10-21 05:31
以下引用link006007于2008-10-20 11:04:47的发言:

RM 有一个bug  就是公共事件的"抢用"(个人术语)... ...


那个是啥?
作者: link006007    时间: 2008-10-23 05:28
以下引用八云紫于2008-10-20 21:31:55的发言:
那个是啥?

我也不知道该怎么表达 =- =
作者: 八云紫    时间: 2008-10-23 05:38
就是 提前使用 嘛?
作者: link006007    时间: 2008-10-23 05:56
不是  ..
应该是重复设置   导致前面的无效
作者: 八云紫    时间: 2008-10-23 06:01
这个,要看 公共事件 如何写了吧?
作者: 沉影不器    时间: 2008-10-23 06:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2008-10-23 06:06
算了  很早以前发现的   现在没有RM  无法证实...  当我没说过吧
作者: 越前リョーマ    时间: 2008-10-25 02:50
话说种树等60秒什么的并行+等待不就好了嘛,不调用变量开关应该不卡的。

那个时间是现实的还是……
作者: 八云紫    时间: 2008-10-25 20:09
以下引用越前リョーマ于2008-10-24 18:50:59的发言:

话说种树等60秒什么的并行+等待不就好了嘛,不调用变量开关应该不卡的。

那个时间是现实的还是……


如果事件多了的话,就会卡了。

时间可以自己设定,也可以用现实的时间。
作者: link006007    时间: 2008-10-26 06:29

以下引用沉影不器于2008-10-22 22:02:28的发言:
啥?在什么情况下?

我想太多了 -  -  {/gg}
RM原脚本对于这方面还是很好的
作者: 精灵使者    时间: 2010-11-28 16:02
抢用主要发生在自动的公共事件下面。所以同时运行的自动的公共事件不能超过2个。改为并行事件则没有问题。




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