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

Project1

 找回密码
 注册会员
搜索
查看: 8526|回复: 5
打印 上一主题 下一主题

[已经解决] 一般通过鸦天狗写的护盾系统插件和LNX11使用值槽刷新问题

[复制链接]

Lv2.观梦者

梦石
0
星屑
877
在线时间
195 小时
注册时间
2019-4-11
帖子
56
跳转到指定楼层
1
发表于 2021-3-6 13:14:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100星屑
本帖最后由 sxjkjly8010 于 2021-3-6 13:31 编辑

链接:https://pan.baidu.com/s/1UWI2sggfn7RtNd1eYLbNjg 提取码:1234
坛内大大@一般通过鸦天狗 写的一个护盾系统插件,成功实现了一个新值槽显示护盾值,但是测试的时候发现了问题
护盾值和脚本中护盾的自动状态效果都只会在有其他值槽发生变化的时候(HP,MP,TP)刷新值槽(和刷新状态),效果观感很差,这咋整啊

最佳答案

查看完整内容

=begin 护盾系统 by 炽天之咸鱼裁决 本插件基于yanfly引擎编写,没有yanfly也可运行,但是视觉效果会大打折扣 使用方法:此页面手动创建护盾类型,在技能或物品的备注栏调用 为目标添加以下id的护盾 用self替换b,用user替换a.技能仅对目标护盾造成此数值的伤害 用self替换b,用user替换a,技能对目标造成无视护盾的此数值的伤害 (新)重写了敌人盾条的视觉效果 (新)你可以在技能公式里使用“.s”来调用角色护盾数值总量 (新) ...

Lv2.观梦者

梦石
0
星屑
635
在线时间
24 小时
注册时间
2020-4-22
帖子
29
2
发表于 2021-3-6 13:14:22 | 只看该作者
本帖最后由 一般通过鸦天狗 于 2021-7-7 14:56 编辑

