Browse Source

Remove deleted objects from timed events data

Dydzio 1 year ago
parent
commit
0589403ea3
1 changed files with 10 additions and 0 deletions
  1. 10 0
      server/processors/NewTurnProcessor.cpp

+ 10 - 0
server/processors/NewTurnProcessor.cpp

@@ -40,6 +40,8 @@ NewTurnProcessor::NewTurnProcessor(CGameHandler * gameHandler)
 
 void NewTurnProcessor::handleTimeEvents(PlayerColor color)
 {
+	std::vector<const CGObjectInstance*> removedObjects;
+
 	for (auto const & event : gameHandler->gameState()->map->events)
 	{
 		if (!event.occursToday(gameHandler->gameState()->day))
@@ -64,10 +66,18 @@ void NewTurnProcessor::handleTimeEvents(PlayerColor color)
 		//remove objects specified by event
 		for(const CGObjectInstance * objectToRemove : event.deletedObjectsInstances)
 		{
+			removedObjects.push_back(objectToRemove);
 			gameHandler->removeObject(objectToRemove, PlayerColor::NEUTRAL);
 		}
 		gameHandler->sendAndApply(&iw); //show dialog
 	}
+
+	for (auto & event : gameHandler->gameState()->map->events)
+		vstd::erase_if(event.deletedObjectsInstances,
+			[removedObjects](const CGObjectInstance * o)
+			{
+				return vstd::contains(removedObjects, o);
+			});
 }
 
 void NewTurnProcessor::handleTownEvents(const CGTownInstance * town)