Hora do Servidor
4 participantes
Página 1 de 1
Hora do Servidor
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:
- Criadas variáveis para o dia,mês e ano
- Adicionado sistema de segundos
- Adicionado o comando Hora_Serve.to_s(x) que retorna o valor com um 0 na frente caso seja menor que 0
- Foi reduzida a banda usada pelo sistema, de 6 mensagens por minuto para 0, o sistema agora apenas sincrioniza a hora quando vc entra no mapa pela primeira vez
- Criadas variáveis para o dia,mês e ano
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)
- 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'
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)
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:
- O comando Hora_Serve.data ainda pode ser usado na segunda versão, no entanto recomendo usar as variáveis $data_dia,$data_mes e $data_ano
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
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(
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- Recém chegado
- Mensagens : 3
Reputação : 1
Data de inscrição : 29/06/2013
Re: Hora do Servidor
Muito bom! Tópico bem organizado, bem explicativo também...
Não esperaria menos de você XD
+1 Cred!
Não esperaria menos de você XD
+1 Cred!
Re: Hora do Servidor
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
Re: Hora do Servidor
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?
Re: Hora do Servidor
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
Re: Hora do Servidor
Gente adicionei uma segunda versão ao sistema, agora o sistema pega os segundo e não fica enviando pacotes ao servidor
gladistony- Recém chegado
- Mensagens : 3
Reputação : 1
Data de inscrição : 29/06/2013
Re: Hora do Servidor
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. ~//
Abração. ~//
Odin- Moderador Global
- Mensagens : 3
Reputação : 0
Data de inscrição : 01/07/2013
Tópicos semelhantes
» [4.0.7] Servidor por TXT
» [4.0.7] Dia e noite de acordo com o servidor
» Script Relogio pelo servidor [Gladistony]
» [4.0.7] Dia e noite de acordo com o servidor
» Script Relogio pelo servidor [Gladistony]
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|