Bazaar developer reference

CvGame::GetCombatPrediction(const CvUnit *, const CvUnit *)

Defined in
CvGame.cpp, line 11853
Class
CvGame
Hook name
CivHooks::CvGame_GetCombatPrediction

Hooks

static bool BeforeCvGame_GetCombatPrediction(CvGame* self, const CvUnit* pAttackingUnit, const CvUnit* pDefendingUnit, CombatPredictionTypes& result);static void AfterCvGame_GetCombatPrediction(CvGame* self, const CvUnit* pAttackingUnit, const CvUnit* pDefendingUnit, CombatPredictionTypes& result);static CombatPredictionTypes ReplaceCvGame_GetCombatPrediction(CombatPredictionTypes (*original)(CvGame*, const CvUnit*, const CvUnit*), CvGame* self, const CvUnit* pAttackingUnit, const CvUnit* pDefendingUnit);CivRegisterBefore<CivHooks::CvGame_GetCombatPrediction>(host, &BeforeCvGame_GetCombatPrediction);CivRegisterAfter<CivHooks::CvGame_GetCombatPrediction>(host, &AfterCvGame_GetCombatPrediction);CivRegisterReplace<CivHooks::CvGame_GetCombatPrediction>(host, &ReplaceCvGame_GetCombatPrediction);

Code

11853CombatPredictionTypes CvGame::GetCombatPrediction(const CvUnit* pAttackingUnit, const CvUnit* pDefendingUnit)11854{11855	if(!pAttackingUnit || !pDefendingUnit)11856	{11857		return NO_COMBAT_PREDICTION;11858	}1185911860	CombatPredictionTypes ePrediction = NO_COMBAT_PREDICTION;1186111862	if(pAttackingUnit->isRanged())11863	{11864		return COMBAT_PREDICTION_RANGED;11865	}1186611867	CvPlot* pFromPlot = pAttackingUnit->plot();11868	CvPlot* pToPlot = pDefendingUnit->plot();1186911870	int iAttackingStrength = pAttackingUnit->GetMaxAttackStrength(pFromPlot, pToPlot, pDefendingUnit);11871	if(iAttackingStrength == 0)11872	{11873		return NO_COMBAT_PREDICTION;11874	}1187511876	int iDefenderStrength = pDefendingUnit->GetMaxDefenseStrength(pToPlot, pAttackingUnit, false);1187711878	//iMyDamageInflicted = pMyUnit:GetCombatDamage(iMyStrength, iTheirStrength, pMyUnit:GetDamage() + iTheirFireSupportCombatDamage, false, false, false);11879	int iAttackingDamageInflicted = pAttackingUnit->getCombatDamage(iAttackingStrength, iDefenderStrength, pAttackingUnit->getDamage(), false, false, false);11880	int iDefenderDamageInflicted  = pDefendingUnit->getCombatDamage(iDefenderStrength, iAttackingStrength, pDefendingUnit->getDamage(), false, false, false);11881	//iTheirDamageInflicted = iTheirDamageInflicted + iTheirFireSupportCombatDamage;1188211883#if defined(MOD_UNITS_MAX_HP)11884	int iAttackerMaxHitPoints = pAttackingUnit->GetMaxHitPoints();11885	int iDefenderMaxHitPoints = pDefendingUnit->GetMaxHitPoints();1188611887	if (iAttackingDamageInflicted > iDefenderMaxHitPoints)11888	{11889		iAttackingDamageInflicted = iDefenderMaxHitPoints;11890	}11891	if (iDefenderDamageInflicted > iAttackerMaxHitPoints)11892	{11893		iDefenderDamageInflicted = iAttackerMaxHitPoints;11894	}1189511896	bool bAttackerDies = (pAttackingUnit->getDamage() + iDefenderDamageInflicted >= iAttackerMaxHitPoints);11897	bool bDefenderDies = (pDefendingUnit->getDamage() + iAttackingDamageInflicted >= iDefenderMaxHitPoints);11898#else11899	int iMaxUnitHitPoints = GC.getMAX_HIT_POINTS();11900	if (iAttackingDamageInflicted > iMaxUnitHitPoints)11901	{11902		iAttackingDamageInflicted = iMaxUnitHitPoints;11903	}11904	if (iDefenderDamageInflicted > iMaxUnitHitPoints)11905	{11906		iDefenderDamageInflicted = iMaxUnitHitPoints;11907	}1190811909	bool bAttackerDies = false;11910	bool bDefenderDies = false;1191111912	if (pAttackingUnit->getDamage() + iDefenderDamageInflicted >= iMaxUnitHitPoints)11913	{11914		bAttackerDies = true;11915	}1191611917	if (pDefendingUnit->getDamage() + iAttackingDamageInflicted >= iMaxUnitHitPoints)11918	{11919		bDefenderDies = true;11920	}11921#endif1192211923	if(bAttackerDies && bDefenderDies)11924	{11925		ePrediction = COMBAT_PREDICTION_STALEMATE;11926	}11927	else if(bAttackerDies)11928	{11929		ePrediction = COMBAT_PREDICTION_TOTAL_DEFEAT;11930	}11931	else if(bDefenderDies)11932	{11933		ePrediction = COMBAT_PREDICTION_TOTAL_VICTORY;11934	}11935	else if(iAttackingDamageInflicted - iDefenderDamageInflicted > 30)11936	{11937		ePrediction = COMBAT_PREDICTION_MAJOR_VICTORY;11938	}11939	else if(iAttackingDamageInflicted > iDefenderDamageInflicted)11940	{11941		ePrediction = COMBAT_PREDICTION_SMALL_VICTORY;11942	}11943	else if(iDefenderDamageInflicted - iAttackingDamageInflicted > 30)11944	{11945		ePrediction = COMBAT_PREDICTION_MAJOR_DEFEAT;11946	}11947	else if(iAttackingDamageInflicted < iDefenderDamageInflicted)11948	{11949		ePrediction = COMBAT_PREDICTION_SMALL_DEFEAT;11950	}11951	else11952	{11953		ePrediction = COMBAT_PREDICTION_STALEMATE;11954	}1195511956	return ePrediction;11957}

Calls

Called by