Hooks
static bool BeforeCvDllNetMessageHandler_ResponseSwapUnits(CvDllNetMessageHandler* self, PlayerTypes ePlayer, int iUnitID, MissionTypes eMission, int iData1, int iData2, int iFlags, bool bShift);static void AfterCvDllNetMessageHandler_ResponseSwapUnits(CvDllNetMessageHandler* self, PlayerTypes ePlayer, int iUnitID, MissionTypes eMission, int iData1, int iData2, int iFlags, bool bShift);static void ReplaceCvDllNetMessageHandler_ResponseSwapUnits(void (*original)(CvDllNetMessageHandler*, PlayerTypes, int, MissionTypes, int, int, int, bool), CvDllNetMessageHandler* self, PlayerTypes ePlayer, int iUnitID, MissionTypes eMission, int iData1, int iData2, int iFlags, bool bShift);// CivHooks.h gives this hook point no types, so nothing checks these hooks' parameters.host->RegisterHook(host->pluginIndex, CivHooks::CvDllNetMessageHandler_ResponseSwapUnits::ID, CIV_HOOK_BEFORE, (void*)&BeforeCvDllNetMessageHandler_ResponseSwapUnits);host->RegisterHook(host->pluginIndex, CivHooks::CvDllNetMessageHandler_ResponseSwapUnits::ID, CIV_HOOK_AFTER, (void*)&AfterCvDllNetMessageHandler_ResponseSwapUnits);host->RegisterHook(host->pluginIndex, CivHooks::CvDllNetMessageHandler_ResponseSwapUnits::ID, CIV_HOOK_REPLACE, (void*)&ReplaceCvDllNetMessageHandler_ResponseSwapUnits);
Code
967void CvDllNetMessageHandler::ResponseSwapUnits(PlayerTypes ePlayer, int iUnitID, MissionTypes eMission, int iData1, int iData2, int iFlags, bool bShift)968{969 CvUnit::dispatchingNetMessage(true);970971 CvPlayerAI& kPlayer = GET_PLAYER(ePlayer);972 CvUnit* pkUnit = kPlayer.getUnit(iUnitID);973974 if(pkUnit != NULL)975 {976 // Get target plot977 CvMap& kMap = GC.getMap();978 CvPlot* pkTargetPlot = kMap.plot(iData1, iData2);979980 if(pkTargetPlot != NULL)981 {982 CvPlot* pkOriginationPlot = pkUnit->plot();983984 // Find unit to move out985 for(int iI = 0; iI < pkTargetPlot->getNumUnits(); iI++)986 {987 CvUnit* pkUnit2 = pkTargetPlot->getUnitByIndex(iI);988989 if(pkUnit2 && pkUnit2->AreUnitsOfSameType(*pkUnit))990 {991 // Start the swap992 pkUnit->PushMission(CvTypes::getMISSION_MOVE_TO(), iData1, iData2, MOVE_IGNORE_STACKING, bShift, true);993994 // Move the other unit back out, again splitting if necessary995 pkUnit2->PushMission(CvTypes::getMISSION_MOVE_TO(), pkOriginationPlot->getX(), pkOriginationPlot->getY());996 }997 }998 }999 }1000 CvUnit::dispatchingNetMessage(false);1001}