什么能激活技能?(VX Ace)

我正在尝试实现这样一个功能:当你在(战斗中的)菜单中选择某些技能时,它们会自动激活。虽然我能够在选择相关技能时触发效果,但我不知道在战斗中施放技能所调用的方法是什么。任何建议都将不胜感激,我当前的代码如下:

在战斗菜单中选择技能并不会直接施放它。on_skill_ok 仅将技能存储到角色的行动中。一旦回合开始,process_action 会调用 execute_action,后者再调用 Scene_Battle 中的 use_item。use_item 负责支付消耗、播放动画并将效果应用到每个目标。

use_item 读取自 @subject.current_action,而在你仍在选择指令时,@subject 为 nil。因此我认为你需要先将其设置为角色,然后在之后清除行动,以免在回合开始时再次触发。

我还想知道 select_enemy_selection 和 select_actor_selection 之后的 autoSend 是否在选择了目标之前运行,因为这些操作只是打开了目标窗口。如果你将这些操作移到 on_enemy_ok 和 on_actor_ok 中,并在设置 target_index 之后执行,会怎样呢?我还没有测试过,但也许可以像这样:

class Scene_Battle < Scene_Base
  def autoSend
    item = BattleManager.actor.input.item
    return unless item.is_a?(RPG::Skill) && item.canAutoSend
    @subject = BattleManager.actor
    execute_action
    @subject.input.clear
    @subject = nil
  end

  def on_enemy_ok
    BattleManager.actor.input.target_index = @enemy_window.enemy.index
    @enemy_window.hide
    @skill_window.hide
    @item_window.hide
    autoSend
    next_command
  end

  def on_actor_ok
    BattleManager.actor.input.target_index = @actor_window.index
    @actor_window.hide
    @skill_window.hide
    @item_window.hide
    autoSend
    next_command
  end
end

然后在 on_skill_ok 中,你只需在第一个分支中保留 autoSend。我之前让 autoSend 检查角色的输入而不是 @skill,因为 on_enemy_ok 和 on_actor_ok 也会针对攻击和物品运行,而 @skill 可能仍然是某人选择的最后一个技能。

你的代码帮了大忙,非常感谢!还有一些小bug需要我逐一排查修复,不过编程就是这样嘛 :laughing:。