扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 95|回复: 0

[转载发布] 敌人阵营互斗系统

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 193 天

    连续签到: 1 天

    [LV.7]常住居民III

    2606

    主题

    790

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    17633
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    21059

    灌水之王

    发表于 12 小时前 | 显示全部楼层 |阅读模式
    RUBY 代码
    1. #==============================================================================
    2. # ★ 敌人阵营互斗系统 - Camp Battle System
    3. #------------------------------------------------------------------------------
    4. #   作者:ruigi
    5. #  在敌人备注栏写入  即可定义该敌人的阵营。
    6. #   - 不同阵营的敌人会优先互相攻击。
    7. #   - 当场上仅剩单一阵营时,该阵营的敌人恢复攻击玩家。
    8. #   - 无备注的敌人视为同一默认阵营,彼此不攻击。
    9. #==============================================================================
    10. #==============================================================================
    11. # ■ Game_Enemy
    12. #==============================================================================
    13. class Game_Enemy < Game_Battler
    14.   #--------------------------------------------------------------------------
    15.   # ● 获取阵营(缓存)
    16.   #--------------------------------------------------------------------------
    17.   def camp
    18.     if@camp.nil?
    19.       @camp = ""
    20.       if enemy.note =~ //i
    21.         @camp = $1.to_s.strip
    22.       end
    23.     end
    24.     @camp
    25.   end
    26. end
    27. #==============================================================================
    28. # ■ Game_Action
    29. #==============================================================================
    30. class Game_Action
    31.   #--------------------------------------------------------------------------
    32.   # ● 别名:生成目标(核心修改)
    33.   #--------------------------------------------------------------------------
    34.   alias camp_system_make_targets make_targets
    35.   def make_targets
    36.     # 仅当行动者是敌人时应用特殊规则
    37.     if subject.is_a?(Game_Enemy)
    38.       # 针对对手的技能(攻击、有害状态等)
    39.       if item.for_opponent?
    40.         # 获取活着的敌对阵营敌人
    41.         enemy_targets = $game_troop.alive_members.select{ |e| e.camp != subject.camp}
    42.         if enemy_targets.empty?
    43.           # 没有敌对阵营 → 攻击玩家队伍
    44.           return make_targets_default
    45.         else
    46.           # 有敌对阵营 → 选择目标
    47.           return make_enemy_vs_enemy_targets(enemy_targets)
    48.         end
    49.       # 针对友方的技能(治疗、增益等)
    50.       elsif item.for_friend?
    51.         # 只选择同阵营的活着的敌人
    52.         ally_targets = $game_troop.alive_members.select{ |e| e.camp == subject.camp}
    53.         if ally_targets.empty?
    54.           # 没有同阵营友军 → 只能选自己
    55.           ally_targets = [subject]
    56.         end
    57.         return make_enemy_vs_friend_targets(ally_targets)
    58.       end
    59.     end
    60.     # 其他情况(玩家行动、自身技能等)沿用默认逻辑
    61.     camp_system_make_targets
    62.   end
    63.   #--------------------------------------------------------------------------
    64.   # ● 新方法:敌人攻击敌人时的目标选择
    65.   #--------------------------------------------------------------------------
    66.   def make_enemy_vs_enemy_targets(target_array)
    67.     if item.for_random?
    68.       # 随机攻击 N 个目标
    69.       Array.new(item.number_of_targets){ target_array.sample}
    70.     elsif item.for_one?
    71.       # 单体攻击:从敌对阵营中随机选一个
    72.       [target_array.sample]
    73.     else
    74.       # 全体攻击:所有敌对阵营成员
    75.       target_array
    76.     end
    77.   end
    78.   #--------------------------------------------------------------------------
    79.   # ● 新方法:敌人使用友方技能时的目标选择
    80.   #--------------------------------------------------------------------------
    81.   def make_enemy_vs_friend_targets(target_array)
    82.     if item.for_all?
    83.       # 全体友方:所有同阵营成员
    84.       target_array
    85.     elsif item.for_one? || item.for_random?
    86.       # 单体友方(包括随机):从同阵营中随机选一个
    87.       [target_array.sample]
    88.     else
    89.       # 其他情况(如使用者自身)交给默认逻辑
    90.       camp_system_make_targets
    91.     end
    92.   end
    93.   #--------------------------------------------------------------------------
    94.   # ● 默认目标生成(供上面调用)
    95.   #--------------------------------------------------------------------------
    96.   def make_targets_default
    97.     camp_system_make_targets
    98.   end
    99. end
    复制代码


    就像你玩半条命时走半路看见喝醋和xen星生物在干架一样
    也可以玩电子斗蛐蛐了


                本帖来自P1论坛作者Ruigi,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=498856  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-4-24 13:50 , Processed in 0.142245 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表