[Map] HUD pour tous les héros

Poster un nouveau sujet   Répondre au sujet

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Map] HUD pour tous les héros

Message par Horus le Mer 15 Oct - 10:21

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

_________________



- Projet en cours : Les Contes du Veilleur -

Horus
Puissance Ténébreuse
Puissance Ténébreuse

Nombre de messages: 30
Age: 13
Date d'inscription: 04/08/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Poster un nouveau sujet   Répondre au sujet
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum