Hooks
static bool BeforeCvCity_doProduction(CvCity* self, bool bAllowNoProduction);static void AfterCvCity_doProduction(CvCity* self, bool bAllowNoProduction);static void ReplaceCvCity_doProduction(void (*original)(CvCity*, bool), CvCity* self, bool bAllowNoProduction);CivRegisterBefore<CivHooks::CvCity_doProduction>(host, &BeforeCvCity_doProduction);CivRegisterAfter<CivHooks::CvCity_doProduction>(host, &AfterCvCity_doProduction);CivRegisterReplace<CivHooks::CvCity_doProduction>(host, &ReplaceCvCity_doProduction);
Code
14879void CvCity::doProduction(bool bAllowNoProduction)14880{14881 VALIDATE_OBJECT14882 AI_PERF_FORMAT("City-AI-perf.csv", ("CvCity::doProduction, Turn %03d, %s, %s", GC.getGame().getElapsedGameTurns(), GetPlayer()->getCivilizationShortDescription(), getName().c_str()) );1488314884 if(!isHuman() || isProductionAutomated())14885 {14886 if(!isProduction() || isProductionProcess() || AI_isChooseProductionDirty())14887 {14888 AI_chooseProduction(false /*bInterruptWonders*/);14889 }14890 }1489114892 if(!bAllowNoProduction && !isProduction())14893 {14894 return;14895 }1489614897 if(isProduction())14898 {1489914900 if(isProductionBuilding())14901 {14902 const OrderData* pOrderNode = headOrderQueueNode();14903 int iData1 = -1;14904 if(pOrderNode != NULL)14905 {14906 iData1 = pOrderNode->iData1;14907 }1490814909 const BuildingTypes eBuilding = static_cast<BuildingTypes>(iData1);14910 CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);14911 if(pkBuildingInfo)14912 {14913 if(isWorldWonderClass(pkBuildingInfo->GetBuildingClassInfo()))14914 {14915 if(m_pCityBuildings->GetBuildingProduction(eBuilding) == 0) // otherwise we are probably already showing this14916 {14917 auto_ptr<ICvCity1> pDllCity(new CvDllCity(this));14918 DLLUI->AddDeferredWonderCommand(WONDER_CREATED, pDllCity.get(), eBuilding, 0);14919 }14920 }14921 }14922 }1492314924 changeProductionTimes100(getCurrentProductionDifferenceTimes100(false, true));1492514926#if defined(MOD_PROCESS_STOCKPILE)14927 if (!(MOD_PROCESS_STOCKPILE && isProductionProcess()))14928#endif14929 setOverflowProduction(0);14930 setFeatureProduction(0);1493114932#if defined(MOD_PROCESS_STOCKPILE)14933 if(getProduction() >= getProductionNeeded())14934#else14935 if(getProduction() >= getProductionNeeded() && !isProductionProcess())14936#endif14937 {14938#if defined(MOD_PROCESS_STOCKPILE)14939 popOrder(0, !isProductionProcess(), true);14940#else14941 popOrder(0, true, true);14942#endif14943 }14944 }14945 else14946 {14947 changeOverflowProductionTimes100(getCurrentProductionDifferenceTimes100(false, false));14948 }14949}