Project1

标题: 如何让怪物不盲目乱放治疗技能呢 [打印本页]

作者: FHNBHJ    时间: 2012-1-21 14:52
标题: 如何让怪物不盲目乱放治疗技能呢
战斗中怪物会对着满血的其他怪物放治疗技能,而血条见底的却视而不见ORZ
有什么办法让怪物只对受伤最严重的其他怪物施放治疗技能?

【强制行动?为啥强制行动时,怪物会顶着混乱、狂乱状态放技能?】dsu_plus_rewardpost_czw
作者: 零の使魔    时间: 2012-1-21 14:55
本帖最后由 零の使魔 于 2012-1-21 15:23 编辑

这个代码插入main前面,可以让敌人的回复技能(仅限对队友)对象选择hp最低的同伴(不会临时改变)

敌人智商不能这么高,所以,这个脚本的作用只限于回合开始决定敌人行动时(战斗中hp减少无视)
如果还要什么效果就继续补充吧
  1. class Game_BattleAction

  2. def de
  3.     # 效果范围的分支
  4.     if for_one_friend_hp0?
  5.       battler = $game_troop.random_target_enemy_hp0
  6.     elsif for_one_friend?
  7.       l = []
  8.       for e in $game_troop.enemies
  9.         l.push(e.hp)
  10.       end
  11.       hp = l.min
  12.       for e in $game_troop.enemies
  13.         if e.hp == hp
  14.           battler = e
  15.         end
  16.       end
  17.       if battler.hp * 100.0/  battler.maxhp == 100
  18.       battler = $game_troop.random_target_enemy
  19.       end
  20.     else
  21.       battler = $game_party.random_target_actor
  22.     end
  23.     # 对像存在的话取得索引、
  24.     # 对像不存在的场合下清除行动
  25.     if battler != nil
  26.       @target_index = battler.index
  27.     else
  28.       clear
  29.     end
  30.   end

  31. end
  32. class Game_Enemy < Game_Battler
  33.   #--------------------------------------------------------------------------
  34.   # ● 生成行动
  35.   #--------------------------------------------------------------------------
  36.   def make_action
  37.     # 清除当前行动
  38.     self.current_action.clear
  39.     # 无法行动的情况
  40.     unless self.movable?
  41.       # 过程结束
  42.       return
  43.     end
  44.     # 抽取现在有效的行动
  45.     available_actions = []
  46.     rating_max = 0
  47.     for action in self.actions
  48.       # 确认回合条件
  49.       n = $game_temp.battle_turn
  50.       a = action.condition_turn_a
  51.       b = action.condition_turn_b
  52.       if (b == 0 and n != a) or
  53.          (b > 0 and (n < 1 or n < a or n % b != a % b))
  54.         next
  55.       end
  56.       # 确认 HP 条件
  57.       if self.hp * 100.0 / self.maxhp > action.condition_hp
  58.         next
  59.       end
  60.       # 确认等级条件
  61.       if $game_party.max_level < action.condition_level
  62.         next
  63.       end
  64.       # 确认开关条件
  65.       switch_id = action.condition_switch_id
  66.       if switch_id > 0 and $game_switches[switch_id] == false
  67.         next
  68.       end
  69.       # 符合条件 : 添加本行动
  70.       available_actions.push(action)
  71.       if action.rating > rating_max
  72.         rating_max = action.rating
  73.       end
  74.     end
  75.     # 最大概率值作为 3 合计计算(0 除外)
  76.     ratings_total = 0
  77.     for action in available_actions
  78.       if action.rating > rating_max - 3
  79.         ratings_total += action.rating - (rating_max - 3)
  80.       end
  81.     end
  82.     # 概率合计不为 0 的情况下
  83.     if ratings_total > 0
  84.       # 生成随机数
  85.       value = rand(ratings_total)
  86.       # 设置对应生成随机数的当前行动
  87.       for action in available_actions
  88.         if action.rating > rating_max - 3
  89.           if value < action.rating - (rating_max - 3)
  90.             self.current_action.kind = action.kind
  91.             self.current_action.basic = action.basic
  92.             self.current_action.skill_id = action.skill_id
  93.             if $data_skills[self.current_action.skill_id].power < 0
  94.               self.current_action.de
  95.             else
  96.               self.current_action.decide_random_target_for_enemy
  97.             end
  98.             return
  99.           else
  100.             value -= action.rating - (rating_max - 3)
  101.           end
  102.         end
  103.       end
  104.     end
  105.   end
  106. end
复制代码

作者: 爆焰    时间: 2012-1-21 14:56
设置怪物的治疗技能时可以设置当HP百分之几时再施放的嘛,如图。

作者: FHNBHJ    时间: 2012-1-21 15:20
爆焰 发表于 2012-1-21 14:56
设置怪物的治疗技能时可以设置当HP百分之几时再施放的嘛,如图。

那样的话是治疗怪物的HP在50%以下时,乱放治疗技能吧OTL..




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1