Project1

标题: 这个BOSS血条脚本的问题。 [打印本页]

作者: VIPArcher    时间: 2014-4-11 23:01
标题: 这个BOSS血条脚本的问题。
本帖最后由 VIPArcher 于 2014-4-11 23:10 编辑

这个脚本里的
  1. <Boss HP Hide Number>
复制代码
作用是什么?
[code]<Level = X>[code]这句备注怎么用?我在敌人备注里加了<Level = 30>结果没显示等级?。。。谁能翻译下注释啊?

Battle_Boss_Meter.png (10.66 KB, 下载次数: 40)

Battle_Boss_Meter.png

Battle_Boss_Meter_Layout.png (4.9 KB, 下载次数: 49)

Battle_Boss_Meter_Layout.png

Battle_Boss_Number.png (3.1 KB, 下载次数: 42)

Battle_Boss_Number.png

作者: VIPArcher    时间: 2014-4-11 23:01
上脚本
  1. #==============================================================================
  2. # +++ MOG - Boss HP Meter (V1.1) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # http://www.atelier-rgss.com
  6. #==============================================================================
  7. # Apresenta um medidor animado com o HP do inimigo.
  8. #
  9. #==============================================================================
  10. # UTILIZAÇÃO
  11. #==============================================================================
  12. # Coloque o seguinte comentário na caixa de notas do inimigo.
  13. #
  14. # <Boss HP Meter>
  15. #
  16. # Caso desejar ocultar o valor numérico do HP use o código abaixo.
  17. #
  18. # <Boss HP Hide Number>
  19. #
  20. #==============================================================================
  21. # Caso precisar mudar a posição do medidor no meio do jogo use o código abaixo
  22. #
  23. # boss_hp_position(X,Y)
  24. #
  25. #==============================================================================
  26. # Serão necessários as imagens.
  27. #
  28. # Battle_Boss_Meter.png
  29. # Battle_Boss_Meter_Layout.png
  30. #==============================================================================
  31. # FACES (Opcional)
  32. #==============================================================================
  33. # Nomeie o arquivo da face da seguinte maneira. (Graphics/Faces/)
  34. #
  35. # Enemy_Name + _F.png         (Slime_F.png)
  36. #
  37. #==============================================================================
  38. # Definindo o LEVEL (Opcional)
  39. #==============================================================================
  40. # Coloque o seguinte comentário na caixa de notas do inimigo.
  41. #
  42. # <Level = X>
  43. #
  44. #==============================================================================

  45. #==============================================================================
  46. # ● Histórico (Version History)
  47. #==============================================================================
  48. # v 1.1 - Opção de apresentar o HP em numeros.
  49. #       - Opção de usar a imagem da face.
  50. #       - Opção de apresentar o nível do inimigo.
  51. #==============================================================================

  52. module MOG_BOSS_HP_METER
  53.     #Posição geral do layout.
  54.     LAYOUT_POSITION = [100,35]
  55.     #Posição do medidor.
  56.     METER_POSITION = [3,2]
  57.     #Posição do nome do inimigo.
  58.     NAME_POSITION = [16,8]
  59.     #Posição da face.
  60.     FACE_POSITION = [344,2]
  61.     #Posição do level do inimigo.
  62.     LEVEL_POSITION = [-200, -200]#[150, -24]#[290, 0]
  63.     #Posição do numero  de HP
  64.     HP_NUMBER_POSITION = [248, -4]
  65.     #Definição do espaço da palavra HP e o valor de numérico.
  66.     HP_STRING_SPACE = 36
  67.     #
  68.     HP_NUMBER_WAVE_EFFECT = false
  69.     #Definição da palavra Level.
  70.     LEVEL_WORD = "Level "
  71.     #Velocidade de animação do medidor
  72.     METER_ANIMATION_SPEED = 0
  73.     #Definição do nome da fonte.
  74.     FONT_NAME = "Microsoft YaHei"
  75.    
  76.     #Definição do tamanho da fonte.
  77.     FONT_SIZE = 20
  78.     #Ativar contorno na fonte.
  79.     FONT_BOLD = false
  80.     #Fonte em itálico.
  81.     FONT_ITALIC = false
  82.     #Definição da cor da fonte.
  83.     FONT_COLOR = Color.new(255,255,255)
  84.     #Definição da prioridade da HUD.
  85.     PRIORITY_Z = 151
  86. end

  87. #==============================================================================
  88. # ■ Game System
  89. #==============================================================================
  90. class Game_System
  91.   
  92. attr_accessor :boss_hp_meter
  93.   
  94. #--------------------------------------------------------------------------
  95. # ● Initialize
  96. #--------------------------------------------------------------------------  
  97. alias mog_boss_hp_meter_initialize initialize
  98. def initialize
  99.      ix = MOG_BOSS_HP_METER::LAYOUT_POSITION[0]
  100.      iy = MOG_BOSS_HP_METER::LAYOUT_POSITION[1]
  101.      @boss_hp_meter = [ix,iy,false,"",0,1,0,nil,0,false]
  102.      mog_boss_hp_meter_initialize
  103. end
  104.   
  105. end

  106. #==============================================================================
  107. # ■ Game Enemy
  108. #==============================================================================
  109. class Game_Enemy < Game_Battler
  110.    
  111.   attr_accessor :boss_hp_meter
  112.   attr_accessor :boss_hp_number
  113.   attr_accessor :level
  114.   
  115.   #--------------------------------------------------------------------------
  116.   # ● Initialize
  117.   #--------------------------------------------------------------------------
  118.   alias mog_boss_hp_meter_initialize initialize
  119.   def initialize(index, enemy_id)
  120.       mog_boss_hp_meter_initialize(index, enemy_id)
  121.       @boss_hp_meter = enemy.note =~ /<Boss HP Meter>/ ? true : false
  122.       @boss_hp_number = enemy.note =~ /<Boss HP Hide Number>/ ? false : true
  123.       [url=home.php?mod=space&uid=22147]@level[/url] = enemy.note =~ /<Level = (\d+)>/i ? $1 : nil
  124.   end  

  125. end

  126. #==============================================================================
  127. # ■ Game Temp
  128. #==============================================================================
  129. class Game_Temp
  130.   
  131.   attr_accessor :battle_end
  132.   
  133.   #--------------------------------------------------------------------------
  134.   # ● Initialize
  135.   #--------------------------------------------------------------------------  
  136.   alias mog_boss_hp_meter_initialize initialize
  137.   def initialize
  138.       @battle_end = false
  139.       mog_boss_hp_meter_initialize
  140.   end  

  141. end

  142. #==============================================================================
  143. # ■ Game Interpreter
  144. #==============================================================================
  145. class Game_Interpreter
  146.   
  147. #--------------------------------------------------------------------------
  148. # ● Initialize
  149. #--------------------------------------------------------------------------   
  150. def boss_hp_position(x = 0,y = 0)
  151.      $game_system.boss_hp_meter[0] = x
  152.      $game_system.boss_hp_meter[1] = y
  153. end
  154.   
  155. end

  156. #==============================================================================
  157. # ■ Boss HP Meter
  158. #==============================================================================
  159. class Boss_HP_Meter
  160.   include MOG_BOSS_HP_METER
  161.   
  162.   #--------------------------------------------------------------------------
  163.   # ● Initialize
  164.   #--------------------------------------------------------------------------  
  165.   def initialize(viewport = nil)
  166.       clear_enemy_setup
  167.       @hp_vieport = viewport
  168.       check_boss_avaliable
  169.   end
  170.   
  171.   #--------------------------------------------------------------------------
  172.   # ● Clear Enemy Setup
  173.   #--------------------------------------------------------------------------   
  174.   def clear_enemy_setup
  175.       @name = ""   
  176.       @hp = 0
  177.       @hp2 = 0
  178.       @hp3 = 0
  179.       @maxhp = 0
  180.       @hp_old = 0
  181.       [url=home.php?mod=space&uid=22147]@level[/url] = nil
  182.       $game_system.boss_hp_meter[2] = false
  183.       $game_system.boss_hp_meter[3] = ""
  184.       $game_system.boss_hp_meter[4] = 0
  185.       $game_system.boss_hp_meter[5] = 1
  186.       $game_system.boss_hp_meter[7] = nil
  187.       $game_system.boss_hp_meter[8] = 0
  188.       $game_system.boss_hp_meter[9] = true
  189.   end

  190.   #--------------------------------------------------------------------------
  191.   # ● Check Boss Avaliable
  192.   #--------------------------------------------------------------------------   
  193.   def check_boss_avaliable
  194.       return if $game_troop.all_dead?
  195.       for i in $game_troop.members
  196.           if i.boss_hp_meter and !i.hidden? and i.hp > 0
  197.              create_boss_hp_meter(i)
  198.              break
  199.           end
  200.       end
  201.   end

  202.   #--------------------------------------------------------------------------
  203.   # ● Create Boss HP Meter
  204.   #--------------------------------------------------------------------------      
  205.   def create_boss_hp_meter(i)
  206.       $game_system.boss_hp_meter[2] = true
  207.       $game_system.boss_hp_meter[3] = i.name
  208.       $game_system.boss_hp_meter[4] = i.hp
  209.       $game_system.boss_hp_meter[5] = i.mhp
  210.       $game_system.boss_hp_meter[6] = i.hp
  211.       $game_system.boss_hp_meter[7] = i.level rescue nil
  212.       $game_system.boss_hp_meter[8] = 0
  213.       $game_system.boss_hp_meter[9] = i.boss_hp_number
  214.       refresh_hp_meter
  215.       create_layout
  216.       create_meter
  217.       create_name
  218.       create_face
  219.       create_level
  220.       create_hp_number
  221.   end
  222.    
  223.   #--------------------------------------------------------------------------
  224.   # ● Create Layout
  225.   #--------------------------------------------------------------------------        
  226.   def create_layout
  227.       return if @layout != nil
  228.       @layout = Sprite.new
  229.       @layout.bitmap = Cache.system("Battle_Boss_Meter_Layout")
  230.       @layout.x = $game_system.boss_hp_meter[0] -40
  231.       @layout.y = $game_system.boss_hp_meter[1] +30
  232.       @layout.viewport = @hp_vieport
  233.       @layout.z = PRIORITY_Z
  234.   end
  235.   
  236.   #--------------------------------------------------------------------------
  237.   # ● Create Meter
  238.   #--------------------------------------------------------------------------         
  239.   def create_meter
  240.       return if @meter_image != nil
  241.       hp_setup
  242.       @meter_image = Cache.system("Battle_Boss_Meter")
  243.       @meter_cw = @meter_image.width
  244.       @meter_ch = @meter_image.height / 2
  245.       [url=home.php?mod=space&uid=1330256]@meter[/url] = Sprite.new
  246.       @meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
  247.       @meter.z = @layout.z + 1
  248.       @meter.x = @layout.x + METER_POSITION[0]
  249.       @meter.y = @layout.y + METER_POSITION[1]
  250.       @meter.viewport = @hp_vieport
  251.       @hp_flow = 0
  252.       @hp_flow_max = @meter_cw * 2
  253.       update_hp_meter
  254.   end

  255.   #--------------------------------------------------------------------------
  256.   # ● Create Name
  257.   #--------------------------------------------------------------------------            
  258.   def create_name
  259.       @name_sprite = Sprite.new
  260.       @name_sprite.bitmap = Bitmap.new(200,32)
  261.       @name_sprite.z = @layout.z + 2
  262.       @name_sprite.x = @layout.x + NAME_POSITION[0]
  263.       @name_sprite.y = @layout.y + NAME_POSITION[1]
  264.       @name_sprite.bitmap.font.name = FONT_NAME
  265.       @name_sprite.bitmap.font.size = FONT_SIZE
  266.       @name_sprite.bitmap.font.bold = FONT_BOLD
  267.       @name_sprite.bitmap.font.italic = FONT_ITALIC
  268.       @name_sprite.bitmap.font.color = FONT_COLOR
  269.       @name_sprite.viewport = @hp_vieport
  270.       refresh_name
  271.   end
  272.   
  273.   #--------------------------------------------------------------------------
  274.   # ● Create Face
  275.   #--------------------------------------------------------------------------
  276.   def create_face
  277.       @face_sprite = Sprite.new
  278.       @face_sprite.x = @layout.x + FACE_POSITION[0]
  279.       @face_sprite.y = @layout.y + FACE_POSITION[1]
  280.       @face_sprite.z = @layout.z + 2
  281.       @face_sprite.viewport = @hp_vieport
  282.       refresh_face
  283.   end

  284.   #--------------------------------------------------------------------------
  285.   # ● Create Level
  286.   #--------------------------------------------------------------------------  
  287.   def create_level
  288.       @level_sprite = Sprite.new
  289.       @level_sprite.bitmap = Bitmap.new(120,32)
  290.       @level_sprite.z = @layout.z + 2
  291.       @level_sprite.x = @layout.x + LEVEL_POSITION[0]
  292.       @level_sprite.y = @layout.y + LEVEL_POSITION[1]
  293.       @level_sprite.bitmap.font.name = FONT_NAME
  294.       @level_sprite.bitmap.font.size = FONT_SIZE
  295.       @level_sprite.bitmap.font.bold = FONT_BOLD
  296.       @level_sprite.bitmap.font.italic = FONT_ITALIC
  297.       @level_sprite.bitmap.font.color = FONT_COLOR
  298.       @level_sprite.viewport = @hp_vieport
  299.       refresh_level
  300.   end
  301.   
  302.   #--------------------------------------------------------------------------
  303.   # ● Create HP Number
  304.   #--------------------------------------------------------------------------   
  305.   def create_hp_number
  306.       @hp2 = $game_system.boss_hp_meter[4]
  307.       @hp3 = @hp2
  308.       @hp_old2 = @hp2
  309.       @hp_ref = @hp_old2
  310.       @hp_refresh = false   
  311.       @hp_number_image = Cache.system("Battle_Boss_Number")
  312.       @hp_cw = @hp_number_image.width / 10
  313.       @hp_ch = @hp_number_image.height / 2
  314.       @hp_ch2 = 0
  315.       @hp_ch_range = HP_NUMBER_WAVE_EFFECT == true ? @hp_ch / 3 : 0
  316.       @hp_number_sprite = Sprite.new
  317.       @hp_number_sprite.bitmap = Bitmap.new(@hp_number_image.width, @hp_ch * 2)
  318.       @hp_number_sprite.z = @layout.z + 2
  319.       @hp_number_sprite.x = @layout.x + HP_NUMBER_POSITION[0]
  320.       @hp_number_sprite.y = @layout.y + HP_NUMBER_POSITION[1]
  321.       @hp_number_sprite.viewport = @hp_vieport
  322.       @hp_number_sprite.visible = $game_system.boss_hp_meter[9]
  323.       refresh_hp_number
  324.   end
  325.   
  326.   #--------------------------------------------------------------------------
  327.   # ● update_hp_number
  328.   #--------------------------------------------------------------------------
  329.   def update_hp_number
  330.       return if @hp_number_sprite == nil
  331.       @hp_number_sprite.visible = $game_system.boss_hp_meter[9]
  332.       if @hp_old2 < $game_system.boss_hp_meter[4]
  333.          number_refresh_speed
  334.          @hp2 += @hp_ref     
  335.          reset_hp_number  if @hp2 >= $game_system.boss_hp_meter[4]
  336.       elsif @hp_old2 > $game_system.boss_hp_meter[4]           
  337.          number_refresh_speed
  338.          @hp2 -= @hp_ref               
  339.          reset_hp_number if @hp2 <= $game_system.boss_hp_meter[4]
  340.       end  
  341.   end   
  342.   
  343.   #--------------------------------------------------------------------------
  344.   # ● Number Refresh Speed
  345.   #--------------------------------------------------------------------------
  346.   def number_refresh_speed
  347.       @hp_refresh = true  
  348.       @hp_ref = (3 * (@hp_old2 - $game_system.boss_hp_meter[4]).abs / 100) rescue nil
  349.       @hp_ref = 1 if @hp_ref == nil or @hp_ref < 1
  350.   end
  351.   
  352.   #--------------------------------------------------------------------------
  353.   # ● Refresh HP Number
  354.   #--------------------------------------------------------------------------      
  355.   def refresh_hp_number
  356.       return if @hp_number_sprite == nil
  357.       @hp_refresh = false
  358.       @hp_number_sprite.bitmap.clear
  359.       number = @hp2.abs.to_s.split(//)
  360.       @hp_ch2 = 0
  361.       for r in 0..number.size - 1
  362.           number_abs = number[r].to_i
  363.           nsrc_rect = Rect.new(@hp_cw * number_abs, 0, @hp_cw, @hp_ch)
  364.           @hp_ch2 = @hp_ch2 == @hp_ch_range ? 0 : @hp_ch_range
  365.           @hp_number_sprite.bitmap.blt(HP_STRING_SPACE + (@hp_cw *  r), @hp_ch2, @hp_number_image, nsrc_rect)        
  366.       end      
  367.       nsrc_rect = Rect.new(0, @hp_ch, @hp_number_image.width, @hp_ch)
  368.       @hp_number_sprite.bitmap.blt(0, 0, @hp_number_image, nsrc_rect)     
  369.   end
  370.   
  371.   #--------------------------------------------------------------------------
  372.   # ● Reset HP Number
  373.   #--------------------------------------------------------------------------        
  374.   def reset_hp_number
  375.       @hp_refresh = true
  376.       @hp_old2 = $game_system.boss_hp_meter[4]
  377.       @hp2 = $game_system.boss_hp_meter[4]
  378.       @hp_ref = 0
  379.       refresh_hp_number
  380.   end
  381.    
  382.   #--------------------------------------------------------------------------
  383.   # ● Refresh Level
  384.   #--------------------------------------------------------------------------   
  385.   def refresh_level
  386.       return if @level_sprite == nil
  387.       @level_sprite.bitmap.clear
  388.       @level = $game_system.boss_hp_meter[7]
  389.       return if @level == nil
  390.       level_text = LEVEL_WORD + @level.to_s
  391.       @level_sprite.bitmap.draw_text(0,0,120,32,level_text.to_s)
  392.   end
  393.   
  394.   #--------------------------------------------------------------------------
  395.   # ● Refresh Face
  396.   #--------------------------------------------------------------------------  
  397.   def refresh_face
  398.       return if @face_sprite == nil
  399.       dispose_bitmap_face
  400.       @face_sprite.bitmap = Cache.face(@name + "_f") rescue nil
  401.       @face_sprite.bitmap = Cache.face("") if @face_sprite.bitmap == nil
  402.   end
  403.   
  404.   #--------------------------------------------------------------------------
  405.   # ● Refresh Name
  406.   #--------------------------------------------------------------------------              
  407.   def refresh_name
  408.       return if @name_sprite == nil
  409.       @name = $game_system.boss_hp_meter[3]   
  410.       @name_sprite.bitmap.clear
  411.       @name_sprite.bitmap.draw_text(0,0,190,32,@name.to_s)
  412.       refresh_face
  413.       refresh_level
  414.       reset_hp_number
  415.       @hp_old = @meter_cw * @hp / @maxhp
  416.   end
  417.   
  418.   #--------------------------------------------------------------------------
  419.   # ● HP Setup
  420.   #--------------------------------------------------------------------------            
  421.   def hp_setup
  422.       @hp = $game_system.boss_hp_meter[4]
  423.       @maxhp = $game_system.boss_hp_meter[5]
  424.   end  
  425.   
  426.   #--------------------------------------------------------------------------
  427.   # ● Dispose
  428.   #--------------------------------------------------------------------------  
  429.   def dispose
  430.       dispose_layout
  431.       dispose_meter
  432.       dispose_name
  433.       dispose_face
  434.       dispose_level
  435.       dispose_hp_number
  436.       @hp_vieport.dispose
  437.   end

  438.   #--------------------------------------------------------------------------
  439.   # ● Dispose Name
  440.   #--------------------------------------------------------------------------              
  441.   def dispose_name
  442.       return if @name_sprite == nil
  443.       @name_sprite.bitmap.dispose
  444.       @name_sprite.dispose
  445.       @name_sprite = nil
  446.   end  
  447.   
  448.   #--------------------------------------------------------------------------
  449.   # ● Dispose Layout
  450.   #--------------------------------------------------------------------------   
  451.   def dispose_layout
  452.       return if @layout == nil
  453.       @layout.bitmap.dispose
  454.       @layout.dispose
  455.       @layout = nil
  456.   end
  457.   
  458.   #--------------------------------------------------------------------------
  459.   # ● Dispose Meter
  460.   #--------------------------------------------------------------------------      
  461.   def dispose_meter
  462.       return if @meter_image == nil
  463.       @meter.bitmap.dispose
  464.       @meter.dispose
  465.       @meter = nil
  466.       @meter_image.dispose
  467.       @meter_image = nil
  468.   end
  469.   
  470.   #--------------------------------------------------------------------------
  471.   # ● Dispose Face
  472.   #--------------------------------------------------------------------------  
  473.   def dispose_face
  474.       return if @face_sprite == nil
  475.       dispose_bitmap_face
  476.       @face_sprite.dispose
  477.       @face_sprite = nil
  478.   end
  479.   
  480.   #--------------------------------------------------------------------------
  481.   # ● Dispose Bitmap Face
  482.   #--------------------------------------------------------------------------   
  483.   def dispose_bitmap_face
  484.       return if @face_sprite == nil
  485.       return if @face_sprite.bitmap == nil
  486.       @face_sprite.bitmap.dispose rescue nil
  487.       @face_sprite.bitmap = nil
  488.   end  
  489.   
  490.   #--------------------------------------------------------------------------
  491.   # ● Dispose Level
  492.   #--------------------------------------------------------------------------   
  493.   def dispose_level
  494.       return if @level_sprite == nil
  495.       @level_sprite.bitmap.dispose
  496.       @level_sprite.dispose
  497.       @level_sprite = nil
  498.   end  
  499.   
  500.   #--------------------------------------------------------------------------
  501.   # ● Dispose HP Number
  502.   #--------------------------------------------------------------------------      
  503.   def dispose_hp_number
  504.       return if @hp_number_image == nil
  505.       @hp_number_sprite.bitmap.dispose
  506.       @hp_number_sprite.dispose
  507.       @hp_number_image.dispose
  508.       @hp_number_image = nil
  509.   end   
  510.   
  511.   #--------------------------------------------------------------------------
  512.   # ● Update
  513.   #--------------------------------------------------------------------------  
  514.   def update
  515.       refresh_hp_meter
  516.       refresh_hp_number if @hp_refresh
  517.       update_hp_meter
  518.       update_hp_number
  519.       update_fade_end
  520.   end
  521.   
  522.   #--------------------------------------------------------------------------
  523.   # ● Update Fade End
  524.   #--------------------------------------------------------------------------   
  525.   def update_fade_end
  526.       return if !$game_temp.battle_end
  527.       return if @meter_image == nil
  528.       @layout.opacity -= 5
  529.       @meter.opacity -= 5
  530.       @name_sprite.opacity -= 5
  531.       @face_sprite.opacity -= 5
  532.       @level_sprite.opacity -= 5
  533.       @hp_number_sprite.opacity -= 5
  534.   end
  535.   
  536.   #--------------------------------------------------------------------------
  537.   # ● Refresh HP Meter
  538.   #--------------------------------------------------------------------------         
  539.   def refresh_hp_meter
  540.       return if !$game_system.boss_hp_meter[2]
  541.       $game_system.boss_hp_meter[2] = false
  542.       hp_setup
  543.       refresh_name if @name != $game_system.boss_hp_meter[3]
  544.   end
  545.   
  546.   #--------------------------------------------------------------------------
  547.   # ● Update HP Meter
  548.   #--------------------------------------------------------------------------            
  549.   def update_hp_meter
  550.       return if @meter_image == nil
  551.       @meter.bitmap.clear
  552.       hp_width = @meter_cw * @hp / @maxhp      
  553.       execute_damage_flow(hp_width)      
  554.       hp_src_rect = Rect.new(@hp_flow, 0,hp_width, @meter_ch)
  555.       @meter.bitmap.blt(0,0, @meter_image, hp_src_rect)  
  556.       @hp_flow += METER_ANIMATION_SPEED
  557.       @hp_flow = 0 if @hp_flow >= @hp_flow_max
  558.   end  
  559.    
  560.   #--------------------------------------------------------------------------
  561.   # ● Execute Damage Flow
  562.   #--------------------------------------------------------------------------
  563.   def execute_damage_flow(hp_width)
  564.       return if @hp_old == hp_width
  565.       n = (@hp_old - hp_width).abs * 3 / 100
  566.       damage_flow = [[n, 2].min,0.5].max
  567.       @hp_old -= damage_flow      
  568.       @hp_old = hp_width if @hp_old <= hp_width
  569.       src_rect_old = Rect.new(0,@meter_ch, @hp_old, @meter_ch)
  570.       @meter.bitmap.blt(0,0, @meter_image, src_rect_old)      
  571.   end   
  572.   
  573. end

  574. #==============================================================================
  575. # ■ Game_Battler
  576. #==============================================================================
  577. class Game_Battler < Game_BattlerBase
  578.   
  579.   #--------------------------------------------------------------------------
  580.   # ● Item Apply
  581.   #--------------------------------------------------------------------------        
  582.   alias mog_boss_hp_item_apply item_apply
  583.   def item_apply(user, item)
  584.       check_boss_hp_before
  585.       mog_boss_hp_item_apply(user, item)
  586.       check_boss_hp_after
  587.   end
  588.   
  589.   #--------------------------------------------------------------------------
  590.   # ● Regenerate HP
  591.   #--------------------------------------------------------------------------
  592.   alias mog_boss_hp_regenerate_hp regenerate_hp
  593.   def regenerate_hp
  594.       check_boss_hp_before
  595.       mog_boss_hp_regenerate_hp
  596.       check_boss_hp_after
  597.   end  
  598.   
  599.   #--------------------------------------------------------------------------
  600.   # ● Check Boss HP Before
  601.   #--------------------------------------------------------------------------         
  602.   def check_boss_hp_before
  603.       return if self.is_a?(Game_Actor)
  604.       return if !self.boss_hp_meter
  605.       $game_system.boss_hp_meter[6] = self.hp
  606.   end
  607.   
  608.   #--------------------------------------------------------------------------
  609.   # ● Check Boss HP After
  610.   #--------------------------------------------------------------------------            
  611.   def check_boss_hp_after
  612.       return if self.is_a?(Game_Actor)
  613.       return if !self.boss_hp_meter
  614.       $game_system.boss_hp_meter[2] = true
  615.       $game_system.boss_hp_meter[3] = self.name
  616.       $game_system.boss_hp_meter[4] = self.hp
  617.       $game_system.boss_hp_meter[5] = self.mhp
  618.       $game_system.boss_hp_meter[7] = self.level rescue nil     
  619.       $game_system.boss_hp_meter[9] = self.boss_hp_number
  620.   end
  621.   
  622. end

  623. #==============================================================================
  624. # ■ Game_Interpreter
  625. #==============================================================================
  626. class Game_Interpreter

  627.   #--------------------------------------------------------------------------
  628.   # ● Check Boss Meter
  629.   #--------------------------------------------------------------------------   
  630.   def check_boss_meter
  631.       return if !SceneManager.scene_is?(Scene_Battle)
  632.       iterate_enemy_index(@params[0]) do |enemy|
  633.         if enemy.boss_hp_meter
  634.            $game_system.boss_hp_meter[2] = true
  635.            $game_system.boss_hp_meter[3] = enemy.name
  636.            $game_system.boss_hp_meter[4] = enemy.hp
  637.            $game_system.boss_hp_meter[5] = enemy.mhp
  638.            $game_system.boss_hp_meter[6] = enemy.hp   
  639.            $game_system.boss_hp_meter[7] = enemy.level rescue nil
  640.            $game_system.boss_hp_meter[9] = enemy.boss_hp_number
  641.         end
  642.      end
  643.   end

  644.   #--------------------------------------------------------------------------
  645.   # ● Command 331
  646.   #--------------------------------------------------------------------------  
  647.   alias mog_boss_meter_command_331 command_331
  648.   def command_331
  649.       mog_boss_meter_command_331
  650.       check_boss_meter
  651.   end
  652.   
  653.   #--------------------------------------------------------------------------
  654.   # ● Command 334
  655.   #--------------------------------------------------------------------------  
  656.   alias mog_boss_meter_command_334 command_334
  657.   def command_334
  658.       mog_boss_meter_command_334
  659.       check_boss_meter
  660.   end   
  661.   
  662. end

  663. #==============================================================================
  664. # ■ BattleManager
  665. #==============================================================================
  666. class << BattleManager
  667.   
  668.   #--------------------------------------------------------------------------
  669.   # ● Init Members
  670.   #--------------------------------------------------------------------------         
  671.   alias mog_boss_meter_init_members init_members
  672.   def init_members
  673.       $game_temp.battle_end = false
  674.       mog_boss_meter_init_members
  675.   end  
  676.   
  677.   #--------------------------------------------------------------------------
  678.   # ● Process Victory
  679.   #--------------------------------------------------------------------------            
  680.   alias mog_boss_meter_process_victory process_victory
  681.   def process_victory
  682.       $game_temp.battle_end = true
  683.       mog_boss_meter_process_victory
  684.   end
  685.   
  686.   #--------------------------------------------------------------------------
  687.   # ● Process Abort
  688.   #--------------------------------------------------------------------------            
  689.   alias mog_boss_meter_process_abort process_abort
  690.   def process_abort
  691.       $game_temp.battle_end = true
  692.       mog_boss_meter_process_abort
  693.   end

  694.   #--------------------------------------------------------------------------
  695.   # ● Process Defeat
  696.   #--------------------------------------------------------------------------            
  697.   alias mog_boss_meter_process_defeat process_defeat
  698.   def process_defeat
  699.       $game_temp.battle_end = true
  700.       mog_boss_meter_process_defeat
  701.   end
  702.   
  703. end

  704. $mog_rgss3_boss_hp_meter = true
复制代码

作者: 寂静的夜里    时间: 2014-4-11 23:06
隐藏BOSS的血量数值

作者: VIPArcher    时间: 2014-4-11 23:09
寂静的夜里 发表于 2014-4-11 23:06
隐藏BOSS的血量数值

恩,这个刚刚懂了。
作者: tan12345    时间: 2014-4-12 00:31
# 使用方法:
# 在敌人备注栏里填写<Boss HP Meter>表示BOSS血条
# 在敌人备注栏里填写<Boss HP Hide Number>表示隐藏具体血值
# 在faces文件夹下面放置敌人名称+"_F"的图片代表BOSS脸图
# 在敌人备注栏里填写<Level = X>表示BOSS等级(前提是先存在BOSS血条,即该功能与<Boss HP Meter>连用才生效)
作者: VIPArcher    时间: 2014-4-12 00:43
tan12345 发表于 2014-4-12 00:31
# 使用方法:
# 在敌人备注栏里填写表示BOSS血条
# 在敌人备注栏里填写表示隐藏具体血值


我写了,可是没效果。

QQ图片20140412004209.jpg (4.46 KB, 下载次数: 28)

QQ图片20140412004209.jpg

QQ图片20140412004219.jpg (23.44 KB, 下载次数: 26)

QQ图片20140412004219.jpg

作者: 寂静的夜里    时间: 2014-4-12 00:49
VIPArcher 发表于 2014-4-12 00:43
我写了,可是没效果。

你这个不是原版的血条效果 原版的如下图

作者: VIPArcher    时间: 2014-4-12 01:07
寂静的夜里 发表于 2014-4-12 00:49
你这个不是原版的血条效果 原版的如下图

可能是这个别人改过了,你有原版的脚本吗?求发上来。
作者: 寂静的夜里    时间: 2014-4-12 01:15
本帖最后由 寂静的夜里 于 2014-4-12 01:17 编辑

#==============================================================================
# +++ MOG - Boss HP Meter (V1.2) +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com
#==============================================================================
# Apresenta um medidor animado com o HP do inimigo.
#
#==============================================================================
# UTILIZAÇÃO
#==============================================================================
# Coloque o seguinte comentário na caixa de notas do inimigo.
#
# <Boss HP Meter>
#
# Caso desejar ocultar o valor numérico do HP use o código abaixo.
#
# <Boss HP Hide Number>
#
#==============================================================================
# Caso precisar mudar a posição do medidor no meio do jogo use o código abaixo
#
# boss_hp_position(X,Y)
#
#==============================================================================
# Serão necessários as imagens.
#
# Battle_Boss_Meter.png
# Battle_Boss_Meter_Layout.png
#==============================================================================
# FACES (Opcional)
#==============================================================================
# Nomeie o arquivo da face da seguinte maneira. (Graphics/Faces/)
#
# Enemy_Name + _F.png         (Slime_F.png)
#
#==============================================================================
# Definindo o LEVEL (Opcional)
#==============================================================================
# Coloque o seguinte comentário na caixa de notas do inimigo.
#
# <Level = X>
#
#==============================================================================

#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.2 - Melhoria na performance.
#       - Não é mais necessário o script Enemy HP.
#==============================================================================

module MOG_BOSS_HP_METER
    #Posição geral do layout.
    LAYOUT_POSITION = [100,35]
    #Posição do medidor.
    METER_POSITION = [3,3]
    #Posição do nome do inimigo.
    NAME_POSITION = [16,8]
    #Posição da face.
    FACE_POSITION = [0,-30]
    #Posição do level do inimigo.
    LEVEL_POSITION = [150, -24]#[290, 0]
    #Posição do numero  de HP
    HP_NUMBER_POSITION = [230, 5]
    #Definição do espaço da palavra HP e o valor de numérico.
    HP_STRING_SPACE = 36
    #
    HP_NUMBER_WAVE_EFFECT = true
    #Definição da palavra Level.
    LEVEL_WORD = "Level "
    #Velocidade de animação do medidor
    METER_ANIMATION_SPEED = 10
    #Definição do nome da fonte.
    FONT_NAME = "Georgia"
   
    #Definição do tamanho da fonte.
    FONT_SIZE = 16
    #Ativar contorno na fonte.
    FONT_BOLD = true
    #Fonte em itálico.
    FONT_ITALIC = true
    #Definição da cor da fonte.
    FONT_COLOR = Color.new(255,255,255)
    #Definição da prioridade da HUD.
    PRIORITY_Z = 101
end

#==============================================================================
# ■ Game System
#==============================================================================
class Game_System
  
attr_accessor :boss_hp_meter
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------  
alias mog_boss_hp_meter_initialize initialize
def initialize
     ix = MOG_BOSS_HP_METER::LAYOUT_POSITION[0]
     iy = MOG_BOSS_HP_METER::LAYOUT_POSITION[1]
     @boss_hp_meter = [ix,iy,false,"",0,1,0,nil,0,false]
     mog_boss_hp_meter_initialize
end
  
end

#==============================================================================
# ■ Game Enemy
#==============================================================================
class Game_Enemy < Game_Battler
   
  attr_accessor :boss_hp_meter
  attr_accessor :boss_hp_number
  attr_accessor :level
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_boss_hp_meter_initialize initialize
  def initialize(index, enemy_id)
      mog_boss_hp_meter_initialize(index, enemy_id)
      @boss_hp_meter = enemy.note =~ /<Boss HP Meter>/ ? true : false
      @boss_hp_number = enemy.note =~ /<Boss HP Hide Number>/ ? false : true
      @level = enemy.note =~ /<Level = (\d+)>/i ? $1 : nil
  end  

end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
  
  attr_accessor :battle_end
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  alias mog_boss_hp_meter_initialize initialize
  def initialize
      @battle_end = false
      mog_boss_hp_meter_initialize
  end  

end

#==============================================================================
# ■ Game Interpreter
#==============================================================================
class Game_Interpreter
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------   
def boss_hp_position(x = 0,y = 0)
     $game_system.boss_hp_meter[0] = x
     $game_system.boss_hp_meter[1] = y
end
  
end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp

  attr_accessor :cache_boss_hp
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------   
  alias mog_boss_hp_initialize initialize
  def initialize
      mog_boss_hp_initialize
      cache_bosshp
  end
  
#--------------------------------------------------------------------------
# ● Cache Bosshp
#--------------------------------------------------------------------------  
  def cache_bosshp
      @cache_boss_hp = []
      @cache_boss_hp.push(Cache.system("Battle_Boss_Meter_Layout"))
      @cache_boss_hp.push(Cache.system("Battle_Boss_Meter"))
      @cache_boss_hp.push(Cache.system("Battle_Boss_Number"))
  end
  
end

#==============================================================================
# ■ Boss HP Meter
#==============================================================================
class Boss_HP_Meter
  include MOG_BOSS_HP_METER
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  def initialize(viewport = nil)
      clear_enemy_setup
      @hp_vieport = viewport
      check_boss_avaliable
  end
  
  #--------------------------------------------------------------------------
  # ● Clear Enemy Setup
  #--------------------------------------------------------------------------   
  def clear_enemy_setup
      @name = ""   
      @hp = 0
      @hp2 = 0
      @hp3 = 0
      @maxhp = 0
      @hp_old = 0
      @level = nil
      $game_system.boss_hp_meter[2] = false
      $game_system.boss_hp_meter[3] = ""
      $game_system.boss_hp_meter[4] = 0
      $game_system.boss_hp_meter[5] = 1
      $game_system.boss_hp_meter[7] = nil
      $game_system.boss_hp_meter[8] = 0
      $game_system.boss_hp_meter[9] = true
  end

  #--------------------------------------------------------------------------
  # ● Check Boss Avaliable
  #--------------------------------------------------------------------------   
  def check_boss_avaliable
      return if $game_troop.all_dead?
      for i in $game_troop.members
          if i.boss_hp_meter and !i.hidden? and i.hp > 0
             create_boss_hp_meter(i)
             break
          end
      end
  end

  #--------------------------------------------------------------------------
  # ● Create Boss HP Meter
  #--------------------------------------------------------------------------      
  def create_boss_hp_meter(i)
      $game_system.boss_hp_meter[2] = true
      $game_system.boss_hp_meter[3] = i.name
      $game_system.boss_hp_meter[4] = i.hp
      $game_system.boss_hp_meter[5] = i.mhp
      $game_system.boss_hp_meter[6] = i.hp
      $game_system.boss_hp_meter[7] = i.level rescue nil
      $game_system.boss_hp_meter[8] = 0
      $game_system.boss_hp_meter[9] = i.boss_hp_number
      refresh_hp_meter
      create_layout
      create_meter
      create_name
      create_face
      create_level
      create_hp_number
  end
   
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------        
  def create_layout
      return if @layout != nil
      @layout = Sprite.new
      @layout.bitmap = $game_temp.cache_boss_hp[0]
      @layout.x = $game_system.boss_hp_meter[0]
      @layout.y = $game_system.boss_hp_meter[1]
      @layout.viewport = @hp_vieport
      @layout.z = PRIORITY_Z
  end
  
  #--------------------------------------------------------------------------
  # ● Create Meter
  #--------------------------------------------------------------------------         
  def create_meter
      return if @meter_image != nil
      hp_setup
      @meter_image = $game_temp.cache_boss_hp[1]
      @meter_cw = @meter_image.width / 3
      @meter_ch = @meter_image.height / 2
      @meter = Sprite.new
      @meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @meter.z = @layout.z + 1
      @meter.x = @layout.x + METER_POSITION[0]
      @meter.y = @layout.y + METER_POSITION[1]
      @meter.viewport = @hp_vieport
      @hp_flow = 0
      @hp_flow_max = @meter_cw * 2
      update_hp_meter
  end

  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------            
  def create_name
      @name_sprite = Sprite.new
      @name_sprite.bitmap = Bitmap.new(200,32)
      @name_sprite.z = @layout.z + 2
      @name_sprite.x = @layout.x + NAME_POSITION[0]
      @name_sprite.y = @layout.y + NAME_POSITION[1]
      @name_sprite.bitmap.font.name = FONT_NAME
      @name_sprite.bitmap.font.size = FONT_SIZE
      @name_sprite.bitmap.font.bold = FONT_BOLD
      @name_sprite.bitmap.font.italic = FONT_ITALIC
      @name_sprite.bitmap.font.color = FONT_COLOR
      @name_sprite.viewport = @hp_vieport
      refresh_name
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------
  def create_face
      @face_sprite = Sprite.new
      @face_sprite.x = @layout.x + FACE_POSITION[0]
      @face_sprite.y = @layout.y + FACE_POSITION[1]
      @face_sprite.z = @layout.z + 2
      @face_sprite.viewport = @hp_vieport
      refresh_face
  end

  #--------------------------------------------------------------------------
  # ● Create Level
  #--------------------------------------------------------------------------  
  def create_level
      @level_sprite = Sprite.new
      @level_sprite.bitmap = Bitmap.new(120,32)
      @level_sprite.z = @layout.z + 2
      @level_sprite.x = @layout.x + LEVEL_POSITION[0]
      @level_sprite.y = @layout.y + LEVEL_POSITION[1]
      @level_sprite.bitmap.font.name = FONT_NAME
      @level_sprite.bitmap.font.size = FONT_SIZE
      @level_sprite.bitmap.font.bold = FONT_BOLD
      @level_sprite.bitmap.font.italic = FONT_ITALIC
      @level_sprite.bitmap.font.color = FONT_COLOR
      @level_sprite.viewport = @hp_vieport
      refresh_level
  end
  
  #--------------------------------------------------------------------------
  # ● Create HP Number
  #--------------------------------------------------------------------------   
  def create_hp_number
      @hp2 = $game_system.boss_hp_meter[4]
      @hp3 = @hp2
      @hp_old2 = @hp2
      @hp_ref = @hp_old2
      @hp_refresh = false   
      @hp_number_image = $game_temp.cache_boss_hp[2]
      @hp_cw = @hp_number_image.width / 10
      @hp_ch = @hp_number_image.height / 2
      @hp_ch2 = 0
      @hp_ch_range = HP_NUMBER_WAVE_EFFECT == true ? @hp_ch / 3 : 0
      @hp_number_sprite = Sprite.new
      @hp_number_sprite.bitmap = Bitmap.new(@hp_number_image.width, @hp_ch * 2)
      @hp_number_sprite.z = @layout.z + 2
      @hp_number_sprite.x = @layout.x + HP_NUMBER_POSITION[0]
      @hp_number_sprite.y = @layout.y + HP_NUMBER_POSITION[1]
      @hp_number_sprite.viewport = @hp_vieport
      @hp_number_sprite.visible = $game_system.boss_hp_meter[9]
      refresh_hp_number
  end
  
  #--------------------------------------------------------------------------
  # ● update_hp_number
  #--------------------------------------------------------------------------
  def update_hp_number
      return if @hp_number_sprite == nil
      @hp_number_sprite.visible = $game_system.boss_hp_meter[9]
      if @hp_old2 < $game_system.boss_hp_meter[4]
         number_refresh_speed
         @hp2 += @hp_ref     
         reset_hp_number  if @hp2 >= $game_system.boss_hp_meter[4]
      elsif @hp_old2 > $game_system.boss_hp_meter[4]           
         number_refresh_speed
         @hp2 -= @hp_ref               
         reset_hp_number if @hp2 <= $game_system.boss_hp_meter[4]
      end  
  end   
  
  #--------------------------------------------------------------------------
  # ● Number Refresh Speed
  #--------------------------------------------------------------------------
  def number_refresh_speed
      @hp_refresh = true  
      @hp_ref = (3 * (@hp_old2 - $game_system.boss_hp_meter[4]).abs / 100) rescue nil
      @hp_ref = 1 if @hp_ref == nil or @hp_ref < 1
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh HP Number
  #--------------------------------------------------------------------------      
  def refresh_hp_number
      return if @hp_number_sprite == nil
      @hp_refresh = false
      @hp_number_sprite.bitmap.clear
      number = @hp2.abs.to_s.split(//)
      @hp_ch2 = 0
      for r in 0..number.size - 1
          number_abs = number[r].to_i
          nsrc_rect = Rect.new(@hp_cw * number_abs, 0, @hp_cw, @hp_ch)
          @hp_ch2 = @hp_ch2 == @hp_ch_range ? 0 : @hp_ch_range
          @hp_number_sprite.bitmap.blt(HP_STRING_SPACE + (@hp_cw *  r), @hp_ch2, @hp_number_image, nsrc_rect)        
      end      
      nsrc_rect = Rect.new(0, @hp_ch, @hp_number_image.width, @hp_ch)
      @hp_number_sprite.bitmap.blt(0, 0, @hp_number_image, nsrc_rect)     
  end
  
  #--------------------------------------------------------------------------
  # ● Reset HP Number
  #--------------------------------------------------------------------------        
  def reset_hp_number
      @hp_refresh = true
      @hp_old2 = $game_system.boss_hp_meter[4]
      @hp2 = $game_system.boss_hp_meter[4]
      @hp_ref = 0
      refresh_hp_number
  end
   
  #--------------------------------------------------------------------------
  # ● Refresh Level
  #--------------------------------------------------------------------------   
  def refresh_level
      return if @level_sprite == nil
      @level_sprite.bitmap.clear
      @level = $game_system.boss_hp_meter[7]
      return if @level == nil
      level_text = LEVEL_WORD + @level.to_s
      @level_sprite.bitmap.draw_text(0,0,120,32,level_text.to_s)
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------  
  def refresh_face
      return if @face_sprite == nil
      dispose_bitmap_face
      @face_sprite.bitmap = Cache.face(@name + "_f") rescue nil
      @face_sprite.bitmap = Cache.face("") if @face_sprite.bitmap == nil
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------              
  def refresh_name
      return if @name_sprite == nil
      @name = $game_system.boss_hp_meter[3]   
      @name_sprite.bitmap.clear
      @name_sprite.bitmap.draw_text(0,0,190,32,@name.to_s)
      refresh_face
      refresh_level
      reset_hp_number
      @hp_old = @meter_cw * @hp / @maxhp
  end
  
  #--------------------------------------------------------------------------
  # ● HP Setup
  #--------------------------------------------------------------------------            
  def hp_setup
      @hp = $game_system.boss_hp_meter[4]
      @maxhp = $game_system.boss_hp_meter[5]
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_meter
      dispose_name
      dispose_face
      dispose_level
      dispose_hp_number
      @hp_vieport.dispose
  end

  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------              
  def dispose_name
      return if @name_sprite == nil
      @name_sprite.bitmap.dispose
      @name_sprite.dispose
      @name_sprite = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Meter
  #--------------------------------------------------------------------------      
  def dispose_meter
      return if @meter == nil
      @meter.bitmap.dispose
      @meter.dispose
      @meter = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------  
  def dispose_face
      return if @face_sprite == nil
      dispose_bitmap_face
      @face_sprite.dispose
      @face_sprite = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Bitmap Face
  #--------------------------------------------------------------------------   
  def dispose_bitmap_face
      return if @face_sprite == nil
      return if @face_sprite.bitmap == nil
      @face_sprite.bitmap.dispose rescue nil
      @face_sprite.bitmap = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Level
  #--------------------------------------------------------------------------   
  def dispose_level
      return if @level_sprite == nil
      @level_sprite.bitmap.dispose
      @level_sprite.dispose
      @level_sprite = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Number
  #--------------------------------------------------------------------------      
  def dispose_hp_number
      return if @hp_number_sprite == nil
      @hp_number_sprite.bitmap.dispose
      @hp_number_sprite.dispose
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      refresh_hp_meter
      refresh_hp_number if @hp_refresh
      update_hp_meter
      update_hp_number
      update_fade_end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Fade End
  #--------------------------------------------------------------------------   
  def update_fade_end
      return if !$game_temp.battle_end
      return if @meter_image == nil
      @layout.opacity -= 5
      @meter.opacity -= 5
      @name_sprite.opacity -= 5
      @face_sprite.opacity -= 5
      @level_sprite.opacity -= 5
      @hp_number_sprite.opacity -= 5
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh HP Meter
  #--------------------------------------------------------------------------         
  def refresh_hp_meter
      return if !$game_system.boss_hp_meter[2]
      $game_system.boss_hp_meter[2] = false
      hp_setup
      refresh_name if @name != $game_system.boss_hp_meter[3]
  end
  
  #--------------------------------------------------------------------------
  # ● Update HP Meter
  #--------------------------------------------------------------------------            
  def update_hp_meter
      return if @meter_image == nil
      @meter.bitmap.clear
      hp_width = @meter_cw * @hp / @maxhp      
      execute_damage_flow(hp_width)      
      hp_src_rect = Rect.new(@hp_flow, 0,hp_width, @meter_ch)
      @meter.bitmap.blt(0,0, @meter_image, hp_src_rect)  
      @hp_flow += METER_ANIMATION_SPEED
      @hp_flow = 0 if @hp_flow >= @hp_flow_max
  end  
   
  #--------------------------------------------------------------------------
  # ● Execute Damage Flow
  #--------------------------------------------------------------------------
  def execute_damage_flow(hp_width)
      return if @hp_old == hp_width
      n = (@hp_old - hp_width).abs * 3 / 100
      damage_flow = [[n, 2].min,0.5].max
      @hp_old -= damage_flow      
      @hp_old = hp_width if @hp_old <= hp_width
      src_rect_old = Rect.new(0,@meter_ch, @hp_old, @meter_ch)
      @meter.bitmap.blt(0,0, @meter_image, src_rect_old)      
  end   
  
end

#==============================================================================
# ■ Spriteset Battle
#==============================================================================
class Spriteset_Battle
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  alias mog_enemy_bhp_initialize initialize
  def initialize
      mog_enemy_bhp_initialize
      create_boss_hp_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Create Boss HP Meter
  #--------------------------------------------------------------------------  
  def create_boss_hp_meter
      @boss_hp_meter = Boss_HP_Meter.new(@viewport1)
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  alias mog_enemy_bhp_dispose dispose
  def dispose
      dispose_boss_hp_meter   
      mog_enemy_bhp_dispose
  end  

  #--------------------------------------------------------------------------
  # ● Dispose Boss HP Meter
  #--------------------------------------------------------------------------         
  def dispose_boss_hp_meter
      return if @boss_hp_meter == nil
      @boss_hp_meter.dispose
      @boss_hp_meter = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------        
  alias mog_enemy_bhp_update update
  def update
      mog_enemy_bhp_update
      update_boss_hp_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Update Boss HP Meter
  #--------------------------------------------------------------------------            
  def update_boss_hp_meter
      return if @boss_hp_meter == nil
      @boss_hp_meter.update
  end
   
end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # ● Item Apply
  #--------------------------------------------------------------------------        
  alias mog_boss_hp_item_apply item_apply
  def item_apply(user, item)
      check_boss_hp_before
      mog_boss_hp_item_apply(user, item)
      check_boss_hp_after
  end
  
  #--------------------------------------------------------------------------
  # ● Regenerate HP
  #--------------------------------------------------------------------------
  alias mog_boss_hp_regenerate_hp regenerate_hp
  def regenerate_hp
      check_boss_hp_before
      mog_boss_hp_regenerate_hp
      check_boss_hp_after
  end  
  
  #--------------------------------------------------------------------------
  # ● Check Boss HP Before
  #--------------------------------------------------------------------------         
  def check_boss_hp_before
      return if self.is_a?(Game_Actor)
      return if !self.boss_hp_meter
      $game_system.boss_hp_meter[6] = self.hp
  end
  
  #--------------------------------------------------------------------------
  # ● Check Boss HP After
  #--------------------------------------------------------------------------            
  def check_boss_hp_after
      return if self.is_a?(Game_Actor)
      return if !self.boss_hp_meter
      $game_system.boss_hp_meter[2] = true
      $game_system.boss_hp_meter[3] = self.name
      $game_system.boss_hp_meter[4] = self.hp
      $game_system.boss_hp_meter[5] = self.mhp
      $game_system.boss_hp_meter[7] = self.level rescue nil     
      $game_system.boss_hp_meter[9] = self.boss_hp_number
  end
  
end

#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter

  #--------------------------------------------------------------------------
  # ● Check Boss Meter
  #--------------------------------------------------------------------------   
  def check_boss_meter
      return if !SceneManager.scene_is?(Scene_Battle)
      iterate_enemy_index(@params[0]) do |enemy|
        if enemy.boss_hp_meter
           $game_system.boss_hp_meter[2] = true
           $game_system.boss_hp_meter[3] = enemy.name
           $game_system.boss_hp_meter[4] = enemy.hp
           $game_system.boss_hp_meter[5] = enemy.mhp
           $game_system.boss_hp_meter[6] = enemy.hp   
           $game_system.boss_hp_meter[7] = enemy.level rescue nil
           $game_system.boss_hp_meter[9] = enemy.boss_hp_number
        end
     end
  end

  #--------------------------------------------------------------------------
  # ● Command 331
  #--------------------------------------------------------------------------  
  alias mog_boss_meter_command_331 command_331
  def command_331
      mog_boss_meter_command_331
      check_boss_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Command 334
  #--------------------------------------------------------------------------  
  alias mog_boss_meter_command_334 command_334
  def command_334
      mog_boss_meter_command_334
      check_boss_meter
  end   
  
end

#==============================================================================
# ■ BattleManager
#==============================================================================
class << BattleManager
  
  #--------------------------------------------------------------------------
  # ● Init Members
  #--------------------------------------------------------------------------         
  alias mog_boss_meter_init_members init_members
  def init_members
      $game_temp.battle_end = false
      mog_boss_meter_init_members
  end  
  
  #--------------------------------------------------------------------------
  # ● Process Victory
  #--------------------------------------------------------------------------            
  alias mog_boss_meter_process_victory process_victory
  def process_victory
      $game_temp.battle_end = true
      mog_boss_meter_process_victory
  end
  
  #--------------------------------------------------------------------------
  # ● Process Abort
  #--------------------------------------------------------------------------            
  alias mog_boss_meter_process_abort process_abort
  def process_abort
      $game_temp.battle_end = true
      mog_boss_meter_process_abort
  end

  #--------------------------------------------------------------------------
  # ● Process Defeat
  #--------------------------------------------------------------------------            
  alias mog_boss_meter_process_defeat process_defeat
  def process_defeat
      $game_temp.battle_end = true
      mog_boss_meter_process_defeat
  end
  
end

$mog_rgss3_boss_hp_meter = true







作者: VIPArcher    时间: 2014-4-14 23:33
寂静的夜里 发表于 2014-4-12 01:15
#==============================================================================
# +++ MOG - Boss HP  ...

认可答案!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1