Advertisement
roninator2

Enemy Feature Modify

Dec 16th, 2024
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 10.77 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Enemy Feature Modify                   ║  Version: 1.00     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║   Adjust features for enemies                 ╠════════════════════╣
  7. # ║                                               ║    22 Jul 2022     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║       Allow modifying the features for enemy                       ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║                                                                    ║
  20. # ║   Put note tag on enemy note box in order to block                 ║
  21. # ║   a feature unless the condition is true                           ║
  22. # ║  <feature restrict: feature_id,method,value,condition>             ║
  23. # ║   example                                                          ║
  24. # ║     <feature restrict: 2,st,15>                                    ║
  25. # ║     <feature restrict: 4,sw,50>                                    ║
  26. # ║     <feature restrict: 5,v,21,gt,5>                                ║
  27. # ║     <feature restrict: 5,v,21,lt,5>                                ║
  28. # ║   Feature lists starts at 0                                        ║
  29. # ║                                                                    ║
  30. # ║  Available conditions:                                             ║
  31. # ║    st - state (state must be inflicted)                            ║
  32. # ║    sw - switch (switch must be true)                               ║
  33. # ║    v - variable (gt = greater than, lt = less than)                ║
  34. # ║                                                                    ║
  35. # ║  Numbers:                                                          ║
  36. # ║    st,15 - state 15 is inflicted                                   ║
  37. # ║    sw,50 - switch 50 is true                                       ║
  38. # ║  v,21,gt,5 - variable 21 is equal to or greater than 5             ║
  39. # ║                                                                    ║
  40. # ║  The effect:                                                       ║
  41. # ║    All features on the enemy will not work                         ║
  42. # ║    Only features not in the notetag will be available              ║
  43. # ║    Features that are referenced in the note tag                    ║
  44. # ║    will be used or added to the enemy when the                     ║
  45. # ║    condition is true.                                              ║
  46. # ║                                                                    ║
  47. # ╚════════════════════════════════════════════════════════════════════╝
  48. # ╔════════════════════════════════════════════════════════════════════╗
  49. # ║ Updates:                                                           ║
  50. # ║ 1.00 - 22 Jul 2022 - Created script with help from Tsukihime code  ║
  51. # ║                                                                    ║
  52. # ╚════════════════════════════════════════════════════════════════════╝
  53. # ╔════════════════════════════════════════════════════════════════════╗
  54. # ║ Credits and Thanks:                                                ║
  55. # ║   Roninator2                                                       ║
  56. # ║                                                                    ║
  57. # ╚════════════════════════════════════════════════════════════════════╝
  58. # ╔════════════════════════════════════════════════════════════════════╗
  59. # ║ Terms of use:                                                      ║
  60. # ║  Follow the original Authors terms of use where applicable         ║
  61. # ║    - When not made by me (Roninator2)                              ║
  62. # ║  Free for all uses in RPG Maker except nudity                      ║
  63. # ║  Anyone using this script in their project before these terms      ║
  64. # ║  were changed are allowed to use this script even if it conflicts  ║
  65. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  66. # ║  No part of this code can be used with AI programs or tools        ║
  67. # ║  Credit must be given                                              ║
  68. # ╚════════════════════════════════════════════════════════════════════╝
  69.  
  70. module R2_Class_Feature_Adjust
  71.   Feature_Restrict = /<feature[ -_]restrict:[ ](\w+(?:\s*,\s*\w+)*)>/i
  72. end
  73.  
  74. module DataManager
  75.   class <<self
  76.     alias load_database_original_r2_enemy_feature_adjust_mod load_database
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # * Alias Load Database
  80.   #--------------------------------------------------------------------------
  81.   def self.load_database
  82.     load_database_original_r2_enemy_feature_adjust_mod
  83.     load_enemy_feature_param_mod
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # * Load Enemy Feature Restrictions
  87.   #--------------------------------------------------------------------------
  88.   def self.load_enemy_feature_param_mod
  89.     for obj in $data_enemies
  90.       next if obj.nil?
  91.       obj.load_enemy_feature_param_mod
  92.     end
  93.   end
  94. end
  95.  
  96. class RPG::Enemy
  97.   attr_accessor :feature_restrict
  98.   #--------------------------------------------------------------------------
  99.   # * Load Enemy Feature Restrictions
  100.   #--------------------------------------------------------------------------
  101.   def load_enemy_feature_param_mod
  102.     @feature_restrict = []
  103.     results = self.note.scan(R2_Class_Feature_Adjust::Feature_Restrict)
  104.     results.each do |res|
  105.       data = res[0]
  106.       restrict = []
  107.       for x in data.split(",")
  108.         restrict.push(x)
  109.       end
  110.       @feature_restrict << restrict
  111.     end
  112.   end
  113. end
  114.  
  115. class Game_Enemy
  116.   #--------------------------------------------------------------------------
  117.   # * Overwrite Enemy
  118.   #--------------------------------------------------------------------------
  119.   def enemy
  120.     @saved_features = []
  121.     @original_features = [] if @original_features.nil?
  122.     orig = $data_enemies[@enemy_id]
  123.     @original_features = orig.features if @original_features.empty?
  124.     orig.features = @original_features
  125.     @deleted_features = []
  126.     @removed_features = []
  127.     @removed_features = check_feature_restrict(orig)
  128.     @removed_features.each do |ft|
  129.       @deleted_features << @original_features[ft]
  130.     end
  131.     @original_features.each do |ef|
  132.       next if ef.nil?
  133.       @same = false
  134.       code_o = ef.code
  135.       data_o = ef.data_id
  136.       value_o = ef.value
  137.       @deleted_features.each do |df|
  138.         next if df.nil?
  139.         code_d = df.code
  140.         data_d = df.data_id
  141.         value_d = df.value
  142.         if (code_d == code_o) && (data_o == data_d) && (value_o == value_d)
  143.           @same = true
  144.         end
  145.       end
  146.       @saved_features << ef if @same == false
  147.     end
  148.     orig.features = @saved_features
  149.     return orig
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # * New Check feature restrictions
  153.   #--------------------------------------------------------------------------
  154.   def check_feature_restrict(orig)
  155.     ft_remove = []
  156.     restrict_features = orig.feature_restrict
  157.     restrict_features.each do |ftr|
  158.       ft = ftr[0].to_i
  159.       mt = ftr[1].to_s.downcase
  160.       vl = ftr[2].to_i
  161.       eq = ftr[3].to_s.downcase
  162.       cd = ftr[4].to_i
  163.       case mt
  164.       when "st", " st"
  165.         ft_remove.push(ft) if !state?(vl)
  166.       when "sw", " sw"
  167.         if $game_switches[vl] == true
  168.           ft_remove.push(ft)
  169.         end
  170.       when "v", " v"
  171.         if eq == "gt"
  172.           if $game_variables[vl] > cd
  173.             ft_remove.push(ft)
  174.           end
  175.         else
  176.           if $game_variables[vl] < cd
  177.             ft_remove.push(ft)
  178.           end
  179.         end
  180.       end
  181.     end
  182.     return ft_remove
  183.   end
  184. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement