Guest User

Untitled

a guest
Apr 23rd, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.72 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 = damage * obj.atk_f / 100.0
  70. #damage = damage * obj.spi_f / 100.0
  71. else
  72. #damage += (user.atk*0.8) * obj.atk_f / 100.0
  73. damage += (user.spi*0.4) * obj.spi_f / 100.0
  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. #~ damage -= (target.def*0.1) * obj.atk_f / 100.0 if obj.physical_attack
  79. #~ damage -= (target.spi*0.1) * obj.spi_f / 100.0 if !obj.physical_attack
  80. end
  81. elsif damage < 0
  82. if obj.physical_attack
  83. damage = damage * obj.atk_f / 100.0
  84. #damage = damage * obj.spi_f / 100.0
  85. else
  86. #damage -= (user.atk*0.6) * obj.atk_f / 100.0
  87. damage -= (user.spi*0.4) * obj.spi_f / 100.0
  88. end
  89. end unless obj.nil?()
  90. variance = obj.variance unless obj.nil?()
  91. #damage /= 2.0 unless obj.nil?()
  92. allow_critical = obj.nil?() ? true : obj.physical_attack
  93. allow_multiplier = false # // * 4.0
  94. allow_divider = true # // / 100.0
  95. # // Default Attack Damage Formulae
  96. when "NORMAL_DAMAGE", "NORMALDAMAGE", "NORMAL DAMAGE", "NORMAL"
  97. damage = attacker.atk - target.def
  98. damage = rand(2) if damage <= 0
  99. allow_multiplier = true
  100. variance = 20
  101. # // Default Skill/Item Damage Formulae
  102. when "OBJ_DAMAGE", "OBJDAMAGE", "OBJ DAMAGE", "OBJ"
  103. damage = obj.base_damage
  104. if damage > 0
  105. damage += user.atk * obj.atk_f / 100.0
  106. damage += user.spi * obj.spi_f / 100.0
  107. unless obj.ignore_defense
  108. damage -= target.def * obj.atk_f / 100.0
  109. damage -= target.spi * obj.spi_f / 100.0
  110. end
  111. damage = 0 if damage < 0
  112. elsif damage < 0
  113. damage -= user.atk * obj.atk_f / 100.0
  114. damage -= user.spi * obj.spi_f / 100.0
  115. end
  116. damage /= 100.0
  117. variance = obj.variance
  118. # // Sonic: +/-n
  119. # // Always inflicts n damage
  120. when /SONIC:[ ]([\+\-]?\d+)/i
  121. damage = $1.to_i
  122. allow_critical = false
  123. allow_variance = false
  124. allow_guard = false
  125. allow_element = false
  126. allow_multiplier = false
  127. allow_divider = false
  128. # // Percent: +/-n% stat
  129. # // Inflicts n% damage
  130. when /(?:PERCENT|PERC):[ ]([\+\-]?\d+)(?:[%%]),[ ](.*),[ ](.*)/i
  131. perc = $1.to_i
  132. host = $2
  133. stat = $3
  134. case stat.upcase
  135. when "HP"
  136. damage += get_host.call(host).hp.to_f * perc.to_f / 100.0
  137. when "MAXHP"
  138. damage += get_host.call(host).maxhp.to_f * perc.to_f / 100.0
  139. when "MP"
  140. damage += get_host.call(host).mp.to_f * perc.to_f / 100.0
  141. when "MAXMP"
  142. damage += get_host.call(host).maxmp.to_f * perc.to_f / 100.0
  143. when "ATK"
  144. damage += get_host.call(host).atk.to_f * perc.to_f / 100.0
  145. when "DEF"
  146. damage += get_host.call(host).def.to_f * perc.to_f / 100.0
  147. when "SPI"
  148. damage += get_host.call(host).spi.to_f * perc.to_f / 100.0
  149. when "AGI"
  150. damage += get_host.call(host).agi.to_f * perc.to_f / 100.0
  151. end
  152. end
  153. if allow_critical
  154. critical = (rand(100) < attacker.cri)
  155. critical = false if target.prevent_critical
  156. damage *= 1.6 if critical
  157. end if damage > 0
  158. damage *= target.elements_max_rate(element_set) if allow_element
  159. damage = target.apply_variance(damage, variance) if allow_variance
  160. damage = target.apply_guard(damage) if allow_guard
  161. damage *= 4.0 if allow_multiplier
  162. damage /= 100.0 if allow_divider
  163. hp_damage = Integer(damage) if use_hp_damage
  164. mp_damage = Integer(damage) if use_mp_damage
  165. return [hp_damage, mp_damage, critical]
  166. end
  167.  
  168. end
  169.  
  170. #==============================================================================#
  171. # ** RPG::BaseItem
  172. #==============================================================================#
  173. class RPG::BaseItem
  174.  
  175. attr_accessor :damage
  176.  
  177. def zi_baseitemcache()
  178. self.note.gsub!(/<stats:[ ](.*) (.*) (.*)>/i) {
  179. "<dam: Stat: #{$1}, #{$2}, #{$3}>"
  180. }
  181. case self
  182. when RPG::Skill, RPG::Item
  183. @damage = "OBJ_DAMAGE"
  184. else
  185. @damage = "NORMAL_DAMAGE"
  186. end
  187. @damage = self.note =~ /<(?:DAMAGE|DMG|DAM):[ ](.*)>/i ? $1 : @damage
  188. end
  189.  
  190. end
  191.  
  192. #==============================================================================#
  193. # ** RPG::Enemy
  194. #==============================================================================#
  195. class RPG::Enemy
  196.  
  197. attr_accessor :damage
  198.  
  199. def zi_baseenemycache()
  200. @damage = "NORMAL_DAMAGE"
  201. @damage = self.note =~ /<(?:DAMAGE|DMG|DAM):[ ](.*)>/i ? $1 : @damage
  202. end
  203.  
  204. end
  205.  
  206. #==============================================================================#
  207. # ** Game_Battler
  208. #==============================================================================#
  209. class Game_Battler
  210.  
  211. #--------------------------------------------------------------------------
  212. # * Calculation of Damage From Normal Attack
  213. # attacker : Attacker
  214. # The results are substituted for @hp_damage
  215. #--------------------------------------------------------------------------
  216. def make_attack_damage_value( attacker )
  217. damara = Z.damage_formulae(
  218. attacker, self,
  219. [ "HP_DAM" ],
  220. nil ) # // Get Damage Array
  221. @hp_damage, @mp_damage, @critical = *damara
  222. end
  223.  
  224. #--------------------------------------------------------------------------
  225. # * Calculation of Damage Caused by Skills or Items
  226. # user : User of skill or item
  227. # obj : Skill or item (for normal attacks, this is nil)
  228. # The results are substituted for @hp_damage or @mp_damage.
  229. #--------------------------------------------------------------------------
  230. def make_obj_damage_value( user, obj )
  231. damara = Z.damage_formulae(
  232. user, self,
  233. [ obj.damage_to_mp ? "MP_DAM" : "HP_DAM" ],
  234. obj ) # // Get Damage Array
  235. @hp_damage, @mp_damage, @critical = *damara
  236. end
  237.  
  238. end
  239.  
  240. #==============================================================================#
  241. # ** Game_Enemy
  242. #==============================================================================#
  243. class Game_Enemy < Game_Battler
  244.  
  245. def damage_formulae
  246. return enemy.damage
  247. end
  248.  
  249. end
  250.  
  251. #==============================================================================#
  252. # ** Game_Actor
  253. #==============================================================================#
  254. class Game_Actor < Game_Battler
  255.  
  256. def damage_formulae
  257. return weapons[0].nil? ? "NORMAL_DAMAGE" : weapons[0].damage
  258. end
  259.  
  260. end
  261.  
  262. #==============================================================================#
  263. # ** Scene_Title
  264. #==============================================================================#
  265. class Scene_Title < Scene_Base
  266.  
  267. #--------------------------------------------------------------------------#
  268. # * alias method :load_database
  269. #--------------------------------------------------------------------------#
  270. alias :zi_sct_load_database :load_database unless $@
  271. def load_database()
  272. zi_sct_load_database()
  273. load_zi_cache()
  274. end
  275.  
  276. #--------------------------------------------------------------------------#
  277. # * alias method :load_bt_database
  278. #--------------------------------------------------------------------------#
  279. alias :zi_sct_load_bt_database :load_database unless $@
  280. def load_bt_database()
  281. zi_sct_load_bt_database()
  282. load_zi_cache()
  283. end
  284.  
  285. #--------------------------------------------------------------------------#
  286. # * new method :load_zi_cache
  287. #--------------------------------------------------------------------------#
  288. def load_zi_cache()
  289. objs = [$data_items, $data_skills, $data_weapons, $data_enemies]
  290. objs.each { |group| group.each { |obj| next if obj.nil?
  291. obj.zi_baseitemcache() if obj.is_a?(RPG::BaseItem)
  292. obj.zi_baseenemycache() if obj.is_a?(RPG::Enemy) } }
  293. end
  294.  
  295. end
Add Comment
Please, Sign In to add comment