#include <GameServ/DataLayer/MySQL/MySQLPlayerDAO.h>\r
using GameServ::DataLayer::MySQL::MySQLPlayerDAO;\r
-using GameServ::DataLayer::MySQL::player;\r
-\r
-#define MYSQLPP_SSQLS_NO_STATICS\r
-#include <GameServ/DataLayer/MySQL/MySQLItemDAO.h>\r
-using GameServ::DataLayer::MySQL::MySQLItemDAO;\r
\r
#include <GameServ/GameLayer/GameObjects/PlayerGO.h>\r
using GameServ::GameLayer::GameObjects::PlayerGO;\r
-#include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
-using GameServ::GameLayer::GameObjects::ItemGO;\r
-#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
-using GameServ::GameLayer::GameObjects::ArmorGO;\r
-#include <GameServ/GameLayer/GameObjects/WeaponGO.h>\r
-using GameServ::GameLayer::GameObjects::WeaponGO;\r
\r
#include <GameServ/DataLayer/DataLayerExceptions.h>\r
using GameServ::DataLayer::Exceptions::ResourceException;\r
#include <vector>\r
using std::vector;\r
\r
+#include <list>\r
+using std::list;\r
+\r
#include <mysql++.h>\r
#include <ssqls.h>\r
\r
+sql_create_17(player, 1, 0,\r
+mysqlpp::sql_int_unsigned, id,\r
+mysqlpp::sql_varchar, name,\r
+mysqlpp::Null<mysqlpp::sql_int_unsigned>, weaponId,\r
+mysqlpp::Null<mysqlpp::sql_int_unsigned>, armorId,\r
+mysqlpp::sql_int_unsigned, levelId,\r
+mysqlpp::sql_int, experience,\r
+mysqlpp::sql_int_unsigned, gold,\r
+mysqlpp::sql_int, bank,\r
+mysqlpp::sql_int, strength,\r
+mysqlpp::sql_int, defense,\r
+mysqlpp::sql_int_unsigned, health,\r
+mysqlpp::sql_int_unsigned, maxhealth,\r
+mysqlpp::sql_int_unsigned, forestfights,\r
+mysqlpp::sql_int_unsigned, playerfights,\r
+mysqlpp::sql_datetime, lastlogin,\r
+mysqlpp::sql_boolean, alive,\r
+mysqlpp::sql_boolean, foughtmaster);\r
+\r
+\r
+shared_ptr<PlayerGO> CreatePlayerFromPlayerSSQLS(const player &p);\r
+player CreatePlayerSSQLSFromPlayer(shared_ptr<PlayerGO> spPlayer);\r
+\r
MySQLPlayerDAO::MySQLPlayerDAO()\r
{\r
Initialize("player");\r
}\r
}\r
\r
-shared_ptr<PlayerGO> MySQLPlayerDAO::CreatePlayerFromPlayerSSQLS(const player &p) const\r
+shared_ptr<PlayerGO> CreatePlayerFromPlayerSSQLS(const player &p)\r
{\r
shared_ptr<PlayerGO> spPlayer = shared_ptr<PlayerGO>(new PlayerGO());\r
\r
spPlayer->Id(MySQLId::CreatePlayerId(p.id));\r
spPlayer->Name(p.name);\r
\r
- MySQLItemDAO idao;\r
-\r
if (p.weaponId != mysqlpp::null)\r
{\r
- shared_ptr<ItemGO> spWeapon = idao.GetById(MySQLId::CreateItemId(p.weaponId.data));\r
- if (spWeapon != 0)\r
- {\r
- if (spWeapon->Type() != ItemTypes::Weapon)\r
- {\r
- throw DataLayerException(str(format("Invalid item type for linked player weapon: %1%") %\r
- ItemTypes::GetName(spWeapon->Type())), __FILE__, __LINE__);\r
- }\r
- spPlayer->Weapon(shared_static_cast<WeaponGO>(spWeapon));\r
- }\r
- else\r
- {\r
- throw DataLayerException(str(format("Problem with foreign key relationship. Unable to get "\\r
- "weapon with Id: %1% to link to Player %2%") % p.weaponId % spPlayer->Name()), __FILE__,\r
- __LINE__);\r
- }\r
+ spPlayer->WeaponId(MySQLId::CreateItemId(p.weaponId.data));\r
}\r
+ else\r
+ {\r
+ spPlayer->WeaponId("");\r
+ }\r
+\r
\r
if (p.armorId != mysqlpp::null)\r
{\r
- shared_ptr<ItemGO> spArmor = idao.GetById(MySQLId::CreateItemId(p.armorId.data));\r
- if (spArmor != 0)\r
- {\r
- if (spArmor->Type() != ItemTypes::Armor)\r
- {\r
- throw DataLayerException(str(format("Invalid item type for linked player armor: %1%") %\r
- ItemTypes::GetName(spArmor->Type())), __FILE__, __LINE__);\r
- }\r
- spPlayer->Armor(shared_static_cast<ArmorGO>(spArmor));\r
- }\r
- else\r
- {\r
- throw DataLayerException(str(format("Problem with foreign key relationship. Unable to get "\\r
- "armor with Id: %1% to link to Player %2%") % p.armorId % spPlayer->Name()), __FILE__,\r
- __LINE__);\r
- }\r
+ spPlayer->ArmorId(MySQLId::CreateItemId(p.armorId.data));\r
+ }\r
+ else\r
+ {\r
+ spPlayer->ArmorId("");\r
}\r
\r
spPlayer->LevelNumber(p.levelId);\r
\r
return spPlayer;\r
}\r
-player MySQLPlayerDAO::CreatePlayerSSQLSFromPlayer(shared_ptr<PlayerGO> spPlayer) const\r
+player CreatePlayerSSQLSFromPlayer(shared_ptr<PlayerGO> spPlayer)\r
{\r
player p;\r
p.name = spPlayer->Name();\r
\r
}\r
\r
+list<string> MySQLPlayerDAO::GetIdsByName(const string &Name) const\r
+{\r
+ // TODO: Enable and catch exceptions\r
+ mysqlpp::Connection conn;\r
+\r
+ // TODO: Load from config\r
+ try\r
+ {\r
+ conn.connect("gameserv", "localhost", "gameserv", "gameserv", 3306);\r
+ }\r
+ catch (mysqlpp::ConnectionFailed &ex)\r
+ {\r
+ throw DataLayerException(str(format("Failed to connect to the database. Error: %1%") %\r
+ ex.what()), __FILE__, __LINE__);\r
+ }\r
+ catch (mysqlpp::Exception &ex)\r
+ {\r
+ throw DataLayerException(str(format("Unknown error connecting to the database. Error: %1%") %\r
+ ex.what()), __FILE__, __LINE__);\r
+ }\r
+\r
+ mysqlpp::Query query = conn.query();\r
+\r
+\r
+ query << "select id from " << mTableName << " where name = " << mysqlpp::quote << Name;\r
+\r
+ \r
+ vector<player> players;\r
+\r
+ try\r
+ {\r
+ query.storein(players);\r
+ }\r
+ catch (mysqlpp::UseQueryError &ex)\r
+ {\r
+ throw DataLayerException(str(format("Unable to execute query: \" %1% \". Error: %2%") %\r
+ query % ex.what()), __FILE__, __LINE__);\r
+ }\r
+ catch (mysqlpp::Exception &ex)\r
+ {\r
+ throw DataLayerException(str(format("Unknown error executing query: \" %1% \". Error: %2%") %\r
+ query % ex.what()), __FILE__, __LINE__);\r
+ }\r
+\r
+ list<string> ids;\r
+ for (vector<player>::const_iterator iter = players.begin();\r
+ iter != players.end(); ++iter)\r
+ {\r
+ ids.push_back(MySQLId::CreatePlayerId(iter->id));\r
+ }\r
+ return ids;\r
+}\r
+\r
string MySQLPlayerDAO::GetPlayerTableName(void) const\r
{\r
return mTableName;\r