Ir para conteúdo
Entre para seguir isso  
underewar

[[Sistema Mundos]] World Multiples

Recommended Posts

underewar    32
underewar

Em ioaccountsql.cpp nós mudamos.

Procure por  .

Account IOAccountSQL::loadAccount(uint32_t accno)

E Substitua toda a função por essa (OBS LEMBRE-SE DE CONFIGURAR OS MUNDOS.).

Account IOAccountSQL::loadAccount(uint32_t accno)
{
    Account acc;
    Database* mysql = Database::instance();
    DBQuery query;
    DBResult result;
    query << "SELECT id,password FROM accounts WHERE id=" << accno;
    if(mysql->connect() && mysql->storeQuery(query, result)){
        acc.accnumber = result.getDataInt("id");
        acc.password = result.getDataString("password");
#ifndef __ROGIER_MULTIWORLD__
        query << "SELECT name FROM players WHERE account_id=" << accno;
#else //__ROGIER_MULTIWORLD__
        query << "SELECT name,worldid FROM players WHERE account_id=" << accno;
#endif //__ROGIER_MULTIWORLD__
        if(mysql->storeQuery(query, result)){
            for(uint32_t i = 0; i < result.getNumRows(); ++i){
                std::string ss = result.getDataString("name", i);
#ifndef __ROGIER_MULTIWORLD__
                acc.charList.push_back(ss.c_str());
#else //__ROGIER_MULTIWORLD__
                int worldid = result.getDataInt("worldid", i);             
                query.reset();
                result.clear();
                query << "SELECT * FROM worlds WHERE worldid=" << worldid;
                mysql->storeQuery(query, result);
                struct CharInfo info;
                info.worldName = result.getDataString("worldname", i);
                info.worldIp   = result.getDataString("worldip", i);
                info.worldPort = result.getDataInt("worldport", i);
                acc.charList[ss] = info;
#endif //__ROGIER_MULTIWORLD__
            }
#ifndef __ROGIER_MULTIWORLD__
            acc.charList.sort();
#endif //__ROGIER_MULTIWORLD__
        }
    }
    return acc;
}

Agora no protocollogin.cpp na função parsefirstpacket nós mudamos.

Procure por.

std::list<std::string>::iterator it;
    for(it = account.charList.begin(); it != account.charList.end(); it++){
        output->AddString((*it));
        output->AddString(g_config.getString(ConfigManager::WORLD  _NAME));
        output->AddU32(serverip);
        output->AddU16(g_config.getNumber(ConfigManager::PORT))  ;
    }

Substitua por.

#ifndef __ROGIER_MULTIWORLD__
    std::list<std::string>::iterator it;
    for(it = account.charList.begin(); it != account.charList.end(); it++){
        output->AddString((*it));
        output->AddString(g_config.getString(ConfigManager::WORLD  _NAME));
        output->AddU32(serverip);
        output->AddU16(g_config.getNumber(ConfigManager::PORT))  ;
    }
#else //__ROGIER_MULTIWORLD__
    std::map<std::string, CharInfo>::iterator it;
    for(it = account.charList.begin(); it != account.charList.end(); it++){
        output->AddString(it->first);
        output->AddString(it->second.worldName);
        output->AddU32(inet_addr(it->second.worldIp.c_str()));
        output->AddU16(it->second.worldPort);
    }
#endif //__ROGIER_MULTIWORLD__

Agora Em account.h.

procure.

class Account

adicione logo a baixo.

#ifdef __ROGIER_MULTIWORLD__
#include <map>
struct CharInfo
{
      std::string worldIp;
      std::string worldName;
      short       worldPort;
};
#endif //__ROGIER_MULTIWORLD__

Novamente em account.h nós mudamos:

Procure

std::list<std::string> charList;

Substitua

#ifdef __ROGIER_MULTIWORLD__
  std::list<std::string> charList;
#else //__ROGIER_MULTIWORLD__
  std::map<std::string, CharInfo> charList;
#endif //__ROGIER_MULTIWORLD__

Adicione como parametro o seguinte seguimento para que a compilação encontre todas as alterações a cima

-D__ROGIER_MULTIWORLD__

(Igual o mysql/sqlite,console,gui é adicionado)

 

E AGORA OQUE EU FAÇO?

Spoiler

Agora entramos no phpAdmin e criamos uma nova tabela chamada mundos e quatro registros: 
1. ` worldid` como um inteiro. 
2. ` worldname` como string. 
3. ` worldip` como string. 
4. ` worldport` como um inteiro. 

Agora, na tabela de jogadores, adicionamos um novo registro chamado `worldid` como um inteiro. 

Nos mundos você tem que inserir o seu mundo, não esqueça de colocar o worldid na tabela de jogadores.

Compartilhar este post


Link para o post
Majesty    1755
Majesty

Muito obrigado pela sua contribuição, seu tópico de conteúdo foi aprovado!
Nós do OTServ Brasil agradecemos, seu conteúdo com certeza ajudará a muitos outros. 
Você recebeu +1 REP!

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×