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

Project1

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

[已经解决] 本地时间昼夜系统修改,最后一步

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4007
在线时间
604 小时
注册时间
2017-4-21
帖子
229
跳转到指定楼层
1
发表于 2018-4-16 18:00:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 阮声悠悠 于 2018-4-16 18:02 编辑

今天在贴吧和论坛都发了50元的修改悬赏
奈何没人理我,所以不懂脚本的我尝试着修改了论坛上另外一个昼夜系统脚本
终于实现了本地电脑时间的昼夜效果,但有一个问题
在做室内和室外地图切换的时候,室外地图会先亮光,再渐变昼夜效果
那有没有办法,让走出室外的时候,直接是昼夜状态呢?
这超出了楼主的能力范围!!!!求帮忙!!!

RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆昼夜切り替え - KGC_DayNight◆
  3. #_/----------------------------------------------------------------------------
  4. #_/  ゲーム中に昼夜の概念を作成します。
  5. #_/  Makes the concept of day and night in the game.
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  7.  
  8. #==============================================================================
  9. # ★ カスタマイズ項目 - Customize ★
  10. #==============================================================================
  11.  
  12. module KGC
  13.  
  14.   #不显示色相开关编号
  15.   GBDT = 5
  16.  
  17.   #室内编号,室内不显示色相
  18.   GBDTBH = [1,340,341,342,343,316,317,314,315,311,312,313]
  19.  
  20.   # 战斗界面是否适用昼夜效果
  21.   DAYNIGHT_TONE_BACK_ONLY = false
  22.  
  23.   #  最初状态  0:白天  1:傍晚  2:晚上  3:早上
  24.   DAYNIGHT_PASS_PHASE = 3
  25.  
  26.   #昼夜效果切换的时间
  27.   DAYNIGHT_DURATION = 10
  28.  
  29.   # ◆昼夜の色調(よく分からない場合はこのまま)
  30.   DAYNIGHT_TONE = [Tone.new(0, 0, 0),
  31.     Tone.new(-32, -96, -96),
  32.     Tone.new(-128, -128, -32),
  33.     Tone.new(-48, -48, -16)]
  34. end
  35.  
  36. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  37.  
  38. $imported = {} if $imported == nil
  39. $imported["DayNight"] = true
  40.  
  41. module DayNight
  42.   #--------------------------------------------------------------------------
  43.   # ● 変数初期化
  44.   #--------------------------------------------------------------------------
  45.   def self._init_var_
  46.     $game_system.daynight_count = 0 if $game_system.daynight_count == nil
  47.     $game_system.daynight_phase = 0 if $game_system.daynight_phase == nil
  48.     $game_system.daynight_pass_days = 0 if $game_system.daynight_pass_days == nil
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 現在の状態
  52.   #--------------------------------------------------------------------------
  53.   def self.now
  54.     # 現在の状態を返す
  55.     return $game_system.daynight_phase
  56.   end
  57.  
  58.   #--------------------------------------------------------------------------
  59.   # ● 昼夜手動切り替え
  60.   #     phase     : 切り替え後の状態INDEX
  61.   #     duration  : 切り替え時間(フレーム)  (省略時 : KGC::DAYNIGHT_DURATION)
  62.   #     pass_days : 経過させる日数  (省略時:0)
  63.   #--------------------------------------------------------------------------
  64.   def self.change(phase, duration = KGC::DAYNIGHT_DURATION, pass_days = 0)
  65.     # カウント初期化
  66.     $game_system.daynight_count = 0
  67.     # フェーズ更新
  68.     $game_system.daynight_phase = phase
  69.     # 手動切り替え有効
  70.     $game_temp.manual_daynight_change = duration
  71.     # 日数経過
  72.     $game_system.daynight_pass_days += pass_days
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 次の状態へ移行
  76.   #     duration : 切り替え時間(フレーム)  (省略時 : KGC::DAYNIGHT_DURATION)
  77.   #--------------------------------------------------------------------------
  78.   def self.change_next(duration = KGC::DAYNIGHT_DURATION)
  79.     $game_screen.change_daynight_next(duration)
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● デフォルトの状態(0, 0, 0)に戻す
  83.   #     duration : 切り替え時間(フレーム)  (省略時 : KGC::DAYNIGHT_DURATION)
  84.   #--------------------------------------------------------------------------
  85.   def self.set_default(duration = KGC::DAYNIGHT_DURATION)
  86.     $game_screen.set_daynight_default(duration)
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 現在の状態を適用
  90.   #     duration : 切り替え時間(フレーム)  (省略時 : KGC::DAYNIGHT_DURATION)
  91.   #--------------------------------------------------------------------------
  92.   def self.apply(duration = KGC::DAYNIGHT_DURATION)
  93.     $game_screen.apply_daynight(duration)
  94.   end
  95. end
  96.  
  97. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  98.  
  99. #==============================================================================
  100. # ■ Game_Temp
  101. #==============================================================================
  102.  
  103. class Game_Temp
  104.   attr_accessor :manual_daynight_change
  105.   #--------------------------------------------------------------------------
  106.   # ● オブジェクト初期化
  107.   #--------------------------------------------------------------------------
  108.   alias initialize_KGC_DayNight initialize
  109.   def initialize
  110.     # 元の処理を実行
  111.     initialize_KGC_DayNight
  112.  
  113.     @manual_daynight_change = false
  114.   end
  115. end
  116.  
  117. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  118.  
  119. #==============================================================================
  120. # ■ Game_System
  121. #==============================================================================
  122.  
  123. class Game_System
  124.   attr_accessor :daynight_count, :daynight_phase, :daynight_pass_days,
  125.     :daynight_change, :daynight_change_battle
  126.   #--------------------------------------------------------------------------
  127.   # ● オブジェクト初期化
  128.   #--------------------------------------------------------------------------
  129.   alias initialize_KGC_DayNight initialize
  130.   def initialize
  131.     initialize_KGC_DayNight
  132.  
  133.     @daynight_count = @daynight_phase = @daynight_pass_days = 0
  134.     @daynight_change = true
  135.     @daynight_change_battle = true
  136.   end
  137. end
  138.  
  139. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  140.  
  141. #==============================================================================
  142. # ■ Game_Screen
  143. #==============================================================================
  144.  
  145. class Game_Screen
  146.   attr_reader :daynight_tone
  147.   #--------------------------------------------------------------------------
  148.   # ● オブジェクト初期化
  149.   #--------------------------------------------------------------------------
  150.   alias initialize_KGC_DayNight initialize
  151.   def initialize
  152.     # 元の処理を実行
  153.     initialize_KGC_DayNight
  154.  
  155.     # とりあえず現在の状態に設定
  156.     @default_tone = Tone.new(0, 0, 0)
  157.     @tone = KGC::DAYNIGHT_TONE[$game_system.daynight_phase].clone
  158.     @daynight_tone = @tone.clone
  159.     # 移動判定用座標
  160.     @x = @y = 0
  161.     # フレーム更新用カウント初期化
  162.     @frame_count = Graphics.frame_count
  163.     @daynight_tone_duration = 0
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 色調の取得
  167.   #--------------------------------------------------------------------------
  168.   def tone
  169.     if $game_temp.in_battle && KGC::DAYNIGHT_TONE_BACK_ONLY
  170.       return @default_tone
  171.     else
  172.       return @tone
  173.     end
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● 色調変更の開始
  177.   #     tone     : 色調
  178.   #     duration : 時間
  179.   #--------------------------------------------------------------------------
  180.   alias start_tone_change_KGC_DayNight start_tone_change
  181.   def start_tone_change(tone, duration)
  182.     start_tone_change_KGC_DayNight(tone, duration)
  183.  
  184.     @daynight_tone_target = tone.clone
  185.     @daynight_tone_duration = duration
  186.     if @daynight_tone_duration == 0
  187.       @daynight_tone = @daynight_tone_target.clone
  188.     end
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● フレーム更新
  192.   #--------------------------------------------------------------------------
  193.   alias update_KGC_DayNight update
  194.   def update
  195.     update_KGC_DayNight
  196.  
  197.     if @daynight_tone_duration >= 1
  198.       d = @daynight_tone_duration
  199.       @daynight_tone.red =
  200.         (@daynight_tone.red * (d - 1) + @daynight_tone_target.red) / d
  201.       @daynight_tone.green =
  202.         (@daynight_tone.green * (d - 1) + @daynight_tone_target.green) / d
  203.       @daynight_tone.blue =
  204.         (@daynight_tone.blue * (d - 1) + @daynight_tone_target.blue) / d
  205.       @daynight_tone.gray =
  206.         (@daynight_tone.gray * (d - 1) + @daynight_tone_target.gray) / d
  207.       @daynight_tone_duration -= 1
  208.     end
  209.  
  210.     # 昼夜切り替え判定
  211.     if (!$game_temp.in_battle && $game_system.daynight_change) ||
  212.         ($game_temp.in_battle && $game_system.daynight_change &&
  213.         $game_system.daynight_change_battle)
  214.         update_daynight_real_time
  215.     end
  216.     # 手動切り替えが行われた場合
  217.     if $game_temp.manual_daynight_change != nil
  218.       # 色調切り替え
  219.       start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
  220.         KGC::DAYNIGHT_DURATION)
  221.       # 手動切り替え解除
  222.       $game_temp.manual_daynight_change = nil
  223.     end
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 更新 : 現実時間
  227.   #--------------------------------------------------------------------------
  228.   def update_daynight_real_time
  229.     if Time.now.hour >= 5  and $game_switches[KGC::GBDT] != true
  230.       start_tone_change(KGC::DAYNIGHT_TONE[3],KGC::DAYNIGHT_DURATION)
  231.     end
  232.     if Time.now.hour >= 8 or $game_switches[KGC::GBDT] == true
  233.       start_tone_change(KGC::DAYNIGHT_TONE[0],KGC::DAYNIGHT_DURATION)
  234.     end
  235.     if Time.now.hour >= 17  and $game_switches[KGC::GBDT] != true
  236.       start_tone_change(KGC::DAYNIGHT_TONE[1],KGC::DAYNIGHT_DURATION)
  237.     end
  238.     if Time.now.hour >= 19 or Time.now.hour < 5  and $game_switches[KGC::GBDT] != true
  239.       start_tone_change(KGC::DAYNIGHT_TONE[2],KGC::DAYNIGHT_DURATION)
  240.     end
  241.     if $game_switches[KGC::GBDT] != true
  242.        for i in 0...KGC::GBDTBH.size
  243.          if $game_map.map_id == KGC::GBDTBH[i]
  244.            start_tone_change(KGC::DAYNIGHT_TONE[0],KGC::DAYNIGHT_DURATION)
  245.            break
  246.          end
  247.        end
  248.      end
  249.   end
  250.   private :update_daynight_real_time
  251.   #--------------------------------------------------------------------------
  252.   # ● 次の状態へ移行
  253.   #--------------------------------------------------------------------------
  254.   def change_daynight_next(duration = KGC::DAYNIGHT_DURATION)
  255.     $game_system.daynight_count = 0
  256.     $game_system.daynight_phase += 1
  257.     # 最後の状態に達した場合
  258.     if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
  259.       # 最初の状態に戻す
  260.       $game_system.daynight_phase = 0
  261.     end
  262.     # 日数経過判定
  263.     if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
  264.       $game_system.daynight_pass_days += 1
  265.     end
  266.     # 色調切り替え
  267.     start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
  268.       duration)
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● デフォルトの状態(0, 0, 0)に戻す
  272.   #--------------------------------------------------------------------------
  273.   def set_daynight_default(duration)
  274.     start_tone_change(Tone.new(0, 0, 0), duration)
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ● 現在の状態を適用
  278.   #--------------------------------------------------------------------------
  279.   def apply_daynight(duration)
  280.     start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase], duration)
  281.   end
  282. end
  283.  
  284. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  285.  
  286. #==============================================================================
  287. # ■ Game_Map
  288. #==============================================================================
  289.  
  290. class Game_Map
  291.   #--------------------------------------------------------------------------
  292.   # ● エンカウントリストの取得
  293.   #--------------------------------------------------------------------------
  294.   alias encounter_list_KGC_DayNight encounter_list
  295.   def encounter_list
  296.     # 元の処理を実行
  297.     list = encounter_list_KGC_DayNight.dup
  298.  
  299.     # 出現条件判定
  300.     list.each_index { |i|
  301.       appear = false
  302.       troop = $data_troops[list[i]]
  303.       # 出現条件が無い場合は次へ
  304.       next unless troop.name =~ /\[DN((?:[ ]*[\-]?\d+(?:,[ ]*)?)+)\]/i
  305.       # 出現条件を適用
  306.       $1.split(/,/).each { |dn|
  307.         dn.gsub!(/[ ]/) {""}
  308.         appear |= dn[0, 1] == "-" ?
  309.           $game_system.daynight_phase != dn.to_i.abs :
  310.           $game_system.daynight_phase == dn.to_i
  311.       }
  312.       list[i] = nil unless appear
  313.     }
  314.     return list.compact
  315.   end
  316. end
  317.  
  318. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  319.  
  320. #==============================================================================
  321. # ■ Spriteset_Battle
  322. #==============================================================================
  323.  
  324. if KGC::DAYNIGHT_TONE_BACK_ONLY
  325. class Spriteset_Battle
  326.   #--------------------------------------------------------------------------
  327.   # ● フレーム更新
  328.   #--------------------------------------------------------------------------
  329.   alias update_KGC_DayNight update
  330.   def update
  331.     update_KGC_DayNight
  332.  
  333.     @battleback_sprite.tone = $game_screen.daynight_tone
  334.   end
  335. end
  336. end
  337.  
  338. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  339.  
  340. #==============================================================================
  341. # ■ Scene_Map
  342. #==============================================================================
  343.  
  344. class Scene_Map
  345.   #--------------------------------------------------------------------------
  346.   # ● メイン処理
  347.   #--------------------------------------------------------------------------
  348.   alias main_KGC_DayNight main
  349.   def main
  350.     DayNight._init_var_
  351.  
  352.     main_KGC_DayNight
  353.   end
  354. end

