#==============================================================================
# ★ 敌人阵营互斗系统 - 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