Bazaar developer reference

CvUnit::paradrop(int, int)

Defined in
CvUnit.cpp, line 6642
Class
CvUnit
Hook name
CivHooks::CvUnit_paradrop
Lua events
GameEvents.ParadropAt

Hooks

static bool BeforeCvUnit_paradrop(CvUnit* self, int iX, int iY, bool& result);static void AfterCvUnit_paradrop(CvUnit* self, int iX, int iY, bool& result);static bool ReplaceCvUnit_paradrop(bool (*original)(CvUnit*, int, int), CvUnit* self, int iX, int iY);CivRegisterBefore<CivHooks::CvUnit_paradrop>(host, &BeforeCvUnit_paradrop);CivRegisterAfter<CivHooks::CvUnit_paradrop>(host, &AfterCvUnit_paradrop);CivRegisterReplace<CivHooks::CvUnit_paradrop>(host, &ReplaceCvUnit_paradrop);

Code

6642bool CvUnit::paradrop(int iX, int iY)6643{6644	VALIDATE_OBJECT6645	if(!canParadropAt(plot(), iX, iY))6646	{6647		return false;6648	}66496650	CvPlot* pPlot = GC.getMap().plot(iX, iY);6651	if(! pPlot)6652	{6653		return false;6654	}66556656#if defined(MOD_GLOBAL_PARATROOPS_MOVEMENT)6657	// If dropping less than max range, let the unit make an attack6658	int iRange = getDropRange();6659	int iDist = plotDistance(plot()->getX(), plot()->getY(), iX, iY);6660	bool bCanAttack = MOD_GLOBAL_PARATROOPS_MOVEMENT && (iDist < iRange);6661	if (bCanAttack) {6662		// CUSTOMLOG("Paradrop - %i of %i is less than range --> can attack", iDist, iRange);6663		changeMoves(-GC.getMOVE_DENOMINATOR()); // This equates to a "set-up to range attack", which seems fair6664		// setMadeAttack(false); // Don't set to false, just in case someone modded in "attack then paralift out"6665	} else {6666		// CUSTOMLOG("Paradrop - %i of %i is max range --> cannot attack", iDist, iRange);6667#endif6668		changeMoves(-(GC.getMOVE_DENOMINATOR() / 2));6669		setMadeAttack(true);6670#if defined(MOD_GLOBAL_PARATROOPS_MOVEMENT)6671	}6672#endif667366746675	CvPlot* fromPlot = plot();6676	//JON: CHECK FOR INTERCEPTION HERE6677#if defined(MOD_GLOBAL_PARATROOPS_AA_DAMAGE)6678	if (MOD_GLOBAL_PARATROOPS_AA_DAMAGE) {6679		if (CvUnitCombat::ParadropIntercept(*this, *pPlot)) {6680			// Unit died during the drop6681			return false;6682		}6683	}6684#endif66856686	//play paradrop animation6687	if(pPlot->isActiveVisible(false))6688	{6689		auto_ptr<ICvUnit1> pDllUnit(new CvDllUnit(this));6690		gDLL->GameplayUnitParadrop(pDllUnit.get());6691	}6692	setXY(pPlot->getX(), pPlot->getY(), true, true, false);66936694#if defined(MOD_EVENTS_PARADROPS)6695	if (MOD_EVENTS_PARADROPS) {6696		GAMEEVENTINVOKE_HOOK(GAMEEVENT_ParadropAt, getOwner(), GetID(), fromPlot->getX(), fromPlot->getY(), pPlot->getX(), pPlot->getY());6697	} else {6698#endif6699	ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();6700	if (pkScriptSystem)6701	{6702		CvLuaArgsHandle args;6703		args->Push(((int)getOwner()));6704		args->Push(GetID());6705		args->Push(fromPlot->getX());6706		args->Push(fromPlot->getY());6707		args->Push(pPlot->getX());6708		args->Push(pPlot->getY());67096710		bool bResult;6711		LuaSupport::CallHook(pkScriptSystem, "ParadropAt", args.get(), bResult);6712	}6713#if defined(MOD_EVENTS_PARADROPS)6714	}6715#endif67166717	return true;6718}

Calls

Called by