#============================================================================== # 功能:战斗中显示敌人血和蓝于敌人脚下 # 适用:RMVX Ace # 作者:殇殃 2012.3.10 # 使用方法:复制整个脚本插入到Main之前 # 注意:由于血条是显示在敌人脚下,所以敌群的位置不能太靠底部,不然会被挡住。 # 可以自行更改坐标修改显示位置、血条的颜色等。 #============================================================================== # ■ Window_Base #------------------------------------------------------------------------------ # 游戏中全部窗口的超级类。 #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● 描绘敌人HP #-------------------------------------------------------------------------- def draw_enemy_hp(enemy, x, y, width = 80) draw_gauge(x, y, width, enemy.hp_rate, hp_gauge_color1, hp_gauge_color2) self.contents.font.color = system_color self.contents.draw_text(x, y, 30, line_height, Vocab::hp_a) self.contents.font.color = hp_color(enemy) self.contents.draw_text(x + width - 64, y, 64, line_height, enemy.hp, 2) #一个数字占16像素 end #-------------------------------------------------------------------------- # ● 绘制敌人MP #-------------------------------------------------------------------------- def draw_enemy_mp(enemy, x, y, width = 80) draw_gauge(x, y, width, enemy.mp_rate, mp_gauge_color1, mp_gauge_color2) self.contents.font.color = system_color self.contents.draw_text(x, y, 30, line_height, Vocab::mp_a) self.contents.font.color = mp_color(enemy) self.contents.draw_text(x + width - 64, y, 64, line_height, enemy.mp, 2) end end #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ # 战斗显示用活动块。Game_Battler 类的实例监视、 # 活动块的状态的监视、活动块状态自动变化。 #============================================================================== class Sprite_Battler < Sprite_Base #-------------------------------------------------------------------------- # ● 初始化对象 # viewport : 视区 # battler : 战斗者 (Game_Battler) #-------------------------------------------------------------------------- def initialize(viewport, battler = nil) super(viewport) [url=home.php?mod=space&uid=133701]@battler[/url] = battler @battler_visible = false @effect_type = nil @effect_duration = 0 if @battler.is_a?(Game_Enemy) width = 24 + 80 #边距12*2+血条的长度(在draw_enemy_hp中定义) height = 24 + 24*2 #边距12*2+line_height*2 x = @battler.screen_x - width/2 #screen_x是怪物图片水平方向上的中点位置 y = @battler.screen_y - 12 #边距12,显示HP/MP的窗口无边框 @enemy_hpmp_window = Window_Base.new(x, y, width, height) @enemy_hpmp_window.opacity = 0 @enemy_hpmp_window.contents = Bitmap.new(width - 24, height - 24)#位图比窗口小24像素取消边框 @enemy_hpmp_window.draw_enemy_hp(@battler, 0, 0) @old_hp = -1 @enemy_hpmp_window.draw_enemy_mp(@battler, 0, 24) @old_mp = -1 end end #-------------------------------------------------------------------------- # ● 释放 #-------------------------------------------------------------------------- def dispose if self.bitmap != nil self.bitmap.dispose @enemy_hpmp_window.dispose end super end #-------------------------------------------------------------------------- # ● 更新画面 #-------------------------------------------------------------------------- def update super if @battler == nil self.bitmap = nil else @use_sprite = @battler.use_sprite? if @use_sprite update_bitmap update_origin update_position end setup_new_effect setup_new_animation update_effect if @enemy_hpmp_window != nil and (@old_hp != @battler.hp or @old_mp != @battler.mp) if @battler.hp == 0 @enemy_hpmp_window.hide else @enemy_hpmp_window.contents.clear @enemy_hpmp_window.draw_enemy_hp(@battler, 0, 0) @old_hp = @battler.hp @enemy_hpmp_window.draw_enemy_mp(@battler, 0, 24) @old_mp = @battler.mp @enemy_hpmp_window.show #怪物死后再被复活 end #if battler.hp == 0 end end #if @battler == nil end end
#============================================================================== # +++ MOG - Enemy HP Meter (v1.1) +++ #============================================================================== # By Moghunter #============================================================================== # Apresenta um medidor animado com o HP do inimigo. #============================================================================== # Para ocultar o HP do inimigo use a TAG abaixo na caixa de notas. # # <Hide HP> # #============================================================================== # Serão necessários as imagens. # # Battle_Enemy_HP_Layout.png # Battle_Enemy_HP_Meter.png # # #============================================================================== #============================================================================== # ● Histórico (Version History) #============================================================================== # v 1.1 - Corrigido o erro de crash randômico. (relativo a dispose de imagem.) #============================================================================== module MOG_ENEMY_HP #Posição geral do medidor em relação ao battler. POSITION_CORRECTION = [6,10] #Posição do medidor de HP. HP_METER_POSITION = [2,4] #Prioridade do medidor na tela. PRIORITY_Z = 1000 end #============================================================================== # ■ Game Enemy #============================================================================== class Game_Enemy < Game_Battler attr_accessor :hp_meter_active #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_enemy_hp_initialize initialize def initialize(index, enemy_id) mog_enemy_hp_initialize(index, enemy_id) hide = enemy.note =~ /<Hide HP>/i ? true : false @hp_meter_active = [false,hide] end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ● Item Apply #-------------------------------------------------------------------------- alias mog_enemy_hp_item_apply item_apply def item_apply(user, item) mog_enemy_hp_item_apply(user, item) if self.is_a?(Game_Enemy) self.hp_meter_active[0] = true if @result.hp_damage != 0 end end #-------------------------------------------------------------------------- # ● Regenerate HP #-------------------------------------------------------------------------- alias mog_enemy_hp_regenerate_hp regenerate_hp def regenerate_hp mog_enemy_hp_regenerate_hp if self.is_a?(Game_Enemy) self.hp_meter_active[0] = true if @result.hp_damage != 0 end end end #============================================================================== # ■ Battle_Hud #============================================================================== class Enemy_HP include MOG_ENEMY_HP #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil,enemy) dispose @enemy = enemy @fade_time = -1 create_layout create_hp_meter b_pos = [enemy.screen_x - (@layout.width / 2) + POSITION_CORRECTION[0], enemy.screen_y + POSITION_CORRECTION[1] - (@layout.height / 2)] @layout.opacity = 0 @org_pos1 = [b_pos[0],b_pos[1]] @layout.x = @org_pos1[0] @layout.y = @org_pos1[1] @layout.visible = false @hp_meter.opacity = 0 @hp_meter.visible = false @org_pos2 = [b_pos[0] + HP_METER_POSITION[0], b_pos[1] + HP_METER_POSITION[1]] @hp_meter.x = @org_pos2[0] @hp_meter.y = @org_pos2[1] @hp_meter.viewport = viewport @hp_meter.z = PRIORITY_Z @layout.viewport = viewport @layout.z = PRIORITY_Z @enemy.hp_meter_active[0] = false @hide = @enemy.hp_meter_active[1] end #-------------------------------------------------------------------------- # ● Create HP Meter #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = Cache.system("Battle_Enemy_HP_Layout") end #-------------------------------------------------------------------------- # ● Create HP Meter #-------------------------------------------------------------------------- def create_hp_meter @meter_image = Cache.system("Battle_Enemy_HP_Meter") @meter_cw = @meter_image.width @meter_ch = @meter_image.height / 2 @hp_meter = Sprite.new @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch) @hp_width_old = @meter_cw * @enemy.hp / @enemy.mhp end #-------------------------------------------------------------------------- # ● Hp Flow Update #-------------------------------------------------------------------------- def update_hp_flow return if !@layout.visible hp_width = @meter_cw * @enemy.hp / @enemy.mhp @hp_meter.bitmap.clear execute_damage_flow(hp_width) hp_src_rect = Rect.new(0, 0,hp_width, @meter_ch) @hp_meter.bitmap.blt(0,0, @meter_image, hp_src_rect) end #-------------------------------------------------------------------------- # ● Execute Damage Flow #-------------------------------------------------------------------------- def execute_damage_flow(hp_width) n = (@hp_width_old - hp_width).abs * 3 / 100 damage_flow = [[n, 2].min,0.5].max @hp_width_old -= damage_flow if @hp_width_old <= hp_width @hp_width_old = hp_width end src_rect_old = Rect.new(0,@meter_ch,@hp_width_old, @meter_ch) @hp_meter.bitmap.blt(0,0, @meter_image, src_rect_old) end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose return if @meter_image == nil @layout.bitmap.dispose @layout.dispose @hp_meter.bitmap.dispose @hp_meter.dispose @meter_image.dispose @meter_image = nil end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update return if @meter_image == nil return if @hide update_fade update_visible update_hp_flow refresh if @enemy.hp_meter_active[0] end #-------------------------------------------------------------------------- # ● Update Fade #-------------------------------------------------------------------------- def update_fade @fade_time -= 1 if @fade_time > 0 return if @fade_time != 0 @layout.opacity -= 10 @hp_meter.opacity -= 10 @layout.x += 1 @hp_meter.x += 1 @fade_time = -1 if @layout.opacity == 0 end #-------------------------------------------------------------------------- # ● Update Visible #-------------------------------------------------------------------------- def update_visible return if !@layout.visible vis = can_visible? @layout.visible = vis @hp_meter.visible = vis end #-------------------------------------------------------------------------- # ● Refresh #-------------------------------------------------------------------------- def refresh @enemy.hp_meter_active[0] = false @layout.opacity = 255 @hp_meter.opacity = 255 @layout.visible = true @hp_meter.visible = true @fade_time = 60 @layout.x = @org_pos1[0] @layout.y = @org_pos1[1] @hp_meter.x = @org_pos2[0] @hp_meter.y = @org_pos2[1] hp_width = @meter_cw * @enemy.hp / @enemy.mhp @hp_width_old = hp_width if @hp_width_old < hp_width update_hp_flow end #-------------------------------------------------------------------------- # ● Can Visible? #-------------------------------------------------------------------------- def can_visible? return false if @layout.opacity == 0 return true end end #============================================================================== # ■ Spriteset Battle #============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_enemy_hp_initialize initialize def initialize mog_enemy_hp_initialize create_enemy_hp end #-------------------------------------------------------------------------- # ● Create Battle Hud #-------------------------------------------------------------------------- def create_enemy_hp dispose_enemy_hp @enemy_hp = [] for i in $game_troop.members @enemy_hp.push(Enemy_HP.new(@viewport1,i)) end end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- alias mog_enemy_hp_dispose dispose def dispose mog_enemy_hp_dispose dispose_enemy_hp end #-------------------------------------------------------------------------- # ● Dispose Enemy HP #-------------------------------------------------------------------------- def dispose_enemy_hp return if @enemy_hp == nil @enemy_hp.each {|sprite| sprite.dispose } @enemy_hp.clear @enemy_hp = nil end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- alias mog_enemy_hp_update update def update mog_enemy_hp_update update_enemy_hp end #-------------------------------------------------------------------------- # ● Update Enemy HP #-------------------------------------------------------------------------- def update_enemy_hp return if @enemy_hp == nil @enemy_hp.each {|sprite| sprite.update } end end $mog_rgss3_enemy_hp_meter = true
1.jpg (94.6 KB, 下载次数: 13)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |