Jump to content
Close
underewarr

C++ Global save + Restarter

Recommended Posts

Um código simples para fazer o global server save, e logo após reiniciar o servidor.

 

Adicione no Config.Lua

 

shutdownAtGlobalSave = true
globalSaveEnabled = true

No Game.cpp adicione uma nova função

bool Game::isRunning(const char* name)
{
	PROCESSENTRY32 proc32;
    HANDLE hSnapshot;
 
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
    proc32.dwSize = sizeof(PROCESSENTRY32);
	bool isRunning = false;
	if(Process32First(hSnapshot, &proc32))
    {
        while(Process32Next(hSnapshot, &proc32))
        {
            std::string filename_str = std::string(proc32.szExeFile);
			if(filename_str == name)
            {
				isRunning = true;
            	break;
			}
        }
    }
 
    CloseHandle(hSnapshot);
    return isRunning;
}

Adicione em game.h

bool isRunning(const char* name);

Em Game.cpp procure por

void Game::setGameState(GameState_t newState)

E adicione logo a baixo.

 

Scheduler::getInstance().stop();
Dispatcher::getInstance().stop();

E abaixo disso adicione

const char* name = "AutoRun.exe";
if(!isRunning(name))
	WinExec(name, SW_SHOWNORMAL);

Em otsystem.h adicione um novo include

 

#include <windows.h>

Agora vamos anexar isso

#include <tlhelp32.h>

Esta feito agora basta compilar um programa chamado autorun.exe com o código a baixo. 

Após a compilação coloque o exe na pasta do servidor e inicie.

#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
 
const int _time = 10;
char* name = "Nazwa serwera.exe";
 
bool isRunning()
{
	PROCESSENTRY32 proc32;
    HANDLE hSnapshot;
 
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
    proc32.dwSize = sizeof(PROCESSENTRY32);
 
    std::cout << "Check the server is running." << std::endl;
	bool isRunning = false;
	if(Process32First(hSnapshot, &proc32))
    {
        while(Process32Next(hSnapshot, &proc32))
        {
            std::string filename_str = std::string(proc32.szExeFile);
			if(filename_str == name)
            {
				isRunning = true;
            	break;
			}
        }
    }
 
    CloseHandle(hSnapshot);
    return isRunning;
}
 
bool checkServer()
{
	while(true)
	{
		Sleep(_time * 1000);
		if(!isRunning())
		{
			std::cout << "Run the server." << std::endl;
			WinExec(name, SW_SHOWNORMAL);
			return true;
		}
	}
 
	return false;
}
 
int main()
{
    if(checkServer())
    	return 0;
 
    return 1;
}

Cade minhas badges? @Matk

Creditos: Underewar,Osk


Edited by underewarr (see edit history)



Share this post


Link to post
Share on other sites

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 



Não esqueçam de me marca quando eu responder em seu tópico, assim recebo a notificação e volto em seu tópico.
Não dou suporte em mensagem privada ou fora do fórum.
Não esqueça de reputa e agradecer a pessoa que lhe ajudou em algum tópico seu.
"Só ajudo quem eu vejo ajudando." xD

Não esqueça de reputa alguém que lhe ajudou ou tentou lhe ajudar, e agradeça com suas palavras. Seja grato por alguém ter lhe ajudado ou tentado lhe ajudar!

O coitadismo e o conformismo potencializado é a arte de sentir compaixão de si mesmo para você não utilize ferramentas capazes de transformar
sua história!!

-- Augusto Cury

 

                                                               ezgif-1-98aab239f3.gif




Share this post


Link to post
Share on other sites
13 horas atrás, underewarr disse:
Spoiler

 

Um código simples para fazer o global server save, e logo após reiniciar o servidor.

 

Adicione no Config.Lua

 



shutdownAtGlobalSave = true
globalSaveEnabled = true

No Game.cpp adicione uma nova função



bool Game::isRunning(const char* name)
{
	PROCESSENTRY32 proc32;
    HANDLE hSnapshot;
 
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
    proc32.dwSize = sizeof(PROCESSENTRY32);
	bool isRunning = false;
	if(Process32First(hSnapshot, &proc32))
    {
        while(Process32Next(hSnapshot, &proc32))
        {
            std::string filename_str = std::string(proc32.szExeFile);
			if(filename_str == name)
            {
				isRunning = true;
            	break;
			}
        }
    }
 
    CloseHandle(hSnapshot);
    return isRunning;
}

Adicione em game.h



bool isRunning(const char* name);

Em Game.cpp procure por



void Game::setGameState(GameState_t newState)

E adicione logo a baixo.

 



Scheduler::getInstance().stop();
Dispatcher::getInstance().stop();

E abaixo disso adicione



const char* name = "AutoRun.exe";
if(!isRunning(name))
	WinExec(name, SW_SHOWNORMAL);

Em otsystem.h adicione um novo include

 



#include <windows.h>

Agora vamos anexar isso



#include <tlhelp32.h>

Esta feito agora basta compilar um programa chamado autorun.exe com o código a baixo. 

Após a compilação coloque o exe na pasta do servidor e inicie.



#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
 
const int _time = 10;
char* name = "Nazwa serwera.exe";
 
