Bazaar developer reference

CvUnitCombat::GenerateNuclearCombatInfo(CvUnit &, CvPlot &, CvCombatInfo *)

Defined in
CvUnitCombat.cpp, line 2269
Class
CvUnitCombat
Hook name
CivHooks::CvUnitCombat_GenerateNuclearCombatInfo
Lua events
GameEvents.NuclearDetonation

Hooks

static bool BeforeCvUnitCombat_GenerateNuclearCombatInfo(CvUnit& kAttacker, CvPlot& plot, CvCombatInfo* pkCombatInfo);static void AfterCvUnitCombat_GenerateNuclearCombatInfo(CvUnit& kAttacker, CvPlot& plot, CvCombatInfo* pkCombatInfo);static void ReplaceCvUnitCombat_GenerateNuclearCombatInfo(void (*original)(CvUnit&, CvPlot&, CvCombatInfo*), CvUnit& kAttacker, CvPlot& plot, CvCombatInfo* pkCombatInfo);CivRegisterBefore<CivHooks::CvUnitCombat_GenerateNuclearCombatInfo>(host, &BeforeCvUnitCombat_GenerateNuclearCombatInfo);CivRegisterAfter<CivHooks::CvUnitCombat_GenerateNuclearCombatInfo>(host, &AfterCvUnitCombat_GenerateNuclearCombatInfo);CivRegisterReplace<CivHooks::CvUnitCombat_GenerateNuclearCombatInfo>(host, &ReplaceCvUnitCombat_GenerateNuclearCombatInfo);

Code

2269void CvUnitCombat::GenerateNuclearCombatInfo(CvUnit& kAttacker, CvPlot& plot, CvCombatInfo* pkCombatInfo)2270{2271	BATTLE_STARTED(BATTLE_TYPE_NUKE, plot);2272	pkCombatInfo->setUnit(BATTLE_UNIT_ATTACKER, &kAttacker);2273	pkCombatInfo->setUnit(BATTLE_UNIT_DEFENDER, NULL);2274	pkCombatInfo->setPlot(&plot);22752276#if defined(MOD_EVENTS_BATTLES)2277	if (plot.isCity())2278	{2279		BATTLE_JOINED(plot.getPlotCity(), BATTLE_UNIT_DEFENDER, true);2280	}2281	else2282	{2283		CvUnit* pBestDefender = plot.getBestDefender(NO_PLAYER, kAttacker.getOwner()).pointer();2284		BATTLE_JOINED(pBestDefender, BATTLE_UNIT_DEFENDER, false);2285	}2286#endif22872288	//////////////////////////////////////////////////////////////////////22892290	CvString strBuffer;2291	bool abTeamsAffected[MAX_TEAMS];2292	int iI;2293	for(iI = 0; iI < MAX_TEAMS; iI++)2294	{2295		abTeamsAffected[iI] = kAttacker.isNukeVictim(&plot, ((TeamTypes)iI));2296	}22972298	int iPlotTeam = plot.getTeam();2299	bool bWar = false;2300	bool bBystander = false;23012302	for(iI = 0; iI < MAX_TEAMS; iI++)2303	{2304		if(abTeamsAffected[iI])2305		{2306			if(!kAttacker.isEnemy((TeamTypes)iI))2307			{2308#if defined(MOD_EVENTS_WAR_AND_PEACE)2309				GET_TEAM(kAttacker.getTeam()).declareWar(((TeamTypes)iI), false, kAttacker.getOwner());2310#else2311				GET_TEAM(kAttacker.getTeam()).declareWar(((TeamTypes)iI));2312#endif23132314				if (iPlotTeam == iI) 2315				{2316					bWar = true;2317				} 2318				else 2319				{2320					bBystander = true;2321				}2322			}2323		}2324	}23252326#if defined(MOD_EVENTS_NUCLEAR_DETONATION)2327	if (MOD_EVENTS_NUCLEAR_DETONATION) {2328		GAMEEVENTINVOKE_HOOK(GAMEEVENT_NuclearDetonation, kAttacker.getOwner(), plot.getX(), plot.getY(), bWar, bBystander);2329	} else {2330#endif2331	ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();2332	if (pkScriptSystem) 2333	{	2334		CvLuaArgsHandle args;23352336		args->Push(kAttacker.getOwner());2337		args->Push(plot.getX());2338		args->Push(plot.getY());2339		args->Push(bWar);2340		args->Push(bBystander);23412342		bool bResult;2343		LuaSupport::CallHook(pkScriptSystem, "NuclearDetonation", args.get(), bResult);2344	}2345#if defined(MOD_EVENTS_NUCLEAR_DETONATION)2346	}2347#endif23482349	kAttacker.setReconPlot(&plot);23502351	//////////////////////////////////////////////////////////////////////23522353	pkCombatInfo->setFinalDamage(BATTLE_UNIT_ATTACKER, 0);		// Total damage to the unit2354	pkCombatInfo->setDamageInflicted(BATTLE_UNIT_ATTACKER, 0);	// Damage inflicted this round2355	pkCombatInfo->setFinalDamage(BATTLE_UNIT_DEFENDER, 0);		// Total damage to the unit2356	pkCombatInfo->setDamageInflicted(BATTLE_UNIT_DEFENDER, 0);	// Damage inflicted this round23572358	pkCombatInfo->setFearDamageInflicted(BATTLE_UNIT_ATTACKER, 0);23592360	pkCombatInfo->setExperience(BATTLE_UNIT_ATTACKER, 0);2361	pkCombatInfo->setMaxExperienceAllowed(BATTLE_UNIT_ATTACKER, 0);2362	pkCombatInfo->setInBorders(BATTLE_UNIT_ATTACKER, plot.getOwner() != kAttacker.getOwner());	// Not really correct2363#if defined(MOD_TRAITS_GG_FROM_BARBARIANS) || defined(MOD_PROMOTIONS_GG_FROM_BARBARIANS)2364	pkCombatInfo->setUpdateGlobal(BATTLE_UNIT_ATTACKER, kAttacker.isGGFromBarbarians() || !kAttacker.isBarbarian());2365#else2366	pkCombatInfo->setUpdateGlobal(BATTLE_UNIT_ATTACKER, !kAttacker.isBarbarian());2367#endif23682369	pkCombatInfo->setExperience(BATTLE_UNIT_DEFENDER, 0);2370	pkCombatInfo->setMaxExperienceAllowed(BATTLE_UNIT_DEFENDER, 0);2371	pkCombatInfo->setInBorders(BATTLE_UNIT_DEFENDER, plot.getOwner() == kAttacker.getOwner());2372	pkCombatInfo->setUpdateGlobal(BATTLE_UNIT_DEFENDER, false);23732374	pkCombatInfo->setAttackIsBombingMission(true);2375	pkCombatInfo->setDefenderRetaliates(false);2376	pkCombatInfo->setAttackNuclearLevel(kAttacker.GetNukeDamageLevel() + 1);23772378	// Set all of the units in the blast radius to defenders and calculate their damage2379	int iDamageMembers = 0;2380	GenerateNuclearExplosionDamage(&plot, kAttacker.GetNukeDamageLevel(), &kAttacker, pkCombatInfo->getDamageMembers(), &iDamageMembers, pkCombatInfo->getMaxDamageMemberCount());2381	pkCombatInfo->setDamageMemberCount(iDamageMembers);23822383	GC.GetEngineUserInterface()->setDirty(UnitInfo_DIRTY_BIT, true);2384}

Calls

Called by