Browse Source

Fix crash on losing a hero

Ivan Savenko 1 year ago
parent
commit
dfff1eae26
1 changed files with 8 additions and 2 deletions
  1. 8 2
      client/PlayerLocalState.cpp

+ 8 - 2
client/PlayerLocalState.cpp

@@ -219,7 +219,12 @@ void PlayerLocalState::removeWanderingHero(const CGHeroInstance * hero)
 	if (hero == currentSelection)
 	{
 		auto const * nextHero = getNextWanderingHero(hero);
-		setSelection(nextHero);
+		if (nextHero)
+			setSelection(nextHero);
+		else if (!ownedTowns.empty())
+			setSelection(ownedTowns.front());
+		else
+			setSelection(nullptr);
 	}
 
 	vstd::erase(wanderingHeroes, hero);
@@ -334,7 +339,8 @@ void PlayerLocalState::serialize(JsonNode & dest) const
 	dest["spellbook"]["tabBattle"].Integer() = spellbookSettings.spellbookLastTabBattle;
 	dest["spellbook"]["tabAdvmap"].Integer() = spellbookSettings.spellbookLastTabAdvmap;
 
-	dest["currentSelection"].Integer() = currentSelection->id;
+	if (currentSelection)
+		dest["currentSelection"].Integer() = currentSelection->id;
 }
 
 void PlayerLocalState::deserialize(const JsonNode & source)