mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-31 22:05:10 +02:00
Fixing #222 (hero/town order saving).
This commit is contained in:
parent
e0baffd0d0
commit
7ed83864e7
@ -1101,8 +1101,9 @@ template <typename Handler> void CPlayerInterface::serializeTempl( Handler &h, c
|
|||||||
h & sysOpts;
|
h & sysOpts;
|
||||||
h & spellbookSettings;
|
h & spellbookSettings;
|
||||||
|
|
||||||
|
//sleeping heroes
|
||||||
ui8 sleepingSize;
|
ui8 sleepingSize;
|
||||||
if(h.saving)
|
if (h.saving)
|
||||||
sleepingSize = sleepingHeroes.size();
|
sleepingSize = sleepingHeroes.size();
|
||||||
h & sleepingSize;
|
h & sleepingSize;
|
||||||
for (int i = 0; i < sleepingSize; i++)
|
for (int i = 0; i < sleepingSize; i++)
|
||||||
@ -1117,6 +1118,26 @@ template <typename Handler> void CPlayerInterface::serializeTempl( Handler &h, c
|
|||||||
sleepingHeroes += hero;
|
sleepingHeroes += hero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//hero list order
|
||||||
|
ui8 heroListSize;
|
||||||
|
if (h.saving)
|
||||||
|
heroListSize = wanderingHeroes.size();
|
||||||
|
else
|
||||||
|
wanderingHeroes.clear();
|
||||||
|
h & heroListSize;
|
||||||
|
for (int i = 0; i < heroListSize; i++)
|
||||||
|
{
|
||||||
|
si32 hid;
|
||||||
|
if (h.saving)
|
||||||
|
hid = wanderingHeroes[i]->id;
|
||||||
|
h & hid;
|
||||||
|
if (!h.saving)
|
||||||
|
{
|
||||||
|
const CGHeroInstance *hero = cb->getHero(hid);
|
||||||
|
wanderingHeroes += hero;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayerInterface::serialize( COSer<CSaveFile> &h, const int version )
|
void CPlayerInterface::serialize( COSer<CSaveFile> &h, const int version )
|
||||||
@ -1339,16 +1360,40 @@ void CPlayerInterface::objectPropertyChanged(const SetObjectProperty * sop)
|
|||||||
|
|
||||||
void CPlayerInterface::recreateHeroTownList()
|
void CPlayerInterface::recreateHeroTownList()
|
||||||
{
|
{
|
||||||
|
std::vector <const CGHeroInstance *> newWanderingHeroes;
|
||||||
|
std::vector<const CGHeroInstance*> allHeroes = cb->getHeroesInfo();
|
||||||
|
|
||||||
|
//applying current heroes order to new heroes info
|
||||||
|
int j;
|
||||||
|
for (int i = 0; i < wanderingHeroes.size(); i++)
|
||||||
|
if ((j = vstd::findPos(allHeroes, wanderingHeroes[i])) >= 0)
|
||||||
|
if (!allHeroes[j]->inTownGarrison)
|
||||||
|
{
|
||||||
|
newWanderingHeroes += allHeroes[j];
|
||||||
|
allHeroes -= allHeroes[j];
|
||||||
|
}
|
||||||
|
//all the rest of new heroes go the end of the list
|
||||||
wanderingHeroes.clear();
|
wanderingHeroes.clear();
|
||||||
std::vector<const CGHeroInstance*> heroes = cb->getHeroesInfo();
|
wanderingHeroes = newWanderingHeroes;
|
||||||
for(size_t i = 0; i < heroes.size(); i++)
|
newWanderingHeroes.clear();
|
||||||
if(!heroes[i]->inTownGarrison)
|
for (int i = 0; i < allHeroes.size(); i++)
|
||||||
wanderingHeroes.push_back(heroes[i]);
|
if (!allHeroes[i]->inTownGarrison)
|
||||||
|
wanderingHeroes += allHeroes[i];
|
||||||
|
|
||||||
|
std::vector<const CGTownInstance*> newTowns;
|
||||||
|
std::vector<const CGTownInstance*> allTowns = cb->getTownsInfo();
|
||||||
|
for (int i = 0; i < towns.size(); i++)
|
||||||
|
if ((j = vstd::findPos(allTowns, towns[i])) >= 0)
|
||||||
|
{
|
||||||
|
newTowns += allTowns[j];
|
||||||
|
allTowns -= allTowns[j];
|
||||||
|
}
|
||||||
|
|
||||||
towns.clear();
|
towns.clear();
|
||||||
std::vector<const CGTownInstance*> townInfo = cb->getTownsInfo();
|
towns = newTowns;
|
||||||
for(size_t i = 0; i < townInfo.size(); i++)
|
newTowns.clear();
|
||||||
towns.push_back(townInfo[i]);
|
for(int i = 0; i < allTowns.size(); i++)
|
||||||
|
towns.push_back(allTowns[i]);
|
||||||
|
|
||||||
adventureInt->updateNextHero(NULL);
|
adventureInt->updateNextHero(NULL);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user