]>
jfr.im git - irc/gameservirc.git/blob - gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp
33472b034c9352d8fd2d6cd147a1a109bd2de459
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
;
9 using GameServ::Types::Range
;
10 using GameServ::Types::ObjectTypes
;
12 #include <GameServ/GameServException.h>
13 using GameServ::Exceptions::GameServException
;
20 #include <boost/smart_ptr/shared_ptr.hpp>
21 using boost::shared_ptr
;
22 using boost::shared_static_cast
;
24 #include <boost/algorithm/string.hpp>
25 #include <boost/format.hpp>
29 ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1)
37 string
ItemGO::Name(void) const
42 void ItemGO::Name(const string
&value
)
47 unsigned long int ItemGO::Price(void) const
52 void ItemGO::Price(const unsigned long int &price
)
57 int ItemGO::Uses(void) const
62 void ItemGO::Uses(const int &value
)
67 void ItemGO::Use(shared_ptr
<GameObject
> spObject
)
69 map
<Modifiers::Modifier
, Range
>::const_iterator iter
;
70 for (iter
= mModifiers
.begin(); iter
!= mModifiers
.end(); iter
++)
72 ApplyModifier(spObject
, iter
->first
, iter
->second
);
76 void ItemGO::Undo(shared_ptr
<GameObject
> spObject
)
78 map
<Modifiers::Modifier
, Range
>::const_iterator iter
;
79 for (iter
= mModifiers
.begin(); iter
!= mModifiers
.end(); iter
++)
81 UndoModifier(spObject
, iter
->first
, iter
->second
);
85 void ItemGO::ApplyModifier(shared_ptr
<GameObject
> spObject
, const Modifiers::Modifier
&modifier
, Range r
)
87 if (spObject
->ObjectType() != ObjectTypes::Player
)
89 throw GameServException(str(format("Item %1%:%2% used on an unsupported object type: %3%") %
90 Id() % Name() % ObjectTypes::GetName(spObject
->ObjectType())), __FILE__
, __LINE__
);
93 shared_ptr
<PlayerGO
> spPlayer
= shared_static_cast
<PlayerGO
>(spObject
);
97 case Modifiers::strength
:
98 spPlayer
->Strength(spPlayer
->Strength() + r
.Random());
100 case Modifiers::defense
:
101 spPlayer
->Defense(spPlayer
->Defense() + r
.Random());
103 case Modifiers::health
:
104 spPlayer
->Health(spPlayer
->Health() + r
.Random());
106 case Modifiers::maxhealth
:
107 spPlayer
->MaxHealth(spPlayer
->MaxHealth() + r
.Random());
109 case Modifiers::gold
:
110 spPlayer
->Gold(spPlayer
->Gold() + r
.Random());
112 case Modifiers::bank
:
113 spPlayer
->Bank(spPlayer
->Bank() + r
.Random());
115 case Modifiers::forestfights
:
116 spPlayer
->ForestFights(spPlayer
->ForestFights() + r
.Random());
118 case Modifiers::playerfights
:
119 spPlayer
->PlayerFights(spPlayer
->PlayerFights() + r
.Random());
122 throw GameServException(str(format("Invalid modifier %1%") % modifier
), __FILE__
, __LINE__
);
126 void ItemGO::UndoModifier(shared_ptr
<GameObject
> spObject
, const Modifiers::Modifier
&modifier
, Range r
)
128 if (spObject
->ObjectType() != ObjectTypes::Player
)
130 throw GameServException(str(format("Item %1%:%2% used on an unsupported object type: %3%") %
131 Id() % Name() % ObjectTypes::GetName(spObject
->ObjectType())), __FILE__
, __LINE__
);
134 shared_ptr
<PlayerGO
> spPlayer
= shared_static_cast
<PlayerGO
>(spObject
);
138 case Modifiers::strength
:
139 spPlayer
->Strength(spPlayer
->Strength() - r
.LastRandom());
141 case Modifiers::defense
:
142 spPlayer
->Defense(spPlayer
->Defense() - r
.LastRandom());
144 case Modifiers::health
:
145 spPlayer
->Health(spPlayer
->Health() - r
.LastRandom());
147 case Modifiers::maxhealth
:
148 spPlayer
->MaxHealth(spPlayer
->MaxHealth() - r
.LastRandom());
150 case Modifiers::gold
:
151 spPlayer
->Gold(spPlayer
->Gold() - r
.LastRandom());
153 case Modifiers::bank
:
154 spPlayer
->Bank(spPlayer
->Bank() - r
.LastRandom());
156 case Modifiers::forestfights
:
157 spPlayer
->ForestFights(spPlayer
->ForestFights() - r
.LastRandom());
159 case Modifiers::playerfights
:
160 spPlayer
->PlayerFights(spPlayer
->PlayerFights() - r
.LastRandom());
163 throw GameServException(str(format("Invalid modifier %1%") % modifier
), __FILE__
, __LINE__
);
167 map
<Modifiers::Modifier
, Range
> ItemGO::Modifiers(void) const
172 void ItemGO::Modifiers(const map
<Modifiers::Modifier
, Range
> &modifiers
)
175 mModifiers
.insert(modifiers
.begin(), modifiers
.end());
178 ObjectTypes::ObjectType
ItemGO::ObjectType(void) const
180 return ObjectTypes::Item
;