Horus Jongleur Itinérant
Nombre de messages : 79 Age : 28 Projet(s) en cours : Les Contes du veilleur Niveau Rpg Maker : 6/10 Jeux Préférés : Oblivion, Gothic 3 Date d'inscription : 18/06/2008
| Sujet: [Map] HUD pour tous les héros Mer 15 Oct 2008, 16:24 | |
| Auteur :Raziel (Allemand) Fonction :Permet d'afficher un HUD simple mais contenant les informations essentielles (PV, PM, statut et apparence) des héros sur la carte. Utilisation :Au début du script, remplacez le 1 dans "SWITCH_ID = 1" par l'id de l'interrupteur de votre choix. C'est celuil qui activera/désactivera l'affichage de l'HUD. Toujours au début du script, remplacez false dans "$center_hud = false" par true si vous voulez centrer l'HUD. Screens :--- Code : - Code:
-
# HUD by Raziel class Scene_Map SWITCH_ID = 1 $center_hud = false alias raz_hud_main main alias raz_hud_update update def main @size = $game_party.actors.size raz_hud_main @hud_window.dispose for i in 0...$game_party.actors.size @hud_dummy[i].dispose end end def update if @size != $game_party.actors.size @hud_window.refresh show_window end if @hud != true main_window end turn_hud_on_off @hud_window.update raz_hud_update end def show_window @size = $game_party.actors.size for i in 0..3 @hud_dummy[i].visible = ($game_party.actors[i] != nil) end end def main_window @opacity = 200 @hud_dummy = [] for i in 0...4 y = $game_party.actors.size - 1 x = 240 - (y * 80) if $center_hud == true @hud_dummy[i] = Window_Base.new(160 * i + x, 372,160, 108) else @hud_dummy[i] = Window_Base.new(160 * i, 372,160, 108) end @hud_dummy[i].opacity = @opacity @hud_dummy[i].visible = false end @hud_window = Window_HUD.new for i in 0...$game_party.actors.size @hud_dummy[i].visible = $game_party.actors[i] != nil end @hud = true end def turn_hud_on_off if $game_switches[SWITCH_ID] == false @hud_window.visible = false for i in 0...$game_party.actors.size @hud_dummy[i].visible = false end end if $game_switches[SWITCH_ID] == true @hud_window.visible = true for i in 0...$game_party.actors.size @hud_dummy[i].visible = true end end end
end
class Window_HUD < Window_Base def initialize super(0, 0, 800, 600) self.contents = Bitmap.new(width - 32, height - 32) self.opacity = 0 for i in 0...$game_party.actors.size actor = $game_party.actors[i] eval("@old_hp#{i+1} = actor.hp; @old_sp#{i+1} = actor.sp; @old_exp#{i+1} = actor.now_exp") end refresh end def refresh self.contents.clear for i in 0...$game_party.actors.size a = $game_party.actors.size - 1 actor = $game_party.actors[i] if $center_hud == true x = (i * 160 + 25) + (240 - (a * 80)) else x = i * 160 + 25 end self.contents.font.size = 21 draw_actor_graphic(actor, x - 15, 445) self.contents.font.color = normal_color self.contents.draw_text(x - 25, 360, 100, 32, actor.name) width = 100 height = 6 draw_slant_bar(x + 8, 396, actor.hp, actor.maxhp, width, height, Color.new(150, 0, 0), Color.new(155, 155, 60)) draw_slant_bar(x + 8, 416, actor.sp, actor.maxsp, width, height, Color.new(0, 0, 150), Color.new(60, 155, 155)) unless actor.level == 99 draw_slant_bar(x + 8, 436, actor.now_exp, actor.next_exp, width, height, Color.new(0, 150, 0), Color.new(60, 255, 60)) else draw_slant_bar(x + 8, 436, 1, 1, width = 100, height = 6, Color.new(0, 150, 0), Color.new(60, 255, 60)) end self.contents.font.size = 16 draw_actor_state(actor, x + 45, 360) self.contents.font.color = normal_color self.contents.font.bold = true self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color self.contents.draw_text(x + 16, 382, 100, 32, "#{actor.hp}/#{actor.maxhp}", 1) self.contents.font.color = actor.sp == 0 ? crisis_color : actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color self.contents.draw_text(x + 16, 402, 100, 32, "#{actor.sp}/#{actor.maxsp}", 1) self.contents.font.color = system_color self.contents.font.size = 20 self.contents.font.bold = false self.contents.draw_text(x, 384, 50, 32, $data_system.words.hp) self.contents.draw_text(x, 404, 50, 32, $data_system.words.sp) self.contents.draw_text(x, 424, 50, 32, "Exp") end end
def update super for i in 0...$game_party.actors.size actor = $game_party.actors[i] if (eval("@old_hp#{i+1}") != actor.hp or eval("@old_sp#{i+1}") != actor.sp or eval("@old_exp#{i+1}") != actor.now_exp) refresh eval("@old_hp#{i+1} = actor.hp; @old_sp#{i+1} = actor.sp; @old_exp#{i+1} = actor.now_exp") end end end end class Window_Base < Window def draw_slant_bar(x, y, min, max, width = 152, height = 6, bar_color = Color.new(150, 0, 0, 255), end_color = Color.new(255, 255, 60, 255)) for i in 0..height self.contents.fill_rect(x + i, y + height - i, width + 1, 1, Color.new(50, 50, 50, 255)) end for i in 1..(height - 1) r = 100 * (height - i) / height + 0 * i / height g = 100 * (height - i) / height + 0 * i / height b = 100 * (height - i) / height + 0 * i / height a = 255 * (height - i) / height + 255 * i / height self.contents.fill_rect(x + i, y + height - i, width, 1, Color.new(r, b, g, a)) end for i in 1..( (min / max.to_f) * width - 1) for j in 1..(height - 1) r = bar_color.red * (width - i) / width + end_color.red * i / width g = bar_color.green * (width - i) / width + end_color.green * i / width b = bar_color.blue * (width - i) / width + end_color.blue * i / width a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width self.contents.fill_rect(x + i + j, y + height - j, 1, 1, Color.new(r, g, b, a)) end end end end
class Game_Actor def now_exp return @exp - @exp_list[@level] end def next_exp return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0 end end | |
|