Advertisement
roninator2

Prevent Attack Self on Confusion

Dec 11th, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.36 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Not Attack Self on Confusion           ║  Version: 1.00     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║ Remove subject from list of targets           ║    05 Jan 2024     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ╚════════════════════════════════════════════════════════════════════╝
  12. # ╔════════════════════════════════════════════════════════════════════╗
  13. # ║ Brief Description:                                                 ║
  14. # ║   Will remove subject from list of potential targets               ║
  15. # ╚════════════════════════════════════════════════════════════════════╝
  16. # ╔════════════════════════════════════════════════════════════════════╗
  17. # ║ Instructions:                                                      ║
  18. # ║   Add note tag to state <not_attack_self>                          ║
  19. # ║   Subject will not attack self when inflicted with state           ║
  20. # ╚════════════════════════════════════════════════════════════════════╝
  21. # ╔════════════════════════════════════════════════════════════════════╗
  22. # ║ Updates:                                                           ║
  23. # ║ 1.00 - 05 Jan 2024 - Script finished                               ║
  24. # ╚════════════════════════════════════════════════════════════════════╝
  25. # ╔════════════════════════════════════════════════════════════════════╗
  26. # ║ Credits and Thanks:                                                ║
  27. # ║   Roninator2                                                       ║
  28. # ║                                                                    ║
  29. # ╚════════════════════════════════════════════════════════════════════╝
  30. # ╔════════════════════════════════════════════════════════════════════╗
  31. # ║ Terms of use:                                                      ║
  32. # ║  Follow the original Authors terms of use where applicable         ║
  33. # ║    - When not made by me (Roninator2)                              ║
  34. # ║  Free for all uses in RPG Maker except nudity                      ║
  35. # ║  Anyone using this script in their project before these terms      ║
  36. # ║  were changed are allowed to use this script even if it conflicts  ║
  37. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  38. # ║  No part of this code can be used with AI programs or tools        ║
  39. # ║  Credit must be given                                              ║
  40. # ╚════════════════════════════════════════════════════════════════════╝
  41.  
  42. class RPG::State < RPG::BaseItem
  43.  
  44.   attr_accessor :not_attack_self
  45.  
  46.   def not_attack_self
  47.     init_not_attack_self if @not_attack_self.nil?
  48.     return @not_attack_self
  49.   end
  50.  
  51.   def init_not_attack_self
  52.     @not_attack_self = @note =~ /<not_attack_self>/i ? true : false
  53.   end
  54.  
  55. end
  56.  
  57. class Game_Action
  58.  
  59.   def confusion_target
  60.     case subject.confusion_level
  61.     when 1
  62.       opponents_unit.random_target
  63.     when 2
  64.       if rand(2) == 0
  65.         opponents_unit.random_target
  66.       else
  67.         if friends_unit.alive_members.size == 1 && (subject.states.any? { |st| st.not_attack_self })
  68.           opponents_unit.random_target
  69.         else
  70.           sbj = friends_unit.random_target
  71.           while sbj == subject && (subject.states.any? { |st| st.not_attack_self })
  72.             sbj = friends_unit.random_target
  73.           end
  74.           return sbj
  75.         end
  76.       end
  77.     else
  78.       if friends_unit.alive_members.size == 1 && (subject.states.any? { |st| st.not_attack_self })
  79.         opponents_unit.random_target
  80.       else
  81.         sbj = friends_unit.random_target
  82.         while sbj == subject && (subject.states.any? { |st| st.not_attack_self })
  83.           sbj = friends_unit.random_target
  84.         end
  85.         return sbj
  86.       end
  87.     end
  88.   end
  89. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement