Bazaar developer reference

CvUnit::giveExperience()

Defined in
CvUnit.cpp, line 10870
Class
CvUnit
Hook name
CivHooks::CvUnit_giveExperience

Hooks

static bool BeforeCvUnit_giveExperience(CvUnit* self, bool& result);static void AfterCvUnit_giveExperience(CvUnit* self, bool& result);static bool ReplaceCvUnit_giveExperience(bool (*original)(CvUnit*), CvUnit* self);CivRegisterBefore<CivHooks::CvUnit_giveExperience>(host, &BeforeCvUnit_giveExperience);CivRegisterAfter<CivHooks::CvUnit_giveExperience>(host, &AfterCvUnit_giveExperience);CivRegisterReplace<CivHooks::CvUnit_giveExperience>(host, &ReplaceCvUnit_giveExperience);

Code

10870bool CvUnit::giveExperience()10871{10872	VALIDATE_OBJECT10873	CvPlot* pPlot = plot();1087410875	if(pPlot)10876	{10877		int iNumUnits = canGiveExperience(pPlot);10878		if(iNumUnits > 0)10879		{10880			int iTotalExperience = getStackExperienceToGive(iNumUnits);1088110882			int iMinExperiencePerUnit = iTotalExperience / iNumUnits;10883			int iRemainder = iTotalExperience % iNumUnits;1088410885			IDInfo* pUnitNode = pPlot->headUnitNode();10886			int i = 0;10887			while(pUnitNode != NULL)10888			{10889				CvUnit* pUnit = ::getUnit(*pUnitNode);10890				pUnitNode = pPlot->nextUnitNode(pUnitNode);1089110892				if(pUnit && pUnit != this && pUnit->getOwner() == getOwner() && pUnit->canAcquirePromotionAny())10893				{10894#if defined(MOD_UNITS_XP_TIMES_100)10895					pUnit->changeExperienceTimes100(100 * (i < iRemainder ? iMinExperiencePerUnit + 1 : iMinExperiencePerUnit));10896#else10897					pUnit->changeExperience(i < iRemainder ? iMinExperiencePerUnit + 1 : iMinExperiencePerUnit);10898#endif10899					pUnit->testPromotionReady();10900				}1090110902				i++;10903			}1090410905			return true;10906		}10907	}1090810909	return false;10910}

Calls

Called by