1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

More work on static variable desyncs

This commit is contained in:
Arseniy Shestakov 2016-08-29 23:07:52 +03:00
parent 3f075e391a
commit 668cd83ee5
2 changed files with 25 additions and 3 deletions

View File

@ -735,8 +735,12 @@ int3 CPlayerSpecificInfoCallback::getGrailPos( double *outKnownRatio )
}
else
{
*outKnownRatio = static_cast<double>(CGObelisk::visited[gs->getPlayerTeam(*player)->id])
/ CGObelisk::obeliskCount;
TeamID t = gs->getPlayerTeam(*player)->id;
double visited = 0.0;
if(CGObelisk::visited.count(t))
visited = static_cast<double>(CGObelisk::visited[t]);
*outKnownRatio = visited / CGObelisk::obeliskCount;
}
return gs->map->grailPos;
}

View File

@ -787,6 +787,16 @@ void CGameState::init(StartInfo * si)
initVisitingAndGarrisonedHeroes();
initFogOfWar();
// Explicitly initialize static variables
for(auto & elem : players)
{
CGKeys::playerKeyMap[elem.first] = {};
}
for(auto & elem : teams)
{
CGObelisk::visited[elem.first] = 0;
}
logGlobal->debug("\tChecking objectives");
map->checkForObjectives(); //needs to be run when all objects are properly placed
@ -2637,7 +2647,15 @@ void CGameState::obtainPlayersStats(SThievesGuildInfo & tgi, int level)
}
if(level >= 3) //obelisks found
{
FILL_FIELD(obelisks, CGObelisk::visited[gs->getPlayerTeam(g->second.color)->id])
auto getObeliskVisited = [](TeamID t)
{
if(CGObelisk::visited.count(t))
return CGObelisk::visited[t];
else
return ui8(0);
};
FILL_FIELD(obelisks, getObeliskVisited(gs->getPlayerTeam(g->second.color)->id))
}
if(level >= 4) //artifacts
{