じ☆ve冰风 发表于 2026-4-24 01:01:20

敌人阵营互斗系统

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]
查看完整版本: 敌人阵营互斗系统