]>
Commit | Line | Data |
---|---|---|
4534c364 | 1 | #include <GameServ/GameLayer/GameObjects/ItemGO.h>\r |
2 | using GameServ::GameLayer::GameObjects::ItemGO;\r | |
23f6e925 | 3 | #include <GameServ/GameLayer/GameObjects/PlayerGO.h>\r |
4 | using GameServ::GameLayer::GameObjects::PlayerGO;\r | |
4534c364 | 5 | \r |
e0d3cb09 | 6 | #include <GameServ/Types.h>\r |
7 | using GameServ::Types::ItemTypes;\r | |
cce88913 | 8 | using GameServ::Types::Modifiers;\r |
8e6e952d | 9 | using GameServ::Types::Range;\r |
e0d3cb09 | 10 | \r |
4534c364 | 11 | #include <string>\r |
12 | using std::string;\r | |
cce88913 | 13 | #include <map>\r |
14 | using std::map;\r | |
4534c364 | 15 | \r |
cce88913 | 16 | #include <boost/smart_ptr/shared_ptr.hpp>\r |
551b6a1d | 17 | using boost::shared_ptr;\r |
23f6e925 | 18 | using boost::shared_static_cast;\r |
19 | \r | |
20 | #include <boost/algorithm/string.hpp>\r | |
21 | #include <boost/format.hpp>\r | |
22 | using boost::str;\r | |
23 | using boost::format;\r | |
551b6a1d | 24 | \r |
e0d3cb09 | 25 | ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1), mType(ItemTypes::NOTYPE)\r |
4534c364 | 26 | {\r |
4534c364 | 27 | }\r |
28 | \r | |
29 | ItemGO::~ItemGO()\r | |
30 | {\r | |
31 | }\r | |
32 | \r | |
33 | string ItemGO::Name(void) const\r | |
34 | {\r | |
35 | return mName;\r | |
36 | }\r | |
37 | \r | |
38 | void ItemGO::Name(const string &value)\r | |
39 | {\r | |
40 | mName = value;\r | |
41 | }\r | |
42 | \r | |
43 | unsigned long int ItemGO::Price(void) const\r | |
44 | {\r | |
45 | return mPrice;\r | |
46 | }\r | |
47 | \r | |
48 | void ItemGO::Price(const unsigned long int &price)\r | |
49 | {\r | |
50 | mPrice = price;\r | |
51 | }\r | |
52 | \r | |
53 | int ItemGO::Uses(void) const\r | |
54 | {\r | |
55 | return mUses;\r | |
56 | }\r | |
57 | \r | |
58 | void ItemGO::Uses(const int &value)\r | |
59 | {\r | |
60 | mUses = value;\r | |
61 | }\r | |
62 | \r | |
23f6e925 | 63 | void ItemGO::Use(shared_ptr<GameObject> spPlayer)\r |
64 | {\r | |
8e6e952d | 65 | map<Modifiers::Modifier, Range>::const_iterator iter;\r |
23f6e925 | 66 | for (iter = mModifiers.begin(); iter != mModifiers.end(); iter++)\r |
67 | {\r | |
68 | ApplyModifier(spPlayer, iter->first, iter->second);\r | |
69 | }\r | |
70 | }\r | |
71 | \r | |
8e6e952d | 72 | void ItemGO::ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r)\r |
23f6e925 | 73 | {\r |
74 | shared_ptr<PlayerGO> spPlayer = shared_static_cast<PlayerGO>(spObject);\r | |
75 | switch (modifier)\r | |
76 | {\r | |
77 | case Modifiers::strength:\r | |
8e6e952d | 78 | spPlayer->Strength(spPlayer->Strength() + r.Random());\r |
23f6e925 | 79 | break;\r |
80 | case Modifiers::defense:\r | |
8e6e952d | 81 | spPlayer->Defense(spPlayer->Defense() + r.Random());\r |
23f6e925 | 82 | break;\r |
83 | case Modifiers::health:\r | |
8e6e952d | 84 | spPlayer->Health(spPlayer->Health() + r.Random());\r |
23f6e925 | 85 | break;\r |
86 | case Modifiers::maxhealth:\r | |
8e6e952d | 87 | spPlayer->MaxHealth(spPlayer->MaxHealth() + r.Random());\r |
23f6e925 | 88 | break;\r |
89 | case Modifiers::gold:\r | |
8e6e952d | 90 | spPlayer->Gold(spPlayer->Gold() + r.Random());\r |
23f6e925 | 91 | break;\r |
92 | case Modifiers::bank:\r | |
8e6e952d | 93 | spPlayer->Bank(spPlayer->Bank() + r.Random());\r |
23f6e925 | 94 | break;\r |
95 | case Modifiers::forestfights:\r | |
8e6e952d | 96 | spPlayer->ForestFights(spPlayer->ForestFights() + r.Random());\r |
23f6e925 | 97 | break;\r |
98 | case Modifiers::playerfights:\r | |
8e6e952d | 99 | spPlayer->PlayerFights(spPlayer->PlayerFights() + r.Random());\r |
23f6e925 | 100 | break;\r |
101 | default:\r | |
102 | throw GameServException(str(format("Invalid modifier %1%") % modifier), __FILE__, __LINE__);\r | |
103 | }\r | |
104 | }\r | |
105 | \r | |
e0d3cb09 | 106 | ItemTypes::ItemType ItemGO::Type(void) const\r |
4534c364 | 107 | {\r |
108 | return mType;\r | |
109 | }\r | |
110 | \r | |
e0d3cb09 | 111 | void ItemGO::Type(const ItemTypes::ItemType &value)\r |
4534c364 | 112 | {\r |
113 | mType = value;\r | |
114 | }\r | |
115 | \r | |
8e6e952d | 116 | map<Modifiers::Modifier, Range> ItemGO::Modifiers(void) const\r |
4534c364 | 117 | {\r |
118 | return mModifiers;\r | |
119 | }\r | |
120 | \r | |
8e6e952d | 121 | void ItemGO::Modifiers(const map<Modifiers::Modifier, Range> &modifiers)\r |
4534c364 | 122 | {\r |
123 | mModifiers.clear();\r | |
cce88913 | 124 | mModifiers.insert(modifiers.begin(), modifiers.end());\r |
4534c364 | 125 | }\r |
126 | \r | |
127 | ItemGO *ItemGO::Clone(void) const\r | |
128 | {\r | |
129 | return new ItemGO(*this);\r | |
130 | }\r | |
131 | \r | |
132 | \r | |
133 | \r | |
134 | \r | |
135 | \r | |
136 | \r | |
137 | \r |