Bazaar developer reference

CvCity::addProductionExperience(CvUnit *, bool)

Defined in
CvCity.cpp, line 4015
Class
CvCity
Hook name
CivHooks::CvCity_addProductionExperience

Hooks

static bool BeforeCvCity_addProductionExperience(CvCity* self, CvUnit* pUnit, bool bConscript);static void AfterCvCity_addProductionExperience(CvCity* self, CvUnit* pUnit, bool bConscript);static void ReplaceCvCity_addProductionExperience(void (*original)(CvCity*, CvUnit*, bool), CvCity* self, CvUnit* pUnit, bool bConscript);CivRegisterBefore<CivHooks::CvCity_addProductionExperience>(host, &BeforeCvCity_addProductionExperience);CivRegisterAfter<CivHooks::CvCity_addProductionExperience>(host, &AfterCvCity_addProductionExperience);CivRegisterReplace<CivHooks::CvCity_addProductionExperience>(host, &ReplaceCvCity_addProductionExperience);

Code

4015void CvCity::addProductionExperience(CvUnit* pUnit, bool bConscript)4016{4017	VALIDATE_OBJECT40184019	if(pUnit->canAcquirePromotionAny())4020	{4021#if defined(MOD_UNITS_XP_TIMES_100)4022		pUnit->changeExperienceTimes100(getProductionExperience(pUnit->getUnitType()) * 100 / ((bConscript) ? 2 : 1));4023#else4024		pUnit->changeExperience(getProductionExperience(pUnit->getUnitType()) / ((bConscript) ? 2 : 1));4025#endif4026		4027#if !defined(NO_ACHIEVEMENTS)4028		// XP2 Achievement4029		if (getOwner() != NO_PLAYER)4030		{4031			CvPlayer& kOwner = GET_PLAYER(getOwner());4032			if (!GC.getGame().isGameMultiPlayer() && kOwner.isHuman() && kOwner.isLocalPlayer())4033			{4034				// This unit begins with a promotion from XP, and part of that XP came from filled Great Work slots4035#if defined(MOD_UNITS_XP_TIMES_100)4036				if ((pUnit->getExperienceTimes100() / 100) >= pUnit->experienceNeeded() && getDomainFreeExperienceFromGreatWorks((DomainTypes)pUnit->getUnitInfo().GetDomainType()) > 0)4037#else4038				if (pUnit->getExperience() >= pUnit->experienceNeeded() && getDomainFreeExperienceFromGreatWorks((DomainTypes)pUnit->getUnitInfo().GetDomainType()) > 0)4039#endif4040				{4041					// We have a Royal Library4042					BuildingTypes eRoyalLibrary = (BuildingTypes) GC.getInfoTypeForString("BUILDING_ROYAL_LIBRARY", true);4043					if (eRoyalLibrary != NO_BUILDING && GetCityBuildings()->GetNumBuilding(eRoyalLibrary) > 0)4044					{4045						gDLL->UnlockAchievement(ACHIEVEMENT_XP2_19);4046					}4047				}4048			}4049		}4050#endif4051	}40524053	for(int iI = 0; iI < GC.getNumPromotionInfos(); iI++)4054	{4055		const PromotionTypes ePromotion = static_cast<PromotionTypes>(iI);4056		CvPromotionEntry* pkPromotionInfo = GC.getPromotionInfo(ePromotion);4057		if(pkPromotionInfo)4058		{4059			if(isFreePromotion(ePromotion))4060			{4061				if((pUnit->getUnitCombatType() != NO_UNITCOMBAT) && pkPromotionInfo->GetUnitCombatClass(pUnit->getUnitCombatType()))4062				{4063					pUnit->setHasPromotion(ePromotion, true);4064				}4065			}4066		}4067	}40684069	pUnit->testPromotionReady();4070}

Calls

Called by