Advertisement
roninator2

Class Feature Modify

Nov 19th, 2024
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 13.01 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Class Feature Modify                   ║  Version: 1.01     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║   Adjust features for equipment               ╠════════════════════╣
  7. # ║   on class. Blocking or Adding                ║    16 Feb 2022     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║       Modify Class Features                                        ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:   Block                                              ║
  19. # ║   put note tag on weapon or armour that is blocked                 ║
  20. # ║   from a specific class                                            ║
  21. # ║     <class restrict: x, x, x...>                                   ║
  22. # ║  The effect:                                                       ║
  23. # ║    All features on the weapon or armour will not work              ║
  24. # ║    Only classes not in the notetag will get the features           ║
  25. # ║                                                                    ║
  26. # ║                 Add                                                ║
  27. # ║    put note tag on weapon or armour that is to be                  ║
  28. # ║    given extra stat boost for specific classes                     ║
  29. # ║     <class bonus: class id, class id>                              ║
  30. # ║       :stat bonus                                                  ║
  31. # ║       :stat bonus                                                  ║
  32. # ║     </class bonus>                                                 ║
  33. # ║    e.g.                                                            ║
  34. # ║     <class bonus: 2, 5> Bonus will apply to class 2 & 5            ║
  35. # ║     :MHP 100   # increase max hp by 100                            ║
  36. # ║     :ATK 5     # increase attack by 5                              ║
  37. # ║     :HRG 50    # increase health regeneration by 50%               ║
  38. # ║     :PDR 80    # Sets Physical Damage Rate to 80%                  ║
  39. # ║     </class bonus>                                                 ║
  40. # ║                                                                    ║
  41. # ║  List of stats that can be assigned                                ║
  42. # ║    Param                                                           ║
  43. # ║      :MHP  :MMP  :ATK  :DEF  :MAT  :MDF  :AGI  :LUK                ║
  44. # ║                                                                    ║
  45. # ║    XPARAM  Ratio -> e.g. :HIT 10  Adds 10% to hit                  ║
  46. # ║      :HIT  :EVA  :CRI  :CEV  :MEV                                  ║
  47. # ║      :MRF  :CNT  :HRG  :MRG  :TRG                                  ║
  48. # ║                                                                    ║
  49. # ║    SPARAM  Ratio -> e.g. :PHA 10  Overwrites pha to 10%            ║
  50. # ║      :TGR  :GRD  :REC  :PHA  :MCR                                  ║
  51. # ║      :TCR  :PDR  :MDR  :FDR  :EXP                                  ║
  52. # ╚════════════════════════════════════════════════════════════════════╝
  53. # ╔════════════════════════════════════════════════════════════════════╗
  54. # ║ Updates:                                                           ║
  55. # ║ 1.00 - 16 Feb 2022 - Created script with help from Tsukihime code  ║
  56. # ║ 1.01 - 18 Feb 2022 - Script extended for bonus features            ║
  57. # ║                                                                    ║
  58. # ╚════════════════════════════════════════════════════════════════════╝
  59. # ╔════════════════════════════════════════════════════════════════════╗
  60. # ║ Credits and Thanks:                                                ║
  61. # ║   Roninator2                                                       ║
  62. # ║                                                                    ║
  63. # ╚════════════════════════════════════════════════════════════════════╝
  64. # ╔════════════════════════════════════════════════════════════════════╗
  65. # ║ Terms of use:                                                      ║
  66. # ║  Follow the original Authors terms of use where applicable         ║
  67. # ║    - When not made by me (Roninator2)                              ║
  68. # ║  Free for all uses in RPG Maker except nudity                      ║
  69. # ║  Anyone using this script in their project before these terms      ║
  70. # ║  were changed are allowed to use this script even if it conflicts  ║
  71. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  72. # ║  No part of this code can be used with AI programs or tools        ║
  73. # ║  Credit must be given                                              ║
  74. # ╚════════════════════════════════════════════════════════════════════╝
  75.  
  76. module R2_Class_Feature_Adjust
  77.   Bad_Class = /<class[ _-]restrict:[ ]*(\d+(?:\s*,\s*\d+)*)>/i
  78.   Class_Bonus = /<class[-_ ]bonus:[ ]*(\d+(?:\s*,\s*\d+)*)>(.*?)<\/class[-_ ]bonus>/im
  79. end
  80.  
  81. module DataManager
  82.   class <<self
  83.     alias load_database_original_r2_class_equip_adjust_param load_database
  84.   end
  85.   def self.load_database
  86.     load_database_original_r2_class_equip_adjust_param
  87.     load_class_adjust_param_equip
  88.   end
  89.   def self.load_class_adjust_param_equip
  90.     groups = [$data_weapons, $data_armors]
  91.     for group in groups
  92.       for obj in group
  93.         next if obj.nil?
  94.         obj.load_class_adjust_param_equip
  95.       end
  96.     end
  97.   end
  98. end
  99.  
  100. class RPG::EquipItem
  101.   attr_accessor :class_equip_restrict
  102.   attr_accessor :hidden_features
  103.   attr_accessor :bonus_features
  104.   attr_accessor :added_features
  105.   attr_accessor :class_equip_bonus_id
  106.   attr_accessor :class_equip_bonus_params
  107.   def load_class_adjust_param_equip
  108.     @hidden_features = []
  109.     @bonus_features = []
  110.     @added_features = []
  111.     @class_equip_restrict = []
  112.     @class_equip_bonus_id = []
  113.     @class_equip_bonus_params = {}
  114.     parameter_list = [:mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk, :hit, :eva, :cri, :cev, :mev, :mrf, :cnt, :hrg, :mrg, :trg, :tgr, :grd, :rec, :pha, :mcr, :tcr, :pdr, :mdr, :fdr, :exr]
  115.     results = self.note.scan(R2_Class_Feature_Adjust::Bad_Class)
  116.     results.each do |res|
  117.       data = res[0]
  118.       data.strip.split("\r\n").each do |line|
  119.         restrict = $1.split(",").map {|val| val.to_i }
  120.         @class_equip_restrict << restrict
  121.       end
  122.     end
  123.     results = self.note.scan(R2_Class_Feature_Adjust::Class_Bonus)
  124.     results.each do |res|
  125.       id = res[0]
  126.       data = res[1]
  127.       id.strip.split("\r\n").each do |line|
  128.         bonus_class = $1.split(",").map {|val| val.to_i }
  129.         @class_equip_bonus_id << bonus_class
  130.       end
  131.       key = nil
  132.       dig = 0
  133.       data.strip.split("\r\n").each do |line|
  134.         num = line.split(" ").map {|val|
  135.           stat = val.to_i
  136.           if stat == 0
  137.             code = val.to_s.upcase
  138.             parameter_list.each do |k|
  139.               key = k if code.include?(k.to_s.upcase)
  140.             end
  141.           else
  142.             dig = val.to_i
  143.           end
  144.           @class_equip_bonus_params[key] = 0 unless key.nil?
  145.           @class_equip_bonus_params[key] = dig unless key.nil?
  146.         }
  147.       end
  148.     end
  149.   end
  150. end
  151.  
  152. class Game_Actor
  153.   alias r2_class_equip_restrict_param_plus param_plus
  154.   def param_plus(param_id)
  155.     check_class_restrict
  156.     check_class_bonus
  157.     r2_class_equip_restrict_param_plus(param_id)
  158.   end
  159.  
  160.   def check_class_restrict
  161.     equips.compact.each do |eq|
  162.       eq.hidden_features = eq.features if eq.hidden_features == []
  163.       next if eq.class_equip_restrict.empty?
  164.       if eq.class_equip_restrict[0].include?(actor.class_id)
  165.         eq.features = []
  166.         eq.features = eq.added_features if eq.added_features != []
  167.       else
  168.         eq.features = eq.hidden_features if eq.features == []
  169.       end
  170.     end
  171.   end
  172.   def check_class_bonus
  173.     equips.compact.each do |eq|
  174.       next if eq.class_equip_bonus_id.empty?
  175.       if eq.class_equip_bonus_id[0].include?(actor.class_id)
  176.         data = eq.class_equip_bonus_params
  177.         data.each_with_index do |stat, i|
  178.           case stat[0]
  179.           # params
  180.           when :mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk
  181.             list = [:mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk]
  182.             list.each_with_index do |st, j|
  183.               if stat[0] == st
  184.                 id = j
  185.                 value = stat[1]
  186.                 eq.params[id] += value unless eq.bonus_features.include?(stat)
  187.                 eq.bonus_features << stat unless eq.bonus_features.include?(stat)
  188.               end
  189.             end
  190.           # Xparams - add onto previous value
  191.           when :hit, :eva, :cri, :cev, :mev, :mrf, :cnt, :hrg, :mrg, :trg
  192.             list = [:hit, :eva, :cri, :cev, :mev, :mrf, :cnt, :hrg, :mrg, :trg]
  193.             list.each_with_index do |st, j|
  194.               if stat[0] == st
  195.                 id = j
  196.                 value = stat[1]
  197.                 value = value.to_f / 100
  198.                 code = 22
  199.                 eq.features.push(RPG::BaseItem::Feature.new(code, id, value)) unless eq.bonus_features.include?(stat)
  200.                 eq.added_features = eq.features# if eq.features == []
  201.                 eq.bonus_features << stat unless eq.bonus_features.include?(stat)
  202.               end
  203.             end
  204.           # Sparams - Overwrites previous value
  205.           when :tgr, :grd, :rec, :pha, :mcr, :tcr, :pdr, :mdr, :fdr, :exr
  206.             list = [:tgr, :grd, :rec, :pha, :mcr, :tcr, :pdr, :mdr, :fdr, :exr]
  207.             list.each_with_index do |st, j|
  208.               if stat[0] == st
  209.                 id = j
  210.                 value = stat[1]
  211.                 value = value.to_f / 100 + 1
  212.                 code = 23
  213.                 eq.features.push(RPG::BaseItem::Feature.new(code, id, value)) unless eq.bonus_features.include?(stat)
  214.                 eq.added_features = eq.features# if eq.features == []
  215.                 eq.bonus_features << stat unless eq.bonus_features.include?(stat)
  216.               end
  217.             end
  218.           end
  219.         end
  220.       else
  221.         eq.bonus_features = []
  222.       end
  223. #~       eq.features = eq.added_features if eq.features == []
  224.     end
  225.   end
  226. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement