Criando uma Scene_Status (básica) Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Criando uma Scene_Status (básica)

2 participantes

Ir para baixo

Criando uma Scene_Status (básica) Empty Criando uma Scene_Status (básica)

Mensagem por Hatsuki Morturo Seg Ago 15, 2011 2:51 pm

Criando uma Scene_Status (básica) 9KoKC
Bom, isso pode ser extremamente fácil para uns, porém pode ser muito difícil para
outros, então decidi fazer esse tutoriail básico de como criar uma simples Scene_Status.
Somente para jogos ONLINE.

Obsrvação: Salve uma cópia do projeto antes de começar o tutorial, eu não me responsabilizo caso
haja perda de algum material.
Criando uma Scene_Status (básica) DCZdu

Criando uma Scene_Status (básica) QyGbo
O que vamos fazer?
Vamos criar uma Scene_Status pro seu jogo.
É difícil?
Particularmente não, mas talvez seja um pouco complicado.
Leva muito tempo?
Um pouco, se você entender rápido talvez demore menos.
Criando uma Scene_Status (básica) DCZdu

Criando uma Scene_Status (básica) GS62u
Abra ou crie um projeto base, de preferência que seja um com base no np master v3.
Com seu projeto aberto, você irá nos scripts (f11), procurará por: [WIN] Window_Status

Nesse script se encontra a hud do seu jogo.
Apague tudo, e depois digite(digitar não é dar ctrl+c e ctrl+v) o seguinte:
Aqui vou fazer uma variável de Cash, só pra implementar o tutorial.

Código:
class Window_Status < Window_Base
  def initialize
    super(25,70,350,290)
    self.contents = Bitmap.new(width - 32, height - 32)
    @dragable = true
    @closable = true
    self.z = 999999
    self.windowskin = RPG::Cache.windowskin("Blank")
    self.back_opacity = 200 #opacidade
    if User_Edit::DISTRIBUIR_ACTIVE == true # botões para add pts
    @str = Button.new(self,85, 90, " + ") {str}
    @agi = Button.new(self,85, 110, " + ") {agi}
    @dex = Button.new(self,85, 130, " + ") {dex}
    @int = Button.new(self,85, 150, " + ") {int}
    end
    refresh
  end
 
  def update # atualizando
    super
    refresh if something_changed?
  end
 
  def on_close
    self.visible = false
    self.active = false
    $fechando_ativar = true
  end


super(25,70,350,290): 25 e 70 = localização na tela / 350 e 290, altura e largura

self.windowskin = RPG::Cache.windowskin("Blank"): ws que usaremos
@dragable = true : Pode mecher
@closable = true :
Pode feicharAgora criaremos um refresh para os itens da status:
Código:
  def refresh
    @actor = $game_party.actors[0] # o char
    @old_lvl = @actor.level # lvl
    @old_gold = $game_party.item_number(Item_Ouro::Item_Id.to_i) # gold
    @old_hp = @actor.hp # hp
    @old_sp = @actor.sp # mp
    @old_exp = @actor.now_exp # xp
    @old_maxhp = @actor.maxhp #max hp
    @old_maxsp = @actor.maxsp # max mp
    @old_pontos = $distribuir_pontos # pontos
    @old_str = @actor.str # str
    @old_dex = @actor.dex #dex
    @old_int = @actor.int # int
    @old_agi = @actor.agi # agi
    self.contents.clear # limpa

Fizemos isso, para tipo, quando eu to com essa janela aberta e to lutando contra um monstro, assim que o monstro me ataca eu perco hp, ai vai acontecer o mesmo.
Agora vamos por uma imagem de fundo
Código:
    # Mostra a imagem de fundo
    fundo3 = RPG::Cache.picture("IMAGEM")
    fundo1 = fundo3.width
    fundo2 = fundo3.height
    fundo4 = Rect.new(0,0,fundo1,fundo2)
    self.contents.blt(0,0,fundo3,fundo4)

Como eu havia dito, irei por o sistema de cash incluso na status, então para o cash usaremos a var 9, agora adicionaremos: Nome, Level, Guild, Cash e Ouro.
Para isso usaremos o seguinte código:

