Bazaar developer reference

CvUnitCombat::ResolveNuclearCombat(const CvCombatInfo &, uint)

Defined in
CvUnitCombat.cpp, line 2728
Class
CvUnitCombat
Hook name
CivHooks::CvUnitCombat_ResolveNuclearCombat

Hooks

static bool BeforeCvUnitCombat_ResolveNuclearCombat(const CvCombatInfo& kCombatInfo, uint uiParentEventID);static void AfterCvUnitCombat_ResolveNuclearCombat(const CvCombatInfo& kCombatInfo, uint uiParentEventID);static void ReplaceCvUnitCombat_ResolveNuclearCombat(void (*original)(const CvCombatInfo&, uint), const CvCombatInfo& kCombatInfo, uint uiParentEventID);CivRegisterBefore<CivHooks::CvUnitCombat_ResolveNuclearCombat>(host, &BeforeCvUnitCombat_ResolveNuclearCombat);CivRegisterAfter<CivHooks::CvUnitCombat_ResolveNuclearCombat>(host, &AfterCvUnitCombat_ResolveNuclearCombat);CivRegisterReplace<CivHooks::CvUnitCombat_ResolveNuclearCombat>(host, &ReplaceCvUnitCombat_ResolveNuclearCombat);

Code

2726//	Function: ResolveNuclearCombat2727//	Resolve combat from a nuclear attack.2728void CvUnitCombat::ResolveNuclearCombat(const CvCombatInfo& kCombatInfo, uint uiParentEventID)2729{2730	UNREFERENCED_PARAMETER(uiParentEventID);27312732	CvUnit* pkAttacker = kCombatInfo.getUnit(BATTLE_UNIT_ATTACKER);2733	CvAssert_Debug(pkAttacker);27342735	CvPlot* pkTargetPlot = kCombatInfo.getPlot();2736	CvAssert_Debug(pkTargetPlot);27372738	CvString strBuffer;27392740	GC.getGame().changeNukesExploded(1);27412742	if(pkAttacker)2743	{2744		// Make sure we are disconnected from any unit transporting the attacker (i.e. its a missile)2745		pkAttacker->setTransportUnit(NULL);27462747		if(pkTargetPlot)2748		{2749			if(ApplyNuclearExplosionDamage(kCombatInfo.getDamageMembers(), kCombatInfo.getDamageMemberCount(), pkAttacker, pkTargetPlot, kCombatInfo.getAttackNuclearLevel() - 1) > 0)2750			{2751#if !defined(NO_ACHIEVEMENTS)2752				if(pkAttacker->getOwner() == GC.getGame().getActivePlayer())2753				{2754					// Must damage someone to get the achievement.2755					gDLL->UnlockAchievement(ACHIEVEMENT_DROP_NUKE);27562757					if(GC.getGame().getGameTurnYear() == 2012)2758					{2759						CvPlayerAI& kPlayer = GET_PLAYER(GC.getGame().getActivePlayer());2760						if(strncmp(kPlayer.getCivilizationTypeKey(), "CIVILIZATION_MAYA", 32) == 0)2761						{2762							gDLL->UnlockAchievement(ACHIEVEMENT_XP1_36);2763						}27642765					}27662767				}2768#endif27692770#if defined(MOD_EVENTS_NUCLEAR_DETONATION)2771				// While we should really send the NuclearDetonation event here, we don't still have all the info at this point2772				// so we send it while calculating the combat info, just after we declare war (if appropriate) from firing one2773#endif2774			}2775		}27762777		// Suicide Unit (currently all nuclear attackers are)2778		if(pkAttacker->isSuicide())2779		{2780			pkAttacker->setCombatUnit(NULL);	// Must clear this if doing a delayed kill, should this be part of the kill method?2781			pkAttacker->setAttackPlot(NULL, false);2782			pkAttacker->kill(true);2783		}2784		else2785		{2786			CvAssertMsg(pkAttacker->isSuicide(), "A nuke unit that is not a one time use?");27872788			// Clean up some stuff2789			pkAttacker->setCombatUnit(NULL);2790			pkAttacker->ClearMissionQueue(GetPostCombatDelay());2791			pkAttacker->SetAutomateType(NO_AUTOMATE); // kick unit out of automation27922793			// Spend a move for this attack2794			pkAttacker->changeMoves(-GC.getMOVE_DENOMINATOR());27952796			// Can't move or attack again2797			if(!pkAttacker->canMoveAfterAttacking())2798			{2799				pkAttacker->finishMoves();2800			}2801		}28022803		// Report that combat is over in case we want to queue another attack2804		GET_PLAYER(pkAttacker->getOwner()).GetTacticalAI()->CombatResolved(pkAttacker, true);2805	}2806	2807	BATTLE_FINISHED();2808}

Calls

Called by