Hooks
static bool BeforeCvPlot_getImprovementTypeNeededToImproveResource(CvPlot* self, PlayerTypes ePlayer, bool bTestPlotOwner, ImprovementTypes& result);static void AfterCvPlot_getImprovementTypeNeededToImproveResource(CvPlot* self, PlayerTypes ePlayer, bool bTestPlotOwner, ImprovementTypes& result);static ImprovementTypes ReplaceCvPlot_getImprovementTypeNeededToImproveResource(ImprovementTypes (*original)(CvPlot*, PlayerTypes, bool), CvPlot* self, PlayerTypes ePlayer, bool bTestPlotOwner);CivRegisterBefore<CivHooks::CvPlot_getImprovementTypeNeededToImproveResource>(host, &BeforeCvPlot_getImprovementTypeNeededToImproveResource);CivRegisterAfter<CivHooks::CvPlot_getImprovementTypeNeededToImproveResource>(host, &AfterCvPlot_getImprovementTypeNeededToImproveResource);CivRegisterReplace<CivHooks::CvPlot_getImprovementTypeNeededToImproveResource>(host, &ReplaceCvPlot_getImprovementTypeNeededToImproveResource);
Code
6587ImprovementTypes CvPlot::getImprovementTypeNeededToImproveResource(PlayerTypes ePlayer, bool bTestPlotOwner)6588{6589 CvAssertMsg(ePlayer == NO_PLAYER || ePlayer >= 0, "ePlayer is expected to be non-negative (invalid Index)");6590 CvAssertMsg(ePlayer == NO_PLAYER || ePlayer < MAX_MAJOR_CIVS, "ePlayer is expected to be within maximum bounds (invalid Index)");65916592 ResourceTypes eResource = NO_RESOURCE;6593 if(ePlayer != NO_PLAYER)6594 {6595 eResource = getResourceType(GET_PLAYER(ePlayer).getTeam());6596 }6597 else6598 {6599 eResource = getResourceType();6600 }66016602 if(eResource == NO_RESOURCE)6603 {6604 return NO_IMPROVEMENT;6605 }66066607 ImprovementTypes eImprovementNeeded = NO_IMPROVEMENT;66086609 // see if we can improve the resource6610 for(int iBuildIndex = 0; iBuildIndex < GC.getNumBuildInfos(); iBuildIndex++)6611 {6612 BuildTypes eBuild = (BuildTypes) iBuildIndex;6613 CvBuildInfo* pBuildInfo = GC.getBuildInfo(eBuild);6614 if(pBuildInfo == NULL)6615 continue;66166617 if(!canBuild(eBuild, ePlayer, false /*bTestVisible*/, bTestPlotOwner))6618 continue;66196620 if(ePlayer != NO_PLAYER)6621 {6622 if(!GET_PLAYER(ePlayer).canBuild(this, eBuild, false /*bTestEra*/, false /*bTestVisible*/, false /*bTestGold*/, bTestPlotOwner))6623 {6624 continue;6625 }6626 }66276628 ImprovementTypes eImprovement = (ImprovementTypes) pBuildInfo->getImprovement();6629 if(eImprovement == NO_IMPROVEMENT)6630 continue;66316632 CvImprovementEntry* pImprovementInfo = GC.getImprovementInfo(eImprovement);6633 if(pImprovementInfo == NULL)6634 continue;66356636 if(!pImprovementInfo->IsImprovementResourceTrade(eResource))6637 continue;66386639 if(pImprovementInfo->IsCreatedByGreatPerson())6640 continue;66416642 if(pImprovementInfo->IsWater() != isWater())6643 continue;66446645 eImprovementNeeded = eImprovement;6646 }66476648 return eImprovementNeeded;6649}