Jump to content
Sign in to follow this  
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.

Share this post


Link to post
Majesty    1,755
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!

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×