TheoAllen

Theo - Elemental Attack Modifier

May 8th, 2013
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 4.44 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Elemental Attack Modifier
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_ElementAttack] = true
  8. # =============================================================================
  9. # CHANGE LOGS:
  10. # -----------------------------------------------------------------------------
  11. # 2013.05.08 - Started and Finished script
  12. # =============================================================================
  13. =begin
  14.  
  15.   PERKENALAN :
  16.   Script ini memberikan fitur untuk memberikan modifikasi damage berdasar
  17.   element. Semisal, saat actor A memegang fire rod, maka semua serangan yang
  18.   memiliki elemen api akan bertambah jadi 150%
  19.  
  20.   CARA PENGGUNAAN :
  21.   Tulis dalam notetag mana aja (kecuali skill / item)
  22.   - <elem rate: id, rate%>
  23.   Dimana :
  24.   - id    >> nomor urut element
  25.   - rate  >> persenan pengubahnya (100% = ga ada perubahan)
  26.  
  27.   Contoh : <elem rate: 1, 200%>
  28.  
  29.   TERMS OF USE :
  30.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  31.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  32.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  33.  
  34.   NOTE:
  35.   Kalau mau nambahin ide untuk management element, langsung aja bisa komen ke
  36.   blog gw di http://theolized.blogspot.com
  37.  
  38. =end
  39. # =============================================================================
  40. # Tidak ada konfigurasi khusus
  41. # Lewat line ini, kalo ga ngerti script ga usah sok2an ngedit :v
  42. # =============================================================================
  43. module THEO
  44.   module ELEMENTS
  45.   module REGEXP
  46.    
  47.     RATE = /<(?:ELEM_RATE|elem rate):[ ]*[ ]*(\d+\s*,\s*\d*)([%%])>/i
  48.    
  49.   end
  50.   end
  51. end
  52.  
  53. module DataManager
  54.  
  55.   class << self
  56.     alias pre_load_elem_rate load_database
  57.   end
  58.  
  59.   def self.load_database
  60.     pre_load_elem_rate
  61.     load_elements_rate
  62.   end
  63.  
  64.   def self.load_elements_rate
  65.     [$data_actors,$data_classes,$data_weapons,$data_armors,$data_states,
  66.       $data_enemies].each do |databases|
  67.       databases.compact.each do |obj|
  68.         obj.load_elements_rate
  69.       end
  70.     end
  71.   end
  72.  
  73. end
  74.  
  75. class RPG::BaseItem
  76.   attr_accessor :elem_rate
  77.  
  78.   def load_elements_rate
  79.     @elem_rate = {}
  80.     for i in -1..$data_system.elements.size
  81.       @elem_rate[i] = 1.0
  82.     end
  83.     self.note.split(/[\r\n]+/).each do |line|
  84.       case line
  85.       when THEO::ELEMENTS::REGEXP::RATE
  86.         puts "loaded"
  87.         rate = $1.scan(/\d+/)
  88.         @elem_rate[rate[0].to_i] = (rate[1].to_f)*0.01
  89.       end
  90.     end
  91.   end
  92.  
  93. end
  94.  
  95. class Game_Battler < Game_BattlerBase
  96.  
  97.   alias pre_elem_attack_rate item_element_rate
  98.   def item_element_rate(user, item)
  99.     rate = pre_elem_attack_rate(user,item)
  100.     rate = apply_battler_elem_rate(user, item, rate)
  101.     rate = apply_equips_elem_rate(user, item, rate)
  102.     rate = apply_states_elem_rate(user, item, rate)
  103.     rate
  104.   end
  105.  
  106.   def apply_battler_elem_rate(user, item, value)
  107.     if $imported[:Theo_MultiElements]
  108.       item.elements_array.each do |elem|
  109.         value *= user.elem_rate[elem]
  110.       end
  111.     else
  112.       value *= user.elem_rate[item.damage.element_id]
  113.     end
  114.     return value
  115.   end
  116.  
  117.   def apply_equips_elem_rate(user, item, value)
  118.     return value if user.is_a?(Game_Enemy)
  119.     if $imported[:Theo_MultiElements]
  120.       item.elements_array.each do |elem|
  121.         user.equips.compact.each do |eq|
  122.           value *= eq.elem_rate[item.damage.element_id]
  123.         end
  124.       end
  125.     else
  126.       user.equips.compact.each do |eq|
  127.         value *= eq.elem_rate[item.damage.element_id]
  128.       end
  129.     end
  130.     return value
  131.   end
  132.  
  133.   def apply_states_elem_rate(user, item, value)
  134.     if $imported[:Theo_MultiElements]
  135.       item.elements_array.each do |elem|
  136.         user.states.each do |state|
  137.           value *= state.elem_rate[elem]
  138.         end
  139.       end
  140.     else
  141.       user.states.each do |state|
  142.         value *= state.elem_rate[item.damage.element_id]
  143.       end
  144.     end
  145.     return value
  146.   end
  147.  
  148. end
  149.  
  150. class Game_Actor < Game_Battler
  151.  
  152.   def elem_rate
  153.     $data_actors[id].elem_rate
  154.   end
  155.  
  156. end
  157.  
  158. class Game_Enemy < Game_Battler
  159.  
  160.   def elem_rate
  161.     $data_enemies[enemy_id].elem_rate
  162.   end
  163.  
  164. end
Advertisement
Add Comment
Please, Sign In to add comment