Преглед на файлове

[programming challenge] Don't dramatically crash upon illegal tatics movement.

Michał W. Urbańczyk преди 14 години
родител
ревизия
2691fd62f4
променени са 2 файла, в които са добавени 11 реда и са изтрити 1 реда
  1. 10 0
      lib/CBattleCallback.cpp
  2. 1 1
      server/CVCMIServer.cpp

+ 10 - 0
lib/CBattleCallback.cpp

@@ -16,6 +16,16 @@ CBattleCallback::CBattleCallback(CGameState *GS, int Player, IConnectionHandler
 bool CBattleCallback::battleMakeTacticAction( BattleAction * action )
 {
 	assert(gs->curB->tacticDistance);
+	if(action->actionType == BattleAction::WALK)
+	{
+		if(!gs->curB->isInTacticRange(action->destinationTile))
+		{
+			tlog0 << "Requesting movement to tile that is not in tactics range? Illegal!\n";
+			if(!action->destinationTile.isValid())
+				tlog0 << "Moreover the hex is invalid!!!\n";
+			return false;
+		}
+	}
 	MakeAction ma;
 	ma.ba = *action;
 	sendRequest(&ma);

+ 1 - 1
server/CVCMIServer.cpp

@@ -643,7 +643,7 @@ void CVCMIServer::startDuel(const std::string &battle, const std::string &leftAI
 	testMem.set(true);
 	boost::thread* memMon = new boost::thread(boost::bind(memoryMonitor, PIDs[0], PIDs[1], PIDs[2]));
 
-	std::string logFName = LOGS_DIR + "/duel_log.vdat";
+	std::string logFName = LOGS_DIR + "/" + leftAI + "_vs_"+rightAI+"_on_" + battle + ".vdat";
 	tlog0 << "Logging battle activities (for replay possibility) in " << logFName << std::endl;
 	gh->gameLog = new CSaveFile(logFName);
 	gh->gameLog->smartPointerSerialization = false;