diff options
Diffstat (limited to 'games/lordsawar/files/patch-src_game.cpp')
-rw-r--r-- | games/lordsawar/files/patch-src_game.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/games/lordsawar/files/patch-src_game.cpp b/games/lordsawar/files/patch-src_game.cpp new file mode 100644 index 000000000000..0f565bfff75e --- /dev/null +++ b/games/lordsawar/files/patch-src_game.cpp @@ -0,0 +1,98 @@ +Index: src/game.cpp +@@ -1115,15 +1115,6 @@ + int + Game::loadHeroTemplates() + { +- FILE *fileptr = fopen (File::getMiscFile("heronames").c_str(), "r"); +- char *line = NULL; +- size_t len = 0; +- ssize_t read; +- int retval; +- int gender; +- int side; +- size_t bytesread = 0; +- char *tmp; + const Armysetlist* al = Armysetlist::getInstance(); + const Army* herotype; + +@@ -1131,51 +1122,41 @@ + std::vector<const Army*> heroes; + Player *p = Playerlist::getInstance()->getNeutral(); + for (unsigned int j = 0; j < al->getSize(p->getArmyset()); j++) +- { ++ { + const Army *a = al->getArmy (p->getArmyset(), j); + if (a->isHero()) +- heroes.push_back(a); ++ heroes.push_back(a); + } ++ ++ std::ifstream file(File::getMiscFile("heronames").c_str()); + +- if (fileptr == NULL) +- return -1; +- while ((read = getline (&line, &len, fileptr)) != -1) +- { +- bytesread = 0; +- retval = sscanf (line, "%d%d%n", &side, &gender, &bytesread); +- if (retval != 2) +- { +- free (line); +- return -2; +- } +- while (isspace(line[bytesread]) && line[bytesread] != '\0') +- bytesread++; +- tmp = strchr (&line[bytesread], '\n'); +- if (tmp) +- tmp[0] = '\0'; +- if (strlen (&line[bytesread]) == 0) +- { +- free (line); +- return -3; +- } +- if (side < 0 || side > (int) MAX_PLAYERS) +- { +- free (line); +- return -4; ++ if (file.good()) { ++ std::string buffer, name; ++ int side, gender; ++ ++ while (std::getline(file, buffer)) { ++ std::istringstream line(buffer); ++ if (!(line >> side >> gender >> name)) ++ return -2; ++ ++ if (side < 0 || side > (int) MAX_PLAYERS) ++ return -4; ++ ++ herotype = heroes[rand() % heroes.size()]; ++ Hero *newhero = new Hero (*herotype, "", NULL); ++ ++ if (gender) ++ newhero->setGender(Hero::MALE); ++ else ++ newhero->setGender(Hero::FEMALE); ++ ++ newhero->setName (name); ++ d_herotemplates[side].push_back (newhero); + } ++ } else ++ return -1; + +- herotype = heroes[rand() % heroes.size()]; +- Hero *newhero = new Hero (*herotype, "", NULL); +- if (gender) +- newhero->setGender(Hero::MALE); +- else +- newhero->setGender(Hero::FEMALE); +- newhero->setName (&line[bytesread]); +- d_herotemplates[side].push_back (newhero); +- } +- if (line) +- free (line); +- fclose (fileptr); ++ file.close(); + return 0; + } + |