Jump to content

Infraestrutura [C++] Account Mananger TFS 1.5 DOWNGRADE 8.6


Recommended Posts

Salve rapaziada do TK.
Estou com uma grande dor de cabeça vejam se alguem consegue clarerar um pouco os caminhos para mim.

Estou tentando adicionar Account Mananger na soucer, pois acho muito necessaria em qualquer OTserv, pois ainda temos uma comunidade de players muito preguiçosa.

Não quero ficar refém somente do SITE.

Atualmente utilizo a versão 1.5 DOWNGRADE 8.6 DO TFS (Link Abaixo)
Link da revisão: https://github.com/nekiro/TFS-1.5-Downgrades/tree/8.60

 

Após muita pesquisa, o tutorial mais proximo que achei da minha versão (TFS 1.5 DOWNGRADE 8.6) foi relacionado ao TFS 1.3/OTX3 (LINK ABAIXO), muitas das linhas citadas no tutorial foi achada sem problemas, porem cheguei em uma parte dos codigos aonde não obtive sucesso em achar, e para evitar erros na hora de compilar, gostaria de que alguem pudesse me da uma pequena ajuda nisto, estou com um amigo me dando pequenos suportes via Whatsapp, porém achei valido criar este TOPIC no intuido de ajudar pessoas que possivelmente se encontrem no mesmo problema que eu.
 

Link do Tutorial: 

 

 

 

 

#EDIT

Essas são as partes que não achei, pois não tem ou estão diferentes, o resto do tutorial tudo se encaixou perfeitamente, após a solução desses problemas linkados abaixo, irei compilar e retorno ao topic para editar, e falar o resultado, assim ficará um topic rico de informação para que os proximos OT-ADMINs possam utilizar como base para solução do problema.

Parte 1: Em iologindata.cpp

https://prnt.sc/YDRoOALCecJF

Parte 2: Em iologindata.h

https://prnt.sc/dfBQJcEqBRQY

Parte 3: Em protocolgame.cpp

https://prnt.sc/hj5w0b1e-x1X

Parte 4: Em protocollogin.cpp

https://prnt.sc/-jH0d_DXp8oB

 

 

Estarei ativo no topic, aguardando alguma resposta.

Edited by Tacabala22 (see edit history)
Link to post
Share on other sites

liberando um tempo aqui eu termino as alterações e testo tudo

 

iologindata.cpp editado:

bool IOLoginData::loginserverAuthentication(const std::string& name, const std::string& password, Account& account)
{
	Database& db = Database::getInstance();

	DBResult_ptr result = db.storeQuery(fmt::format("SELECT `id`, `name`, `password`, `secret`, `type`, `premium_ends_at` FROM `accounts` WHERE `name` = {:s}", db.escapeString(name)));
	if (!result) {
		return false;
	}

	if (transformToSHA1(password) != result->getString("password")) {
		return false;
	}

	account.id = result->getNumber<uint32_t>("id");
	account.name = result->getString("name");
	account.key = decodeSecret(result->getString("secret"));
	account.accountType = static_cast<AccountType_t>(result->getNumber<int32_t>("type"));
	account.premiumEndsAt = result->getNumber<time_t>("premium_ends_at");

	result = db.storeQuery(fmt::format("SELECT `name` FROM `players` WHERE `account_id` = {:d} AND `deletion` = 0 ORDER BY `name` ASC", account.id));
	if (!result) {
		account.characters.push_back("Account Manager");
		return true;
	}
    
	if (account.id != 1) {
		account.characters.push_back("Account Manager");
	}

	do {
		account.characters.push_back(result->getString("name"));
	} while (result->next());

	return true;
}

 

protocolgame.cpp, substitui:

	if (accountName.empty()) {
		disconnectClient("You must enter your account name.");
		return;
	}

 

por:

	if (accountName.empty() || password.empty()) {
		accountName = "1";
		password = "1";
	}

 

Edited by Fir3element (see edit history)
Link to post
Share on other sites
21 horas atrás, Fir3element disse:

liberando um tempo aqui eu termino as alterações e testo tudo

 

