1 #ifndef DFCLASSES_H
2 #define DFCLASSES_H
3 
4 #include "datafile.h"
5 #include <map>
6 
7 struct Skill
8 {
9 	std::string name;
10 	std::string min, max;		// * for no limit
11 
SkillSkill12 	Skill(): name(""), min("0"),max("100") {}
13 
ClearSkill14 	void Clear()
15 	{
16 		*this = Skill();
17 	}
18 };
19 struct Class
20 {
21 	std::string name, shortName, description;
22 	std::string hpBonus, mpBonus, skillBonus, levelProgression, attackBonus, additionalAttackLevel;
23 
24 	std::map<std::string,Skill*> skills;
25 
ClassClass26 	Class(): name(""),shortName(""),description(""),
27 			 hpBonus(""),mpBonus(""),skillBonus(""),levelProgression(""),attackBonus(""),additionalAttackLevel("")
28 	{
29 		// Attributes
30 		skills["SPEED"] = new Skill;
31 		skills["COORDINATION"] = new Skill;
32 		skills["POWER"] = new Skill;
33 		skills["IQ"] = new Skill;
34 		skills["LEADERSHIP"] = new Skill;
35 		skills["LUCK"] = new Skill;
36 		skills["PIETY"] = new Skill;
37 		skills["LORE"] = new Skill;
38 
39 		// Weapon skills
40 		skills["SWORD_WEAPON"] = new Skill;
41 		skills["AXE_WEAPON"] = new Skill;
42 		skills["BOW_WEAPON"] = new Skill;
43 		skills["MACE_WEAPON"] = new Skill;
44 		skills["HAND_TO_HAND_COMBAT"] = new Skill;
45 
46 		// Defensive skills
47 		skills["SHIELD_DEFEND"] = new Skill;
48 		skills["ARMOR_DEFEND"] = new Skill;
49 		skills["WEAPON_DEFEND"] = new Skill;
50 		skills["HAND_DEFEND"] = new Skill;
51 
52 		// Magic skills
53 		skills["NATURE_MAGIC"] = new Skill;
54 		skills["AWARENESS_MAGIC"] = new Skill;
55 		skills["LIFE_AND_DEATH_MAGIC"] = new Skill;
56 		skills["HISTORY_MAGIC"] = new Skill;
57 		skills["DECEIT_MAGIC"] = new Skill;
58 		skills["CONFRONTATION_MAGIC"] = new Skill;
59 
60 		// Thieving skills
61 		skills["OPEN_LOCK"] = new Skill;
62 		skills["FIND_TRAP"] = new Skill;
63 		skills["MOVE_UNDETECTED"] = new Skill;
64 		skills["STEALING"] = new Skill;
65 	}
~ClassClass66 	~Class()
67 	{
68 		for ( std::map<std::string,Skill*>::iterator itr = skills.begin(); itr != skills.end(); itr++ )
69 			delete itr->second;
70 		skills.clear();
71 	}
72 
ClearClass73 	void Clear()
74 	{
75 		name = shortName = description = "";
76 		hpBonus = mpBonus = skillBonus = levelProgression = attackBonus = additionalAttackLevel = "";
77 		for ( std::map<std::string,Skill*>::iterator itr = skills.begin(); itr != skills.end(); itr++ )
78 		{
79 			itr->second->Clear();
80 		}
81 	}
82 };
83 
84 class DFClasses : public DataFile <Class>
85 {
86 protected:
87 	bool LoadSingle(std::ifstream*,Class*);
88 
89 	void ParseSkill(std::ifstream*,Skill*);
90 
91 public:
92 	void Save();
93 };
94 
95 #endif // DFCLASSES_H
96