Ir para conteúdo

Featured Replies

Postado

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)

  • Respostas 6
  • Visualizações 1.4k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Fir3element
    Fir3element

    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& p

Postado

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)

Postado
  • Autor
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.

Postado
  • Autor

@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)

  • 2 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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo