#============================================================================== # ★ 敌人阵营互斗系统 - Camp Battle System #------------------------------------------------------------------------------ # 作者:ruigi # 在敌人备注栏写入 <阵营: 文字> 即可定义该敌人的阵营。 # - 不同阵营的敌人会优先互相攻击。 # - 当场上仅剩单一阵营时,该阵营的敌人恢复攻击玩家。 # - 无备注的敌人视为同一默认阵营,彼此不攻击。 #============================================================================== #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● 获取阵营(缓存) #-------------------------------------------------------------------------- def camp if @camp.nil? @camp = "" if enemy.note =~ /<阵营:\s*(.+)>/i @camp = $1.to_s.strip end end @camp end end #============================================================================== # ■ Game_Action #============================================================================== class Game_Action #-------------------------------------------------------------------------- # ● 别名:生成目标(核心修改) #-------------------------------------------------------------------------- alias camp_system_make_targets make_targets def make_targets # 仅当行动者是敌人时应用特殊规则 if subject.is_a?(Game_Enemy) # 针对对手的技能(攻击、有害状态等) if item.for_opponent? # 获取活着的敌对阵营敌人 enemy_targets = $game_troop.alive_members.select { |e| e.camp != subject.camp } if enemy_targets.empty? # 没有敌对阵营 → 攻击玩家队伍 return make_targets_default else # 有敌对阵营 → 选择目标 return make_enemy_vs_enemy_targets(enemy_targets) end # 针对友方的技能(治疗、增益等) elsif item.for_friend? # 只选择同阵营的活着的敌人 ally_targets = $game_troop.alive_members.select { |e| e.camp == subject.camp } if ally_targets.empty? # 没有同阵营友军 → 只能选自己 ally_targets = [subject] end return make_enemy_vs_friend_targets(ally_targets) end end # 其他情况(玩家行动、自身技能等)沿用默认逻辑 camp_system_make_targets end #-------------------------------------------------------------------------- # ● 新方法:敌人攻击敌人时的目标选择 #-------------------------------------------------------------------------- def make_enemy_vs_enemy_targets(target_array) if item.for_random? # 随机攻击 N 个目标 Array.new(item.number_of_targets) { target_array.sample } elsif item.for_one? # 单体攻击:从敌对阵营中随机选一个 [target_array.sample] else # 全体攻击:所有敌对阵营成员 target_array end end #-------------------------------------------------------------------------- # ● 新方法:敌人使用友方技能时的目标选择 #-------------------------------------------------------------------------- def make_enemy_vs_friend_targets(target_array) if item.for_all? # 全体友方:所有同阵营成员 target_array elsif item.for_one? || item.for_random? # 单体友方(包括随机):从同阵营中随机选一个 [target_array.sample] else # 其他情况(如使用者自身)交给默认逻辑 camp_system_make_targets end end #-------------------------------------------------------------------------- # ● 默认目标生成(供上面调用) #-------------------------------------------------------------------------- def make_targets_default camp_system_make_targets end end
74XZ~[Y$]05{1[1{2O6(}DN.png (109.07 KB, 下载次数: 20)
@%XN39A4T[%SIVM2]%FO(}D.png (67.62 KB, 下载次数: 17)
| 欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |