じ☆ve冰风 发表于 2026-8-1 14:12:47

High Capability Mana Shield / Blood Magic

This is a high capability Mana Shield / Blood Magic script. It has high capability because it doesn't overwrite anything.


Simply just add <MANA SHIELD> in the state's notebox for mana shield and <BLOOD MAGIC> in the state's notebox for blood magic.


        Update: The tags now works on class, enemy, and actor noteboxes.

Spoiler#----------------------------------------------------------------------------
                        #   Mana Shield and Blood Magic
                        #
                        #  Compatibility: High
                        #  Difficulty: Easy
                        #
                        #  Description: 
                        #  Mana Shield is a state that causes damage to be subtracted from 
                        #  MP instead of HP. However, if you do not have enough MP, the remaining damage
                        #  will be subtracted from HP.
                        #
                        #  Blood Magic is a state that causes you to pay HP to use skills instead of MP.
                        #  However, if you do not have enough HP to use the skill, the skill can not be used.
                        #
                        #  Notetags: 
                        #  Add <MANA SHIELD> in the notebox of the state you want to be mana shield.
                        #  Add <BLOOD MAGIC> in the notebox of the state you want to be blood magic.
                        #


                        # Update:


                        # The tags now also works on classes, enemies, and actors.


                        #
                        #  Alias - Game_ActionResult > make_damage
                        #  New Method - Game_BattlerBase > bloodmagic?
                        #  Alias - Game_BattlerBase > skill_mp_cost
                        #  Alias - Game_BattlerBase > skill_cost_payable?
                        #  Alias - Game_BattlerBase > pay_skill_cost
                        #


                        #  For maximum compatibility, place this script below all other scripts.


                        #
                        #  Credit not required.
                        #  Credit "Adventurer_inc" if you want.
                        #
                        #----------------------------------------------------------------------------
                        class Game_ActionResult
                          #--------------------------------------------------------------------------
                          # * Alias: Calculate Damage
                          #--------------------------------------------------------------------------
                          alias advt_make_damage make_damage
                          def make_damage(value, item)
                            advt_make_damage(value, item)
                            manashielded = false
                            @battler.states.each{|state| manashielded = true if state.note.include?("<MANA SHIELD>")}


                            manashielded = true if @battler.note.include?("<MANA SHIELD>") || @battler.class.note.include?("<MANA SHIELD>") 
                            if manashielded && @battler.mp > 0
                              overdamage = @hp_damage - @battler.mp
                              @mp_damage += @hp_damage
                              @hp_damage = (overdamage > 0 ? overdamage : 0)
                            end
                            @success = false unless item.damage.to_hp? || @mp_damage != 0
                          end
                        end
                          #--------------------------------------------------------------------------
                          # END- class Game_ActionResult
                          #--------------------------------------------------------------------------


                        class Game_BattlerBase
                          #--------------------------------------------------------------------------
                          # * New Method: bloodmagic?: for simplicity
                          #-------------------------------------------------------------------------- 
                          def bloodmagic?
                            return false if self == nil
                            bloodmagic = false
                            self.states.each{|state| bloodmagic = true if state.note.include?("<BLOOD MAGIC>")}
                            bloodmagic = true if self.note.include?("<BLOOD MAGIC>") || self.class.note.include?("<BLOOD MAGIC>")
                            return bloodmagic
                          end
                          #--------------------------------------------------------------------------
                          # * Alias: Calculate Skill's MP Cost
                          #--------------------------------------------------------------------------  
                          alias advt_skill_mp_cost skill_mp_cost
                          def skill_mp_cost(skill)
                            bloodmagic? ? 0 : advt_skill_mp_cost(skill)
                          end
                          #--------------------------------------------------------------------------
                          # * Alias: Determine if Cost of Using Skill Can Be Paid
                          #--------------------------------------------------------------------------
                          alias advt_skill_cost_payable? skill_cost_payable?
                          def skill_cost_payable?(skill)
                            return false if bloodmagic? && hp < (skill.mp_cost * mcr).to_i 
                            advt_skill_cost_payable?(skill)
                          end
                          #--------------------------------------------------------------------------
                          # * Alias: Pay Cost of Using Skill
                          #--------------------------------------------------------------------------
                          alias advt_pay_skill_cost pay_skill_cost
                          def pay_skill_cost(skill) 
                            self.hp -= (skill.mp_cost * mcr).to_i if bloodmagic?
                            advt_pay_skill_cost(skill)
                          end   
                        end
                          #--------------------------------------------------------------------------
                          # END- class Game_BattlerBase
                          #--------------------------------------------------------------------------






本贴来自国际rpgmaker官方论坛作者:Adventurer_inc.处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/high-capability-mana-shield-blood-magic.60216/
页: [1]
查看完整版本: High Capability Mana Shield / Blood Magic