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
- CustomMods::isPROMOTIONS_DEEP_WATER_EMBARKATION()
- CvGlobals::getPROMOTION_ALLWATER_EMBARKATION()
- CvGlobals::getPROMOTION_DEEPWATER_EMBARKATION()
- CvGlobals::getPROMOTION_DEFENSIVE_DEEPWATER_EMBARKATION()
- CvGlobals::getPROMOTION_EMBARKATION()
- CvPlayer::firstUnit(int *, bool)
- CvPlayer::GetEmbarkationPromotion() const
- CvPlayer::getTeam() const
- CvPlayer::isAlive() const
- CvPlayer::nextUnit(int *, bool)
- CvPlayerAI::getPlayer(PlayerTypes)
- CvTeam::canDefensiveEmbark() const
- CvTeam::GetID() const
- CvUnit::getDomainType() const
- CvUnit::isHasPromotion(PromotionTypes) const
- CvUnit::setHasPromotion(PromotionTypes, bool)