Código:
    # Nome
    self.contents.draw_text(x, y, 200, 32, "#{@actor.name}")
    # Level
    self.contents.draw_text(x, y, 100, 32, "#{@actor.level}")
    # Guild
    self.contents.draw_text(x, y, 100, 32, $game_party.actors[0].guild)
    # Ouro
    self.contents.draw_text(x, y, 100, 32, $game_party.item_number(Item_Ouro::Item_Id.to_i).to_s)
    # Cash
    self.contents.draw_text(x, y, 100, 32, $game_variables[9].to_s,0)

Como podem ver no script, nós declaramos todos os atributos que falei.
Mas o que é uma status sem os atributos principais?
Então vamos adicionar Str, Agi, Int e outros.
Bom, esqueci de falar, que no lugar de X e Y, ficarão as coordenadas dos nomes, ou seja, sua posição.
Código:
    # Str
    self.contents.draw_text(x, y, 200, 32, "#{@actor.str}")
    # Agi
    self.contents.draw_text(x, y, 200, 32, "#{@actor.agi}")
    # Def
    self.contents.draw_text(x, y, 200, 32, "#{@actor.dex}")
    # Int
    self.contents.draw_text(x, y, 200, 32, "#{@actor.int}")
[center]Agora adicionaremos os pontos, ou seja, faremos com que os pontos apareçam na status.
Código:
# Pontos
    if $distribuir_pontos < 0
    self.contents.draw_text(x, x, 200, 32, "0",0) 
    else 
    self.contents.draw_text(x, x, 200, 32, $distribuir_pontos.to_s,0)
  end
[center]Nosso scrip ficou assim:
Código:
class Window_Status2 < Window_Base
  def initialize
    super(25,70,350,290)
    self.contents = Bitmap.new(width - 32, height - 32)
    @dragable = true
    @closable = true
    self.z = 999999
    self.windowskin = RPG::Cache.windowskin("Blank")
    self.back_opacity = 200
    if User_Edit::DISTRIBUIR_ACTIVE == true
    @str = Button.new(self,85, 90, " + ") {str}
    @agi = Button.new(self,85, 110, " + ") {agi}
    @dex = Button.new(self,85, 130, " + ") {dex}
    @int = Button.new(self,85, 150, " + ") {int}
    end
    refresh
  end
 
  def update
    super
    refresh if something_changed?
  end
 
  def on_close
    self.visible = false
    self.active = false
    $fechando_ativar = true
  end

  def refresh
    @actor = $game_party.actors[0]
    @old_lvl = @actor.level
    @old_gold = $game_party.item_number(Item_Ouro::Item_Id.to_i)
    @old_hp = @actor.hp
    @old_sp = @actor.sp
    @old_exp = @actor.now_exp
    @old_maxhp = @actor.maxhp
    @old_maxsp = @actor.maxsp
    @old_pontos = $distribuir_pontos
    @old_str = @actor.str
    @old_dex = @actor.dex
    @old_int = @actor.int
    @old_agi = @actor.agi
    self.contents.clear
    # Mostra a imagem de fundo
    fundo3 = RPG::Cache.picture("FUNDO_MENU")
    fundo1 = fundo3.width
    fundo2 = fundo3.height
    fundo4 = Rect.new(0,0,fundo1,fundo2)
    self.contents.blt(0,0,fundo3,fundo4)
    # Nome
    self.contents.draw_text(60, 5, 200, 32, "#{@actor.name}")
    # Level
    self.contents.draw_text(170, 128, 100, 32, "#{@actor.level}")
    # Guild
    self.contents.draw_text(100, 45, 100, 32, $game_party.actors[0].guild)
    # Ouro
    self.contents.draw_text(170, 148, 100, 32, $game_party.item_number(Item_Ouro::Item_Id.to_i).to_s)
    # Cash
    self.contents.draw_text(220, 45, 100, 32, $game_variables[9].to_s,0)
    # Str
    self.contents.draw_text(55, 68, 200, 32, "#{@actor.str}")
    # Agi
    self.contents.draw_text(55, 88, 200, 32, "#{@actor.agi}")
    # Def
    self.contents.draw_text(55, 108, 200, 32, "#{@actor.dex}")
    # Int
    self.contents.draw_text(55, 128, 200, 32, "#{@actor.int}")
    # Pontos
    if $distribuir_pontos < 0
    self.contents.draw_text(75, 148, 200, 32, "0",0) 
    else 
    self.contents.draw_text(75, 148, 200, 32, $distribuir_pontos.to_s,0)
  end
 end
[center]Vocês notaram que adicionei um segundo end, no final, esse end, fecha a refresh.
Agora adicionaremos um ponto, como se fosse uma atualização, caso você adicione um ponto em algum atributo, ele já apareça lá mudado.
Código:
  def something_changed?
    return true if @old_lvl != @actor.level
    return true if @old_gold != $game_party.item_number(Item_Ouro::Item_Id.to_i)
    return true if @old_exp != @actor.now_exp
    return true if @old_hp != @actor.hp
    return true if @old_sp != @actor.sp
    return true if @old_maxhp != @actor.maxhp
    return true if @old_maxsp != @actor.maxsp
    return true if @old_str != @actor.str
    return true if @old_dex != @actor.dex
    return true if @old_int != @actor.int
    return true if @old_agi != @actor.agi
    return true if @old_pontos != $distribuir_pontos
    return false
  end
 
  def str
    if $distribuir_pontos >= 1
    $distribuir_pontos -= 1
    $game_actors[1].str += 1
    #$status.refresh
  else
    #$status.refresh
  end
 end
 
  def dex
  if $distribuir_pontos >= 1
  $distribuir_pontos -= 1
  $game_actors[1].dex += 1
  #$status.refresh
 else
  #$status.refresh
  end
 end
 
  def agi
    if $distribuir_pontos >= 1
    $distribuir_pontos -= 1
    $game_actors[1].agi += 1
    #$status.refresh
  else
    #$status.refresh
  end
 end
 
  def int
    if $distribuir_pontos >= 1
    $distribuir_pontos -= 1
    $game_actors[1].int += 1
    #$status.refresh
  else
    #$status.refresh
  end
 end
end







Agora novamente acrescentei um outro end no final, mas pra que serve?
Para encerrar a classe. Ou seja fechar o script.
Agora vou deichar alguns códigos adicionais, caso queiram implementar sua hud.
HP
Código:
    # HP\MaxHP
    self.contents.draw_text(170, 68, 200, 32, "#{@actor.hp}/#{@actor.maxhp}")
MP
Código:
    # SP\MaxSP
    self.contents.draw_text(170, 88, 200, 32, "#{@actor.sp}/#{@actor.maxsp}")
Exp
Código:
    # Exp\Pro
    self.contents.draw_text(170, 108, 200, 32, "#{@actor.now_exp}/#{@actor.next_exp}")
