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

Hora do Servidor

4 participantes

Ir para baixo

Hora do Servidor Empty Hora do Servidor

Mensagem por gladistony Seg Jul 01, 2013 10:26 pm

Hora do Servidor C8C8EE41CE162E6ED8D17DA9B0B425C1

Log

10/05/2013 --> Script criado e postado na aldeia
01/07/2013 --> Script postado aqui
03/07/2013 --> Criada uma segunda versão do script
Adições:

Script

Script Do NetPlay
Código:
#================================================================
#================================================================
#===================== Hora do Servidor =========================
#================================================================
#=======BY:Gladistony Silva======================================
#=======Small Edit by: Darkmel ===================================
#=======Criada para o forum: Aldeiarpgbr ========================
#=======NÃO POSTA EM OUTRO FORUM SEM AUTORIZAÇÃO=================
#================================================================
#================================================================
module User_Time
  AUTO_INSTAL = true
  SEMANA_PORT = true
end
#======================Não Edite================================
module Hora_Serve
  $data = "00/00/0000"
  $dia = ""
  $hora = ""
  $minuto = ""
  $atualhora = false
  def self.data(op=0)
    return 0 unless $atualhora
    b = $data.split('/')
    return b[op].to_i
  end
  def self.receber(data)
    a = data.split(' ')
    $hora = a[0]
    $minuto = a[1]
    $data = a[2]
    $dia = a[3]
    $atualhora = true
    if User_Time::SEMANA_PORT
      case $dia
      when 'Mon'
        $dia = 'Segunda'
      when 'Tue'
        $dia = 'Terça'
      when 'Wed'
        $dia = 'Quarta'
      when 'Thu'
        $dia = 'Quinta'
      when 'Fri'
        $dia = 'Sexta'
      when 'Sat'
        $dia = 'Sabado'
      when 'Sun'
        $dia = 'Domingo'
      end
      b = $data.split('/')
      $data = b[1].to_s+'/'+b[0].to_s+'/'+b[2].to_s
    end
  end
end
class Scene_Map
  alias update_hora_gladis update
  def update
    Network::Main.socket.send("<00> Solicitar hora </00>\n") if Graphics.frame_count % (200) == 0
    update_hora_gladis
  end
end
if User_Time::AUTO_INSTAL
module Network
  class Main
  def self.update
    return unless @socket.ready?
    for line in @socket.recv(0xfff).split("\n")
      @nooprec += 1 if line.include?("\000\000\000\000")
      return if line.include?("\000\000\000\000")
      p "#{line}" unless line.include?("<5>") or line.include?("<6>")or not $DEBUG or not User_Edit::PRINTLINES
      updatebool = false
      case line when /<00>(.*)<\/00>/
      Hora_Serve.receber($1.to_s)
      updatebool = false
      return
      end
      updatebool = self.update_walking(line) if @login and $game_map != nil
      updatebool = self.update_ingame(line)  if updatebool == false and @login and $game_map != nil
      updatebool = self.update_system(line)  if updatebool == false
      updatebool = self.update_admmod(line)  if updatebool == false
      updatebool = self.update_outgame(line) if updatebool == false
    end
  end
  end
end
end

Script Do Netplay Versão 2
Código:
#================================================================
#================================================================
#===================== Hora do Servidor =========================
#================================================================
#=======BY:Gladistony Silva======================================
#=======Small Edit by: Darkmel ===================================
#=======Criada para o forum: Aldeiarpgbr ========================
#=======NÃO POSTA EM OUTRO FORUM SEM AUTORIZAÇÃO=================
#================================================================
#================================================================
module User_Time
  AUTO_INSTAL = true
  SEMANA_PORT = true