Lv3.寻梦者

梦石
0
星屑
4007
在线时间
604 小时
注册时间
2017-4-21
帖子
229
7
 楼主| 发表于 2018-4-18 23:45:55 | 只看该作者
ikki 发表于 2018-4-18 22:32
抓到一个没看魔单工程的。

虽说我已经用自己的方法解决这个问题了
但还是想了解一下魔单的效果
大神能否提供下载地址?

论坛没搜到
百度搜索魔单没能找到
搜索魔单魔单纪念版,只搜到一条11年的,找不到
用网盘搜索引擎,也没能找到
。。。。。
。。。
。。

点评

魔力宝贝单机版开源的就在这个论坛。。。  发表于 2018-4-19 16:44
看 5 楼签名,"以后的任何作品都将不会进行分享。"  发表于 2018-4-19 10:37
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4007
在线时间
604 小时
注册时间
2017-4-21
帖子
229
6
 楼主| 发表于 2018-4-18 22:48:52 | 只看该作者
ikki 发表于 2018-4-18 22:32
抓到一个没看魔单工程的。

求详细说明
是有这样的开源范例吗?

评分

参与人数 1+1 收起 理由
guoxiaomi + 1 没错,让ikki大神指导你一下

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
910
在线时间
94 小时
注册时间
2005-10-22
帖子
397
5
发表于 2018-4-18 22:32:56 | 只看该作者
抓到一个没看魔单工程的。

