Hooks
static bool BeforeCvPlayerAchievements_KilledUnitWithUnit(CvPlayerAchievements* self, CvUnit* pKillingUnit, CvUnit* pKilledUnit);static void AfterCvPlayerAchievements_KilledUnitWithUnit(CvPlayerAchievements* self, CvUnit* pKillingUnit, CvUnit* pKilledUnit);static void ReplaceCvPlayerAchievements_KilledUnitWithUnit(void (*original)(CvPlayerAchievements*, CvUnit*, CvUnit*), CvPlayerAchievements* self, CvUnit* pKillingUnit, CvUnit* pKilledUnit);CivRegisterBefore<CivHooks::CvPlayerAchievements_KilledUnitWithUnit>(host, &BeforeCvPlayerAchievements_KilledUnitWithUnit);CivRegisterAfter<CivHooks::CvPlayerAchievements_KilledUnitWithUnit>(host, &AfterCvPlayerAchievements_KilledUnitWithUnit);CivRegisterReplace<CivHooks::CvPlayerAchievements_KilledUnitWithUnit>(host, &ReplaceCvPlayerAchievements_KilledUnitWithUnit);
Code
338void CvPlayerAchievements::KilledUnitWithUnit(CvUnit* pKillingUnit, CvUnit* pKilledUnit)339{340#if !defined(NO_ACHIEVEMENTS)341 if(m_kPlayer.GetID() != GC.getGame().getActivePlayer())342 return;343344 if(m_eByzantinesType == UNDEFINED_TYPE)345 {346 m_eByzantinesType = (CivilizationTypes)GC.getInfoTypeForString("CIVILIZATION_BYZANTIUM", true);347 }348349 if(m_eGreekType == UNDEFINED_TYPE)350 {351 m_eGreekType = (CivilizationTypes)GC.getInfoTypeForString("CIVILIZATION_GREECE", true);352 }353354 if(m_eDromonType == UNDEFINED_TYPE)355 {356 m_eDromonType = (UnitTypes)GC.getInfoTypeForString("UNIT_BYZANTINE_DROMON", true);357 }358359 if(m_eDromonType != NO_UNIT && m_eByzantinesType != NO_CIVILIZATION && m_eGreekType != NO_CIVILIZATION)360 {361 //* ACHIEVEMENT_XP1_33 - As Byzantines, sink 10 Greek ships with a Dromon362 if( pKillingUnit->getCivilizationType() == m_eByzantinesType && 363 pKillingUnit->getUnitType() == m_eDromonType &&364 pKilledUnit->getCivilizationType() == m_eGreekType &&365 pKilledUnit->getDomainType() == DOMAIN_SEA)366 {367 m_iAchievement_XP1_33_Progress++;368 if(m_iAchievement_XP1_33_Progress >= 10)369 {370 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_33);371 }372 }373 }374375 bool bUsingXP1Scenario3 = gDLL->IsModActivated(CIV5_XP1_SCENARIO3_MODID);376 if(bUsingXP1Scenario3)377 {378 if(m_eSkyFortress == UNDEFINED_TYPE)379 {380 m_eSkyFortress = (UnitTypes)GC.getInfoTypeForString("UNIT_SKY_FORTRESS" , true);381 }382383 if(pKillingUnit->getDomainType() == DOMAIN_AIR)384 {385 const int iX = pKillingUnit->getX();386 const int iY = pKillingUnit->getY();387388 CvPlot* pkPlot = GC.getMap().plot(iX, iY);389 if(pkPlot != NULL)390 {391 const int iNumUnits = pkPlot->getNumUnits();392 for(int i = 0; i < iNumUnits; ++i)393 {394 CvUnit* pUnit = pkPlot->getUnitByIndex(i);395 if(pUnit && pUnit->getUnitType() == m_eSkyFortress)396 {397 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_46);398 }399 }400 }401 }402 }403#endif404}