[Tutorial/Aula] SSFSNPM {Script System Fome Sede NetPlay Master}

Ir em baixo

[Tutorial/Aula] SSFSNPM {Script System Fome Sede NetPlay Master}

Mensagem por Nanzin em Sab Jan 28, 2012 6:02 pm

[Você precisa estar registrado e conectado para ver este link.]

Olá Pessoal, eu estava aqui fazendo meu projeto quando comecei a fazer um Sistema de Fome e Sede Completo!
e resolvi nao so Disponibiliza-lo como Dar uma Aula sobre o Mesmo!

ScreenShot:
[Você precisa estar registrado e conectado para ver este link.]

[Você precisa estar registrado e conectado para ver este link.]

Nome: SSFSNPM {Script System Fome Sede NetPlay Master}
Scripter: Nanzin
Dificuldade: [Você precisa estar registrado e conectado para ver esta imagem.][Você precisa estar registrado e conectado para ver esta imagem.][Você precisa estar registrado e conectado para ver esta imagem.][Você precisa estar registrado e conectado para ver esta imagem.][Você precisa estar registrado e conectado para ver esta imagem.] {Medio}
Equipe: Wolf Dragon Makers {WDM}

[Você precisa estar registrado e conectado para ver este link.]


[Você precisa estar registrado e conectado para ver este link.]
[Você precisa estar registrado e conectado para ver este link.]
[Você precisa estar registrado e conectado para ver este link.]

[Você precisa estar registrado e conectado para ver este link.]

1º Passo:
vá no script: Game_Actor e adicione as seguinte linhas abaixo da linha 34:
Código:
attr_reader  :fome
attr_reader  :sede

adicione as seguintes linhas abaixo do : def initialize
Código:
@fome = WDM::MAX_FOME
@sede = WDM::MAX_SEDE

Explicaçao 1:
Nos codigos: attr_reader :fome, e , attr_reader :sede
estamos definindo as variaveis como somente leitura!;
Nos codigos: @fome = WDM::MAX_FOME, e , @sede = WDM::MAX_SEDE
estamos definindo os valores iniciais da fome e da sede do personagem!


2º Passo:

adicione os seguintes comandos abaixo do: def initialize
Código:
def fome
  return @fome
 end
 
 def diminuir_fome(n)
  @fome = @fome - n.to_i
 end
 
 def aumentar_fome(n)
  @fome = @fome  n.to_i
 end
 
 def diminuir_sede(n)
  @sede = @sede - n.to_i
 end
 
 def aumentar_sede(n)
  @sede = @sede  n.to_i
 end
 
 
 def sede
  return @sede
 end

Explicaçao 2:
Código:
def fome
  return @fome
 end
> é o que cria o comando: $game_party.actors[0].fome, ele retorna o valor da sua fome atual!;

Código:
def aumentar_fome(n)
@fome = @fome  n.to_i
end
> no caso aumenta o valor da sua fome, quanto menor o valor de fome, com mais fome voce está!

