[Dúvida] - Script + Variável

8 Respostas   400 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

kholyphoenix1

  • *
  • Posts: 175
  • Ouros: 11
  • Só o Senhor é Deus!
Tópico criado em: 09/07/2015 às 07:48 - Última modificação por kholyphoenix1 em 09/07/2015 às 09:46

Bom dia,

Alguém poderia me dá um exemplo de como um script poderia se relacionar com uma variável para validar o valor na variável e atualizar o script para determinada ação quando a variável atingir determinado valor por exemplo o número 12? Fazer com que clima seja de chuva.

Obrigado!!
JeSuS está voltando! Volte para ele antes!

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 1: 09/07/2015 às 07:56

Isso seria para um sistema de hora do dia + clima, né? Bom, eu vou fazer um desse pro
meu projeto, porém seria por eventos, acredito ser mais fácil.
Se for este o caso, tu teria que ter um sistema controlando a hora do dia e outro sistema
baseado em condições que, dependendo do valor na variável da hora, irá mudar o clima
para chuva.
Caso não vá utilizar o de hora do dia, tu pode, sei lá, atribuir um valor aleatório à uma
variável, de 1 a 12 por exemplo. Aí se o valor fosse 12, mudaria o clima para chuva.
Porém digo em caso de eventos, pois scripts não sei nem onde mexer nisso xD

kholyphoenix1

  • *
  • Posts: 175
  • Ouros: 11
  • Só o Senhor é Deus!
Resposta 2: 09/07/2015 às 08:08 - Última modificação por kholyphoenix1 em 09/07/2015 às 08:20

Admin,

Obrigado pela atenção.
O Sistema de clima eu já tenho ou ele trabalha com random + mes (clima: primavera, verão ...)
Na verdade eu preciso de um script que gerencie as minhas HUDs: HP, MP, Estamina, Sede, Fome e Sono.

Bom, estou fazendo um projeto de jogo similar ao Harvest Moon.

Como a Sede, fome e sono estão associados ao clima: Primavera, Verão, Outono e Inverno preciso que o Script se relacione com a variável mês. Quando vê que mês for igual a 1 (Primavera) a HUD de sede por exemplo diminui a cada 550 frames se for mês 4 (inverno) vai diminuir lentamente a cada 1100 frames, entende?

Como não sou bom script mais sei editar um pouco kkkk
Precisava dessa ajuda.
Com a HUD do Faalco/Takkun: http://centrorpg.com/index.php?topic=8166.0

Obrigado!
JeSuS está voltando! Volte para ele antes!

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 3: 09/07/2015 às 08:20

Então, tu já tem a HUD? Porque editar uma pra acrescentar isso acho que seria meio chato.
De qualquer forma, tu vai ter uma barrinha de stamina/sede, e como não é nativa do RPG Maker,
provavelmente tu tem que definir qual o valor vai ser decrescido da stamina a cada intervalo de
tempo. Algo tipo assim:

Código: [Selecionar]
@stamina -= 5Diminuiria 5 da variável stamina. Porém tu quer diminuir quantidades diferentes de acordo com
a variável de estação do ano, certo? Então seria algo tipo:

Código: [Selecionar]
case @estacao
when 1 # Verão
  @stamina -= 7
when 2 # Outono
  @stamina -= 3
when 3 # Inverno
  @stamina -= 1
when 4 # Primavera
  @stamina -= 5
O código acima verifica que caso a variável @estação tenha o valor 1, irá aplicar a situação
1, caso tinha o valor 2, aplicará a situação 2, e assim por diante.
Não sei o quão isso pode ser aplicado no script que tem, talvez quem o programou tenha
feito bem diferente de como imagino, mas talvez dê para entender uma das formas de como fazer.

kholyphoenix1

  • *
  • Posts: 175
  • Ouros: 11
  • Só o Senhor é Deus!
Resposta 4: 09/07/2015 às 08:27

Admin,

