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

Project1

 找回密码
 注册会员
搜索
查看: 3706|回复: 12
打印 上一主题 下一主题

[已经解决] 关于八云紫 时间脚本 的几个问题~~谢谢!!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
211 小时
注册时间
2010-12-30
帖子
85
跳转到指定楼层
1
发表于 2011-3-14 09:20:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yanglibin0409 于 2011-3-19 22:33 编辑

1.        初始时间如何更改?? 因为做的古代的,默认2008年明显不行,但是如果自行更改比如208年会出现
  时间 83行 发生 ArgumentError argument out of  range 。

2.        是否可以实现 如果 保存 或者是 读取记录 的时候 跳跃 时间,比如 读取一次记录,时间从 2008年1月1日08时00分 ,变成2008年1月1日08时10分。这样可以防止恶意S/L -  -

3. “地图坐标及地图名显示”脚本 和 “时间”脚本 是否可以兼容。  附件里有工程~~

当“地图坐标及地图名显示”脚本位置在“时间”脚本前方时,点击“开始游戏”会出现
    脚本 地图坐标及地图名显示 第100行 发生了System Stack Error stack level too deep(以下第100行内容)
alias old_start start
def start
   old_start
   @pos_window = Window_Pos.new
   @mapname_window = Window_MapName.new
end

当“时间”脚本位置在“地图坐标及地图名显示”脚本前方时,点击“开始游戏”会出现
脚本 时间 的第190行发生了System Stack Error stack level too deep(以下为第190行内容)
alias old_start start
def start
    old_start;
    @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
  end

Project4.rar

240.95 KB, 下载次数: 36

Lv1.梦旅人

百合乡の蕾咪

梦石
0
星屑
55
在线时间
151 小时
注册时间
2011-1-12
帖子
198
2
发表于 2011-3-14 16:19:42 | 只看该作者
1. Time 类的时间最低不能超过 1970.01.01 所以, 咱看看能不能换一个算法.

2. 添加中.

3. 已修改.

点评

计算机的系统时间最低只能到 1970. 在之前的就没有记录了~~  发表于 2011-3-16 16:53
不能低于1970是为什么= =  发表于 2011-3-16 11:44
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
211 小时
注册时间
2010-12-30
帖子
85
3
 楼主| 发表于 2011-3-16 09:31:09 | 只看该作者
回复 蕾米莉亚·斯卡雷特 的帖子

好人啊,多谢, 期待中~~~
回复

使用道具 举报

Lv1.梦旅人

百合乡の蕾咪

梦石
0
星屑
55
在线时间
151 小时
注册时间
2011-1-12
帖子
198
4
发表于 2011-3-16 20:45:53 | 只看该作者
本帖最后由 蕾米莉亚·斯卡雷特 于 2011-3-17 08:06 编辑
  1. #===============================================================================
  2. # ■ 简易时间系统
  3. #-------------------------------------------------------------------------------
  4. #    脚本说明及使用方法
  5. #   
  6. #-------------------------------------------------------------------------------
  7. #    更新作者: 蕾米莉亚·斯卡雷特
  8. #    许可协议: NCP NAM STS
  9. #    项目版本: 1.0.20110309
  10. #    引用网址:
  11. #-------------------------------------------------------------------------------
  12. #    - 3.0.20110316  By 蕾米莉亚·斯卡雷特
  13. #      * 换了一个 Time 类.
  14. #    - 3.1.20110316  By 蕾米莉亚·斯卡雷特
  15. #      * 优化 Time 类计算方式.
  16. #
  17. #===============================================================================
  18. $fscript = {} if $fscript == nil
  19. $fscript["Remilia Time"] = "3.1.20110316"

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

  60.   ---------------------------------------
  61.              时间间隔的判断
  62.   ---------------------------------------
  63.   1. 首先需要先定义一个计时器
  64.     $game_system.set_byz_timer(id)
  65.     其中的 id 可以是任何数字,字符串。
  66.   2. 然后在需要计算时间间隔的地方使用 条件分歧 里的脚本, 里面可以写上
  67.     $game_system.after_time(id) > 5
  68.     这里的 id 要和定义的时候一致。 这个的意思是 时间经过 5秒后.....
  69.    
  70. =end
  71. end
  72. end

  73. class Remilia_Time
  74.   #--------------------------------------------------------------------------
  75.   # ● 常量定义
  76.   #--------------------------------------------------------------------------  
  77.   BIG_MON = [1, 3, 5, 7, 8, 10, 12]
  78.   SMALL_MON = [4, 6, 9, 11]
  79.   WDAY_VOCAB = [nil, "一", "二", "三", "四", "五", "六", "日"]
  80.   WDAY = 6
  81.   SEC = 5
  82.   MIN = 4
  83.   HOUR = 3
  84.   DAY = 2
  85.   MON = 1
  86.   YEAR = 0
  87.   #--------------------------------------------------------------------------
  88.   # ● 初始化
  89.   #--------------------------------------------------------------------------  
  90.   def initialize(year, mon, day, hour, min, sec, wday)
  91.     set_time(year, mon, day, hour, min, sec, wday)
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 接口
  95.   #--------------------------------------------------------------------------  
  96.   def sec;  @time[SEC];   end
  97.   def min;  @time[MIN];   end
  98.   def hour; @time[HOUR];  end
  99.   def mday; @time[DAY];   end
  100.   def mon;  @time[MON];   end
  101.   def wday; @time[WDAY];  end
  102.   #--------------------------------------------------------------------------
  103.   # ● 调整
  104.   #--------------------------------------------------------------------------
  105.   def to_a
  106.     [@time[SEC], @time[MIN], @time[HOUR], @time[DAY], @time[MON], @time[YEAR]]
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 设定时间
  110.   #--------------------------------------------------------------------------  
  111.   def set_time(year, mon, day, hour, min, sec, wday)
  112.     @time = [year, mon, day, hour, min, sec, wday]
  113.     improve
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 重定义 +
  117.   #--------------------------------------------------------------------------  
  118.   def +(number)
  119.     add_time(number, SEC)
  120.     return self
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 增加时间
  124.   #--------------------------------------------------------------------------  
  125.   def add_time(number, type)
  126.     @time[type] += number
  127.     improve
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 判断闰年
  131.   #--------------------------------------------------------------------------
  132.   def leap_year?
  133.     year = @time[YEAR]
  134.     return (year % 4 == 0 and (year % 100 != 0 or year % 400 == 0))
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 计算该月的总天数
  138.   #--------------------------------------------------------------------------
  139.   def total_day
  140.     day = 0
  141.     if SMALL_MON.include?(@time[MON])
  142.       day = 30
  143.     elsif BIG_MON.include?(@time[MON])
  144.       day = 31
  145.     elsif @time[MON] == 2 and leap_year?
  146.       day = 29
  147.     else
  148.       day = 28
  149.     end
  150.     return day
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 调整时间
  154.   #--------------------------------------------------------------------------
  155.   def improve
  156.     if @time[SEC] >= 60
  157.       @time[MIN] += @time[SEC] / 60
  158.       @time[SEC] %= 60
  159.     end
  160.     if @time[MIN] >= 60
  161.       @time[HOUR] += @time[MIN] / 60
  162.       @time[MIN] %= 60
  163.     end
  164.     if @time[HOUR] >= 24
  165.       n = @time[HOUR] / 24
  166.       @time[HOUR] %= 24
  167.       @time[DAY] += n
  168.       @time[WDAY] = (@time[WDAY] + n) % 7
  169.     end
  170.     day = 28
  171.     while @time[DAY] > day
  172.       day = total_day
  173.       if @time[DAY] > day
  174.         @time[DAY] -= day
  175.         @time[MON] += 1
  176.       end
  177.     end
  178.     if @time[MON] > 12
  179.       @time[MON] -= 12
  180.       @time[YEAR] += 1
  181.     end
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 格式化时间
  185.   #--------------------------------------------------------------------------
  186.   def strftime(format)
  187.     format_time = format.clone
  188.     format_time.gsub!(/%Y/i) do |s|
  189.       s = @time[YEAR].to_s
  190.     end
  191.     format_time.gsub!(/%(|\d\d)M/i) do |s|
  192.       s = $1 ? sprintf("%#{$1}d", @time[MON]) : @time[MON].to_s
  193.     end
  194.     format_time.gsub!(/%(|\d\d)D/i) do |s|
  195.       s = $1 ? sprintf("%#{$1}d", @time[DAY]) : @time[DAY].to_s
  196.     end
  197.     format_time.gsub!(/%(|\d\d)H/i) do |s|
  198.       s = $1 ? sprintf("%#{$1}d", @time[HOUR]) : @time[HOUR].to_s
  199.     end
  200.     format_time.gsub!(/%(|\d\d)MI/i) do |s|
  201.       s = $1 ? sprintf("%#{$1}d", @time[MIN]) : @time[MIN].to_s
  202.     end
  203.     format_time.gsub!(/%(|\d\d)S/i) do |s|
  204.       s = $1 ? sprintf("%#{$1}d", @time[SEC]) : @time[SEC].to_s
  205.     end
  206.     format_time.gsub!(/%X/i) do |s|
  207.       s = sprintf("%02d:%02d:%02d", @time[HOUR], @time[MIN], @time[SEC])
  208.     end
  209.     format_time.gsub!(/%W/i) do |s|
  210.       s = "星期#{WDAY_VOCAB[@time[WDAY] + 1]}"
  211.     end
  212.     return format_time
  213.   end
  214. end

  215. #==============================================================================
  216. # ■ Game_System
  217. #------------------------------------------------------------------------------
  218. #  处理系统附属数据的类。也可执行诸如交通工具、 BGM 等管理之类的功能。
  219. # 本类的实例请参考$game_system 。
  220. #==============================================================================

  221. class Game_System
  222.   include FSL
  223.   #--------------------------------------------------------------------------
  224.   # ● 定义实例变量
  225.   #--------------------------------------------------------------------------  
  226.   attr_accessor :time_now
  227.   attr_accessor :byz_timer
  228.   attr_accessor :run_time
  229.   #--------------------------------------------------------------------------
  230.   # ● 初始化对像
  231.   #--------------------------------------------------------------------------  
  232.   alias old_initialize initialize
  233.   def initialize
  234.     if Time_byz::TIME_MODULE
  235.       wday = Time_byz::INIT_TIME[6];
  236.       year = Time_byz::INIT_TIME[5];
  237.       mon  = Time_byz::INIT_TIME[4];
  238.       day  = Time_byz::INIT_TIME[3];
  239.       hour = Time_byz::INIT_TIME[2];
  240.       min  = Time_byz::INIT_TIME[1];
  241.       sec  = Time_byz::INIT_TIME[0];
  242.       @time_now = Remilia_Time.new(year, mon, day, hour, min, sec, wday);
  243.     else
  244.       @time_now = Time.new;
  245.     end
  246.     @byz_timer = [];
  247.     @run_time = true;
  248.     old_initialize
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 增加时间
  252.   #--------------------------------------------------------------------------  
  253.   def add_time(unit)
  254.     case unit
  255.     when 4
  256.       @time_now += 3600 * 24;
  257.     when 3
  258.       @time_now += 1;
  259.     when 2
  260.       @time_now += 60;
  261.     when 1
  262.       @time_now += 3600;
  263.     end
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● 设定时间计时器
  267.   #--------------------------------------------------------------------------  
  268.   def set_byz_timer(id)
  269.     @byz_timer[id] = @time_now.clone;
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 计算时间 (秒数)
  273.   #--------------------------------------------------------------------------
  274.   def after_time(id)
  275.     return 0 if @byz_timer[id] == nil;
  276.     return @time_now - @byz_timer[id];
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 返回时间[秒,分,时,日,月, 年, 星期]
  280.   #--------------------------------------------------------------------------  
  281.   def return_time(type, array_time)
  282.     logo = 6;
  283.     now_time = [];
  284.     loop do
  285.       counts_the_power = type /(10 ** logo);
  286.       type %= 10 ** logo;
  287.       if counts_the_power == 1;
  288.         case logo
  289.         when 6
  290.           times = @time_now.sec;
  291.         when 5
  292.           times = @time_now.min;
  293.         when 4
  294.           times = @time_now.hour;
  295.         when 3
  296.           times = @time_now.mday;
  297.         when 2
  298.           times = @time_now.mon;
  299.         when 1
  300.           times = @time_now.year;
  301.         when 0
  302.           times = @time_now.wday;
  303.         end
  304.         now_time.push(times);
  305.       end
  306.       logo -= 1;
  307.       break if logo < 0;
  308.     end
  309.     return now_time == array_time;
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 时间跳跃 1..时;2..分;3..秒
  313.   #--------------------------------------------------------------------------
  314.   def bound_times(type, number)
  315.     case type
  316.     when 3
  317.       @time_now += number;
  318.     when 2
  319.       @time_now += 60 * number;
  320.     when 1
  321.       @time_now += 3600 * number;
  322.     end
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 睡眠
  326.   #--------------------------------------------------------------------------  
  327.   def sleep_time
  328.     hour = Time_byz::SLEEP_TIME_HOUR % 24;
  329.     min = Time_byz::SLEEP_TIME_MIN % 60;
  330.     sec = Time_byz::SLEEP_TIME_SEC % 60;
  331.     @time_now += 3600 * 24;
  332.     year = @time_now.year
  333.     mon  = @time_now.mon
  334.     day  = @time_now.mday
  335.     @time_now = Time.local(year, mon, day, hour, min, sec);
  336.   end
  337.   
  338. end
  339. #==============================================================================
  340. # ■ Window_Byz_Time
  341. #------------------------------------------------------------------------------
  342. #  调试画面、个别显示开关及变量的窗口。
  343. #==============================================================================

  344. class Window_Byz_Time < Window_Base
  345.   include FSL
  346.   #--------------------------------------------------------------------------
  347.   # ● 初始化对像
  348.   #     x      : 窗口 X 座标
  349.   #     y      : 窗口 Y 座标
  350.   #--------------------------------------------------------------------------
  351.   def initialize(x, y)
  352.     super(x, y, 170, 87);
  353.     if Time_byz::TIME_MODULE
  354.       @time_speed = Time_byz::TIME_SPEED;
  355.     else
  356.       @time_speed = 60;
  357.     end
  358.     @time = @time_speed - 1;
  359.     refresh;
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● 刷新
  363.   #--------------------------------------------------------------------------
  364.   def refresh
  365.     return unless $game_system.run_time;
  366.     @time += 1;
  367.     if @time_speed == @time;
  368.       $game_system.add_time(Time_byz::TIME_UNIT);
  369.       draw_time($game_system.time_now);
  370.       event_run;
  371.       @time = 0;
  372.     end
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● 描绘
  376.   #--------------------------------------------------------------------------
  377.   def draw_time(time)
  378.     self.contents.clear;
  379.     text = $game_system.time_now.strftime("%X")
  380.     self.contents.draw_text(0, 0, 105, WLH, text, 2);
  381.     text = $game_system.time_now.strftime("%Y年%m月%d日");
  382.     self.contents.draw_text(0, 32, 170, WLH, text);
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ● 启动事件
  386.   #--------------------------------------------------------------------------
  387.   def event_run
  388.     array = ($game_system.time_now.to_a)[0,6];
  389.     if Time_byz::TIME_EVENT[array] != nil
  390.       unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
  391.         variables_id     = Time_byz::TIME_EVENT[array][0];
  392.         variables_number = Time_byz::TIME_EVENT[array][1];
  393.         commonevent_id   = Time_byz::TIME_EVENT[array][2];
  394.         $game_variables[variables_id] = variables_number;
  395.         $game_temp.common_event_id = commonevent_id;
  396.       end
  397.     end
  398.   end
  399. end
  400. #==============================================================================
  401. # ■ Scene_Map
  402. #------------------------------------------------------------------------------
  403. #  处理地图画面的类。
  404. #==============================================================================

  405. class Scene_Map < Scene_Base
  406.   include FSL
  407.   alias :remilia_time_start :start
  408.   #--------------------------------------------------------------------------
  409.   # ● 开始处理
  410.   #--------------------------------------------------------------------------
  411.   def start
  412.     remilia_time_start;
  413.     @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
  414.   end
  415.   alias remilia_time_terminate terminate
  416.   #--------------------------------------------------------------------------
  417.   # ● 结束处理
  418.   #--------------------------------------------------------------------------
  419.   def terminate
  420.     remilia_time_terminate;
  421.     @time_window.dispose;
  422.   end
  423.   alias remilia_time_update update
  424.   #--------------------------------------------------------------------------
  425.   # ● 更新画面
  426.   #--------------------------------------------------------------------------
  427.   def update
  428.     remilia_time_update;
  429.     @time_window.refresh;
  430.   end
  431. end

  432.    
