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
      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 !
       
       
       
       
       
    • By jeangodoyy
      .Qual servidor ou website você utiliza como base? 
      nolstarius
      Qual o motivo deste tópico? 
      preciso de um desenvolvedor de otserv
      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.
       
      AUTOMYSQLBACKUP
      - É um programa que faz o backup automático do MySQL (ou MariaDB), realizando backups automaticamente em intervalos regulares. (diário, semanal e mensal)

      - TUTORIAL DE COMO INSTALAR E CONFIGURAR O AUTOMYSQLBACKUP NO UBUNTU 22.04
       
      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
      Olá, esse tutorial é uma parte do tópico principal: "Tutorial completo de infraestrutura para montar um servidor TF 1.x no Ubuntu 22.04" ... 

      Aqui ensinaremos como instalar o automysqlbackup.
       
      PASSO 1 - COMO INSTALAR O AUTOMYSQLBACKUP
       
      O backup automático do MySQL (ou MariaDB) é um programa utilitário que realiza backups automaticamente em intervalos regulares. 
       
      Para Instalar o automysqlbackup use o comando abaixo e posterior digite Y para aceitar a instalação: 
      sudo apt install automysqlbackup Agora, para deixar as coisas inalteradas, escolha “No configuration” (em configuração) ....
       

       
      Use o comando abaixo para executar o backup automático: 
      sudo automysqlbackup  
      PASSO 2 - COMO CONFIGURAR O AUTOMYSQLBACKUP
       
      O local padrão para backups automáticos é /var/lib/automysqlbackup, lá você pode ver três diretórios: daily (diário), weekly (semanal) e monthly (mensal), contendo os respectivos backups SQL compactados.
       
      É interessante criar um atalho da pasta onde fica os backups automáticos na pasta do seu site: 
      sudo ln -s /var/lib/automysqlbackup /home/www Edite o que está em vermelho para o caminho do eu servidor.
       
      O arquivo de configuração para automysqlbackup está disponível em /etc/default/automysqlbackup Você pode alterar as configurações de acordo com sua necessidade.
       
      Se quiser ver ele traduzido para melhor entendê-lo, aqui está: https://raw.githubusercontent.com/luanluciano93/ESTUDOS/master/infraestrutura/default_automyqlbackup

      A princípio é isso!
       
      Siga as atualizações no tópico principal: "Tutorial completo de infraestrutura para montar um servidor TF 1.x no Ubuntu 22.04" ... 
       
       
      Fontes: 
      - https://devopsarticle.com/install-create-backup-restore-mysql-on-ubuntu-20-04-lts-6-easy-steps/
×
×
  • Create New...

Important Information

Confirmação de Termo