Se fosse apartir de frames como seria?
Tipo a cada 550 frames reduza 5 da variável sede?
JeSuS está voltando! Volte para ele antes!

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 5: 09/07/2015 às 08:35

Sim, tu poderia por uma estrutura tipo assim no método de atualização da HUD:
Código: [Selecionar]
def stamina_update
  tempo += 1
  if tempo == 550
    case @estacao
    when 1 # Verão
      @stamina -= 7
    when 2 # Outono
      @stamina -= 3
    when 3 # Inverno
      @stamina -= 1
    when 4 # Primavera
      @stamina -= 5
    end
    tempo = 0
  end
end
Aí a cada frame ela iria adicionar +1 à variável de tempo. Quando ela alcançasse 550,
iria ver quanto diminuir de acordo com a estação do ano e em seguida zerar o contador
de tempo para reiniciar o processo.

kholyphoenix1

  • *
  • Posts: 175
  • Ouros: 11
  • Só o Senhor é Deus!
Resposta 6: 09/07/2015 às 08:54 - Última modificação por kholyphoenix1 em 09/07/2015 às 08:57

Editei o Script do Takkun e deixei ele assim. Não entendo 100% mais uns 50% entendo alguma coisa.

Código: [Selecionar]
#===============================================================================
# * [VXACE] Takkun Gradient HUD
#-------------------------------------------------------------------------------
# * Por Takkun
# * Versão: 1.0 BR
# * Lançada em: 02/05/2014
#===============================================================================

$centrorpg = [] if $centrorpg.nil?
$centrorpg << ["Takkun Gradient HUD", 1.0]

#===============================================================================
# ■  Modulo de Configuração
#===============================================================================
module HUDGradient
 
  @Thirst = 100
 
  # HP
  Vocab_HP = "HP"                 #Nome que irá aparecer na barra de HP.
  HP1 = Color.new(50,0,0)         #Cor primária da barra de HP.
  HP2 = Color.new(222,26,50)      #Cor secundária da barra de HP.
 
  # MP
  Vocab_MP = "MP"                 #Nome que irá aparecer na barra de MP.
  MP1 = Color.new(50,60,60)       #Cor primária da barra de MP.
  MP2 = Color.new(0,240,50)       #Cor secudária da barra de MP.
 
  # Experiência
  Vocab_EXP = "EXP"               #Nome que irá aparecer na barra de EXP.
  EXP1 = Color.new(141,63,180)    #Cor primária da barra de EXP.
  EXP2 = Color.new(96,47,121)     #Cor secudária da barra de EXP.
 
  # Estamina
 
  # Sede
  Vocab_THI = "SEDE"
  THI1 = Color. new(10,20,30)
  THI2 = Color. new(40,50,60)
 
  # Fome
  # Sono
 
  Fundo1 = Color.new(0,0,0)       #Cor primária do fundo das barras.
  Fundo2 = Color.new(240,240,80)  #Cor secudária do fundo das barras.
  Fonte = "Arial"          #Fonte a ser usada nos textos. # Trebuchet MS
  Fonte_Size = 10                 #Tamanho da fonte a ser usada nos textos.
 
end