复制代码
换了一个核心. 越来越渣了. ���

点评

啊咧, 和 WIKI 上的不一样. 咱感觉这个协议还不错. 就使用了. 反正那堆缩写, 不了解 FSL 的人也不懂就是了. 咱就是其中之一~~~  发表于 2011-3-16 21:29
八云不是FSL成员嘛~(我看错?) http://ftp.66rpg.com/WEB_PLUS/upload_program/goods/fsl.htm 的附加条款没了解那三个,许可协议不是FSL么?  发表于 2011-3-16 21:23
WIKI 挂了. 具体的也不知道. 大概是 NCP NAM STS 这个三个一个是 不能二次发布, 然后是允许修改, 修改后请通知我. 什么的  发表于 2011-3-16 21:05
FSL的模式以及module FSL还有"许可协议: NCP NAM STS"<=不明物令咱非常无奈= =  发表于 2011-3-16 20:56
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2011-1-12
帖子
42
5
发表于 2011-3-16 21:18:34 | 只看该作者
本帖最后由 爱丽丝·玛格特罗依德 于 2011-3-18 17:51 编辑

好吧, 连贴一下, 这个是 LZ 问题2 的插件:
  1. module FSL
  2.   module Time_byz
  3.    
  4.     # 每次读取记录后, 时间跳跃设定(单位 秒)
  5.     LOAD_AFTER_TIME = 60
  6.   end
  7. end

  8. #==============================================================================
  9. # ■ Scene_File
  10. #------------------------------------------------------------------------------
  11. #  存档画面及读档画面的类。
  12. #==============================================================================

  13. lass Scene_File < Scene_Base
  14.   include FSL
  15.   #--------------------------------------------------------------------------
  16.   # ● 读出存档数据
  17.   #     file : 读出存档对象(已开启)
  18.   #--------------------------------------------------------------------------
  19.   alias :remilia_read_save_data :read_save_data
  20.   def read_save_data(file)
  21.     remilia_read_save_data(file)
  22.     $game_system.time_now += Time_byz::LOAD_AFTER_TIME
  23.     File.open(file.path, "wb") do |fp|
  24.       write_save_data(fp)
  25.     end
  26.   end
  27. end
