this->skill_name = static_cast<std::string>(map->world->spells_config[util::to_string(this->id) + ".name"]); Config::iterator spells = map->world->spells_config.find(util::to_string(this->id) + ".learn"); if (spells != map->world->spells_config.end()) { std::vector<std::string> parts = util::explode(',', static_cast<std::string>((*spells).second)); if (parts.size() > 1) { if (parts.size() % 14 != 0) { Console::Wrn("skipping invalid trade spell data for NPC #%i", id); return; } this->spell_shop.resize(parts.size() / 14); for (std::size_t i = 0; i < parts.size(); i += 14) { NPC_Spell_Trade *spell(new NPC_Spell_Trade); spell->id = util::to_int(parts[i]); spell->gold = util::to_int(parts[i+1]); spell->level = util::to_int(parts[i+2]); spell->clas = util::to_int(parts[i+3]); spell->spell1 = util::to_int(parts[i+4]); spell->spell2 = util::to_int(parts[i+5]); spell->spell3 = util::to_int(parts[i+6]); spell->spell4 = util::to_int(parts[i+7]); spell->str = util::to_int(parts[i+8]); spell->intt = util::to_int(parts[i+9]); spell->wis = util::to_int(parts[i+10]); spell->agi = util::to_int(parts[i+11]); spell->con = util::to_int(parts[i+12]); spell->cha = util::to_int(parts[i+13]); this->spell_shop[i/14] = spell; } } }