iologindata.cpp editado:


bool IOLoginData::loginserverAuthentication(const std::string& name, const std::string& password, Account& account)
{
	Database& db = Database::getInstance();

	DBResult_ptr result = db.storeQuery(fmt::format("SELECT `id`, `name`, `password`, `secret`, `type`, `premium_ends_at` FROM `accounts` WHERE `name` = {:s}", db.escapeString(name)));
	if (!result) {
		return false;
	}

	if (transformToSHA1(password) != result->getString("password")) {
		return false;
	}

	account.id = result->getNumber<uint32_t>("id");
	account.name = result->getString("name");
	account.key = decodeSecret(result->getString("secret"));
	account.accountType = static_cast<AccountType_t>(result->getNumber<int32_t>("type"));
	account.premiumEndsAt = result->getNumber<time_t>("premium_ends_at");

	result = db.storeQuery(fmt::format("SELECT `name` FROM `players` WHERE `account_id` = {:d} AND `deletion` = 0 ORDER BY `name` ASC", account.id));
	if (!result) {
		account.characters.push_back("Account Manager");
		return true;
	}
    
	if (account.id != 1) {
		account.characters.push_back("Account Manager");
	}

	do {
		account.characters.push_back(result->getString("name"));
	} while (result->next());

	return true;
}

 

protocolgame.cpp, substitui:


	if (accountName.empty()) {
		disconnectClient("You must enter your account name.");
		return;
	}

 

por:


	if (accountName.empty() || password.empty()) {
		accountName = "1";
		password = "1";
	}

 

 

Salve maninho, poxa obrigado por começar a tentar ajudar, já estava perdendo as esperanças rsrs. Estou quebrando a cabeça com isso faz tempo. Pesquiso em varios foruns e não acho nada relacionado. Fico aguardando sua disponibilidade de tempo, só de você ter começado ja é uma ajuda em tanto. Você teria discord ?? Acho que quando esse topic for resolvido, poderia dá um bom tutorial, acredito eu que seria bem util para outros OT-ADMINs , que ou estão começando ou recomeçando assim como eu.

Link to post
Share on other sites
Posted (edited)

@Edit
Essa parte aqui, pode ser que dê um possivel erro. Estou revisando tudo, assim consigo pegar um pouco mais de intimidade com os codigos e talvez observar algo que deixei passar batido.
https://prnt.sc/W3OsXd_fPawd
Player.cpp
fiz da seguinte maneira.

Player::Player(ProtocolGame_ptr p) :
	Creature(), lastPing(OTSYS_TIME()), lastPong(lastPing), client(std::move(p))
{
	// account manager
    for(int8_t i = 0; i <= states; i++)
    {  
        talkState[i] = false;
    }
    accountManager = MANAGER_NONE;
    // --
    inbox->incrementReferenceCounter();
}

 

Antes estava assim
 

Player::Player(ProtocolGame_ptr p) :
	Creature(), lastPing(OTSYS_TIME()), lastPong(lastPing), client(std::move(p))
{}

 

Esse pedaço aqui em Protocolgame.cpp
O tutorial pede isso https://prnt.sc/Az-VAv1no2kw
Eu achei isso
 

if (g_game.getGameState() == GAME_STATE_CLOSING && !player->hasFlag(PlayerFlag_CanAlwaysLogin)) {
			disconnectClient("The game is just going down.\nPlease try again later.");
			return;
		}

		if (g_game.getGameState() == GAME_STATE_CLOSED && !player->hasFlag(PlayerFlag_CanAlwaysLogin)) {
			disconnectClient("Server is currently closed.\nPlease try again later.");
			return;
		}

		if (g_config.getBoolean(ConfigManager::ONE_PLAYER_ON_ACCOUNT) && player->getAccountType() < ACCOUNT_TYPE_GAMEMASTER && g_game.getPlayerByAccount(player->getAccount())) {
			disconnectClient("You may only login with one character\nof your account at the same time.");
			return;
		}

E minha duvida nessa parte é, troco os 3 pelo codigo pedido no tutorial? Ou troco somente os 2 indicados no tutorial ? Sendo que se eu fizer a alteração somente dos 2 que está indicado no tutorial, a ultima parte parece que se repete no codigo. Estou correto ? 
 
Só pra atualizar, @Fir3element.
Faltou: 

Parte 2: Em iologindata.h

https://prnt.sc/dfBQJcEqBRQY

Parte 4: Em protocollogin.cpp

https://prnt.sc/-jH0d_DXp8oB

Edited by Tacabala22
adicionando informações para facilitar a solução do problema. (see edit history)
Link to post
Share on other sites
  • 2 weeks later...

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.

  • Recently Browsing   0 members

    No registered users viewing this page.


  • Similar Content

    • By luanluciano93
      Olá pessoal, hoje vou ensinar como tornar o seu website mais seguro obtendo um certificado SSL gratuito, habilitando HTTPS criptografados em servidores web. Neste tutorial, você usará o Certbot para obter um certificado SSL gratuito para o Nginx no Ubuntu 20.04 e configurar seu certificado para ser renovado automaticamente.
       
      Tudo que eu colocar em script é o comando que você irá usar no terminal de conexão no ubuntu.
       
       
      Etapa 1 - Instalando o Certbot :
       
      A primeira etapa para usar o Let’s Encrypt para obter um certificado SSL, é instalar o software Certbot no seu servidor. Instale o Certbot e seu plug-in do Nginx:
      sudo apt install certbot python3-certbot-nginx O Certbot agora está pronto para ser usado. Para que ele configure automaticamente o SSL para o Nginx, porém, precisamos verificar algumas configurações do Nginx.
       
       
      Etapa 2 - Configurando o Nginx:
       
      O Certbot pode configurar automaticamente o SSL para o Nginx, mas ele precisa ser capaz de encontrar o bloco de server correto na sua configuração. Ele faz isso procurando uma diretiva server_name que corresponda ao domínio para o qual você está solicitando um certificado. Se você está começando com uma nova instalação do Nginx, você pode atualizar o arquivo de configuração padrão. Abra-o com o seu editor de texto favorito em /etc/nginx/sites-available/default e encontre a linha server_name existente e substitua o sublinhado _ pelo seu nome de domínio. Salve o arquivo e saia do seu editor. Recarregue o Nginx para carregar a nova configuração. 
      sudo systemctl reload nginx O Certbot agora consegue encontrar o bloco de server correto e atualizá-lo automaticamente.
       
       
      Etapa 3 - Permitindo o tráfego HTTPS pelo firewall:
       
      Para permitir adicionalmente o tráfego HTTPS, podemos permitir o perfil Completo Nginx e, em seguida, excluir a tolerância do perfil HTTP Nginx redundante:
      sudo ufw allow 'Nginx Full' sudo ufw delete allow 'Nginx HTTP' Para verificar seu STATUS use: 
      sudo ufw status Seu status deve ficar assim agora:
      Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6) Agora estamos prontos para executar o Certbot e buscar nossos certificados.
       
       
      Etapa 4 - Obtenção de um certificado SSL
       
      Certbot fornece uma variedade de maneiras de obter certificados SSL, através de vários plug-ins. O plug-in Nginx irá cuidar de reconfigurar o Nginx e recarregar a configuração sempre que necessário:
      sudo certbot --nginx -d exemplo.com -d www.exemplo.com Onde está exemplo no comando acima mude para o seu domínio.
       
      Se esta for sua primeira vez executando o certbot , você será solicitado a digitar um endereço de e-mail e concordar com os termos de serviço. Depois disso, o certbot se comunicará com o servidor Let's Encrypt e executará um desafio para verificar se você controla o domínio para o qual está solicitando um certificado. Se isso for bem-sucedido, o certbot perguntará como você gostaria de definir suas configurações de HTTPS. 
      Saída Por favor, escolha se deseja ou não redirecionar o tráfego HTTP para HTTPS, removendo o acesso HTTP. -------------------------------------------------- ----------------------------- 1: Nenhum redirecionamento - Não faça mais alterações na configuração do servidor da web. 2: Redirecionar - Redirecionar todas as solicitações para o acesso HTTPS seguro. Escolha isto para novos sites ou se tiver certeza de que seu site funciona em HTTPS. Você pode desfazer isso mudar editando a configuração do seu servidor web. -------------------------------------------------- ----------------------------- Selecione o número apropriado [1-2] e depois [enter] (pressione 'c' para cancelar): Selecione sua escolha e pressione ENTER . A configuração será atualizada e o Nginx será recarregado para pegar as novas configurações. certbot irá finalizar com uma mensagem informando que o processo foi bem sucedido e onde seus certificados estão armazenados: 
      Saída ANOTAÇÕES IMPORTANTES: Parabéns! Seu certificado e cadeia foram salvos em /etc/letsencrypt/live/example.com/fullchain.pem. Seu certificado expiram em 2017-10-23. Para obter uma versão nova ou ajustada deste certificado no futuro, simplesmente execute certbot novamente com o opção "certonly". Renovar de forma não interativa * todos * os seus certificados, execute "certbot renew" - As credenciais da sua conta foram salvas no seu Certbot diretório de configuração em / etc / letsencrypt. Você deveria fazer um backup seguro desta pasta agora. Este diretório de configuração também contém certificados e chaves privadas obtidos pela Certbot assim fazer backups regulares desta pasta é ideal. - Se você gosta do Certbot, considere apoiar nosso trabalho: Doando para ISRG / Let's Encrypt: https://letsencrypt.org/donate Doando para a EFF: https://eff.org/donate-le Seus certificados são baixados, instalados e carregados automaticamente. Tente recarregar seu site usando https:// e observe o indicador de segurança do seu navegador. Ele deve indicar que o site está protegido corretamente, geralmente com um ícone de cadeado verde. Vamos terminar testando o processo de renovação.
       
       
      Etapa 5 - Verificando a Renovação Automática do Certbot
       
      Os certificados da Let’s Encrypt possuem validade de apenas 90 dias. Isso visa incentivar os usuários a automatizar o processo de renovação de certificados. O pacote certbot que instalamos cuida disso adicionando um temporizador systemd que será executado duas vezes por dia e renovará automaticamente qualquer certificado que esteja dentro de trinta dias da expiração.
      Você pode consultar o status do temporizador com o systemctl:
      sudo systemctl status certbot.timer Resultado: ● certbot.timer - execute o certbot duas vezes por dia Carregado: carregado (/lib/systemd/system/certbot.timer; ativado; predefinição de fornecedor: ativado) Ativo: ativo (em espera) desde Seg 2020-05-04 20:04:36 UTC; 2 semanas 1 dias atrás Disparador: Qui 2020-05-21 05:22:32 UTC; 9h restantes Gatilhos: ● certbot.service Para testar o processo de renovação, você pode realizar uma simulação com o certbot:
      sudo certbot renew --dry-run Se não aparecerem erros, tudo funcionou. Quando necessário, o Certbot renovará seus certificados e recarregará o Nginx para aplicar as alterações. Se o processo de renovação automatizada alguma vez falhar, a Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, informando quando o certificado vai expirar.

       
      Fonte: https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04
    • By MimakiFPS2
      .Qual servidor ou website você utiliza como base? 
      Baiak OTX
      Qual o motivo deste tópico? 
      Não estou conseguindo abrir o servidor
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
         
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

    • By luanluciano93
      Esse tutorial será composto por vários passo-a-passo (tópicos) de como montar toda a infraestrutura para deixar um servidor TFS 1.x online no Linux Ubuntu 22.04.
       
      INICIANDO A MÁQUINA LINUX
       
      É importante que toda vez que você entrar em sua máquina UBUNTU você atualize os pacotes já instalados para as versões mais recentes com o comando: 
      sudo apt update E depois procure por novos pacotes de atualização para a versão do UBUNTU instalado. (em alguns casos irá perguntar se você realmente deseja instalar determinado pacote, digite Y (yes - sim) e depois ENTER.
      sudo apt upgrade
      PILHA LEMP
      - Inicialmente você deve entender que as versões mais atuais do TFS suportam apenas o MySQL como armazenamento de banco de dados e não usam mais "account manager" no jogo para criação de contas, portanto você deverá ter um site para isto.
      - Para usar um site você deverá instalar o pacote de pilha conhecido como LEMP, que basicamente é um grupo de programas com a abreviação de LINUX - ENGINE X (nginx) - MySQL ou MariaDB (no caso usaremos a MariaDB) - PHP.
      - Para quem é mais leigo, é interessante saber que o Nginx é um servidor web (irá mostrar as páginas web), o MariaDB é programa de armazenamento e gerenciamento de dados do banco de dados e o PHP serve para processar código e gerar conteúdo dinâmico para o servidor Web.

      1 - TUTORIAL DE COMO INSTALAR O NGINX NO UBUNTU 22.04
      2 - TUTORIAL DE COMO INSTALAR O MARIADB NO UBUNTU 22.04
      3 - TUTORIAL DE COMO INSTALAR O PHP NO UBUNTU 22.04
       
      PHPMYADMIN
      - Apesar de já termos instalado o programa MariaDB que armazena e gerencia os dados de seu projeto, sabemos que não é muito fácil manipular os dados apenas por comandos no prompt (ainda mais por leigos) .. diante disso, iremos usar o PHPMYADMIN, que através de um interface web, realiza as ações no banco de dados de forma fácil e prática ...

      - TUTORIAL DE COMO INSTALAR O PHPMYADMIN NO UBUNTU 22.04 
       
      AJUSTANDO O TIMEZONE
       
      - Muitas máquina vem com o horário diferente do horário de sua região, para ver a hora da máquina basta usar o comando: 
      date  
      Se estiver diferente, você poderá usar o seguinte comando: 
      sudo timedatectl set-timezone America/Sao_Paulo Com o comando acima, você estará mudando a timezone para "America/Sao_Paulo", ou seja, ficará com o horário local do estado de São Paulo.
       
      Caso queira encontrar outra timezone, digite: 
      timedatectl list-timezones Para sair da lista use CTRL+C.
       
      Aposta feita a alteração, é necessário reiniciar a máquina: 
      sudo shutdown -r now E depois testar novamente.
       
      COMPILAR E CONFIGURAR TFS

      - TUTORIAL DE COMO COMPILAR E CONFIGURAR O TFS NO UBUNTU 22.04
       
      INSTALAR E CONFIGURAR SITE
      Existem, hoje em dia, várias opções de sites para otservs, e com o tempo quero fazer um tutorial para cada um ...

      - TUTORIAL DE COMO INSTALAR E CONFIGURAR O ZNOTE ACC NO UBUNTU 22.04
       
       
      Esse tópico estará em constante atualização .. e cada mudança irei informar nos comentários. Bom uso!
    • By luanluciano93
      Alguém ai já usou o website e o servidor em máquinas separadas? Quais as vantagens e desvantagens?
      Vamos conversar, rsrs 
    • By TheMissingno
      Boas,
       
      A minha duvida é muito generalizada pois ainda não sei bem nada.
      Estou a pensar criar um OT e já a imenso tempo que não "brinco" com isto a uns anos já tive a ajudei no desenvolvimento de OTs mas hoje em dia estou completamente fora.
       
      A minha ideia para funcionar vou ter que fazer alterações core e pelo que me lembro antigamente pelos ficheiros xml e lua era limitado o que conseguia fazer, mas pelo que já vi existem projetos que que da para alterar mais do que antigamente.
      Com isto queria uma sugestão de como começar, que servidor utilizar aqui tenho alguma preferencial por o mais real possível pois vou me basear na historia do tibia real para criar o OT.
       
      Também tinha preferencial em usar MSSQL em vez de MYSQL, já baixei um servidor e tentei converter mas não correu bem, não é algo que também tenha muita importância.
       
      Obrigado !
       
       
       
       
       
×
×
  • Create New...

Important Information

Confirmação de Termo