Hooks
static bool BeforeCvCity_pushOrder(CvCity* self, OrderTypes eOrder, int iData1, int iData2, bool bSave, bool bPop, bool bAppend, bool bRush);static void AfterCvCity_pushOrder(CvCity* self, OrderTypes eOrder, int iData1, int iData2, bool bSave, bool bPop, bool bAppend, bool bRush);static void ReplaceCvCity_pushOrder(void (*original)(CvCity*, OrderTypes, int, int, bool, bool, bool, bool), CvCity* self, OrderTypes eOrder, int iData1, int iData2, bool bSave, bool bPop, bool bAppend, bool bRush);CivRegisterBefore<CivHooks::CvCity_pushOrder>(host, &BeforeCvCity_pushOrder);CivRegisterAfter<CivHooks::CvCity_pushOrder>(host, &AfterCvCity_pushOrder);CivRegisterReplace<CivHooks::CvCity_pushOrder>(host, &ReplaceCvCity_pushOrder);
Code
12831void CvCity::pushOrder(OrderTypes eOrder, int iData1, int iData2, bool bSave, bool bPop, bool bAppend, bool bRush)12832{12833 VALIDATE_OBJECT12834 OrderData order;12835 bool bValid;1283612837 if(bPop)12838 {12839 clearOrderQueue();12840 }1284112842 bValid = false;1284312844 switch(eOrder)12845 {12846 case ORDER_TRAIN:12847 if(canTrain((UnitTypes)iData1))12848 {12849 CvUnitEntry* pkUnitInfo = GC.getUnitInfo((UnitTypes)iData1);12850 if(pkUnitInfo)12851 {12852 if(iData2 == -1)12853 {12854 iData2 = pkUnitInfo->GetDefaultUnitAIType();12855 }1285612857 GET_PLAYER(getOwner()).changeUnitClassMaking(((UnitClassTypes)(pkUnitInfo->GetUnitClassType())), 1);1285812859 bValid = true;12860 }12861 }12862 break;1286312864 case ORDER_CONSTRUCT:12865 if(canConstruct((BuildingTypes)iData1))12866 {12867 CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo((BuildingTypes)iData1);12868 if(pkBuildingInfo)12869 {12870 GET_PLAYER(getOwner()).changeBuildingClassMaking(((BuildingClassTypes)(pkBuildingInfo->GetBuildingClassType())), 1);1287112872 bValid = true;12873 }12874 }12875 break;1287612877 case ORDER_CREATE:12878 if(canCreate((ProjectTypes)iData1))12879 {12880 GET_TEAM(getTeam()).changeProjectMaking(((ProjectTypes)iData1), 1);12881 GET_PLAYER(getOwner()).changeProjectMaking(((ProjectTypes)iData1), 1);1288212883 bValid = true;12884 }12885 break;1288612887 case ORDER_PREPARE:12888 if(canPrepare((SpecialistTypes)iData1))12889 {12890 bValid = true;12891 }12892 break;1289312894 case ORDER_MAINTAIN:12895 if(canMaintain((ProcessTypes)iData1))12896 {12897 bValid = true;12898 }12899 break;1290012901 default:12902 CvAssertMsg(false, "iOrder did not match a valid option");12903 break;12904 }1290512906 if(!bValid)12907 {12908 return;12909 }1291012911 order.eOrderType = eOrder;12912 order.iData1 = iData1;12913 order.iData2 = iData2;12914 order.bSave = bSave;12915 order.bRush = bRush;1291612917 if(bAppend)12918 {12919 m_orderQueue.insertAtEnd(&order);12920 }12921 else12922 {12923 stopHeadOrder();12924 m_orderQueue.insertAtBeginning(&order);12925 }1292612927 if(!bAppend || (getOrderQueueLength() == 1))12928 {12929 startHeadOrder();12930 }1293112932 if((getTeam() == GC.getGame().getActiveTeam()) || GC.getGame().isDebugMode())12933 {12934 if(isCitySelected())12935 {12936 DLLUI->setDirty(SelectionButtons_DIRTY_BIT, true);12937 DLLUI->setDirty(CityScreen_DIRTY_BIT, true);12938 DLLUI->setDirty(PlotListButtons_DIRTY_BIT, true);12939 }12940 }1294112942 DLLUI->setDirty(CityInfo_DIRTY_BIT, true);1294312944 auto_ptr<ICvCity1> pCity = GC.WrapCityPointer(this);12945 DLLUI->SetSpecificCityInfoDirty(pCity.get(), CITY_UPDATE_TYPE_PRODUCTION);12946}