RUBY 代码复制
  1. =begin
  2. 护盾系统
  3. by 炽天之咸鱼裁决
  4. 本插件基于yanfly引擎编写,没有yanfly也可运行,但是视觉效果会大打折扣
  5.  
  6. 使用方法:此页面手动创建护盾类型,在技能或物品的备注栏调用
  7. <addshield: x(,y,z...)> 为目标添加以下id的护盾
  8. <shielddamage: "(技能公式)"> 用self替换b,用user替换a.技能仅对目标护盾造成此数值的伤害
  9. <realdamage: "(技能公式)"> 用self替换b,用user替换a,技能对目标造成无视护盾的此数值的伤害
  10.  
  11. (新)重写了敌人盾条的视觉效果
  12. (新)你可以在技能公式里使用“.s”来调用角色护盾数值总量
  13. (新)若攻击全被吸收,则不会显示“0”
  14.  
  15.  
  16. 护盾参数,除数值外,不需要则无需填写
  17.  
  18. value:护盾数值,不能为空
  19. status:数组,附加状态,代码来自Ninjamida
  20. fade:护盾每回合增长数值(负数为减少数值)
  21. max:护盾自然增长的最大值
  22. cansave:若为false,脱战后不可保留
  23. protect:若为true,则在破碎后防止额外的伤害
  24. no:编号,拥有编号的护盾生成时会顶替掉同编号的
  25. life:护盾持续最大回合数
  26. death参数已被移除
  27. (新)disappear:字符串,护盾由于击破以外的原因消失后执行以下代码
  28. (新)broken:字符串,护盾被击破后执行以下代码
  29. battlecry:字符串,护盾生成后执行以下代码
  30. element:数组,护盾只对以下属性的伤害有作用
  31. color1/2:color 盾条颜色
  32. (新)heal:布尔,若值为true则治疗量会被转化为盾量
  33. (新)add:布尔,若值为true则新护盾会继承原有同编号护盾的所有属性
  34. (新)hp_heal:(支持使用技能公式)每回合为持有者恢复此数值的hp,负数则为减少
  35. (新)mp_heal:(支持使用技能公式)每回合为持有者恢复此数值的mp,负数则为减少
  36. (新)tp_heal:(支持使用技能公式)每回合为持有者恢复此数值的tp,负数则为减少
  37. (新)onlyattack:若值为true,则无法防御状态造成的伤害
  38. (新)icon:护盾图像的编号
  39. =end
  40.  
  41. module SHIELD
  42.   TAKE_DAM= "吸收"
  43.   HP_HEAL = "护盾恢复"
  44.   HP_DAM = "护盾反噬"
  45.   MP_HEAL = "护盾恢复"
  46.   MP_DAM = "护盾反噬"
  47.   TP_HEAL = "护盾恢复"
  48.   TP_DAM = "护盾反噬"
  49.   FADE = "护盾衰减"
  50.   BREAK = "护盾破碎"
  51.   DISAPPEAR = "护盾消失"
  52.   REFRESH  = "护盾刷新"
  53.   NEW  = "护盾"
  54.   ADD  = "护盾补充"
  55.   PROTECT = "保护"
  56.   GET_DAM= "吸收"
  57.   S_DAM = "碎盾"
  58.   R_DAM = "真实伤害"
  59. end
  60. class Battler_shield
  61.   attr_accessor :value
  62.   attr_accessor :status
  63.   attr_accessor :fade
  64.   attr_accessor :cansave
  65.   attr_accessor :protect
  66.   attr_accessor :no
  67.   attr_accessor :max
  68.   attr_accessor :life
  69.   attr_accessor :disappear
  70.   attr_accessor :broken
  71.   attr_accessor :color1
  72.   attr_accessor :color2
  73.   attr_accessor :battlecry
  74.   attr_accessor :element
  75.   attr_accessor :heal
  76.   attr_accessor :add
  77.   attr_accessor :hp_heal
  78.   attr_accessor :mp_heal
  79.   attr_accessor :tp_heal
  80.   attr_accessor :onlyattack
  81.   attr_accessor :icon
  82.  
  83.  
  84.   def initialize(type,user,target)
  85.     @user = user
  86.     @target = target
  87.     case type
  88.     #以如下格式创建自定义的护盾
  89.     when 1
  90.       @value = user.mhp - user.hp + 30
  91.       @max = 0
  92.       @cansave = false
  93.       @protect = false
  94.       @no = 1
  95.       @life = 5
  96.       @add = true
  97.       @onlyattack = true
  98.     when 2
  99.       @value = user.mhp * 0.25 - user.hp * 0.25 + 200 .to_i
  100.       @max = 0
  101.       @cansave = false
  102.       @protect = false
  103.       @no = 1
  104.       @life = 5
  105.       @add = true
  106.       @onlyattack = true
  107.     when 3
  108.       @value = 10
  109.       @max = 0
  110.       @cansave = false
  111.       @protect = false
  112.       @no = 1
  113.       @life = 999
  114.       @add = true
  115.       @onlyattack = true
  116.     when 4
  117.       @value = 1000
  118.       @max = 0
  119.       @cansave = false
  120.       @protect = true
  121.       @no = 1
  122.       @life = 7
  123.       @add = true
  124.       @onlyattack = true
  125.     when 5
  126.       @value = 30
  127.       @max = 0
  128.       @cansave = false
  129.       @protect = true
  130.       @no = 1
  131.       @life = 3
  132.       @add = true
  133.       @onlyattack = true
  134.     when 6
  135.       @value = 1
  136.       @max = 0
  137.       @cansave = false
  138.       @protect = true
  139.       @no = 1
  140.       @life = 2
  141.       @add = true
  142.       @onlyattack = true
  143.     when 7
  144.       @value = @user.hp
  145.       @status = [24]
  146.     end
  147.     ##################################
  148.     msgbox("护盾值不能为空") if @value == nil
  149.     @value = @value.to_i
  150.   end
  151. end
  152. class Sprite_Seed#伴生精灵参数
  153.   attr_accessor :icon#图像与色调
  154.   attr_accessor :dx#相对战斗者的x值
  155.   attr_accessor :dy#相对战斗者的y值
  156.   attr_accessor :dz#相对战斗者的z值
  157.   attr_accessor :opacity#透明度
  158.   attr_accessor :begin#入场动画id
  159.   attr_accessor :exist#持续时播放的动画id
  160.   attr_accessor :end#退场动画id
  161.   def initialize(n)
  162.     case n
  163.     when 1
  164.       @icon = ["terry.png",0]
  165.       @dx = 0
  166.       @dy = 0
  167.       @dz = 0
  168.       @opacity = 100
  169.     end
  170.   end
  171. end
  172.  
  173. #############################################################################
  174. class RPG::BaseItem
  175.   attr_accessor :shield
  176.   attr_accessor :s_damage
  177.   attr_accessor :r_damage
  178.   def shield
  179.     if @shield.nil?
  180.           @shield = []
  181.           if @note =~ /<addshield:[ ](.*)>/i
  182.             for x in $1.split(",")
  183.                   @shield += [x.to_i]
  184.             end
  185.           end
  186.     end
  187.     @shield
  188.   end
  189.  
  190.  
  191.   def shield_damage
  192.     if @s_damage.nil?
  193.           @s_damage = 0
  194.           if @note =~ /<shielddamage:[ ](.*)>/i
  195.                   @s_damage = $1.to_s
  196.           end
  197.     end
  198.     @s_damage
  199.   end
  200. def real_damage
  201.     if @r_damage.nil?
  202.           @r_damage = 0
  203.           if @note =~ /<realdamage:[ ](.*)>/i
  204.                   @r_damage = $1.to_s
  205.           end
  206.     end
  207.     @r_damage
  208.   end
  209. end
  210.  
  211.  
  212.  
  213.  
  214. ###############来自Ninjamida#######################
  215. class RPG::BaseItem
  216.  
  217.   def auto_states
  218.     if @auto_states.nil?
  219.           @auto_states = []
  220.           if @note =~ /<auto state:[ ](.*)>/i
  221.             for x in $1.split(",")
  222.                   @auto_states += [x.to_i]
  223.             end
  224.           end
  225.     end
  226.     @auto_states
  227.   end
  228.  
  229. end
  230.  
  231. class Game_Actor < Game_Battler
  232.   def auto_states
  233.     autostates = self.class.auto_states + actor.auto_states
  234.     equips.each do |eq|
  235.           autostates += eq.auto_states unless eq.nil?
  236.     end
  237.     states.each do |st|
  238.           autostates += st.auto_states
  239.   end
  240.     @shield.each{|i|
  241.     autostates += i.status if i.status != nil
  242.  
  243.  
  244.     }
  245.     autostates = autostates.uniq
  246.     return autostates
  247.   end
  248.  
  249. end
  250. class Game_Enemy < Game_Battler
  251.   def auto_states
  252.     autostates = enemy.auto_states
  253.     states.each do |st|
  254.           autostates += st.auto_states
  255.     end
  256.     @shield.each{|i|
  257.     autostates += i.status if i.status != nil
  258.     }
  259.     autostates = autostates.uniq
  260.     return autostates
  261.   end
  262.  
  263. end
  264.  
  265. class Scene_Battle
  266.  
  267.   alias s_auto_state_battle_start battle_start
  268.   def battle_start
  269.     s_auto_state_battle_start
  270.     $game_party.members.each{|mem|
  271.           mem.add_auto_states
  272.     status_redraw_target(mem) if $imported["YEA-BattleEngine"]
  273.     }
  274.  
  275.  
  276.   end
  277.  
  278. end
  279.  
  280. class Game_Battler
  281.  
  282.   alias s_auto_states_initialize initialize
  283.   def initialize
  284.     s_auto_states_initialize
  285.     @old_auto_states = []
  286.   end
  287.  
  288.   def add_auto_states
  289.     return if state?(death_state_id)
  290.     auto_states.each do |st|
  291.           if not state?(st)
  292.             add_state(st)
  293.             @state_turns[st] = -1
  294.           end
  295.     end
  296.   end
  297.  
  298.   def remove_old_auto_states
  299.     auto_states.each do |as|
  300.           @old_auto_states.delete(as)
  301.     end
  302.     @old_auto_states.each do |oas|
  303.           remove_state(oas)
  304.     end
  305.     @old_auto_states = auto_states
  306.   end
  307.  
  308.   alias s_auto_state_item_effect_remove_state item_effect_remove_state
  309.   def item_effect_remove_state(user, item, effect)
  310.     s_auto_state_item_effect_remove_state(user, item, effect) unless auto_states.include?(effect.data_id)
  311.   end
  312.  
  313.   alias s_auto_state_refresh refresh
  314.   def refresh
  315.     s_auto_state_refresh
  316.     add_auto_states
  317.     remove_old_auto_states
  318.   end
  319.  
  320. end
  321. ###############################################################
  322.  
  323. #读档时为没有护盾属性的角色添加(避免坏档)
  324. module DataManager
  325.   class <<self; alias shield_extract_save_contents extract_save_contents; end
  326.   def self.extract_save_contents(contents)
  327.     shield_extract_save_contents(contents)
  328.     $game_actor.each{|a|
  329.     a.shield_init
  330.  
  331.  
  332.     }
  333.  
  334.   end
  335. end
  336. class Game_ActionResult
  337.   attr_accessor :s_damage
  338.   attr_accessor :r_damage
  339.   alias s_clear_damage_values clear_damage_values
  340.   def clear_damage_values
  341.     s_clear_damage_values
  342.     @s_damage = 0
  343.     @r_damage = 0
  344.   end
  345.   alias s_make_damage make_damage
  346.   def make_damage(value, item)
  347.     s_make_damage(value, item)
  348.     @s_damage = item.shield_damage
  349.   end
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356. end
  357.  
  358.  
  359.  
  360.  
  361. class Game_BattlerBase
  362.   attr_accessor :shield
  363.   attr_accessor :ex_sprite
  364.  
  365.   def shield_add(a,b)
  366.     b.value += a.value
  367.     b.status += a.status if b.status != nil and a.status != nil
  368.     b.status =  a.status if b.status == nil
  369.     b.element += a.element if b.element != nil and a.element != nil
  370.     b.element =  a.element if b.element == nil
  371.     b.fade += a.fade if b.fade != nil and a.fade != nil
  372.     b.fade =  a.fade if b.fade == nil
  373.     b.cansave = false if a.cansave == false
  374.     b.protect = true if a.protect == true
  375.     b.max = a.max if b.max == nil
  376.     b.life += a.life if b.life != nil and a.life != nil
  377.     b.life =  a.life if b.life == nil
  378.     b.disappear = "#{a.disappear};#{b.disappear}" if b.disappear != nil and a.disappear != nil
  379.     b.disappear = a.disappear if b.disappear == nil
  380.     b.broken = "#{a.broken};#{b.broken}" if b.broken != nil and a.broken != nil
  381.     b.broken = a.broken if b.broken == nil
  382.     b.color1 = a.color1 if a.color1
  383.     b.color2 = a.color2 if a.color2
  384.     b.heal = true if a.heal == true
  385.     b.hp_heal += a.hp_heal if b.hp_heal != nil and a.hp_heal != nil
  386.     b.hp_heal =  a.hp_heal if b.hp_heal == nil
  387.     b.mp_heal += a.mp_heal if b.mp_heal != nil and a.mp_heal != nil
  388.     b.mp_heal =  a.mp_heal if b.mp_heal == nil
  389.     b.tp_heal += a.tp_heal if b.tp_heal != nil and a.tp_heal != nil
  390.     b.tp_heal =  a.tp_heal if b.tp_heal == nil
  391.   end
  392.   def s
  393.     sv = 0
  394.     @shield.each{|i|
  395.     sv += i.value
  396.     }
  397.     return sv
  398.   end
  399.   def shield_init
  400.     return if @shield
  401.     @shield = []
  402.     @ex_sprite = {}
  403.     @s = 0
  404.   end  
  405.   alias initializewithshield initialize
  406.   def initialize
  407.     initializewithshield
  408.     shield_init
  409.   end
  410.  
  411.   def nocheck(no)
  412.     @shield.each_index{|i|
  413.     if @shield[i].no == no
  414.       @shield.delete_at(i)
  415.       break
  416.     end
  417.     }
  418.  
  419.   end
  420.  
  421.  
  422.  
  423.   def shieldtotal
  424.     n = 0
  425.     @shield.each{|i|
  426.     n += i.value}
  427.     return n
  428.   end
  429.  
  430.   def draw_bar_rate
  431.     a = []
  432.     b = draw_hp_rate
  433.     a << b
  434.     s = 1 - b
  435.     t = shieldtotal
  436.     @shield.each{|i|
  437.     r = s * i.value.to_f / t
  438.     a << r }
  439.     return a
  440.   end
  441.   def shield_bar_rate
  442.     a = []
  443.     b = draw_hp_rate
  444.     s = 1 - b
  445.     t = shieldtotal
  446.     @shield.each{|i|
  447.     r = s * i.value.to_f / t
  448.     a << r }
  449.     return a
  450.   end
  451.  
  452.   def shield_rate
  453.     s = shieldtotal
  454.     if @hp + s <= mhp
  455.       return s.to_f / mhp
  456.     else
  457.       return s.to_f / (s + @hp).to_f
  458.     end
  459.  
  460.   end
  461.   def draw_hp_rate
  462.     s = shieldtotal
  463.     if @hp + s <= mhp
  464.       return @hp.to_f / mhp
  465.     else
  466.       return @hp.to_f / (s + @hp).to_f
  467.     end
  468.   end
  469.   def draw_shield_rate
  470.     s = shieldtotal
  471.     if @hp + s <= mhp
  472.       return s.to_f / (mhp - @hp)
  473.     else
  474.       return 1
  475.     end
  476.  
  477.   end
  478.  
  479.  
  480.  
  481. end
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488. class Game_Battler < Game_BattlerBase
  489.   def shield_heal
  490.     shield_hp_heal
  491.     shield_mp_heal
  492.     shield_tp_heal
  493.   end
  494.   def shield_hp_heal
  495.     @shield.each_index{|i|
  496.         if @shield[i].hp_heal != nil
  497.           value = @shield[i].hp_heal
  498.           value = self.mhp - @hp if (@hp + value) > self.mhp
  499.           value = @hp if (@hp + value) < 0
  500.           if value > 0
  501.             rules = "HP_HEL"
  502.             text = SHIELD::HP_HEAL
  503.             create_popup(text, rules)
  504.             text = "+#{value}"
  505.             create_popup(text, rules)
  506.           elsif value < 0
  507.             rules = "HP_DMG"
  508.             text = SHIELD::HP_DAM
  509.             create_popup(text, rules)
  510.             text = "-#{-value}"
  511.             create_popup(text, rules)
  512.           end
  513.           @hp += value
  514.         end
  515.       }
  516.    end
  517.    def shield_mp_heal
  518.     @shield.each_index{|i|
  519.         if @shield[i].mp_heal != nil
  520.           value = @shield[i].mp_heal
  521.           value = @self.mmp - @mp if (@mp + value) > self.mmp
  522.           value = @mp if (@mp + value) < 0
  523.           if value > 0
  524.             rules = "MP_HEL"
  525.             text = SHIELD::MP_HEAL
  526.             create_popup(text, rules)
  527.             text = "+#{value}"
  528.             create_popup(text, rules)
  529.           elsif value < 0
  530.             rules = "MP_DMG"
  531.             text = SHIELD::MP_DAM
  532.             create_popup(text, rules)
  533.             text = "-#{-value}"
  534.             create_popup(text, rules)
  535.           end
  536.           @mp += value
  537.         end
  538.       }
  539.     end
  540.     def shield_tp_heal
  541.     @shield.each_index{|i|
  542.         if @shield[i].tp_heal != nil
  543.           value = @shield[i].tp_heal
  544.           value = 100 - @tp if (@tp + value) > 100
  545.           value = @tp if (@tp + value) < 0
  546.           if value > 0
  547.             rules = "MP_HEL"
  548.             text = SHIELD::TP_HEAL
  549.             create_popup(text, rules)
  550.             text = "+#{value}"
  551.             create_popup(text, rules)
  552.           elsif value < 0
  553.             rules = "MP_DMG"
  554.             text = SHIELD::TP_DAM
  555.             create_popup(text, rules)
  556.             text = "-#{-value}"
  557.             create_popup(text, rules)
  558.           end
  559.           @tp += value
  560.         end
  561.       }
  562.    end
  563.   alias shieldon_turn_end on_turn_end
  564.   def on_turn_end
  565.     shield_heal
  566.     s =  @shield.size - 1
  567.     i = 0
  568.     while i <= s
  569.       fade = @shield[i].fade
  570.       if fade != nil and fade != 0
  571.  
  572.         if @shield[i].max != nil
  573.           ts = @shield[i].value + fade
  574.           if @shield[i].max > @shield[i].value
  575.             fade = @shield[i].max - @shield[i].value if ts > @shield[i].max
  576.           else
  577.             fade = 0
  578.           end
  579.         end
  580.         rules = "MP_DMG"
  581.         text = SHIELD::FADE
  582.         create_popup(text, rules)
  583.         text = sprintf(+"%s", fade) if fade > 0
  584.         text = sprintf("%s", fade) if fade < 0
  585.         create_popup(text, rules)
  586.         @shield[i].value += fade
  587.       end
  588.       life = @shield[i].life
  589.       if life != nil
  590.         @shield[i].life -= 1
  591.       end
  592.       if @shield[i].value <= 0 or @shield[i].life == 0
  593.         shielddisappear(i)
  594.         i -= 1
  595.         s =  @shield.size - 1
  596.       end
  597.       i += 1
  598.     end
  599.     shieldon_turn_end
  600.   end
  601.   def addshield(item,user,target)
  602.     return if item.shield == nil
  603.     item.shield.each{|i|
  604.     s = Battler_shield.new(i,user,target)
  605.  
  606.     if s.no != nil
  607.      @shield.each_index{|i|
  608.         if @shield[i].no == s.no
  609.           shield_add(@shield[i],s) if @shield[i].add == true or s.add == true
  610.           @ex_sprite[@shield[i]].kill unless @shield[i].icon.nil?
  611.           @shield.delete_at(i)
  612.           @s_fresh = true
  613.           break
  614.         end
  615.       }
  616.     end
  617.     if self.class == Game_Enemy
  618.       scene = SceneManager.scene.spriteset.viewport1
  619.     else
  620.       scene = nil
  621.     end
  622.     @ex_sprite[s]=Sprite_Battler_Ex.new(scene,Sprite_Seed.new(s.icon),self) unless s.icon.nil?
  623.  
  624.  
  625.  
  626.  
  627.  
  628.     @s_value << s.value
  629.     @shield << s
  630.  
  631.     eval s.battlecry if s.battlecry != nil
  632.     }
  633.   end
  634.  
  635.  
  636.   def shielddisappear(i)
  637.     $imported = {} if $imported.nil?
  638.     if $imported["YEA-BattleEngine"]
  639.       if @shield[i].value == 0
  640.         rules = "HP_DMG"
  641.         text = SHIELD::BREAK
  642.         create_popup(text, rules)
  643.       else
  644.         rules = "HP_DMG"
  645.         text = SHIELD::DISAPPEAR
  646.         create_popup(text, rules)
  647.       end
  648.     end
  649.     if @shield[i].value == 0
  650.        eval  @shield[i].broken if @shield[i].broken != nil
  651.     else
  652.       eval  @shield[i].disappear if @shield[i].disappear != nil
  653.     end
  654.     @ex_sprite[@shield[i]].kill unless @shield[i].icon.nil?
  655.     @shield.delete_at(i)
  656.   end
  657.  
  658.  
  659.  
  660.   def regenerate_hp #状态伤害
  661.     damage = -(mhp * hrg).to_i
  662.     perform_map_damage_effect if $game_party.in_battle && damage > 0
  663.     @result.hp_damage = [damage, max_slip_damage].min
  664.     state_shielduse
  665.     self.hp -= @result.hp_damage
  666.   end
  667.   def state_shielduse
  668.     return if @result.hp_damage == 0
  669.     if @result.hp_damage < 0
  670.       healshield
  671.       return
  672.     end
  673.     unless @shield.empty?
  674.       size = @shield.size
  675.       n = size - 1
  676.       while n >= 0
  677.         if @s_invalid.include?(n)
  678.           n -= 1
  679.           next
  680.         end
  681.         if  @shield[n].onlyattack == true
  682.           n -= 1
  683.           next
  684.         end
  685.  
  686.         @result.hp_damage -= @shield[n].value
  687.         if @result.hp_damage >= 0  #碎盾
  688.           if @shield[n].protect == true
  689.             @result.hp_damage = 0
  690.             @protect = true
  691.           end  #碎盾保护
  692.           @t_damage += @shield[n].value
  693.           shielddisappear(n)
  694.         else #未碎盾
  695.           @t_damage += @shield[n].value
  696.           @t_damage += @result.hp_damage
  697.           @shield[n].value = -@result.hp_damage
  698.           @result.hp_damage = 0
  699.         end
  700.         break if  @result.hp_damage == 0
  701.         n -= 1
  702.       end
  703.       @useshield = true if @t_damage != 0
  704.     end
  705.   end
  706.   def shielddamage
  707.     return if @result.s_damage == 0
  708.     @result.s_damage = 0 if @shield.empty?
  709.     unless @shield.empty?
  710.       dam = @result.s_damage
  711.       size = @shield.size
  712.       n = size - 1
  713.       while n >= 0
  714.         @result.s_damage -= @shield[n].value
  715.         if @result.s_damage >= 0  #碎盾
  716.           @s_damage += @shield[n].value
  717.           @shield.delete_at(n)
  718.         else #未碎盾
  719.           @s_damage += @shield[n].value
  720.           @s_damage += @result.s_damage
  721.           @shield[n].value = -@result.s_damage
  722.           @result.s_damage = 0
  723.         end
  724.         break if  @result.s_damage == 0
  725.         n -= 1
  726.       end
  727.       @result.s_damage = 0 if @result.s_damage < 0
  728.       @result.s_damage = dam - @result.s_damage
  729.     end
  730.   end
  731.   def healshield
  732.     unless @shield.empty?
  733.       size = @shield.size
  734.       n = size - 1
  735.       while n >= 0
  736.         if @shield[n].heal == true
  737.           @shield[n].value -= @result.hp_damage
  738.           @t_damage = -@result.hp_damage
  739.           @result.hp_damage = 0
  740.           return
  741.         end
  742.         n -= 1
  743.       end
  744.     end
  745.   end
  746.   def useshield
  747.     shielddamage
  748.     return if @result.hp_damage == 0
  749.     if @result.hp_damage < 0
  750.       healshield
  751.       return
  752.     end
  753.     unless @shield.empty?
  754.       size = @shield.size
  755.       n = size - 1
  756.       while n >= 0
  757.         if @s_invalid.include?(n)
  758.           n -= 1
  759.           next
  760.         end
  761.  
  762.         @result.hp_damage -= @shield[n].value
  763.         if @result.hp_damage >= 0  #碎盾
  764.           if @shield[n].protect == true
  765.             @result.hp_damage = 0
  766.             @protect = true
  767.           end  #碎盾保护
  768.           @t_damage += @shield[n].value
  769.           shielddisappear(n)
  770.         else #未碎盾
  771.           @t_damage += @shield[n].value
  772.           @t_damage += @result.hp_damage
  773.           @shield[n].value = -@result.hp_damage
  774.           @result.hp_damage = 0
  775.         end
  776.         break if  @result.hp_damage == 0
  777.         n -= 1
  778.       end
  779.       @useshield = true if @t_damage != 0
  780.     end
  781.  
  782.  
  783.   end
  784.  
  785.   def s_invalid(user, item)
  786.     @s_invalid = []
  787.     return if item.damage == nil
  788.     @shield.each_index{|n|
  789.     if @shield[n].element != nil
  790.       @shield[n].element.each{|i|
  791.       @s_invalid << n unless user.atk_elements.include?(i) or item.damage.element_id == i
  792.       }
  793.  
  794.  
  795.     end
  796.     }
  797.   end
  798.  
  799.  
  800.  
  801.   def item_element(i)
  802.     if item.damage.element_id < 0
  803.       user.atk_elements
  804.     else
  805.       item.damage.element_id
  806.     end
  807.   end
  808.  
  809.   alias item_applyshield item_apply
  810.   def item_apply(user, item)
  811.     @s_value = []
  812.     s_invalid(user, item)
  813.     addshield(item,user,self)
  814.     make_damage_popups(user)
  815.     item_applyshield(user, item)
  816.  
  817.   end
  818.   alias s_make_damage_value make_damage_value
  819.   def make_damage_value(user, item)
  820.     s_make_damage_value(user, item)
  821.     r = eval(item.real_damage.to_s)
  822.     @result.r_damage = r.to_i
  823.     s = eval(item.s_damage.to_s)
  824.     @result.s_damage = s.to_i
  825.   end
  826.  
  827.  
  828.  
  829.  
  830.   alias execute_damagewithshield execute_damage
  831.   def execute_damage(user)
  832.     @t_damage = 0
  833.     @s_damage = 0
  834.     useshield
  835.     self.hp -= [@result.r_damage,self.hp].min
  836.     execute_damagewithshield(user)
  837.  
  838.   end
  839.   $imported = {} if $imported.nil?
  840.   if $imported["YEA-BattleEngine"]
  841.     alias shieldmake_damage_popups make_damage_popups
  842.     def make_damage_popups(user)
  843.  
  844.  
  845.       if @s_value != [] and @s_value != nil
  846.         if @s_fresh != nil
  847.           text = SHIELD::REFRESH
  848.  
  849.  
  850.           rules = "HP_HEL"
  851.           create_popup(text, rules)
  852.           @s_fresh = nil
  853.         else
  854.           text = SHIELD::NEW
  855.           rules = "HP_DMG"
  856.           create_popup(text, rules)
  857.         end
  858.         @s_value.each{|i|
  859.         value = i.abs
  860.         text = sprintf("%s", value.group)
  861.         create_popup(text, rules)
  862.         }
  863.         @s_value = []
  864.       end
  865.       if @useshield != nil
  866.         if @t_damage > 0
  867.           if @protect != nil
  868.             text =   SHIELD::PROTECT
  869.             rules = "HP_HEL"
  870.             @protect = nil
  871.           else
  872.             text = SHIELD::GET_DAM
  873.             rules = "HP_DMG"
  874.           end
  875.           create_popup(text, rules)
  876.           value = @t_damage.abs
  877.           rules = "MP_DMG"
  878.           text = sprintf("%s", value.group)
  879.           create_popup(text, rules)
  880.         elsif @t_damage < 0
  881.           text = SHIELD::ADD
  882.           rules = "HP_HEL"
  883.           @protect = nil
  884.           create_popup(text, rules)
  885.           value = @t_damage.abs
  886.           rules = "MP_DMG"
  887.           text = sprintf(+"%s", value.group)
  888.           create_popup(text, rules)
  889.         end
  890.       end
  891.       if @result.s_damage != 0
  892.         text = SHIELD::S_DAM
  893.         rules = "HP_DMG"
  894.         create_popup(text, rules)
  895.         value = @result.s_damage
  896.         text = sprintf("%s", value)
  897.         create_popup(text, rules)
  898.         @result.s_damage = 0
  899.       end
  900.       if @result.r_damage != 0
  901.         text = SHIELD::R_DAM
  902.         rules = "HP_DMG"
  903.         create_popup(text, rules)
  904.         value = @result.r_damage
  905.         text = sprintf("%s", value)
  906.         create_popup(text, rules)
  907.         @result.r_damage = 0
  908.       end
  909.       shieldmake_damage_popups(user)
  910.       @t_damage = 0
  911.     end
  912.     def make_miss_popups(user, item)
  913.       return if dead?
  914.       if @result.missed && item.shield == []
  915.         text = YEA::BATTLE::POPUP_SETTINGS[:missed]
  916.         rules = "DEFAULT"
  917.         create_popup(text, rules)
  918.       end
  919.       if @result.evaded && item.shield == []
  920.         text = YEA::BATTLE::POPUP_SETTINGS[:evaded]
  921.         rules = "DEFAULT"
  922.         create_popup(text, rules)
  923.       end
  924.       if @result.hit? && !@result.success && item.shield == []
  925.         text = YEA::BATTLE::POPUP_SETTINGS[:failed]
  926.         rules = "DEFAULT"
  927.         create_popup(text, rules)
  928.       end
  929.       if @result.hit? && item.damage.to_hp? && @useshield == nil && item.shield == []
  930.         if @result.hp_damage == 0 && @result.hp_damage == 0
  931.           text = YEA::BATTLE::POPUP_SETTINGS[:nulled]
  932.           rules = "DEFAULT"
  933.           create_popup(text, rules)
  934.         end
  935.       end
  936.       @useshield = nil
  937.     end
  938.   end
  939.   alias shieldon_battle_end on_battle_end
  940.   def on_battle_end
  941.     shieldon_battle_end
  942.     s =  @shield.size - 1
  943.     i = 0
  944.     while i <= s
  945.       if @shield[i].cansave == false
  946.         shielddisappear(i)
  947.         i -= 1
  948.         s =  @shield.size - 1
  949.       end
  950.       i += 1
  951.     end
  952.   end
  953. end
  954.  
  955.  
  956.  
  957.  
  958.  
  959. class Window_BattleStatus
  960.   def shield_gauge_color1;   text_color(0);   end;
  961.   def shield_gauge_color2;   text_color(8);   end;
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968. def draw_actor_hp(actor, dx, dy, width = 124)
  969.     s = actor.shieldtotal
  970.     draw_gauge(dx, dy, width, actor.draw_hp_rate, hp_gauge_color1, hp_gauge_color2)
  971.     draw_actor_shield(actor, dx + width * actor.draw_hp_rate , dy, width)
  972.     cy = (Font.default_size - contents.font.size) / 2 + 1
  973.  
  974.     draw_text(dx+2, dy+cy, 30, line_height, Vocab::hp_a)
  975.     draw_current_and_max_values(dx, dy+cy, width, actor.hp, actor.mhp,
  976.     hp_color(actor), normal_color)
  977.   end
  978.  
  979.  
  980.   def draw_actor_shield(actor, dx, dy, width = 124)
  981.     actor.shield.each{|i|
  982.     w = width.to_f * (1- actor.draw_hp_rate) * actor.draw_shield_rate * i.value / actor.shieldtotal
  983.     c1 = i.color1 ? i.color1 : shield_gauge_color1
  984.     c2 = i.color2 ? i.color2 : shield_gauge_color2
  985.     draw_gauge(dx, dy, w , 1, c1, c2)
  986.     dx += w
  987.     }
  988.  
  989.     change_color(system_color)
  990.   end
  991. end
  992. class Window_Base
  993.   def shield_gauge_color1;   text_color(0);   end;
  994.   def shield_gauge_color2;   text_color(8);   end;
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.   def draw_actor_hp(actor, dx, dy, width = 124)
  1002.     s = actor.shieldtotal
  1003.     draw_gauge(dx, dy, width, actor.draw_hp_rate, hp_gauge_color1, hp_gauge_color2)
  1004.     draw_actor_shield(actor, dx + width * actor.draw_hp_rate , dy, width)
  1005.     cy = (Font.default_size - contents.font.size) / 2 + 1
  1006.  
  1007.     draw_text(dx+2, dy+cy, 30, line_height, Vocab::hp_a)
  1008.     draw_current_and_max_values(dx, dy+cy, width, actor.hp, actor.mhp,
  1009.     hp_color(actor), normal_color)
  1010.   end
  1011.  
  1012.  
  1013.   def draw_actor_shield(actor, dx, dy, width = 124)
  1014.     actor.shield.each{|i|
  1015.     w = width.to_f * (1- actor.draw_hp_rate) * actor.draw_shield_rate * i.value / actor.shieldtotal
  1016.     c1 = i.color1 ? i.color1 : shield_gauge_color1
  1017.     c2 = i.color2 ? i.color2 : shield_gauge_color2
  1018.     draw_gauge(dx, dy, w , 1, c1, c2)
  1019.     dx += w
  1020.     }
  1021.  
  1022.     change_color(system_color)
  1023.   end
  1024.  
  1025. end
  1026.  
  1027.  
  1028. #######来自yanfly与DoubleX#############
  1029. $imported = {} if $imported.nil?
  1030. if $imported["YEA-EnemyHPBars"] and $imported["DoubleX RMVXA Percentage Addon to YEA-EnemyHPBars"]
  1031. class Enemy_HP_Gauge_Viewport < Viewport
  1032.   def initialize(battler, sprite, type)
  1033.     @battler = battler
  1034.     @base_sprite = sprite
  1035.     @type = type
  1036.     dw = YEA::BATTLE::ENEMY_GAUGE_WIDTH
  1037.     if @type == :percent && FIX_LARGE_TEXT
  1038.       dh = [TEXT_SIZE, YEA::BATTLE::ENEMY_GAUGE_HEIGHT].max
  1039.     else
  1040.       dh = YEA::BATTLE::ENEMY_GAUGE_HEIGHT
  1041.     end
  1042.     if @type != :hp and @type != :shield
  1043.       dw += 2
  1044.       dh += 2
  1045.     end
  1046.     @start_width = dw
  1047.     rect = Rect.new(0, 0, dw, dh)
  1048.     @current_hp = @battler.hp
  1049.     @current_mhp = @battler.mhp
  1050.     @current_hr = @battler.draw_hp_rate
  1051.     @current_sr = @battler.shield_bar_rate
  1052.     @target_gauge_width = target_gauge_width
  1053.     @gauge_rate = @current_hr
  1054.     setup_original_hide_gauge
  1055.     super(rect)
  1056.     self.z = 125
  1057.     create_gauge_sprites
  1058.     self.visible = false
  1059.     update_position
  1060.     self.rect.width = @gauge_width if @type == :hp
  1061.   end
  1062.  
  1063.  
  1064.  
  1065.   def target_gauge_rate
  1066.     return @current_hr
  1067.   end
  1068.   def target_gauge_width
  1069.     return [@current_hr * @start_width, @start_width].min
  1070.   end
  1071.  
  1072.   def update_gauge
  1073.     unless @gauge_width == @target_gauge_width
  1074.       rate = 3
  1075.       @target_gauge_width = target_gauge_width
  1076.       if @gauge_width > @target_gauge_width
  1077.         @gauge_width = [@gauge_width - rate, @target_gauge_width].max
  1078.       elsif @gauge_width < @target_gauge_width
  1079.         @gauge_width = [@gauge_width + rate, @target_gauge_width].min
  1080.       end
  1081.       @visible_counter = @gauge_width == 0 ? 10 : 60
  1082.       rect.width = @gauge_width if @type == :hp
  1083.     end
  1084.     shield_update
  1085.   end
  1086.  
  1087.   def new_hp_updates
  1088.     return if @current_hr == @battler.draw_hp_rate and @current_sr == @battler.shield_bar_rate
  1089.     @current_hp = @battler.hp
  1090.     @current_mhp = @battler.mhp
  1091.     @current_hr = @battler.draw_hp_rate
  1092.     return if @gauge_rate == target_gauge_rate
  1093.     @gauge_rate = target_gauge_rate
  1094.     @target_gauge_width = target_gauge_width
  1095.     @visible_counter = 60
  1096.   end
  1097.  
  1098.  
  1099.  
  1100.   def update_percentage
  1101.     return if @last_hp == @current_hp
  1102.     @last_hp = @current_hp
  1103.     set_percentage_font
  1104.     if ACTUAL_NUMBER
  1105.       percent = @current_hp.to_i.to_s
  1106.     else
  1107.       percent = "#{(@current_hp.to_f / @current_mhp.to_f * 100).to_i.to_s}%"
  1108.     end
  1109.     dw = @sprite.bitmap.text_size(percent).width
  1110.     @sprite.bitmap.clear
  1111.     @sprite.bitmap.draw_text(YEA::BATTLE::ENEMY_GAUGE_WIDTH + 2 - dw, 1, dw,
  1112.     @sprite.bitmap.text_size(percent).height, percent)
  1113.   end
  1114.  
  1115.   def create_gauge_sprites
  1116.     @sprite = Plane.new(self)
  1117.     @sprite.bitmap = Bitmap.new(rect.width * 4, rect.height)
  1118.     enemy = @battler.enemy
  1119.     if @type == :back
  1120.       colour = Colour.text_colour(enemy.back_gauge_colour)
  1121.       colour1 = colour2 = colour
  1122.     elsif @type == :hp
  1123.       colour1 = Colour.text_colour(enemy.hp_gauge_colour1)
  1124.       colour2 = Colour.text_colour(enemy.hp_gauge_colour2)
  1125.     elsif @type == :percent
  1126.       colour1 = colour2 = Color.new(0, 0, 0, 0)
  1127.     end
  1128.     dw = rect.width
  1129.     dw *= @battler.draw_hp_rate
  1130.     dh = rect.height
  1131.     @gauge_width = target_gauge_width
  1132.     if @type == :shield
  1133.       new_shield
  1134.     else
  1135.       @sprite.bitmap.gradient_fill_rect(0, 0, dw, dh, colour1, colour2)
  1136.       @sprite.bitmap.gradient_fill_rect(dw, 0, dw, dh, colour2, colour1)
  1137.     end
  1138.     @visible_counter = 0
  1139.   end
  1140.   def new_shield
  1141.     return if @battler.shield == []
  1142.     dh = rect.height
  1143.     dx = @gauge_width
  1144.     shield = @battler.shield
  1145.     shield.each_index{|i|
  1146.     dw = @start_width * @current_sr[i]
  1147.     dw = @start_width - dx + 3 if i == shield.size - 1
  1148.     c1 = shield[i].color1 ? shield[i].color1 : Colour.text_colour(0)
  1149.     c2 = shield[i].color2 ? shield[i].color2 : Colour.text_colour(8)
  1150.     @sprite.bitmap.gradient_fill_rect(dx, 0, dw, dh, c1, c2)
  1151.     dx += dw
  1152.     }
  1153.   end
  1154.  
  1155.   def shield_update
  1156.     if @type == :shield and @battler.shield_bar_rate == []
  1157.       @sprite.bitmap.clear
  1158.     end
  1159.     return if @current_sr == @battler.shield_bar_rate and @gauge_width == @target_gauge_width
  1160.     @current_sr = @battler.shield_bar_rate
  1161.     if @type == :shield
  1162.       dx = @gauge_width
  1163.       dh = rect.height
  1164.       shield = @battler.shield
  1165.       shield.each_index{|i|
  1166.       dw = @start_width * @current_sr[i]
  1167.       dw = @start_width - dx + 3 if i == shield.size - 1
  1168.       c1 = shield[i].color1 ? shield[i].color1 : Colour.text_colour(0)
  1169.       c2 = shield[i].color2 ? shield[i].color2 : Colour.text_colour(8)
  1170.       @sprite.bitmap.gradient_fill_rect(dx, 0, dw, dh, c1, c2)
  1171.       dx += dw
  1172.       }
  1173.  
  1174.     end
  1175.     @visible_counter = 60
  1176.  
  1177.   end
  1178.  
  1179.  
  1180.   def update_position
  1181.     dx = @battler.screen_x
  1182.     dy = @battler.screen_y
  1183.     @update_position = false
  1184.     return if @last_x == dx && @last_y == dy
  1185.     @last_x = dx
  1186.     @last_y = dy
  1187.     @update_position = true
  1188.     dx -= @start_width / 2
  1189.     if @type == :percent
  1190.       dx += TEXT_X_OFFSET
  1191.       dy += TEXT_Y_OFFSET
  1192.     end
  1193.     rect.x = dx
  1194.     rect.y = dy
  1195.     dh = rect.height + 1
  1196.     dh += 2 if @type == :hp or @type == :shield
  1197.     dy = [dy, Graphics.height - dh - 120].min
  1198.     dy += 1 if @type == :hp or @type == :shield
  1199.     #
  1200.     rect.y = dy
  1201.   end
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209. end
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217. class Sprite_Battler < Sprite_Base
  1218.  
  1219.  
  1220.   def create_enemy_gauges
  1221.     return if @battler.nil?
  1222.     return if @battler.actor?
  1223.     return unless @battler.enemy.show_gauge
  1224.     @back_gauge_viewport = Enemy_HP_Gauge_Viewport.new(@battler, self, :back)
  1225.     @hp_gauge_viewport = Enemy_HP_Gauge_Viewport.new(@battler, self, :hp)
  1226.     @shield_gauge_viewport = Enemy_HP_Gauge_Viewport.new(@battler, self, :shield)
  1227.     return unless @battler && !@battler.actor? && @battler.enemy.show_gauge
  1228.     @percent_gauge_viewport = Enemy_HP_Gauge_Viewport.new(@battler, self,
  1229.     :percent)
  1230.   end
  1231.  
  1232.   def dispose_enemy_gauges
  1233.     @back_gauge_viewport.dispose unless @back_gauge_viewport.nil?
  1234.     @hp_gauge_viewport.dispose unless @hp_gauge_viewport.nil?
  1235.     @shield_gauge_viewport.dispose unless @shield_gauge_viewport.nil?
  1236.     @percent_gauge_viewport.dispose if @percent_gauge_viewport
  1237.   end
  1238.  
  1239.   def update_enemy_gauges
  1240.     @back_gauge_viewport.update unless @back_gauge_viewport.nil?
  1241.     @hp_gauge_viewport.update unless @hp_gauge_viewport.nil?
  1242.     @shield_gauge_viewport.update unless @shield_gauge_viewport.nil?
  1243.     @percent_gauge_viewport.update if @percent_gauge_viewport
  1244.   end
  1245.  
  1246.   def update_enemy_gauge_value
  1247.     @back_gauge_viewport.new_hp_updates unless @back_gauge_viewport.nil?
  1248.     @hp_gauge_viewport.new_hp_updates unless @hp_gauge_viewport.nil?
  1249.     @shield_gauge_viewport.new_hp_updates unless @shield_gauge_viewport.nil?
  1250.     @percent_gauge_viewport.new_hp_updates if @percent_gauge_viewport
  1251.   end
  1252.  
  1253. end
  1254.  
  1255. end
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261. class Sprite_Battler
  1262.   alias ex_initialize initialize
  1263.   def initialize(viewport, battler = nil)
  1264.     ex_initialize(viewport, battler)
  1265.   end
  1266.   alias ex_update update
  1267.   def update
  1268.     ex_update
  1269.     return if self.class == Sprite_Battler_Ex
  1270.     return if @battler == nil
  1271.     return if @battler.ex_sprite == {}
  1272.     @battler.ex_sprite.each_value  {|sprite| sprite.update}
  1273.   end
  1274.   alias s_start_effect start_effect
  1275.   def start_effect(effect_type)
  1276.     s_start_effect(effect_type)
  1277.     return if self.class == Sprite_Battler_Ex
  1278.     return if @battler == nil
  1279.     @battler.ex_sprite.each_value  {|sprite| sprite.start_effect(effect_type) } unless @battler.ex_sprite == []
  1280.   end
  1281.   alias s_dispose dispose
  1282.   def dispose
  1283.     s_dispose
  1284.     return if self.class == Sprite_Battler_Ex
  1285.     return if @battler == nil
  1286.     @battler.ex_sprite.each_value  {|sprite| sprite.dispose }  unless @battler.ex_sprite == []
  1287.  
  1288.   end
  1289. end
  1290.  
  1291.  
  1292. class Sprite_Battler_Ex < Sprite_Battler
  1293.   def initialize(viewport,sprite,battler)
  1294.     super(viewport)
  1295.     @battler = battler
  1296.     @sprite = sprite
  1297.     @icon = @sprite.icon
  1298.     @opacity = @sprite.opacity
  1299.     @dx = @sprite.dx
  1300.     @dy = @sprite.dy
  1301.     @dz = @sprite.dz
  1302.     @begin = @sprite.begin
  1303.     @exist = @sprite.exist
  1304.     @end = @sprite.end
  1305.     @visible = false
  1306.     @live = true
  1307.     @path = "Graphics/Battlers/"
  1308.     appear
  1309.   end
  1310.   def appear
  1311.     if @sprite.begin != nil
  1312.       start_animation(@sprite.begin[0], @sprite.begin[1])
  1313.     else
  1314.       start_effect(:appear)
  1315.     end
  1316.   end
  1317.   def dispose
  1318.     bitmap.dispose if bitmap
  1319.     super
  1320.   end
  1321.   def update
  1322.     super
  1323.     update_exist
  1324.     update_bitmap
  1325.     update_origin
  1326.     update_position
  1327.     update_effect
  1328.     update_kill
  1329.   end
  1330.   def update_exist
  1331.     if @sprite.exist != nil
  1332.       start_animation(@sprite.exist[0], @sprite.exist[1]) unless animation?
  1333.     end
  1334.   end
  1335.   def update_kill
  1336.     return if @live == true
  1337.     @live -= 1
  1338.     dispose if @live == 0
  1339.   end
  1340.   def kill
  1341.     @life = 60
  1342.     if @end != nil
  1343.       start_animation(@end[0], @end[1])
  1344.     end
  1345.     start_effect(:disappear)
  1346.   end
  1347.   def update_bitmap
  1348.     new_bitmap = Cache.load_bitmap(@path,@icon[0],@icon[1])
  1349.     if bitmap != new_bitmap
  1350.       self.bitmap = new_bitmap
  1351.       init_visibility
  1352.     end
  1353.   end
  1354.   def init_visibility
  1355.     @battler_visible = @battler.alive?
  1356.     self.opacity = 0 unless @battler_visible
  1357.   end
  1358.   def update_position
  1359.     self.x = @battler.screen_x + @sprite.dx
  1360.     self.y = @battler.screen_y + @sprite.dy
  1361.     self.z = @battler.screen_z + @sprite.dz
  1362.   end
  1363.   def revert_to_normal
  1364.     self.blend_type = 0
  1365.     self.color.set(0, 0, 0, 0)
  1366.     self.opacity = @sprite.opacity
  1367.     self.ox = bitmap.width / 2 if bitmap
  1368.     self.src_rect.y = 0
  1369.   end
  1370.  
  1371.  
  1372. end
  1373.  
  1374. class Scene_Battle
  1375.   alias shield_refresh_status refresh_status
  1376.   def refresh_status
  1377.     shield_refresh_status
  1378.     $game_party.members.each{|a|
  1379.     a.refresh
  1380.     }
  1381.     $game_troop.members.each{|e|
  1382.     e.refresh
  1383.     }
  1384.     update_for_wait
  1385.   end
  1386.   alias shield_use_item use_item
  1387.   def use_item
  1388.     shield_use_item
  1389.     refresh_status
  1390.   end
  1391. end
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
877
在线时间
195 小时
注册时间
2019-4-11
帖子
56
3
 楼主| 发表于 2021-7-5 07:44:39 | 只看该作者
本帖最后由 sxjkjly8010 于 2021-7-5 07:47 编辑
一般通过鸦天狗 发表于 2021-7-3 01:50
加了一个刷新环节,还没测试


其实最后已经发现是lnx11本身有一个东西是刷新植槽了,已经解决了。不过还是把星屑给你了,毕竟也是您写的脚本。不得不说您写的护盾系统真的太方便了

点评

如果发现新的bug请告诉我  发表于 2021-7-7 15:01
当然获得完整效果还是得需要yanfly https://yanflychannel.wordpress.com/  发表于 2021-7-7 14:59
之前那个结算顺序有点问题,我改了一下,新的代码发在二楼了 现在使用护盾的气泡文字和状态图标会立即显示,并且不会再显示“失败”。  发表于 2021-7-7 14:58
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 12:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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