Heartbreak61

[SIMPLE STUPID] Weapon Efficiency ver0.63

Jan 5th, 2013
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.01 KB | None | 0 0
  1. $imported = {} if $imported.nil?
  2. $imported["HBK_SSWE"] = 0.63
  3. #==============================================================================
  4. # ■ SIMPLE STUPID WEAPON EFFICIENCY ver0.63
  5. # by HBK61
  6. # Requires: N/A
  7. # Rewrites method: N/A
  8. # Aliases method:
  9. #   Game_ActionResult.make_damage
  10. #   Game_Battler.make_damage_value
  11. #   Data_Manager.load_database
  12. #   Game_Actor.setup
  13. #
  14. #==============================================================================
  15. # CHANGELOG
  16. # - ver0.63  2013.01.05   aliasing make_damage_value, compacting script
  17. # - ver0.62  2012.12.29   give up on aliasing make_damage_value,
  18. #                         rewrite method make_damage_value,
  19. #                         add class weapon efficiency, add debug mode,
  20. #                         add limiter, add damage from item option
  21. # - ver0.61a 2012.08.26   Trying to fix make_damage method on Game_ActionResult
  22. # - ver0.61  2012.08.16   Trying to alias make_damage_value method
  23. # - ver0.60               Initialization
  24. #==============================================================================
  25. # INTRODUCTION
  26. #   This simple snippet is intended to amplify your damage based on your current
  27. #   weapon.
  28. #   You have char A (which class is Archer class) and B (Berserker)
  29. #   A can wield Sword and Bow, B only can wield Sword
  30. #   You think there's no way an archer could defeat berserker on swordmanship
  31. #   Then this script can help you set A's weapon efficiency on sword to 0.5 while
  32. #   B's weapon efficiency on 2.0
  33. #
  34. #
  35. #   This WE system can be applied to Actor and/or Class. And you can also set
  36. #   the WE calculation for Actor and Class to Sum, Max, Avg, or Mult
  37. #
  38. #   Here is another example on Avg method:
  39. #   B has personal 2.0 WE (weapon efficiency) on sword
  40. #   B1 has no personal WE set on sword
  41. #   C has personal 1.3 WE on Sword
  42. #   Berserker class have 1.5 WE on sword
  43. #   Cleric class has no WE set on sword
  44. #
  45. #   Final WE on B will be ( 2.0 + 1.5 ) / 2 = 1.75
  46. #   Final WE for B1 will be 1.5 (only using class WE)
  47. #   Final WE for C will be 1.3 (only using actor WE)
  48. #  
  49. #==============================================================================
  50. # INSTRUCTION
  51. #  - Simply write <weapon_efficiency: weapon_id, value> on class and/or actor's
  52. #    note
  53. #==============================================================================
  54.  
  55. module HBK
  56.   # Put this value to true if you want to track your damage before and after
  57.   # WE is applied on RGSS console
  58.   ENABLE_WE_DEBUG = true
  59.  
  60.   # Change this parameter
  61.   WEAPON_EFFICIENCY_USE_LIMIT = false
  62.   WEAPON_EFFICIENCY_MIN = 0.25
  63.   WEAPON_EFFICIENCY_MAX = 4.0
  64.  
  65.   # Change the calculation method between actor and class WE
  66.   # to :avg, :sum, :max, or :mult
  67.   WEAPON_EFFICIENCY_METHOD = :sum
  68.  
  69.   # Change to true if you want WE also calculate damage caused by items
  70.   WEAPON_EFFICIENCY_INCLUDE_ITEMS = true
  71.    
  72. # Don't change anything below this line unless you know what to do
  73. #==============================================================================
  74.   module REGEX
  75.     WEAPON_EFFICIENCY = /<weapon_efficiency\s*:\s*(\d+),\s*(\d+\.?\d*)>/i
  76.   end
  77. end
  78.  
  79. module DataManager
  80.   class <<self
  81.     alias hbk_sswe_load_database load_database
  82.   end
  83.  
  84.   def self.load_database
  85.     hbk_sswe_load_database
  86.     hbk_sswe_scan_notes
  87.   end
  88.  
  89.   def self.hbk_sswe_scan_notes
  90.     groups = [$data_classes,$data_actors,]
  91.     for group in groups
  92.       for obj in group
  93.         next if obj.nil?
  94.         obj.hbk_sswe_scan_notes
  95.       end
  96.     end
  97.   end
  98. end # module DataManager
  99.  
  100. class Game_BattlerBase;include HBK;end
  101.  
  102. class RPG::Class < RPG::BaseItem
  103.   def hbk_sswe_scan_notes
  104.     @we = []
  105.     self.note.split(/[\r\n]+/).each {|line|
  106.     case line
  107.     when HBK::REGEX::WEAPON_EFFICIENCY
  108.       @we[$1.to_i] = $2.to_f
  109.     end
  110.     }
  111.   end
  112.   attr_accessor :we
  113. end #RPG::Class
  114.  
  115. class RPG::Actor < RPG::BaseItem
  116.   def hbk_sswe_scan_notes
  117.     @we = []
  118.     self.note.split(/[\r\n]+/).each {|line|
  119.     case line
  120.     when HBK::REGEX::WEAPON_EFFICIENCY
  121.       @we[$1.to_i] = $2.to_f
  122.     end
  123.     }
  124.   end
  125.   attr_accessor :we
  126. end #RPG::Actor
  127.  
  128. class Game_Actor < Game_Battler
  129.   alias hbk_sswe_setup setup
  130.   def setup(actor_id)
  131.     hbk_sswe_setup(actor_id)
  132.     @we = actor.we
  133.   end
  134.   attr_accessor :we
  135. end #Game_Actor
  136.  
  137. class Game_ActionResult
  138.   alias hbk_sswe_make_damage make_damage
  139.   def make_damage(value, item)
  140.     hbk_sswe_make_damage(value, item)
  141.     return value
  142.   end
  143. end
  144.  
  145. class Game_Battler < Game_BattlerBase
  146.   alias hbk_sswe_make_damage_value make_damage_value
  147.   def make_damage_value(user, item)
  148.     value = hbk_sswe_make_damage_value(user, item)
  149.     if user.is_a?(Game_Actor)
  150.       user.equips[0].nil? ? wid = 0 : wid = user.equips[0].wtype_id
  151.       puts(user.name) if HBK::ENABLE_WE_DEBUG
  152.       puts("weapon id is " + wid.to_s) if HBK::ENABLE_WE_DEBUG
  153.       puts("value before amplification is " + value.to_s) if HBK::ENABLE_WE_DEBUG
  154.       var1 = user.we[wid]
  155.       var2 = user.class.we[wid]
  156.       if var1.nil? & var2.nil?
  157.         var_total = 1
  158.       elsif var1.nil?
  159.         var_total = var2
  160.       elsif var2.nil?
  161.         var_total = var1
  162.       else
  163.         case HBK::WEAPON_EFFICIENCY_METHOD
  164.         when :avg
  165.           var_total = (var1 + var2)/2
  166.         when :max
  167.           var_total = [var1, var2].max
  168.         when :sum
  169.           var_total = var1 + var2
  170.         when :mult
  171.           var_total = var2 * var2
  172.         end
  173.         if HBK::WEAPON_EFFICIENCY_USE_LIMIT
  174.           mx = HBK::WEAPON_EFFICIENCY_MAX.to_f
  175.           mn = HBK::WEAPON_EFFICIENCY_MIN.to_f
  176.           var_total = [[var_total, mn].max, mx].min
  177.         end
  178.       end
  179.       if !item.is_a?(RPG::Item)
  180.         value *= var_total
  181.       elsif HBK::WEAPON_EFFICIENCY_INCLUDE_ITEMS
  182.         value *= var_total
  183.       end
  184.     end
  185.     puts("amplification is " + var_total.to_s) if HBK::ENABLE_WE_DEBUG
  186.     puts("value after applying WE is " + value.to_s) if HBK::ENABLE_WE_DEBUG
  187.     puts("") if HBK::ENABLE_WE_DEBUG
  188.     @result.make_damage(value, item)
  189.   end
  190. end #Game_Battler
Advertisement
Add Comment
Please, Sign In to add comment