O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Ken Customizable HUD

Iniciado por Kenyan, 01/04/2014 às 14:58

01/04/2014 às 14:58 Última edição: 20/01/2017 às 09:27 por King Gerar
Ken Customizable HUD

Compativel com: RMVXA
Compatibilidade: boa
Facilidade de uso:médio
Lag gerado: Dará lag apenas se você usar a face, mas isso pode ser facilmente consetado pelo anti-lag do Raizen

[box class=titlebg]
Condições de Uso
[/box]
Pode-se usar em projetos comerciais e não-comerciais. Pode-se modificar o script, mas por favor não poste em nenhum outro lugar sem me consultar.

[box class=titlebg]
Para que serve o script
[/box]
O script têm essas funções:

       
  • HP
  • MP
  • TP
  • EXP
  • Level
  • Nome
  • Sobrenome
  • Classe
  • Gold
  • Atributos
  • Face
  • Char
  • Status (condições)
  • Nome e ícone da arma equipada
  • Nome e ícone do escudo equipado
  • Nome e ícone da armadura equipada

Obviamente, é possÍvel escolher o que vai e o que não irá aparecer na HUD.
Além dessas opções, também se é possível customizar:

       
  • Posição(x e y) da HUD
  • Tamanho(largura e altura da HUD
  • Opacidade da Window da HUD
  • ID do herói dos atributos da HUD (posição no grupo)
  • Vocabulário do EXP
  • Cores das barras de HP, MP, EXP e TP
[box class=titlebg]
Imagens
[/box]
Existem infinitas combinações, o melhor jeito de visualizá-las é testando.

[box class=titlebg]
Download e Script
[/box]
#==============================================================================
# Ken Customizable Hud
#------------------------------------------------------------------------------
# Adiciona uma HUD completamente configurável e sem imagens ao jogo.
#==============================================================================
module KenHudCst
#==============================================================================
# A Q U I   C O M E Ç A M   A S   C O N F I G U R A Ç Õ E S
#==============================================================================
  HeroID = 0      # posição do herói no grupo
  Xhud = 0        # Posição X da HUD
  Yhud = 0        # Posição Y da HUD
  Whud = 500      # Tamanho em largura da HUD
  Hhud = 500       # Tamanho em altura da HUD
  Opcdd = 0    # Opacidade da janela da HUD (0 para invisível máximo: 255)
  
  GaugeBack = 19 # Fundo do Medidor
  HPGauge1 = 20  # Medidor de HP 1
  HPGauge2 = 21  # Medidor de HP 2
  MPGauge1 = 22  # Medidor de MP 1
  MPGauge2 = 23  # Medidor de MP 2
  MPConsume = 23 # Consumo de MP
  TPGauge1 = 28  # Medidor de TP 1
  TPGauge2 = 29  # Medidor de TP 2
  TPConsume = 29 # Consumo de TP
  EXPGauge1 = 21 # Medidor de EXP 1
  EXPGauge2 = 16 # Medidor de EXP 2
  
  ExpNm = "EXP"   # Vocabulário do exp
#------------------------------------------------------------------------------
# ITEM = [aparece, X, Y, largura]
#------------------------------------------------------------------------------
# ITEM = algo que aparecerá na HUD
#
# aparece = true se quiser aquele item na sua HUD, false se não quiser
# 
# X = posição x do item na HUD
#
# Y = posição y do item na HUD
#
# largura = largura do item ( presente apenas em HP, MP, TP e EXP )
#------------------------------------------------------------------------------
  HP = [false, 0, 0, 124] # HP
  MP = [false, 0, 0, 124] # MP
  TP = [false, 0, 0, 124] # TP
  EXP = [false, 0, 0, 124] # EXP
#------------------------------------------------------------------------------
# ITEM = [aparece, X, Y]
#------------------------------------------------------------------------------
# ITEM = algo que aparecerá na HUD
#
# aparece = true se quiser aquele item na sua HUD, false se não quiser
# 
# X = posição x do item na HUD
#
# Y = posição y do item na HUD
#------------------------------------------------------------------------------
  LEVEL = [false, 0, 0] # LEVEL
  NOME = [false, 0, 0] # NOME
  NOME2 = [false, 0, 0] # APELIDO(segundo nome)
  CLASSE = [false, 0, 0] # CLASSE
  FACE = [false, 0, 0] # FACE
  CHAR = [false, 0, 0] # CHAR
  GOLD = [false, 0, 0] # GOLD
  STATUS = [false, 0, 0] # STATUS(condições)
  MAXHP = [false, 0, 0] # HP MÁXIMO
  MAXMP = [false, 0, 0] # MP MÁXIMO
  ATK = [false, 0, 0] # ATAQUE
  DEF = [false, 0, 0] # DEFESA
  ATKM = [false, 0, 0] # ATAQUE MÁGICO
  DEFM = [false, 0, 0] # DEFESA MÁGICA
  SOR = [false, 0, 0] # SORTE
  AGI = [false, 0, 0] # AGILIDADE

  WEAPON = [ # Não mecha
  Icon = [false, 0, 0], # Ícone da arma equipada
  Name = [false, 0, 0]] # Nome da arma equipada
  
  
  SHIELD = [ # Não mecha
  Icon = [false, 0, 0], # Ícone do escudo/2ªarma equipado
  Name = [false, 0, 0]] # Nome do escudo/2ª arma equipado
  
  
  ARMOR = [ # Não mecha
  Icon = [false, 0, 0], # Ícone da armadura(corpo) equipada
  Name = [false, 0, 0]] # Nome da armadura(corpo) equipada
  
  
#==============================================================================
# A Q U I   T E R M I N A M   A S   C O N F I G U R A Ç Õ E S
#==============================================================================
end
#------------------------------------------------------------------------------
# Criação do método draw_actor_exp
#------------------------------------------------------------------------------
class Window_Base  
  def draw_actor_exp(actor, x, y, vocab, width = 115)
    draw_gauge(x, y, width, actor.exp.to_f / actor.next_level_exp.to_f, exp_gauge_color1, exp_gauge_color2)
    change_color(system_color)
    draw_text(x, y, 30, line_height, vocab)
    draw_current_and_max_values(x, y, width, actor.exp, actor.next_level_exp, 
    normal_color, normal_color)
  end
#------------------------------------------------------------------------------
# Criação do método draw_actor_gold
#------------------------------------------------------------------------------
  include KenHudCst
  def draw_party_gold (x, y)
    draw_currency_value($game_party.gold, Vocab::currency_unit, x, y, 100)
  end
#------------------------------------------------------------------------------
# Criação dos métodos de desenho dos ícones e nomes de equipamentos
#------------------------------------------------------------------------------
  def weapon_icon(actor, x, y)
    icon_index = actor.equips[0].icon_index
    draw_icon(icon_index, x, y)
  end
  def shield_icon(actor, x, y)
    icon_index = actor.equips[1].icon_index
    draw_icon(icon_index, x, y)
  end
  def armor_icon(actor, x, y)
    icon_index = actor.equips[3].icon_index
    draw_icon(icon_index, x, y)
  end
  def weapon_name(actor, x, y)
    nome = actor.equips[0].name
    draw_text(x, y, 20, 150, nome, 0)
  end
  def shield_name(actor, x, y)
    nome = actor.equips[1].name
    draw_text(x, y, 20, 150, nome, 0)
  end
  def armor_name(actor, x, y)
    nome = actor.equips[3].name
    draw_text(x, y, 20, 150, nome, 0)
  end 
#------------------------------------------------------------------------------
# Criação dos métodos de mudança das coresdas barras
#------------------------------------------------------------------------------
  def gauge_back_color;  text_color(GaugeBack)     ; end;    
  def hp_gauge_color1;   text_color(HPGauge1)      ; end;    
  def hp_gauge_color2;   text_color(HPGauge2)      ; end;    
  def mp_gauge_color1;   text_color(MPGauge1)      ; end;    
  def mp_gauge_color2;   text_color(MPGauge2)      ; end;    
  def mp_cost_color;     text_color(MPConsume)     ; end;    
  def tp_gauge_color1;   text_color(TPGauge1)      ; end;    
  def tp_gauge_color2;   text_color(TPGauge2)      ; end;    
  def tp_cost_color;     text_color(TPCondume)     ; end;    
  def exp_gauge_color1;  text_color(EXPGauge1)     ; end;    
  def exp_gauge_color2;  text_color(EXPGauge2)     ; end;
end
#------------------------------------------------------------------------------
# Criação da classe da HUD
#------------------------------------------------------------------------------
class Ken_Customizable_Hud < Window_Base
  include KenHudCst
#------------------------------------------------------------------------------
# initialze - Inicialização da Classe
#------------------------------------------------------------------------------
  def initialize
    super(Xhud, Yhud, Whud, Hhud)
    @act = $game_party.members[HeroID]
    refresh
  end
#------------------------------------------------------------------------------
# * refresh - Atualização da Janela
#------------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.opacity = Opcdd
#------------------------------------------------------------------------------
# Criação do conteúdo da HUD
#------------------------------------------------------------------------------
    draw_actor_hp(@act, HP[1], HP[2], HP[3]) if HP[0]
    draw_actor_mp(@act, MP[1], MP[2], MP[3]) if MP[0]
    draw_actor_tp(@act, TP[1], TP[2], TP[3]) if TP[0]
    draw_actor_exp(@act, EXP[1], EXP[2],ExpNm, EXP[3]) if EXP[0]
    draw_actor_level(@act, LEVEL[1], LEVEL[2]) if LEVEL[0]
    draw_actor_name(@act, NOME[1], NOME[2]) if NOME[0]
    draw_actor_nickname(@act, NOME2[1], NOME2[2]) if NOME2[0]
    draw_actor_class(@act, CLASSE[1], CLASSE[2]) if CLASSE[0]
    draw_actor_face(@act, FACE[1], FACE[2]) if FACE[0]
    draw_actor_graphic(@act, CHAR[1], CHAR[2]) if CHAR[0]
    draw_party_gold(GOLD[1], GOLD[2]) if GOLD[0]
    draw_actor_icons(@act, STATUS[1], STATUS[2]) if STATUS[0]
    draw_actor_param(@act, MAXHP[1], MAXHP[2],0) if MAXHP[0]
    draw_actor_param(@act, MAXMP[1], MAXMP[2],1) if MAXMP[0]
    draw_actor_param(@act, ATK[1], ATK[2],2) if ATK[0]
    draw_actor_param(@act, DEF[1], DEF[2],3) if DEF[0]
    draw_actor_param(@act, ATKM[1], ATKM[2],4) if ATKM[0]
    draw_actor_param(@act, DEFM[1], DEFM[2],5) if DEFM[0]
    draw_actor_param(@act, AGI[1], AGI[2],6) if AGI[0]
    draw_actor_param(@act, SOR[1], SOR[2],7) if SOR[0]
    weapon_icon(@act, WEAPON[0][1], WEAPON[0][2]) if WEAPON[0][0]
    armor_icon(@act, ARMOR[0][1], ARMOR[0][2]) if ARMOR[0][0]
    shield_icon(@act, SHIELD[0][1], SHIELD[0][2]) if SHIELD[0][0]
    weapon_name(@act, WEAPON[1][1], WEAPON[1][2]) if WEAPON[1][0]
    shield_name(@act, SHIELD[1][1], SHIELD[1][2]) if SHIELD[1][0]
    armor_name(@act, ARMOR[1][1], ARMOR[1][2]) if ARMOR[1][0]
  end
end
#------------------------------------------------------------------------------
# Inicialização da classe Scene_Map, onde aparece a HUD
#------------------------------------------------------------------------------
class Scene_Map < Scene_Base
  alias ken_cst_hud_main start
  alias ken_cst_hud_update update
  alias ken_cst_hud_terminate terminate
#------------------------------------------------------------------------------
# Inicialização da scene
#------------------------------------------------------------------------------
  def start
    ken_cst_hud_main
    @cst_hud = Ken_Customizable_Hud.new
  end
#------------------------------------------------------------------------------
# Método update, que chama os métodos refresh e update da HUD
#------------------------------------------------------------------------------
  def update
    ken_cst_hud_update
    @cst_hud.refresh
    @cst_hud.update
  end
  def terminate
    ken_cst_hud_terminate
    @cst_hud.dispose
  end
end
#==============================================================================
# fim do script
# Créditos:
# Kenyan pelo script
# Raizen pela ajuda
# Masked pelas aulas e pela ajuda
# Felipe Joota pelo tutorial
#==============================================================================


[box class=titlebg]
Créditos e Avisos
[/box]
Kenyan pelo script
Raizen pela ajuda
Masked pelas aulas e pela ajuda
Felipe Joota pelo tutorial

Bem, eu estive a usar e coloquei o script direto e ficou tudo em cima de tudo, acho que já deveria colocar predefinido porque acho que não me vou safar muito bem a colocar tudo direito s:

A lag como você disse deve ser gerada pela face...

LEVEL = [true, 0, 0] # LEVEL
  NOME = [true, 0, 0] # NOME
  NOME2 = [true, 0, 0] # APELIDO(segundo nome)
  CLASSE = [true, 0, 0] # CLASSE
  FACE = [true, 0, 0] # FACE
  CHAR = [true, 0, 0] # CHAR
  GOLD = [true, 0, 0] # GOLD
  STATUS = [true, 0, 0] # STATUS(condições)
  MAXHP = [true, 0, 0] # HP MÁXIMO
  MAXMP = [true, 0, 0] # MP MÁXIMO
  ATK = [true, 0, 0] # ATAQUE
  DEF = [true, 0, 0] # DEFESA
  ATKM = [true, 0, 0] # ATAQUE MÁGICO
  DEFM = [true, 0, 0] # DEFESA MÁGICA
  SOR = [true, 0, 0] # SORTE
  AGI = [true, 0, 0] # AGILIDADE

Porque mexer nessas posições todas dá trabalho, por isso acho que deveria colocar um feito por si, e depois modificávamos...

Como não consigo ver direito não posso avaliar s:

[user]Lima[/user]
Sim, a lag(lag é substantivo feminino?) é causada pela face, e pode ser facilmente anulada/diminuída pelo anti-lag do Raizen.
Fiz uma pequena modificação no script, agora, todas as opções vão começar como false, e apenas se você quiser pode colocar true. Se eu fizesse isso que você falou( colocar uma customização inicial e deixar você modifica-la), compensaria mais fazer uma HUD separada e sem nenhuma customização. Se você quiser uma assim, é só pedir. Essa HUD foi criada para o propósito de se poder customizar tudo completamente, para que qualquer um tenha uma HUD totalmente única.

Eu acho que seria bom ter uma amostra, mas se você quer assim, ok!

+ouro

Ok, agora estou sem tempo, mas talvez outro dia eu adicione uma amostra, um script separado que mostre as funções da HUD seria bom.

Então, vejo que é iniciante no RGSS, vou te dar uma dica de ouro.

Nunca faça com que um script desenhe algo na tela a todo frame (quadro), isso é a causa do lag no seu script, (não a face como você disse). O método update na Scene_Map é chamado a cada frame, logo ele invoca o método refresh da sua Hud a todo frame também, que é responsável por atualizar e desenhar a Hud, lagando insuportávelmente.

A solução é você criar uma condição em que a HUD só seja atualizada caso alguma coisa tenha de fato mudado, como HP, MP ou algum item. Um exemplo simples:

def refresh
  if @hp != @act.hp
    redesenha_hud
    @hp = @act.hp
  end
end


Note que isso é apenas um exemplo, vou deixar para que você mesmo implemente essa função, e aprenda, mas se você encontrar muita dificuldade pode me perguntar que te passo uma implementação completa.