É só isso gente... Bom, o nosso script deve ter ficado desse modo:
Código:
class Window_Status2 < Window_Base
  def initialize
    super(25,70,350,290)
    self.contents = Bitmap.new(width - 32, height - 32)
    @dragable = true
    @closable = true
    self.z = 999999
    self.windowskin = RPG::Cache.windowskin("Blank")
    self.back_opacity = 200
    if User_Edit::DISTRIBUIR_ACTIVE == true
    @str = Button.new(self,85, 90, " + ") {str}
    @agi = Button.new(self,85, 110, " + ") {agi}
    @dex = Button.new(self,85, 130, " + ") {dex}
    @int = Button.new(self,85, 150, " + ") {int}
    end
    refresh
  end
 
  def update
    super
    refresh if something_changed?
  end
 
  def on_close
    self.visible = false
    self.active = false
    $fechando_ativar = true
  end

  def refresh
    @actor = $game_party.actors[0]
    @old_lvl = @actor.level
    @old_gold = $game_party.item_number(Item_Ouro::Item_Id.to_i)
    @old_hp = @actor.hp
    @old_sp = @actor.sp
    @old_exp = @actor.now_exp
    @old_maxhp = @actor.maxhp
    @old_maxsp = @actor.maxsp
    @old_pontos = $distribuir_pontos
    @old_str = @actor.str
    @old_dex = @actor.dex
    @old_int = @actor.int
    @old_agi = @actor.agi
    self.contents.clear
    # Mostra a imagem de fundo
    fundo3 = RPG::Cache.picture("FUNDO_MENU")
    fundo1 = fundo3.width
    fundo2 = fundo3.height
    fundo4 = Rect.new(0,0,fundo1,fundo2)
    self.contents.blt(0,0,fundo3,fundo4)
    # Nome
    self.contents.draw_text(60, 5, 200, 32, "#{@actor.name}")
    # Level
    self.contents.draw_text(170, 128, 100, 32, "#{@actor.level}")
    # Guild
    self.contents.draw_text(100, 45, 100, 32, $game_party.actors[0].guild)
    # Ouro
    self.contents.draw_text(170, 148, 100, 32, $game_party.item_number(Item_Ouro::Item_Id.to_i).to_s)
    # Cash
    self.contents.draw_text(220, 45, 100, 32, $game_variables[9].to_s,0)
    # Str
    self.contents.draw_text(55, 68, 200, 32, "#{@actor.str}")
    # Agi
    self.contents.draw_text(55, 88, 200, 32, "#{@actor.agi}")
    # Def
    self.contents.draw_text(55, 108, 200, 32, "#{@actor.dex}")
    # Int
    self.contents.draw_text(55, 128, 200, 32, "#{@actor.int}")
    # Pontos
    if $distribuir_pontos < 0
    self.contents.draw_text(75, 148, 200, 32, "0",0) 
    else 
    self.contents.draw_text(75, 148, 200, 32, $distribuir_pontos.to_s,0)
  end
 end

  def something_changed?
    return true if @old_lvl != @actor.level
    return true if @old_gold != $game_party.item_number(Item_Ouro::Item_Id.to_i)
    return true if @old_exp != @actor.now_exp
    return true if @old_hp != @actor.hp
    return true if @old_sp != @actor.sp
    return true if @old_maxhp != @actor.maxhp
    return true if @old_maxsp != @actor.maxsp
    return true if @old_str != @actor.str
    return true if @old_dex != @actor.dex
    return true if @old_int != @actor.int
    return true if @old_agi != @actor.agi
    return true if @old_pontos != $distribuir_pontos
    return false
  end
 
  def str
    if $distribuir_pontos >= 1
    $distribuir_pontos -= 1
    $game_actors[1].str += 1
    #$status.refresh
  else
    #$status.refresh
  end
 end
 
  def dex
  if $distribuir_pontos >= 1
  $distribuir_pontos -= 1
  $game_actors[1].dex += 1
  #$status.refresh
 else
  #$status.refresh
  end
 end
 
  def agi
    if $distribuir_pontos >= 1
    $distribuir_pontos -= 1
    $game_actors[1].agi += 1
    #$status.refresh
  else
    #$status.refresh
  end
 end
 
  def int
    if $distribuir_pontos >= 1
    $distribuir_pontos -= 1
    $game_actors[1].int += 1
    #$status.refresh
  else
    #$status.refresh
  end
 end
end
Nota: O Script está 100% funcional, testei aqui em casa antes de postar.

_________________
Criando uma Scene_Status (básica) Asd10

Criando uma Scene_Status (básica) Fabar10
Hatsuki Morturo
Hatsuki Morturo
Experiente
Experiente

Mensagens : 401
Créditos : 50

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Gabriel Lenz Seg Ago 15, 2011 6:28 pm

Muito bom,
+1 Crédito.
Vou testar aqui já dou Edit.
@Edit: Funcionou. :)
Tem como postar uma imagem(fundo) de base ?
Gabriel Lenz
Gabriel Lenz
Desenvolvedor
Desenvolvedor

Mensagens : 660
Créditos : 20

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Hatsuki Morturo Seg Ago 15, 2011 6:42 pm

Depois vou postar, é porque to fora de casa...
Meu celular não tem ps cs5.

_________________
Criando uma Scene_Status (básica) Asd10

