设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2339|回复: 4

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2487
在线时间
214 小时
注册时间
2017-9-27
帖子
613
发表于 2020-11-5 10:58:07 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 刹那铃音 于 2020-12-29 18:14 编辑

事实上,这是经过多位朋友帮助修改过的成果
v1.1 增加了战斗中主动增加障壁值的技能的功能
v1.2 增加了直接击破或无视障壁的技能的功能
v1.3 修复了在战斗中使用物品就会发生错误的BUG
  1. #==============================================================================
  2. # 魔法障壁  刹那铃音
  3. #==============================================================================
  4. # 使用方法:
  5. # 1.备注:
  6. # 在角色或敌人的技能备注下写入<hp_def x>,战斗开始时角色或敌人获得x点障壁值。
  7. # 在技能备注下写入 <up_def x>,释放技能为角色或敌人增加x点障壁值。
  8. # 在技能备注下写入 <def_ignore>,释放带有无视障壁值的效果的技能。
  9. # 在技能备注下写入 <def_break>,该技能将直接击破障壁。
  10. # 2.事件脚本:
  11. #(1)通过战斗中事件的脚本指令调整障壁值的增加和减少。
  12. # add_battler_hp_def(actor,id,x)
  13. #actor:为true时指代角色,为false时指代敌人。
  14. #id:指第id个角色或敌人。
  15. # x:指定角色或敌人的障壁值增加x(x为负数时则为减少)。
  16. #(2)通过战斗中事件的脚本指令调整障壁值的倍数。
  17. # rate_battler_hp_def(actor,id,x)
  18. #actor:为true时指代玩角色,为false时指代敌人。
  19. #id:指第id个角色或敌人。
  20. #x:指定角色或敌人的障壁值在其基础值上乘以x。
  21. #==============================================================================
  22. # 显示的文字:
  23. #==============================================================================
  24. module Vocab
  25.   ActorDef     = "%s的障壁抵挡了%s点伤害!"
  26.   EnemyDef     = "%s的障壁抵挡了%s点伤害!"
  27.   ActorCurrentDef     = "%s当前障壁:%s!"
  28.   EnemyCurrentDef     = "%s当前障壁:%s!"
  29. end
  30. class RPG::Skill
  31.   def hp_def
  32.     if /<hp_def (\d+)>/i =~ @note;return $1.to_i;else;return 0;end
  33.   end  
  34.   def up_def
  35.     if /<up_def (\d+)>/i =~ @note;return $1.to_i;else;return 0;end
  36.   end   
  37.   def def_ignore
  38.     if /<def_ignore>/i =~ @note;return true;else;return false;end
  39.   end  
  40.   def def_break
  41.     if /<def_break>/i =~ @note;return true;else;return false;end
  42.   end   
  43. end
  44. class RPG::Enemy
  45.   def hp_def
  46.     if /<hp_def (\d+)>/i =~ @note;return $1.to_i;else;return 0;end
  47.   end  
  48. end

  49. class Game_ActionResult
  50.   attr_accessor   :hp_def
  51.   #--------------------------------------------------------------------------
  52.   # ● 清除伤害值
  53.   #--------------------------------------------------------------------------
  54.   alias old_804173948_clear_damage_values clear_damage_values
  55.   def clear_damage_values
  56.     old_804173948_clear_damage_values
  57.     @hp_def = 0
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 获取 HP 抵伤的文字
  61.   #--------------------------------------------------------------------------
  62.   def hp_def_text
  63.     if @hp_def > 0
  64.       fmt = @battler.actor? ? Vocab::ActorDef : Vocab::EnemyDef
  65.       sprintf(fmt, @battler.name, @hp_def)
  66.     end
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 获取 当前障壁 文字
  70.   #--------------------------------------------------------------------------
  71.   def hp_current_def_text
  72.     fmt = @battler.actor? ? Vocab::ActorCurrentDef : Vocab::ActorCurrentDef
  73.     sprintf(fmt, @battler.name, @battler.hp_def)
  74.   end
  75. end

  76. class Window_BattleLog  < Window_Selectable
  77.   #--------------------------------------------------------------------------
  78.   # ● 显示 HP 伤害
  79.   #--------------------------------------------------------------------------
  80.   alias old_804173948_display_hp_damage display_hp_damage
  81.   def display_hp_damage(target, item)
  82.     if target.result.hp_def > 0 && item && item.damage.to_hp?
  83.       add_text(target.result.hp_def_text)
  84.       add_text(target.result.hp_current_def_text)
  85.       wait
  86.     end
  87.     old_804173948_display_hp_damage(target,item);
  88.   end
  89.       
  90.   alias old_display_failure display_failure
  91.   def display_failure(target, item)##########Overwritten
  92.     if item.is_a?(RPG::Skill) && item.up_def < 0
  93.       old_display_failure(target, item)
  94.     end
  95.   end
  96.       
  97.   alias old_display_action_results display_action_results
  98.   def display_action_results(target, item)
  99.     old_display_action_results(target, item)
  100.     if item.is_a?(RPG::Skill) && item.up_def > 0
  101.       add_text(target.name + "增加了#{item.up_def}点障壁值")
  102.       add_text(target.result.hp_current_def_text)
  103.       wait
  104.       wait
  105.     end
  106.   end

  107. end
  108. class Game_BattlerBase
  109.   attr_accessor   :hp_def
  110.   #--------------------------------------------------------------------------
  111.   # ● 初始化对象
  112.   #--------------------------------------------------------------------------
  113.   alias old_804173948_initialize initialize
  114.   def initialize
  115.     old_804173948_initialize
  116.     @hp_def = 0
  117.     @tab_ignore = false
  118.     @tab_break = false
  119.   end
  120. end
  121. class Game_Battler
  122.   #--------------------------------------------------------------------------
  123.   #● 处理伤害
  124.   #    调用前需要设置好
  125.   #    @result.hp_damage   @result.mp_damage
  126.   #    @result.hp_drain    @result.mp_drain
  127.   #--------------------------------------------------------------------------
  128.   def execute_damage(user)##########Overwritten
  129.     if !@tab_ignore
  130.       self.hp_def = 0 if @tab_break
  131.       if @result.hp_damage > 0
  132.         if @result.hp_damage < self.hp_def
  133.           self.hp_def -= @result.hp_damage
  134.           @result.hp_def = @result.hp_damage
  135.           @result.hp_damage = 0
  136.         else
  137.           @result.hp_damage -= self.hp_def
  138.           @result.hp_def = self.hp_def
  139.           self.hp_def = 0
  140.         end
  141.       end
  142.     end
  143.     on_damage(@result.hp_damage) if @result.hp_damage > 0
  144.     self.hp -= @result.hp_damage
  145.     self.mp -= @result.mp_damage
  146.     user.hp += @result.hp_drain
  147.     user.mp += @result.mp_drain
  148.   end
  149.   alias old_make_damage_value make_damage_value
  150.   def make_damage_value(user, item)
  151.     @tab_ignore = false
  152.     @tab_break = false
  153.     if item.is_a?(RPG::Skill)
  154.         @tab_ignore = item.def_ignore
  155.         @tab_break = item.def_break
  156.     end
  157.     old_make_damage_value(user, item)
  158.   end
  159. end
  160. class Game_Actor  
  161.   #--------------------------------------------------------------------------
  162.   # ● 战斗开始处理
  163.   #--------------------------------------------------------------------------
  164.   def on_battle_start##########Overwritten
  165.     super
  166.     self.hp_def = battle_hp_def
  167.   end
  168.   def battle_hp_def
  169.     sum = 0
  170.     skills.each{|skill| sum+=skill.hp_def}
  171.     return sum
  172.   end
  173. end
  174. class Game_Enemy
  175.   #--------------------------------------------------------------------------
  176.   # ● 战斗开始处理
  177.   #--------------------------------------------------------------------------
  178.   def on_battle_start##########Overwritten
  179.     super
  180.     self.hp_def = battle_hp_def
  181.   end
  182.   def skills##########Overwritten
  183.     enemy.actions.collect{|action|$data_skills[action.skill_id]}
  184.   end
  185.   def battle_hp_def
  186.     sum = enemy.hp_def
  187.     skills.each{|skill| sum+=skill.hp_def}
  188.     return sum
  189.   end
  190. end

  191. class Game_Interpreter
  192.   def change_battler_hp_def(actor,id,value)
  193.     battler = (actor ? $game_party.members[id-1] : $game_troop.members[id-1])
  194.     battler.hp_def = value
  195.   end
  196.   def add_battler_hp_def(actor,id,value)
  197.     battler = (actor ? $game_party.members[id-1] : $game_troop.members[id-1])
  198.     battler.hp_def += value
  199.   end
  200.   def rate_battler_hp_def(actor,id,value)
  201.     battler = (actor ? $game_party.members[id-1] : $game_troop.members[id-1])
  202.     battler.hp_def = (battler.battle_hp_def * value).round
  203.   end
  204. end


  205. class Scene_Battle < Scene_Base
  206.   def add_battler_hp_def(actor,id,value)
  207.     battler = (actor ? $game_party.members[id-1] : $game_troop.members[id-1])
  208.     battler.hp_def += value
  209.   end
  210.   alias old_apply_item_effects apply_item_effects
  211.   def apply_item_effects(target, item)
  212.     return old_apply_item_effects(target, item) unless item.is_a?(RPG::Skill)##########
  213.     add_battler_hp_def(!target.is_a?(Game_Enemy),target.index,item.up_def)
  214.     old_apply_item_effects(target, item)
  215.   end
  216. end
复制代码
浅尝辄止,宜乎众矣。

Lv5.捕梦者

梦石
0
星屑
24057
在线时间
4983 小时
注册时间
2016-3-8
帖子
1613
发表于 2020-11-5 11:25:31 | 显示全部楼层
BUG回报
新建工程插入脚本后, 战斗中使用默认的药水(ID001)时报错:
未命名.png

点评

BUG已经修复  发表于 2020-12-30 11:27
感谢反馈···这么大的BUG我居然没发现,大概是测试的时候根本没试过用物品,现在我自己测试发现战斗中使用任何物品都会报错  发表于 2020-11-5 13:27
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
4 小时
注册时间
2020-12-25
帖子
2
发表于 2020-12-29 22:53:40 | 显示全部楼层
来支持一下!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-3-29 22:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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