My Project
 
Loading...
Searching...
No Matches
ring.h
Go to the documentation of this file.
1#pragma once
2
3#include "equipableitem.h"
4#include "buff.h"
5#include "itemstatushandler.h"
6
7class Ring :public EquipableItem{
8public:
9 class RingBuff :public Buff{
10 private:
11 static const std::string TXT_KNOWN;
12
13 public:
15 int level;
16
17 RingBuff(Ring* r);
18
19 virtual std::string getClassName(){ return className(); }
20 static std::string className() { return "RingBuff"; }
21
22 virtual bool attachTo(Char* target);
23 virtual bool act();
24 };
25private:
26 static const int TICKS_TO_KNOW = 200;
27
28 static const float TIME_TO_EQUIP;
29
30 static const char* TXT_IDENTIFY;
31
32 static const char* TXT_UNEQUIP_TITLE;
33 static const std::string TXT_UNEQUIP_MESSAGE;
34 static std::string _gems[];
35 static std::vector<std::string> gems;
36
37 static int _images[];
38 static std::vector<int> images;
39
40 static std::string _rings[];
41 static std::vector<std::string> rings;
42
43 std::string gem;
44
45 int ticksToKnow;
46
47 static const std::string UNFAMILIRIARITY;
48
49 static ItemStatusHandler* handler;
50
51 void renewBuff();
52protected:
54
55 void setKnown();
56 virtual RingBuff* Buff() { return NULL; }
57public:
58 Ring();
59
60 static void initGems();
61 static void save(Bundle* bundle);
62 static void restore(Bundle* bundle);
63
64 void syncGem();
65
66 virtual void actions(Hero* hero, std::vector<std::string>& actions);
67 virtual bool doEquip(Hero* hero);
68
69 void activate(Char* ch);
70
71 virtual bool doUnequip(Hero* hero, bool collect, bool single);
72 virtual bool isEquipped(Hero* hero);
73 virtual int effectiveLevel();
74
75 virtual void getBroken();
76 virtual void fix();
77
78 virtual int maxDurability(int lvl);
79 virtual bool isKnown();
80
81 virtual std::string toString();
82
83 virtual std::string Name();
84 virtual std::string desc();
85 virtual std::string info();
86 virtual bool isIdentified();
87
88 virtual Item* identify();
89 virtual Item* random();
90
91 static bool allKnown();
92 virtual int price();
93
94 virtual void storeInBundle(Bundle* bundle);
95 virtual void restoreFromBundle(Bundle* bundle);
96 virtual std::string getClassName() { return "Ring"; }
97};
98
99class RingOfMending :public Ring{
100public:
101 class Rejuvenation :public RingBuff
102 {
103 public:
105
106 virtual std::string getClassName(){ return className(); }
107 static std::string className() { return "Rejuvenation"; }
108 virtual std::string toString() { return ""; }
109 };
110
112 virtual std::string desc();
113
114 virtual std::string getClassName() { return "RingOfMending"; }
115 static Item* Create() { return new RingOfMending(); }
116protected:
117 virtual RingBuff* Buff(){ return new Rejuvenation(this); }
118};
119
120class RingOfDetection :public Ring{
121public:
122 class Detection :public RingBuff {
123 public:
125 virtual std::string getClassName(){ return className(); }
126 static std::string className() { return "Detection"; }
127 };
129
130 virtual bool doEquip(Hero* hero);
131
132 virtual std::string getClassName() { return "RingOfDetection"; }
133 static Item* Create() { return new RingOfDetection(); }
134};
135
136class RingOfShadows :public Ring{
137public:
138 class Shadows :public RingBuff {
139 public:
141 virtual std::string getClassName(){ return className(); }
142 static std::string className() { return "Shadows"; }
143 virtual std::string toString() { return ""; }
144 };
145
147 virtual std::string getClassName() { return "RingOfShadows"; }
148 static Item* Create() { return new RingOfShadows(); }
149 virtual std::string desc();
150protected:
151 virtual RingBuff* Buff() {
152 return new Shadows(this);
153 }
154};
155
156class RingOfPower :public Ring{
157public:
158 class Power :public RingBuff {
159 public:
161 virtual std::string getClassName(){ return className(); }
162 static std::string className() { return "Power"; }
163 virtual std::string toString() { return ""; }
164 };
165
166 RingOfPower(){ name = "Ring of Power"; }
167 virtual std::string getClassName() { return "RingOfPower"; }
168 static Item* Create() { return new RingOfPower(); }
169 virtual std::string desc();
170protected:
171 virtual RingBuff* Buff() {
172 return new Power(this);
173 }
174};
175
176class RingOfHerbalism :public Ring{
177public:
178 class Herbalism :public RingBuff {
179 public:
181 virtual std::string getClassName(){ return className(); }
182 static std::string className() { return "Herbalism"; }
183 virtual std::string toString() { return ""; }
184 };
185
186 RingOfHerbalism(){ name = "Ring of Herbalism"; }
187 virtual std::string getClassName() { return "RingOfHerbalism"; }
188 static Item* Create() { return new RingOfHerbalism(); }
189 virtual std::string desc();
190protected:
191 virtual RingBuff* Buff() {
192 return new Herbalism(this);
193 }
194};
195
196class RingOfAccuracy :public Ring{
197public:
198 class Accuracy :public RingBuff {
199 public:
201 virtual std::string getClassName(){ return className(); }
202 static std::string className() { return "Accuracy"; }
203 virtual std::string toString() { return ""; }
204 };
205
206 RingOfAccuracy(){ name = "Ring of Accuracy"; }
207 virtual std::string getClassName() { return "RingOfAccuracy"; }
208 static Item* Create() { return new RingOfAccuracy(); }
209 virtual std::string desc();
210protected:
211 virtual RingBuff* Buff() {
212 return new Accuracy(this);
213 }
214};
215
216class RingOfEvasion :public Ring{
217public:
218 class Evasion :public RingBuff {
219 public:
221 virtual std::string getClassName(){ return className(); }
222 static std::string className() { return "Evasion"; }
223 virtual std::string toString() { return ""; }
224 };
225
226 RingOfEvasion(){ name = "Ring of Evasion"; }
227 virtual std::string getClassName() { return "RingOfEvasion"; }
228 static Item* Create() { return new RingOfEvasion(); }
229 virtual std::string desc();
230protected:
231 virtual RingBuff* Buff() {
232 return new Evasion(this);
233 }
234};
235
236class RingOfSatiety :public Ring{
237public:
238 class Satiety :public RingBuff {
239 public:
241 virtual std::string getClassName(){ return className(); }
242 static std::string className() { return "Satiety"; }
243 virtual std::string toString() { return ""; }
244 };
245
246 RingOfSatiety(){ name = "Ring of Satiety"; }
247 virtual std::string getClassName() { return "RingOfSatiety"; }
248 static Item* Create() { return new RingOfSatiety(); }
249 virtual std::string desc();
250protected:
251 virtual RingBuff* Buff() {
252 return new Satiety(this);
253 }
254};
255
256class RingOfHaste :public Ring{
257public:
258 class Haste :public RingBuff {
259 public:
261 virtual std::string getClassName(){ return className(); }
262 static std::string className() { return "RingOfHaste::Haste"; }
263 virtual std::string toString() { return ""; }
264 };
265
266 RingOfHaste(){ name = "Ring of Haste"; }
267 virtual std::string getClassName() { return "RingOfHaste"; }
268 static Item* Create() { return new RingOfHaste(); }
269 virtual std::string desc();
270protected:
271 virtual RingBuff* Buff() {
272 return new Haste(this);
273 }
274};
275
276class RingOfHaggler :public Ring{
277public:
278 class Haggling :public RingBuff {
279 public:
281 virtual std::string getClassName(){ return className(); }
282 static std::string className() { return "RingOfHagglerHaggling"; }
283 virtual std::string toString() { return ""; }
284 };
285
286 RingOfHaggler(){ name = BPT::getText("lang.Ring_of_Haggler"); }
287 virtual std::string getClassName() { return "RingOfHaggler"; }
288 static Item* Create() { return new RingOfHaggler(); }
289 virtual std::string desc();
290
291 virtual void use() {
292 // Do nothing (it can't degrade)
293 }
294 virtual bool isUpgradable() {
295 return false;
296 }
297 virtual Item* random() {
298 Level(+1);
299 return this;
300 }
301 virtual bool doPickUp(Hero* hero);
302protected:
303 virtual RingBuff* Buff() {
304 return new Haggling(this);
305 }
306};
307
308class RingOfElements :public Ring{
309public:
310 class Resistance :public RingBuff {
311 public:
313 virtual std::string getClassName(){ return className(); }
314 static std::string className() { return "Resistance"; }
315 virtual std::string toString() { return ""; }
316
318 return level < 0 ? 1 : (2 + 0.5f * level) / (2 + level);
319 }
320
321 std::set<std::string> resistances();
322 };
323
325 virtual std::string getClassName() { return "RingOfElements"; }
326 static Item* Create() { return new RingOfElements(); }
327 virtual std::string desc();
328
329
330protected:
331 virtual RingBuff* Buff() {
332 return new Resistance(this);
333 }
334
335private:
336 static std::set<std::string> EMPTY;
337 static std::set<std::string> FULL;
338};
339
340class RingOfThorns :public Ring{
341public:
342 class Thorns :public RingBuff {
343 public:
345 virtual std::string getClassName(){ return className(); }
346 static std::string className() { return "Thorns"; }
347 virtual std::string toString() { return ""; }
348 };
349
350 RingOfThorns(){ name = "Ring of Thorns"; }
351 virtual std::string getClassName() { return "RingOfThorns"; }
352 static Item* Create() { return new RingOfThorns(); }
353 virtual std::string desc();
354
355 virtual void use() {
356 // Do nothing (it can't degrade)
357 }
358 virtual bool isUpgradable() {
359 return false;
360 }
361 virtual Item* random() {
362 Level(+1);
363 return this;
364 }
365 virtual bool doPickUp(Hero* hero);
366protected:
367 virtual RingBuff* Buff() {
368 return new Thorns(this);
369 }
370};
static std::string getText(const std::string &key)
Definition bpt.cpp:26
Char * target
Definition buff.h:13
Buff()
Definition buff.cpp:20
Definition char.h:9
Definition equipableitem.h:5
Definition hero.h:18
Definition item.h:15
int Level()
Definition item.h:119
Item()
Definition item.cpp:65
std::string name
Definition item.h:48
int maxDurability()
Definition item.h:111
virtual boolean collect(Bag *container)
Definition item.cpp:301
Definition itemstatushandler.h:10
Definition ring.h:9
virtual bool act()
Definition ring.cpp:348
static std::string className()
Definition ring.h:20
Ring * ring
Definition ring.h:14
int level
Definition ring.h:15
virtual std::string getClassName()
Definition ring.h:19
virtual bool attachTo(Char *target)
Definition ring.cpp:336
RingBuff(Ring *r)
Definition ring.cpp:330
virtual std::string desc()
Definition ring.cpp:250
virtual std::string toString()
Definition ring.cpp:237
virtual std::string Name()
Definition ring.cpp:245
virtual void fix()
Definition ring.cpp:214
virtual std::string info()
Definition ring.cpp:257
virtual void storeInBundle(Bundle *bundle)
Definition ring.cpp:313
virtual bool isEquipped(Hero *hero)
Definition ring.cpp:198
void setKnown()
Definition ring.cpp:69
void activate(Char *ch)
Definition ring.cpp:168
static void restore(Bundle *bundle)
Definition ring.cpp:95
virtual bool isKnown()
Definition ring.cpp:232
virtual bool isIdentified()
Definition ring.cpp:277
virtual RingBuff * Buff()
Definition ring.h:56
static void save(Bundle *bundle)
Definition ring.cpp:90
virtual void getBroken()
Definition ring.cpp:208
void syncGem()
Definition ring.cpp:100
virtual bool doEquip(Hero *hero)
Definition ring.cpp:112
virtual std::string getClassName()
Definition ring.h:96
static bool allKnown()
Definition ring.cpp:303
virtual int price()
Definition ring.cpp:308
Buff * buff
Definition ring.h:53
virtual Item * identify()
Definition ring.cpp:282
virtual int effectiveLevel()
Definition ring.cpp:203
static void initGems()
Definition ring.cpp:85
virtual bool doUnequip(Hero *hero, bool collect, bool single)
Definition ring.cpp:174
virtual void actions(Hero *hero, std::vector< std::string > &actions)
Definition ring.cpp:106
virtual void restoreFromBundle(Bundle *bundle)
Definition ring.cpp:319
virtual Item * random()
Definition ring.cpp:288
Ring()
Definition ring.cpp:78
Definition ring.h:198
virtual std::string getClassName()
Definition ring.h:201
Accuracy(Ring *r)
Definition ring.h:200
static std::string className()
Definition ring.h:202
virtual std::string toString()
Definition ring.h:203
static Item * Create()
Definition ring.h:208
virtual std::string getClassName()
Definition ring.h:207
RingOfAccuracy()
Definition ring.h:206
virtual RingBuff * Buff()
Definition ring.h:211
virtual std::string desc()
Definition ring.cpp:425
static std::string className()
Definition ring.h:126
Detection(Ring *r)
Definition ring.h:124
virtual std::string getClassName()
Definition ring.h:125
RingOfDetection()
Definition ring.cpp:379
virtual std::string getClassName()
Definition ring.h:132
static Item * Create()
Definition ring.h:133
virtual bool doEquip(Hero *hero)
Definition ring.cpp:384
Definition ring.h:310
std::set< std::string > resistances()
Definition ring.cpp:501
float durationFactor()
Definition ring.h:317
static std::string className()
Definition ring.h:314
Resistance(Ring *r)
Definition ring.h:312
virtual std::string toString()
Definition ring.h:315
virtual std::string getClassName()
Definition ring.h:313
virtual std::string desc()
Definition ring.cpp:490
RingOfElements()
Definition ring.cpp:474
virtual std::string getClassName()
Definition ring.h:325
static Item * Create()
Definition ring.h:326
virtual RingBuff * Buff()
Definition ring.h:331
Definition ring.h:218
virtual std::string toString()
Definition ring.h:223
Evasion(Ring *r)
Definition ring.h:220
static std::string className()
Definition ring.h:222
virtual std::string getClassName()
Definition ring.h:221
RingOfEvasion()
Definition ring.h:226
virtual std::string desc()
Definition ring.cpp:432
static Item * Create()
Definition ring.h:228
virtual RingBuff * Buff()
Definition ring.h:231
virtual std::string getClassName()
Definition ring.h:227
Definition ring.h:278
Haggling(Ring *r)
Definition ring.h:280
virtual std::string toString()
Definition ring.h:283
static std::string className()
Definition ring.h:282
virtual std::string getClassName()
Definition ring.h:281
virtual RingBuff * Buff()
Definition ring.h:303
virtual void use()
Definition ring.h:291
virtual std::string desc()
Definition ring.cpp:453
virtual Item * random()
Definition ring.h:297
virtual bool doPickUp(Hero *hero)
Definition ring.cpp:464
static Item * Create()
Definition ring.h:288
RingOfHaggler()
Definition ring.h:286
virtual bool isUpgradable()
Definition ring.h:294
virtual std::string getClassName()
Definition ring.h:287
Definition ring.h:258
virtual std::string toString()
Definition ring.h:263
static std::string className()
Definition ring.h:262
virtual std::string getClassName()
Definition ring.h:261
Haste(Ring *r)
Definition ring.h:260
virtual std::string desc()
Definition ring.cpp:446
static Item * Create()
Definition ring.h:268
virtual RingBuff * Buff()
Definition ring.h:271
virtual std::string getClassName()
Definition ring.h:267
RingOfHaste()
Definition ring.h:266
Definition ring.h:178
virtual std::string toString()
Definition ring.h:183
Herbalism(Ring *r)
Definition ring.h:180
static std::string className()
Definition ring.h:182
virtual std::string getClassName()
Definition ring.h:181
RingOfHerbalism()
Definition ring.h:186
virtual RingBuff * Buff()
Definition ring.h:191
virtual std::string desc()
Definition ring.cpp:418
virtual std::string getClassName()
Definition ring.h:187
static Item * Create()
Definition ring.h:188
Definition ring.h:102
virtual std::string getClassName()
Definition ring.h:106
static std::string className()
Definition ring.h:107
virtual std::string toString()
Definition ring.h:108
Rejuvenation(Ring *r)
Definition ring.h:104
virtual RingBuff * Buff()
Definition ring.h:117
static Item * Create()
Definition ring.h:115
RingOfMending()
Definition ring.cpp:365
virtual std::string getClassName()
Definition ring.h:114
virtual std::string desc()
Definition ring.cpp:370
Definition ring.h:158
Power(Ring *r)
Definition ring.h:160
static std::string className()
Definition ring.h:162
virtual std::string getClassName()
Definition ring.h:161
virtual std::string toString()
Definition ring.h:163
virtual std::string getClassName()
Definition ring.h:167
static Item * Create()
Definition ring.h:168
RingOfPower()
Definition ring.h:166
virtual std::string desc()
Definition ring.cpp:410
virtual RingBuff * Buff()
Definition ring.h:171
Definition ring.h:238
Satiety(Ring *r)
Definition ring.h:240
virtual std::string getClassName()
Definition ring.h:241
virtual std::string toString()
Definition ring.h:243
static std::string className()
Definition ring.h:242
virtual std::string getClassName()
Definition ring.h:247
virtual RingBuff * Buff()
Definition ring.h:251
static Item * Create()
Definition ring.h:248
virtual std::string desc()
Definition ring.cpp:439
RingOfSatiety()
Definition ring.h:246
Definition ring.h:138
Shadows(Ring *r)
Definition ring.h:140
virtual std::string getClassName()
Definition ring.h:141
static std::string className()
Definition ring.h:142
virtual std::string toString()
Definition ring.h:143
RingOfShadows()
Definition ring.cpp:397
virtual std::string desc()
Definition ring.cpp:402
static Item * Create()
Definition ring.h:148
virtual std::string getClassName()
Definition ring.h:147
virtual RingBuff * Buff()
Definition ring.h:151
Definition ring.h:342
virtual std::string getClassName()
Definition ring.h:345
Thorns(Ring *r)
Definition ring.h:344
static std::string className()
Definition ring.h:346
virtual std::string toString()
Definition ring.h:347
virtual Item * random()
Definition ring.h:361
virtual void use()
Definition ring.h:355
virtual RingBuff * Buff()
Definition ring.h:367
virtual std::string desc()
Definition ring.cpp:513
virtual std::string getClassName()
Definition ring.h:351
virtual bool doPickUp(Hero *hero)
Definition ring.cpp:522
static Item * Create()
Definition ring.h:352
RingOfThorns()
Definition ring.h:350
virtual bool isUpgradable()
Definition ring.h:358