From d4c30667b89ef120ad7d43eadb8a94142a2542fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20W=2E=20Urba=C5=84czyk?= Date: Sun, 6 Jan 2013 04:48:05 +0000 Subject: [PATCH] Fixed #1168 and #1170. --- AI/VCAI/VCAI.cpp | 10 +++++----- server/CGameHandler.cpp | 7 ++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/AI/VCAI/VCAI.cpp b/AI/VCAI/VCAI.cpp index 8c1cd02fc..a722624b8 100644 --- a/AI/VCAI/VCAI.cpp +++ b/AI/VCAI/VCAI.cpp @@ -3355,7 +3355,7 @@ TSubgoal CGoal::whatToDoToAchieve() auto heroDummy = hero; erase_if(otherHeroes, [heroDummy](const CGHeroInstance * h) { - return (h == heroDummy.h || !ai->isAccessibleForHero(heroDummy->pos, h, true) || !ai->canGetArmy(heroDummy.h, h)); + return (h == heroDummy.h || !ai->isAccessibleForHero(heroDummy->visitablePos(), h, true) || !ai->canGetArmy(heroDummy.h, h)); }); if (otherHeroes.size()) { @@ -3363,9 +3363,9 @@ TSubgoal CGoal::whatToDoToAchieve() int primaryPath, secondaryPath; auto h = otherHeroes.back(); cb->setSelection(hero.h); - primaryPath = cb->getPathInfo(h->pos)->turns; //FIXME: investigate crash at this line + primaryPath = cb->getPathInfo(h->visitablePos())->turns; cb->setSelection(h); - secondaryPath = cb->getPathInfo(hero->pos)->turns; + secondaryPath = cb->getPathInfo(hero->visitablePos())->turns; if (primaryPath < secondaryPath) return CGoal(VISIT_HERO).setisAbstract(true).setobjid(h->id).sethero(hero); //go to the other hero if we are faster @@ -3533,7 +3533,7 @@ void SectorMap::exploreNewSector(crint3 pos, int num) } }); if(t->visitable && vstd::contains(ai->knownSubterraneanGates, t->visitableObjects.front())) - toVisit.push(ai->knownSubterraneanGates[t->visitableObjects.front()]->pos); + toVisit.push(ai->knownSubterraneanGates[t->visitableObjects.front()]->visitablePos()); } } } @@ -3805,7 +3805,7 @@ int3 SectorMap::firstTileToGet(HeroPtr h, crint3 dst) else { //TODO pick best shipyard to take over - return shipyards.front()->o->pos; + return shipyards.front()->o->visitablePos(); } } } diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 1012a580d..c7c05dd81 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -1918,19 +1918,20 @@ void CGameHandler::takeCreatures(int objid, const std::vectorSlots().begin(); - for(; i != obj->Slots().end(); i++) + bool foundSth = false; + for(auto i = obj->Slots().begin(); i != obj->Slots().end(); i++) { if(i->second->type == sbd.type) { TQuantity take = std::min(sbd.count - collected, i->second->count); //collect as much cres as we can changeStackCount(StackLocation(obj, i->first), -take, false); collected += take; + foundSth = true; break; } } - if(i == obj->Slots().end()) //we went through the whole loop and haven't found appropriate cres + if(!foundSth) //we went through the whole loop and haven't found appropriate cres { complain("Unexpected failure during taking creatures!"); return;