TheoAllen

AMA - Skill HP Sacrifice

May 5th, 2013
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.45 KB | None | 0 0
  1. # =============================================================================
  2. # Alumnea Magic Academy (AMA) script
  3. # TheoAllen - Skill HP Sacrifice
  4. # Version : 1.0
  5. # Contact : www.rpgmakerid.com
  6. # (This script documentation is written in informal indonesian language)
  7. # =============================================================================
  8. $imported = {} if $imported.nil?
  9. $imported[:Theo_HPSacrifice] = true
  10. # =============================================================================
  11. # CHANGE LOGS :
  12. # -----------------------------------------------------------------------------
  13. # 2013.05.05 - Started and finished script
  14. # =============================================================================
  15. =begin
  16.  
  17.   PENGENALAN :
  18.   Script ini ngebikin skill yang membutuhkan MP, jika battler MPnya habis maka
  19.   sebagai gantinya akan ngorbanin HP buat bayarnya.
  20.  
  21.   CARA PAKAI :
  22.   tulis dalam note di database Actor, Enemy, Skill, Item, State :
  23.   <sacrifice rate: x%>
  24.  
  25.   UNTUK SKILL / ITEM :
  26.   Sacrifice rate adalah persenan dari harga MP. misalnya harga MP adalah 100,
  27.   kalo misal u tulis 200%, maka tar harganya buat ngorbanin HP adalah 200.
  28.  
  29.   UNTUK ACTOR / ENEMY / STATE :
  30.   Sacrifice rate adalah persenan dari harga sacrifice skill. Misalnya harga
  31.   sacrifice sebuah skill adalah 200, kalau sacrifice rate seorag actor adalah
  32.   50%, maka harganya tar jadi 100.
  33.  
  34.   TERMS OF USE :
  35.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  36.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  37.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  38.  
  39. =end
  40. # =============================================================================
  41. # Konfigurasi :
  42. # =============================================================================
  43. module THEO
  44.   module SKILL
  45.    
  46.     # -------------------------------------------------------------------------
  47.     SACRIFICE_HP  = true
  48.     # -------------------------------------------------------------------------
  49.     # Kalau diset true, maka semua skill punya sacrifice rate. Kalo false, maka
  50.     # kamu tar editnya manual nulisin satu2 notetagnya
  51.     # -------------------------------------------------------------------------
  52.    
  53.     # -------------------------------------------------------------------------
  54.     DEFAULT_RATE  = 1.0
  55.     # -------------------------------------------------------------------------
  56.     # Default rate kalo sacrifice hp lu set true.
  57.     # -------------------------------------------------------------------------
  58.    
  59.     # -------------------------------------------------------------------------
  60.     ENEMY         = false
  61.     # -------------------------------------------------------------------------
  62.     # Kalo false, enemy ga bakal sacrifice HP.
  63.     # -------------------------------------------------------------------------
  64.    
  65.   end
  66. end
  67. # =============================================================================
  68. # Batas akhir konfigurasi. Jangan diedit kalo ga ngerti :v
  69. # =============================================================================
  70. module THEO
  71.   module SKILL
  72.     module REGEXP
  73.       RATE = /<(?:SACRIFICE RATE|sacrifice_rate):[ ]*(\d+)([%%])>/i
  74.     end
  75.   end
  76. end
  77.  
  78. module DataManager
  79.  
  80.   class << self
  81.     alias sacrifice_load_database load_database
  82.   end
  83.  
  84.   def self.load_database
  85.     sacrifice_load_database
  86.     load_sacrifice_rate
  87.   end
  88.  
  89.   def self.load_sacrifice_rate
  90.     groups = [$data_actors, $data_skills, $data_items, $data_states, $data_enemies]
  91.     for database in groups
  92.       for obj in database
  93.         next if obj.nil?
  94.         obj.load_sacrifice
  95.       end
  96.     end
  97.   end
  98.  
  99. end
  100.  
  101.  
  102. class RPG::UsableItem < RPG::BaseItem
  103.   attr_accessor :sacrifice_rate
  104.  
  105.   def load_sacrifice
  106.     @sacrifice_rate = THEO::SKILL::SACRIFICE_HP ? THEO::SKILL::DEFAULT_RATE : 0.0
  107.     self.note.split(/[\r\n]+/).each do |line|
  108.       case line
  109.       when THEO::SKILL::REGEXP::RATE
  110.         self.sacrifice_rate = ($1.to_f/100.0)
  111.       end
  112.     end
  113.   end
  114.  
  115. end
  116.  
  117. class RPG::Actor < RPG::BaseItem
  118.   attr_accessor :sacrifice_rate
  119.  
  120.   def load_sacrifice
  121.     @sacrifice_rate = 1.0
  122.     self.note.split(/[\r\n]+/).each do |line|
  123.       case line
  124.       when THEO::SKILL::REGEXP::RATE
  125.         @sacrifice_rate = ($1.to_f/100.0)
  126.       end
  127.     end
  128.   end
  129.  
  130. end
  131.  
  132. class RPG::Enemy < RPG::BaseItem
  133.   attr_accessor :sacrifice_rate
  134.  
  135.   def load_sacrifice
  136.     @sacrifice_rate = 1.0
  137.     self.note.split(/[\r\n]+/).each do |line|
  138.       case line
  139.       when THEO::SKILL::REGEXP::RATE
  140.         @sacrifice_rate = ($1.to_f/100.0)
  141.       end
  142.     end
  143.   end
  144.  
  145. end
  146.  
  147. class RPG::State < RPG::BaseItem
  148.   attr_accessor :sacrifice_rate
  149.  
  150.   def load_sacrifice
  151.     @sacrifice_rate = 0.0
  152.     self.note.split(/[\r\n]+/).each do |line|
  153.       case line
  154.       when THEO::SKILL::REGEXP::RATE
  155.         @sacrifice_rate = ($1.to_f/100.0)
  156.       end
  157.     end
  158.   end
  159.  
  160. end
  161.  
  162. class Game_BattlerBase
  163.  
  164.   def scr
  165.     return 1
  166.   end
  167.  
  168.   def skill_mp_cost(skill)
  169.     (skill.mp_cost * mcr).to_i
  170.   end
  171.  
  172.   alias original_cost_payable? skill_cost_payable?
  173.   def skill_cost_payable?(skill)
  174.     if skill.sacrifice_rate > 0 && THEO::SKILL::ENEMY ? true : self.is_a?(Game_Actor)
  175.       return tp >= skill_tp_cost(skill) && hp > 1
  176.     else
  177.       return original_cost_payable?(skill)
  178.     end
  179.   end
  180.  
  181.   def skill_sacrifice_cost(remainder, skill)
  182.     ((remainder * skill.sacrifice_rate) * scr).to_i
  183.   end
  184.  
  185.   alias original_pay_skill_cost pay_skill_cost
  186.   def pay_skill_cost(skill)
  187.     if skill.sacrifice_rate > 0 && THEO::SKILL::ENEMY ? true : self.is_a?(Game_Actor)
  188.       pay_sacrifice_cost(skill)
  189.     else
  190.       original_pay_skill_cost(skill)
  191.     end
  192.   end
  193.  
  194.   def pay_sacrifice_cost(skill)
  195.     mp_cost = skill_mp_cost(skill)
  196.     remainder = [mp_cost - mp,0].max
  197.     self.mp = [mp - mp_cost,0].max
  198.     self.hp = [hp - skill_sacrifice_cost(remainder,skill),1].max
  199.     self.tp -= skill_tp_cost(skill)
  200.   end
  201.  
  202. end
  203.  
  204. class Game_Battler < Game_BattlerBase
  205.  
  206.   def scr
  207.     result = 0.0
  208.     result = @states.inject(0) {|result,id| result += $data_states[id].sacrifice_rate}
  209.     result
  210.   end
  211.  
  212. end
  213.  
  214. class Game_Actor < Game_Battler
  215.  
  216.   def scr
  217.     result = super
  218.     result += $data_actors[id].sacrifice_rate
  219.     result
  220.   end
  221.  
  222. end
  223.  
  224.  
  225. class Game_Enemy < Game_Battler
  226.  
  227.   def scr
  228.     result = super
  229.     result += $data_enemies[enemy_id].sacrifice_rate
  230.     result
  231.   end
  232.  
  233. end
Advertisement
Add Comment
Please, Sign In to add comment