//! Property set - Alive\r
void Alive(const bool &value);\r
\r
- //! Property set - Inventory\r
- void Inventory(const vector< shared_ptr<ItemGO> > &items);\r
-\r
- //! Property get - Inventory\r
- vector< shared_ptr<ItemGO> > Inventory(void) const;\r
-\r
- //! Add item to inventory\r
- void AddItemToInventory(shared_ptr<ItemGO> spItem);\r
- //! Remove item from inventory\r
- void RemoveItemFromInventory(shared_ptr<ItemGO> spItem);\r
-\r
bool operator==(const PlayerGO &right) const;\r
bool operator!=(const PlayerGO &right) const;\r
\r
\r
bool mFoughtMaster;\r
bool mAlive;\r
-\r
- vector< shared_ptr<ItemGO> > mItems;\r
};\r
}}} // GameServ::GameLayer::GameObjects\r
#endif
\ No newline at end of file
namespace GameServ { namespace GameLayer { namespace Helpers {\r
\r
\r
- typedef list< shared_ptr<ItemGO> > PlayerInventory;\r
- typedef map<shared_ptr<PlayerGO>, PlayerInventory> InventoryMap;\r
+typedef list< shared_ptr<ItemGO> > ItemList;\r
+typedef map<string, ItemList> PlayerInventoryMap;\r
+\r
\r
class InventoryManager\r
{\r
public:\r
- InventoryManager();\r
+\r
+\r
~InventoryManager();\r
\r
+ static shared_ptr<InventoryManager> Instance();\r
+\r
void AddItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem);\r
void RemoveItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem);\r
- PlayerInventory GetInventory(shared_ptr<PlayerGO> spPlayer) const; \r
+ ItemList GetInventory(shared_ptr<PlayerGO> spPlayer) const; \r
\r
+protected:\r
+ InventoryManager();\r
private:\r
\r
- InventoryMap mInventoryTable;\r
+ PlayerInventoryMap mInventoryTable;\r
+ static shared_ptr<InventoryManager> mInstance;\r
\r
}; // InventoryManager\r
\r
#include <GameServ/DataLayer/File/FileId.h>\r
using GameServ::DataLayer::File::FileId;\r
\r
+#include <GameServ/GameLayer/Helpers/InventoryManager.h>\r
+using namespace GameServ::GameLayer::Helpers;\r
+\r
#include <boost/smart_ptr/shared_ptr.hpp>\r
#include <boost/format.hpp>\r
#include <boost/algorithm/string.hpp>\r
line), __FILE__, __LINE__);\r
}\r
// Load all the items into the player's inventory\r
+ shared_ptr<InventoryManager> inventory = InventoryManager::Instance();\r
+\r
while (tok_iter != tokens.end())\r
{\r
string itemid = FileId::CreateItemId((*tok_iter));\r
throw DataLayerException(str(format("Corrupt %1% file: Non integer item uses for item %2% on player %3%") %\r
mFilename % itemid % spPlayer->Name()), __FILE__, __LINE__);\r
}\r
- spPlayer->AddItemToInventory(spItem);\r
+ inventory->AddItem(spPlayer, spItem);\r
tok_iter++;\r
}\r
\r
string FilePlayerDAO::CreateLineFromPlayer(shared_ptr<PlayerGO> spPlayer) const\r
{\r
string line;\r
- // TODO: Add weapons, armor, and items\r
line = str(format("%1% %2% %3% %4% %5% %6% %7% %8% %9% %10% %11% %12% %13% %14% %15% %16%") % \r
spPlayer->Name() % spPlayer->Level() % spPlayer->Experience() % spPlayer->Gold() %\r
spPlayer->Bank() % spPlayer->Health() % spPlayer->MaxHealth() % spPlayer->Strength() %\r
GetFlags(spPlayer) % spPlayer->Password() % (to_iso_string(spPlayer->LastLogin())) %\r
FileId::GetItemNumberFromId(spPlayer->Weapon()->Id()) % FileId::GetItemNumberFromId(spPlayer->Armor()->Id()));\r
\r
- vector< shared_ptr<ItemGO> > items = spPlayer->Inventory();\r
- vector< shared_ptr<ItemGO> >::const_iterator iter;\r
- for (iter = items.begin(); iter != items.end(); iter++)\r
+ shared_ptr<InventoryManager> spInventory = InventoryManager::Instance();\r
+ ItemList inventory = spInventory->GetInventory(spPlayer);\r
+ ItemList::const_iterator iter;\r
+ for (iter = inventory.begin(); iter != inventory.end(); iter++)\r
{\r
shared_ptr<ItemGO> spItem = (*iter);\r
line += " " + FileId::GetItemNumberFromId(spItem->Id()) + " " + lexical_cast<string>(spItem->Uses());\r
return mLastLogin;\r
}\r
\r
-void PlayerGO::Inventory(const vector< shared_ptr<ItemGO> > &items)\r
-{\r
- mItems.clear();\r
- mItems.insert(mItems.begin(), items.begin(), items.end());\r
-}\r
-\r
-vector< shared_ptr<ItemGO> > PlayerGO::Inventory(void) const\r
-{\r
- return mItems;\r
-}\r
-\r
-void PlayerGO::AddItemToInventory(shared_ptr<ItemGO> spItem)\r
-{\r
- mItems.push_back(spItem);\r
-}\r
-\r
-void PlayerGO::RemoveItemFromInventory(shared_ptr<ItemGO> spItem)\r
-{\r
- vector< shared_ptr<ItemGO> >::iterator iter;\r
- iter = find(mItems.begin(), mItems.end(), spItem);\r
- if (iter != mItems.end())\r
- {\r
- mItems.erase(iter);\r
- }\r
-}\r
-\r
-\r
bool PlayerGO::operator !=(const PlayerGO &right) const\r
{\r
return !(*this == right);\r
#include <GameServ/GameLayer/Helpers/InventoryManager.h>\r
-using GameServ::GameLayer::Helpers::InventoryManager;\r
+using namespace GameServ::GameLayer::Helpers;\r
\r
#include <boost/smart_ptr/shared_ptr.hpp>\r
using boost::shared_ptr;\r
#include <algorithm>\r
using std::find;\r
\r
-typedef list< shared_ptr<ItemGO> > PlayerInventory;\r
-typedef map<shared_ptr<PlayerGO>, PlayerInventory> InventoryMap;\r
+shared_ptr<InventoryManager> InventoryManager::mInstance = shared_ptr<InventoryManager>();\r
\r
InventoryManager::InventoryManager()\r
{\r
InventoryManager::~InventoryManager()\r
{\r
mInventoryTable.clear();\r
+ mInstance.reset();\r
+}\r
+\r
+shared_ptr<InventoryManager> InventoryManager::Instance(void)\r
+{\r
+ if (mInstance == 0)\r
+ {\r
+ mInstance = shared_ptr<InventoryManager>(new InventoryManager());\r
+ }\r
+ return mInstance;\r
}\r
\r
void InventoryManager::AddItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem)\r
{\r
- mInventoryTable[spPlayer].push_back(spItem);\r
+ assert(spPlayer != 0);\r
+ mInventoryTable[spPlayer->Id()].push_back(spItem);\r
}\r
\r
void InventoryManager::RemoveItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem)\r
{\r
- InventoryMap::const_iterator iter = mInventoryTable.find(spPlayer);\r
+ assert(spPlayer != 0);\r
+ assert(spItem != 0);\r
+ PlayerInventoryMap::const_iterator iter = mInventoryTable.find(spPlayer->Id());\r
if (iter != mInventoryTable.end())\r
{\r
if (iter->second.size() > 0)\r
{\r
- PlayerInventory::iterator itemIter = find(mInventoryTable[spPlayer].begin(), \r
- mInventoryTable[spPlayer].end(), spItem);\r
- if (itemIter != mInventoryTable[spPlayer].end())\r
+ ItemList::iterator itemIter = find(mInventoryTable[spPlayer->Id()].begin(), \r
+ mInventoryTable[spPlayer->Id()].end(), spItem);\r
+ if (itemIter != mInventoryTable[spPlayer->Id()].end())\r
{\r
- mInventoryTable[spPlayer].erase(itemIter);\r
+ mInventoryTable[spPlayer->Id()].erase(itemIter);\r
}\r
}\r
}\r
}\r
\r
-PlayerInventory InventoryManager::GetInventory(shared_ptr<PlayerGO> spPlayer) const\r
+ItemList InventoryManager::GetInventory(shared_ptr<PlayerGO> spPlayer) const\r
{\r
- InventoryMap::const_iterator iter = mInventoryTable.find(spPlayer);\r
+ PlayerInventoryMap::const_iterator iter = mInventoryTable.find(spPlayer->Id());\r
if (iter != mInventoryTable.end())\r
{\r
return iter->second;\r
}\r
- return PlayerInventory();\r
+ return ItemList();\r
}\r
using GameServ::Types::ItemTypes;\r
using GameServ::Types::Modifiers;\r
\r
+#include <GameServ/GameLayer/Helpers/InventoryManager.h>\r
+using namespace GameServ::GameLayer::Helpers;\r
+\r
#include <boost/algorithm/string.hpp>\r
#include <boost/format.hpp>\r
using boost::str;\r
<< "Gold: " << spPlayer->Gold() << endl\r
<< "Bank: " << spPlayer->Bank() << endl\r
<< "Items: " << endl;\r
- vector< shared_ptr<ItemGO> > spInventory = spPlayer->Inventory();\r
+\r
+\r
+ shared_ptr<InventoryManager> spInventory = InventoryManager::Instance();\r
+ ItemList inventory = spInventory->GetInventory(spPlayer);\r
+ ItemList::const_iterator iter;\r
+ for (iter = inventory.begin(); iter != inventory.end(); iter++)\r
+ {\r
+ shared_ptr<ItemGO> spItem = (*iter);\r
+ cout << str(format("Name: %1% Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type())) << endl;\r
+ }\r
+\r
+ /* vector< shared_ptr<ItemGO> > spInventory = spPlayer->Inventory();\r
vector< shared_ptr<ItemGO> >::const_iterator iter;\r
for (iter = spInventory.begin(); iter != spInventory.end(); iter++)\r
{\r
shared_ptr<ItemGO> spItem = (*iter);\r
cout << str(format("Name: %1% Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type())) << endl;\r
- }\r
+ }*/\r
\r
\r
\r