Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # =============================================================================
- # Alumnea Magic Academy (AMA) script
- # TheoAllen - Skill HP Sacrifice
- # Version : 1.0
- # Contact : www.rpgmakerid.com
- # (This script documentation is written in informal indonesian language)
- # =============================================================================
- $imported = {} if $imported.nil?
- $imported[:Theo_HPSacrifice] = true
- # =============================================================================
- # CHANGE LOGS :
- # -----------------------------------------------------------------------------
- # 2013.05.05 - Started and finished script
- # =============================================================================
- =begin
- PENGENALAN :
- Script ini ngebikin skill yang membutuhkan MP, jika battler MPnya habis maka
- sebagai gantinya akan ngorbanin HP buat bayarnya.
- CARA PAKAI :
- tulis dalam note di database Actor, Enemy, Skill, Item, State :
- <sacrifice rate: x%>
- UNTUK SKILL / ITEM :
- Sacrifice rate adalah persenan dari harga MP. misalnya harga MP adalah 100,
- kalo misal u tulis 200%, maka tar harganya buat ngorbanin HP adalah 200.
- UNTUK ACTOR / ENEMY / STATE :
- Sacrifice rate adalah persenan dari harga sacrifice skill. Misalnya harga
- sacrifice sebuah skill adalah 200, kalau sacrifice rate seorag actor adalah
- 50%, maka harganya tar jadi 100.
- 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.
- =end
- # =============================================================================
- # Konfigurasi :
- # =============================================================================
- module THEO
- module SKILL
- # -------------------------------------------------------------------------
- SACRIFICE_HP = true
- # -------------------------------------------------------------------------
- # Kalau diset true, maka semua skill punya sacrifice rate. Kalo false, maka
- # kamu tar editnya manual nulisin satu2 notetagnya
- # -------------------------------------------------------------------------
- # -------------------------------------------------------------------------
- DEFAULT_RATE = 1.0
- # -------------------------------------------------------------------------
- # Default rate kalo sacrifice hp lu set true.
- # -------------------------------------------------------------------------
- # -------------------------------------------------------------------------
- ENEMY = false
- # -------------------------------------------------------------------------
- # Kalo false, enemy ga bakal sacrifice HP.
- # -------------------------------------------------------------------------
- end
- end
- # =============================================================================
- # Batas akhir konfigurasi. Jangan diedit kalo ga ngerti :v
- # =============================================================================
- module THEO
- module SKILL
- module REGEXP
- RATE = /<(?:SACRIFICE RATE|sacrifice_rate):[ ]*(\d+)([%%])>/i
- end
- end
- end
- module DataManager
- class << self
- alias sacrifice_load_database load_database
- end
- def self.load_database
- sacrifice_load_database
- load_sacrifice_rate
- end
- def self.load_sacrifice_rate
- groups = [$data_actors, $data_skills, $data_items, $data_states, $data_enemies]
- for database in groups
- for obj in database
- next if obj.nil?
- obj.load_sacrifice
- end
- end
- end
- end
- class RPG::UsableItem < RPG::BaseItem
- attr_accessor :sacrifice_rate
- def load_sacrifice
- @sacrifice_rate = THEO::SKILL::SACRIFICE_HP ? THEO::SKILL::DEFAULT_RATE : 0.0
- self.note.split(/[\r\n]+/).each do |line|
- case line
- when THEO::SKILL::REGEXP::RATE
- self.sacrifice_rate = ($1.to_f/100.0)
- end
- end
- end
- end
- class RPG::Actor < RPG::BaseItem
- attr_accessor :sacrifice_rate
- def load_sacrifice
- @sacrifice_rate = 1.0
- self.note.split(/[\r\n]+/).each do |line|
- case line
- when THEO::SKILL::REGEXP::RATE
- @sacrifice_rate = ($1.to_f/100.0)
- end
- end
- end
- end
- class RPG::Enemy < RPG::BaseItem
- attr_accessor :sacrifice_rate
- def load_sacrifice
- @sacrifice_rate = 1.0
- self.note.split(/[\r\n]+/).each do |line|
- case line
- when THEO::SKILL::REGEXP::RATE
- @sacrifice_rate = ($1.to_f/100.0)
- end
- end
- end
- end
- class RPG::State < RPG::BaseItem
- attr_accessor :sacrifice_rate
- def load_sacrifice
- @sacrifice_rate = 0.0
- self.note.split(/[\r\n]+/).each do |line|
- case line
- when THEO::SKILL::REGEXP::RATE
- @sacrifice_rate = ($1.to_f/100.0)
- end
- end
- end
- end
- class Game_BattlerBase
- def scr
- return 1
- end
- def skill_mp_cost(skill)
- (skill.mp_cost * mcr).to_i
- end
- alias original_cost_payable? skill_cost_payable?
- def skill_cost_payable?(skill)
- if skill.sacrifice_rate > 0 && THEO::SKILL::ENEMY ? true : self.is_a?(Game_Actor)
- return tp >= skill_tp_cost(skill) && hp > 1
- else
- return original_cost_payable?(skill)
- end
- end
- def skill_sacrifice_cost(remainder, skill)
- ((remainder * skill.sacrifice_rate) * scr).to_i
- end
- alias original_pay_skill_cost pay_skill_cost
- def pay_skill_cost(skill)
- if skill.sacrifice_rate > 0 && THEO::SKILL::ENEMY ? true : self.is_a?(Game_Actor)
- pay_sacrifice_cost(skill)
- else
- original_pay_skill_cost(skill)
- end
- end
- def pay_sacrifice_cost(skill)
- mp_cost = skill_mp_cost(skill)
- remainder = [mp_cost - mp,0].max
- self.mp = [mp - mp_cost,0].max
- self.hp = [hp - skill_sacrifice_cost(remainder,skill),1].max
- self.tp -= skill_tp_cost(skill)
- end
- end
- class Game_Battler < Game_BattlerBase
- def scr
- result = 0.0
- result = @states.inject(0) {|result,id| result += $data_states[id].sacrifice_rate}
- result
- end
- end
- class Game_Actor < Game_Battler
- def scr
- result = super
- result += $data_actors[id].sacrifice_rate
- result
- end
- end
- class Game_Enemy < Game_Battler
- def scr
- result = super
- result += $data_enemies[enemy_id].sacrifice_rate
- result
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment