]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp
Changed all references of HP to Health
[irc/gameservirc.git] / gameserv-2.0 / libgameservgldl / src / GameLayer / GameObjects / ItemGO.cpp
index b2309d26613032dfc4e99735c323cacdcd71ec12..8cb7be6d8f7d396bff23fa5ce96505a7c766b626 100644 (file)
@@ -1,5 +1,7 @@
 #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
@@ -12,6 +14,12 @@ using std::map;
 \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
@@ -51,6 +59,49 @@ void ItemGO::Uses(const int &value)
        mUses = value;\r
 }\r
 \r
+void ItemGO::Use(shared_ptr<GameObject> spPlayer)\r
+{\r
+       map<Modifiers::Modifier, int>::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, const int &num)\r
+{\r
+       shared_ptr<PlayerGO> spPlayer = shared_static_cast<PlayerGO>(spObject);\r
+       switch (modifier)\r
+       {\r
+       case Modifiers::strength:\r
+               spPlayer->Strength(spPlayer->Strength() + num);\r
+               break;\r
+       case Modifiers::defense:\r
+               spPlayer->Defense(spPlayer->Defense() + num);\r
+               break;\r
+       case Modifiers::health:\r
+               spPlayer->Health(spPlayer->Health() + num);\r
+               break;\r
+       case Modifiers::maxhealth:\r
+               spPlayer->MaxHealth(spPlayer->MaxHealth() + num);\r
+               break;\r
+       case Modifiers::gold:\r
+               spPlayer->Gold(spPlayer->Gold() + num);\r
+               break;\r
+       case Modifiers::bank:\r
+               spPlayer->Bank(spPlayer->Bank() + num);\r
+               break;\r
+       case Modifiers::forestfights:\r
+               spPlayer->ForestFights(spPlayer->ForestFights() + num);\r
+               break;\r
+       case Modifiers::playerfights:\r
+               spPlayer->PlayerFights(spPlayer->PlayerFights() + num);\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