Project1

标题: 求教如何获取敌方技能的mp消耗? [打印本页]

作者: 存档不能    时间: 2013-10-15 09:59
标题: 求教如何获取敌方技能的mp消耗?
本帖最后由 存档不能 于 2013-10-15 16:57 编辑

我想在game_enemy里调用敌人 所拥有的技能中消耗的mp最少的那一个技能的mp数值
举例: 敌人A 所会的技能: 技能1 mp4   技能2mp3   技能3mp5(不论开关条件)
显而易见技能2消耗的mp是最少的,那么调用数值3

这样要如何做?

顺便说一下我的目的:xp默认系统的中,敌人mp为0时会发生卡死的bug,我想利用判断敌人自身最小消耗的技能来设定mp不足时的行动
现在的问题就是调用合适的数值(直接调用较小的数值的话很不灵活,还是容易出错的)
作者: 存档不能    时间: 2013-10-15 16:57
嗯,自己想来个稍微麻烦的方法解决了
作者: 芯☆淡茹水    时间: 2013-10-15 18:16
本帖最后由 芯☆淡茹水 于 2013-10-15 19:41 编辑

其实可以把 生成敌人行动 里改一下:如果所选择的特技不能使用,变为普通攻击。
  1. class Game_Enemy < Game_Battler
  2.     #--------------------------------------------------------------------------
  3.   # ● 生成行动
  4.   #--------------------------------------------------------------------------
  5.   def make_action
  6.     # 清除当前行动
  7.     self.current_action.clear
  8.     # 无法行动的情况
  9.     unless self.movable?
  10.       # 过程结束
  11.       return
  12.     end
  13.     # 抽取现在有效的行动
  14.     available_actions = []
  15.     rating_max = 0
  16.     for action in self.actions
  17.       # 确认回合条件
  18.       n = $game_temp.battle_turn
  19.       a = action.condition_turn_a
  20.       b = action.condition_turn_b
  21.       if (b == 0 and n != a) or
  22.          (b > 0 and (n < 1 or n < a or n % b != a % b))
  23.         next
  24.       end
  25.       # 确认 HP 条件
  26.       if self.hp * 100.0 / self.maxhp > action.condition_hp
  27.         next
  28.       end
  29.       # 确认等级条件
  30.       if $game_party.max_level < action.condition_level
  31.         next
  32.       end
  33.       # 确认开关条件
  34.       switch_id = action.condition_switch_id
  35.       if switch_id > 0 and $game_switches[switch_id] == false
  36.         next
  37.       end
  38.       # 符合条件 : 添加本行动
  39.       available_actions.push(action)
  40.       if action.rating > rating_max
  41.         rating_max = action.rating
  42.       end
  43.     end
  44.     # 最大概率值作为 3 合计计算(0 除外)
  45.     ratings_total = 0
  46.     for action in available_actions
  47.       if action.rating > rating_max - 3
  48.         ratings_total += action.rating - (rating_max - 3)
  49.       end
  50.     end
  51.     # 概率合计不为 0 的情况下
  52.     if ratings_total > 0
  53.       # 生成随机数
  54.       value = rand(ratings_total)
  55.       # 设置对应生成随机数的当前行动
  56.       for action in available_actions
  57.         if action.rating > rating_max - 3
  58.           if value < action.rating - (rating_max - 3)
  59.             self.current_action.kind = action.kind
  60.             self.current_action.basic = action.basic
  61.             self.current_action.skill_id = action.skill_id
  62.             self.current_action.decide_random_target_for_enemy
  63.             ######################################################
  64.             # 如果所选择的特技不能使用,改为普通攻击。
  65.             if self.current_action.kind == 1
  66.               unless self.skill_can_use?(self.current_action.skill_id)
  67.                 self.current_action.kind = 0
  68.                 self.current_action.basic = 0
  69.               end
  70.             end
  71.             ######################################################
  72.             return
  73.           else
  74.             value -= action.rating - (rating_max - 3)
  75.           end
  76.         end
  77.       end
  78.     end
  79.   end
复制代码





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