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

Project1

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

[有事请教] 关于护盾脚本的popup显示

[复制链接]

Lv2.观梦者

梦石
0
星屑
332
在线时间
85 小时
注册时间
2023-7-26
帖子
15
跳转到指定楼层
1
发表于 2024-10-8 23:46:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
233星屑
这个护盾脚本原本是需要YEA的战斗系统显示popup
但我这里想要让YES的popup也能显示
我自己试着改一下
结果发现只有
    REFRESH  = "护盾刷新"
    NEW  = "护盾"
    FADE = "护盾波动"
    DISAPPEAR = "护盾消失"
这几条的BattlePopup会正常显示
求大佬改成能适配的


RUBY 代码复制
  1. $imported = {} if $imported.nil?
  2. $imported["YES-BattlePopup"] = true
  3.  
  4. #==============================================================================
  5. # ■ BattleLuna
  6. #==============================================================================
  7.  
  8. module BattleLuna
  9.   module Addon
  10.  
  11.     BATTLE_POPUP = {
  12.       # 基础设定
  13.       :basic_setting  =>  {
  14.         :enable      =>  true,       # 伤害弹出的开关.
  15.         :state_popup =>  true,       # 状态弹出的开关.
  16.         :buff_popup  =>  true,       # 能力变化的开关.
  17.         :delay       =>  6,          # 伤害弹出的间隔时间.
  18.         :no_delay    =>  [:critical, :drained, :weakpoint, :resistant, :absorbed],
  19.       }, #无间隔
  20.  
  21.       # 文本设定.
  22.       :word_setting   =>  {
  23.         :default    => "%s ",        # 默认.
  24.         :hp_dmg     => "%s ",      # HP 伤害.
  25.         :hp_heal    => "%s ",      # HP 回复.
  26.         :mp_dmg     => "%s",    # MP 伤害.
  27.         :mp_heal    => "%s",    # MP 回复.
  28.         :tp_dmg     => "%s",    # TP 伤害.
  29.         :tp_heal    => "%s",    # TP 伤害.
  30.         :drained    => "%s",      # 吸收 HP/MP.
  31.         :critical   => "",     # 暴击.
  32.         :missed     => "失误",    # 未命中.
  33.         :evaded     => "MISS",     # 闪避.
  34.         :nulled     => "无伤害",      # 无效攻击.
  35.         :failed     => "无效",      # 攻击失败.
  36.         :add_state  => "%s",       # 附加状态.
  37.         :rem_state  => "%s",       # 移除状态.
  38.         :dur_state  => "%s",        # 状态持续.
  39.         :weakpoint  => "",      # 属性弱点.
  40.         :resistant  => "",      # 属性抵抗.
  41.         :immune     => "",      # 属性无效.
  42.         :absorbed   => "",      # 吸收属性伤害.
  43.         :add_buff   => "%s",        # 强化能力.
  44.         :add_debuff => "%s",        # 弱化能力.
  45.  
  46.       },
  47.  
  48.       # 设定文字效果.
  49.       :style_setting  =>  {
  50.         # 类型      => [红,     绿,   蓝, 大小, 加粗,   斜体,              字体],
  51.         :default    => [255,   255,  255,   30, false,  false, Font.default_name],# 默认.
  52.         :hp_dmg     => [255,   255,  255,   30, false,  false, Font.default_name],# HP 伤害.
  53.         :hp_heal    => [50,   255,  50,   30, false,  false, Font.default_name],  # HP 回复.
  54.         :mp_dmg     => [175,   125,  250,   30, false,  false, Font.default_name],# MP 伤害.
  55.         :mp_heal    => [110,   110,  255,   30, true,  false, Font.default_name], # MP 回复.
  56.         :tp_dmg     => [255,   255,  255,   30, false,  false, Font.default_name],# TP 伤害.
  57.         :tp_heal    => [255,   255,  255,   30, false,  false, Font.default_name],# TP 回复.
  58.         :drained    => [255,   255,  255,   30, false,  false, Font.default_name],# 吸收 HP/MP.
  59.         :critical   => [255,   0,  50,   30, false,  false, Font.default_name],   # 暴击.
  60.         :missed     => [125,   125,  125,   22, false,  false, Font.default_name],# 未命中.
  61.         :evaded     => [255,   255,  255,   25, false,  false, Font.default_name],# 闪避.
  62.         :nulled     => [125,   125,  255,   22, false,  false, Font.default_name],# 无效攻击.
  63.         :failed     => [255,   255,  255,   25, false,  false, Font.default_name],# 攻击失败.
  64.         :add_state  => [255,   255,  255,   25, false,  false, Font.default_name],# 附加状态.
  65.         :rem_state  => [255,   255,  255,   25, false,  false, Font.default_name],# 移除状态.
  66.         :dur_state  => [255,   255,  255,   25, false,  false, Font.default_name],# 状态持续.
  67.         :weakpoint  => [255,   255,  255,   25, false,  false, Font.default_name],# 属性弱点.
  68.         :resistant  => [255,   255,  255,   25, false,  false, Font.default_name],# 属性抵抗.
  69.         :immune     => [255,   255,  255,   25, false,  false, Font.default_name],# 属性无效.
  70.         :absorbed   => [255,   255,  255,   25, false,  false, Font.default_name],# 吸收属性伤害.
  71.         :add_debuff => [255,   255,  255,   25, false,  false, Font.default_name],# 强化能力.
  72.         :lvup       => [255,   255,  255,   25, false, false, Font.default_name], # 弱化能力.
  73.       },
  74.  
  75.       # 设定弹出效果.
  76.       :effect_setting =>  {
  77.         # 类型      => [效果顺序],
  78.         :default    => [:up, :wait],
  79.         :hp_dmg     => [:up, :wait],
  80.         :hp_heal    => [:jump_1, :wait],
  81.         :mp_dmg     => [:jump_1, :wait],
  82.         :mp_heal    => [:jump_1, :wait],
  83.         :tp_dmg     => [:jump_1, :wait],
  84.         :tp_heal    => [:jump_1, :wait],
  85.         :drained    => [:affect, :up    , :wait],
  86.         :critical   => [:up    , :wait],
  87.         :missed     => [:up    , :wait],
  88.         :evaded     => [:up    , :wait],
  89.         :nulled     => [:up    , :wait],
  90.         :failed     => [:up    , :wait],
  91.         :add_state  => [:affect, :up    , :wait],
  92.         :rem_state  => [:affect, :up    , :wait],
  93.         :dur_state  => [:affect, :up    , :wait],
  94.         :weakpoint  => [:affect, :up    , :wait],
  95.         :resistant  => [:affect, :up    , :wait],
  96.         :immune     => [:up    , :wait],
  97.         :absorbed   => [:affect, :up    , :wait],
  98.         :add_buff   => [:affect, :up    , :wait],
  99.         :add_debuff => [:affect, :up    , :wait],
  100.         :lvup       => [:up, :wait],
  101.       },
  102.  
  103.       :effect_setup   =>  {
  104.     #:效果   => [缩放X, 缩放Y, 起始X, 起始Y, 移动X, 移动Y, 重力, 不透明度, 时间, 随机],
  105.     :up      => [1.0  , 1.0  , 0.0   , 0.0   , 0.0  , -0.5 , 0.0  , 220    , 28 , false ],
  106.     :jump_1  => [1.0  , 1.0  , 0.0   , 0.0   , 0.0  , -0.5 , 0.0  , 255    , 33 , false ],
  107.     :jump_2  => [1.0  , 1.0  , 0.0   , 0.0   , 0.0  , -0.5 , 0.0  , 255    , 33 , false ],
  108.     :wait    => [1.0  , 1.0  , 0.0   , 0.0   , 0.0  , 0.0  , 0.0  , 0      , 20 , false ],
  109.     :affect  => [1.0  , 1.0  , 0.0   , -32.0 , 0.0  , 0.0  , 0.0  , 255    , 1  , false ],
  110.     :affect2  => [1.0  , 1.0  , 0.0   , -32.0 , 0.0  , 0.0  , 0.0  , 180    , 1  , false ],
  111.       },
  112.  
  113.     } # End BATTLE_POPUP.
  114.  
  115.   end # Addon
  116. end # BattleLuna
  117.  
  118. #==============================================================================
  119. # ■ Game_BattlerBase
  120. #==============================================================================
  121.  
  122. class Game_BattlerBase
  123.  
  124.   #--------------------------------------------------------------------------
  125.   # * Public Instance Variables
  126.   #--------------------------------------------------------------------------
  127.   attr_accessor :popups
  128.  
  129.   #--------------------------------------------------------------------------
  130.   # new method: create_popup
  131.   #--------------------------------------------------------------------------
  132.   def create_popup(data, rule = :default)
  133.     return unless SceneManager.scene_is?(Scene_Battle)
  134.     return unless BattleLuna::Addon::BATTLE_POPUP[:basic_setting][:enable]
  135.     @popups ||= []
  136.     @popups.push([data, rule])
  137.   end
  138.  
  139.  
  140.   #--------------------------------------------------------------------------
  141.   # new method: make_damage_popups
  142.   #--------------------------------------------------------------------------
  143.   def make_damage_popups(user)
  144.     if @result.hp_drain != 0
  145.       rule = :drained
  146.       user.create_popup(["", nil], rule)
  147.       rule = :hp_dmg  if @result.hp_drain < 0
  148.       rule = :hp_heal if @result.hp_drain > 0
  149.       value = @result.hp_drain.abs
  150.       user.create_popup(["#{value}", nil], rule)
  151.     end
  152.     if @result.mp_drain != 0
  153.       rule = :drained
  154.       user.create_popup(["", nil], rule)
  155.       rule = :mp_dmg  if @result.mp_drain < 0
  156.       rule = :mp_heal if @result.mp_drain > 0
  157.       value = @result.mp_drain.abs
  158.       user.create_popup(["#{value}", nil], rule)
  159.     end
  160.     #---
  161.     rule = :critical
  162.     create_popup(["", nil], rule) if @result.critical
  163.     if @result.hp_damage != 0
  164.       rule = :hp_dmg  if @result.hp_damage > 0
  165.       rule = :hp_heal if @result.hp_damage < 0
  166.       value = @result.hp_damage.abs
  167.       create_popup(["#{value}", nil], rule)
  168.     end
  169.     if @result.mp_damage != 0
  170.       rule = :mp_dmg  if @result.mp_damage > 0
  171.       rule = :mp_heal if @result.mp_damage < 0
  172.       value = @result.mp_damage.abs
  173.       create_popup(["#{value}", nil], rule)
  174.     end
  175.     if @result.tp_damage != 0
  176.       rule = :tp_dmg  if @result.tp_damage > 0
  177.       rule = :tp_heal if @result.tp_damage < 0
  178.       value = @result.tp_damage.abs
  179.       create_popup(["#{value}", nil], rule)
  180.     end
  181.   end
  182.  
  183. alias battle_luna_dp_erase_state erase_state unless $imported["YEA-BattleEngine"]
  184.   def erase_state(state_id)
  185.     make_state_popup(state_id, :rem_state) if @states.include?(state_id)
  186.     if $imported["YEA-BattleEngine"]
  187.       game_battlerbase_erase_state_abe(state_id)
  188.     else
  189.       battle_luna_dp_erase_state(state_id)
  190.     end
  191.   end
  192.  
  193.   #--------------------------------------------------------------------------
  194.   # new method: make_during_state_popup
  195.   #--------------------------------------------------------------------------
  196.   def make_during_state_popup
  197.     state_id = most_important_state_id
  198.     return if state_id == 0
  199.     make_state_popup(state_id, :dur_state)
  200.   end
  201.  
  202.   #--------------------------------------------------------------------------
  203.   # new method: most_important_state_id
  204.   #--------------------------------------------------------------------------
  205.   def most_important_state_id
  206.     states.each {|state| return state.id unless state.message3.empty? }
  207.     return 0
  208.   end
  209.  
  210.   #--------------------------------------------------------------------------
  211.   # new method: make_state_popup
  212.   #--------------------------------------------------------------------------
  213.   def make_state_popup(state_id, type)
  214.     return unless BattleLuna::Addon::BATTLE_POPUP[:basic_setting][:state_popup]
  215.     state = $data_states[state_id]
  216.     return if state.icon_index == 0
  217.     create_popup(["#{state.name}", state.icon_index], type)
  218.   end
  219.  
  220.   #--------------------------------------------------------------------------
  221.   # new method: make_miss_popups
  222.   #--------------------------------------------------------------------------
  223.   def make_miss_popups(user, item)
  224.     return if dead?
  225.     if @result.missed
  226.       rule = :missed
  227.       create_popup(["", nil], rule)
  228.     end
  229.     if @result.evaded
  230.       rule = :evaded
  231.       create_popup(["", nil], rule)
  232.     end
  233.     if @result.hit? && !@result.success
  234.       rule = :failed
  235.       create_popup(["", nil], rule)
  236.     end
  237.     if @result.hit? && item.damage.to_hp?
  238.       if @result.hp_damage == 0 && @result.mp_damage == 0
  239.         rule = :nulled
  240.         create_popup(["", nil], rule)
  241.       end
  242.     end
  243.   end
  244.  
  245.   #--------------------------------------------------------------------------
  246.   # new method: make_rate_popup
  247.   #--------------------------------------------------------------------------
  248.   def make_rate_popup(rate)
  249.     return if rate == 1.0
  250.     if rate > 1.0
  251.       rule = :weakpoint
  252.     elsif rate == 0.0
  253.       rule = :immune
  254.     elsif rate < 0.0
  255.       rule = :absorbed
  256.     else
  257.       rule = :resistant
  258.     end
  259.     create_popup(["", nil], rule)
  260.   end
  261.  
  262.   #--------------------------------------------------------------------------
  263.   # new method: make_buff_popup
  264.   #--------------------------------------------------------------------------
  265.   def make_buff_popup(param_id, positive = true)
  266.     return unless BattleLuna::Addon::BATTLE_POPUP[:basic_setting][:buff_popup]
  267.     return unless SceneManager.scene_is?(Scene_Battle)
  268.     return unless alive?
  269.     name = Vocab::param(param_id)
  270.     if positive
  271.       rule = :add_buff
  272.       buff_level = 1
  273.     else
  274.       rule = :add_debuff
  275.       buff_level = -1
  276.     end
  277.     icon = buff_icon_index(buff_level, param_id)
  278.     create_popup(["#{name}", icon], rule)
  279.   end
  280.  
  281. end # Game_BattlerBase
  282.  
  283. #==============================================================================
  284. # ■ Game_Battler
  285. #==============================================================================
  286.  
  287. class Game_Battler < Game_BattlerBase
  288.  
  289.   #--------------------------------------------------------------------------
  290.   # alias method: on_battle_end
  291.   #--------------------------------------------------------------------------
  292.   alias battle_luna_dp_on_battle_end on_battle_end
  293.   def on_battle_end
  294.     battle_luna_dp_on_battle_end
  295.     @popups ||= []
  296.     @popups.clear
  297.   end
  298.  
  299.   #--------------------------------------------------------------------------
  300.   # alias method: item_apply
  301.   #--------------------------------------------------------------------------
  302.   alias battle_luna_dp_item_apply item_apply unless $imported["YEA-BattleEngine"]
  303.   def item_apply(user, item)
  304.     if $imported["YEA-BattleEngine"]
  305.       game_battler_item_apply_abe(user, item)
  306.     else
  307.       battle_luna_dp_item_apply(user, item)
  308.     end  
  309.     @result.restore_damage
  310.     make_miss_popups(user, item)
  311.     make_damage_popups(user)
  312.   end
  313.  
  314.   #--------------------------------------------------------------------------
  315.   # alias method: make_damage_value
  316.   #--------------------------------------------------------------------------
  317.   alias battle_luna_dp_make_damage_value make_damage_value unless $imported["YEA-BattleEngine"]
  318.   def make_damage_value(user, item)
  319.     if $imported["YEA-BattleEngine"]
  320.       game_battler_make_damage_value_abe(user, item)
  321.     else
  322.       battle_luna_dp_make_damage_value(user, item)
  323.     end  
  324.     rate = item_element_rate(user, item)
  325.     make_rate_popup(rate)
  326.   end
  327.  
  328.   #--------------------------------------------------------------------------
  329.   # alias method: execute_damage
  330.   #--------------------------------------------------------------------------
  331.   alias battle_luna_dp_execute_damage execute_damage unless $imported["YEA-BattleEngine"]
  332.   def execute_damage(user)
  333.     if $imported["YEA-BattleEngine"]
  334.       game_battler_execute_damage_abe(user)
  335.     else
  336.       battle_luna_dp_execute_damage(user)
  337.     end  
  338.     #make_damage_popups(user)
  339.   end
  340.  
  341.   #--------------------------------------------------------------------------
  342.   # alias method: item_effect_recover_hp
  343.   #--------------------------------------------------------------------------
  344.   alias battle_luna_dp_item_effect_recover_hp item_effect_recover_hp unless $imported["YEA-BattleEngine"]
  345.   def item_effect_recover_hp(user, item, effect)
  346.     if $imported["YEA-BattleEngine"]
  347.       game_battler_item_effect_recover_hp_abe(user, item, effect)
  348.     else
  349.       battle_luna_dp_item_effect_recover_hp(user, item, effect)
  350.     end  
  351.     #make_damage_popups(user)
  352.   end
  353.  
  354.   #--------------------------------------------------------------------------
  355.   # alias method: item_effect_recover_mp
  356.   #--------------------------------------------------------------------------
  357.   alias battle_luna_item_effect_recover_mp item_effect_recover_mp unless $imported["YEA-BattleEngine"]
  358.   def item_effect_recover_mp(user, item, effect)
  359.     if $imported["YEA-BattleEngine"]
  360.       game_battler_item_effect_recover_mp_abe(user, item, effect)
  361.     else
  362.       battle_luna_item_effect_recover_mp(user, item, effect)
  363.     end
  364.     #make_damage_popups(user)
  365.   end
  366.  
  367.   #--------------------------------------------------------------------------
  368.   # alias method: item_effect_gain_tp
  369.   #--------------------------------------------------------------------------
  370.   alias battle_luna_item_effect_gain_tp item_effect_gain_tp unless $imported["YEA-BattleEngine"]
  371.   def item_effect_gain_tp(user, item, effect)
  372.     if $imported["YEA-BattleEngine"]
  373.       game_battler_item_effect_gain_tp_abe(user, item, effect)
  374.     else
  375.       battle_luna_item_effect_gain_tp(user, item, effect)
  376.     end
  377.     #make_damage_popups(user)
  378.   end
  379.  
  380.   #--------------------------------------------------------------------------
  381.   # alias method: add_new_state
  382.   #--------------------------------------------------------------------------
  383.   alias battle_luna_dp_add_new_state add_new_state unless $imported["YEA-BattleEngine"]
  384.   def add_new_state(state_id)
  385.     if $imported["YEA-BattleEngine"]
  386.       game_battler_add_new_state_abe(state_id)
  387.     else
  388.       battle_luna_dp_add_new_state(state_id)
  389.     end
  390.     make_state_popup(state_id, :add_state) if @states.include?(state_id)
  391.   end
  392.  
  393.   #--------------------------------------------------------------------------
  394.   # alias method: add_buff
  395.   #--------------------------------------------------------------------------
  396.   alias battle_luna_dp_add_buff add_buff unless $imported["YEA-BattleEngine"]
  397.   def add_buff(param_id, turns)
  398.     make_buff_popup(param_id, true)
  399.     if $imported["YEA-BattleEngine"]
  400.       game_battler_add_buff_abe(param_id, turns)
  401.     else
  402.       battle_luna_dp_add_buff(param_id, turns)
  403.     end
  404.   end
  405.  
  406.   #--------------------------------------------------------------------------
  407.   # alias method: add_debuff
  408.   #--------------------------------------------------------------------------
  409.   alias battle_luna_dp_add_debuff add_debuff unless $imported["YEA-BattleEngine"]
  410.   def add_debuff(param_id, turns)
  411.     make_buff_popup(param_id, false)
  412.     if $imported["YEA-BattleEngine"]
  413.       game_battler_add_debuff_abe(param_id, turns)
  414.     else
  415.       battle_luna_dp_add_debuff(param_id, turns)
  416.     end
  417.   end
  418.  
  419.   #--------------------------------------------------------------------------
  420.   # alias method: regenerate_all
  421.   #--------------------------------------------------------------------------
  422.   alias battle_luna_dp_regenerate_all regenerate_all unless $imported["YEA-BattleEngine"]
  423.   def regenerate_all
  424.     if $imported["YEA-BattleEngine"]
  425.       game_battler_regenerate_all_abe
  426.     else
  427.       battle_luna_dp_regenerate_all
  428.     end
  429.     return unless alive?
  430.     make_damage_popups(self)
  431.   end
  432.  
  433. end # Game_Battler
  434.  
  435. #==============================================================================
  436. # ■ Sprite_Battler
  437. #==============================================================================
  438.  
  439. class Game_Actor < Game_Battler
  440.  
  441.   #--------------------------------------------------------------------------
  442.   # new method: screen_x
  443.   #--------------------------------------------------------------------------
  444.   unless Game_Actor.instance_methods.include?(:screen_x)
  445.   def screen_x
  446.     0
  447.   end
  448.   end
  449.  
  450.   #--------------------------------------------------------------------------
  451.   # new method: screen_y
  452.   #--------------------------------------------------------------------------
  453.   unless Game_Actor.instance_methods.include?(:screen_y)
  454.   def screen_y
  455.     0
  456.   end
  457.   end
  458.  
  459.   #--------------------------------------------------------------------------
  460.   # new method: screen_z
  461.   #--------------------------------------------------------------------------
  462.   unless Game_Actor.instance_methods.include?(:screen_z)
  463.   def screen_y
  464.     0
  465.   end
  466.   end
  467.  
  468. end # Game_Actor
  469.  
  470. #==============================================================================
  471. # ■ Sprite_Battler
  472. #==============================================================================
  473.  
  474. class Sprite_Battler < Sprite_Base
  475.  
  476.   #--------------------------------------------------------------------------
  477.   # alias method: initialize
  478.   #--------------------------------------------------------------------------
  479.   alias battle_luna_dp_initialize initialize
  480.   def initialize(viewport, battler = nil)
  481.     battle_luna_dp_initialize(viewport, battler)
  482.     @popups = []
  483.     @popup_delay = 0
  484.   end
  485.  
  486.   #--------------------------------------------------------------------------
  487.   # alias method: setup_new_effect
  488.   #--------------------------------------------------------------------------
  489.   alias battle_luna_dp_setup_new_effect setup_new_effect
  490.   def setup_new_effect
  491.     battle_luna_dp_setup_new_effect
  492.     setup_popups
  493.   end
  494.  
  495.   #--------------------------------------------------------------------------
  496.   # new method: setup_popups
  497.   #--------------------------------------------------------------------------
  498.   def setup_popups
  499.     setting = BattleLuna::Addon::BATTLE_POPUP
  500.     return unless @battler.use_sprite?
  501.     @battler.popups ||= []
  502.     @popup_delay -= 1
  503.     return if @popup_delay > 0
  504.     array = @battler.popups.shift
  505.     return if array.nil?
  506.     create_new_popup(array[0], array[1])
  507.     return if @battler.popups.size == 0
  508.     return if setting[:basic_setting][:no_delay].include?(array[1])
  509.     @popup_delay = setting[:basic_setting][:delay]
  510.   end
  511.  
  512.   #--------------------------------------------------------------------------
  513.   # new method: create_new_popup
  514.   #--------------------------------------------------------------------------
  515.   def create_new_popup(data, rule)
  516.     return unless @battler
  517.     return unless SceneManager.scene.is_a?(Scene_Battle)
  518.     viewport = self.viewport
  519.     popup = Sprite_PopupLuna.new(viewport, @battler, data, rule)
  520.     @popups.push(popup)
  521.   end
  522.  
  523.   #--------------------------------------------------------------------------
  524.   # alias method: update
  525.   #--------------------------------------------------------------------------
  526.   alias battle_luna_dp_update update
  527.   def update
  528.     battle_luna_dp_update
  529.     update_popups
  530.   end
  531.  
  532.   #--------------------------------------------------------------------------
  533.   # new method: update_popups
  534.   #--------------------------------------------------------------------------
  535.   def update_popups
  536.     @popups.each { |popup| popup.update }
  537.     @popups.each_with_index { |sprite, index|
  538.       next unless sprite.disposed?
  539.       @popups[index] = nil
  540.     }
  541.     @popups.compact!
  542.   end
  543.  
  544.   #--------------------------------------------------------------------------
  545.   # alias method: dispose
  546.   #--------------------------------------------------------------------------
  547.   alias battle_luna_dp_dispose dispose
  548.   def dispose
  549.     @popups.each { |popup| popup.dispose }
  550.     @popups.clear
  551.     battle_luna_dp_dispose
  552.   end
  553.  
  554. end # Sprite_Battler
  555.  
  556. #==============================================================================
  557. # ■ Sprite_PopupLuna
  558. #==============================================================================
  559.  
  560. class Sprite_PopupLuna < Sprite
  561.  
  562.   #--------------------------------------------------------------------------
  563.   # initialize
  564.   #--------------------------------------------------------------------------
  565.   def initialize(viewport, battler, data, rule)
  566.     super(viewport)
  567.     @data = data
  568.     @rule = rule
  569.     #---
  570.     @style = rule
  571.     @style = :default unless setting[:style_setting].has_key?(@style)
  572.     @style = setting[:style_setting][@style]
  573.     #---
  574.     @effects = rule
  575.     @effects = :default unless setting[:effect_setting].has_key?(@effects)
  576.     @effects = setting[:effect_setting][@effects].dup
  577.     #---
  578.     @current_effect = nil
  579.     @duration = 0
  580.     @battler = battler
  581.     #---
  582.     start_popup
  583.     start_effect
  584.     update
  585.   end
  586.  
  587.   #--------------------------------------------------------------------------
  588.   # setting
  589.   #--------------------------------------------------------------------------
  590.   def setting
  591.     BattleLuna::Addon::BATTLE_POPUP
  592.   end
  593.  
  594.   #--------------------------------------------------------------------------
  595.   # start_popup
  596.   #--------------------------------------------------------------------------
  597.   def start_popup
  598.     self.bitmap = create_bitmap
  599.     self.x = @battler.screen_x
  600.     self.y = @battler.screen_y
  601.     self.ox = self.bitmap.width / 2
  602.     self.oy = self.bitmap.height
  603.     self.z = @battler.screen_z + 350
  604.   end
  605.  
  606.   #--------------------------------------------------------------------------
  607.   # create_bitmap
  608.   #--------------------------------------------------------------------------
  609.   def create_bitmap
  610.     bw = Graphics.width
  611.     bw = bw + 48 if @data[1]
  612.     bh = @style[3] * 2
  613.     bitmap = Bitmap.new(bw, bh)
  614.     #---
  615.     bitmap.font.color.set(@style[0], @style[1], @style[2])
  616.     bitmap.font.size   = @style[3]
  617.     bitmap.font.bold   = @style[4]
  618.     bitmap.font.italic = @style[5]
  619.     bitmap.font.name   = @style[6]
  620.     #---
  621.     dx = @data[1] ? 24 : 0; dy = 0
  622.     text = setting[:word_setting][@rule]
  623.     text = setting[:word_setting][:default] unless text
  624.     text = sprintf(text, @data[0])
  625.     bitmap.draw_text(dx, dy, bw - dx, bh, text, 1)
  626.     #---
  627.     text_width = bitmap.text_size(text).width
  628.     if @data[1]
  629.       icon_bitmap = Cache.system("Iconset")
  630.       icon_index = @data[1].to_i
  631.       rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  632.       bitmap.blt((bw-text_width)/2-32, (bh - 24)/2, icon_bitmap, rect)
  633.     end
  634.     bitmap
  635.   end
  636.  
  637.   #--------------------------------------------------------------------------
  638.   # start_effect
  639.   #--------------------------------------------------------------------------
  640.   def start_effect
  641.     @current_effect = @effects.shift
  642.     return dispose if @current_effect.nil?
  643.     effect = setting[:effect_setup][@current_effect]
  644.     @duration = effect[8]
  645.     #---
  646.     @zoom_x_rate = (effect[0] - self.zoom_x) / @duration
  647.     @zoom_y_rate = (effect[1] - self.zoom_y) / @duration
  648.     #---
  649.     @move_x = effect[4]
  650.     @move_y = effect[5] #from 5
  651.     if effect[9]
  652.       @move_x = @move_x * rand(0)
  653.       @move_x = rand(10) % 2 == 0 ? -@move_x : @move_x
  654.     end
  655.     #---
  656.     @gravity = effect[6]
  657.     #---
  658.     @opacity_rate = (effect[7] - self.opacity) / @duration.to_f
  659.     #---
  660.     self.x += effect[2]
  661.     self.y += effect[3]
  662.   end
  663.  
  664.   #--------------------------------------------------------------------------
  665.   # update
  666.   #--------------------------------------------------------------------------
  667.   def update
  668.     super
  669.     update_zoom
  670.     update_move
  671.     update_opacity
  672.     update_effect
  673.   end
  674.  
  675.   #--------------------------------------------------------------------------
  676.   # update_effect
  677.   #--------------------------------------------------------------------------
  678.   def update_effect
  679.     @duration -= 1
  680.     return if @duration > 0
  681.     start_effect
  682.   end
  683.  
  684.   #--------------------------------------------------------------------------
  685.   # update_zoom
  686.   #--------------------------------------------------------------------------
  687.   def update_zoom
  688.     self.zoom_x += @zoom_x_rate
  689.     self.zoom_y += @zoom_y_rate
  690.   end
  691.  
  692.   #--------------------------------------------------------------------------
  693.   # update_move
  694.   #--------------------------------------------------------------------------
  695.   def update_move
  696.     self.x += @move_x
  697.     self.y += @move_y
  698.     @move_y += @gravity
  699.   end
  700.  
  701.   #--------------------------------------------------------------------------
  702.   # update_opacity
  703.   #--------------------------------------------------------------------------
  704.   def update_opacity
  705.     self.opacity += @opacity_rate
  706.   end
  707.  
  708.   #--------------------------------------------------------------------------
  709.   # dispose
  710.   #--------------------------------------------------------------------------
  711.   def dispose
  712.     self.bitmap.dispose if self.bitmap
  713.     super
  714.   end
  715.  
  716. end # Sprite_PopupLuna
  717.  
  718. #==============================================================================
  719. # ■ Window_BattleHelp
  720. #==============================================================================
  721. if $imported["YEA-BattleEngine"]
  722. class Window_BattleHelp < Window_Help
  723.  
  724.   #--------------------------------------------------------------------------
  725.   # alias method: update
  726.   #--------------------------------------------------------------------------
  727.   alias battle_luna_yea_be_update update
  728.   def update
  729.     battle_luna_yea_be_update
  730.     return unless $imported["YEA-BattleEngine"]
  731.     return unless @actor_window && @enemy_window
  732.     if !self.visible and @text != ""
  733.       @text = ""
  734.       return refresh
  735.     end
  736.     update_battler_name
  737.   end
  738.  
  739. end # Window_BattleHelp
  740. end
  741.  
  742. #==============================================================================
  743. # ■ Sprite_Battler
  744. #==============================================================================
  745.  
  746. class Sprite_Battler < Sprite_Base
  747.  
  748.   #--------------------------------------------------------------------------
  749.   # alias method: create_new_popup
  750.   # Compatible with YEA - Battle Engine.
  751.   #--------------------------------------------------------------------------
  752.   if $imported["YEA-BattleEngine"] && !$imported["YES-BattlePopup"]
  753.   alias battle_luna_yea_create_new_popup create_new_popup
  754.   def create_new_popup(value, rules, flags)
  755.     battle_luna_yea_create_new_popup(value, rules, flags)
  756.     @popups.each { |popup|
  757.       popup.viewport = nil
  758.       popup.z = @battler.screen_z + 1000
  759.     }
  760.   end
  761.   end
  762.  
  763. end # Sprite_Battler
  764.  
  765. #==============================================================================
  766. # ■ Game_ActionResult
  767. #==============================================================================
  768.  
  769. class Game_ActionResult
  770.  
  771.   #--------------------------------------------------------------------------
  772.   # alias method: clear_stored_damage
  773.   #--------------------------------------------------------------------------
  774.   alias battle_luna_yea_clear_stored_damage clear_stored_damage if $imported["YEA-BattleEngine"]
  775.   def clear_stored_damage
  776.     battle_luna_yea_clear_stored_damage unless $imported["YES-BattlePopup"]
  777.   end
  778.  
  779.   #--------------------------------------------------------------------------
  780.   # alias method: store_damage
  781.   #--------------------------------------------------------------------------
  782.   alias battle_luna_yea_store_damage store_damage if $imported["YEA-BattleEngine"]
  783.   def store_damage
  784.     battle_luna_yea_store_damage unless $imported["YES-BattlePopup"]
  785.   end
  786.  
  787.   #--------------------------------------------------------------------------
  788.   # alias method: restore_damage
  789.   #--------------------------------------------------------------------------
  790.   alias battle_luna_yea_restore_damage restore_damage if $imported["YEA-BattleEngine"]
  791.   def restore_damage
  792.     battle_luna_yea_restore_damage unless $imported["YES-BattlePopup"]
  793.   end
  794.  
  795. end # Game_ActionResult


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

Lv2.观梦者

梦石
0
星屑
332
在线时间
85 小时
注册时间
2023-7-26
帖子
15
2
 楼主| 发表于 2024-10-9 17:11:20 | 只看该作者
原来是脚本排序的问题
自己解决了QAQ
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-21 01:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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