FlipelyFlip

FFS - Better Heal AI

Mar 30th, 2026 (edited)
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.89 KB | None | 0 0
  1. =begin
  2.  
  3. In diesem Script wird gehandhabt, wie das Heilen abläuft bzw. eine bessere
  4. AI bezüglich heilen wird ausgeführt.
  5. Es wird geschaut welcher Member der Troop Gruppe die geringste HP hat und
  6. anhand dessen wird dieser dann als Target gewählt.
  7.  
  8. Hinterlege einfach im Skill, der heilt den Notetag <healing>. Dadurch wird
  9. dann die bessere AI verwendet.
  10.  
  11. =end
  12.  
  13. module FFS
  14.   module HealAI
  15.     OBERGRENZE = 40 # definiert die Heil-Grenze
  16.   end
  17. end
  18.  
  19. class RPG::UsableItem
  20.   def healing?
  21.     !!(self.note =~ /<healing>/i)
  22.   end
  23. end
  24.  
  25. class Game_Action
  26.   #--------------------------------------------------------------------------
  27.   # * Targets for Allies
  28.   #--------------------------------------------------------------------------
  29.   def targets_for_friends
  30.     if item.for_user?
  31.       [subject]
  32.     elsif item.for_dead_friend?
  33.       if item.for_one?
  34.         [friends_unit.members[@target_index]]
  35.       else
  36.         friends_unit.members
  37.       end
  38.     elsif item.for_friend? && item.healing?
  39.       if item.for_one?
  40.         [friends_unit.heal_target]
  41.       else
  42.         friends_unit.alive_members
  43.       end
  44.     elsif item.for_friend?
  45.       if item.for_one?
  46.         [friends_unit.smooth_target(@target_index)]
  47.       else
  48.         friends_unit.alive_members
  49.       end
  50.     end
  51.   end
  52. end
  53.  
  54. class Game_Unit
  55.   def heal_target
  56.     lowestHP = []
  57.     for i in 0...members.length
  58.       member = members[i]
  59.       lowestHP.push(member) if member.alive? && member.hp < member.mhp
  60.     end
  61.     lowest = nil
  62.     for i in 0...lowestHP.length
  63.       lowest = lowestHP[i] if lowest == nil
  64.       lowest = lowestHP[i] if lowest.difHP > lowestHP[i].difHP
  65.     end
  66.     return lowest
  67.   end
  68.  
  69.   def heal_trigger?
  70.     hp_in_range = false
  71.     for i in 0...members.length
  72.       member = members[i]
  73.       hp_in_range = member.difHP <= FFS::HealAI::OBERGRENZE && member.difHP > 0
  74.       break if hp_in_range
  75.     end
  76.     return hp_in_range
  77.   end
  78. end
  79.  
  80. class Game_Battler < Game_BattlerBase
  81.   def difHP
  82.     dif = (hp * 1.0 / mhp) * 100
  83.     return dif
  84.   end
  85. end
  86.  
  87. class Game_Enemy < Game_Battler
  88.   #--------------------------------------------------------------------------
  89.   # * Create Battle Action
  90.   #--------------------------------------------------------------------------
  91.   def make_actions
  92.     super
  93.     return if @actions.empty?
  94.     action_list = enemy.actions.select {|a| action_valid?(a) }
  95.     return if action_list.empty?
  96.     rating_max = action_list.collect {|a| a.rating }.max
  97.     rating_zero = rating_max - 3
  98.     # Entferne Healing-Skills, wenn kein Member <40% HP hat
  99.     action_list.reject! do |a|
  100.       skill = $data_skills[a.skill_id]
  101.       skill.healing? && !friends_unit.heal_trigger?
  102.     end
  103.     action_list.reject! {|a| a.rating <= rating_zero }
  104.     @actions.each do |action|
  105.       action.set_enemy_action(select_enemy_action(action_list, rating_zero))
  106.     end
  107.   end
  108. end
Advertisement
Add Comment
Please, Sign In to add comment