Project1

标题: 【腳本BUG】 物品不正常重複獲取 [打印本页]

作者: duzine    时间: 2019-4-9 15:28
标题: 【腳本BUG】 物品不正常重複獲取

這個腳本是一種讀取條,當讀取條跑完,才會啟動事件的內容
不過這個腳本出了BUG,觸發方式如下


首先建立一個新事件,設定一個註釋內容為 <INTERACTIVE>
接著輸入這個事件的內容
例如:獲得道具1個,獲得金錢10元

然後執行,會變成獲得道具12個,金錢120元

神奇的是,如果在其中加入了一個對話,結果會變成
對話跑出2次
獲得道具2個,金錢20元


腳本下載
Scripts.rar (151.73 KB, 下载次数: 105)

感謝閱讀
作者: 百里_飞柳    时间: 2019-4-9 16:17
试了一下,默认的宝箱事件加上第一行添加注释,并没有问题……
作者: shencao    时间: 2019-4-9 22:16
我也测试了一下,如果在获得物品之后打开独立开关a并切到空白事件页(就是默认宝箱的操作),就不会有问题
如果没有切换到新的事件页,则会像lz描述的那样。
加入对话2次,不加入12次,我猜测和帧数有关系(纯猜……)
它说明里说主要是为了配合ABS系统敌人攻击时候怎样怎样(?)并没有用过ABS,猜测可能是战斗方面的某些特殊需求,导致了这个情况?不知道呀。
看看有没有大佬解答了
作者: 百里_飞柳    时间: 2019-4-10 17:39
我再次看了下,发现是当使用bar时出现的bug,原因是使用bar时它忘了把flag置为false
  1.   def clear_interacting_bar
  2.     # // Dispose interactive bar.
  3.     dipose_interacting_bar ; setup_interacting_bar
  4.     @interacting = false # 修复事件被多次触发bug
  5.   end
复制代码

因为它的clear只承担了绘制后的清除,并不含有初始化,
所以在clear绘制时顺便将flag置为false就好
作者: duzine    时间: 2019-4-10 20:33
百里_飞柳 发表于 2019-4-10 17:39
我再次看了下,发现是当使用bar时出现的bug,原因是使用bar时它忘了把flag置为false

因为它的clear只承担 ...


做了測試,發現問題好像還在
flag置为false,可是物品依舊變成12倍數量
作者: 百里_飞柳    时间: 2019-4-10 21:41
duzine 发表于 2019-4-10 20:33
做了測試,發現問題好像還在
flag置为false,可是物品依舊變成12倍數量

……好吧我之前看错了
实际上是因为它写的这个bar移出效果有个滞后动作,所以会导致事件被重复执行,在update里加个判定就好

之前的那个修改可以删了

由于它clear之后@int_min这个变量变成了0,而同时是依靠它自增来作为当前进度,
于是可以根据它是否为0知晓是否可以触发事件了
同时触发后,之前说的开关也被自动重置,不会再二次触发
  1.   alias xail_int_system_gm_evt_update update
  2.   def update(*args, &block)
  3.     # // Method to update an event.
  4.     xail_int_system_gm_evt_update(*args, &block)
  5.     if comment?(XAIL::INTERACTING_SYS::CMT) and @interacting
  6.       unless @int_min >= @int_max
  7.         return if interacting_interrupted?
  8.         create_interacting_bar
  9.         animate_interacting_bar(:in) if XAIL::INTERACTING_SYS::ANIMATE
  10.         # // Show ballon.
  11.         b_id = XAIL::INTERACTING_SYS::BALLOON_ID
  12.         $game_player.balloon_id = b_id unless b_id.nil?
  13.         @int_min += XAIL::INTERACTING_SYS::INITIAL_TIMER
  14.       else
  15.         if XAIL::INTERACTING_SYS::ANIMATE
  16.           animate_interacting_bar(:out)
  17.         else
  18.           @interacting = false
  19.           clear_interacting_bar
  20.         end
  21.         return if @int_min != 0 # 修复事件多次重复触发
  22.         return if empty? or @starting
  23.         @starting = true
  24.         lock if trigger_in?([0,1,2])
  25.       end
  26.     end
  27.   end
复制代码





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