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

Project1

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

[有事请教] 【已解决】接着是MOG_Boss血条部分所缺失的部分

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3202
在线时间
2521 小时
注册时间
2012-3-1
帖子
768
跳转到指定楼层
1
发表于 前天 07:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 卡奥尼特 于 2025-3-10 16:23 编辑

这个Boss血条实际上也是基于魔改后的版本。

但是在我测试的时候,我发现了一个问题。

当回合结束的时候,Boss血条会切换到最后一位敌人,而不是上次受伤的单位。

所以我的需求比价简单,Boss血条只切换到上一次所受伤的单位即可。

这个是范例工程:
LNX11与MogBoss血条_范例工程.rar (1.6 MB, 下载次数: 5)

这个是脚本代码部分:
脚本代码

Lv3.寻梦者

梦石
0
星屑
2364
在线时间
606 小时
注册时间
2012-5-3
帖子
102

开拓者

2
发表于 前天 21:38 | 只看该作者
比如说,我有4个队友,1打了a,2打了c,3打了b,4打了a。每个队友打的敌人都不同,你把3个敌人全部设置有血量,这样没有意义啊。既然是boss,应该只有某一个敌人是有血量的,其余的都没有才对。

点评

我的作品可是有多Boss的需求哦。  发表于 前天 23:04
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5935
在线时间
1416 小时
注册时间
2015-7-25
帖子
601

极短25参与开拓者

3
发表于 昨天 13:32 | 只看该作者
放在主楼脚本的下面就可以了,只要boss的hp发生了变动(不论是受伤还是恢复),就会自动被记录并显示该boss的血条
RUBY 代码复制
  1. class Game_Battler
  2.   alias mf250310check_boss_hp_after check_boss_hp_after
  3.   def check_boss_hp_after
  4.     mf250310check_boss_hp_after
  5.     if $game_system.boss_hp_meter[4] != $game_system.boss_hp_meter[6]
  6.       $last_change_hp_boss = self
  7.     end
  8.   end
  9. end
  10. class Boss_HP_Meter
  11.   alias mf250310update update
  12.   def update
  13.     cheak_vis_boss
  14.     mf250310update
  15.   end
  16.   def cheak_vis_boss
  17.     return unless $last_change_hp_boss
  18.     $game_system.boss_hp_meter[2] = true
  19.     $game_system.boss_hp_meter[3] = $last_change_hp_boss.name
  20.     $game_system.boss_hp_meter[4] = $last_change_hp_boss.hp
  21.     $game_system.boss_hp_meter[5] = $last_change_hp_boss.mhp
  22.     $game_system.boss_hp_meter[6] = $last_change_hp_boss.hp
  23.     $game_system.boss_hp_meter[7] = $last_change_hp_boss.level rescue nil   
  24.     $game_system.boss_hp_meter[9] = $last_change_hp_boss.boss_hp_number
  25.   end
  26. end

点评

好了,测试有效。  发表于 昨天 16:10

评分

参与人数 1+1 收起 理由
卡奥尼特 + 1 塞糖

查看全部评分

目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.29
同时更新中~
这是属于笨肉包一个人的旅行~(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
旅途的最终目标~ ???(保密~
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2364
在线时间
606 小时
注册时间
2012-5-3
帖子
102

开拓者

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

替换原来类的全部内容即可。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-3-11 01:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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