Hooks
static bool BeforeCvBuilderTaskingAI_AddRemoveUselessRoadDirectives(CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, int iMoveTurnsAway);static void AfterCvBuilderTaskingAI_AddRemoveUselessRoadDirectives(CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, int iMoveTurnsAway);static void ReplaceCvBuilderTaskingAI_AddRemoveUselessRoadDirectives(void (*original)(CvBuilderTaskingAI*, CvUnit*, CvPlot*, int), CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, int iMoveTurnsAway);CivRegisterBefore<CivHooks::CvBuilderTaskingAI_AddRemoveUselessRoadDirectives>(host, &BeforeCvBuilderTaskingAI_AddRemoveUselessRoadDirectives);CivRegisterAfter<CivHooks::CvBuilderTaskingAI_AddRemoveUselessRoadDirectives>(host, &AfterCvBuilderTaskingAI_AddRemoveUselessRoadDirectives);CivRegisterReplace<CivHooks::CvBuilderTaskingAI_AddRemoveUselessRoadDirectives>(host, &ReplaceCvBuilderTaskingAI_AddRemoveUselessRoadDirectives);
Code
1622void CvBuilderTaskingAI::AddRemoveUselessRoadDirectives(CvUnit* pUnit, CvPlot* pPlot, int iMoveTurnsAway)1623{1624 // if it's not within a city radius1625 if(!pPlot->isWithinTeamCityRadius(pUnit->getTeam()))1626 {1627 return;1628 }16291630 // don't try to remove the route under the city1631 if(pPlot->isCity())1632 {1633 return;1634 }16351636 // nothing here to remove1637 if(pPlot->getRouteType() == NO_ROUTE)1638 {1639 return;1640 }16411642 // flagged this turn means this is a valid route plot1643 if(pPlot->GetBuilderAIScratchPadTurn() == GC.getGame().getGameTurn() && pPlot->GetBuilderAIScratchPadPlayer() == pUnit->getOwner())1644 {1645 return;1646 }16471648 BuildTypes eRemoveRouteBuild = NO_BUILD;1649 for(int iBuildIndex = 0; iBuildIndex < GC.getNumBuildInfos(); iBuildIndex++)1650 {1651 BuildTypes eBuild = (BuildTypes)iBuildIndex;1652 CvBuildInfo* pkBuild = GC.getBuildInfo(eBuild);1653 if(NULL != pkBuild && pkBuild->IsRemoveRoute() && pUnit->canBuild(pPlot, eBuild))1654 {1655 eRemoveRouteBuild = eBuild;1656 break;1657 }1658 }165916601661 if(eRemoveRouteBuild == NO_BUILD)1662 {1663 return;1664 }16651666 // evaluate if removing the road helps anything1667 ImprovementTypes eImprovement = pPlot->getImprovementType();1668 BuildTypes eBuild = NO_BUILD;1669 if(eImprovement != NO_IMPROVEMENT)1670 {1671 eBuild = GetBuildTypeFromImprovement(eImprovement);1672 }16731674 //int iWeight = GetWeightFromPlotYields(m_pPlayer, pPlot, eBuild, NULL, NO_YIELD, 100, NO_ROUTE) - GetWeightFromPlotYields(m_pPlayer, pPlot, eBuild, NULL, NO_YIELD, 10);1675 int iWeight = 0;1676 iWeight = CorrectWeight(iWeight);16771678 if(iWeight > 0)1679 {1680 BuilderDirective directive;1681 directive.m_eDirective = BuilderDirective::REMOVE_ROAD;1682 directive.m_eBuild = eRemoveRouteBuild;1683 directive.m_eResource = NO_RESOURCE;1684 directive.m_sX = pPlot->getX();1685 directive.m_sY = pPlot->getY();1686 directive.m_sMoveTurnsAway = iMoveTurnsAway;16871688 m_aDirectives.push_back(directive, iWeight);1689 }16901691}