复制代码
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
211 小时
注册时间
2010-12-30
帖子
85
6
 楼主| 发表于 2011-3-17 11:51:55 | 只看该作者
回复 蕾米莉亚·斯卡雷特 的帖子

多谢啊,脚本兼容的问题是解决了。
可是时间脚本 依旧不能用。
我是直接把 你给的两个脚本 放到 原来 八云紫 的工程中, 想 试一下读物记录的效果,结果出现脚本‘Scene_File’的 第210行发生了IOError . not opened for writing

而实验 原来时间脚本的效果,公共事件的 效果 还在,但是那个过几秒钟后触发事件的效果没有了, 八云紫 工程中,小狗对话后($game_system.set_byz_timer(1)),在与右边人对话($game_system.after_time(1) >5,),5秒后结果出现

脚本’时间’的281行 发生了 NoMethodError . undefined method –’ for #<Remilia_Time:Ox19c38 @time= [1000, 2 ,28 , 23, 59,7,2]>

不知什么问题,是不是用法改了,还是需要其他插件之类的??多谢
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2011-1-12
帖子
42
7
发表于 2011-3-18 07:13:02 | 只看该作者
本帖最后由 爱丽丝·玛格特罗依德 于 2011-3-18 07:14 编辑
  1. #===============================================================================
  2. # ■ 简易时间系统
  3. #-------------------------------------------------------------------------------
  4. #    脚本说明及使用方法
  5. #   
  6. #-------------------------------------------------------------------------------
  7. #    更新作者: 蕾米莉亚·斯卡雷特
  8. #    许可协议: NCP NAM STS
  9. #    项目版本: 1.0.20110309
  10. #    引用网址:
  11. #-------------------------------------------------------------------------------
  12. #    - 3.0.20110316  By 蕾米莉亚·斯卡雷特
  13. #      * 重写核心.
  14. #      * 改写 alias 定义, 提高兼容性.
  15. #    - 3.1.20110316  By 蕾米莉亚·斯卡雷特
  16. #      * 优化 Remilia_Time 类计算方式.
  17. #    - 3.2.20110317  By 蕾米莉亚·斯卡雷特
  18. #      * 优化 Remilia_Time 类部分方法.
  19. #      * 添加 Remilia_Time 类部分方法以兼容 Time 类
  20. #      * 修改原脚本遗留下来的部分问题.
  21. #
  22. #===============================================================================
  23. $fscript = {} if $fscript == nil
  24. $fscript["Remilia Time"] = "3.2.20110317"

  25. #-------------------------------------------------------------------------------
  26. # ▼ 通用配置模块
  27. #-------------------------------------------------------------------------------
  28. module FSL
  29.   module Time_byz
  30.   #--------------初始化定义---------------
  31.   #  起始时间 [秒,分,时,日,月,  年, 星期]
  32.   INIT_TIME = [55,58,23,28,02,1000, 2]
  33.   #--------------时间格式定义-------------
  34.   # 时间流失方式
  35.   # true.. 按帧数的倍数流失;false.. 按现实时间流失
  36.   TIME_MODULE = true
  37.   #---------------速度定义----------------
  38.   # 流失速度(越大速度越慢)
  39.   TIME_SPEED = 60
  40.   # 流失速度单位
  41.   # 1..时;2..分;3..秒;4..日
  42.   TIME_UNIT = 3
  43.   
  44.   #---------------事件定义----------------
  45.   TIME_EVENT = {
  46.     # 事件的起始条件就是时间,但是时间的格式要与起始时间的相同。
  47.     # 事件使用的是 公共事件,为了避免使用太多的公共事件,所以增加变量操作,
  48.     # 以便于在相同的公共事件里可以使用条件分歧。
  49.     # [秒,分,时,日,月,  年] => [变量ID,变量改变后的值,公共事件ID],
  50.       [00,59,23,28,02,1000] => [1, 1, 1],
  51.   }  # 这个不要去掉
  52.   
  53.   #---------------窗口定义----------------
  54.   WINDOW_X = 0
  55.   WINDOW_Y = 0
  56.   
  57.   #-------------睡眠时间定义----------------
  58.   # 小时
  59.   SLEEP_TIME_HOUR = 8
  60.   # 分
  61.   SLEEP_TIME_MIN = 0
  62.   # 秒
  63.   SLEEP_TIME_SEC = 0
  64. =begin

  65.   ---------------------------------------
  66.              时间间隔的判断
  67.   ---------------------------------------
  68.   1. 首先需要先定义一个计时器
  69.     $game_system.set_byz_timer(id)
  70.     其中的 id 可以是任何数字,字符串。
  71.   2. 然后在需要计算时间间隔的地方使用 条件分歧 里的脚本, 里面可以写上
  72.     $game_system.after_time(id) > 5
  73.     这里的 id 要和定义的时候一致。 这个的意思是 时间经过 5秒后.....
  74.    
  75. =end
  76. end
  77. end

  78. class Remilia_Time
  79.   #--------------------------------------------------------------------------
  80.   # ● 常量定义
  81.   #--------------------------------------------------------------------------  
  82.   BIG_MON = [1, 3, 5, 7, 8, 10, 12]
  83.   SMALL_MON = [4, 6, 9, 11]
  84.   WDAY_VOCAB = [nil, "一", "二", "三", "四", "五", "六", "日"]
  85.   WDAY = 6
  86.   SEC = 5
  87.   MIN = 4
  88.   HOUR = 3
  89.   DAY = 2
  90.   MON = 1
  91.   YEAR = 0
  92.   #--------------------------------------------------------------------------
  93.   # ● 初始化
  94.   #--------------------------------------------------------------------------  
  95.   def initialize(year, mon, day, hour, min, sec, wday)
  96.     set_time(year, mon, day, hour, min, sec, wday)
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 接口
  100.   #--------------------------------------------------------------------------  
  101.   def sec;  @time[SEC];   end
  102.   def min;  @time[MIN];   end
  103.   def hour; @time[HOUR];  end
  104.   def mday; @time[DAY];   end
  105.   def mon;  @time[MON];   end
  106.   def wday; @time[WDAY];  end
  107.   def year; @time[YEAR];  end
  108.   #--------------------------------------------------------------------------
  109.   # ● 调整
  110.   #--------------------------------------------------------------------------
  111.   def to_a
  112.     [@time[SEC], @time[MIN], @time[HOUR], @time[DAY], @time[MON], @time[YEAR]]
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 设定时间
  116.   #--------------------------------------------------------------------------  
  117.   def set_time(year, mon, day, hour, min, sec, wday)
  118.     @time = [year, mon, day, hour, min, sec, wday]
  119.     improve
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 重定义 +
  123.   #--------------------------------------------------------------------------  
  124.   def +(number)
  125.     add_time(number, SEC)
  126.     return self
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 类型转换
  130.   #--------------------------------------------------------------------------  
  131.   def to_time
  132.     return Time.local(@time[YEAR], @time[MON], @time[DAY], @time[HOUR], @time[MIN], @time[SEC])
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 复制
  136.   #--------------------------------------------------------------------------  
  137.   def clone
  138.     return Remilia_Time.new(@time[YEAR], @time[MON], @time[DAY], @time[HOUR], @time[MIN], @time[SEC], @time[WDAY])
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 重定义 -
  142.   #--------------------------------------------------------------------------  
  143.   def -(time)
  144.     min_year = self.year >= time.year ? time.year : self.year
  145.     gap = min_year < 1980 ? (1980 - min_year) : 0
  146.     save_time1 = self.clone
  147.     save_time1.add_time(gap, YEAR)
  148.     save_time = time.clone
  149.     save_time.add_time(gap, YEAR)
  150.     return save_time1.to_time - save_time.to_time
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 增加时间
  154.   #--------------------------------------------------------------------------  
  155.   def add_time(number, type)
  156.     @time[type] += number
  157.     improve
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 判断闰年
  161.   #--------------------------------------------------------------------------
  162.   def leap_year?
  163.     year = @time[YEAR]
  164.     return (year % 4 == 0 and (year % 100 != 0 or year % 400 == 0))
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 计算该月的总天数
  168.   #--------------------------------------------------------------------------
  169.   def total_day
  170.     day = 0
  171.     if SMALL_MON.include?(@time[MON])
  172.       day = 30
  173.     elsif BIG_MON.include?(@time[MON])
  174.       day = 31
  175.     elsif @time[MON] == 2 and leap_year?
  176.       day = 29
  177.     else
  178.       day = 28
  179.     end
  180.     return day
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 调整时间
  184.   #--------------------------------------------------------------------------
  185.   def improve
  186.     if @time[SEC] >= 60
  187.       @time[MIN] += @time[SEC] / 60
  188.       @time[SEC] %= 60
  189.     end
  190.     if @time[MIN] >= 60
  191.       @time[HOUR] += @time[MIN] / 60
  192.       @time[MIN] %= 60
  193.     end
  194.     if @time[HOUR] >= 24
  195.       n = @time[HOUR] / 24
  196.       @time[HOUR] %= 24
  197.       @time[DAY] += n
  198.       @time[WDAY] = (@time[WDAY] + n) % 7
  199.     end
  200.     while @time[DAY] > 28
  201.       day = total_day
  202.       if @time[DAY] > day
  203.         @time[DAY] -= day
  204.         @time[MON] += 1
  205.       end
  206.     end
  207.     if @time[MON] > 12
  208.       @time[MON] -= 12
  209.       @time[YEAR] += 1
  210.     end
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 格式化时间
  214.   #--------------------------------------------------------------------------
  215.   def strftime(format)
  216.     format_time = format.clone
  217.     format_time.gsub!(/%Y/i) do |s|
  218.       s = @time[YEAR].to_s
  219.     end
  220.     format_time.gsub!(/%(|\d\d)M/i) do |s|
  221.       s = $1 ? sprintf("%#{$1}d", @time[MON]) : @time[MON].to_s
  222.     end
  223.     format_time.gsub!(/%(|\d\d)D/i) do |s|
  224.       s = $1 ? sprintf("%#{$1}d", @time[DAY]) : @time[DAY].to_s
  225.     end
  226.     format_time.gsub!(/%(|\d\d)H/i) do |s|
  227.       s = $1 ? sprintf("%#{$1}d", @time[HOUR]) : @time[HOUR].to_s
  228.     end
  229.     format_time.gsub!(/%(|\d\d)MI/i) do |s|
  230.       s = $1 ? sprintf("%#{$1}d", @time[MIN]) : @time[MIN].to_s
  231.     end
  232.     format_time.gsub!(/%(|\d\d)S/i) do |s|
  233.       s = $1 ? sprintf("%#{$1}d", @time[SEC]) : @time[SEC].to_s
  234.     end
  235.     format_time.gsub!(/%X/i) do |s|
  236.       s = sprintf("%02d:%02d:%02d", @time[HOUR], @time[MIN], @time[SEC])
  237.     end
  238.     format_time.gsub!(/%W/i) do |s|
  239.       s = "星期#{WDAY_VOCAB[@time[WDAY] + 1]}"
  240.     end
  241.     return format_time
  242.   end
  243. end

  244.    

  245. #==============================================================================
  246. # ■ Game_System
  247. #------------------------------------------------------------------------------
  248. #  处理系统附属数据的类。也可执行诸如交通工具、 BGM 等管理之类的功能。
  249. # 本类的实例请参考$game_system 。
  250. #==============================================================================

  251. class Game_System
  252.   include FSL
  253.   #--------------------------------------------------------------------------
  254.   # ● 定义实例变量
  255.   #--------------------------------------------------------------------------  
  256.   attr_accessor :time_now
  257.   attr_accessor :byz_timer
  258.   attr_accessor :run_time
  259.   #--------------------------------------------------------------------------
  260.   # ● 初始化对像
  261.   #--------------------------------------------------------------------------  
  262.   alias old_initialize initialize
  263.   def initialize
  264.     if Time_byz::TIME_MODULE
  265.       wday = Time_byz::INIT_TIME[6];
  266.       year = Time_byz::INIT_TIME[5];
  267.       mon  = Time_byz::INIT_TIME[4];
  268.       day  = Time_byz::INIT_TIME[3];
  269.       hour = Time_byz::INIT_TIME[2];
  270.       min  = Time_byz::INIT_TIME[1];
  271.       sec  = Time_byz::INIT_TIME[0];
  272.       @time_now = Remilia_Time.new(year, mon, day, hour, min, sec, wday);
  273.     else
  274.       @time_now = Time.new;
  275.     end
  276.     @byz_timer = {};
  277.     @run_time = true;
  278.     old_initialize
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 增加时间
  282.   #--------------------------------------------------------------------------  
  283.   def add_time(unit)
  284.     case unit
  285.     when 4
  286.       @time_now += 3600 * 24;
  287.     when 3
  288.       @time_now += 1;
  289.     when 2
  290.       @time_now += 60;
  291.     when 1
  292.       @time_now += 3600;
  293.     end
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ● 设定时间计时器
  297.   #--------------------------------------------------------------------------  
  298.   def set_byz_timer(id)
  299.     @byz_timer[id] = @time_now.clone;
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ● 计算时间 (秒数)
  303.   #--------------------------------------------------------------------------
  304.   def after_time(id)
  305.     return 0 if @byz_timer[id] == nil;
  306.     return @time_now - @byz_timer[id];
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 返回时间[秒,分,时,日,月, 年, 星期]
  310.   #--------------------------------------------------------------------------  
  311.   def return_time(type, array_time)
  312.     logo = 6;
  313.     now_time = [];
  314.     loop do
  315.       counts_the_power = type /(10 ** logo);
  316.       type %= 10 ** logo;
  317.       if counts_the_power == 1;
  318.         case logo
  319.         when 6
  320.           times = @time_now.sec;
  321.         when 5
  322.           times = @time_now.min;
  323.         when 4
  324.           times = @time_now.hour;
  325.         when 3
  326.           times = @time_now.mday;
  327.         when 2
  328.           times = @time_now.mon;
  329.         when 1
  330.           times = @time_now.year;
  331.         when 0
  332.           times = @time_now.wday;
  333.         end
  334.         now_time.push(times);
  335.       end
  336.       logo -= 1;
  337.       break if logo < 0;
  338.     end
  339.     return now_time == array_time;
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● 时间跳跃 1..时;2..分;3..秒
  343.   #--------------------------------------------------------------------------
  344.   def bound_times(type, number)
  345.     case type
  346.     when 3
  347.       @time_now += number;
  348.     when 2
  349.       @time_now += 60 * number;
  350.     when 1
  351.       @time_now += 3600 * number;
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 睡眠
  356.   #--------------------------------------------------------------------------  
  357.   def sleep_time
  358.     hour = Time_byz::SLEEP_TIME_HOUR % 24;
  359.     min = Time_byz::SLEEP_TIME_MIN % 60;
  360.     sec = Time_byz::SLEEP_TIME_SEC % 60;
  361.     @time_now += 3600 * 24;
  362.     year = @time_now.year
  363.     mon  = @time_now.mon
  364.     day  = @time_now.mday
  365.     wday = @time_now.wday
  366.     if Time_byz::TIME_MODULE
  367.       @time_now = Remilia_Time.new(year, mon, day, hour, min, sec, wday)
  368.     else
  369.       @time_now = Time.local(year, mon, day, hour, min, sec)
  370.     end
  371.   end
  372.   
  373. end
  374. #==============================================================================
  375. # ■ Window_Byz_Time
  376. #------------------------------------------------------------------------------
  377. #  调试画面、个别显示开关及变量的窗口。
  378. #==============================================================================

  379. class Window_Byz_Time < Window_Base
  380.   include FSL
  381.   #--------------------------------------------------------------------------
  382.   # ● 初始化对像
  383.   #     x      : 窗口 X 座标
  384.   #     y      : 窗口 Y 座标
  385.   #--------------------------------------------------------------------------
  386.   def initialize(x, y)
  387.     super(x, y, 170, 87);
  388.     if Time_byz::TIME_MODULE
  389.       @time_speed = Time_byz::TIME_SPEED;
  390.     else
  391.       @time_speed = 60;
  392.     end
  393.     @time = @time_speed - 1;
  394.     refresh;
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 刷新
  398.   #--------------------------------------------------------------------------
  399.   def refresh
  400.     return unless $game_system.run_time;
  401.     @time += 1;
  402.     if @time_speed == @time;
  403.       $game_system.add_time(Time_byz::TIME_UNIT);
  404.       draw_time($game_system.time_now);
  405.       event_run;
  406.       @time = 0;
  407.     end
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ● 描绘
  411.   #--------------------------------------------------------------------------
  412.   def draw_time(time)
  413.     self.contents.clear;
  414.     text = $game_system.time_now.strftime("%X")
  415.     self.contents.draw_text(0, 0, 105, WLH, text, 2);
  416.     text = $game_system.time_now.strftime("%Y年%m月%d日");
  417.     self.contents.draw_text(0, 32, 170, WLH, text);
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● 启动事件
  421.   #--------------------------------------------------------------------------
  422.   def event_run
  423.     array = ($game_system.time_now.to_a)[0,6];
  424.     if Time_byz::TIME_EVENT[array] != nil
  425.       unless !$scene.is_a?(Scene_Map) or $game_message.visible or $game_temp.in_battle
  426.         variables_id     = Time_byz::TIME_EVENT[array][0];
  427.         variables_number = Time_byz::TIME_EVENT[array][1];
  428.         commonevent_id   = Time_byz::TIME_EVENT[array][2];
  429.         $game_variables[variables_id] = variables_number;
  430.         $game_temp.common_event_id = commonevent_id;
  431.       end
  432.     end
  433.   end
  434. end
  435. #==============================================================================
  436. # ■ Scene_Map
  437. #------------------------------------------------------------------------------
  438. #  处理地图画面的类。
  439. #==============================================================================

  440. class Scene_Map < Scene_Base
  441.   include FSL
  442.   alias :remilia_time_start :start
  443.   #--------------------------------------------------------------------------
  444.   # ● 开始处理
  445.   #--------------------------------------------------------------------------
  446.   def start
  447.     remilia_time_start;
  448.     @time_window = Window_Byz_Time.new(Time_byz::WINDOW_X, Time_byz::WINDOW_Y);
  449.   end
  450.   alias remilia_time_terminate terminate
  451.   #--------------------------------------------------------------------------
  452.   # ● 结束处理
  453.   #--------------------------------------------------------------------------
  454.   def terminate
  455.     remilia_time_terminate;
  456.     @time_window.dispose;
  457.   end
  458.   alias remilia_time_update update
  459.   #--------------------------------------------------------------------------
  460.   # ● 更新画面
  461.   #--------------------------------------------------------------------------
  462.   def update
  463.     remilia_time_update;
  464.     @time_window.refresh;
  465.   end
  466. end

  467.    
