浏览代码

Merge pull request #5051 from IvanSavenko/hero_removal_fix

Remove object from owned objects before resetting owner
Ivan Savenko 10 月之前
父节点
当前提交
04987eef5c
共有 1 个文件被更改,包括 11 次插入12 次删除
  1. 11 12
      lib/networkPacks/NetPacksLib.cpp

+ 11 - 12
lib/networkPacks/NetPacksLib.cpp

@@ -1193,6 +1193,17 @@ void RemoveObject::applyGs(CGameState *gs)
 	if (initiator.isValidPlayer())
 		gs->getPlayerState(initiator)->destroyedObjects.insert(objectID);
 
+	if(obj->getOwner().isValidPlayer())
+	{
+		gs->getPlayerState(obj->getOwner())->removeOwnedObject(obj); //object removed via map event or hero got beaten
+
+		FlaggableMapObject* flaggableObject = dynamic_cast<FlaggableMapObject*>(obj);
+		if(flaggableObject)
+		{
+			flaggableObject->markAsDeleted();
+		}
+	}
+
 	if(obj->ID == Obj::HERO) //remove beaten hero
 	{
 		auto * beatenHero = dynamic_cast<CGHeroInstance *>(obj);
@@ -1251,18 +1262,6 @@ void RemoveObject::applyGs(CGameState *gs)
 		}
 	}
 
-	if(obj->getOwner().isValidPlayer())
-	{
-		gs->getPlayerState(obj->getOwner())->removeOwnedObject(obj); //object removed via map event or hero got beaten
-
-		FlaggableMapObject* flaggableObject = dynamic_cast<FlaggableMapObject*>(obj);
-		if(flaggableObject)
-		{
-			flaggableObject->markAsDeleted();
-		}
-	}
-
-
 	gs->map->instanceNames.erase(obj->instanceName);
 	gs->map->objects[objectID.getNum()].dellNull();
 	gs->map->calculateGuardingGreaturePositions();//FIXME: excessive, update only affected tiles