+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