antiblock
Rodnia | Alpha & Omega
  • Chatbox

    You don't have permission to chat.
    Load More
Sign in to follow this  
…Los†

Quest manutenção by lost

21 posts in this topic

Olá comunidade!

 

Vou deixar aqui a minha quest que fiz para a manutenção para servidores de metin2.

 

Bom essa quest funciona da seguinte forma, você deve alterar o "NomeDoChar" para o nome do seu char GM de confiança.. em seguida somente com ele vai até o npc guarda da praça para habilitar a sua manutenção..

 

Então vai escolher o tempo para desligar todos os player e em seguida vai escolher se o seu char GM vai ficar online durante esse processo.. ou seja? todos vão ficar inativo:

 

status: "SHUTDOWN"

 

Porem o seu char GM ficará com status "OK"

 

Em seguida volte a reiniciar a sua maquina e logar com essa conta e ficara ativo e todos os players que estão OK não conseguiram logar.. quando terminar a manutenção volte novamente ao NPC e clique em terminar a manutenção e todos que estavam SHUTDOWN vai voltar para OK.. isso porque a query tem 1 filtro "WHERE" para que não volte também os banidos etc..

 

Só tem uma OBS.. que foi para mim esta quest então eu tenho uma função no meu site script em php que desabilita o cadastro assim evita de criar conta durante o processo e vim como status OK e consiga logar..  mais pode te ajudar de alguma forma ok?

 

Claro que pode ser feito algumas melhorias como exemplo verificar no php se o server esta em manutenção caso esteja a conta é criada porem ao invés de OK vai para

SHUTDOWN.. mais como eu disse a quest foi feita para mim e assim já me atende.

 

Espero ter ajudado.

 

----------------------------------------------
--Criador:	Lost
--Origem:	NÃO IMPORTA
--(Lua) Source Code
----------------------------------------------
quest manutencao begin
	state start begin
		when guild_man1.chat."Manutenção" or guild_man2.chat."Manutenção" or guild_man3.chat."Manutenção" with pc.get_name() == "NomeDoChar" begin
			say_title("Manutenção:")
			say("")
			say("Quer aplicar manutenção?")
			say("Então escolha opção adequada!")
			say("")
			local s = select("Ativar 10 Minutos", "Ativar Agora!","Terminar Manutenção!", "Sair")
			if s == 1 then
			timer("shutdown1", 1)
			local res1, res2 = mysql_direct_query("select * from account.account;")
			mysql_direct_query("UPDATE account.account SET account.status='SHUTDOWN' WHERE status='OK'")
			syschat("O Estado do servidor foi alterado.")
			say_title("Manutenção:")
			say("")
			say("Olá Administrador, você deseja ficar ativo?")
			say("")
			local a = select("Sim", "Não")
			if a == 1 then
			local res1, id = mysql_direct_query("select * from account.account;")
			mysql_direct_query("UPDATE account.account SET account.status='OK' WHERE status='SHUTDOWN'	limit 1;")
			syschat("você ficará ativo durante a manutenção.")
			end
			if a == 2 then
			return
			end
			end
			if s == 2 then
			timer("shutdown7", 1)
			local res1, res2 = mysql_direct_query("select * from account.account;")
			mysql_direct_query("UPDATE account.account SET account.status='SHUTDOWN' WHERE status='OK'")
			syschat("O Estado do servidor foi alterado.")
			say_title("Manutenção:")
			say("")
			say("Olá Administrador, você deseja ficar ativo?")
			say("")
			local a = select("Sim", "Não")
			if a == 1 then
			local res1, id = mysql_direct_query("select * from account.account;")
			mysql_direct_query("UPDATE account.account SET account.status='OK' WHERE status='SHUTDOWN'	limit 1;")
			syschat("você ficará ativo durante a manutenção.")
			end
			if a == 2 then
			return
			end			
			end
			if s == 3 then
			local res1, res2 = mysql_direct_query("select * from account.account;")
			mysql_direct_query("UPDATE account.account SET account.status='OK' WHERE status='SHUTDOWN'")
			syschat("A manutenção foi terminada.")
			end
			if s == 4 then
			return
			end
		end
		when shutdown1.timer begin
			notice_all("Atenção !!!")
			notice_all("Manutenção: O servidor será desligado em 10 minutos!")
			notice_all("Efetue logout para evitar que itens sejam perdidos!")
			timer("shutdown2", 60*5)
		end
		when shutdown2.timer begin
			notice_all("Atenção !!!")
			notice_all("Manutenção: O servidor será desligado em 5 minutos!")
			notice_all("Efetue logout para evitar que itens sejam perdidos!")
			timer("shutdown3", 60*3)
		end
		when shutdown3.timer begin
			notice_all("Atenção !!!")
			notice_all("Manutenção: O servidor será desligado em 2 minutos!")
			notice_all("Efetue logout para evitar que itens sejam perdidos!")
			timer("shutdown4", 60)
		end
		when shutdown4.timer begin
			notice_all("Atenção !!!")
			notice_all("Manutenção: O servidor será desligado em 1 minuto!")
			notice_all("Efetue logout para evitar que itens sejam perdidos!")
			timer("shutdown5", 30)
		end
		when shutdown5.timer begin
			notice_all("Atenção !!!")
			notice_all("Manutenção: O servidor será desligado em 30 segundos!")
			notice_all("Efetue logout para evitar que itens sejam perdidos!")
			timer("shutdown6", 15)
		end
		when shutdown6.timer begin
			notice_all("Atenção !!!")
			notice_all("Manutenção: O servidor será desligado em 15 segundos!")
			notice_all("Para mais informações acesse: www.nomedoseuserver.org")
			timer("shutdown7", 5)
		end
		when shutdown7.timer begin
			command("shutdown")
		end
	end