end
#======================Não Edite================================
module Hora_Serve
  $data = "00/00/0000"
  $data_dia = 0
  $data_mes = 0
  $data_ano = 0
  $dia = ""
  $hora = 0
  $minuto = 0
  $segundo = 0
  $atualhora = false
  def to_s(a)
    b = ''
    if a.to_i < 10
      b = '0'
    end
    b += a.to_s
    return b
  end
  def self.data(op=0)
    return 0 unless $atualhora
    b = $data.split('/')
    return b[op].to_i
  end
  def self.update
    $segundo += 1
    if $segundo == 60
      $minuto += 1
      $segundo = 0
      if $minuto == 60
        $hora += 1
        $minuto = 0
        if $hora == 24
          $hora = 0
          $atualhora = false
        end
      end
    end
    if !$atualhora
      Network::Main.socket.send("<00> Solicitar hora </00>\n") if Graphics.frame_count % (80) == 0
    end
  end
  def self.receber(data)
    a = data.split(' ')
    $hora = a[0].to_i
    $minuto = a[1].to_i
    $data = a[2]
    $dia = a[3]
    $atualhora = true
    if User_Time::SEMANA_PORT
      case $dia
      when 'Mon'
        $dia = 'Segunda'
      when 'Tue'
        $dia = 'Terça'
      when 'Wed'
        $dia = 'Quarta'
      when 'Thu'
        $dia = 'Quinta'
      when 'Fri'
        $dia = 'Sexta'
      when 'Sat'
        $dia = 'Sabado'
      when 'Sun'
        $dia = 'Domingo'
      end
      b = $data.split('/')
      $data = b[1].to_s+'/'+b[0].to_s+'/'+b[2].to_s
      $data_dia = b[1].to_i
      $data_mes = b[0].to_i
      $data_ano = b[2].to_i
    else
      b = $data.split('/')
      $data_dia = b[0].to_i
      $data_mes = b[1].to_i
      $data_ano = b[2].to_i
    end
  end
end
class Scene_Map
  alias setup_hora_gladis initialize
  def initialize
    if !$atualhora
      Network::Main.socket.send("<00> Solicitar hora </00>\n")
    end
    setup_hora_gladis
  end
end
class << Graphics
  @tempo_gladis = 0
  @tempo_gladis2 = 0
  alias update_tempo_gladis update
  def update
    update_tempo_gladis
    @tempo_gladis = Time.now.sec
    if @tempo_gladis != @tempo_gladis2
      @tempo_gladis2 = @tempo_gladis
      Hora_Serve.update
    end
  end
end
if User_Time::AUTO_INSTAL
module Network
  class Main
  def self.update
    return unless @socket.ready?
    for line in @socket.recv(0xfff).split("\n")
      @nooprec += 1 if line.include?("\000\000\000\000")
      return if line.include?("\000\000\000\000")
      p "#{line}" unless line.include?("<5>") or line.include?("<6>")or not $DEBUG or not User_Edit::PRINTLINES
      updatebool = false
      case line when /<00>(.*)<\/00>/
      Hora_Serve.receber($1.to_s)
      updatebool = false
      return
      end
      updatebool = self.update_walking(line) if @login and $game_map != nil
      updatebool = self.update_ingame(line)  if updatebool == false and @login and $game_map != nil
      updatebool = self.update_system(line)  if updatebool == false
      updatebool = self.update_admmod(line)  if updatebool == false
      updatebool = self.update_outgame(line) if updatebool == false
    end
  end
  end
end
end


Script Do Servidor
Código:
--------------------------------
-- Data e hora do serve(25)  --
--------------------------------
  elseif cmd == "<00>" then
    do NP():SendToUser(user.id,"<00> "..os.date("%H %M %x %a").." </00>") end

Instalação

Coloquem o script para o NetPlay acima do main, depois va no servidor e dentro da pasta Scripts, insira o Script do Servidor dentro do arquivo functions.lua antes do penúltimo end
Caso prefira, baixe o arquivo functions.lua pelo link abaixo e substitua.
http://www.4shared.com/file/ceFZuNT_/functions.html
Ou vc pode utilizar esse servidor aki que ja foi editado
http://www.4shared.com/rar/neqEExic/Servidor.html
Para quem quiser abaixo também segue o netplay master ja editado
http://www.4shared.com/rar/gTLk4yJy/netplay_master_v407data_e_hora.html

Configuração

O script não precisa de configuração porem, se vc quiser que a data e os dias da semana fiquem em ingles, mude o SEMANA_PORT para false.
A outra opção é para caso vc queira inseri a edição no network manualmente.

Notas

O script cria 5 variáveis que podem ser utilizadas em qualquer parte do jogo, as variáveis criadas são:
Código:
$data = (Informa a Data atual)
  $dia = (Informa o dia da semana)
  $hora = (Informa a Hora)
  $minuto = (Informa os minutos)
  $atualhora = (Informa se os demais atributos estão atualizados)
A segunda versão do sistema cria mais algumas variáveis
Código:
  $data = "00/00/0000"
  $data_dia = (Informa o dia atual)
  $data_mes = (Informa o mes atual)
  $data_ano = (Informa o ano atual)
  $segundo = (Informa os segundos atuais)

Usando o Sistema em Eventos

Caso queira verificar uma determinada hora/data/dia da semana em um evento, utilize opção script da 4ª aba da opção condições e faça uma igualdade da variável do script com a opção desejada.
Por exemplo:
Eu quero fazer 1 evento especial que ocorre toda a segunda feira, então eu coloco a condição
$dia == 'Segunda'
Hora do Servidor Logadiadasemana
O mesmo serve para Datas e horas:
$data == '10/05/2013'
$hora == 0
$minuto == 50

Evitando Bug inicial

Quando o jogo inicia, por alguns segundos a data fica fora de sincronia, isso porque a data é hora não é sincronizada a todo instante. Para evitar resultados indesejáveis existe a variável $atualhora. Quando a primeira sincronização for feita ela se torna verdade, impedindo possíveis bugs. Para usa-la basta verificar na condição se ela é verdadeira:
$atualhora and ($hora == 19)
Hora do Servidor Logahora

Exemplo de Codigos

Todos esses códigos devem ser usados na opção script da opção condição, ou diretamente em um if usando os script

$atualhora and ($hora == 19) --> Fara um evento ficar ativo enquanto for 19 horas
$atualhora and ($hora >= 19) --> Fara um evento ficar ativo das 19 horas ate meia noite
$atualhora and (($hora >= 8)or ($hora <= 19)) --> Fara o evento ficar ativo das 8 horas ate as 19 da manha.[Ideal para fazer lojas]
$atualhora and ($minuto == 50) --> Fara o evento ativar de hora em hora quando o relógio marca 50 minutos
$data == '25/12/2013' --> Ativa o evento em uma data especificada, no caso o natal desse ano
$dia == 'Segunda' --> Ativa o evento toda segunda feira

Trabalhando com a data

A data vem em forma de uma string e não pode ser comparada diretamente com outra, para trabalhar de forma mais eficiente com utilizamos uma função que vem embutida no script, a função Hora_Serve.data()
Usando:
Hora_Serve.data(0) --> para receber o dia
Hora_Serve.data(1) --> para o mes
Hora_Serve.data(2) --> Para o ano
Segunda Versão:

Exemplo: Um evento que ative apenas se ative no dia 13 de cada mes, para isso eu uso
Hora_Serve.data(0) == 13
Para um evento que ira funcionar durante o mes de setembro
Hora_Serve.data(1) == 09
Hora do Servidor Logadata

Comando .to_s

Esse comando serve para adicionar um 0 na frente de qualquer numero menor que 10. O valor que ele ira retorna sera um string com esse numero.
Para usa-lo chama o da seguinte maneira:
Hora_Serve.to_s(x)
onde X é qualquer numero inteiro. Caso o X seja menor que 10, como por exemplo 8, ele ira retorna o valor com um zero na frente, '08' do contrario, se ele for maior, ele apenas retorna o valor em formato de string.
Exemplo:
a = Hora_Serve.to_s($minuto)
OBS.: Essa função esta apenas disponível para  a segunda versão e pode ser usada livremente para qualquer numero, mesmo que ele n tenha nada haver com o sistema de hora
a = Hora_Serve.to_s(Cool
a == '08'

Log de edições da segunda versão
A segunda versão do sistema reduziu a 0 a utilização de internet para marca a hora, uma vez que vc entre no mapa e o sistema receba a hora do servidor, ele somente ira solicitar mais alguma informação caso o relógio marque meia noite, salvo essa exeção o sistema não envia nem recebe mais nenhum pacote.
A variável dos segundo não esta ainda perfeitamente em sincronia e a variavel dos minutos pode apresentar 1 diferença de ate 2 minutos para mais ou para menos, no entanto no geral os minutos ficam em sincronia grande parte do tempo, pelo menos em testes feitos com alguns usuários.

Próxima versão
Provavelmente não haverá uma próxima versão para esse sistema, salvo se aparecer algum bug.
Quando o novo Master lançar, estarei compatibilizando ele com o mesmo e caso eu compre o Cristal estarei postando aqui a versão para esse netplay também.
Se em você conhecer ou usar outro netplay para rmxp, poste aqui o nome dele que eu realizo os ajustes que forem precisos.

Sistemas Opcionais
>Relógio na Tela -->Mostra a Hora na tela [usa a 1ª versão][Criado por Darkmel

Bugs
>Nenhum bug a ser resolvido

Compatibilidade
>Esse script apenas funciona no no NPM 3 e 4.

Créditos
>Gladistony [Criador do script]
>Darkmel [Correção de bugs]


Última edição por gladistony em Qua Jul 03, 2013 3:34 pm, editado 3 vez(es)
gladistony
gladistony
Recém chegado
Recém chegado

Mensagens : 3
Reputação : 1
Data de inscrição : 29/06/2013

Ir para o topo Ir para baixo

Hora do Servidor Empty Re: Hora do Servidor

Mensagem por Thör Ter Jul 02, 2013 12:17 pm

Muito bom! Tópico bem organizado, bem explicativo também...
Não esperaria menos de você XD

+1 Cred!
Thör
Thör
Admininstrador
Admininstrador

Mensagens : 26
Reputação : 5
Data de inscrição : 10/06/2013
Idade : 28
Localização : Valhalla

https://valhallamaker.forumeiros.com

Ir para o topo Ir para baixo

Hora do Servidor Empty Re: Hora do Servidor

Mensagem por Darkmel Ter Jul 02, 2013 1:02 pm

Gostei do script, tanto é que criei um sistema de relógio baseado nesse script:

Código:

    # Sistema de relogio criado por Darkmel
    # Baseado no script de horas on server do Gladistony
    module Relogio
    #Mostrar dia/mes/ano?
    Dia = false
    #Posicao x
    X = 350
    #Posicao y
    Y = 8
    #Mostrar Windowskin?
    Window = true
    end
   
    class Window_Relogio < Window_Base
      def initialize
        super(Relogio::X,Relogio::Y,100,65)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.z = 99999999
        self.opacity = 200
        if Relogio::Window == true
        self.windowskin = RPG::Cache.windowskin("WindskinA")
        else
        self.windowskin = RPG::Cache.windowskin("")
        end
        refresh
      end
      def refresh
        self.contents.clear
        self.contents.font.name = "Segoe UI"
        self.contents.font.color = Color.new(0, 0, 0)
        if Relogio::Dia == true
        self.contents.draw_text(1, -11, 200, 32, $data.to_s)
        end
        self.contents.draw_text(1, 11, 200, 32, $hora.to_s + ":" + $minuto.to_s)
        #Sombras
        self.contents.font.color = Color.new(255, 255, 255)
        if Relogio::Dia == true
        self.contents.draw_text(0, -12, 200, 32, $data.to_s)
        end
        self.contents.draw_text(0, 10, 200, 32, $hora.to_s + ":" + $minuto.to_s)
      end
      def update
        super
        return if Graphics.frame_count % (10 * 10) != 0
        $relogio.refresh
      end
    end

Darkmel
Darkmel
Recém chegado
Recém chegado

Mensagens : 16
Reputação : 4
Data de inscrição : 02/07/2013
Idade : 26
Localização : Aincrad World

http://animex.zz.mu

Ir para o topo Ir para baixo

Hora do Servidor Empty Re: Hora do Servidor

Mensagem por Thör Ter Jul 02, 2013 9:47 pm

Darkmel escreveu:Gostei do script, tanto é que criei um sistema de relógio baseado nesse script:

Código:

    # Sistema de relogio criado por Darkmel
    # Baseado no script de horas on server do Gladistony
    module Relogio
    #Mostrar dia/mes/ano?
    Dia = false
    #Posicao x
    X = 350
    #Posicao y
    Y = 8
    #Mostrar Windowskin?
    Window = true
    end
    
   class Window_Relogio < Window_Base
      def initialize
        super(Relogio::X,Relogio::Y,100,65)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.z = 99999999
        self.opacity = 200
        if Relogio::Window == true
        self.windowskin = RPG::Cache.windowskin("WindskinA")
        else
        self.windowskin = RPG::Cache.windowskin("")
        end
        refresh
      end
      def refresh
        self.contents.clear
        self.contents.font.name = "Segoe UI"
        self.contents.font.color = Color.new(0, 0, 0)
        if Relogio::Dia == true
        self.contents.draw_text(1, -11, 200, 32, $data.to_s)
        end
        self.contents.draw_text(1, 11, 200, 32, $hora.to_s + ":" + $minuto.to_s)
        #Sombras
        self.contents.font.color = Color.new(255, 255, 255)
        if Relogio::Dia == true
        self.contents.draw_text(0, -12, 200, 32, $data.to_s)
        end
        self.contents.draw_text(0, 10, 200, 32, $hora.to_s + ":" + $minuto.to_s)
      end
      def update
        super
        return if Graphics.frame_count % (10 * 10) != 0
        $relogio.refresh
      end
    end


Então poste ele aqui! Ou é aquele que você já postou?
Thör
Thör
Admininstrador
Admininstrador

Mensagens : 26
Reputação : 5
Data de inscrição : 10/06/2013
Idade : 28
Localização : Valhalla

https://valhallamaker.forumeiros.com

Ir para o topo Ir para baixo

Hora do Servidor Empty Re: Hora do Servidor

Mensagem por Darkmel Qua Jul 03, 2013 11:46 am

Thör escreveu:
Darkmel escreveu:Gostei do script, tanto é que criei um sistema de relógio baseado nesse script:

Código:

    # Sistema de relogio criado por Darkmel
    # Baseado no script de horas on server do Gladistony
    module Relogio
    #Mostrar dia/mes/ano?
    Dia = false
    #Posicao x
    X = 350
    #Posicao y
    Y = 8
    #Mostrar Windowskin?
    Window = true
    end
    
   class Window_Relogio < Window_Base
      def initialize
        super(Relogio::X,Relogio::Y,100,65)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.z = 99999999
        self.opacity = 200
        if Relogio::Window == true
        self.windowskin = RPG::Cache.windowskin("WindskinA")
        else
        self.windowskin = RPG::Cache.windowskin("")
        end
        refresh
      end
      def refresh
        self.contents.clear
        self.contents.font.name = "Segoe UI"
        self.contents.font.color = Color.new(0, 0, 0)
        if Relogio::Dia == true
        self.contents.draw_text(1, -11, 200, 32, $data.to_s)
        end
        self.contents.draw_text(1, 11, 200, 32, $hora.to_s + ":" + $minuto.to_s)
        #Sombras
        self.contents.font.color = Color.new(255, 255, 255)
        if Relogio::Dia == true
        self.contents.draw_text(0, -12, 200, 32, $data.to_s)
        end
        self.contents.draw_text(0, 10, 200, 32, $hora.to_s + ":" + $minuto.to_s)
      end
      def update
        super
        return if Graphics.frame_count % (10 * 10) != 0
        $relogio.refresh
      end
    end


Então poste ele aqui! Ou é aquele que você já postou?

Proto, criei o tópico, dei as instruções e os devidos créditos:
https://valhallamaker.forumeiros.com/t31-script-relogio-pelo-servidor-gladistony
Darkmel
Darkmel
Recém chegado
Recém chegado

Mensagens : 16
Reputação : 4
Data de inscrição : 02/07/2013
Idade : 26
Localização : Aincrad World

http://animex.zz.mu

Ir para o topo Ir para baixo

Hora do Servidor Empty Re: Hora do Servidor

Mensagem por gladistony Qua Jul 03, 2013 12:11 pm

Gente adicionei uma segunda versão ao sistema, agora o sistema pega os segundo e não fica enviando pacotes ao servidor
gladistony
gladistony
Recém chegado
Recém chegado

Mensagens : 3
Reputação : 1
Data de inscrição : 29/06/2013

Ir para o topo Ir para baixo

Hora do Servidor Empty Re: Hora do Servidor

Mensagem por Odin Qua Jul 03, 2013 1:00 pm

Achei muito legal e funcional este sistema. Realmente é uma pequena (mas muito essencial) revolução no mundo do RM Online. Parabéns pelo tópico bem explicado e pelo conteúdo impecável.

Abração. ~//
Odin
Odin
Moderador Global
Moderador Global

Mensagens : 3
Reputação : 0
Data de inscrição : 01/07/2013

Ir para o topo Ir para baixo

Hora do Servidor Empty Re: Hora do Servidor

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