.Qual servidor ou website você utiliza como base?
otxserver 2.4
Qual o motivo deste tópico?
Estou tentando criar uma tela de login personalizada, onde seriam exibidas informações mais detalhadas do player. Sei + ou - em quais arquivos devo mexer para enviar e receber os dados do client para o servidor, mas como não sei muito de C não consigo enviar os dados para o client.
Queria pegar informações tipo level, outfit, vida.
Se alguem puder me ajudar me dando um caminho de como fazer essa alteração ou algum tutorial que ja exista sobre como editar o protocolo de login eu agradeço.
protocollogin.cpp
#ifndef __LOGIN_SERVER__
for(Characters::iterator it = account.charList.begin(); it != account.charList.end(); ++it)
{
output->putString((*it));
if(g_config.getBool(ConfigManager::ON_OR_OFF_CHARLIST))
{
if(g_game.getPlayerByName((*it)))
output->putString("Online");
else
output->putString("Offline");
}
else
output->putString(g_config.getString(ConfigManager::SERVER_NAME));
output->put<uint32_t>(serverIp);
IntegerVec games = vectorAtoi(explodeString(g_config.getString(ConfigManager::GAME_PORT), ","));
output->put<uint16_t>(games[random_range(0, games.size() - 1)]);
}
iologindata.cpp
void IOLoginData::loadCharacters(Account& account)
{
Database* db = Database::getInstance();
DBQuery query;
#ifndef __LOGIN_SERVER__
query << "SELECT `name`, `level`, `looktype` FROM `players` WHERE `account_id` = " << account.number << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << " AND `deleted` = 0";
#else
query << "SELECT `id`, `name`, `world_id`, `online` FROM `players` WHERE `account_id` = " << account.number << " AND `deleted` = 0";
#endif
DBResult* result;
if(!(result = db->storeQuery(query.str())))
return;
do
{
#ifndef __LOGIN_SERVER__
std::string name = result->getDataString("name");
std::string level = result->getDataString("level");
std::string outfit = result->getDataString("looktype");
account.charList.push_back(name);
#else
std::string name = result->getDataString("name");
if(GameServer* srv = GameServers::getInstance()->getServerById(result->getDataInt("world_id")))
account.charList[name] = Character(name, srv, result->getDataInt("online"));
else
std::clog << "[Warning - IOLoginData::loadAccount] Invalid server for player '" << name << "'." << std::endl;
#endif
}
while(result->next());
result->free();
#ifndef __LOGIN_SERVER__
account.charList.sort();
#endif
}
account.h
#ifndef __ACCOUNT__
#define __ACCOUNT__
#include "otsystem.h"
#ifndef __LOGIN_SERVER__
typedef std::list<std::string> Characters;
#else
class GameServer;
struct Character
{
Character(): server(NULL), status(0) {}
Character(const std::string& _name, GameServer* _server, int8_t _status):
name(_name), server(_server), status(_status) {}
std::string name, level, outfit;
GameServer* server;
int8_t status;
};
typedef std::map<std::string, Character> Characters;
#endif
class Account
{
public:
Account() {premiumDays = warnings = number = lastDay = 0;}
virtual ~Account() {charList.clear();}
uint16_t premiumDays, warnings;
uint32_t number, lastDay;
std::string name, password, recoveryKey, salt;
Characters charList;
};
#endif