فهرست منبع

Merge pull request #3722 from IvanSavenko/stabilization

Fixes for recently reported crashes
Ivan Savenko 1 سال پیش
والد
کامیت
0a80c6c27b
5فایلهای تغییر یافته به همراه7 افزوده شده و 4 حذف شده
  1. 3 0
      AI/VCAI/VCAI.cpp
  2. 1 1
      client/lobby/CBonusSelection.cpp
  3. 1 1
      config/heroes/conflux.json
  4. 1 1
      lib/battle/CBattleInfoCallback.cpp
  5. 1 1
      lib/campaign/CampaignState.cpp

+ 3 - 0
AI/VCAI/VCAI.cpp

@@ -2031,6 +2031,9 @@ void VCAI::tryRealize(Goals::Explore & g)
 
 void VCAI::tryRealize(Goals::RecruitHero & g)
 {
+	if(cb->getResourceAmount(EGameResID::GOLD) < GameConstants::HERO_GOLD_COST)
+		throw cannotFulfillGoalException("Not enough gold to recruit hero!");
+
 	if(const CGTownInstance * t = findTownWithTavern())
 	{
 		recruitHero(t, true);

+ 1 - 1
client/lobby/CBonusSelection.cpp

@@ -119,7 +119,7 @@ CBonusSelection::CBonusSelection()
 	if (!getCampaign()->getMusic().empty())
 		CCS->musich->playMusic( getCampaign()->getMusic(), true, false);
 
-	if(settings["general"]["enableUiEnhancements"].Bool())
+	if(CSH->getState() != EClientState::GAMEPLAY && settings["general"]["enableUiEnhancements"].Bool())
 	{
 		tabExtraOptions = std::make_shared<ExtraOptionsTab>();
 		tabExtraOptions->recActions = UPDATE | SHOWALL | LCLICK | RCLICK_POPUP;

+ 1 - 1
config/heroes/conflux.json

@@ -176,7 +176,7 @@
 			"bonuses" : {
 				"damage" : {
 					"type" : "CREATURE_DAMAGE",
-					"subtype" : "creatureDamageMin",
+					"subtype" : "creatureDamageBoth",
 					"val" : 5
 				},
 				"attack" : {

+ 1 - 1
lib/battle/CBattleInfoCallback.cpp

@@ -742,7 +742,7 @@ DamageEstimation CBattleInfoCallback::battleEstimateDamage(const battle::Unit *
 {
 	RETURN_IF_NOT_BATTLE({});
 	auto reachability = battleGetDistances(attacker, attacker->getPosition());
-	int getMovementRange = reachability[attackerPosition];
+	int getMovementRange = attackerPosition.isValid() ? reachability[attackerPosition] : 0;
 	return battleEstimateDamage(attacker, defender, getMovementRange, retaliationDmg);
 }
 

+ 1 - 1
lib/campaign/CampaignState.cpp

@@ -369,7 +369,7 @@ JsonNode CampaignState::crossoverSerialize(CGHeroInstance * hero) const
 CGHeroInstance * CampaignState::crossoverDeserialize(const JsonNode & node, CMap * map) const
 {
 	JsonDeserializer handler(nullptr, const_cast<JsonNode&>(node));
-	auto * hero = new CGHeroInstance(map->cb);
+	auto * hero = new CGHeroInstance(map ? map->cb : nullptr);
 	hero->ID = Obj::HERO;
 	hero->serializeJsonOptions(handler);
 	if (map)