Bazaar developer reference

CvPlayerAchievements::KilledUnitWithUnit(CvUnit *, CvUnit *)

Defined in
CvAchievementUnlocker.cpp, line 338
Class
CvPlayerAchievements
Hook name
CivHooks::CvPlayerAchievements_KilledUnitWithUnit

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}