end

 

Share this post


Link to post
Share on other sites
antiblock
Rodnia | Alpha & Omega

Código péssimo e muita coisa que não faz sentido.

Mau uso dos timer's, devias meter uma quest flag dentro de um letter para quando alterares , teleportares  ou saíres do jogo em geral com a personagem os timer's não serem perdidos.

Selecionas tudo (*) das tabelas sem necessidade nenhuma, em quest não tem mal (apesar de não ser necessário), mas em C++ tinhas sempre possibilidade dependesse do local de levares sql inj.

 

camon, 

if == 1 then

if == 2 then

if == 3 then

---

say("XXSA")

say("XX")

--

2014?

Share this post


Link to post
Share on other sites
3 horas atrás, ruizinho-o disse:

Código péssimo e muita coisa que não faz sentido.

Mau uso dos timer's, devias meter uma quest flag dentro de um letter para quando alterares , teleportares  ou saíres do jogo em geral com a personagem os timer's não serem perdidos.

Selecionas tudo (*) das tabelas sem necessidade nenhuma, em quest não tem mal (apesar de não ser necessário), mas em C++ tinhas sempre possibilidade dependesse do local de levares sql inj.

 

camon, 

if == 1 then

if == 2 then

if == 3 then

---

say("XXSA")

say("XX")

--

2014?

 

A forma da quest não está incorreta o que tu diz esta desnecessário penso eu ser os ("") ah quem goste de programar de cada forma chegando a cada resultado.

 

A quest não funciona em Letter você não percebeu mais funciona no npc.

 

outra questão pode se usar [ENTER] em uma conversa do BOX ou pode de usar  () em say a alguns que usam say2.. Bom se a mim agrada say ("") será mesmo que devo mudar para agradar alguém? (nops).

 

A questão dos IF? novamente pode ser usar 1 if e outros elseif com a utilização de apenas 1 end e novamente vou entrar no mesmo argumento a mim assim agrada portanto :) 

 

Portanto chega devagar na humildade conheça a comunidade e agrega algum comentário construtivo pois esse é quase ofensivo e opressor.

 

Não tem como pular o time em vista que o comando shutdown  poe abaixo todos os Channel. mesmo que desligue o time não é importante é sim o shutdown final.

 

Mais nada construtivo ou que ee agrega o comentário que por hora mais pareceu a criticar, talvez pode se julgar crítico etc mais não tem competência para tal, pois se tivesse percebido não fiz a quest a agradar a você ou a outro é sim a mim.

 

Caso queira uma quest vide 2018 faça você mesmo, pois desta forma ja me agrada e me resulta então já basta.

 

Na próxima crítica patética  (como deve ser sua life) vê se antes alguém se preocupou em agradar seu fino paladar ou simplesmente quis ajudar.

Edited by …Los† (see edit history)

Share this post