bool isRunning()
{
	PROCESSENTRY32 proc32;
    HANDLE hSnapshot;
 
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
    proc32.dwSize = sizeof(PROCESSENTRY32);
 
    std::cout << "Check the server is running." << std::endl;
	bool isRunning = false;
	if(Process32First(hSnapshot, &proc32))
    {
        while(Process32Next(hSnapshot, &proc32))
        {
            std::string filename_str = std::string(proc32.szExeFile);
			if(filename_str == name)
            {
				isRunning = true;
            	break;
			}
        }
    }
 
    CloseHandle(hSnapshot);
    return isRunning;
}
 
bool checkServer()
{
	while(true)
	{
		Sleep(_time * 1000);
		if(!isRunning())
		{
			std::cout << "Run the server." << std::endl;
			WinExec(name, SW_SHOWNORMAL);
			return true;
		}
	}
 
	return false;
}
 
int main()
{
    if(checkServer())
    	return 0;
 
    return 1;
}

Cade minhas badges? @Matk

Creditos: Underewar,Osk

 

 

 

Consegue por pra linux tambem?



5b3137d809d1ec649c262b60c0e3ea2869a757de

 




Share this post


Link to post
Share on other sites
28 minutos atrás, Zzyzx disse:

Consegue por pra linux tambem?

 

não consigo, mas vou tentar se funcionar eu te marco aqui, na verdade nunca tentei fazer para linux.





Share this post


Link to post
Share on other sites
10 horas atrás, underewarr disse:

não consigo, mas vou tentar se funcionar eu te marco aqui, na verdade nunca tentei fazer para linux.

 

Blzzz



5b3137d809d1ec649c262b60c0e3ea2869a757de

 




Share this post


Link to post
Share on other sites

@Zzyzx  Qual source tu usa?





Share this post


Link to post
Share on other sites
6 minutos atrás, underewarr disse:

@Zzyzx  Qual source tu usa?

 

TFS 0.4 3777

mas o servidor não ta online ainda.



5b3137d809d1ec649c262b60c0e3ea2869a757de

 




Share this post


Link to post
Share on other sites

o BLACKLIST esta ativado na source?

 

@Zzyzx


Edited by underewarr (see edit history)



Share this post


Link to post
Share on other sites
22 minutos atrás, underewarr disse:

o BLACKLIST esta ativado na source?

 

@Zzyzx

 

Não, não tem.



5b3137d809d1ec649c262b60c0e3ea2869a757de

 




Share this post


Link to post
Share on other sites
1 minuto atrás, Zzyzx disse:

Não, não tem.

 

Para desativar.

Em otserv.cpp , procure por :

{
#if defined(WINDOWS) && !defined(__CONSOLE__)
if(MessageBox(GUI::getInstance()->m_mainWindow, "Unable to fetch blacklist! Continue?", "Blacklist", MB_YESNO) == IDNO)
#else
std::cout << "Unable to fetch blacklist! Continue? (y/N)" << std::endl;
char buffer = getchar();
if(buffer == 10 || (buffer != 121 && buffer != 89))
#endif
startupErrorMessage("Unable to fetch blacklist!");
}

substitua por :

/*{
#if defined(WINDOWS) && !defined(__CONSOLE__)
if(MessageBox(GUI::getInstance()->m_mainWindow, "Unable to fetch blacklist! Continue?", "Blacklist", MB_YESNO) == IDNO)
#else
std::cout << "Unable to fetch blacklist! Continue? (y/N)" << std::endl;
char buffer = getchar();
if(buffer == 10 || (buffer != 121 && buffer != 89))
#endif
startupErrorMessage("Unable to fetch blacklist!");
}*/

Agora no linux :

while true; do ./theforgottenserver -y; done





Share this post


Link to post
Share on other sites
4 minutos atrás, underewarr disse:

Para desativar.

Em otserv.cpp , procure por :


{
#if defined(WINDOWS) && !defined(__CONSOLE__)
if(MessageBox(GUI::getInstance()->m_mainWindow, "Unable to fetch blacklist! Continue?", "Blacklist", MB_YESNO) == IDNO)
#else
std::cout << "Unable to fetch blacklist! Continue? (y/N)" << std::endl;
char buffer = getchar();
if(buffer == 10 || (buffer != 121 && buffer != 89))
#endif
startupErrorMessage("Unable to fetch blacklist!");
}

substitua por :


/*{
#if defined(WINDOWS) && !defined(__CONSOLE__)
if(MessageBox(GUI::getInstance()->m_mainWindow, "Unable to fetch blacklist! Continue?", "Blacklist", MB_YESNO) == IDNO)
#else
std::cout << "Unable to fetch blacklist! Continue? (y/N)" << std::endl;
char buffer = getchar();
if(buffer == 10 || (buffer != 121 && buffer != 89))
#endif
startupErrorMessage("Unable to fetch blacklist!");
}*/

Agora no linux :

while true; do ./theforgottenserver -y; done

 

foi mal, me expressei mal, quando falei que não tem, queria ter dito que estava desativado, kk



5b3137d809d1ec649c262b60c0e3ea2869a757de

 




Share this post


Link to post
Share on other sites
Em 05/11/2018 em 22:13, underewarr disse:

não consigo, mas vou tentar se funcionar eu te marco aqui, na verdade nunca tentei fazer para linux.

 

conseguiu pra linux ?? minha tfs é 0.4





Share this post


Link to post
Share on other sites
Em 28/12/2018 em 16:07, BilauX disse:

conseguiu pra linux ?? minha tfs é 0.4

 

Agora no linux :

while true; do ./theforgottenserver -y; done

@BilauX





Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...