//------------------------------------------------------------------------------ void CvDllNetMessageHandler::ResponseSwapUnits(PlayerTypes ePlayer, int iUnitID, MissionTypes eMission, int iData1, int iData2, int iFlags, bool bShift) { CvUnit::dispatchingNetMessage(true); CvPlayerAI& kPlayer = GET_PLAYER(ePlayer); CvUnit* pkUnit = kPlayer.getUnit(iUnitID); if(pkUnit != NULL) { // Get target plot CvMap& kMap = GC.getMap(); CvPlot* pkTargetPlot = kMap.plot(iData1, iData2); if(pkTargetPlot != NULL) { CvPlot* pkOriginationPlot = pkUnit->plot(); // Find unit to move out for(int iI = 0; iI < pkTargetPlot->getNumUnits(); iI++) { CvUnit* pkUnit2 = pkTargetPlot->getUnitByIndex(iI); if(pkUnit2 && pkUnit2->AreUnitsOfSameType(*pkUnit)) { // Start the swap pkUnit->PushMission(CvTypes::getMISSION_MOVE_TO(), iData1, iData2, CvUnit::MOVEFLAG_IGNORE_STACKING, bShift, true); // Move the other unit back out, again splitting if necessary pkUnit2->PushMission(CvTypes::getMISSION_MOVE_TO(), pkOriginationPlot->getX(), pkOriginationPlot->getY()); } } } } CvUnit::dispatchingNetMessage(false); }
//------------------------------------------------------------------------------ void CvPlayerAchievements::StartTurn() { #if !defined(NO_ACHIEVEMENTS) if(m_kPlayer.GetID() != GC.getGame().getActivePlayer()) return; if(m_eSwedenType == UNDEFINED_TYPE) { m_eSwedenType = (CivilizationTypes)GC.getInfoTypeForString("CIVILIZATION_SWEDEN", true); } if(m_eGreatGeneralType == UNDEFINED_TYPE) { m_eGreatGeneralType = (UnitTypes)GC.getInfoTypeForString("UNIT_GREAT_GENERAL", true); } if(m_eHakkapelittaType == UNDEFINED_TYPE) { m_eHakkapelittaType = (UnitTypes)GC.getInfoTypeForString("UNIT_SWEDISH_HAKKAPELIITTA", true); } if(m_eSwedenType != NO_CIVILIZATION && m_eGreatGeneralType != NO_UNIT && m_eHakkapelittaType != NO_UNIT) { if(m_kPlayer.getCivilizationType() == m_eSwedenType) { int iLoop = 0; for(const CvUnit* pUnit = m_kPlayer.firstUnit(&iLoop); pUnit != NULL; pUnit = m_kPlayer.nextUnit(&iLoop)) { if(pUnit->getUnitType() == m_eGreatGeneralType) { CvPlot* pPlot = pUnit->plot(); if(pPlot != NULL) { int iNumUnits = pPlot->getNumUnits(); for(int i = 0; i < iNumUnits; ++i) { CvUnit* pStackedUnit = pPlot->getUnitByIndex(i); if(pStackedUnit->getUnitType() == m_eHakkapelittaType) { gDLL->UnlockAchievement(ACHIEVEMENT_XP1_31); return; } } } } } } } #endif }
//------------------------------------------------------------------------------ void CvPlayerAchievements::KilledUnitWithUnit(CvUnit* pKillingUnit, CvUnit* pKilledUnit) { if(m_kPlayer.GetID() != GC.getGame().getActivePlayer()) return; if(m_eByzantinesType == UNDEFINED_TYPE) { m_eByzantinesType = (CivilizationTypes)GC.getInfoTypeForString("CIVILIZATION_BYZANTIUM", true); } if(m_eGreekType == UNDEFINED_TYPE) { m_eGreekType = (CivilizationTypes)GC.getInfoTypeForString("CIVILIZATION_GREECE", true); } if(m_eDromonType == UNDEFINED_TYPE) { m_eDromonType = (UnitTypes)GC.getInfoTypeForString("UNIT_BYZANTINE_DROMON", true); } if(m_eDromonType != NO_UNIT && m_eByzantinesType != NO_CIVILIZATION && m_eGreekType != NO_CIVILIZATION) { //* ACHIEVEMENT_XP1_33 - As Byzantines, sink 10 Greek ships with a Dromon if( pKillingUnit->getCivilizationType() == m_eByzantinesType && pKillingUnit->getUnitType() == m_eDromonType && pKilledUnit->getCivilizationType() == m_eGreekType && pKilledUnit->getDomainType() == DOMAIN_SEA) { m_iAchievement_XP1_33_Progress++; if(m_iAchievement_XP1_33_Progress >= 10) { gDLL->UnlockAchievement(ACHIEVEMENT_XP1_33); } } } bool bUsingXP1Scenario3 = gDLL->IsModActivated(CIV5_XP1_SCENARIO3_MODID); if(bUsingXP1Scenario3) { if(m_eSkyFortress == UNDEFINED_TYPE) { m_eSkyFortress = (UnitTypes)GC.getInfoTypeForString("UNIT_SKY_FORTRESS" , true); } if(pKillingUnit->getDomainType() == DOMAIN_AIR) { const int iX = pKillingUnit->getX(); const int iY = pKillingUnit->getY(); CvPlot* pkPlot = GC.getMap().plot(iX, iY); if(pkPlot != NULL) { const int iNumUnits = pkPlot->getNumUnits(); for(int i = 0; i < iNumUnits; ++i) { CvUnit* pUnit = pkPlot->getUnitByIndex(i); if(pUnit && pUnit->getUnitType() == m_eSkyFortress) { gDLL->UnlockAchievement(ACHIEVEMENT_XP1_46); } } } } } }