Link to post
Share on other sites

Então faça o seguinte, enquanto esses timers funcionam, altere personagem e depois entre no jogo.

Não é critica patética, patético é essa quest, que foi aqui publicada e futuramente poderá ser usada e está mal feita e com problemas.

Sem mais de momento, mais a mais, um letter não funciona só para mandar send_letter; utilizar uma function em que só mudava o local do tempo para evitar essas linhas todas dos timers não ficava mal. HardCode ao mais alto nível. lmao.  Se o que te estou a dizer é demais para o que percebes, que penso que não seja nada demais, desculpe.

Share this post


Link to post
Share on other sites
1 minuto atrás, ruizinho-o disse:

Então faça o seguinte, enquanto esses timers funcionam, altere personagem e depois entre no jogo.

Não é critica patética, patético é essa quest, que foi aqui publicada e futuramente poderá ser usada e está mal feita e com problemas.

Sem mais de momento, mais a mais, um letter não funciona só para mandar send_letter; utilizar uma function em que só mudava o local do tempo para evitar essas linhas todas dos timers não ficava mal. HardCode ao mais alto nível. lmao.  Se o que te estou a dizer é demais para o que percebes, que penso que não seja nada demais, desculpe.

 

Novamente nada com nada.

Obrigado. E ainda deixo a vc 1 like pelo aparente desespero de se ter 1.

Edited by …Los† (see edit history)

Share this post


Link to post
Share on other sites

Nada com nada? Já te disse onte está o bug da quest pah, não sabes ler? "Então faça o seguinte, enquanto esses timers funcionam, altere personagem e depois entre no jogo."

Eu quando tiver tempo mando-te essa quest corrigida.

Não tens de agradecer. Boa noite.

Edited by ruizinho-o (see edit history)

Share this post


Link to post
Share on other sites
2 minutos atrás, ruizinho-o disse:

Nada com nada? Já te disse onte está o bug da quest pah, não sabes ler? "Então faça o seguinte, enquanto esses timers funcionam, altere personagem e depois entre no jogo."

Eu quando tiver tempo mando-te essa quest corrigida.

Não tens de agradecer. Boa noite.

 

Não precisa me ensinar a fazer quest pois tenho humildade de verificar e se for o caso voltar é corrigir pois foi a única coisa útil que disse de resto só foi ego e mais ego.. passar bem.

Share this post


Link to post
Share on other sites

Basicamente, deverias usar server_timers em vez de timers, visto que os timers são para a personagem, se fores abaixo ou te teleportares o temporizador para, o que não acontece com os timers...

 

Btw, esse status SHUTDOWN não te faz nada, o comando shutdown não deixa entrar ninguém, nem mesmo gm's com esse status. Qualquer status diferente de OK vai sempre dar erro...

Share this post


Link to post
Share on other sites

Sim, também pode usar server_timers, eu referi-me as quest flag para o rapaz manter os character timer's, de qualquer das formas não é só isso que está mal.

O status "SHUTDOWN" não dá erro de ban nem erro de conectar ao server, simplesmente diz que o servidor ainda não está aberto.

Share this post


Link to post
Share on other sites

Nem quero imaginar o stress que isto vai causar na máquina com tanto acesso à db, ainda por cima a ir buscar a account.account inteira.

Mas bem, server_timer é mais viável neste caso como já disseram pois se alterares de mapa ou caíres ninguém recebe o aviso, código podia estar melhor etc etc mas obrigado pela contribuição.

 

Share this post


Link to post
Share on other sites

Vou tentar desenhar da melhor forma possivel:

 

 

 

1º vai o GM ao NPC logo ele clica em iniciar a manutenção .

2º quando chegar aos 10 minutos (mesmo que o player ou quem é que seja não esteja para receber a mensagem)

não vai fazer diferença porque o char GM vai tomar DC e vai precisar logar e para isso precisa reiniciar a maquina uma vez que executou o comando "shutdown", então mesmo que alguém fique logado vai ser deslogado, a mensagem é só formalidade pode ser dar o shutdown, vocês se apegaram mensagem porem  a principal funcionalidade é o banco de dados.

 

"Nem quero imaginar o stress que isto vai causar na máquina com tanto acesso à db, ainda por cima a ir buscar a account.account inteira."

 

Isso deve ser problema a quem programa de uma forma errônea, em vista que você pode e deve utilizar indexar as consultas grandes no banco de dados tão logo não vai ter qualquer problema.

 

"Basicamente, deverias usar server_timers em vez de timers, visto que os timers são para a personagem, se fores abaixo ou te teleportares o temporizador para, o que não acontece com os timers..."

 

 

Em 16/11/2018 at 20:36, Karbust™ # PT disse:

Basicamente, deverias usar server_timers em vez de timers, visto que os timers são para a personagem, se fores abaixo ou te teleportares o temporizador para, o que não acontece com os timers...

 

Btw, esse status SHUTDOWN não te faz nada, o comando shutdown não deixa entrar ninguém, nem mesmo gm's com esse status. Qualquer status diferente de OK vai sempre dar erro...

 

Estou pleno de acordo com o que tu disse, deveria ser assim mais é capricho por hora, uma vez que meu char GM que vai ficar online precisa relogar vou precisar reiniciar a maquina então todos vão ficar off.

 

"Btw, esse status SHUTDOWN não te faz nada, o comando shutdown não deixa entrar ninguém, nem mesmo gm's com esse status. Qualquer status diferente de OK vai sempre dar erro..."

 

Nessa parte falou enorme besteira, uma vez que se você tivesse ao menos olhado a questão vai ver a opção, "deseja ficar online" logo o GM vai mudar de SHUTDOWN para OK.

 

A função SHUTDOWN você pode definir de forma adequada uma mensagem que o servidor esta em manutenção;

 

 

Bom acho que mais desenhado e perca de tempo que isso não tem.

 

Teste.

Share this post


Link to post
Share on other sites
2 minutos atrás, …Los† disse:

Vou tentar desenhar da melhor forma possivel:

 

 

 

1º vai o GM ao NPC logo ele clica em iniciar a manutenção .

2º quando chegar aos 10 minutos (mesmo que o player ou quem é que seja não esteja para receber a mensagem)

não vai fazer diferença porque o char GM vai tomar DC e vai precisar logar e para isso precisa reiniciar a maquina uma vez que executou o comando "shutdown", então mesmo que alguém fique logado vai ser deslogado, a mensagem é só formalidade pode ser dar o shutdown, vocês se apegaram mensagem porem  a principal funcionalidade é o banco de dados.

 

"Nem quero imaginar o stress que isto vai causar na máquina com tanto acesso à db, ainda por cima a ir buscar a account.account inteira."

 

Isso deve ser problema a quem programa de uma forma errônea, em vista que você pode e deve utilizar indexar as consultas grandes no banco de dados tão logo não vai ter qualquer problema.

 

"Basicamente, deverias usar server_timers em vez de timers, visto que os timers são para a personagem, se fores abaixo ou te teleportares o temporizador para, o que não acontece com os timers..."

 

 

 

Estou pleno de acordo com o que tu disse, deveria ser assim mais é capricho por hora, uma vez que meu char GM que vai ficar online precisa relogar vou precisar reiniciar a maquina então todos vão ficar off.

 

"Btw, esse status SHUTDOWN não te faz nada, o comando shutdown não deixa entrar ninguém, nem mesmo gm's com esse status. Qualquer status diferente de OK vai sempre dar erro..."

 

Nessa parte falou enorme besteira, uma vez que se você tivesse ao menos olhado a questão vai ver a opção, "deseja ficar online" logo o GM vai mudar de SHUTDOWN para OK.

 

A função SHUTDOWN você pode definir de forma adequada uma mensagem que o servidor esta em manutenção;

 

 

Bom acho que mais desenhado e perca de tempo que isso não tem.

 

Teste.

 

E agora diz-me, quando é que o status de cada conta vai ser mudado para SHUTDOWN? o.O

 

SHUTDOWN é o status definido globalmente para o servidor, todas as contas continuam com o status que tinham antes...

 

Portanto, o status do GM vai continuar como OK, mas ele não vai poder continuar no jogo visto que o comando shutdown vai, como o nome diz, desligar o servidor (desliga o jogo, não a máquina)...

 

Vai ver a source e tenta compreende-la e depois falamos...

Share this post


Link to post
Share on other sites
11 minutos atrás, Karbust™ # PT disse:

 

E agora diz-me, quando é que o status de cada conta vai ser mudado para SHUTDOWN? o.O

 

