void SkillManager::loadSkill(LuaObject* luaSkill) { Reference<Skill*> skill = new Skill(); skill->parseLuaObject(luaSkill); Skill* parent = skillMap.get(skill->getParentName().hashCode()); if(parent == NULL) { parent = rootNode; } parent->addChild(skill); skillMap.put(skill->getSkillName().hashCode(), skill); Vector<String> commands = skill->commands; for(int i = 0; i < commands.size(); ++i) { String command = commands.get(i); if(!abilityMap.containsKey(command)) { abilityMap.put(command, new Ability(command)); } } }
void SkillManager::loadClientData() { IffStream* iffStream = TemplateManager::instance()->openIffFile("datatables/skill/skills.iff"); if (iffStream == NULL) { error("Could not load skills."); return; } DataTableIff dtiff; dtiff.readObject(iffStream); delete iffStream; for (int i = 0; i < dtiff.getTotalRows(); ++i) { DataTableRow* row = dtiff.getRow(i); Reference<Skill*> skill = new Skill(); skill->parseDataTableRow(row); Skill* parent = skillMap.get(skill->getParentName().hashCode()); if (parent == NULL) parent = rootNode; parent->addChild(skill); if (skillMap.put(skill->getSkillName().hashCode(), skill) != NULL) { error("overwriting skill name"); assert(0 && "skill name hashcode error"); } //Load the abilities of the skill into the ability map. Vector<String> commands = skill->commands; for (int i = 0; i < commands.size(); ++i) { String command = commands.get(i); if (!abilityMap.containsKey(command)) { abilityMap.put(command, new Ability(command)); } } } loadFromLua(); //If the admin ability isn't in the ability map, then we want to add it manually. if (!abilityMap.containsKey("admin")) abilityMap.put("admin", new Ability("admin")); // These are not listed in skills.iff and need to be added manually if (!abilityMap.containsKey("startMusic+western")) abilityMap.put("startMusic+western", new Ability("startMusic+western")); if (!abilityMap.containsKey("startDance+theatrical")) abilityMap.put("startDance+theatrical", new Ability("startDance+theatrical")); if (!abilityMap.containsKey("startDance+theatrical2")) abilityMap.put("startDance+theatrical2", new Ability("startDance+theatrical2")); loadXpLimits(); info("Successfully loaded " + String::valueOf(skillMap.size()) + " skills and " + String::valueOf(abilityMap.size()) + " abilities.", true); }