|
@@ -1331,17 +1331,32 @@ bool AIGateway::moveHeroToTile(int3 dst, HeroPtr h)
|
|
|
auto doChannelProbing = [&]() -> void
|
|
|
{
|
|
|
auto currentPos = h->visitablePos();
|
|
|
- auto currentExit = getObj(currentPos, true)->id;
|
|
|
+ auto currentTeleport = getObj(currentPos, true);
|
|
|
|
|
|
- status.setChannelProbing(true);
|
|
|
- for(auto exit : teleportChannelProbingList)
|
|
|
- doTeleportMovement(exit, int3(-1));
|
|
|
- teleportChannelProbingList.clear();
|
|
|
- status.setChannelProbing(false);
|
|
|
+ if(currentTeleport)
|
|
|
+ {
|
|
|
+ auto currentExit = currentTeleport->id;
|
|
|
+
|
|
|
+ status.setChannelProbing(true);
|
|
|
+ for(auto exit : teleportChannelProbingList)
|
|
|
+ doTeleportMovement(exit, int3(-1));
|
|
|
+ teleportChannelProbingList.clear();
|
|
|
+ status.setChannelProbing(false);
|
|
|
+
|
|
|
+ doTeleportMovement(currentExit, currentPos);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ logAi->debug("Unexpected channel probbing at " + currentPos.toString());
|
|
|
|
|
|
- doTeleportMovement(currentExit, currentPos);
|
|
|
+ teleportChannelProbingList.clear();
|
|
|
+ status.setChannelProbing(false);
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
+ teleportChannelProbingList.clear();
|
|
|
+ status.setChannelProbing(false);
|
|
|
+
|
|
|
for(; i > 0; i--)
|
|
|
{
|
|
|
int3 currentCoord = path.nodes[i].coord;
|