]>
jfr.im git - irc/gameservirc.git/blob - gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp
1 #include <GameServ/GameLayer/GameObjects/ItemGO.h>
2 using GameServ::GameLayer::GameObjects::ItemGO
;
3 #include <GameServ/GameLayer/GameObjects/PlayerGO.h>
4 using GameServ::GameLayer::GameObjects::PlayerGO
;
6 #include <GameServ/Types.h>
7 using GameServ::Types::ItemTypes
;
8 using GameServ::Types::Modifiers
;
15 #include <boost/smart_ptr/shared_ptr.hpp>
16 using boost::shared_ptr
;
17 using boost::shared_static_cast
;
19 #include <boost/algorithm/string.hpp>
20 #include <boost/format.hpp>
24 ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1), mType(ItemTypes::NOTYPE
)
32 string
ItemGO::Name(void) const
37 void ItemGO::Name(const string
&value
)
42 unsigned long int ItemGO::Price(void) const
47 void ItemGO::Price(const unsigned long int &price
)
52 int ItemGO::Uses(void) const
57 void ItemGO::Uses(const int &value
)
62 void ItemGO::Use(shared_ptr
<GameObject
> spPlayer
)
64 map
<Modifiers::Modifier
, int>::const_iterator iter
;
65 for (iter
= mModifiers
.begin(); iter
!= mModifiers
.end(); iter
++)
67 ApplyModifier(spPlayer
, iter
->first
, iter
->second
);
71 void ItemGO::ApplyModifier(shared_ptr
<GameObject
> spObject
, const Modifiers::Modifier
&modifier
, const int &num
)
73 shared_ptr
<PlayerGO
> spPlayer
= shared_static_cast
<PlayerGO
>(spObject
);
76 case Modifiers::strength
:
77 spPlayer
->Strength(spPlayer
->Strength() + num
);
79 case Modifiers::defense
:
80 spPlayer
->Defense(spPlayer
->Defense() + num
);
82 case Modifiers::health
:
83 spPlayer
->Health(spPlayer
->Health() + num
);
85 case Modifiers::maxhealth
:
86 spPlayer
->MaxHealth(spPlayer
->MaxHealth() + num
);
89 spPlayer
->Gold(spPlayer
->Gold() + num
);
92 spPlayer
->Bank(spPlayer
->Bank() + num
);
94 case Modifiers::forestfights
:
95 spPlayer
->ForestFights(spPlayer
->ForestFights() + num
);
97 case Modifiers::playerfights
:
98 spPlayer
->PlayerFights(spPlayer
->PlayerFights() + num
);
101 throw GameServException(str(format("Invalid modifier %1%") % modifier
), __FILE__
, __LINE__
);
105 ItemTypes::ItemType
ItemGO::Type(void) const
110 void ItemGO::Type(const ItemTypes::ItemType
&value
)
115 map
<Modifiers::Modifier
, int> ItemGO::Modifiers(void) const
120 void ItemGO::Modifiers(const map
<Modifiers::Modifier
, int> &modifiers
)
123 mModifiers
.insert(modifiers
.begin(), modifiers
.end());
126 ItemGO
*ItemGO::Clone(void) const
128 return new ItemGO(*this);