#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
\r
#include <boost/smart_ptr/shared_ptr.hpp>\r
using boost::shared_ptr;\r
+using boost::shared_static_cast;\r
+\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/format.hpp>\r
+using boost::str;\r
+using boost::format;\r
\r
ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1), mType(ItemTypes::NOTYPE)\r
{\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
-map<Modifiers::Modifier, int> ItemGO::Modifiers(void) const\r
+map<Modifiers::Modifier, Range> ItemGO::Modifiers(void) const\r
{\r
return mModifiers;\r
}\r
\r
-void ItemGO::Modifiers(const map<Modifiers::Modifier, int> &modifiers)\r
+void ItemGO::Modifiers(const map<Modifiers::Modifier, Range> &modifiers)\r
{\r
mModifiers.clear();\r
mModifiers.insert(modifiers.begin(), modifiers.end());\r