Project1

标题: 如何实现多角色队伍中每回合只有部分角色可以行动? [打印本页]

作者: joerlee    时间: 2013-12-12 18:08
标题: 如何实现多角色队伍中每回合只有部分角色可以行动?
如何实现多角色队伍中每回合只有部分角色可以行动?

问题比较抽象,先说说最终要达到的效果:

1,队伍中共有6名角色出战,序号1、2、3……6
2,战斗开始后,所有角色自动战斗,不用再选择指令(已实现)
3,战斗开始后第一回合:序号为1、2、3的角色自动攻击敌人,4、5、6角色不做任何动作
4,战斗开始后敌人回合:随机攻击序号1-6中的任意一个角色
5,战斗开始后第二回合:序号为4、5、6的角色自动攻击敌人,1、2、3角色不做任何动作
6,战斗开始后敌人回合:随机攻击序号1-6中的任意一个角色
之后循环过程3-6;

目前的思路是,引入一个全局变量 $turn_index = 0,敌人回合结束后+1,控制回合数与参战角色序号的对应关系:

比如 in_actor[min..max]=$turn_index % 2 * 3 , $turn_index % 2 * 3 +1 , $turn_index % 2 * 3 + 2

然后,每回合决定我方行动列表时,只选择in_actor[ ]中的角色;



问题在于,因为涉及了自动战斗,原有的角色行动流程更看不懂了(BattleManager),不清楚应该在什么地方修改,求大大们指点~
作者: joerlee    时间: 2013-12-12 18:55
  1. #效果为:团队指令界面,点击一次战斗后,自动战斗到分出胜负为止
  2. #开关1表示团队战斗指令输入ok
  3. #
  4. class Scene_Battle < Scene_Base
  5.    
  6.      alias ma_command_fight command_fight
  7.   
  8.      def command_fight
  9.      
  10.       $game_switches[1] = 1
  11.       
  12.        ma_command_fight
  13.    
  14.      end
  15.      
  16. end   
  17.      
  18. class Game_Actor
  19.    
  20.      def auto_battle?
  21.    
  22.        $game_switches[1] || super
  23.    
  24.      end
  25. end
复制代码
脚本很山寨,自己写的……献丑了
作者: joerlee    时间: 2013-12-12 22:54
另:敌人永远只会有1个,行动顺序也永远是 我方先行动,所以没有想太复杂,大大们也不用想太复杂~
作者: joerlee    时间: 2013-12-16 11:13
本帖最后由 joerlee 于 2013-12-16 16:14 编辑
joerlee 发表于 2013-12-12 22:54
另:敌人永远只会有1个,行动顺序也永远是 我方先行动,所以没有想太复杂,大大们也不用想太复杂~ ...


#-------------------------------------------------------------------
  # ● 这里实现了2个功能:敌人只攻击队长,每回合可以参加攻击的角色不同
  #--------------------------------------------------------------------------
module BattleManager

  #-------------------------------------------------------------------
  # ● 初始化成员
  #--------------------------------------------------------------------------
  def self.init_members
   
    $turn_index = -1                  # 添加组计数

  end
  
  def self.turn_start
   
    $turn_index += 1
    @phase = :turn
    clear_actor
    $game_troop.increase_turn
    make_action_orders
    turn_limit          # 敌人只攻击队长
   
  end
  
  def self.make_action_orders
    action_limit        
    @action_battlers = []   
    @action_battlers += @game_party_members # 在这里偷梁换柱了
    @action_battlers += $game_troop.members

  end
  

  #--------------------------------------------------------------------------
  # ● 全员增加不受攻击的状态3,队长再单独加受攻击状态4,需要配合状态
  #--------------------------------------------------------------------------
  def self.turn_limit
      
      $game_party.all_members.each do |actor|
      actor.add_state(3)
      end
   
      $game_party.leader.remove_state(3)
      $game_party.leader.add_state(4)
      
  end
  
  #--------------------------------------------------------------------------
  # ● 选择每回合可行动的队员
  #--------------------------------------------------------------------------
  def self.action_limit
   
    @game_party_members = []
   
    $row_members_max = 3
   
    $party_members_max = 6
   
    @a = $party_members_max / $row_members_max
   
    @turn_index_min = ( $turn_index % @a ) * $row_members_max + 1
   
    @turn_index_max = @turn_index_min + $row_members_max
   
    i = @turn_index_min
   
    while i < @turn_index_max
      
      @game_party_members.push $game_party.members[@actorid = i - 1]
      
      i += 1
    end
  
  end
  
end

作者: joerlee    时间: 2013-12-16 11:14
本帖最后由 joerlee 于 2013-12-16 16:13 编辑
joerlee 发表于 2013-12-16 11:13
#-------------------------------------------------------------------
  # ● 这里实现了2个功能:敌 ...

虽然这个实现不够漂亮,算法部分不够简洁,不过目前还能凑合用,算是完成了吧,感谢各位帮助,帖子可以over了




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