瀏覽代碼

* Possibly fixed #870
* Fixed crash after catapult successfully destroyed one of turrets (stack queue wasn't properly updated)

Michał W. Urbańczyk 13 年之前
父節點
當前提交
3546c7841a
共有 2 個文件被更改,包括 9 次插入5 次删除
  1. 2 0
      client/BattleInterface/CBattleInterface.cpp
  2. 7 5
      lib/IGameCallback.cpp

+ 2 - 0
client/BattleInterface/CBattleInterface.cpp

@@ -1558,6 +1558,8 @@ void CBattleInterface::stackRemoved(int stackID)
 	delete creAnims[stackID];
 	creAnims.erase(stackID);
 	creDir.erase(stackID);
+
+	queue->update();
 }
 
 void CBattleInterface::stackActivated(const CStack * stack) //TODO: check it all before game state is changed due to abilities

+ 7 - 5
lib/IGameCallback.cpp

@@ -59,7 +59,11 @@ std::vector<int> CBattleInfoCallback::battleGetDistances(const CStack * stack, B
 	if(!hex.isValid())
 		hex = stack->position;
 
-	std::vector<int> ret;
+	std::vector<int> ret(GameConstants::BFIELD_SIZE, -1); //fill initial ret with -1's
+
+	if(!hex.isValid()) //stack has bad position? probably castle turret, return initial values (they can't move)
+		return ret;
+
 	bool ac[GameConstants::BFIELD_SIZE] = {0};
 	std::set<BattleHex> occupyable;
 	gs->curB->getAccessibilityMap(ac, stack->doubleWide(), stack->attackerOwned, false, occupyable, stack->hasBonusOfType(Bonus::FLYING), stack);
@@ -69,10 +73,8 @@ std::vector<int> CBattleInfoCallback::battleGetDistances(const CStack * stack, B
 
 	for(int i=0; i<GameConstants::BFIELD_SIZE; ++i)
 	{
-		if(pr[i] == -1)
-			ret.push_back(-1);
-		else
-			ret.push_back(dist[i]);
+		if(pr[i] != -1)
+			ret[i] = dist[i];
 	}
 
 	if(predecessors)