#==============================================================================
# ■  Fim - Modulo de Configuração
#==============================================================================
class Takkun_Gradient_HUD < Sprite
 
  # Inicializar
  def initialize(view)
  super(view)
   
    # HUD
    @ch1 = HUDGradient::HP1
    @ch2 = HUDGradient::HP2
    @cm1 = HUDGradient::MP1
    @cm2 = HUDGradient::MP2
    @ce1 = HUDGradient::EXP1
    @ce2 = HUDGradient::EXP2
    @thi1 = HUDGradient::THI1
    @thi2 = HUDGradient::THI2
   
    # Fundo
    @back = HUDGradient::Fundo1     
    @back2 = HUDGradient::Fundo2
    self.bitmap = Bitmap.new(200,200)
   
    # Fonte
    self.bitmap.font.name = HUDGradient::Fonte
    self.bitmap.font.size = HUDGradient::Fonte_Size
    self.z = 300
    update
   
  end
 
  # Atualizar Script
  def update
    super
    self.bitmap.clear
    actor = $game_actors[1]
   
  # HUD HP
    hp = $game_actors[1].hp
    mhp = $game_actors[1].mhp
    wb = 116 * hp / mhp
    self.bitmap.fill_rect(10, 10, 120, 10, @back)
    self.bitmap.fill_rect(11, 11, 118, 8, @back2)
    self.bitmap.fill_rect(12, 12, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 12, wb, 6, @ch1, @ch2)
    self.bitmap.draw_text(10, 0, 200, 24, HUDGradient::Vocab_HP)
   
  # HUD MP
    mp = $game_actors[1].mp
    mmp = $game_actors[1].mmp
    wb = 116 * mp / mmp
    self.bitmap.fill_rect(10, 30, 120, 10, @back)
    self.bitmap.fill_rect(11, 31, 118, 8, @back2)
    self.bitmap.fill_rect(12, 32, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 32, wb, 6, @cm1, @cm2)
    self.bitmap.draw_text(10, 20, 200, 24, HUDGradient::Vocab_MP)
   
  # HUD EXP
    exp = $game_actors[1].exp.to_f
    lexp = $game_actors[1].next_level_exp.to_f
    wb = 116 * exp / lexp
    self.bitmap.fill_rect(10, 50, 120, 10, @back)
    self.bitmap.fill_rect(11, 51, 118, 8, @back2)
    self.bitmap.fill_rect(12, 52, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 52, wb, 6, @ce1, @ce2)
    self.bitmap.draw_text(10, 40, 200, 24, HUDGradient::Vocab_EXP)
   
  # HUD Sede
   
    def stamina_update
      tempo += 1
      if tempo == 550
        case @mes # Estação
        when 1 # Primavera
          @thirst -= 7
        when 2 # Verão
          @thirst -= 3
        when 3 # Outono
          @thirst -= 1
        when 4 # Inverno
          @thirst -= 5
        end
        tempo = 0
      end
    end
   
    self.bitmap.fill_rect(10, 70, 120, 10, @back)
    self.bitmap.fill_rect(11, 71, 118, 8, @back2)
    self.bitmap.fill_rect(12, 72, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 32, wb, 6, @thi1, @thi2)
    self.bitmap.draw_text(10, 60, 200, 24, HUDGradient::Vocab_THI)
   
  end

  # Finalizar
  def dispose
    self.bitmap.dispose
    super
  end
end

# ?
class Spriteset_Map
  alias :or_initialize :initialize
  def initialize
    @hud = Takkun_Gradient_HUD.new(@viewport2)
    or_initialize
  end
  alias :or_update :update
  def update
    @hud.update if Graphics.frame_count % 5 == 1
    or_update
  end
  alias :or_dispose :dispose
  def dispose
    @hud.dispose
    or_dispose
  end
end

Porém no gameplay não atualiza >.< sou nob d+!



JeSuS está voltando! Volte para ele antes!

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 7: 09/07/2015 às 09:15

Bom, as partes que atualizam o HP, MP e EXP estão dentro do update da HUD, aí como
tu colocou essa parte que atualiza a stamina junto com elas, também dentro do update,
tu não precisa (e nem deve) criar um novo método com a linha "def stamina_update".
E repare que, antes de toda atualização gráfica, tem um cálculo para saber qual vai ser
o tamanho da barrinha.

Código: [Selecionar]
hp = $game_actors[1].hp # HP atual
mhp = $game_actors[1].mhp # HP Máximo
wb = 116 * hp / mhp # largura da barrinha * hp atual / hp máximo
Tu tem que fazer essa cálculo também, se não sua HUD não vai ter informações para serem
atualizadas.

kholyphoenix1

  • *
  • Posts: 175
  • Ouros: 11
  • Só o Senhor é Deus!
Resposta 8: 09/07/2015 às 09:48

Parei aqui eu não sei terminar não :(
Obrigado por toda ajuda.
Abraço!

Código: [Selecionar]
#===============================================================================
# * [VXACE] Takkun Gradient HUD
#-------------------------------------------------------------------------------
# * Por Takkun
# * Versão: 1.0 BR
# * Lançada em: 02/05/2014
#===============================================================================

$centrorpg = [] if $centrorpg.nil?
$centrorpg << ["Takkun Gradient HUD", 1.0]

#===============================================================================
# ■  Modulo de Configuração
#===============================================================================

module HUDGradient
 
  # HP
  Vocab_HP = "HP"                 #Nome que irá aparecer na barra de HP.
  HP1 = Color.new(50,0,0)         #Cor primária da barra de HP.
  HP2 = Color.new(222,26,50)      #Cor secundária da barra de HP.
 
  # MP
  Vocab_MP = "MP"
  MP1 = Color.new(50,60,60)
  MP2 = Color.new(0,240,50)
 
  # Experiência
  Vocab_EXP = "EXP"
  EXP1 = Color.new(141,63,180)
  EXP2 = Color.new(96,47,121)
 
  # Estamina
  Vocab_STA = "ESTAMINA"
  STA1 = Color.new(0,0,0)
  STA2 = Color.new(0,0,0)
 
  # Sede
  Vocab_THI = "SEDE"
  THI1 = Color.new(0,0,0)
  THI2 = Color.new(0,0,0)
 
  # Fome
  Vocab_HUN = "FOME"
  HUN1 = Color.new(0,0,0)
  HUN2 = Color.new(0,0,0)
 
  # Sono
  Vocab_SLE = "SONO"
  SLE1 = Color.new(0,0,0)
  SLE2 = Color.new(0,0,0)
 
  # Fundo
  Fundo1 = Color.new(0,0,0)
  Fundo2 = Color.new(240,240,80)
 
  # Fonte
  Fonte = "Arial"                 #Fonte dos textos. Padrão: Trebuchet MS
  Fonte_Size = 10                 #Tamanho da fonte dos textos.
 
end

#==============================================================================
# ■  Fim - Modulo de Configuração
#==============================================================================

class Takkun_Gradient_HUD < Sprite

# ----------------
# Inicializar
# ----------------
 
  def initialize(view)
  super(view)
   
    # HUD
    @v_hp1  = HUDGradient::HP1
    @v_hp2  = HUDGradient::HP2
    @v_mp1  = HUDGradient::MP1
    @v_mp2  = HUDGradient::MP2
    @v_exp1 = HUDGradient::EXP1
    @v_exp2 = HUDGradient::EXP2
    @v_sta1 = HUDGradient::STA1
    @v_sta2 = HUDGradient::STA2
    @v_thi1 = HUDGradient::THI1
    @v_thi2 = HUDGradient::THI2
    @v_hun1 = HUDGradient::HUN1
    @v_hun2 = HUDGradient::HUN2
    @v_sle1 = HUDGradient::SLE1
    @v_sle2 = HUDGradient::SLE2
   
    # Fundo
    @back = HUDGradient::Fundo1     
    @back2 = HUDGradient::Fundo2
    self.bitmap = Bitmap.new(200,200)
   
    # Fonte
    self.bitmap.font.name = HUDGradient::Fonte
    self.bitmap.font.size = HUDGradient::Fonte_Size
    self.z = 300 #?
    update
   
  end

# ----------------
# Atualizar Script
# ----------------

  def update
    super
    self.bitmap.clear
    actor = $game_actors[1]
   
  # HUD HP
    hp = $game_actors[1].hp
    mhp = $game_actors[1].mhp
    wb = 116 * hp / mhp
    self.bitmap.fill_rect(10, 10, 120, 10, @back)
    self.bitmap.fill_rect(11, 11, 118, 8, @back2)
    self.bitmap.fill_rect(12, 12, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 12, wb, 6, @v_hp1, @v_hp2)
    self.bitmap.draw_text(10, 5, 200, 24, HUDGradient::Vocab_HP)
   
  # HUD MP
    mp = $game_actors[1].mp
    mmp = $game_actors[1].mmp
    wb = 116 * mp / mmp
    self.bitmap.fill_rect(10, 20, 120, 10, @back)
    self.bitmap.fill_rect(11, 21, 118, 8, @back2)
    self.bitmap.fill_rect(12, 22, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 32, wb, 6, @v_mp1, @v_mp2)
    self.bitmap.draw_text(10, 15, 200, 24, HUDGradient::Vocab_MP)
   
  # HUD EXP
    exp = $game_actors[1].exp.to_f
    lexp = $game_actors[1].next_level_exp.to_f
    wb = 116 * exp / lexp
    self.bitmap.fill_rect(10, 30, 120, 10, @back)
    self.bitmap.fill_rect(11, 31, 118, 8, @back2)
    self.bitmap.fill_rect(12, 32, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 52, wb, 6, @v_exp1, @v_exp2)
    self.bitmap.draw_text(10, 25, 200, 24, HUDGradient::Vocab_EXP)
   
  # HUD Estamina
    self.bitmap.fill_rect(10, 40, 120, 10, @back)
    self.bitmap.fill_rect(11, 41, 118, 8, @back2)
    self.bitmap.fill_rect(12, 42, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 32, wb, 6, @v_sta1, @v_sta2)
    self.bitmap.draw_text(10, 35, 200, 24, HUDGradient::Vocab_STA)
   
  # HUD Sede 
    def stamina_update
      tempo += 1
      if tempo == 550
        case @Mes # Estação
        when 1 # Primavera
          @Thirst -= 7
        when 2 # Verão
          @Thirst -= 3
        when 3 # Outono
          @Thirst -= 1
        when 4 # Inverno
          @Thirst -= 5
        end
        tempo = 0
      end
    end
   
    self.bitmap.fill_rect(10, 50, 120, 10, @back)
    self.bitmap.fill_rect(11, 51, 118, 8, @back2)
    self.bitmap.fill_rect(12, 52, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 32, wb, 6, @v_thi1, @v_thi2)
    self.bitmap.draw_text(10, 45, 200, 24, HUDGradient::Vocab_THI)

    # HUD Fome
    self.bitmap.fill_rect(10, 60, 120, 10, @back)
    self.bitmap.fill_rect(11, 61, 118, 8, @back2)
    self.bitmap.fill_rect(12, 62, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 32, wb, 6, @v_hun1, @v_hun2)
    self.bitmap.draw_text(10, 55, 200, 24, HUDGradient::Vocab_HUN)
   
    # HUD Sono
    self.bitmap.fill_rect(10, 70, 120, 10, @back)
    self.bitmap.fill_rect(11, 71, 118, 8, @back2)
    self.bitmap.fill_rect(12, 72, 116, 6, @back)
    self.bitmap.gradient_fill_rect(12, 32, wb, 6, @v_sle1, @v_sle2)
    self.bitmap.draw_text(10, 65, 200, 24, HUDGradient::Vocab_SLE)
   
  end

  # Finalizar
  def dispose
    self.bitmap.dispose
    super
  end
end

# ?
class Spriteset_Map
  alias :or_initialize :initialize
  def initialize
    @hud = Takkun_Gradient_HUD.new(@viewport2)
    or_initialize
  end
  alias :or_update :update
  def update
    @hud.update if Graphics.frame_count % 5 == 1
    or_update
  end
  alias :or_dispose :dispose
  def dispose
    @hud.dispose
    or_dispose
  end
end
JeSuS está voltando! Volte para ele antes!