评分

参与人数 1+1 收起 理由
guoxiaomi + 1 我很赞同

查看全部评分

做脚本先从修改脚本做起,我只修改自己觉得能用到的东西。
以后的任何作品都将不会进行分享。
Bilibili:https://space.bilibili.com/288814521
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2018-4-17 17:44:26 | 只看该作者
可能是你把update和refresh的部分改反了?
原版脚本有你提到的这个bug吗?

评分

参与人数 1+1 收起 理由
阮声悠悠 + 1 原脚本没有室内设置。这个应不算bug,只是.

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4007
在线时间
604 小时
注册时间
2017-4-21
帖子
229
3
 楼主| 发表于 2018-4-16 20:24:02 | 只看该作者
本帖最后由 阮声悠悠 于 2018-4-16 20:31 编辑
guoxiaomi 发表于 2018-4-16 19:12
没看脚本,这样试试,不行就算了
350行附近改成:


还是不行
不会发图片,纯手打了
line 354: NoMethodError occurred.
undefined method 'start_tine_change'for
#<scene_Map:0x1342e530>

同时发现了一个办法能完美解决,但效果不好,不想用
  #昼夜效果切换的时间
  DAYNIGHT_DURATION = 0

地图切换事件选择不淡出
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2018-4-16 19:12:02 | 只看该作者
本帖最后由 guoxiaomi 于 2018-4-16 20:46 编辑

没看脚本,这样试试,不行就算了
350行附近改成:
  1. DayNight._init_var_
  2. Input.update
  3. update
  4. main_KGC_DayNight
复制代码


那试试用:
  1. DayNight._init_var_
  2. $game_screen.start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
  3.         KGC::DAYNIGHT_DURATION)
  4. main_KGC_DayNight
复制代码


总之想法是在调用 Graphics.freeze 之前执行一次色彩的渐变

评分

参与人数 1+1 收起 理由
阮声悠悠 + 1 不行,新建工程加了update就会报错,只加In.

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-10 20:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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