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
- CvPlot::headUnitNode()
- CvPlot::nextUnitNode(IDInfo *)
- CvUnit::canAcquirePromotionAny() const
- CvUnit::canGiveExperience(const CvPlot *) const
- CvUnit::changeExperienceTimes100(int, int, bool, bool, bool)
- CvUnit::getOwner() const
- CvUnit::getStackExperienceToGive(int) const
- CvUnit::plot() const
- CvUnit::testPromotionReady()
- getUnit(const IDInfo &)