Bazaar developer reference

CvTeam::changeDefensiveEmbarkCount(int)

Defined in
CvTeam.cpp, line 3497
Class
CvTeam
Hook name
CivHooks::CvTeam_changeDefensiveEmbarkCount

Hooks

static bool BeforeCvTeam_changeDefensiveEmbarkCount(CvTeam* self, int iChange);static void AfterCvTeam_changeDefensiveEmbarkCount(CvTeam* self, int iChange);static void ReplaceCvTeam_changeDefensiveEmbarkCount(void (*original)(CvTeam*, int), CvTeam* self, int iChange);CivRegisterBefore<CivHooks::CvTeam_changeDefensiveEmbarkCount>(host, &BeforeCvTeam_changeDefensiveEmbarkCount);CivRegisterAfter<CivHooks::CvTeam_changeDefensiveEmbarkCount>(host, &AfterCvTeam_changeDefensiveEmbarkCount);CivRegisterReplace<CivHooks::CvTeam_changeDefensiveEmbarkCount>(host, &ReplaceCvTeam_changeDefensiveEmbarkCount);

Code

3497void CvTeam::changeDefensiveEmbarkCount(int iChange)3498{3499	if(iChange != 0)3500	{3501		m_iDefensiveEmbarkCount += iChange;35023503		if(canDefensiveEmbark())3504		{3505			int iLoop;3506			CvUnit* pLoopUnit;35073508			// Give embarkation promotion to all units who can currently embark3509			for(int iI = 0; iI < MAX_PLAYERS; iI++)3510			{3511				if(GET_PLAYER((PlayerTypes)iI).isAlive() && GET_PLAYER((PlayerTypes)iI).getTeam() == GetID())3512				{3513					PromotionTypes ePromotionDefensiveEmbarkation = GET_PLAYER((PlayerTypes)iI).GetEmbarkationPromotion();35143515					for(pLoopUnit = GET_PLAYER((PlayerTypes)iI).firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = GET_PLAYER((PlayerTypes)iI).nextUnit(&iLoop))3516					{3517						// Land Unit3518						if(pLoopUnit->getDomainType() == DOMAIN_LAND)3519						{3520							// Take away old promotion and give the new one instead3521							if(pLoopUnit->isHasPromotion((PromotionTypes)GC.getPROMOTION_EMBARKATION()))3522							{3523								pLoopUnit->setHasPromotion((PromotionTypes)GC.getPROMOTION_EMBARKATION(), false);3524								pLoopUnit->setHasPromotion(ePromotionDefensiveEmbarkation, true);3525							}3526							// Could be cleaner if add "allwater defensive promotion".  Luckily for now the only way you can get3527							// both is in the Polynesia scenario and this works for that3528							if(pLoopUnit->isHasPromotion((PromotionTypes)GC.getPROMOTION_ALLWATER_EMBARKATION()))3529							{3530								pLoopUnit->setHasPromotion((PromotionTypes)GC.getPROMOTION_ALLWATER_EMBARKATION(), false);3531								pLoopUnit->setHasPromotion(ePromotionDefensiveEmbarkation, true);3532							}3533							3534#if defined(MOD_PROMOTIONS_DEEP_WATER_EMBARKATION)3535							if (MOD_PROMOTIONS_DEEP_WATER_EMBARKATION && GC.getPROMOTION_DEEPWATER_EMBARKATION() != -1) {3536								// If the unit has Deep Water Embarkation, change it to Defensive Deep Water Embarkation3537								// This is very unlikely to happen in reality as it implies the player got the helicopter BEFORE the embarkation tech!!!3538								if(pLoopUnit->isHasPromotion((PromotionTypes)GC.getPROMOTION_DEEPWATER_EMBARKATION()))3539								{3540									pLoopUnit->setHasPromotion((PromotionTypes)GC.getPROMOTION_DEEPWATER_EMBARKATION(), false);3541									pLoopUnit->setHasPromotion((PromotionTypes)GC.getPROMOTION_DEFENSIVE_DEEPWATER_EMBARKATION(), true);3542								}3543							}3544#endif3545						}3546					}3547				}3548			}3549		}3550	}3551	CvAssert(getDefensiveEmbarkCount() >= 0);3552}

Calls

Called by