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