# ============================================================================= # 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 : 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