Heartbreak61

[SIMPLE STUPID] Weapon Efficiency ver0.64

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