Project1

标题: 请问如何添加[自动攻击]选择项.. [打印本页]

作者: jeb822    时间: 2009-7-27 14:29
标题: 请问如何添加[自动攻击]选择项..
如题,打一些小杂怪一个个按太烦了,如何才能像<<吞食天地2历史的天空>>一样有自动攻击选项呢..
谢谢了
作者: 火鸡三毛老大    时间: 2009-7-27 14:49
请搜索引号内的内容:"自动 工具"
注意带上空格
作者: 听海    时间: 2009-7-27 15:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 后知后觉    时间: 2009-7-27 16:16
其实现在的RPG不带这个功能的话 玩起来感觉很累~
仙剑里也有这样的效果,不过那个还带得有AI

不想看【论文】就下了范例自己去研究
有兴趣的话接着往下看~
战斗中自动行动v1.0.rar (189.55 KB, 下载次数: 170)

我就说说最基本的吧~
拿默认系统来说~
先要新建一些命令属性来作保存上次手动输入的命令信息
找到
class Game_BattleAction
定义一些新的实例变量
  attr_accessor :hzhj_speed                    # 速度
  attr_accessor :hzhj_kind                     # 种类 (基本 / 特技 / 物品)
  attr_accessor :hzhj_basic                    # 基本 (攻击 / 防御 / 逃跑)
  attr_accessor :hzhj_skill_id                 # 特技 ID
  attr_accessor :hzhj_item_id                  # 物品 ID
  attr_accessor :hzhj_target_index             # 对像索引
其实就是把原有的改了个名字再定义了一次
然后
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    clear
    @hzhj_speed = 0
    @hzhj_kind = 0
    @hzhj_basic = 0
    @hzhj_skill_id = 0
    @hzhj_item_id = 0
    @hzhj_target_index = 0
  end
新定义一个方法来把储存的信息传递给要执行的部分
  #--------------------------------------------------------------------------
  # ● 自动战斗
  #--------------------------------------------------------------------------
  def auto_battle
    @speed = @hzhj_speed
    @kind = @hzhj_kind
    @basic = @hzhj_basic
    @skill_id = @hzhj_skill_id
    @item_id = @hzhj_item_id
    @target_index = @hzhj_target_index
  end
再新定义一个方法把手动输入的命令存储下来
  #--------------------------------------------------------------------------
  # ● 保存当前的行动
  #--------------------------------------------------------------------------
  def to_k
    @hzhj_speed = @speed
    @hzhj_kind = @kind
    @hzhj_basic = @basic
    @hzhj_skill_id = @skill_id
    @hzhj_item_id = @item_id
    @hzhj_target_index = @target_index
  end
然后在 Game_Party新定义2个方法来方便批处理
  #--------------------------------------------------------------------------
  # ● 设置自动战斗的命令
  #--------------------------------------------------------------------------
  def set_auto_action
    for hzhj in @actors
      if hzhj != nil
        hzhj.current_action.auto_battle
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 保存当前所有人的命令
  #--------------------------------------------------------------------------
  def save_action
    for hzhj in @actors
      if hzhj != nil
        hzhj.current_action.to_k
      end
    end
  end
然后还需要一个变量来传递 现在是否存在自动状态
所以 我的方法是在Game_Temp新加了个东西
  attr_accessor :battle_main_auto
然后在Scene_Battle 1 初始化
并给@actor_command_window新加一个自动的选项
然后来到Scene_Battle 3
找到   def update_phase3_basic_command
在when 3 的后面加上 when 4
      when 4  # 自动
        $game_system.se_play($data_system.decision_se)
        $game_temp.battle_main_auto = true
        start_phase4
最后来到Scene_Battle 4
先是在def start_phase4
添加
    if $game_temp.battle_main_auto
      $game_party.set_auto_action
    else
      $game_party.save_action
    end
然后找到  def update_phase4_step1
的    if @action_battlers.size == 0下面新加一段
      if $game_temp.battle_main_auto
        start_phase4
        return
      end
最后在def update_phase4下面加一段
    if $game_temp.battle_main_auto
      if Input.press?(Input::B)
        $game_temp.battle_main_auto = false
      end
    end

完成~~




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