Bazaar developer reference

CvUnitCombat::ResolveRangedCityVsUnitCombat(const CvCombatInfo &, uint)

Defined in
CvUnitCombat.cpp, line 1063
Class
CvUnitCombat
Hook name
CivHooks::CvUnitCombat_ResolveRangedCityVsUnitCombat

Hooks

static bool BeforeCvUnitCombat_ResolveRangedCityVsUnitCombat(const CvCombatInfo& kCombatInfo, uint uiParentEventID);static void AfterCvUnitCombat_ResolveRangedCityVsUnitCombat(const CvCombatInfo& kCombatInfo, uint uiParentEventID);static void ReplaceCvUnitCombat_ResolveRangedCityVsUnitCombat(void (*original)(const CvCombatInfo&, uint), const CvCombatInfo& kCombatInfo, uint uiParentEventID);CivRegisterBefore<CivHooks::CvUnitCombat_ResolveRangedCityVsUnitCombat>(host, &BeforeCvUnitCombat_ResolveRangedCityVsUnitCombat);CivRegisterAfter<CivHooks::CvUnitCombat_ResolveRangedCityVsUnitCombat>(host, &AfterCvUnitCombat_ResolveRangedCityVsUnitCombat);CivRegisterReplace<CivHooks::CvUnitCombat_ResolveRangedCityVsUnitCombat>(host, &ReplaceCvUnitCombat_ResolveRangedCityVsUnitCombat);

Code

1063void CvUnitCombat::ResolveRangedCityVsUnitCombat(const CvCombatInfo& kCombatInfo, uint uiParentEventID)1064{1065	bool bTargetDied = false;1066	int iDamage = kCombatInfo.getDamageInflicted(BATTLE_UNIT_ATTACKER);1067	bool bBarbarian = false;10681069	CvCity* pkAttacker = kCombatInfo.getCity(BATTLE_UNIT_ATTACKER);1070	CvAssert_Debug(pkAttacker);10711072	if(pkAttacker)1073		pkAttacker->clearCombat();10741075	CvPlot* pkTargetPlot = kCombatInfo.getPlot();1076	CvAssert_Debug(pkTargetPlot);10771078	ICvUserInterface2* pkDLLInterface = GC.GetEngineUserInterface();1079	int iActivePlayerID = GC.getGame().getActivePlayer();10801081	if(pkTargetPlot)1082	{1083		if(!pkTargetPlot->isCity())1084		{1085			CvUnit* pkDefender = kCombatInfo.getUnit(BATTLE_UNIT_DEFENDER);1086			CvAssert_Debug(pkDefender != NULL);1087			if(pkDefender)1088			{1089				bBarbarian = pkDefender->isBarbarian();10901091				if(pkAttacker)1092				{1093					// Info message for the attacking player1094					if(iActivePlayerID == pkAttacker->getOwner())1095					{1096						Localization::String localizedText = Localization::Lookup("TXT_KEY_MISC_YOUR_CITY_RANGE_ATTACK");1097						localizedText << pkAttacker->getNameKey() << pkDefender->getNameKey() << iDamage;1098						pkDLLInterface->AddMessage(uiParentEventID, pkAttacker->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), localizedText.toUTF8());//, "AS2D_COMBAT", MESSAGE_TYPE_INFO, pDefender->getUnitInfo().GetButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pPlot->getX(), pPlot->getY());1099						MILITARYLOG(pkAttacker->getOwner(), localizedText.toUTF8(), pkAttacker->plot(), pkDefender->getOwner());1100					}11011102					// Red icon over defending unit1103					if(iActivePlayerID == pkDefender->getOwner())1104					{1105						Localization::String localizedText = Localization::Lookup("TXT_KEY_MISC_YOU_ARE_ATTACKED_BY_CITY");1106						localizedText << pkDefender->getNameKey() << pkAttacker->getNameKey() << iDamage;1107						pkDLLInterface->AddMessage(uiParentEventID, pkDefender->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), localizedText.toUTF8());//, "AS2D_COMBAT", MESSAGE_TYPE_COMBAT_MESSAGE, pDefender->getUnitInfo().GetButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pDefender->getX(), pDefender->getY(), true, true);1108						MILITARYLOG(pkDefender->getOwner(), localizedText.toUTF8(), pkDefender->plot(), pkAttacker->getOwner());1109					}11101111#if defined(MOD_UNITS_MAX_HP)1112					if(iDamage + pkDefender->getDamage() >= pkDefender->GetMaxHitPoints())1113#else1114					if(iDamage + pkDefender->getDamage() >= GC.getMAX_HIT_POINTS())1115#endif1116					{1117						CvNotifications* pNotifications = GET_PLAYER(pkDefender->getOwner()).GetNotifications();1118						if(pNotifications)1119						{1120							Localization::String localizedText = Localization::Lookup("TXT_KEY_MISC_YOU_ARE_ATTACKED_BY_CITY");1121							localizedText << pkDefender->getNameKey() << pkAttacker->getNameKey() << iDamage;1122							Localization::String strSummary = Localization::Lookup("TXT_KEY_UNIT_LOST");1123							pNotifications->Add(NOTIFICATION_UNIT_DIED, localizedText.toUTF8(), strSummary.toUTF8(), pkDefender->getX(), pkDefender->getY(), (int) pkDefender->getUnitType(), pkDefender->getOwner());1124						}1125						bTargetDied = true;11261127						// Earn bonuses for kills?1128						CvPlayer& kAttackingPlayer = GET_PLAYER(pkAttacker->getOwner());1129#if defined(MOD_API_UNIFIED_YIELDS)1130						kAttackingPlayer.DoYieldsFromKill(NULL, pkDefender, pkDefender->getX(), pkDefender->getY(), 0);1131#else1132						kAttackingPlayer.DoYieldsFromKill(NO_UNIT, pkDefender->getUnitType(), pkDefender->getX(), pkDefender->getY(), pkDefender->isBarbarian(), 0);1133#endif1134					}11351136					//set damage but don't update entity damage visibility1137#if defined(MOD_API_UNIT_STATS)1138					pkDefender->changeDamage(iDamage, pkAttacker->getOwner(), pkAttacker->GetID());1139#else1140					pkDefender->changeDamage(iDamage, pkAttacker->getOwner());1141#endif11421143					// Update experience1144#if defined(MOD_UNITS_XP_TIMES_100)1145					pkDefender->changeExperienceTimes100(100 * 1146#else1147					pkDefender->changeExperience(1148#endif1149					    kCombatInfo.getExperience(BATTLE_UNIT_DEFENDER),1150					    kCombatInfo.getMaxExperienceAllowed(BATTLE_UNIT_DEFENDER),1151					    true,1152					    kCombatInfo.getInBorders(BATTLE_UNIT_DEFENDER),1153					    kCombatInfo.getUpdateGlobal(BATTLE_UNIT_DEFENDER));1154				}11551156				pkDefender->setCombatUnit(NULL);1157				if(!CvUnitMission::IsHeadMission(pkDefender, CvTypes::getMISSION_WAIT_FOR()))		// If the top mission was not a 'wait for', then clear it.1158					pkDefender->ClearMissionQueue();1159			}1160			else1161				bTargetDied = true;1162		}1163		else1164		{1165			CvAssert(false);	// Left as an exercise for the reader1166			bTargetDied = true;1167		}1168	}11691170	// Report that combat is over in case we want to queue another attack1171	if(pkAttacker)1172		GET_PLAYER(pkAttacker->getOwner()).GetTacticalAI()->CombatResolved((void*)pkAttacker, bTargetDied, true);1173	1174	BATTLE_FINISHED();1175}

Calls

Called by