void DeleteCustomHero(std::string hero_full_name) { CCharacter *hero = GetCustomHero(hero_full_name); if (!hero) { fprintf(stderr, "Custom hero \"%s\" doesn't exist.\n", hero_full_name.c_str()); } if (CurrentCustomHero == hero) { CurrentCustomHero = NULL; } //delete hero save file std::string path = Parameters::Instance.GetUserDirectory(); if (!GameName.empty()) { path += "/"; path += GameName; } path += "/"; path += "heroes/"; if (hero->Custom) { path += "custom/"; } path += hero->GetFullName(); path += ".lua"; if (CanAccessFile(path.c_str())) { unlink(path.c_str()); } CustomHeroes.erase(std::remove(CustomHeroes.begin(), CustomHeroes.end(), hero), CustomHeroes.end()); delete hero; }
void SaveCustomHero(std::string hero_full_name) { CCharacter *hero = GetCustomHero(hero_full_name); if (!hero) { fprintf(stderr, "Custom hero \"%s\" doesn't exist.\n", hero_full_name.c_str()); } SaveHero(hero); }
void SetCurrentCustomHero(std::string hero_full_name) { if (!hero_full_name.empty()) { CCharacter *hero = GetCustomHero(hero_full_name); if (!hero) { fprintf(stderr, "Custom hero \"%s\" doesn't exist.\n", hero_full_name.c_str()); } CurrentCustomHero = const_cast<CCharacter *>(&(*hero)); } else { CurrentCustomHero = NULL; } }
void HeroAddQuest(std::string hero_full_name, std::string quest_name) { CCharacter *hero = GetCustomHero(hero_full_name); if (!hero) { fprintf(stderr, "Custom hero \"%s\" doesn't exist.\n", hero_full_name.c_str()); } CQuest *quest = GetQuest(quest_name); if (!quest) { fprintf(stderr, "Quest \"%s\" doesn't exist.\n", quest_name.c_str()); } hero->QuestsInProgress.push_back(quest); }
void HeroCompleteQuest(std::string hero_full_name, std::string quest_name) { CCharacter *hero = GetCustomHero(hero_full_name); if (!hero) { fprintf(stderr, "Custom hero \"%s\" doesn't exist.\n", hero_full_name.c_str()); } CQuest *quest = GetQuest(quest_name); if (!quest) { fprintf(stderr, "Quest \"%s\" doesn't exist.\n", quest_name.c_str()); } hero->QuestsInProgress.erase(std::remove(hero->QuestsInProgress.begin(), hero->QuestsInProgress.end(), quest), hero->QuestsInProgress.end()); hero->QuestsCompleted.push_back(quest); }
bool IsNameValidForCustomHero(std::string hero_name, std::string hero_dynasty_name) { std::string hero_full_name = hero_name; if (!hero_dynasty_name.empty()) { hero_full_name += " "; hero_full_name += hero_dynasty_name; } if (GetCustomHero(hero_full_name) != NULL) { return false; //name already used } if (hero_name.empty()) { return false; } if ( hero_full_name.find('\n') != -1 || hero_full_name.find('\\') != -1 || hero_full_name.find('/') != -1 || hero_full_name.find('.') != -1 || hero_full_name.find('*') != -1 || hero_full_name.find('[') != -1 || hero_full_name.find(']') != -1 || hero_full_name.find(':') != -1 || hero_full_name.find(';') != -1 || hero_full_name.find('=') != -1 || hero_full_name.find(',') != -1 || hero_full_name.find('<') != -1 || hero_full_name.find('>') != -1 || hero_full_name.find('?') != -1 || hero_full_name.find('|') != -1 ) { return false; } if (hero_name.find_first_not_of(' ') == std::string::npos) { return false; //name contains only spaces } if (!hero_dynasty_name.empty() && hero_dynasty_name.find_first_not_of(' ') == std::string::npos) { return false; //dynasty name contains only spaces } return true; }
void ChangeCustomHeroCivilization(std::string hero_full_name, std::string civilization_name, std::string new_hero_name, std::string new_hero_dynasty_name) { if (!hero_full_name.empty()) { CCharacter *hero = GetCustomHero(hero_full_name); if (!hero) { fprintf(stderr, "Custom hero \"%s\" doesn't exist.\n", hero_full_name.c_str()); } int civilization = PlayerRaces.GetRaceIndexByName(civilization_name.c_str()); if (civilization != -1) { //delete old hero save file std::string path = Parameters::Instance.GetUserDirectory(); if (!GameName.empty()) { path += "/"; path += GameName; } path += "/"; path += "heroes/"; if (hero->Custom) { path += "custom/"; } path += hero->GetFullName(); path += ".lua"; if (CanAccessFile(path.c_str())) { unlink(path.c_str()); } //now, update the hero hero->Civilization = civilization; int new_unit_type_id = PlayerRaces.GetCivilizationClassUnitType(hero->Civilization, GetUnitTypeClassIndexByName(hero->Type->Class)); if (new_unit_type_id != -1) { hero->Type = const_cast<CUnitType *>(&(*UnitTypes[new_unit_type_id])); hero->Name = new_hero_name; hero->Dynasty = new_hero_dynasty_name; SaveHero(hero); } } } }