Project1

标题: 战斗中使用物品的效果延迟? [打印本页]

作者: 渣小废    时间: 2015-6-30 23:08
标题: 战斗中使用物品的效果延迟?
比方说在战斗中的回合使用物品。
但是这个效果不立即发动而是等到下个自己的回合发动。
或者下个自己3回合以后发动?

作者: piaoy    时间: 2015-7-1 11:17
本帖最后由 piaoy 于 2015-7-1 11:24 编辑

另附脚本文件,自己的拙作 :
RUBY 代码复制
  1. #============================================================================
  2. #                        延迟性物品
  3. #                        很可能有BUG
  4. #============================================================================
  5. $item_delay = {17=>1,18=>3}
  6. #设定属性与回合数的联系
  7. #用法 : 属性id =>延迟回合数(为大于0的整数)
  8. #=============================================================================
  9. $item_delay_animation = {33=>23,34=>23}
  10. #延迟的物品真正发动效果时对方的动画
  11. #用法 :  物品id =>动画id
  12. #=============================================================================
  13. $item_delay_text = "延迟效果发动"
  14. #一个物品真正发动时显示物品名字和上面的字
  15. #用法 : 不解释
  16. #============================================================================
  17. class Game_Battler
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化改
  20.   #
  21.   #--------------------------------------------------------------------------
  22.   alias old_initialize initialize
  23.   def initialize
  24.     old_initialize
  25.     @item_delay = {}
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 记录推迟物品
  29.   #     item : 物品
  30.   #--------------------------------------------------------------------------
  31.   def item_delay_set(item,turn)
  32.     if @item_delay[item.id] == nil
  33.       @item_delay[item.id] = [turn]
  34.     else
  35.       @item_delay[item.id].push(turn)
  36.     end
  37.   end  
  38.   #--------------------------------------------------------------------------
  39.   # ● 药物延迟刷新
  40.   #--------------------------------------------------------------------------
  41.   def item_delay_update
  42.     for i in @item_delay.keys
  43.       for d in 0...@item_delay[i].size
  44.         if @item_delay[i][d] > 0
  45.          @item_delay[i][d] -= 1
  46.        else
  47.           $scene.item_delay_text($data_items[i].name)
  48.           @animation_id = $item_delay_animation[$data_items[i].id] if $item_delay_animation[$data_items[i].id] != nil
  49.           item_effect($data_items[i])
  50.           @item_delay[i].delete(0)
  51.           @item_delay.delete(i) if @item_delay[i] == []
  52.         end
  53.       end  
  54.     end  
  55.   end
  56. end
  57. #=============================================================================
  58. class Game_Actor < Game_Battler
  59. end
  60. class Game_Enemy < Game_Battler
  61. end
  62. #=============================================================================
  63. class Scene_Battle
  64.   #--------------------------------------------------------------------------
  65.   # ● 生成物品行动结果
  66.   #--------------------------------------------------------------------------
  67.   def make_item_action_result
  68.     # 获取物品
  69.     @item = $data_items[@active_battler.current_action.item_id]
  70.     # 因为物品耗尽而无法使用的情况下
  71.     unless $game_party.item_can_use?(@item.id)
  72.       # 移至步骤 1
  73.       @phase4_step = 1
  74.       return
  75.     end
  76.     # 消耗品的情况下
  77.     if @item.consumable
  78.       # 使用的物品减 1
  79.       $game_party.lose_item(@item.id, 1)
  80.     end
  81.     # 在帮助窗口显示物品名
  82.     @help_window.set_text(@item.name, 1)
  83.     # 设置动画 ID
  84.     @animation1_id = @item.animation1_id
  85.     @animation2_id = @item.animation2_id
  86.     # 设置公共事件 ID
  87.     @common_event_id = @item.common_event_id
  88.     # 确定对像
  89.     index = @active_battler.current_action.target_index
  90.     target = $game_party.smooth_target_actor(index)
  91.     # 设置对像侧战斗者
  92.     set_target_battlers(@item.scope)
  93.     # 应用物品效果★
  94.     for target in @target_battlers
  95.       delay = false
  96.       for i in @item.element_set
  97.       if $item_delay[i] != nil
  98.        if target.is_a?(Game_Actor)
  99.       target.item_delay_set(@item,$item_delay[i]-1)
  100.         else
  101.       target.item_delay_set(@item,$item_delay[i])
  102.        end
  103.       delay = true
  104.       end
  105.       end
  106.       target.item_effect(@item) if delay == false
  107.     end
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 刷新画面 (主回合步骤 1 : 准备行动)
  111.   #--------------------------------------------------------------------------
  112.   def update_phase4_step1
  113.     # 隐藏帮助窗口
  114.     @help_window.visible = false
  115.     # 判定胜败
  116.     if judge
  117.       # 胜利或者失败的情况下 : 过程结束
  118.       return
  119.     end
  120.     # 强制行动的战斗者不存在的情况下
  121.     if $game_temp.forcing_battler == nil
  122.       # 设置战斗事件
  123.       setup_battle_event
  124.       # 执行战斗事件中的情况下
  125.       if $game_system.battle_interpreter.running?
  126.         return
  127.       end
  128.     end
  129.     # 强制行动的战斗者存在的情况下
  130.     if $game_temp.forcing_battler != nil
  131.       # 在头部添加后移动
  132.       @action_battlers.delete($game_temp.forcing_battler)
  133.       @action_battlers.unshift($game_temp.forcing_battler)
  134.     end
  135.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  136.     if @action_battlers.size == 0
  137.       # 开始同伴命令回合
  138.       start_phase2
  139.       return
  140.     end
  141.     # 初始化动画 ID 和公共事件 ID
  142.     @animation1_id = 0
  143.     @animation2_id = 0
  144.     @common_event_id = 0
  145.     # 未行动的战斗者移动到序列的头部
  146.     @active_battler = @action_battlers.shift
  147.     # 如果已经在战斗之外的情况下
  148.     if @active_battler.index == nil
  149.       return
  150.     end
  151.     # 连续伤害
  152.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  153.       @active_battler.slip_damage_effect
  154.       @active_battler.damage_pop = true
  155.     end
  156.     # 自然解除状态
  157.     @active_battler.remove_states_auto
  158.     # 物品延迟刷新★
  159.     @active_battler.item_delay_update
  160.     # 刷新状态窗口
  161.     @status_window.refresh
  162.     # 移至步骤 2
  163.     @phase4_step = 2
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 延迟物品帮助窗口
  167.   #--------------------------------------------------------------------------
  168.   def item_delay_text(name)
  169.     @help_window.set_text(name+$item_delay_text , 1)
  170.   end
  171. end

延迟物品.zip

202.99 KB, 下载次数: 125


作者: 渣小废    时间: 2015-7-1 23:08
piaoy 发表于 2015-7-1 11:17
另附脚本文件,自己的拙作 :
#======================================================================= ...

不好意思回复晚了,请问属性ID是什么?(=゚ω゚)=
作者: 渣小废    时间: 2015-7-1 23:55
piaoy 发表于 2015-7-1 11:17
另附脚本文件,自己的拙作 :
#======================================================================= ...

(o゚ω゚o)已经好了,非常感谢脚本!




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