Criando uma Scene_Status (básica) Fabar10
Hatsuki Morturo
Hatsuki Morturo
Experiente
Experiente

Mensagens : 401
Créditos : 50

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Gabriel Lenz Seg Ago 15, 2011 6:46 pm

Você fez o tutorial pelo celular ? o.O
Gabriel Lenz
Gabriel Lenz
Desenvolvedor
Desenvolvedor

Mensagens : 660
Créditos : 20

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Hatsuki Morturo Seg Ago 15, 2011 7:14 pm

Não não, eu fiz em casa dai eu sai, ai to mechendo pelo cel.

_________________
Criando uma Scene_Status (básica) Asd10

Criando uma Scene_Status (básica) Fabar10
Hatsuki Morturo
Hatsuki Morturo
Experiente
Experiente

Mensagens : 401
Créditos : 50

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Gabriel Lenz Ter Ago 16, 2011 6:37 pm

Ei Hatsuki, pode postar uma imagem Base ?
Gabriel Lenz
Gabriel Lenz
Desenvolvedor
Desenvolvedor

Mensagens : 660
Créditos : 20

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Hatsuki Morturo Qua Ago 17, 2011 12:28 pm

Cara, agora que olhei com mais atenção, não precisa de imagem, é só alterar essa linha:
Código:
self.windowskin = RPG::Cache.windowskin("Blank")
Substitua-a por esta:
Código:
self.windowskin = RPG::Cache.windowskin("WindskinA")

_________________
Criando uma Scene_Status (básica) Asd10

Criando uma Scene_Status (básica) Fabar10
Hatsuki Morturo
Hatsuki Morturo
Experiente
Experiente

Mensagens : 401
Créditos : 50

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Gabriel Lenz Qua Ago 17, 2011 6:19 pm

Mas tipo, como a pessoa vai saber, o que é o que ?
Spoiler:
Gabriel Lenz
Gabriel Lenz
Desenvolvedor
Desenvolvedor

Mensagens : 660
Créditos : 20

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Hatsuki Morturo Qua Ago 17, 2011 6:30 pm

Código:
    # Nome
    self.contents.draw_text(60, 5, 200, 32, "#{@actor.name}")
    # Level
    self.contents.draw_text(170, 128, 100, 32, "#{@actor.level}")
    # Guild
    self.contents.draw_text(100, 45, 100, 32, $game_party.actors[0].guild)
    # Ouro
    self.contents.draw_text(170, 148, 100, 32, $game_party.item_number(Item_Ouro::Item_Id.to_i).to_s)
    # Cash
    self.contents.draw_text(220, 45, 100, 32, $game_variables[9].to_s,0)
    # Str
    self.contents.draw_text(55, 68, 200, 32, "#{@actor.str}")
    # Agi
    self.contents.draw_text(55, 88, 200, 32, "#{@actor.agi}")
    # Def
    self.contents.draw_text(55, 108, 200, 32, "#{@actor.dex}")
    # Int
    self.contents.draw_text(55, 128, 200, 32, "#{@actor.int}")
    # Pontos
    if $distribuir_pontos < 0
    self.contents.draw_text(75, 148, 200, 32, "0",0) 
    else 
    self.contents.draw_text(75, 148, 200, 32, $distribuir_pontos.to_s,0)
  end
Cara eu ensinei como criar uma Scene_Login, não é preciso eu ensinar como colocar um nome... Mas mesmo assim, para colocar o nome, basta adicionar o seguinte código:
Código:
self.contents.draw_text(170, 148, 100, 32, "Palavra")
Dai você ajusta a posição junto a do iten, e sobre os itens, basta olhar seu nome, tipo o primeiro iten, é o nome, o segundo é a guild, é só olhar no script que mostra tudo.

_________________
Criando uma Scene_Status (básica) Asd10

Criando uma Scene_Status (básica) Fabar10
Hatsuki Morturo
Hatsuki Morturo
Experiente
Experiente

Mensagens : 401
Créditos : 50

Ir para o topo Ir para baixo

Criando uma Scene_Status (básica) Empty Re: Criando uma Scene_Status (básica)

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos