Ir para conteúdo
  • Cadastre-se

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


Posts Recomendados

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.

Editado por Tacabala22 (veja o histórico de edições)
Link para o post
Compartilhar em outros 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";
	}

 

Editado por Fir3element (veja o histórico de edições)
Link para o post
Compartilhar em outros 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 para o post
Compartilhar em outros sites

@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

Editado por Tacabala22
adicionando informações para facilitar a solução do problema. (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 3 months later...
  • 3 weeks later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por matheuzinPXT
      Iae meus queridos, boa noite. 

      Jogava na época do 8.60. Tenho vontade de montar um server, e fico com algumas dúvidas.
       
      Vejo alguns servidores com sistemas bem diferentes, asas nos personagens, várias sprites, os itens que possuem efeitos/animações estão rápidos igual as versões 12+
       
      Como funciona? É feito um cliente próprio para essas alterações ou utilizado o próprio da cip mesmo?
       
      Estou começando a estudar programação, e quero aprender mais sobre o jogo
       
    • Por DiigooMix
      Olá pessoal, gostaria de saber como posso resolver esse problema de login failed no cliente 13x.

       
      Server que estou usando como base: Canary 13x
      Cliente com IP configurado
      Não sei se tem algo errado com isso, mas mesmo com a distro mostrando "server online", no site aparece "server offline"

       
      Site que estou usando: Canary AAC
      Li em muitos posts que pode ser algo relacionado com o "login.lua", mas não achei esse arquivo  para o site Canary AAC. Se houver alguém com este arquivo, poderia me disponibilizar, por gentileza?
       
       
      Uma segunda dúvida
      Como posso revolver o problema com as imagens do site?

       
      Agradeço desde já por toda e qualquer ajuda.
    • Por marcoshps11
      Neste tutorial, irei ensinar configurar o Docker no windows e rodar seu otserver
       
       
      - Diferença entre Docker x Máquina virtual:
        Docker e Máquinas Virtuais (VMs) ambas são fundamentais usadas para isolar recursos em um sistema de computação, mas funcionam de maneiras muito diferentes.
       
        VMs são ambientes de computação completos, incluindo um sistema operacional (SO) completo, que simulam o hardware de um computador físico. Isso significa que cada VM é um sistema autônomo e independente.   Já o Docker, usa a tecnologia de contêineres. Os contêineres compartilham o mesmo sistema operacional do host, mas mantêm seu próprio espaço de processo, arquivos e rede. Isso significa que eles são muito mais leves do que as VMs, pois não precisam de um SO completo, e podem ser iniciados e parados muito mais rapidamente.
      - Vantagens em utilizar o Docker
       O Docker oferece várias vantagens significativas:
      Eficiência de recursos: Como os contêineres Docker compartilham o SO do host, eles são mais leves e usam menos recursos do que as VMs. Portabilidade: O Docker permite que você "construa uma vez, execute em qualquer lugar". Uma vez criado um contêiner Docker, ele pode ser executado em qualquer sistema que suporte o Docker, independentemente das configurações subjacentes. Isolamento: Cada contêiner Docker é isolado do resto do sistema, o que ajuda a evitar conflitos entre diferentes aplicações e versões de software. Integração e entrega contínua: O Docker se integra bem com ferramentas de CI/CD (Integração Contínua / Entrega Contínua), permitindo a automatização de testes e implantação de aplicações. Escalabilidade e Orquestração: O Docker facilita a escalabilidade de aplicações, permitindo que múltiplos contêineres sejam implantados facilmente. Além disso, com ferramentas como Docker Swarm e Kubernetes, a orquestração de contêineres se torna eficiente e gerenciável  
       
      Colocando a mão na massa
       
      Este tutorial será dividido nas seguintes etapas:
      Preparação do Windows Instalando o Docker Instalando imagens mariadb e phpmyadmin Realizando a build da imagem TFS  
      1º PASSO:  Preparando o Windows com o subsistema Linux.
       
      AVISO: Essa Etapa será necessária somente caso ainda não possua o subsistema Linux ativado em seu windows
       
      Os comandos a seguir, serão todos utilizando o POWERSHELL do windows, na barra de pesquisa digite POWERSHELL e execute como administrador.
       

       
      Com o POWERSHELL aberto, execute os seguintes comandos:
       
      Habilitando subsistema Linux:
        dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart  
       
      Habilitando recurso de máquina virtual: dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart  
      Baixe e instale Kernel do Linux:  
      https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
       
      Após essa etapa, será necessário reiniciar o computador para atualização, após reiniciar, abra novamente o PowerShell
       
      Definindo o WSL 2 como padrão: wsl --set-default-version 2  
       
      Após esses passos, basta entrar na Microsoft Store e instalar o sistema Ubuntu:


       
      Após a instalação, abra o Ubuntu, como será a primeira vez, irá solicitar para que digite um nome de usuário e uma senha.

       
       
       
      Etapa 1 concluída.
       
      Fonte: https://learn.microsoft.com/pt-br/windows/wsl/install-manual
       
      2º PASSO:  Instalando Docker.
       
      este é um passo simples, apenas entre no site oficial do Docker, baixe e instale o Docker Desktop

      https://www.docker.com/
       

       
       
      Etapa 2 concluída.
       
       
      3º PASSO:  Instalando imagens MariaDB e phpMyAdmin
       
       Assim como no passo 1, execute novamente o PowerShell como administrador e siga os seguintes passos:
       
      Primeiro vamos baixar as imagens necessárias, execute os seguintes comandos: docker pull mariadb  
      docker pull phpmyadmin/phpmyadmin  
       
      Agora iremos criar uma "Rede" para que o docker se comunique entre os containers que iremos utilizar. Execute o seguinte comando:  
      docker network create mynetwork  
        mynetwork é o nome que defini neste caso, você pode utilizar o nome que achar melhor, porém lembre-se desse nome que iremos utilizar nos próximos passos.
       
      Agora iremos iniciar essas imagens, utilizando os seguintes comandos:  
      docker run --name mariadb --network=mynetwork -e MYSQL_ROOT_PASSWORD=your_password -d mariadb  
      your_password = altere pela senha que deseja utilizar no mysql
      mynetwork = é o nome que criamos no passo anterior
       
      docker run --name myadmin --network=mynetwork --link mariadb:db -d -p 8080:80 phpmyadmin/phpmyadmin  
      Lembrando novamente, mynetwork é o nome criado anteriormente
       
      Após esses passos, será possível ver seu container rodando no Docker Desktop:

       
      Etapa 3 concluída.
       
      4º PASSO:  Gerando Imagem do TFS e configurações necessárias:

       
      Baixe a TFS, nesse exemplo será o repositório oficial https://github.com/otland/forgottenserver Extraia os arquivos após baixar com o container mariadb e phpmyadmin rodando, acesse http://localhost:8080/  com o login root, e a senha que criou no passo 3, crie uma nova base de dados e importe o arquivo schema.sql do servidor edite o arquivo config.lua.dist
       -- MySQL
      mysqlHost = "mariadb"
      mysqlUser = "root"
      mysqlPass = "SUA SENHA CRIADO NO PASSO 3"
      mysqlDatabase = "NOME DA DATABASE"
      mysqlPort = 3306
      mysqlSock = ""

      mariadb é o nome do container que estamos rodando o mysql  
       
      ** Caso queira utilizar todo potencial do seu computador na hora de buildar a TFS, no arquivo Dockerfile, edite a linha 18:
      RUN cmake --preset default && cmake --build --config RelWithDebInfo --preset default para
       
      RUN cmake --preset default && cmake --build --config RelWithDebInfo --preset default -- -j 16  
      onde 16 é o numero de processadores lógicos que deseja ser utilizados, não é necessário utilizar 100% porém quanto mais melhor, porém caso utilize mais do que está disponível poderá travar,  então utilize a quantidade mostrada pra menos.
      no gerenciador de tarefas aba desempenho, é possível visualizar a quantidade de núcleos e processadores lógicos do seu CPU


       
      Após isso, entre no Power Shell e execute o comando:  
      docker build -t server .  
       onde "server" é o nome da imagem que será gerada
       
      Após isso, é só iniciar o servidor com o seguinte comando  
      docker run --name server --network=mynetwork -p 7171:7171 -p 7172:7172 -d server  
      lembrando que mynetwork é o nome que geramos no passo 3, e o ultimo parametro é nome da imagem que geramos anteriormente.
       
      Você poderá ver seu sevidor ronando no Docker Desktop:
       

       
      caso queira parar algum servidor ou iniciar novamente, é só clicar no botão de ação:
       

       
      Caso precise fazer alguma alteração no server, basta utilizar os comandos de build e run citados anteriormente.
       
       
       
       
      Lembrando que isso é um tutorial básico para rodar o servidor na máquina local, qualquer dúvida ou sugestão, deixe comentário.
       
    • Por becertified
      .Qual servidor ou website você utiliza como base? 
      Base PokeWish+PokeLight.
      Qual o motivo deste tópico? 
      Como resolver o problema de status? é sem estado e não pode ser adicionado ao otserverlist.
       
    • Por gprada
      .Qual servidor ou website você utiliza como base? 
      Canary 13.11
       
      Qual o motivo deste tópico? 
      Dificuldade em liberar portas
       
      Fala galera do Tibia King, bom dia!
       
      Estou tentando liberar as portas 7171, 7172 e 8080 para que outros usuários possam acessar através de um ip dinâmico configurado no No-IP.
       
      Quando eu pingo o IP dinâmico, percebo que ele aponta para o IP do meu PC corretamente. Porém, não consigo acessar nem o site nem o game através do IP dinâmico, só usando localhost.
       
      As configurações aplicadas tanto no firewall do Windows 10 como no modem da Vivo estão nas imagens em anexo. Alguém teria alguma ideia do que tô fazendo de errado?
       
      Valeu!


×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo