Postado Junho 10, 2022 2 anos 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 Junho 10, 2022 2 anos por Tacabala22 (veja o histórico de edições)
Postado Junho 16, 2022 2 anos 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 Junho 16, 2022 2 anos por Fir3element (veja o histórico de edições)
Postado Junho 17, 2022 2 anos 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 Junho 18, 2022 2 anos 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 Junho 18, 2022 2 anos por Tacabala22 adicionando informações para facilitar a solução do problema. (veja o histórico de edições)
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.