#include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
using GameServ::GameLayer::GameObjects::ItemGO;\r
+#include <GameServ/GameLayer/GameObjects/PlayerGO.h>\r
+using GameServ::GameLayer::GameObjects::PlayerGO;\r
\r
#include <GameServ/Types.h>\r
using GameServ::Types::ItemTypes;\r
+using GameServ::Types::Modifiers;\r
+using GameServ::Types::Range;\r
\r
#include <string>\r
using std::string;\r
-#include <vector>\r
-using std::vector;\r
+#include <map>\r
+using std::map;\r
\r
-#include <boost/shared_ptr.hpp>\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
using boost::shared_ptr;\r
+using boost::shared_static_cast;\r
\r
-ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1), mType(ItemTypes::NOTYPE)\r
-{\r
- mModifiers.resize(8);\r
-}\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/format.hpp>\r
+using boost::str;\r
+using boost::format;\r
\r
-ItemGO::ItemGO(const string &name, const unsigned long &price, const int &uses, const vector<string> &modifiers) : GameObject(),\r
-mName(name), mPrice(price), mUses(uses), mType(ItemTypes::NOTYPE)\r
+ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1), mType(ItemTypes::NOTYPE)\r
{\r
- mModifiers.clear();\r
- mModifiers.insert(mModifiers.begin(), modifiers.begin(), modifiers.end());\r
}\r
\r
ItemGO::~ItemGO()\r
mUses = value;\r
}\r
\r
+void ItemGO::Use(shared_ptr<GameObject> spPlayer)\r
+{\r
+ map<Modifiers::Modifier, Range>::const_iterator iter;\r
+ for (iter = mModifiers.begin(); iter != mModifiers.end(); iter++)\r
+ {\r
+ ApplyModifier(spPlayer, iter->first, iter->second);\r
+ }\r
+}\r
+\r
+void ItemGO::ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r)\r
+{\r
+ shared_ptr<PlayerGO> spPlayer = shared_static_cast<PlayerGO>(spObject);\r
+ switch (modifier)\r
+ {\r
+ case Modifiers::strength:\r
+ spPlayer->Strength(spPlayer->Strength() + r.Random());\r
+ break;\r
+ case Modifiers::defense:\r
+ spPlayer->Defense(spPlayer->Defense() + r.Random());\r
+ break;\r
+ case Modifiers::health:\r
+ spPlayer->Health(spPlayer->Health() + r.Random());\r
+ break;\r
+ case Modifiers::maxhealth:\r
+ spPlayer->MaxHealth(spPlayer->MaxHealth() + r.Random());\r
+ break;\r
+ case Modifiers::gold:\r
+ spPlayer->Gold(spPlayer->Gold() + r.Random());\r
+ break;\r
+ case Modifiers::bank:\r
+ spPlayer->Bank(spPlayer->Bank() + r.Random());\r
+ break;\r
+ case Modifiers::forestfights:\r
+ spPlayer->ForestFights(spPlayer->ForestFights() + r.Random());\r
+ break;\r
+ case Modifiers::playerfights:\r
+ spPlayer->PlayerFights(spPlayer->PlayerFights() + r.Random());\r
+ break;\r
+ default:\r
+ throw GameServException(str(format("Invalid modifier %1%") % modifier), __FILE__, __LINE__);\r
+ }\r
+}\r
+\r
ItemTypes::ItemType ItemGO::Type(void) const\r
{\r
return mType;\r
mType = value;\r
}\r
\r
-vector<string> ItemGO::Modifiers(void) const\r
+map<Modifiers::Modifier, Range> ItemGO::Modifiers(void) const\r
{\r
return mModifiers;\r
}\r
\r
-void ItemGO::Modifiers(const vector<string> &value)\r
+void ItemGO::Modifiers(const map<Modifiers::Modifier, Range> &modifiers)\r
{\r
mModifiers.clear();\r
- mModifiers.insert(mModifiers.begin(), value.begin(), value.end());\r
+ mModifiers.insert(modifiers.begin(), modifiers.end());\r
}\r
\r
ItemGO *ItemGO::Clone(void) const\r