じ☆ve冰风 发表于 2024-4-12 22:44:59

【12月29日更新】魔法障壁(白盾)脚本

事实上,这是经过多位朋友帮助修改过的成果
v1.1 增加了战斗中主动增加障壁值的技能的功能
v1.2 增加了直接击破或无视障壁的技能的功能
v1.3 修复了在战斗中使用物品就会发生错误的BUG



             本帖来自P1论坛作者刹那铃音,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同#==============================================================================
# 魔法障壁刹那铃音
#==============================================================================
# 使用方法:
# 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}
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 : $game_troop.members)
    battler.hp_def = value
end
def add_battler_hp_def(actor,id,value)
    battler = (actor ? $game_party.members : $game_troop.members)
    battler.hp_def += value
end
def rate_battler_hp_def(actor,id,value)
    battler = (actor ? $game_party.members : $game_troop.members)
    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 : $game_troop.members)
    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在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 【12月29日更新】魔法障壁(白盾)脚本