diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 4b93943b1..1a97417fa 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -973,12 +973,11 @@ bool CGameHandler::moveHero(ObjectInstanceID hid, int3 dst, EMovementMode moveme doMove(TryMoveHero::TELEPORTATION, guardsCheck, DONT_VISIT_DEST, LEAVING_TILE); // visit town for town portal \ castle gates - // do not use generic visitObjectOnTile to avoid double-teleporting - // if this moveHero call was triggered by teleporter + // do not visit any other objects, e.g. monoliths to avoid double-teleporting if (objectToVisit) { if (CGTownInstance * town = dynamic_cast(objectToVisit)) - town->onHeroVisit(h); + objectVisited(town, h); } return true; @@ -2143,10 +2142,13 @@ bool CGameHandler::buildStructure(ObjectInstanceID tid, BuildingID requestedID, // now when everything is built - reveal tiles for lookout tower changeFogOfWar(t->getSightCenter(), t->getSightRadius(), t->getOwner(), ETileVisibility::REVEALED); - if(t->garrisonHero) //garrison hero first - consistent with original H3 Mana Vortex and Battle Scholar Academy levelup windows order - objectVisited(t, t->garrisonHero); - if(t->visitingHero) - objectVisited(t, t->visitingHero); + if (!force) + { + if(t->garrisonHero) //garrison hero first - consistent with original H3 Mana Vortex and Battle Scholar Academy levelup windows order + objectVisited(t, t->garrisonHero); + if(t->visitingHero) + objectVisited(t, t->visitingHero); + } checkVictoryLossConditionsForPlayer(t->tempOwner); return true;