复制代码
已修改. 用法和以前的一样.

只是使用这个新版本的话, 就需要删除旧的脚本.

唯一的一个插件就是咱之前的那个回帖. 脚本可以单独运行
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
211 小时
注册时间
2010-12-30
帖子
85
8
 楼主| 发表于 2011-3-18 15:31:08 | 只看该作者
回复 爱丽丝·玛格特罗依德 的帖子

十分感谢。
独立运行是没问题,但是加上 “读取记录+60秒的脚本” 就不行了,就是那个防止恶意S/L的效果还是不行。读取记录后结果出现
“脚本‘Scene_File’的 第210行发生了IOError . not opened for writing”
:D  十分感谢啊~~

点评

已修改~  发表于 2011-3-18 17:52
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1050
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

9
发表于 2011-3-18 16:17:22 | 只看该作者
蕾米莉亚·斯卡雷特 发表于 2011-3-16 20:45
换了一个核心. 越来越渣了. ���

这里接楼主的帖子用一下。一下是各种黑幕:

勉强用Wordpress实现的Fibrary:http://www.66rpg.com/fsl/
之前版本的协议:http://www.66rpg.com/fsl/fsl.htm
老板的修正版协议:http://rpg.blue/thread-155554-1-1.html
邪恶的群组链接:http://rpg.blue/fsl/
最后定下来的注释模板:http://rpg.blue/thread-168490-1-1.html

至于那几个可选选项,进版本提倡使用 GNU长参数 模式,比如 FSL --ShortTermsSupport 。不过可选参数太多了还是会很麻烦,所以缩写也是很好的选择。 协议最后会整理清楚,最后查找起来很方便。

-NCP        禁止用于商业目的(No use for Commercial Purposes)
-DNR        禁止二次发行(Do Not Republish it)
-NAM        修改后请通知我(Notify me After Modification)
-STS        短期支持(Short Term Support)
-DOS        需要其它脚本支持(Dependent on Other Scripts)

building的话,还是使用固定的长度为8的字符串,如:1.0.1001,直接无视掉年份。交流的时候直接给出主版本和次版本就行了。也就是这个building只是作为一个更新的时间戳。

改精简的就精简,改修改的就修改,最后一定会完善的。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复

使用道具 举报

Lv1.梦旅人

狂気の月兔

梦石
0
星屑
231
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

10
发表于 2011-3-18 17:41:08 | 只看该作者
回复 DeathKing 的帖子

加上年份的原因在于, 之前改某脚本发现, 之前的发布月日和修改时间是一样的. (囧rz)

于是就自己添加年份区别开的说~~~
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-4 05:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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