浏览代码

Fix game hang on invalid shooter animation config

Ivan Savenko 2 年之前
父节点
当前提交
fd3f80e860
共有 1 个文件被更改,包括 9 次插入1 次删除
  1. 9 1
      client/battle/BattleAnimationClasses.cpp

+ 9 - 1
client/battle/BattleAnimationClasses.cpp

@@ -756,7 +756,15 @@ void ShootingAnimation::createProjectile(const Point & from, const Point & dest)
 uint32_t ShootingAnimation::getAttackClimaxFrame() const
 {
 	const CCreature *shooterInfo = getCreature();
-	return shooterInfo->animation.attackClimaxFrame;
+
+	uint32_t maxFrames = stackAnimation(attackingStack)->framesInGroup(getGroup());
+	uint32_t climaxFrame = shooterInfo->animation.attackClimaxFrame;
+	uint32_t selectedFrame = vstd::clamp(shooterInfo->animation.attackClimaxFrame, 1, maxFrames);
+
+	if (climaxFrame != selectedFrame)
+		logGlobal->warn("Shooter %s has ranged attack climax frame set to %d, but only %d available!", shooterInfo->getNamePluralTranslated(), climaxFrame, maxFrames);
+
+	return selectedFrame - 1; // H3 counts frames from 1
 }
 
 ECreatureAnimType ShootingAnimation::getUpwardsGroup() const