敌人阵营互斗系统
RUBY 代码#==============================================================================
# ★ 敌人阵营互斗系统 - Camp Battle System
#------------------------------------------------------------------------------
# 作者:ruigi
# 在敌人备注栏写入即可定义该敌人的阵营。
# - 不同阵营的敌人会优先互相攻击。
# - 当场上仅剩单一阵营时,该阵营的敌人恢复攻击玩家。
# - 无备注的敌人视为同一默认阵营,彼此不攻击。
#==============================================================================
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 获取阵营(缓存)
#--------------------------------------------------------------------------
def camp
if@camp.nil?
@camp = ""
if enemy.note =~ //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 =
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?
# 单体攻击:从敌对阵营中随机选一个
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?
# 单体友方(包括随机):从同阵营中随机选一个
else
# 其他情况(如使用者自身)交给默认逻辑
camp_system_make_targets
end
end
#--------------------------------------------------------------------------
# ● 默认目标生成(供上面调用)
#--------------------------------------------------------------------------
def make_targets_default
camp_system_make_targets
end
end
就像你玩半条命时走半路看见喝醋和xen星生物在干架一样
也可以玩电子斗蛐蛐了
本帖来自P1论坛作者Ruigi,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=498856若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]