X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/e0d3cb09ee3cbd32ea2e6c6b4a981e46d7878259..8e6e952d414758bf35813c1fd2ce9ccdba5bcd35:/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp diff --git a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp index 7c045ca..6c8246e 100644 --- a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp +++ b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp @@ -1,27 +1,29 @@ #include using GameServ::GameLayer::GameObjects::ItemGO; +#include +using GameServ::GameLayer::GameObjects::PlayerGO; #include using GameServ::Types::ItemTypes; +using GameServ::Types::Modifiers; +using GameServ::Types::Range; #include using std::string; -#include -using std::vector; +#include +using std::map; -#include +#include using boost::shared_ptr; +using boost::shared_static_cast; -ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1), mType(ItemTypes::NOTYPE) -{ - mModifiers.resize(8); -} +#include +#include +using boost::str; +using boost::format; -ItemGO::ItemGO(const string &name, const unsigned long &price, const int &uses, const vector &modifiers) : GameObject(), -mName(name), mPrice(price), mUses(uses), mType(ItemTypes::NOTYPE) +ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1), mType(ItemTypes::NOTYPE) { - mModifiers.clear(); - mModifiers.insert(mModifiers.begin(), modifiers.begin(), modifiers.end()); } ItemGO::~ItemGO() @@ -58,6 +60,49 @@ void ItemGO::Uses(const int &value) mUses = value; } +void ItemGO::Use(shared_ptr spPlayer) +{ + map::const_iterator iter; + for (iter = mModifiers.begin(); iter != mModifiers.end(); iter++) + { + ApplyModifier(spPlayer, iter->first, iter->second); + } +} + +void ItemGO::ApplyModifier(shared_ptr spObject, const Modifiers::Modifier &modifier, Range r) +{ + shared_ptr spPlayer = shared_static_cast(spObject); + switch (modifier) + { + case Modifiers::strength: + spPlayer->Strength(spPlayer->Strength() + r.Random()); + break; + case Modifiers::defense: + spPlayer->Defense(spPlayer->Defense() + r.Random()); + break; + case Modifiers::health: + spPlayer->Health(spPlayer->Health() + r.Random()); + break; + case Modifiers::maxhealth: + spPlayer->MaxHealth(spPlayer->MaxHealth() + r.Random()); + break; + case Modifiers::gold: + spPlayer->Gold(spPlayer->Gold() + r.Random()); + break; + case Modifiers::bank: + spPlayer->Bank(spPlayer->Bank() + r.Random()); + break; + case Modifiers::forestfights: + spPlayer->ForestFights(spPlayer->ForestFights() + r.Random()); + break; + case Modifiers::playerfights: + spPlayer->PlayerFights(spPlayer->PlayerFights() + r.Random()); + break; + default: + throw GameServException(str(format("Invalid modifier %1%") % modifier), __FILE__, __LINE__); + } +} + ItemTypes::ItemType ItemGO::Type(void) const { return mType; @@ -68,15 +113,15 @@ void ItemGO::Type(const ItemTypes::ItemType &value) mType = value; } -vector ItemGO::Modifiers(void) const +map ItemGO::Modifiers(void) const { return mModifiers; } -void ItemGO::Modifiers(const vector &value) +void ItemGO::Modifiers(const map &modifiers) { mModifiers.clear(); - mModifiers.insert(mModifiers.begin(), value.begin(), value.end()); + mModifiers.insert(modifiers.begin(), modifiers.end()); } ItemGO *ItemGO::Clone(void) const