Advertisement
IceDragon200

[IEX2]Mp-Exhaust

Apr 8th, 2012
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 4.82 KB | None | 0 0
  1. #==============================================================================#
  2. # ● IEX2 - Mp-Exhaust [VX]
  3. #==============================================================================#
  4. # // • Created By    : IceDragon
  5. # // • Data Created  : 04/08/2012
  6. # // • Data Modified : 04/08/2012
  7. # // • Version       : 0.5
  8. # // • RGSS.design   : 2 (VX-Default)
  9. #==============================================================================#
  10. # ● Installation
  11. #     Below
  12. #       Material
  13. #     Above
  14. #       Main
  15. #==============================================================================#
  16. # ● How to Use
  17. #     In a skill's notebox:
  18. #       <exhaust>
  19. #         User can use skill regardless of costs
  20. #         If the user does not have enough MP it will be taken from its HP
  21. #         The user will use the skill regardless if it takes its life in the
  22. #         process.
  23. #
  24. #==============================================================================#
  25. # ● Change Log
  26. #     ♣ 04/08/2012 V0.5
  27. #         Completed Script
  28. #==============================================================================#
  29. class RPG::Skill
  30.   def hp_cost()
  31.     @hp_cost||=(self.note.match(/<HP(?:_COST| COST):[ ]*(\d+)>/i)||["",0])[1].to_i
  32.   end unless method_defined? :hp_cost
  33.   attr_writer :hp_cost unless method_defined? :hp_cost=
  34.   def mp_exhaust?()
  35.     if(@mp_exhaust.nil?)
  36.       @mp_exhaust = !!(self.note =~ /<EXHAUST>/i)
  37.     end
  38.     @mp_exhaust
  39.   end  
  40.   attr_writer :mp_exhaust
  41. end  
  42. class Game_Battler
  43.   def skill_can_use?(skill)
  44.     return false unless skill.is_a?(RPG::Skill)
  45.     return false unless movable?
  46.     return false if silent? and skill.spi_f > 0
  47.     return false unless skill_cost_payable?(skill)
  48.     if $game_temp.in_battle
  49.       return skill.battle_ok?
  50.     else
  51.       return skill.menu_ok?
  52.     end
  53.   end
  54.   # // VXA Style
  55.   def skill_cost_payable?(item)
  56.     return true if(item.mp_exhaust?())
  57.     return false if(calc_mp_cost(item) > mp)
  58.     return false if(calc_hp_cost(item) > hp)
  59.     return true
  60.   end  
  61.   def use_item(item)
  62.     pay_skill_cost(item) if(item.is_a?(RPG::Skill))
  63.     consume_item(item)   if(item.is_a?(RPG::Item))
  64.   end  
  65.   def pay_skill_cost(item)
  66.     cmp = calc_mp_cost(item)
  67.     self.mp = cmp = self.mp - cmp
  68.     self.hp -= calc_hp_cost(item)
  69.     self.hp -= [-cmp,0].max if(item.mp_exhaust?) # // Exhaust
  70.   end  
  71.   def consume_item(item)
  72.     $game_party.consume_item(item)
  73.   end unless method_defined? :consume_item  
  74.   def calc_hp_cost(item)
  75.     item.hp_cost
  76.   end  
  77. end  
  78. class Window_Skill
  79.   def draw_item(index)
  80.     rect = item_rect(index)
  81.     self.contents.clear_rect(rect)
  82.     skill = @data[index]
  83.     if skill != nil
  84.       rect.width -= 4
  85.       enabled = @actor.skill_can_use?(skill)
  86.       draw_item_name(skill, rect.x, rect.y, enabled)
  87.       draw_skill_cost(skill, rect)
  88.     end
  89.   end
  90.   def draw_skill_cost(skill,rect)
  91.     hcost = @actor.calc_hp_cost(skill)
  92.     mcost = @actor.calc_mp_cost(skill)
  93.     oldc = self.contents.font.color
  94.     if(mcost > 0) && (hcost > 0)
  95.       self.contents.font.color = hp_gauge_color2
  96.       self.contents.draw_text(rect, hcost, 2)
  97.       rect.width -= 40
  98.       self.contents.font.color = mp_gauge_color2
  99.       self.contents.draw_text(rect, mcost, 2)
  100.     elsif(hcost > 0)
  101.       self.contents.font.color = hp_gauge_color2
  102.       self.contents.draw_text(rect, hcost, 2)
  103.     elsif(mcost > 0)
  104.       self.contents.font.color = mp_gauge_color2
  105.       self.contents.draw_text(rect, mcost, 2)  
  106.     end
  107.     self.contents.font.color = oldc
  108.   end  
  109. end  
  110. class Scene_Skill
  111.   def use_skill_nontarget
  112.     Sound.play_use_skill
  113.     @actor.use_item(@skill) # //
  114.     @status_window.refresh
  115.     @skill_window.refresh
  116.     @target_window.refresh
  117.     if $game_party.all_dead?
  118.       $scene = Scene_Gameover.new
  119.     elsif @skill.common_event_id > 0
  120.       $game_temp.common_event_id = @skill.common_event_id
  121.       $scene = Scene_Map.new
  122.     end
  123.   end
  124. end  
  125. class Scene_Battle
  126.   def execute_action_skill
  127.     skill = @active_battler.action.skill
  128.     text = @active_battler.name + skill.message1
  129.     @message_window.add_instant_text(text)
  130.     unless skill.message2.empty?
  131.       wait(10)
  132.       @message_window.add_instant_text(skill.message2)
  133.     end
  134.     targets = @active_battler.action.make_targets
  135.     display_animation(targets, skill.animation_id)
  136.     @active_battler.use_item(skill) # //
  137.     $game_temp.common_event_id = skill.common_event_id
  138.     for target in targets
  139.       target.skill_effect(@active_battler, skill)
  140.       display_action_effects(target, skill)
  141.     end
  142.   end
  143. end  
  144. #=■==========================================================================■=#
  145. #                           // ● End of File ● //                              #
  146. #=■==========================================================================■=#
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement