Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
PlayerState::daysWithoutCastle: change in netpacks only. Fix issue 2462
Moving code from CGameHandler to NetPacksLib without changes.
  • Loading branch information
ArseniyShestakov committed Aug 23, 2016
1 parent 355f0a7 commit abad3cf
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 22 deletions.
28 changes: 27 additions & 1 deletion lib/NetPacksLib.cpp
Expand Up @@ -1093,6 +1093,25 @@ DLL_LINKAGE void NewTurn::applyGs( CGameState *gs )

if(gs->getDate(Date::DAY_OF_WEEK) == 1)
gs->updateRumor();

//count days without town for all players, regardless of their turn order
for (auto &p : gs->players)
{
PlayerState & playerState = p.second;
if (playerState.status == EPlayerStatus::INGAME)
{
if (playerState.towns.empty())
{
if (playerState.daysWithoutCastle)
++(*playerState.daysWithoutCastle);
else playerState.daysWithoutCastle = 0;
}
else
{
playerState.daysWithoutCastle = boost::none;
}
}
}
}

DLL_LINKAGE void SetObjectProperty::applyGs( CGameState *gs )
Expand All @@ -1113,7 +1132,14 @@ DLL_LINKAGE void SetObjectProperty::applyGs( CGameState *gs )
if(t->tempOwner < PlayerColor::PLAYER_LIMIT)
gs->getPlayer(t->tempOwner)->towns -= t;
if(val < PlayerColor::PLAYER_LIMIT_I)
gs->getPlayer(PlayerColor(val))->towns.push_back(t);
{
PlayerState * p = gs->getPlayer(PlayerColor(val));
p->towns.push_back(t);

//reset counter before NewTurn to avoid no town message if game loaded at turn when one already captured
if(p->daysWithoutCastle)
p->daysWithoutCastle = boost::none;
}
}

CBonusSystemNode *nodeToMove = cai->whatShouldBeAttached();
Expand Down
21 changes: 0 additions & 21 deletions server/CGameHandler.cpp
Expand Up @@ -1716,25 +1716,6 @@ void CGameHandler::newTurn()
elem->newTurn();
}

//count days without town for all players, regardless of their turn order
for (auto &p : gs->players)
{
PlayerState & playerState = p.second;
if (playerState.status == EPlayerStatus::INGAME)
{
if (playerState.towns.empty())
{
if (playerState.daysWithoutCastle)
++(*playerState.daysWithoutCastle);
else playerState.daysWithoutCastle = 0;
}
else
{
playerState.daysWithoutCastle = boost::none;
}
}
}

synchronizeArtifactHandlerLists(); //new day events may have changed them. TODO better of managing that
}
void CGameHandler::run(bool resume)
Expand Down Expand Up @@ -2183,8 +2164,6 @@ void CGameHandler::setOwner(const CGObjectInstance * obj, PlayerColor owner)
const CGTownInstance * town = dynamic_cast<const CGTownInstance *>(obj);
if (town->hasBuilt(BuildingID::PORTAL_OF_SUMMON, ETownType::DUNGEON))
setPortalDwelling(town, true, false);

gs->getPlayer(owner)->daysWithoutCastle = boost::none; // reset counter
}

if (oldOwner < PlayerColor::PLAYER_LIMIT) //old owner is real player
Expand Down

0 comments on commit abad3cf

Please sign in to comment.