Project1

标题: 请教这个脚本问题 [打印本页]

作者: lokkyava    时间: 2017-1-9 17:47
标题: 请教这个脚本问题
我使用了这个脚本显示BOSS的血条
正常出现的怪物能够正常显示
可是一旦设定怪物是中途出现的话 那只中途出现的怪物就不会显示出血条了
想请问有解决的方法吗

RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - Boss HP Meter (V1.5) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]https://atelierrgss.wordpress.com/[/url]
  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. # ou
  38. #
  39. # BF_ + ID.png          (BF_11.png)
  40. #
  41. #==============================================================================
  42. # Definindo o LEVEL (Opcional)
  43. #==============================================================================
  44. # Coloque o seguinte comentário na caixa de notas do inimigo.
  45. #
  46. # <Level = X>
  47. #
  48. #==============================================================================
  49.  
  50. #==============================================================================
  51. # Histórico
  52. #==============================================================================
  53. # v1.5 - Definição do nome da face pelo ID do battler
  54. # v1.4 - Melhoria de compatibilidade de scripts.
  55. #==============================================================================
  56.  
  57. $imported = {} if $imported.nil?
  58. $imported[:mog_blitz_commands] = true
  59.  
  60. module MOG_BOSS_HP_METER
  61.     #Posição geral do layout.
  62.     LAYOUT_POSITION = [60,30]
  63.     #Posição do medidor.
  64.     METER_POSITION = [3,3]
  65.     #Posição do nome do inimigo.
  66.     NAME_POSITION = [16,8]
  67.     #Posição da face.
  68.     FACE_POSITION = [0,-30]
  69.     #Posição do level do inimigo.
  70.     LEVEL_POSITION = [150, -24]#[290, 0]
  71.     #Posição do numero  de HP
  72.     HP_NUMBER_POSITION = [230, 5]
  73.     #Definição do espaço da palavra HP e o valor de numérico.
  74.     HP_STRING_SPACE = 36
  75.     #Ativar efeito wave
  76.     HP_NUMBER_WAVE_EFFECT = true
  77.     #Definição da palavra Level.
  78.     LEVEL_WORD = "Level "
  79.     #Velocidade de animação do medidor
  80.     METER_ANIMATION_SPEED = 10   
  81.     #Definição do tamanho da fonte.
  82.     FONT_SIZE = 16
  83.     #Ativar contorno na fonte.
  84.     FONT_BOLD = true
  85.     #Fonte em itálico.
  86.     FONT_ITALIC = true
  87.     #Definição da cor da fonte.
  88.     FONT_COLOR = Color.new(255,255,255)
  89.     #Definição da prioridade da HUD.
  90.     PRIORITY_Z = 50
  91. end
  92.  
  93. #==============================================================================
  94. # ■ Game System
  95. #==============================================================================
  96. class Game_System
  97.  
  98. attr_accessor :boss_hp_meter
  99.  
  100. #--------------------------------------------------------------------------
  101. # ● Initialize
  102. #--------------------------------------------------------------------------  
  103. alias mog_boss_hp_meter_initialize initialize
  104. def initialize
  105.      ix = MOG_BOSS_HP_METER:AYOUT_POSITION[0]
  106.      iy = MOG_BOSS_HP_METER:AYOUT_POSITION[1]
  107.      @boss_hp_meter = [ix,iy,false,"",0,1,0,nil,0,false]
  108.      mog_boss_hp_meter_initialize
  109. end
  110.  
  111. end
  112.  
  113. #==============================================================================
  114. # ■ Game Enemy
  115. #==============================================================================
  116. class Game_Enemy < Game_Battler
  117.  
  118.   attr_accessor :boss_hp_meter
  119.   attr_accessor :boss_hp_number
  120.   attr_accessor :level
  121.  
  122.   #--------------------------------------------------------------------------
  123.   # ● Initialize
  124.   #--------------------------------------------------------------------------
  125.   alias mog_boss_hp_meter_initialize initialize
  126.   def initialize(index, enemy_id)
  127.       mog_boss_hp_meter_initialize(index, enemy_id)
  128.       @boss_hp_meter = enemy.note =~ /<Boss HP Meter>/ ? true : false
  129.       @boss_hp_number = enemy.note =~ /<Boss HP Hide Number>/ ? false : true
  130.       @level = enemy.note =~ /<Level = (\d+)>/i ? $1 : nil
  131.   end  
  132.  
  133. end
  134.  
  135. #==============================================================================
  136. # ■ Game Temp
  137. #==============================================================================
  138. class Game_Temp
  139.  
  140.   attr_accessor :battle_end
  141.  
  142.   #--------------------------------------------------------------------------
  143.   # ● Initialize
  144.   #--------------------------------------------------------------------------  
  145.   alias mog_boss_hp_meter_initialize initialize
  146.   def initialize
  147.       @battle_end = false
  148.       mog_boss_hp_meter_initialize
  149.   end  
  150.  
  151. end
  152.  
  153. #==============================================================================
  154. # ■ Game Interpreter
  155. #==============================================================================
  156. class Game_Interpreter
  157.  
  158. #--------------------------------------------------------------------------
  159. # ● Initialize
  160. #--------------------------------------------------------------------------   
  161. def boss_hp_position(x = 0,y = 0)
  162.      $game_system.boss_hp_meter[0] = x
  163.      $game_system.boss_hp_meter[1] = y
  164. end
  165.  
  166. end
  167.  
  168. #==============================================================================
  169. # ■ Game Temp
  170. #==============================================================================
  171. class Game_Temp
  172.  
  173.   attr_accessor :cache_boss_hp
  174.  
  175. #--------------------------------------------------------------------------
  176. # ● Initialize
  177. #--------------------------------------------------------------------------   
  178.   alias mog_boss_hp_initialize initialize
  179.   def initialize
  180.       mog_boss_hp_initialize
  181.       cache_bosshp
  182.   end
  183.  
  184. #--------------------------------------------------------------------------
  185. # ● Cache Bosshp
  186. #--------------------------------------------------------------------------  
  187.   def cache_bosshp
  188.       @cache_boss_hp = []
  189.       @cache_boss_hp.push(Cache.system("Battle_Boss_Meter_Layout"))
  190.       @cache_boss_hp.push(Cache.system("Battle_Boss_Meter"))
  191.       @cache_boss_hp.push(Cache.system("Battle_Boss_Number"))
  192.   end
  193.  
  194. end
  195.  
  196. #==============================================================================
  197. # ■ Boss HP Meter
  198. #==============================================================================
  199. class Boss_HP_Meter
  200.   include MOG_BOSS_HP_METER
  201.  
  202.   #--------------------------------------------------------------------------
  203.   # ● Initialize
  204.   #--------------------------------------------------------------------------  
  205.   def initialize(viewport = nil)
  206.       clear_enemy_setup
  207.       @hp_vieport = nil
  208.       check_boss_avaliable
  209.   end
  210.  
  211.   #--------------------------------------------------------------------------
  212.   # ● Clear Enemy Setup
  213.   #--------------------------------------------------------------------------   
  214.   def clear_enemy_setup
  215.       @name = ""   
  216.       @hp = 0
  217.       @hp2 = 0
  218.       @hp3 = 0
  219.       @maxhp = 0
  220.       @hp_old = 0
  221.       @level = nil
  222.       $game_system.boss_hp_meter[2] = false
  223.       $game_system.boss_hp_meter[3] = ""
  224.       $game_system.boss_hp_meter[4] = 0
  225.       $game_system.boss_hp_meter[5] = 1
  226.       $game_system.boss_hp_meter[7] = nil
  227.       $game_system.boss_hp_meter[8] = 0
  228.       $game_system.boss_hp_meter[9] = true
  229.   end
  230.  
  231.   #--------------------------------------------------------------------------
  232.   # ● Check Boss Avaliable
  233.   #--------------------------------------------------------------------------   
  234.   def check_boss_avaliable
  235.       return if $game_troop.all_dead?
  236.       for i in $game_troop.members
  237.           if i.boss_hp_meter and !i.hidden? and i.hp > 0
  238.              create_boss_hp_meter(i)
  239.              break
  240.           end
  241.       end
  242.   end
  243.  
  244.   #--------------------------------------------------------------------------
  245.   # ● Create Boss HP Meter
  246.   #--------------------------------------------------------------------------      
  247.   def create_boss_hp_meter(i)
  248.       $game_system.boss_hp_meter[2] = true
  249.       $game_system.boss_hp_meter[3] = i.name
  250.       $game_system.boss_hp_meter[4] = i.hp
  251.       $game_system.boss_hp_meter[5] = i.mhp
  252.       $game_system.boss_hp_meter[6] = i.hp
  253.       $game_system.boss_hp_meter[7] = i.level rescue nil
  254.       $game_system.boss_hp_meter[8] = 0
  255.       $game_system.boss_hp_meter[9] = i.boss_hp_number
  256.       $game_system.boss_hp_meter[10] = i.enemy_id
  257.       refresh_hp_meter
  258.       create_layout
  259.       create_meter
  260.       create_name
  261.       create_face
  262.       create_level
  263.       create_hp_number
  264.   end
  265.  
  266.   #--------------------------------------------------------------------------
  267.   # ● Create Layout
  268.   #--------------------------------------------------------------------------        
  269.   def create_layout
  270.       return if @layout != nil
  271.       @layout = Sprite.new
  272.       @layout.bitmap = $game_temp.cache_boss_hp[0]
  273.       @layout.x = $game_system.boss_hp_meter[0]
  274.       @layout.y = $game_system.boss_hp_meter[1]
  275.       @layout.viewport = @hp_vieport
  276.       @layout.z = PRIORITY_Z
  277.   end
  278.  
  279.   #--------------------------------------------------------------------------
  280.   # ● Create Meter
  281.   #--------------------------------------------------------------------------         
  282.   def create_meter
  283.       return if @meter_image != nil
  284.       hp_setup
  285.       @meter_image = $game_temp.cache_boss_hp[1]
  286.       @meter_cw = @meter_image.width / 3
  287.       @meter_ch = @meter_image.height / 2
  288.       [url=home.php?mod=space&uid=1330256]@meter[/url] = Sprite.new
  289.       @meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
  290.       @meter.z = @layout.z + 1
  291.       @meter.x = @layout.x + METER_POSITION[0]
  292.       @meter.y = @layout.y + METER_POSITION[1]
  293.       @meter.viewport = @hp_vieport
  294.       @hp_flow = 0
  295.       @hp_flow_max = @meter_cw * 2
  296.       update_hp_meter
  297.   end
  298.  
  299.   #--------------------------------------------------------------------------
  300.   # ● Create Name
  301.   #--------------------------------------------------------------------------            
  302.   def create_name
  303.       @name_sprite = Sprite.new
  304.       @name_sprite.bitmap = Bitmap.new(200,32)
  305.       @name_sprite.z = @layout.z + 2
  306.       @name_sprite.x = @layout.x + NAME_POSITION[0]
  307.       @name_sprite.y = @layout.y + NAME_POSITION[1]
  308.       @name_sprite.bitmap.font.size = FONT_SIZE
  309.       @name_sprite.bitmap.font.bold = FONT_BOLD
  310.       @name_sprite.bitmap.font.italic = FONT_ITALIC
  311.       @name_sprite.bitmap.font.color = FONT_COLOR
  312.       @name_sprite.viewport = @hp_vieport
  313.       refresh_name
  314.   end
  315.  
  316.   #--------------------------------------------------------------------------
  317.   # ● Create Face
  318.   #--------------------------------------------------------------------------
  319.   def create_face
  320.       @face_sprite = Sprite.new
  321.       @face_sprite.x = @layout.x + FACE_POSITION[0]
  322.       @face_sprite.y = @layout.y + FACE_POSITION[1]
  323.       @face_sprite.z = @layout.z + 2
  324.       @face_sprite.viewport = @hp_vieport
  325.       refresh_face
  326.   end
  327.  
  328.   #--------------------------------------------------------------------------
  329.   # ● Create Level
  330.   #--------------------------------------------------------------------------  
  331.   def create_level
  332.       @level_sprite = Sprite.new
  333.       @level_sprite.bitmap = Bitmap.new(120,32)
  334.       @level_sprite.z = @layout.z + 2
  335.       @level_sprite.x = @layout.x + LEVEL_POSITION[0]
  336.       @level_sprite.y = @layout.y + LEVEL_POSITION[1]
  337.       @level_sprite.bitmap.font.size = FONT_SIZE
  338.       @level_sprite.bitmap.font.bold = FONT_BOLD
  339.       @level_sprite.bitmap.font.italic = FONT_ITALIC
  340.       @level_sprite.bitmap.font.color = FONT_COLOR
  341.       @level_sprite.viewport = @hp_vieport
  342.       refresh_level
  343.   end
  344.  
  345.   #--------------------------------------------------------------------------
  346.   # ● Create HP Number
  347.   #--------------------------------------------------------------------------   
  348.   def create_hp_number
  349.       @hp2 = $game_system.boss_hp_meter[4]
  350.       @hp3 = @hp2
  351.       @hp_old2 = @hp2
  352.       @hp_ref = @hp_old2
  353.       @hp_refresh = false   
  354.       @hp_number_image = $game_temp.cache_boss_hp[2]
  355.       @hp_cw = @hp_number_image.width / 10
  356.       @hp_ch = @hp_number_image.height / 2
  357.       @hp_ch2 = 0
  358.       @hp_ch_range = HP_NUMBER_WAVE_EFFECT == true ? @hp_ch / 3 : 0
  359.       @hp_number_sprite = Sprite.new
  360.       @hp_number_sprite.bitmap = Bitmap.new(@hp_number_image.width, @hp_ch * 2)
  361.       @hp_number_sprite.z = @layout.z + 2
  362.       @hp_number_sprite.x = @layout.x + HP_NUMBER_POSITION[0]
  363.       @hp_number_sprite.y = @layout.y + HP_NUMBER_POSITION[1]
  364.       @hp_number_sprite.viewport = @hp_vieport
  365.       @hp_number_sprite.visible = $game_system.boss_hp_meter[9]
  366.       refresh_hp_number
  367.   end
  368.  
  369.   #--------------------------------------------------------------------------
  370.   # ● update_hp_number
  371.   #--------------------------------------------------------------------------
  372.   def update_hp_number
  373.       return if @hp_number_sprite == nil
  374.       @hp_number_sprite.visible = $game_system.boss_hp_meter[9]
  375.       if @hp_old2 < $game_system.boss_hp_meter[4]
  376.          number_refresh_speed
  377.          @hp2 += @hp_ref     
  378.          reset_hp_number  if @hp2 >= $game_system.boss_hp_meter[4]
  379.       elsif @hp_old2 > $game_system.boss_hp_meter[4]           
  380.          number_refresh_speed
  381.          @hp2 -= @hp_ref               
  382.          reset_hp_number if @hp2 <= $game_system.boss_hp_meter[4]
  383.       end  
  384.   end   
  385.  
  386.   #--------------------------------------------------------------------------
  387.   # ● Number Refresh Speed
  388.   #--------------------------------------------------------------------------
  389.   def number_refresh_speed
  390.       @hp_refresh = true  
  391.       @hp_ref = (3 * (@hp_old2 - $game_system.boss_hp_meter[4]).abs / 100) rescue nil
  392.       @hp_ref = 1 if @hp_ref == nil or @hp_ref < 1
  393.   end
  394.  
  395.   #--------------------------------------------------------------------------
  396.   # ● Refresh HP Number
  397.   #--------------------------------------------------------------------------      
  398.   def refresh_hp_number
  399.       return if @hp_number_sprite == nil
  400.       @hp_refresh = false
  401.       @hp_number_sprite.bitmap.clear
  402.       number = @hp2.abs.to_s.split(//)
  403.       @hp_ch2 = 0
  404.       for r in 0..number.size - 1
  405.           number_abs = number[r].to_i
  406.           nsrc_rect = Rect.new(@hp_cw * number_abs, 0, @hp_cw, @hp_ch)
  407.           @hp_ch2 = @hp_ch2 == @hp_ch_range ? 0 : @hp_ch_range
  408.           @hp_number_sprite.bitmap.blt(HP_STRING_SPACE + (@hp_cw *  r), @hp_ch2, @hp_number_image, nsrc_rect)        
  409.       end      
  410.       nsrc_rect = Rect.new(0, @hp_ch, @hp_number_image.width, @hp_ch)
  411.       @hp_number_sprite.bitmap.blt(0, 0, @hp_number_image, nsrc_rect)     
  412.   end
  413.  
  414.   #--------------------------------------------------------------------------
  415.   # ● Reset HP Number
  416.   #--------------------------------------------------------------------------        
  417.   def reset_hp_number
  418.       @hp_refresh = true
  419.       @hp_old2 = $game_system.boss_hp_meter[4]
  420.       @hp2 = $game_system.boss_hp_meter[4]
  421.       @hp_ref = 0
  422.       refresh_hp_number
  423.   end
  424.  
  425.   #--------------------------------------------------------------------------
  426.   # ● Refresh Level
  427.   #--------------------------------------------------------------------------   
  428.   def refresh_level
  429.       return if @level_sprite == nil
  430.       @level_sprite.bitmap.clear
  431.       @level = $game_system.boss_hp_meter[7]
  432.       return if @level == nil
  433.       level_text = LEVEL_WORD + @level.to_s
  434.       @level_sprite.bitmap.draw_text(0,0,120,32,level_text.to_s)
  435.   end
  436.  
  437.   #--------------------------------------------------------------------------
  438.   # ● Refresh Face
  439.   #--------------------------------------------------------------------------  
  440.   def refresh_face
  441.       return if @face_sprite == nil
  442.       dispose_bitmap_face
  443.       @face_sprite.bitmap = Cache.face(@name + "_f") rescue nil
  444.       @face_sprite.bitmap = Cache.face("BF_" + $game_system.boss_hp_meter[10].to_s) rescue nil if @face_sprite.bitmap == nil
  445.       @face_sprite.bitmap = Cache.face("") if @face_sprite.bitmap == nil
  446.   end
  447.  
  448.   #--------------------------------------------------------------------------
  449.   # ● Refresh Name
  450.   #--------------------------------------------------------------------------              
  451.   def refresh_name
  452.       return if @name_sprite == nil
  453.       @name = $game_system.boss_hp_meter[3]   
  454.       @name_sprite.bitmap.clear
  455.       @name_sprite.bitmap.draw_text(0,0,190,32,@name.to_s)
  456.       refresh_face
  457.       refresh_level
  458.       reset_hp_number
  459.       @hp_old = @meter_cw * @hp / @maxhp
  460.   end
  461.  
  462.   #--------------------------------------------------------------------------
  463.   # ● HP Setup
  464.   #--------------------------------------------------------------------------            
  465.   def hp_setup
  466.       @hp = $game_system.boss_hp_meter[4]
  467.       @maxhp = $game_system.boss_hp_meter[5]
  468.   end  
  469.  
  470.   #--------------------------------------------------------------------------
  471.   # ● Dispose
  472.   #--------------------------------------------------------------------------  
  473.   def dispose
  474.       dispose_layout
  475.       dispose_meter
  476.       dispose_name
  477.       dispose_face
  478.       dispose_level
  479.       dispose_hp_number      
  480.   end
  481.  
  482.   #--------------------------------------------------------------------------
  483.   # ● Dispose Name
  484.   #--------------------------------------------------------------------------              
  485.   def dispose_name
  486.       return if @name_sprite == nil
  487.       @name_sprite.bitmap.dispose
  488.       @name_sprite.dispose
  489.       @name_sprite = nil
  490.   end  
  491.  
  492.   #--------------------------------------------------------------------------
  493.   # ● Dispose Layout
  494.   #--------------------------------------------------------------------------   
  495.   def dispose_layout
  496.       return if @layout == nil
  497.       @layout.dispose
  498.       @layout = nil
  499.   end
  500.  
  501.   #--------------------------------------------------------------------------
  502.   # ● Dispose Meter
  503.   #--------------------------------------------------------------------------      
  504.   def dispose_meter
  505.       return if @meter == nil
  506.       @meter.bitmap.dispose
  507.       @meter.dispose
  508.       @meter = nil
  509.   end
  510.  
  511.   #--------------------------------------------------------------------------
  512.   # ● Dispose Face
  513.   #--------------------------------------------------------------------------  
  514.   def dispose_face
  515.       return if @face_sprite == nil
  516.       dispose_bitmap_face
  517.       @face_sprite.dispose
  518.       @face_sprite = nil
  519.   end
  520.  
  521.   #--------------------------------------------------------------------------
  522.   # ● Dispose Bitmap Face
  523.   #--------------------------------------------------------------------------   
  524.   def dispose_bitmap_face
  525.       return if @face_sprite == nil
  526.       return if @face_sprite.bitmap == nil
  527.       @face_sprite.bitmap.dispose rescue nil
  528.       @face_sprite.bitmap = nil
  529.   end  
  530.  
  531.   #--------------------------------------------------------------------------
  532.   # ● Dispose Level
  533.   #--------------------------------------------------------------------------   
  534.   def dispose_level
  535.       return if @level_sprite == nil
  536.       @level_sprite.bitmap.dispose
  537.       @level_sprite.dispose
  538.       @level_sprite = nil
  539.   end  
  540.  
  541.   #--------------------------------------------------------------------------
  542.   # ● Dispose HP Number
  543.   #--------------------------------------------------------------------------      
  544.   def dispose_hp_number
  545.       return if @hp_number_sprite == nil
  546.       @hp_number_sprite.bitmap.dispose
  547.       @hp_number_sprite.dispose
  548.   end   
  549.  
  550.   #--------------------------------------------------------------------------
  551.   # ● Update
  552.   #--------------------------------------------------------------------------  
  553.   def update
  554.       refresh_hp_meter
  555.       refresh_hp_number if @hp_refresh
  556.       update_hp_meter
  557.       update_hp_number
  558.       update_fade_end
  559.       update_visible
  560.   end
  561.  
  562.   #--------------------------------------------------------------------------
  563.   # ● Update Visible
  564.   #--------------------------------------------------------------------------  
  565.   def update_visible
  566.       return if @meter_image == nil
  567.       vis = bhp_visible?
  568.       @layout.visible = vis   
  569.       @meter.visible = vis   
  570.       @name_sprite.visible = vis   
  571.       @face_sprite.visible = vis   
  572.       @level_sprite.visible = vis   
  573.       @hp_number_sprite.visible = vis   
  574.   end
  575.  
  576.   #--------------------------------------------------------------------------
  577.   # ● Bhp Visible?
  578.   #--------------------------------------------------------------------------  
  579.   def bhp_visible?
  580.       return false if $game_message.visible
  581.       return true
  582.   end
  583.  
  584.   #--------------------------------------------------------------------------
  585.   # ● Update Fade End
  586.   #--------------------------------------------------------------------------   
  587.   def update_fade_end
  588.       return if !$game_temp.battle_end
  589.       return if @meter_image == nil
  590.       @layout.opacity -= 5
  591.       @meter.opacity -= 5
  592.       @name_sprite.opacity -= 5
  593.       @face_sprite.opacity -= 5
  594.       @level_sprite.opacity -= 5
  595.       @hp_number_sprite.opacity -= 5
  596.   end
  597.  
  598.   #--------------------------------------------------------------------------
  599.   # ● Refresh HP Meter
  600.   #--------------------------------------------------------------------------         
  601.   def refresh_hp_meter
  602.       return if !$game_system.boss_hp_meter[2]
  603.       $game_system.boss_hp_meter[2] = false
  604.       hp_setup
  605.       refresh_name if @name != $game_system.boss_hp_meter[3]
  606.   end
  607.  
  608.   #--------------------------------------------------------------------------
  609.   # ● Update HP Meter
  610.   #--------------------------------------------------------------------------            
  611.   def update_hp_meter
  612.       return if @meter_image == nil
  613.       @meter.bitmap.clear
  614.       hp_width = @meter_cw * @hp / @maxhp      
  615.       execute_damage_flow(hp_width)      
  616.       hp_src_rect = Rect.new(@hp_flow, 0,hp_width, @meter_ch)
  617.       @meter.bitmap.blt(0,0, @meter_image, hp_src_rect)  
  618.       @hp_flow += METER_ANIMATION_SPEED
  619.       @hp_flow = 0 if @hp_flow >= @hp_flow_max
  620.   end  
  621.  
  622.   #--------------------------------------------------------------------------
  623.   # ● Execute Damage Flow
  624.   #--------------------------------------------------------------------------
  625.   def execute_damage_flow(hp_width)
  626.       return if @hp_old == hp_width
  627.       n = (@hp_old - hp_width).abs * 3 / 100
  628.       damage_flow = [[n, 2].min,0.5].max
  629.       @hp_old -= damage_flow      
  630.       @hp_old = hp_width if @hp_old <= hp_width
  631.       src_rect_old = Rect.new(0,@meter_ch, @hp_old, @meter_ch)
  632.       @meter.bitmap.blt(0,0, @meter_image, src_rect_old)      
  633.   end   
  634.  
  635. end
  636.  
  637. #==============================================================================
  638. # ■ Spriteset Battle
  639. #==============================================================================
  640. class Spriteset_Battle
  641.  
  642.   #--------------------------------------------------------------------------
  643.   # ● Initialize
  644.   #--------------------------------------------------------------------------  
  645.   alias mog_enemy_bhp_initialize initialize
  646.   def initialize
  647.       mog_enemy_bhp_initialize
  648.       create_boss_hp_meter
  649.   end
  650.  
  651.   #--------------------------------------------------------------------------
  652.   # ● Create Boss HP Meter
  653.   #--------------------------------------------------------------------------  
  654.   def create_boss_hp_meter
  655.       @boss_hp_meter = Boss_HP_Meter.new(@viewport1)
  656.   end
  657.  
  658.   #--------------------------------------------------------------------------
  659.   # ● Dispose
  660.   #--------------------------------------------------------------------------      
  661.   alias mog_enemy_bhp_dispose dispose
  662.   def dispose
  663.       dispose_boss_hp_meter   
  664.       mog_enemy_bhp_dispose
  665.   end  
  666.  
  667.   #--------------------------------------------------------------------------
  668.   # ● Dispose Boss HP Meter
  669.   #--------------------------------------------------------------------------         
  670.   def dispose_boss_hp_meter
  671.       return if @boss_hp_meter == nil
  672.       @boss_hp_meter.dispose
  673.       @boss_hp_meter = nil
  674.   end
  675.  
  676.   #--------------------------------------------------------------------------
  677.   # ● Update
  678.   #--------------------------------------------------------------------------        
  679.   alias mog_enemy_bhp_update update
  680.   def update
  681.       mog_enemy_bhp_update
  682.       update_boss_hp_meter
  683.   end
  684.  
  685.   #--------------------------------------------------------------------------
  686.   # ● Update Boss HP Meter
  687.   #--------------------------------------------------------------------------            
  688.   def update_boss_hp_meter
  689.       return if @boss_hp_meter == nil
  690.       @boss_hp_meter.update
  691.   end
  692.  
  693. end
  694.  
  695. #==============================================================================
  696. # ■ Game_Battler
  697. #==============================================================================
  698. class Game_Battler < Game_BattlerBase
  699.  
  700.   #--------------------------------------------------------------------------
  701.   # ● Item Apply
  702.   #--------------------------------------------------------------------------        
  703.   alias mog_boss_hp_item_apply item_apply
  704.   def item_apply(user, item)
  705.       check_boss_hp_before
  706.       mog_boss_hp_item_apply(user, item)
  707.       check_boss_hp_after
  708.   end
  709.  
  710.   #--------------------------------------------------------------------------
  711.   # ● Regenerate HP
  712.   #--------------------------------------------------------------------------
  713.   alias mog_boss_hp_regenerate_hp regenerate_hp
  714.   def regenerate_hp
  715.       check_boss_hp_before
  716.       mog_boss_hp_regenerate_hp
  717.       check_boss_hp_after
  718.   end  
  719.  
  720.   #--------------------------------------------------------------------------
  721.   # ● Check Boss HP Before
  722.   #--------------------------------------------------------------------------         
  723.   def check_boss_hp_before
  724.       return if self.is_a?(Game_Actor)
  725.       return if !self.boss_hp_meter
  726.       $game_system.boss_hp_meter[6] = self.hp
  727.   end
  728.  
  729.   #--------------------------------------------------------------------------
  730.   # ● Check Boss HP After
  731.   #--------------------------------------------------------------------------            
  732.   def check_boss_hp_after
  733.       return if self.is_a?(Game_Actor)
  734.       return if !self.boss_hp_meter
  735.       $game_system.boss_hp_meter[2] = true
  736.       $game_system.boss_hp_meter[3] = self.name
  737.       $game_system.boss_hp_meter[4] = self.hp
  738.       $game_system.boss_hp_meter[5] = self.mhp
  739.       $game_system.boss_hp_meter[7] = self.level rescue nil     
  740.       $game_system.boss_hp_meter[9] = self.boss_hp_number
  741.   end
  742.  
  743. end
  744.  
  745. #==============================================================================
  746. # ■ Game_Interpreter
  747. #==============================================================================
  748. class Game_Interpreter
  749.  
  750.   #--------------------------------------------------------------------------
  751.   # ● Check Boss Meter
  752.   #--------------------------------------------------------------------------   
  753.   def check_boss_meter
  754.       return if !SceneManager.scene_is?(Scene_Battle)
  755.       iterate_enemy_index(@params[0]) do |enemy|
  756.         if enemy.boss_hp_meter
  757.            $game_system.boss_hp_meter[2] = true
  758.            $game_system.boss_hp_meter[3] = enemy.name
  759.            $game_system.boss_hp_meter[4] = enemy.hp
  760.            $game_system.boss_hp_meter[5] = enemy.mhp
  761.            $game_system.boss_hp_meter[6] = enemy.hp   
  762.            $game_system.boss_hp_meter[7] = enemy.level rescue nil
  763.            $game_system.boss_hp_meter[9] = enemy.boss_hp_number
  764.         end
  765.      end
  766.   end
  767.  
  768.   #--------------------------------------------------------------------------
  769.   # ● Command 331
  770.   #--------------------------------------------------------------------------  
  771.   alias mog_boss_meter_command_331 command_331
  772.   def command_331
  773.       mog_boss_meter_command_331
  774.       check_boss_meter
  775.   end
  776.  
  777.   #--------------------------------------------------------------------------
  778.   # ● Command 334
  779.   #--------------------------------------------------------------------------  
  780.   alias mog_boss_meter_command_334 command_334
  781.   def command_334
  782.       mog_boss_meter_command_334
  783.       check_boss_meter
  784.   end   
  785.  
  786. end
  787.  
  788. #==============================================================================
  789. # ■ BattleManager
  790. #==============================================================================
  791. class << BattleManager
  792.  
  793.   #--------------------------------------------------------------------------
  794.   # ● Init Members
  795.   #--------------------------------------------------------------------------         
  796.   alias mog_boss_meter_init_members init_members
  797.   def init_members
  798.       $game_temp.battle_end = false
  799.       mog_boss_meter_init_members
  800.   end  
  801.  
  802.   #--------------------------------------------------------------------------
  803.   # ● Process Victory
  804.   #--------------------------------------------------------------------------            
  805.   alias mog_boss_meter_process_victory process_victory
  806.   def process_victory
  807.       $game_temp.battle_end = true
  808.       mog_boss_meter_process_victory
  809.   end
  810.  
  811.   #--------------------------------------------------------------------------
  812.   # ● Process Abort
  813.   #--------------------------------------------------------------------------            
  814.   alias mog_boss_meter_process_abort process_abort
  815.   def process_abort
  816.       $game_temp.battle_end = true
  817.       mog_boss_meter_process_abort
  818.   end
  819.  
  820.   #--------------------------------------------------------------------------
  821.   # ● Process Defeat
  822.   #--------------------------------------------------------------------------            
  823.   alias mog_boss_meter_process_defeat process_defeat
  824.   def process_defeat
  825.       $game_temp.battle_end = true
  826.       mog_boss_meter_process_defeat
  827.   end
  828.  
  829. end

作者: 踢腿水上飘    时间: 2017-1-10 16:34
好像很多脚本对中途出现的怪物都没法适用……我都已经放弃中途出现的战斗法了,转而使用多场战斗代替……
比方敌群1是召唤前的战斗,敌人是BOSS一个人,敌群2是召唤后的战斗是BOSS+两个爪牙
在敌群里面设置事件,条件战斗到一定回合或者BOSS血到多少触发,事件内容是:设置一个变量1=BOSS的血,变量2=BOSS血上限,然后变量2 - 变量1
事件-终止战斗-然后文字JJYY一串,然后在BOSS旁边出现2个怪,然后进入敌群2战斗
然后在设置敌群里的事件,增减敌人体力值,BOSS减血=变量2
……




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