Hooks
static bool BeforeCvBuilderTaskingAI_FindTurnsAway(CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, bool bLimit, int& result);static void AfterCvBuilderTaskingAI_FindTurnsAway(CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, bool bLimit, int& result);static int ReplaceCvBuilderTaskingAI_FindTurnsAway(int (*original)(CvBuilderTaskingAI*, CvUnit*, CvPlot*, bool), CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, bool bLimit);CivRegisterBefore<CivHooks::CvBuilderTaskingAI_FindTurnsAway>(host, &BeforeCvBuilderTaskingAI_FindTurnsAway);CivRegisterAfter<CivHooks::CvBuilderTaskingAI_FindTurnsAway>(host, &AfterCvBuilderTaskingAI_FindTurnsAway);CivRegisterReplace<CivHooks::CvBuilderTaskingAI_FindTurnsAway>(host, &ReplaceCvBuilderTaskingAI_FindTurnsAway);
Code
1862/// Determines if the builder can get to the plot. Returns -1 if no path can be found, otherwise it returns the # of turns to get there1863#if defined(MOD_UNITS_LOCAL_WORKERS) || defined(MOD_AI_SECONDARY_WORKERS)1864int CvBuilderTaskingAI::FindTurnsAway(CvUnit* pUnit, CvPlot* pPlot, bool bLimit)1865#else1866int CvBuilderTaskingAI::FindTurnsAway(CvUnit* pUnit, CvPlot* pPlot)1867#endif1868{1869 // If this plot is far away, we'll just use its distance as an estimate of the time to get there (to avoid hitting the path finder)1870 // We'll be sure to check later to make sure we have a real path before we execute this1871 if(pUnit->getDomainType() == DOMAIN_LAND && pUnit->plot()->area() != pPlot->area() && !pUnit->CanEverEmbark())1872 {1873 return -1;1874 }18751876 int iPlotDistance = plotDistance(pUnit->getX(), pUnit->getY(), pPlot->getX(), pPlot->getY());18771878#if defined(MOD_UNITS_LOCAL_WORKERS) || defined(MOD_AI_SECONDARY_WORKERS)1879 if (bLimit) {1880 int iLimit = iPlotDistance;1881 1882#if defined(MOD_UNITS_LOCAL_WORKERS)1883 if (MOD_UNITS_LOCAL_WORKERS && GET_PLAYER(pUnit->getOwner()).isHuman()) {1884 iLimit = (pUnit->getDomainType() == DOMAIN_SEA) ? gCustomMods.getOption("UNITS_LOCAL_WORKERS_WATERLIMIT", 10) : gCustomMods.getOption("UNITS_LOCAL_WORKERS_LANDLIMIT", 6);1885 }1886#endif18871888#if defined(MOD_AI_SECONDARY_WORKERS)1889 if (MOD_AI_SECONDARY_WORKERS && pUnit->IsCombatUnit()) {1890 iLimit = gCustomMods.getOption("UNITS_LOCAL_WORKERS_COMBATLIMIT", 3);1891 }1892#endif18931894 if (iPlotDistance > iLimit) {1895 return -1;1896 }1897 }1898#endif18991900#if 11901 // Always return the raw distance1902 return iPlotDistance;1903#else1904 if(iPlotDistance >= GC.getAI_HOMELAND_ESTIMATE_TURNS_DISTANCE())1905 {1906 return iPlotDistance;1907 }1908 else1909 {1910 int iResult = TurnsToReachTarget(pUnit, pPlot);1911 if(iResult == MAX_INT)1912 {1913 return -1;1914 }19151916 return iResult;1917 }1918#endif1919}