Guest User

Untitled

a guest
Apr 23rd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.53 KB | None | 0 0
  1. # // Well its a total rewrite @___@
  2. #==============================================================================#
  3. # ** Z
  4. #==============================================================================#
  5. module Z
  6.  
  7. # NORMAL_DAMAGE
  8. # // Added by IceDragon
  9. # // "NORMAL_DAMAGE", "NORMALDAMAGE", "NORMAL DAMAGE", "NORMAL"
  10. # // "OBJ_DAMAGE", "OBJDAMAGE", "OBJ DAMAGE", "OBJ"
  11. # // Sonic: (+/-)n # // Sonic: 20, Sonic: -20
  12. # // Percent: (+/-)n% host stat # // Percent: 20% user hp
  13.  
  14. # // <damage: Sonic: 20>
  15. # // <dam: Percent: -20%> # // Healing effect
  16. def self.damage_formulae( attacker, target, params=[], obj=nil )
  17. user = attacker
  18. formula = obj.nil?() ? attacker.damage_formulae : obj.damage
  19. damage = 0.0
  20. hp_damage, mp_damage = 0, 0
  21. critical = false
  22. variance = 0
  23. element_set = attacker.element_set
  24. element_set = obj.element_set unless obj.nil?()
  25. # // Param extracts
  26. allow_critical = !params.include?( "NO_CRIT" )
  27. allow_variance = !params.include?( "NO_VARI" )
  28. allow_guard = !params.include?( "NO_GUARD" )
  29. allow_element = !params.include?( "NO_ELEMENT" )
  30. allow_multiplier = !params.include?( "NO_MULT" )
  31. allow_divider = !params.include?( "NO_DIV" )
  32. use_mp_damage = params.include?( "MP_DAM" )
  33. use_hp_damage = params.include?( "HP_DAM" )
  34.  
  35. # // Some Procs
  36. get_host = Proc.new { |host|
  37. case host.upcase
  38. when "USER" ; attacker
  39. when "TARGET" ; target
  40. end
  41. }
  42.  
  43. formula = attacker.damage_formulae if obj.physical_attack unless obj.nil?()
  44. # // Formulaes
  45. case formula.upcase
  46. # // <dam: stat: min, max, speed>
  47. when /STAT:[ ](.*),[ ](.*),[ ](.*)/i
  48. min, max, spd = $1.to_i, $2.to_i, $3.to_f
  49. da = min + rand(max-min) / spd
  50.  
  51. if obj.nil?()
  52. da = da + ((attacker.atk*0.8) - (target.def*0.25))
  53. damage += da
  54. damage = obj.nil? ? rand(2) : 0 if damage < 0
  55. else
  56. damage = obj.base_damage.to_f
  57. #da = da + ((attacker.spi*0.4) - (target.def*0.25))
  58. if damage > 0
  59. damage += da
  60. damage = obj.nil? ? rand(2) : 0 if damage < 0
  61. elsif damage < 0
  62. damage -= da
  63. end
  64. end
  65.  
  66. # Object Atk_F and Spi_F calculations
  67. if damage > 0
  68. if obj.physical_attack
  69. damage += attacker.atk*0.8
  70. #damage = damage * obj.spi_f / 100.0
  71. else
  72. #damage += (user.atk*0.8) * obj.atk_f / 100.0
  73. damage += attacker.spi * 0.4
  74. end
  75. unless obj.ignore_defense
  76. damage -= (target.def * 0.2) if obj.physical_attack
  77. damage -= (target.spi * 0.2) if !obj.physical_attack
  78. end
  79. elsif damage < 0
  80. if obj.physical_attack
  81. damage = damage * obj.atk_f / 100.0
  82. #damage = damage * obj.spi_f / 100.0
  83. else
  84. #damage -= (user.atk*0.6) * obj.atk_f / 100.0
  85. damage -= (user.spi*0.4) * obj.spi_f / 100.0
  86. end
  87. end unless obj.nil?()
  88. variance = obj.variance unless obj.nil?()
  89. #damage /= 2.0 unless obj.nil?()
  90. allow_critical = obj.nil?() ? true : obj.physical_attack
  91. allow_multiplier = false # // * 4.0
  92. allow_divider = true # // / 100.0
  93. # // Default Attack Damage Formulae
  94. when "NORMAL_DAMAGE", "NORMALDAMAGE", "NORMAL DAMAGE", "NORMAL"
  95. damage = attacker.atk - target.def
  96. damage = rand(2) if damage <= 0
  97. allow_multiplier = true
  98. variance = 20
  99. # // Default Skill/Item Damage Formulae
  100. when "OBJ_DAMAGE", "OBJDAMAGE", "OBJ DAMAGE", "OBJ"
  101. damage = obj.base_damage
  102. if damage > 0
  103. damage += user.atk * obj.atk_f / 100.0
  104. damage += user.spi * obj.spi_f / 100.0
  105. unless obj.ignore_defense
  106. damage -= target.def * obj.atk_f / 100.0
  107. damage -= target.spi * obj.spi_f / 100.0
  108. end
  109. damage = 0 if damage < 0
  110. elsif damage < 0
  111. damage -= user.atk * obj.atk_f / 100.0
  112. damage -= user.spi * obj.spi_f / 100.0
  113. end
  114. damage /= 100.0
  115. variance = obj.variance
  116. # // Sonic: +/-n
  117. # // Always inflicts n damage
  118. when /SONIC:[ ]([\+\-]?\d+)/i
  119. damage = $1.to_i
  120. allow_critical = false
  121. allow_variance = false
  122. allow_guard = false
  123. allow_element = false
  124. allow_multiplier = false
  125. allow_divider = false
  126. # // Percent: +/-n% stat
  127. # // Inflicts n% damage
  128. when /(?:PERCENT|PERC):[ ]([\+\-]?\d+)(?:[%%]),[ ](.*),[ ](.*)/i
  129. perc = $1.to_i
  130. host = $2
  131. stat = $3
  132. case stat.upcase
  133. when "HP"
  134. damage += get_host.call(host).hp.to_f * perc.to_f / 100.0
  135. when "MAXHP"
  136. damage += get_host.call(host).maxhp.to_f * perc.to_f / 100.0
  137. when "MP"
  138. damage += get_host.call(host).mp.to_f * perc.to_f / 100.0
  139. when "MAXMP"
  140. damage += get_host.call(host).maxmp.to_f * perc.to_f / 100.0
  141. when "ATK"
  142. damage += get_host.call(host).atk.to_f * perc.to_f / 100.0
  143. when "DEF"
  144. damage += get_host.call(host).def.to_f * perc.to_f / 100.0
  145. when "SPI"
  146. damage += get_host.call(host).spi.to_f * perc.to_f / 100.0
  147. when "AGI"
  148. damage += get_host.call(host).agi.to_f * perc.to_f / 100.0
  149. end
  150. end
  151. if allow_critical
  152. critical = (rand(100) < attacker.cri)
  153. critical = false if target.prevent_critical
  154. damage *= 1.6 if critical
  155. end if damage > 0
  156. damage *= target.elements_max_rate(element_set) if allow_element
  157. damage = target.apply_variance(damage, variance) if allow_variance
  158. damage = target.apply_guard(damage) if allow_guard
  159. damage *= 4.0 if allow_multiplier
  160. damage /= 100.0 if allow_divider
  161. hp_damage = Integer(damage) if use_hp_damage
  162. mp_damage = Integer(damage) if use_mp_damage
  163. return [hp_damage, mp_damage, critical]
  164. end
  165.  
  166. end
  167.  
  168. #==============================================================================#
  169. # ** RPG::BaseItem
  170. #==============================================================================#
  171. class RPG::BaseItem
  172.  
  173. attr_accessor :damage
  174.  
  175. def zi_baseitemcache()
  176. self.note.gsub!(/<stats:[ ](.*) (.*) (.*)>/i) {
  177. "<dam: Stat: #{$1}, #{$2}, #{$3}>"
  178. }
  179. case self
  180. when RPG::Skill, RPG::Item
  181. @damage = "OBJ_DAMAGE"
  182. else
  183. @damage = "NORMAL_DAMAGE"
  184. end
  185. @damage = self.note =~ /<(?:DAMAGE|DMG|DAM):[ ](.*)>/i ? $1 : @damage
  186. end
  187.  
  188. end
  189.  
  190. #==============================================================================#
  191. # ** RPG::Enemy
  192. #==============================================================================#
  193. class RPG::Enemy
  194.  
  195. attr_accessor :damage
  196.  
  197. def zi_baseenemycache()
  198. @damage = "NORMAL_DAMAGE"
  199. @damage = self.note =~ /<(?:DAMAGE|DMG|DAM):[ ](.*)>/i ? $1 : @damage
  200. end
  201.  
  202. end
  203.  
  204. #==============================================================================#
  205. # ** Game_Battler
  206. #==============================================================================#
  207. class Game_Battler
  208.  
  209. #--------------------------------------------------------------------------
  210. # * Calculation of Damage From Normal Attack
  211. # attacker : Attacker
  212. # The results are substituted for @hp_damage
  213. #--------------------------------------------------------------------------
  214. def make_attack_damage_value( attacker )
  215. damara = Z.damage_formulae(
  216. attacker, self,
  217. [ "HP_DAM" ],
  218. nil ) # // Get Damage Array
  219. @hp_damage, @mp_damage, @critical = *damara
  220. end
  221.  
  222. #--------------------------------------------------------------------------
  223. # * Calculation of Damage Caused by Skills or Items
  224. # user : User of skill or item
  225. # obj : Skill or item (for normal attacks, this is nil)
  226. # The results are substituted for @hp_damage or @mp_damage.
  227. #--------------------------------------------------------------------------
  228. def make_obj_damage_value( user, obj )
  229. damara = Z.damage_formulae(
  230. user, self,
  231. [ obj.damage_to_mp ? "MP_DAM" : "HP_DAM" ],
  232. obj ) # // Get Damage Array
  233. @hp_damage, @mp_damage, @critical = *damara
  234. end
  235.  
  236. end
  237.  
  238. #==============================================================================#
  239. # ** Game_Enemy
  240. #==============================================================================#
  241. class Game_Enemy < Game_Battler
  242.  
  243. def damage_formulae
  244. return enemy.damage
  245. end
  246.  
  247. end
  248.  
  249. #==============================================================================#
  250. # ** Game_Actor
  251. #==============================================================================#
  252. class Game_Actor < Game_Battler
  253.  
  254. def damage_formulae
  255. return weapons[0].nil? ? "NORMAL_DAMAGE" : weapons[0].damage
  256. end
  257.  
  258. end
  259.  
  260. #==============================================================================#
  261. # ** Scene_Title
  262. #==============================================================================#
  263. class Scene_Title < Scene_Base
  264.  
  265. #--------------------------------------------------------------------------#
  266. # * alias method :load_database
  267. #--------------------------------------------------------------------------#
  268. alias :zi_sct_load_database :load_database unless $@
  269. def load_database()
  270. zi_sct_load_database()
  271. load_zi_cache()
  272. end
  273.  
  274. #--------------------------------------------------------------------------#
  275. # * alias method :load_bt_database
  276. #--------------------------------------------------------------------------#
  277. alias :zi_sct_load_bt_database :load_database unless $@
  278. def load_bt_database()
  279. zi_sct_load_bt_database()
  280. load_zi_cache()
  281. end
  282.  
  283. #--------------------------------------------------------------------------#
  284. # * new method :load_zi_cache
  285. #--------------------------------------------------------------------------#
  286. def load_zi_cache()
  287. objs = [$data_items, $data_skills, $data_weapons, $data_enemies]
  288. objs.each { |group| group.each { |obj| next if obj.nil?
  289. obj.zi_baseitemcache() if obj.is_a?(RPG::BaseItem)
  290. obj.zi_baseenemycache() if obj.is_a?(RPG::Enemy) } }
  291. end
  292.  
  293. end
Add Comment
Please, Sign In to add comment