查看: 111|回复: 0

[转载发布] 【12月29日更新】魔法障壁(白盾)脚本

[复制链接]
  • TA的每日心情
    开心
    昨天 10:15
  • 签到天数: 73 天

    连续签到: 1 天

    [LV.6]常住居民II

    2044

    主题

    86

    回帖

    8602

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    -2
    卡币
    6460
    OK点
    16
    积分
    8602
    发表于 2024-4-12 22:44:59 | 显示全部楼层 |阅读模式
    事实上,这是经过多位朋友帮助修改过的成果
    v1.1 增加了战斗中主动增加障壁值的技能的功能
    v1.2 增加了直接击破或无视障壁的技能的功能
    v1.3 修复了在战斗中使用物品就会发生错误的BUG



                 本帖来自P1论坛作者刹那铃音,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同
    [Ruby] 纯文本查看 复制代码
    #==============================================================================
    # 魔法障壁  刹那铃音
    #==============================================================================
    # 使用方法:
    # 1.备注:
    # 在角色或敌人的技能备注下写入<hp_def x>,战斗开始时角色或敌人获得x点障壁值。
    # 在技能备注下写入 <up_def x>,释放技能为角色或敌人增加x点障壁值。
    # 在技能备注下写入 <def_ignore>,释放带有无视障壁值的效果的技能。
    # 在技能备注下写入 <def_break>,该技能将直接击破障壁。
    # 2.事件脚本:
    #(1)通过战斗中事件的脚本指令调整障壁值的增加和减少。
    # add_battler_hp_def(actor,id,x)
    #actor:为true时指代角色,为false时指代敌人。
    #id:指第id个角色或敌人。
    # x:指定角色或敌人的障壁值增加x(x为负数时则为减少)。
    #(2)通过战斗中事件的脚本指令调整障壁值的倍数。
    # rate_battler_hp_def(actor,id,x)
    #actor:为true时指代玩角色,为false时指代敌人。
    #id:指第id个角色或敌人。
    #x:指定角色或敌人的障壁值在其基础值上乘以x。
    #==============================================================================
    # 显示的文字:
    #==============================================================================
    module Vocab
      ActorDef     = "%s的障壁抵挡了%s点伤害!"
      EnemyDef     = "%s的障壁抵挡了%s点伤害!"
      ActorCurrentDef     = "%s当前障壁:%s!"
      EnemyCurrentDef     = "%s当前障壁:%s!"
    end
    class RPG::Skill
      def hp_def
        if /<hp_def (\d+)>/i =~ @note;return $1.to_i;else;return 0;end
      end  
      def up_def
        if /<up_def (\d+)>/i =~ @note;return $1.to_i;else;return 0;end
      end   
      def def_ignore
        if /<def_ignore>/i =~ @note;return true;else;return false;end
      end  
      def def_break
        if /<def_break>/i =~ @note;return true;else;return false;end
      end   
    end
    class RPG::Enemy
      def hp_def
        if /<hp_def (\d+)>/i =~ @note;return $1.to_i;else;return 0;end
      end  
    end
    
    class Game_ActionResult
      attr_accessor   :hp_def
      #--------------------------------------------------------------------------
      # ● 清除伤害值
      #--------------------------------------------------------------------------
      alias old_804173948_clear_damage_values clear_damage_values
      def clear_damage_values
        old_804173948_clear_damage_values
        @hp_def = 0
      end
      #--------------------------------------------------------------------------
      # ● 获取 HP 抵伤的文字
      #--------------------------------------------------------------------------
      def hp_def_text
        if @hp_def > 0
          fmt = @battler.actor? ? Vocab::ActorDef : Vocab::EnemyDef
          sprintf(fmt, @battler.name, @hp_def)
        end
      end
      #--------------------------------------------------------------------------
      # ● 获取 当前障壁 文字
      #--------------------------------------------------------------------------
      def hp_current_def_text
        fmt = @battler.actor? ? Vocab::ActorCurrentDef : Vocab::ActorCurrentDef
        sprintf(fmt, @battler.name, @battler.hp_def)
      end
    end
    
    class Window_BattleLog  < Window_Selectable
      #--------------------------------------------------------------------------
      # ● 显示 HP 伤害
      #--------------------------------------------------------------------------
      alias old_804173948_display_hp_damage display_hp_damage
      def display_hp_damage(target, item)
        if target.result.hp_def > 0 && item && item.damage.to_hp?
          add_text(target.result.hp_def_text)
          add_text(target.result.hp_current_def_text)
          wait
        end
        old_804173948_display_hp_damage(target,item);
      end
          
      alias old_display_failure display_failure
      def display_failure(target, item)##########Overwritten
        if item.is_a?(RPG::Skill) && item.up_def < 0
          old_display_failure(target, item)
        end
      end
          
      alias old_display_action_results display_action_results
      def display_action_results(target, item)
        old_display_action_results(target, item)
        if item.is_a?(RPG::Skill) && item.up_def > 0
          add_text(target.name + "增加了#{item.up_def}点障壁值")
          add_text(target.result.hp_current_def_text)
          wait
          wait
        end
      end
    
    end
    class Game_BattlerBase
      attr_accessor   :hp_def
      #--------------------------------------------------------------------------
      # ● 初始化对象
      #--------------------------------------------------------------------------
      alias old_804173948_initialize initialize
      def initialize
        old_804173948_initialize
        @hp_def = 0
        @tab_ignore = false
        @tab_break = false
      end
    end
    class Game_Battler
      #--------------------------------------------------------------------------
      #● 处理伤害
      #    调用前需要设置好
      #    @result.hp_damage   @result.mp_damage
      #    @result.hp_drain    @result.mp_drain
      #--------------------------------------------------------------------------
      def execute_damage(user)##########Overwritten
        if !@tab_ignore
          self.hp_def = 0 if @tab_break
          if @result.hp_damage > 0
            if @result.hp_damage < self.hp_def
              self.hp_def -= @result.hp_damage
              @result.hp_def = @result.hp_damage
              @result.hp_damage = 0
            else
              @result.hp_damage -= self.hp_def
              @result.hp_def = self.hp_def
              self.hp_def = 0
            end
          end
        end
        on_damage(@result.hp_damage) if @result.hp_damage > 0
        self.hp -= @result.hp_damage
        self.mp -= @result.mp_damage
        user.hp += @result.hp_drain
        user.mp += @result.mp_drain
      end
      alias old_make_damage_value make_damage_value
      def make_damage_value(user, item)
        @tab_ignore = false
        @tab_break = false
        if item.is_a?(RPG::Skill)
            @tab_ignore = item.def_ignore
            @tab_break = item.def_break
        end
        old_make_damage_value(user, item)
      end
    end
    class Game_Actor  
      #--------------------------------------------------------------------------
      # ● 战斗开始处理
      #--------------------------------------------------------------------------
      def on_battle_start##########Overwritten
        super
        self.hp_def = battle_hp_def
      end
      def battle_hp_def
        sum = 0
        skills.each{|skill| sum+=skill.hp_def}
        return sum
      end
    end
    class Game_Enemy
      #--------------------------------------------------------------------------
      # ● 战斗开始处理
      #--------------------------------------------------------------------------
      def on_battle_start##########Overwritten
        super
        self.hp_def = battle_hp_def
      end
      def skills##########Overwritten
        enemy.actions.collect{|action|$data_skills[action.skill_id]}
      end
      def battle_hp_def
        sum = enemy.hp_def
        skills.each{|skill| sum+=skill.hp_def}
        return sum
      end
    end
    
    class Game_Interpreter
      def change_battler_hp_def(actor,id,value)
        battler = (actor ? $game_party.members[id-1] : $game_troop.members[id-1])
        battler.hp_def = value
      end
      def add_battler_hp_def(actor,id,value)
        battler = (actor ? $game_party.members[id-1] : $game_troop.members[id-1])
        battler.hp_def += value
      end
      def rate_battler_hp_def(actor,id,value)
        battler = (actor ? $game_party.members[id-1] : $game_troop.members[id-1])
        battler.hp_def = (battler.battle_hp_def * value).round
      end
    end
    
    
    class Scene_Battle < Scene_Base
      def add_battler_hp_def(actor,id,value)
        battler = (actor ? $game_party.members[id-1] : $game_troop.members[id-1])
        battler.hp_def += value
      end
      alias old_apply_item_effects apply_item_effects
      def apply_item_effects(target, item)
        return old_apply_item_effects(target, item) unless item.is_a?(RPG::Skill)##########
        add_battler_hp_def(!target.is_a?(Game_Enemy),target.index,item.up_def)
        old_apply_item_effects(target, item)
      end
    
    end
    创造良好交流环境,原文地址:https://rpg. blue/forum.php?mod=viewthread&tid=483717  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-9-21 16:43 , Processed in 0.051789 second(s), 40 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表