Bazaar developer reference

CvUnit::canGift(bool, bool) const

Defined in
CvUnit.cpp, line 4040
Class
CvUnit
Hook name
CivHooks::CvUnit_canGift

Hooks

static bool BeforeCvUnit_canGift(const CvUnit* self, bool bTestVisible, bool bTestTransport, bool& result);static void AfterCvUnit_canGift(const CvUnit* self, bool bTestVisible, bool bTestTransport, bool& result);static bool ReplaceCvUnit_canGift(bool (*original)(const CvUnit*, bool, bool), const CvUnit* self, bool bTestVisible, bool bTestTransport);CivRegisterBefore<CivHooks::CvUnit_canGift>(host, &BeforeCvUnit_canGift);CivRegisterAfter<CivHooks::CvUnit_canGift>(host, &AfterCvUnit_canGift);CivRegisterReplace<CivHooks::CvUnit_canGift>(host, &ReplaceCvUnit_canGift);

Code

4040bool CvUnit::canGift(bool bTestVisible, bool bTestTransport) const4041{4042	VALIDATE_OBJECT4043	const CvPlot* pPlot = plot();4044	const CvUnit* pTransport = getTransportUnit();40454046	if(isDelayedDeath())4047		return false;40484049	if(!(pPlot->isOwned()))4050	{4051		return false;4052	}40534054	if(pPlot->getOwner() == getOwner())4055	{4056		return false;4057	}40584059	if(pPlot->isVisibleEnemyUnit(this))4060	{4061		return false;4062	}40634064	if(pPlot->isVisibleEnemyUnit(pPlot->getOwner()))4065	{4066		return false;4067	}40684069	if(!pPlot->isValidDomainForLocation(*this) && NULL == pTransport)4070	{4071		return false;4072	}40734074	// Minors4075	if(GET_PLAYER(pPlot->getOwner()).isMinorCiv())4076	{4077		// No settlers4078		if(isFound() || IsFoundAbroad())4079			return false;40804081		// No scouts4082		UnitClassTypes eScoutClass = (UnitClassTypes) GC.getInfoTypeForString("UNITCLASS_SCOUT", true);4083		if (eScoutClass != NO_UNITCLASS && eScoutClass == getUnitClassType())4084			return false;40854086		// No non-combat units4087		if(!IsCombatUnit())4088		{4089#if defined(MOD_BUGFIX_USE_GETTERS)4090			CvPlayer& kPlayer = GET_MY_PLAYER();4091#else4092			CvPlayer& kPlayer = GET_PLAYER(m_eOwner);4093#endif40944095			// Unless okay by trait4096			if(kPlayer.GetPlayerTraits()->GetGreatPersonGiftInfluence() == 0 || !IsGreatPerson())4097			{4098				return false;4099			}4100		}4101	}41024103	// No for religious units4104	if (getUnitInfo().IsSpreadReligion() || getUnitInfo().IsRemoveHeresy())4105	{4106			return false;4107	}41084109	if(bTestTransport)4110	{4111		if(pTransport && pTransport->getTeam() != pPlot->getTeam())4112		{4113			return false;4114		}4115	}41164117	if(!bTestVisible)4118	{4119		if(GET_TEAM(pPlot->getTeam()).isUnitClassMaxedOut(getUnitClassType(), GET_TEAM(pPlot->getTeam()).getUnitClassMaking(getUnitClassType())))4120		{4121			return false;4122		}41234124		if(GET_PLAYER(pPlot->getOwner()).isUnitClassMaxedOut(getUnitClassType(), GET_PLAYER(pPlot->getOwner()).getUnitClassMaking(getUnitClassType())))4125		{4126			return false;4127		}4128	}41294130	return !atWar(pPlot->getTeam(), getTeam());4131}

Calls

Called by