SHUTDOWN é o status definido globalmente para o servidor, todas as contas continuam com o status que tinham antes...

 

Portanto, o status do GM vai continuar como OK, mas ele não vai poder continuar no jogo visto que o comando shutdown vai, como o nome diz, desligar o servidor (desliga o jogo, não a máquina)...

 

Vai ver a source e tenta compreende-la e depois falamos...

 

Nessa linha todas as contas inclusive a do GM vai ficar SHUTDOWN:

mysql_direct_query("UPDATE account.account SET account.status='SHUTDOWN' WHERE status='OK'")

 

Logo em seguida você vai ter uma pergunta:  say("Olá Administrador, você deseja ficar ativo?")

mysql_direct_query("UPDATE account.account SET account.status='OK' WHERE status='SHUTDOWN'    limit 1;")

Então nessa linha você muda seu char GM de SHUTDOWN para OK, assim quando reiniciar esse e somente esse char vai poder logar.

Isso porque eu coloquei limit 1 na minha linha.

Então quando terminar a manutenção vai ao NPC terminar a manutenção:

mysql_direct_query("UPDATE account.account SET account.status='OK' WHERE status='SHUTDOWN'")

Então todos que estão com o status SHUTDOWN vai para OK sem levar a OK os banidos etc.. isso porque o WHERE é um filtro.

 

Mais é muito importante indexar as consultas que passam de 100 simultaneamente dependendo da sua maquina. Ao menos eu uso dessa forma para optimizar sua consulta.

 

 

Off:

 

Por acaso gostei disso kkkk


Jσgαя мєтiи é αятє...
รєя тσρ fαz ραятє...
รєя cнαмαdσ dє cнєαтєя є мσdα...
мαร cнєgαяєร à мiинα αlтυяα é fσdα!

Edited by …Los† (see edit history)

Share this post


Link to post
Share on other sites
6 minutos atrás, …Los† disse:

 

Nessa linha todas as contas inclusive a do GM vai ficar SHUTDOWN:


mysql_direct_query("UPDATE account.account SET account.status='SHUTDOWN' WHERE status='OK'")

 

Logo em seguida você vai ter uma pergunta:  say("Olá Administrador, você deseja ficar ativo?")


mysql_direct_query("UPDATE account.account SET account.status='OK' WHERE status='SHUTDOWN'    limit 1;")

Então nessa linha você muda seu char GM de SHUTDOWN para OK, assim quando reiniciar esse e somente esse char vai poder logar.

Isso porque eu coloquei limit 1 na minha linha.

Então quando terminar a manutenção vai ao NPC terminar a manutenção:


mysql_direct_query("UPDATE account.account SET account.status='OK' WHERE status='SHUTDOWN'")

Então todos que estão com o status SHUTDOWN vai para OK sem levar a OK os banidos etc.. isso porque o WHERE é um filtro.

Eu estou a falar da instrução

command("shutdown")

Ou ainda não entendes-te? Este comando mesmo com o status da conta alterado não vai deixar NINGUÉM entrar...

 

E mesmo que mudes o status das contas sem o comando SHUTDOWN vais kickar o pessoal todo como mesmo?

 

Para não falar que executar uma query dessas num servidor com um bom valor de contas criadas dá lag...

Share this post


Link to post
Share on other sites

"Para não falar que executar uma query dessas num servidor com um bom valor de contas criadas dá lag..."

 

Mais é muito importante indexar as consultas que passam de 100 simultaneamente dependendo da sua maquina. Ao menos eu uso dessa forma para optimizar sua consulta.

 

Justamente a mensagem vai pedir a todos para DESLOGAR D E S L O G A R, não importa se dar lag não vai ter ninguém a jogar para ter lag....

 

"Ou ainda não entendes-te? Este comando mesmo com o status da conta alterado não vai deixar NINGUÉM entrar..."

 

1º ativo a quest e coloco todos shutdown, porem informo que quero o GM online, então todos menos o GM vai ficar status SHUTODOWN.

2º começa contar o tempo: 10 minutos depois executa o shutdown ( vai colocar todos offline e até os gm).

3º reinicio a maquina e muda de off para shutdown nos status quando o player logar vai mostrar "Servidor em manutenção bla bla bla" porem o char GM vai logar porque o status esta OK.

 

Fim desisto.

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this