What's new

-Inne [SQL] Multi World System

Status
Not open for further replies.

Thorge D

Advanced User
Joined
Jul 24, 2014
Messages
300
Reaction score
29
Autor: Rogier1337


W ioaccountsql.cpp zmieniamy:
[CPP]Account IOAccountSQL::loadAccount(uint32_t accno)[/CPP]
na:
[CPP]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;
}[/CPP]
Teraz w protocollogin.cpp w funkcji parsefirstpacket zmieniamy:
[CPP]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));
}[/CPP]
na:
[CPP]#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__[/CPP]
W account.h po:
[CPP]class Account[/CPP]
dodajemy:
[CPP]#ifdef __ROGIER_MULTIWORLD__
#include <map>
struct CharInfo
{
std::string worldIp;
std::string worldName;
short worldPort;
};
#endif //__ROGIER_MULTIWORLD__[/CPP]
Zn?w w account.h zamieniamy:
[CPP]std::list<std::string> charList;[/CPP]
na:
[CPP]#ifdef __ROGIER_MULTIWORLD__
std::list<std::string> charList;
#else //__ROGIER_MULTIWORLD__
std::map<std::string, CharInfo> charList;
#endif //__ROGIER_MULTIWORLD__[/CPP]

W parametrach projektu dodajemy (Project> Options > Parameters):
Code:
-D__ROGIER_MULTIWORLD__


Teraz wchodzimy do phpAdmin i tworzymy now? tabel? o nazwie worlds a w niej cztery rekordy:
1. `worldid` jako integer.
2. `worldname` jako string.
3. `worldip` jako string.
4. `worldport` jako integer.

Teraz w tabeli players dodajemy nowy rekord o nazwie `worldid` jako integer.

W worlds musisz wstawi? tw?j ?wiat, nie zapomnij ustawi? worldid w tabeli players.
 

grabasz

User
Joined
Jan 24, 2012
Messages
12
Reaction score
0
Odp: [SQL] Multi World System

m?g? by? jako? bardziej opisa? to cudo bo tego nie rozumiem a nawet nie wiem o co w tym kodzie c++ nie wiem o co chodzi :)
Pozdrawiam Mariusz
 
Status
Not open for further replies.
Top