Bazaar developer reference

CvUnitCombat::ResolveAirSweep(const CvCombatInfo &, uint)

Defined in
CvUnitCombat.cpp, line 2030
Class
CvUnitCombat
Hook name
CivHooks::CvUnitCombat_ResolveAirSweep

Hooks

static bool BeforeCvUnitCombat_ResolveAirSweep(const CvCombatInfo& kCombatInfo, uint uiParentEventID);static void AfterCvUnitCombat_ResolveAirSweep(const CvCombatInfo& kCombatInfo, uint uiParentEventID);static void ReplaceCvUnitCombat_ResolveAirSweep(void (*original)(const CvCombatInfo&, uint), const CvCombatInfo& kCombatInfo, uint uiParentEventID);CivRegisterBefore<CivHooks::CvUnitCombat_ResolveAirSweep>(host, &BeforeCvUnitCombat_ResolveAirSweep);CivRegisterAfter<CivHooks::CvUnitCombat_ResolveAirSweep>(host, &AfterCvUnitCombat_ResolveAirSweep);CivRegisterReplace<CivHooks::CvUnitCombat_ResolveAirSweep>(host, &ReplaceCvUnitCombat_ResolveAirSweep);

Code

2030void CvUnitCombat::ResolveAirSweep(const CvCombatInfo& kCombatInfo, uint uiParentEventID)2031{2032	// After combat stuff2033	CvString strBuffer;2034	bool bAttackerDead = false;2035	bool bDefenderDead = false;20362037	CvUnit* pkAttacker = kCombatInfo.getUnit(BATTLE_UNIT_ATTACKER);2038	CvUnit* pkDefender = kCombatInfo.getUnit(BATTLE_UNIT_DEFENDER);2039	CvPlot* pkTargetPlot = kCombatInfo.getPlot();2040	if(!pkTargetPlot && pkDefender)2041		pkTargetPlot = pkDefender->plot();20422043	CvAssert_Debug(pkAttacker && pkDefender && pkTargetPlot);20442045	// Internal variables2046	int iAttackerDamageInflicted = kCombatInfo.getDamageInflicted(BATTLE_UNIT_ATTACKER);2047	int iDefenderDamageInflicted = kCombatInfo.getDamageInflicted(BATTLE_UNIT_DEFENDER);20482049	// Made interception!2050	if(pkDefender)2051	{2052		pkDefender->setMadeInterception(true);2053		if(pkAttacker && pkTargetPlot)2054		{2055#if !defined(NO_ACHIEVEMENTS)2056			//One Hit2057#if defined(MOD_UNITS_MAX_HP)2058			if(pkDefender->GetCurrHitPoints() == pkDefender->GetMaxHitPoints() && pkAttacker->isHuman() && !GC.getGame().isGameMultiPlayer())2059#else2060			if(pkDefender->GetCurrHitPoints() == GC.getMAX_HIT_POINTS() && pkAttacker->isHuman() && !GC.getGame().isGameMultiPlayer())2061#endif2062			{2063				gDLL->UnlockAchievement(ACHIEVEMENT_ONEHITKILL);2064			}2065#endif20662067#if defined(MOD_API_UNIT_STATS)2068			pkDefender->changeDamage(iAttackerDamageInflicted, pkAttacker->getOwner(), pkAttacker->GetID());2069			pkAttacker->changeDamage(iDefenderDamageInflicted, pkDefender->getOwner(), pkDefender->GetID());2070#else2071			pkDefender->changeDamage(iAttackerDamageInflicted, pkAttacker->getOwner());2072			pkAttacker->changeDamage(iDefenderDamageInflicted, pkDefender->getOwner());2073#endif20742075			// Update experience for both sides.2076#if defined(MOD_UNITS_XP_TIMES_100)2077			pkDefender->changeExperienceTimes100(100 *2078#else2079			pkDefender->changeExperience(2080#endif2081			    kCombatInfo.getExperience(BATTLE_UNIT_DEFENDER),2082			    kCombatInfo.getMaxExperienceAllowed(BATTLE_UNIT_DEFENDER),2083			    true,2084			    kCombatInfo.getInBorders(BATTLE_UNIT_DEFENDER),2085			    kCombatInfo.getUpdateGlobal(BATTLE_UNIT_DEFENDER));20862087#if defined(MOD_UNITS_XP_TIMES_100)2088			pkAttacker->changeExperienceTimes100(100 * 2089#else2090			pkAttacker->changeExperience(2091#endif2092			    kCombatInfo.getExperience(BATTLE_UNIT_ATTACKER),2093			    kCombatInfo.getMaxExperienceAllowed(BATTLE_UNIT_ATTACKER),2094			    true,2095			    kCombatInfo.getInBorders(BATTLE_UNIT_ATTACKER),2096			    kCombatInfo.getUpdateGlobal(BATTLE_UNIT_ATTACKER));20972098			// Anyone eat it?2099#if defined(MOD_UNITS_MAX_HP)2100			bAttackerDead = (pkAttacker->getDamage() >= pkAttacker->GetMaxHitPoints());2101			bDefenderDead = (pkDefender->getDamage() >= pkDefender->GetMaxHitPoints());2102#else2103			bAttackerDead = (pkAttacker->getDamage() >= GC.getMAX_HIT_POINTS());2104			bDefenderDead = (pkDefender->getDamage() >= GC.getMAX_HIT_POINTS());2105#endif21062107			int iActivePlayerID = GC.getGame().getActivePlayer();21082109			//////////////////////////////////////////////////////////////////////////21102111			// Ground AA interceptor2112			if(pkDefender->getDomainType() != DOMAIN_AIR)2113			{2114				// Attacker died2115				if(bAttackerDead)2116				{2117					auto_ptr<ICvUnit1> pAttacker = GC.WrapUnitPointer(pkAttacker);2118					gDLL->GameplayUnitDestroyedInCombat(pAttacker.get());21192120					if(iActivePlayerID == pkAttacker->getOwner())2121					{2122						strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_DIED_ATTACKING", pkAttacker->getNameKey(), pkDefender->getNameKey(), iAttackerDamageInflicted, 0);2123						GC.GetEngineUserInterface()->AddMessage(uiParentEventID, pkAttacker->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), strBuffer/*, GC.getEraInfo(GC.getGame().getCurrentEra())->getAudioUnitDefeatScript(), MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pkTargetPlot->getX(), pkTargetPlot->getY()*/);2124						MILITARYLOG(pkAttacker->getOwner(), strBuffer.c_str(), pkDefender->plot(), pkDefender->getOwner());2125					}2126					if(iActivePlayerID == pkDefender->getOwner())2127					{2128						strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_KILLED_ENEMY_UNIT", pkDefender->getNameKey(), iAttackerDamageInflicted, 0, pkAttacker->getNameKey(), pkAttacker->getVisualCivAdjective(pkDefender->getTeam()));2129						GC.GetEngineUserInterface()->AddMessage(uiParentEventID, pkDefender->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), strBuffer/*, GC.getEraInfo(GC.getGame().getCurrentEra())->getAudioUnitVictoryScript(), MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pkTargetPlot->getX(), pkTargetPlot->getY()*/);2130						MILITARYLOG(pkDefender->getOwner(), strBuffer.c_str(), pkDefender->plot(), pkAttacker->getOwner());2131					}2132					pkDefender->testPromotionReady();2133				}2134			}2135			// Air AA interceptor2136			else2137			{2138				// Attacker died2139				if(bAttackerDead)2140				{2141					auto_ptr<ICvUnit1> pAttacker = GC.WrapUnitPointer(pkAttacker);2142					gDLL->GameplayUnitDestroyedInCombat(pAttacker.get());21432144					if(iActivePlayerID == pkAttacker->getOwner())2145					{2146						strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_DIED_ATTACKING", pkAttacker->getNameKey(), pkDefender->getNameKey(), iAttackerDamageInflicted, 0);2147						GC.GetEngineUserInterface()->AddMessage(uiParentEventID, pkAttacker->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), strBuffer/*, GC.getEraInfo(GC.getGame().getCurrentEra())->getAudioUnitDefeatScript(), MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pkTargetPlot->getX(), pkTargetPlot->getY()*/);2148						MILITARYLOG(pkAttacker->getOwner(), strBuffer.c_str(), pkDefender->plot(), pkDefender->getOwner());2149					}2150					if(iActivePlayerID == pkDefender->getOwner())2151					{2152						strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_KILLED_ENEMY_UNIT", pkDefender->getNameKey(), iAttackerDamageInflicted, 0, pkAttacker->getNameKey(), pkAttacker->getVisualCivAdjective(pkDefender->getTeam()));2153						GC.GetEngineUserInterface()->AddMessage(uiParentEventID, pkDefender->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), strBuffer/*, GC.getEraInfo(GC.getGame().getCurrentEra())->getAudioUnitVictoryScript(), MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pkTargetPlot->getX(), pkTargetPlot->getY()*/);2154						MILITARYLOG(pkDefender->getOwner(), strBuffer.c_str(), pkDefender->plot(), pkAttacker->getOwner());2155					}21562157					pkDefender->testPromotionReady();21582159					ApplyPostCombatTraitEffects(pkDefender, pkAttacker);2160				}2161				// Defender died2162				else if(bDefenderDead)2163				{2164					auto_ptr<ICvUnit1> pDefender = GC.WrapUnitPointer(pkDefender);2165					gDLL->GameplayUnitDestroyedInCombat(pDefender.get());21662167					if(iActivePlayerID == pkAttacker->getOwner())2168					{2169						strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_DESTROYED_ENEMY", pkAttacker->getNameKey(), iDefenderDamageInflicted, pkDefender->getNameKey());2170						GC.GetEngineUserInterface()->AddMessage(uiParentEventID, pkAttacker->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), strBuffer/*, GC.getEraInfo(GC.getGame().getCurrentEra())->getAudioUnitVictoryScript(), MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pkTargetPlot->getX(), pkTargetPlot->getY()*/);2171						MILITARYLOG(pkAttacker->getOwner(), strBuffer.c_str(), pkDefender->plot(), pkDefender->getOwner());2172					}2173					if(iActivePlayerID == pkDefender->getOwner())2174					{2175						if(pkAttacker->getVisualOwner(pkDefender->getTeam()) != pkAttacker->getOwner())2176						{2177							strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DESTROYED_UNKNOWN", pkDefender->getNameKey(), pkAttacker->getNameKey(), iDefenderDamageInflicted);2178						}2179						else2180						{2181							strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DESTROYED", pkDefender->getNameKey(), pkAttacker->getNameKey(), pkAttacker->getVisualCivAdjective(pkDefender->getTeam()), iDefenderDamageInflicted);2182						}2183						GC.GetEngineUserInterface()->AddMessage(uiParentEventID, pkDefender->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), strBuffer/*,GC.getEraInfo(GC.getGame().getCurrentEra())->getAudioUnitDefeatScript(), MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pkTargetPlot->getX(), pkTargetPlot->getY()*/);2184						MILITARYLOG(pkDefender->getOwner(), strBuffer.c_str(), pkDefender->plot(), ((pkAttacker->getVisualOwner(pkDefender->getTeam()) != pkAttacker->getOwner()) ? NO_PLAYER : pkAttacker->getOwner()));2185					}21862187					CvNotifications* pNotification = GET_PLAYER(pkDefender->getOwner()).GetNotifications();2188					if(pNotification)2189					{2190						if(pkAttacker->getVisualOwner(pkDefender->getTeam()) != pkAttacker->getOwner())2191						{2192							strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DESTROYED_UNKNOWN", pkDefender->getNameKey(), pkAttacker->getNameKey(), iDefenderDamageInflicted);2193						}2194						else2195						{2196							strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DESTROYED", pkDefender->getNameKey(), pkAttacker->getNameKey(), pkAttacker->getVisualCivAdjective(pkDefender->getTeam()), iDefenderDamageInflicted);2197						}2198						Localization::String strSummary = Localization::Lookup("TXT_KEY_UNIT_LOST");2199						pNotification->Add(NOTIFICATION_UNIT_DIED, strBuffer, strSummary.toUTF8(), pkDefender->getX(), pkDefender->getY(), (int) pkDefender->getUnitType(), pkDefender->getOwner());2200					}22012202					pkAttacker->testPromotionReady();22032204					ApplyPostCombatTraitEffects(pkAttacker, pkDefender);2205				}2206				// Nobody died2207				else2208				{2209					if(iActivePlayerID == pkAttacker->getOwner())2210					{2211						strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WITHDRAW", pkAttacker->getNameKey(), iDefenderDamageInflicted, pkDefender->getNameKey(), iAttackerDamageInflicted);2212						GC.GetEngineUserInterface()->AddMessage(uiParentEventID, pkAttacker->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), strBuffer/*, "AS2D_OUR_WITHDRAWL", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pkTargetPlot->getX(), pkTargetPlot->getY()*/);2213						MILITARYLOG(pkAttacker->getOwner(), strBuffer.c_str(), pkAttacker->plot(), pkDefender->getOwner());2214					}2215					if(iActivePlayerID == pkDefender->getOwner())2216					{2217						strBuffer = GetLocalizedText("TXT_KEY_MISC_ENEMY_UNIT_WITHDRAW", pkAttacker->getNameKey(), iDefenderDamageInflicted, pkDefender->getNameKey(), iAttackerDamageInflicted);2218						GC.GetEngineUserInterface()->AddMessage(uiParentEventID, pkDefender->getOwner(), true, GC.getEVENT_MESSAGE_TIME(), strBuffer/*, "AS2D_THEIR_WITHDRAWL", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pkTargetPlot->getX(), pkTargetPlot->getY()*/);2219						MILITARYLOG(pkDefender->getOwner(), strBuffer.c_str(), pkDefender->plot(), pkAttacker->getOwner());2220					}22212222					pkDefender->testPromotionReady();2223					pkAttacker->testPromotionReady();2224				}2225			}2226		}2227	}2228	else2229		bDefenderDead = true;22302231	// Clean up some stuff2232	if(pkDefender)2233	{2234		pkDefender->setCombatUnit(NULL);2235		pkDefender->ClearMissionQueue();2236	}22372238	if(pkAttacker)2239	{2240		pkAttacker->setCombatUnit(NULL);2241		pkAttacker->ClearMissionQueue(GetPostCombatDelay());22422243		// Spend a move for this attack2244		pkAttacker->changeMoves(-GC.getMOVE_DENOMINATOR());22452246		// Can't move or attack again2247		if(!pkAttacker->canMoveAfterAttacking())2248		{2249			pkAttacker->finishMoves();2250		}22512252		// Report that combat is over in case we want to queue another attack2253		GET_PLAYER(pkAttacker->getOwner()).GetTacticalAI()->CombatResolved(pkAttacker, bDefenderDead);2254	}2255	2256	BATTLE_FINISHED();2257}

Calls

Called by