Project1

标题: 问下关于强制行动的 [打印本页]

作者: 片羽樱    时间: 2009-4-27 03:46
标题: 问下关于强制行动的
先来一个很白很白的问题……强制行动用脚本写是怎么写的= =
强制行动若是放在公共事件里,能否获得刚才一次攻击的攻击方ID和被攻击方ID,如何获得 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 片羽樱    时间: 2009-4-27 22:22
呃……无奈地自顶一下吧……
作者: 叶子    时间: 2009-4-28 00:13
获得ID估计需要修改事件解释器脚本
Interpreter 7 第144行 def command_339 中定义了强制行动的命令
在 # 设置强制标志 这一行下面(或上面):
要获得行动方ID的话,可以加上$game_variables[n] = battler.id
要获得对象ID的话
if battler.is_a?(Game_Enemy)
  $game_variables[n] = $game_troop.enemies[battler.current_action.target_index].id
else
  $game_variables[n] = $game_party.actors[battler.current_action.target_index].id
end
这样说来,你可能还需要判断这些战斗者是Actor抑或是Enemy,把判断结果记录到变量中

大概就是这样了,代码未经实测
作者: 片羽樱    时间: 2009-4-28 02:06
先谢过叶子大人。
-----------------------------
喔,我主要是想做这么个效果,例如普通攻击一次后,有一定几率出第二次普通攻击。所以想在攻击时带上公共事件,事件里想要获得的是刚才那次普通攻击的攻守双方的ID,然后取下随机数,准备用强制行动来立即再攻击一次。所以想获得的不是上一次强制行动的双方ID,是上一次普通攻击的双方ID。
感觉如果这种方法可行的话是最简单的一种方法了。不知有没有别的方法
作者: 叶子    时间: 2009-4-28 17:27
如果是为了一定几率攻击两次的话,可以这么实现:
在 Scene_Battle 4 中,红色为新增部分
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 1 : 准备行动)
  #--------------------------------------------------------------------------
  def update_phase4_step1
    # 隐藏帮助窗口
    @help_window.visible = false
    # 判定胜败
    if judge
      # 胜利或者失败的情况下 : 过程结束
      return
    end
    # 强制行动的战斗者不存在的情况下
    if $game_temp.forcing_battler == nil
      # 设置战斗事件
      setup_battle_event
      # 执行战斗事件中的情况下
      if $game_system.battle_interpreter.running?
        return
      end
    end
    # 强制行动的战斗者存在的情况下
    if $game_temp.forcing_battler != nil
      # 在头部添加后移动
      @action_battlers.delete($game_temp.forcing_battler)
      @action_battlers.unshift($game_temp.forcing_battler)
    end
    # 未行动的战斗者不存在的情况下 (全员已经行动)
    if @action_battlers.size == 0
      # 开始同伴命令回合
      start_phase2
      return
    end
    # 初始化动画 ID 和公共事件 ID
    @animation1_id = 0
    @animation2_id = 0
    @common_event_id = 0
    # 未行动的战斗者移动到序列的头部
    @active_battler = @action_battlers.shift
    # 如果已经在战斗之外的情况下
    if @active_battler.index == nil
      return
    end
    # 连续伤害
    if @active_battler.hp > 0 and @active_battler.slip_damage?
      @active_battler.slip_damage_effect
      @active_battler.damage_pop = true
    end
    # 自然解除状态
    @active_battler.remove_states_auto
    # 刷新状态窗口
    @status_window.refresh
    # 移至步骤 2
    @phase4_step = 2
   
    # 重置二攻击次数
    @attack_times = 0

   
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 6 : 刷新)
  #--------------------------------------------------------------------------
  def update_phase4_step6
    # 清除强制行动对像的战斗者
    $game_temp.forcing_battler = nil
    # 公共事件 ID 有效的情况下
    if @common_event_id > 0
      # 设置事件
      common_event = $data_common_events[@common_event_id]
      $game_system.battle_interpreter.setup(common_event.list, 0)
    end
    # 移至步骤 1
    @phase4_step = 1
   
    # 二次行动
    if @active_battler.current_action.kind == 0 and
        @active_battler.current_action.basic == 0 and
        @attack_times < 1 and # 还没进行二次攻击
        rand(100) < 100 # 几率
      @phase4_step = 2 # 返回行动准备回合
      @attack_times += 1 # 增加攻击次数
    end

   
  end


几率的判定那里根据你的需要改一下就行了 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 片羽樱    时间: 2009-4-29 01:56
继续感谢叶子大人。
那么三连击,四连击也可以这样类似实现了。
-------------------------------------------
嗯,有一个小BUG,我修正了。
作者: 叶子    时间: 2009-4-29 10:44
以下引用片羽樱于2009-4-28 17:56:22的发言:

继续感谢叶子大人。
那么三连击,四连击也可以这样类似实现了。
-------------------------------------------
嗯,有一个小BUG,我修正了。


[本贴由作者于 2009-4-28 20:40:22 最后编辑]

话说BUG是啥o.O
作者: 片羽樱    时间: 2009-4-29 21:33
以下引用叶子于2009-4-29 2:44:18的发言:
话说BUG是啥

当第一击把最后一个敌人打死后正好还有下一击的话,报错跳出。
只要把你的那最下面那段红色的套在这么个条件里就解决问题了
if !judge
   if @active_battler.current_action.kind == 0 and
       @active_battler.current_action.basic == 0 and
       @attack_times < 1 and # 还没进行二次攻击
       rand(100) < 100 # 几率
     @phase4_step = 2 # 返回行动准备回合
     @attack_times += 1 # 增加攻击次数
   end
end
作者: 叶子    时间: 2009-4-29 21:53
对!怪我测试不认真,没考虑到这么个问题




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