Código:
def diminuir_fome(n)
@fome = @fome - n.to_i
end
> No caso diminui o valor de sua fome!;(comando utilizado para repor a fome;

OBS: os mesmos comandos servem para a SEDE!

3º Passo:
Crie um Novo script e adicione o [ACT] Fome_Sede (disponivel na Demo ou acima na area scripts)

Explicaçao 3:

Código:
module WDM
 
  FRUTA_1 = 40
 
  BEBIDA_1 = 40
 
  MAX_FOME = 250
 
  MAX_SEDE = 250
 
  PERDE_FOME = 15
 
  PERDE_SEDE = 15
 
  TEMPO_F_M = 150
end
> Aqui e a Configuaçao do Administrador, como Fome Maxima, Sede Maxima, Tempo em que a Fome e Sede ira diminuir!, quantidade de fome e sede que sera perdida a cada tempo!;

Código:
class Scene_Map
  alias fome_map_draw main_draw
  alias fome_update update

  def main_draw
    @time = 0
    fome_map_draw
end
> no comando alias fome_map_draw, damos um tipo de apelido para o main_draw, o meso acontece no update, , depois definimos o main_draw, que incia com nosso tempo = 0, e ja o chama novamente para atualiza-lo e como se fizese-mos
Código:
def main_draw
@tempo = 0
main_draw
end

Código:
def update
  if $game_party.actors[0].fome > WDM::MAX_FOME
    valor_verdadeiro = ($game_party.actors[0].fome%WDM::MAX_FOME)
    $game_party.actors[0].diminuir_fome(valor_verdadeiro)
  elsif $game_party.actors[0].sede > WDM::MAX_SEDE
    valor_verdadeiro2 = ($game_party.actors[0].sede%WDM::MAX_SEDE)
    $game_party.actors[0].diminuir_sede(valor_verdadeiro2)
    end
  if Graphics.frame_count / Graphics.frame_rate != @total_sec
      @time  = 1
    end
    if $game_party.actors[0].fome <= 0 or $game_party.actors[0].sede <= 0
      $fome_sede = Fome_Sede.new
    end
    if @time == WDM::TEMPO_F_M * 10
      $game_party.actors[0].diminuir_sede(WDM::PERDE_SEDE)
      $game_party.actors[0].diminuir_fome(WDM::PERDE_FOME)
    @time = 0
    end
  fome_update
end
> estamos aqui definindo o comando Update mascarado acima com o alias, para fazer a contagem de quantos segundos se passaram utilizamos os frames de mapa!, os comandos
Código:
if $game_party.actors[0].fome > WDM::MAX_FOME
    valor_verdadeiro = ($game_party.actors[0].fome%WDM::MAX_FOME)
    $game_party.actors[0].diminuir_fome(valor_verdadeiro)
  elsif $game_party.actors[0].sede > WDM::MAX_SEDE
    valor_verdadeiro2 = ($game_party.actors[0].sede%WDM::MAX_SEDE)
    $game_party.actors[0].diminuir_sede(valor_verdadeiro2)
    end
eu utilizei para consertar um BUG, a minha fome ao ser recuperada ela ultrapassava o limiti O_o, entao decidir seguir a seguinte logica, se ela passou, entao temos que ajeitar certo?, atravez da logica e pensamento matematico, eu fiz o seguinte peguei o que passava atravez da divisao da minha fome ou sede atual pelo maximo estipulado, com o comando % {mod}(retorna o resto de uma divisao matemática}, e depois utilizei o mesmo comando que subtrai a cada x segundos o Valor ultrapassado!;
Graphics.frame_count / Graphics.frame_rate != @total_sec, a cada vez que isso for satisfeito (esta condiçao), soma-se 1 a nosso tempo!, (este procedimento e bem rapido pois e como se calcula-se mos se a tela foi atualizada, e como no RMXP o map e atualiza constantemente fica facil decifrar!;,
apos isso definimos se voce ficou totalmente com fome ou com sede, atravez de:
Código:
  if $game_party.actors[0].fome <= 0 or $game_party.actors[0].sede <= 0
se isso for satisfeito (ou seja vc estiver com 0 de fome ou de sede), nois chamamos a classe Fome_Sede!, apos isso verificamos se o tempo para perda de Fome e de Sede foi alcançado atravez de:
Código:
 if @time == WDM::TEMPO_F_M * 10
se esta condiçao for satisfeita diminui-mos a quantidade pre estabelecida do module WDM pelo Adm do Jogo! , e ainda reiniciamos o tempo para a proxima retirada,com os comandos:
Código:
$game_party.actors[0].diminuir_sede(WDM::PERDE_SEDE)
      $game_party.actors[0].diminuir_fome(WDM::PERDE_FOME)
    @time = 0
para terminar o update chamamos o comando update novamente mais dessa vez com seu apelido: fome_update;

Código:
class Fome_Sede
  def initialize
    # Adicione aqui Comandos Extras
    if $game_party.actors[0].fome <= 0
          $game_temp.chat_log.push("#{$game_party.actors[0].name} Morreu de Fome")
          print("Voce Morreu de Fome")
          $game_party.actors[0].aumentar_fome(WDM::MAX_FOME/2)
          $scene = Scene_Gameover.new
  elsif $game_party.actors[0].sede <= 0
          $game_temp.chat_log.push("#{$game_party.actors[0].name} Morreu de Sede")
          print("Voce Morreu de Sede")
          $game_party.actors[0].aumentar_sede(WDM::MAX_SEDE/2)
          $scene = Scene_Gameover.new
    end
  end
end
> nesta classe e simples, lembra que chamamos o comando $fome_sede = Fome_Sede.new?
entao, aqui voce determina o que sera feito se voce morrer de fome ou morrer de sede,

Nanzin mais nao seria mais prudente coloca isso acima onde voce testou se eu morri ou nao?
bom eu preferi nao, por que nao sei o desejo de cada adm, mais eu fiz para verificar se o personagem morreu de fome ou de sede (especificamente), para poder fazer mensagens diferentes (consequente mente quando voce morre de fome vc tbm morre de sede por voce perder os 2 ao mesmo tempo (porem isso pode ser mudado), depois eu recupero metade da fome ou sede do personagem (para que ele possa comprar algo), e depois chamo o Game_Over.new, que teleporta ele novamente para o mapa programado no User_Edit;

4º Passo:

Adicione o Window_HUD, para poder controlar a sua fome e sede, nao explicarei pois e simples e basta le-lo que entenderá!; porem se tiver qualuqer duvida ou problema poste no Topico!;

[Você precisa estar registrado e conectado para ver este link.]

[Você precisa estar registrado e conectado para ver este link.]

[Você precisa estar registrado e conectado para ver este link.]

Nanzin > Por criar o sistema, disponibiliza-lo, Ensina-lo, e fazer os Buttons

Abraços a Todos espero ter Ajudado!
avatar
Nanzin
Mortal
Mortal

Mensagens : 18
Dom de anjo: : 2
Data de inscrição : 28/01/2012
Idade : 23
Localização : Rio de Janeiro

Ver perfil do usuário http://hogwartsworldgame.blogspot.com

Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum