TheoAllen

Theo - Multiple Skill Elements

May 5th, 2013
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 8.04 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Multiple Skill Elements
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. $imported = {} if $imported.nil?
  8. $imported[:Theo_MultiElements] = true
  9. # =============================================================================
  10. # CHANGE LOGS:
  11. # -----------------------------------------------------------------------------
  12. # 2013.05.05 - Started and Finished script
  13. # =============================================================================
  14. =begin
  15.  
  16.   PENGENALAN :
  17.   Secara default, RPG Maker VX Ace tidak support multi element dalam database.
  18.   Yang ada hanyalah satu element untuk satu skill. Script ini ngebikin kamu
  19.   bisa bikin satu skill memiliki banyak element (misalnya, fire spear,
  20.   elemental rage). Kamu juga bisa memilih kalkulasi perhitungan ratio
  21.   elementnya tar di konfigurasi.
  22.  
  23.   CARA PAKAI:
  24.   Jika skill mempunyai element fire, dan senjata mempunyai element slash, maka
  25.   skill sudah mempunyai 2 element. untuk menambah element, gunakan notetag
  26.   pada note di database skill / item :
  27.  
  28.   <elements id: x>
  29.   <elements id: x,x>
  30.  
  31.   TERMS OF USE :
  32.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  33.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  34.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  35.  
  36.   NOTE:
  37.   Kalau mau nambahin ide untuk management element, langsung aja bisa komen ke
  38.   blog gw di http://theolized.blogspot.com
  39.  
  40. =end
  41. # =============================================================================
  42. # Konfigurasi :
  43. # =============================================================================
  44. module THEO
  45.   module ELEMENTS
  46.    
  47.     # -----------------------------------------------------------------------
  48.     PHYSICAL_ELEMENT = true
  49.     # -----------------------------------------------------------------------
  50.     # Set true kalo semisal kamu pengen skill physical elementnya digabung
  51.     # ama attack element (weapon).
  52.     # -----------------------------------------------------------------------
  53.    
  54.     # -----------------------------------------------------------------------
  55.     MAGICAL_ELEMENT = false
  56.     # -----------------------------------------------------------------------
  57.     # Set true kalo semisal kamu pengen skill magical elementnya digabung
  58.     # ama attack element (weapon)
  59.     # -----------------------------------------------------------------------
  60.    
  61.     # -----------------------------------------------------------------------
  62.     CERT_HIT_ELEMENT = false
  63.     # -----------------------------------------------------------------------
  64.     # Set true kalo semisal kamu pengen skill certain hit elementnya digabung
  65.     # ama attack element (weapon)
  66.     # -----------------------------------------------------------------------
  67.    
  68.     # -----------------------------------------------------------------------
  69.     IGNORE_RECOVERY = true
  70.     # -----------------------------------------------------------------------
  71.     # Set true kalo semisal kamu pengen semua skill yang bersifat recover
  72.     # ga mengandung element. (Healing ada elementnya?)
  73.     # -----------------------------------------------------------------------
  74.    
  75.     # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  76.     # MERGE TYPES / Type-type penggabungan
  77.     # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  78.     # Disini kamu akan memilih aturan formula perhitungan element. Sorry kalo
  79.     # semisal perhitungannya terbatas. Kalo semisal kamu pengen kasi saran,
  80.     # jangan lupa komen aja di http://theolized.blogspot.com
  81.     #
  82.     # Well, ok jadi begini soalnya. Semisal sebuah skill mempunyai 2 element
  83.     # dan sebuah(?) battler memiliki resistansi terhadap element itu adalah
  84.     # 50%, 100%,
  85.     # -----------------------------------------------------------------------
  86.     # 0 : Cari yang paling gede
  87.     # -----------------------------------------------------------------------
  88.     # --> Resultnya adalah = 100%
  89.     # -----------------------------------------------------------------------
  90.     # 1 : ADDITION / PENAMBAHAN
  91.     # -----------------------------------------------------------------------
  92.     # Rumus = 100 + (element_1 - 100) + (element_n - 100)
  93.     # --> 100 + (50 - 100) + (100 - 100) = 50%
  94.     # -----------------------------------------------------------------------
  95.     # 2 : AVERAGE RATE / RATA-RATA
  96.     # -----------------------------------------------------------------------
  97.     # Rumus = total / jumlah
  98.     # --> (50+100) / 2 = 75%
  99.     # -----------------------------------------------------------------------
  100.     # 3 : MULTIPLE / DIKALI
  101.     # -----------------------------------------------------------------------
  102.     # Rumus = 100 * (element_1/100) * (element_n/100)
  103.     # --> 100 * (50/100) * (100/100)
  104.     # -----------------------------------------------------------------------
  105.     MERGE_TYPE = 2
  106.     # -----------------------------------------------------------------------
  107.    
  108.   end
  109. end
  110. # =============================================================================
  111. # Batas akhir konfigurasi. Jangan diedit setelah ini
  112. # =============================================================================
  113. module THEO
  114.   module ELEMENTS
  115.   module REGEXP
  116.    
  117.     ELEMENTS = /<(?:ELEMENTS_ID|elements id):[ ]*[ ]*(\d+(?:\s*,\s*\d+)*)>/i
  118.    
  119.   end
  120.   end
  121. end
  122.  
  123. module DataManager
  124.  
  125.   class << self
  126.     alias pre_load_multiple_elements_database load_database
  127.   end
  128.  
  129.   def self.load_database
  130.     pre_load_multiple_elements_database
  131.     load_multiple_elements
  132.   end
  133.  
  134.   def self.load_multiple_elements
  135.     [$data_skills, $data_items].each do |database|
  136.       database.each do |obj|
  137.         next unless obj
  138.         obj.load_multiple_elements
  139.       end
  140.     end
  141.   end
  142.  
  143. end
  144.  
  145. class RPG::UsableItem < RPG::BaseItem
  146.   attr_accessor :elements_array
  147.  
  148.   def load_multiple_elements
  149.     @elements_array = [self.damage.element_id]
  150.     self.note.split(/[\r\n]+/).each { |line|
  151.       case line
  152.       when THEO::ELEMENTS::REGEXP::ELEMENTS
  153.         $1.scan(/\d+/).each { |num|
  154.         @elements_array.push(num.to_i) if num.to_i > 0 }
  155.       end
  156.     }
  157.   end
  158.  
  159. end
  160.  
  161. class Game_Battler < Game_BattlerBase
  162.  
  163.   def item_element_rate(user, item)
  164.     return 1.0 if item.damage.recover? && THEO::ELEMENTS::IGNORE_RECOVERY
  165.     array = make_elements_array(user, item)
  166.     return 1.0 if array.empty?
  167.     return calculate_element_rate(user, item, array)
  168.   end
  169.  
  170.   def make_elements_array(user, item)
  171.     array = item.elements_array.dup
  172.     array = attack_elements_array(user, item, array)
  173.     array
  174.   end
  175.  
  176.   def attack_elements_array(user, item, array)
  177.     return array if user.atk_elements.empty?
  178.     array += user.atk_elements if item.physical? && THEO::ELEMENTS::PHYSICAL_ELEMENT
  179.     array += user.atk_elements if item.magical? && THEO::ELEMENTS::MAGICAL_ELEMENT
  180.     array += user.atk_elements if item.certain? && THEO::ELEMENTS::CERT_HIT_ELEMENT
  181.     return array
  182.   end
  183.  
  184.   def calculate_element_rate(user, item, array)
  185.     case THEO::ELEMENTS::MERGE_TYPE
  186.     when 0
  187.       return elements_max_rate(array)
  188.     when 1
  189.       return calculate_addition_rate(array)
  190.     when 2
  191.       return calculate_average_rate(array)
  192.     when 3
  193.       return calculate_multiply_rate(array)
  194.     else
  195.       return 1.0
  196.     end
  197.   end
  198.  
  199.   def calculate_addition_rate(array)
  200.     rate = 1.0
  201.     array.each do |element|
  202.       rate += element_rate(element) - 1.0
  203.     end
  204.     return rate
  205.   end
  206.  
  207.   def calculate_average_rate(array)
  208.     rate = 0.0
  209.     array.each do |element|
  210.       rate += element_rate(element)
  211.     end
  212.     puts array.size
  213.     return rate / array.size
  214.   end
  215.  
  216.   def calculate_multiply_rate(array)
  217.     rate = 1.0
  218.     array.each do |element|
  219.       rate *= element_rate(element)
  220.     end
  221.     return rate
  222.   end
  223.  
  224. end
Advertisement
Add Comment
Please, Sign In to add comment