Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # =============================================================================
- # TheoAllen - Multiple Skill Elements
- # Version : 1.0
- # Contact : www.rpgmakerid.com
- # (This script documentation is written in informal indonesian language)
- # =============================================================================
- $imported = {} if $imported.nil?
- $imported[:Theo_MultiElements] = true
- # =============================================================================
- # CHANGE LOGS:
- # -----------------------------------------------------------------------------
- # 2013.05.05 - Started and Finished script
- # =============================================================================
- =begin
- PENGENALAN :
- Secara default, RPG Maker VX Ace tidak support multi element dalam database.
- Yang ada hanyalah satu element untuk satu skill. Script ini ngebikin kamu
- bisa bikin satu skill memiliki banyak element (misalnya, fire spear,
- elemental rage). Kamu juga bisa memilih kalkulasi perhitungan ratio
- elementnya tar di konfigurasi.
- CARA PAKAI:
- Jika skill mempunyai element fire, dan senjata mempunyai element slash, maka
- skill sudah mempunyai 2 element. untuk menambah element, gunakan notetag
- pada note di database skill / item :
- <elements id: x>
- <elements id: x,x>
- TERMS OF USE :
- Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
- keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
- dipake buat komersil, jangan lupa, gw dibagi gratisannya.
- NOTE:
- Kalau mau nambahin ide untuk management element, langsung aja bisa komen ke
- blog gw di http://theolized.blogspot.com
- =end
- # =============================================================================
- # Konfigurasi :
- # =============================================================================
- module THEO
- module ELEMENTS
- # -----------------------------------------------------------------------
- PHYSICAL_ELEMENT = true
- # -----------------------------------------------------------------------
- # Set true kalo semisal kamu pengen skill physical elementnya digabung
- # ama attack element (weapon).
- # -----------------------------------------------------------------------
- # -----------------------------------------------------------------------
- MAGICAL_ELEMENT = false
- # -----------------------------------------------------------------------
- # Set true kalo semisal kamu pengen skill magical elementnya digabung
- # ama attack element (weapon)
- # -----------------------------------------------------------------------
- # -----------------------------------------------------------------------
- CERT_HIT_ELEMENT = false
- # -----------------------------------------------------------------------
- # Set true kalo semisal kamu pengen skill certain hit elementnya digabung
- # ama attack element (weapon)
- # -----------------------------------------------------------------------
- # -----------------------------------------------------------------------
- IGNORE_RECOVERY = true
- # -----------------------------------------------------------------------
- # Set true kalo semisal kamu pengen semua skill yang bersifat recover
- # ga mengandung element. (Healing ada elementnya?)
- # -----------------------------------------------------------------------
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # MERGE TYPES / Type-type penggabungan
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # Disini kamu akan memilih aturan formula perhitungan element. Sorry kalo
- # semisal perhitungannya terbatas. Kalo semisal kamu pengen kasi saran,
- # jangan lupa komen aja di http://theolized.blogspot.com
- #
- # Well, ok jadi begini soalnya. Semisal sebuah skill mempunyai 2 element
- # dan sebuah(?) battler memiliki resistansi terhadap element itu adalah
- # 50%, 100%,
- # -----------------------------------------------------------------------
- # 0 : Cari yang paling gede
- # -----------------------------------------------------------------------
- # --> Resultnya adalah = 100%
- # -----------------------------------------------------------------------
- # 1 : ADDITION / PENAMBAHAN
- # -----------------------------------------------------------------------
- # Rumus = 100 + (element_1 - 100) + (element_n - 100)
- # --> 100 + (50 - 100) + (100 - 100) = 50%
- # -----------------------------------------------------------------------
- # 2 : AVERAGE RATE / RATA-RATA
- # -----------------------------------------------------------------------
- # Rumus = total / jumlah
- # --> (50+100) / 2 = 75%
- # -----------------------------------------------------------------------
- # 3 : MULTIPLE / DIKALI
- # -----------------------------------------------------------------------
- # Rumus = 100 * (element_1/100) * (element_n/100)
- # --> 100 * (50/100) * (100/100)
- # -----------------------------------------------------------------------
- MERGE_TYPE = 2
- # -----------------------------------------------------------------------
- end
- end
- # =============================================================================
- # Batas akhir konfigurasi. Jangan diedit setelah ini
- # =============================================================================
- module THEO
- module ELEMENTS
- module REGEXP
- ELEMENTS = /<(?:ELEMENTS_ID|elements id):[ ]*[ ]*(\d+(?:\s*,\s*\d+)*)>/i
- end
- end
- end
- module DataManager
- class << self
- alias pre_load_multiple_elements_database load_database
- end
- def self.load_database
- pre_load_multiple_elements_database
- load_multiple_elements
- end
- def self.load_multiple_elements
- [$data_skills, $data_items].each do |database|
- database.each do |obj|
- next unless obj
- obj.load_multiple_elements
- end
- end
- end
- end
- class RPG::UsableItem < RPG::BaseItem
- attr_accessor :elements_array
- def load_multiple_elements
- @elements_array = [self.damage.element_id]
- self.note.split(/[\r\n]+/).each { |line|
- case line
- when THEO::ELEMENTS::REGEXP::ELEMENTS
- $1.scan(/\d+/).each { |num|
- @elements_array.push(num.to_i) if num.to_i > 0 }
- end
- }
- end
- end
- class Game_Battler < Game_BattlerBase
- def item_element_rate(user, item)
- return 1.0 if item.damage.recover? && THEO::ELEMENTS::IGNORE_RECOVERY
- array = make_elements_array(user, item)
- return 1.0 if array.empty?
- return calculate_element_rate(user, item, array)
- end
- def make_elements_array(user, item)
- array = item.elements_array.dup
- array = attack_elements_array(user, item, array)
- array
- end
- def attack_elements_array(user, item, array)
- return array if user.atk_elements.empty?
- array += user.atk_elements if item.physical? && THEO::ELEMENTS::PHYSICAL_ELEMENT
- array += user.atk_elements if item.magical? && THEO::ELEMENTS::MAGICAL_ELEMENT
- array += user.atk_elements if item.certain? && THEO::ELEMENTS::CERT_HIT_ELEMENT
- return array
- end
- def calculate_element_rate(user, item, array)
- case THEO::ELEMENTS::MERGE_TYPE
- when 0
- return elements_max_rate(array)
- when 1
- return calculate_addition_rate(array)
- when 2
- return calculate_average_rate(array)
- when 3
- return calculate_multiply_rate(array)
- else
- return 1.0
- end
- end
- def calculate_addition_rate(array)
- rate = 1.0
- array.each do |element|
- rate += element_rate(element) - 1.0
- end
- return rate
- end
- def calculate_average_rate(array)
- rate = 0.0
- array.each do |element|
- rate += element_rate(element)
- end
- puts array.size
- return rate / array.size
- end
- def calculate_multiply_rate(array)
- rate = 1.0
- array.each do |element|
- rate *= element_rate(element)
- end
- return rate
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment