#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ ¡ß MP á¼Þ¨ËÇðã - KGC_MPCostAlter ¡ß VX ¡ß #_/ ¡Þ Last update : 2008/02/06 ¡Þ #_/---------------------------------------------------------------------------- #_/ ??ªÊá¼Þ¨ MP ªòíÂà÷ª¹ªëѦÒöªòõÚÊ¥ª·ªÞª¹¡£ #_/============================================================================ #_/ «À«á?«¸ö·ª¬ªªª«ª·ª¤íÞùêªÏ¡¢ÓôìýêÈöǪòì¹ÔѪ·ªÆª¯ªÀªµª¤¡£ #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #============================================================================== # ¡Ú «««¹«¿«Þ«¤«ºú£ÙÍ ¡Ú #============================================================================== module KGC module MPCostAlter # ¡ß á¼Þ¨ý­ HP 0 úÉʦ # true : HP á¼Þ¨ý­ªËªÁªçª¦ªÉ 0 ªËªÊªëíÞùêªÇªâÞÅéÄʦÒö # false : HP á¼Þ¨ý­ªË 1 ì¤ß¾?ªë?üϪǪʪ±ªìªÐÞÅéÄÜôʦ PERMIT_ZERO_HP = false # ¡ß HP á¼Þ¨ð¤ùÚú°ð¶ # true : HP ÜôðëªÎíÞùêªÇªâÞÅéÄʦÒö¡£ª½ªÎíÞùê¡¢ÞÅéÄý­ªÏ??ÜôÒöªËªÊªë¡£ # false : HP ÜôðëªÎíÞùêªÏÞÅéÄÜôʦÒö¡£(÷×ßÈ) RELEASE_HP_LIMIT = false end end #¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú $imported = {} if $imported == nil $imported["MPCostAlter"] = true module KGC::MPCostAlter # ïáЮøúúÞ module Regexp # «¹«­«ë module Skill # HP á¼Þ¨ CONSUME_HP = /<(?:CONSUME_HP|HPá¼Þ¨)>/i # MP ùÜùêá¼Þ¨ MP_COST_RATE = /<(MAX)?(?:MP_COST_RATE|MPùÜùêá¼Þ¨)>/i # á¼Þ¨ MP ÝïÖÇ«À«á?«¸ MP_PROPORTIONAL_DAMAGE = /<(?:MP_PROPORTIONAL_DAMAGE|á¼Þ¨MPÝïÖÇ«À«á?«¸)>/i end end end #¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú #============================================================================== # ¡á RPG::Skill #============================================================================== class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # ¡Û MP á¼Þ¨ËÇðãªÎ«­«ã«Ã«·«åªòßæà÷ #-------------------------------------------------------------------------- def create_mp_cost_alter_cache @__consume_hp = false @__mp_cost_rate = false @__max_mp_cost_rate = false @__mp_proportional_damage = false self.note.split(/[\r\n]+/).each { |prop| case prop when KGC::MPCostAlter::Regexp::Skill::CONSUME_HP # HP á¼Þ¨ @__consume_hp = true when KGC::MPCostAlter::Regexp::Skill::MP_COST_RATE # MP ùÜùêá¼Þ¨ @__mp_cost_rate = true @__max_mp_cost_rate = ($1 != nil) when KGC::MPCostAlter::Regexp::Skill::MP_PROPORTIONAL_DAMAGE # á¼Þ¨ MP ÝïÖÇ«À«á?«¸ @__mp_proportional_damage = true end } end #-------------------------------------------------------------------------- # ¡Û HP á¼Þ¨ #-------------------------------------------------------------------------- def consume_hp create_mp_cost_alter_cache if @__consume_hp == nil return @__consume_hp end #-------------------------------------------------------------------------- # ¡Û á¼Þ¨ MP ùÜùê #-------------------------------------------------------------------------- def mp_cost_rate create_mp_cost_alter_cache if @__mp_cost_rate == nil return (@__mp_cost_rate ? self.mp_cost : -1) end #-------------------------------------------------------------------------- # ¡Û MaxMP ùÜùêá¼Þ¨ #-------------------------------------------------------------------------- def max_mp_cost_rate create_mp_cost_alter_cache if @__max_mp_cost_rate == nil return @__max_mp_cost_rate end #-------------------------------------------------------------------------- # ¡Û á¼Þ¨ MP ÝïÖÇ«À«á?«¸ #-------------------------------------------------------------------------- def mp_proportional_damage create_mp_cost_alter_cache if @__mp_proportional_damage == nil return @__mp_proportional_damage end end #¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú #============================================================================== # ¡á Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ¡Ü ÍëËÒ«¤«ó«¹«¿«ó«¹?? #-------------------------------------------------------------------------- attr_reader :spend_cost # á¼Þ¨ª·ª¿ HP/MP #-------------------------------------------------------------------------- # ¡Ü «ª«Ö«¸«§«¯«ÈôøÑ¢ûù #-------------------------------------------------------------------------- alias initialize_KGC_MPCostAlter initialize def initialize initialize_KGC_MPCostAlter @spend_cost = 0 end #-------------------------------------------------------------------------- # ¡Ü «¹«­«ëªÎá¼Þ¨ MP ͪߩ # skill : «¹«­«ë #-------------------------------------------------------------------------- alias calc_mp_cost_KGC_MPCostAlter calc_mp_cost def calc_mp_cost(skill) return 0 if skill.consume_hp # HP á¼Þ¨ if skill.mp_cost_rate < 0 # ùÜùêá¼Þ¨ªÇªÊª¤ return calc_mp_cost_KGC_MPCostAlter(skill) end if skill.max_mp_cost_rate # MaxMP ùÜùêá¼Þ¨ return calc_skill_cost_rate(skill, maxmp) else # MP ùÜùêá¼Þ¨ return calc_skill_cost_rate(skill, mp) end end #-------------------------------------------------------------------------- # ¡Û «¹«­«ëªÎùÜùêá¼Þ¨Õáͪߩ # skill : «¹«­«ë # base : ÐññÞö· #-------------------------------------------------------------------------- def calc_skill_cost_rate(skill, base) return base * skill.mp_cost_rate / 100 end #-------------------------------------------------------------------------- # ¡Û «¹«­«ëªÎá¼Þ¨ HP ͪߩ # skill : «¹«­«ë #-------------------------------------------------------------------------- def calc_hp_cost(skill) return 0 unless skill.consume_hp # HP á¼Þ¨ªÇªÊª¤ if skill.mp_cost_rate < 0 # ùÜùêá¼Þ¨ªÇªÊª¤ return skill.mp_cost end if skill.max_mp_cost_rate # MaxHP ùÜùêá¼Þ¨ return calc_skill_cost_rate(skill, maxhp) else # HP ùÜùêá¼Þ¨ return calc_skill_cost_rate(skill, hp) end end #-------------------------------------------------------------------------- # ¡Û á¼Þ¨ª¹ªÙª­ HP/MP ÕáªòÜÁò¥ # skill : «¹«­«ë #-------------------------------------------------------------------------- def set_spend_cost(skill) @spend_cost = [calc_hp_cost(skill), calc_mp_cost(skill)].max end #-------------------------------------------------------------------------- # ¡Ü «¹«­«ëªÎÞÅéÄʦÒö÷÷ïÒ # skill : «¹«­«ë #-------------------------------------------------------------------------- alias skill_can_use_KGC_MPCostAlter? skill_can_use? def skill_can_use?(skill) return false unless skill.is_a?(RPG::Skill) # «¹«­«ëªÇªÊª¤ return false unless mp_cost_restrict_clear?(skill) # MP ð¤ùÚî½? return false unless hp_cost_restrict_clear?(skill) # HP ð¤ùÚî½? return skill_can_use_KGC_MPCostAlter?(skill) end #-------------------------------------------------------------------------- # ¡Û MP ð¤ùÚ«¯«ê«¢÷÷ïÒ # skill : «¹«­«ë #-------------------------------------------------------------------------- def mp_cost_restrict_clear?(skill) return true if skill.consume_hp # HP á¼Þ¨ # ùÜùêá¼Þ¨ªÎíÞùêªÏ¡¢á¼Þ¨Õ᪬ 1 ì¤ß¾ªÇªÊª¤ªÈÞÅéÄÜôʦ if skill.mp_cost_rate >= 0 return false if calc_mp_cost(skill) == 0 end return calc_mp_cost(skill) <= mp end #-------------------------------------------------------------------------- # ¡Û HP ð¤ùÚ«¯«ê«¢÷÷ïÒ # skill : «¹«­«ë #-------------------------------------------------------------------------- def hp_cost_restrict_clear?(skill) return true unless skill.consume_hp # MP á¼Þ¨ # ùÜùêá¼Þ¨ªÎíÞùêªÏ¡¢á¼Þ¨Õ᪬ 1 ì¤ß¾ªÇªÊª¤ªÈÞÅéÄÜôʦ if skill.mp_cost_rate >= 0 return false if calc_hp_cost(skill) == 0 end if KGC::MPCostAlter::RELEASE_HP_LIMIT # ð¤ùÚú°ð¶ªÎíÞùêªÏÞÅéÄʦÒö return true elsif KGC::MPCostAlter::PERMIT_ZERO_HP # HP ªÈÔÒÕáªÞªÇá¼Þ¨Ê¦Òö return calc_hp_cost(skill) <= hp else # 1 ì¤ß¾?ªëù±é©ª¢ªê return calc_hp_cost(skill) < hp end end #-------------------------------------------------------------------------- # ¡Ü «¹«­«ëªÞª¿ªÏ«¢«¤«Æ«àªËªèªë«À«á?«¸Íªß© # user : «¹«­«ëªÞª¿ªÏ«¢«¤«Æ«àªÎÞÅéÄíº # obj : «¹«­«ëªÞª¿ªÏ«¢«¤«Æ«à # Ì¿ÍýªÏ @hp_damage ªÞª¿ªÏ @mp_damage ªËÓÛìýª¹ªë¡£ #-------------------------------------------------------------------------- alias make_obj_damage_value_KGC_MPCostAlter make_obj_damage_value def make_obj_damage_value(user, obj) # á¼Þ¨ MP ÝïÖÇ«À«á?«¸ªÇªÊª¤íÞùê unless obj.is_a?(RPG::Skill) && obj.mp_proportional_damage # ꪪÎͪߩãÒªòÞÅéÄ make_obj_damage_value_KGC_MPCostAlter(user, obj) return end damage = user.spend_cost * obj.base_damage / 100 # ÐñÜâ«À«á?«¸ß©õó damage *= elements_max_rate(obj.element_set) # ?àõáóïá damage /= 100 damage = apply_variance(damage, obj.variance) # ÝÂߤ damage = apply_guard(damage) # ÛÁåÙáóïá if obj.damage_to_mp @mp_damage = damage # MP ªË«À«á?«¸ else @hp_damage = damage # HP ªË«À«á?«¸ end end end #¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú #============================================================================== # ¡á Window_Skill #============================================================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # ¡Ü ú£ÙͪÎÙÚ? # index : ú£ÙÍÛã? #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) skill = @data[index] if skill != nil rect.width -= 4 enabled = @actor.skill_can_use?(skill) draw_item_name(skill, rect.x, rect.y, enabled) if skill.consume_hp # HP á¼Þ¨ text = sprintf("%s%d", Vocab.hp_a, @actor.calc_hp_cost(skill)) else # MP á¼Þ¨ text = @actor.calc_mp_cost(skill).to_s end self.contents.draw_text(rect, text, 2) end end end #¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú #============================================================================== # ¡á Scene_Skill #============================================================================== class Scene_Skill < Scene_Base #-------------------------------------------------------------------------- # ¡Ü «¿?«²«Ã«ÈªÎ̽ïÒ # ?ÍýªÊª·ªÎíÞùê (??ÜôÒöªË«Ý?«·«ç«óªÊªÉ) «Ö«¶? SE ªòæÑñ´¡£ #-------------------------------------------------------------------------- alias determine_target_KGC_MPCostAlter determine_target def determine_target @actor.set_spend_cost(@skill) # á¼Þ¨ª¹ªë HP/MP ªò«»«Ã«È determine_target_KGC_MPCostAlter end #-------------------------------------------------------------------------- # ¡Ü «¹«­«ëªÎÞÅéÄ (Ú«Û°?ßÚì¤èâªÎÞÅéÄ?ÍýªòîêéÄ) #-------------------------------------------------------------------------- alias use_skill_nontarget_KGC_MPCostAlter use_skill_nontarget def use_skill_nontarget @actor.hp -= @actor.calc_hp_cost(@skill) use_skill_nontarget_KGC_MPCostAlter end end #¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú #============================================================================== # ¡á Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ¡Ü ??ú¼ÔѪÎ?ú¼ : «¹«­«ë #-------------------------------------------------------------------------- alias execute_action_skill_KGC_MPCostAlter execute_action_skill def execute_action_skill skill = @active_battler.action.skill @active_battler.set_spend_cost(skill) # á¼Þ¨ª¹ªë HP/MP ªò«»«Ã«È if skill.consume_hp hp_cost = [@active_battler.hp - 1, @active_battler.spend_cost].min # HP ªò 1 ªÀª±?ª¹ @active_battler.hp -= hp_cost end execute_action_skill_KGC_MPCostAlter # ÞÝØ̪¹ªëªÏªºªÀªÃª¿íÞùê if skill.consume_hp && hp_cost < @active_battler.spend_cost @active_battler.hp = 0 # HP ªò 0 ªËª¹ªë display_added_states(@active_battler) # ÞÝØÌ«á«Ã«»?«¸ªÎøúãÆ end end end