Ir para conteúdo

Featured Replies

Postado

.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

 

 

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