Hooks
static bool BeforeCvMinorCivAI_DoAddStartingResources(CvMinorCivAI* self, CvPlot* pCityPlot);static void AfterCvMinorCivAI_DoAddStartingResources(CvMinorCivAI* self, CvPlot* pCityPlot);static void ReplaceCvMinorCivAI_DoAddStartingResources(void (*original)(CvMinorCivAI*, CvPlot*), CvMinorCivAI* self, CvPlot* pCityPlot);CivRegisterBefore<CivHooks::CvMinorCivAI_DoAddStartingResources>(host, &BeforeCvMinorCivAI_DoAddStartingResources);CivRegisterAfter<CivHooks::CvMinorCivAI_DoAddStartingResources>(host, &AfterCvMinorCivAI_DoAddStartingResources);CivRegisterReplace<CivHooks::CvMinorCivAI_DoAddStartingResources>(host, &ReplaceCvMinorCivAI_DoAddStartingResources);
Code
3060/// We have a new city! Add any special starting resources we get.3061void CvMinorCivAI::DoAddStartingResources(CvPlot* pCityPlot)3062{3063 CvAssertMsg(pCityPlot != NULL, "City's plot should not be NULL. Please send Anton your save file and version.");3064 if (pCityPlot == NULL) return;30653066 MinorCivTraitTypes eTrait = GetTrait();30673068 // Mercantile3069 if (eTrait == MINOR_CIV_TRAIT_MERCANTILE)3070 {3071 bool bAddUniqueLuxury = true;3072 3073 // Only for our first city3074 if (GetPlayer()->getNumCities() > 1)3075 {3076 bAddUniqueLuxury = false;3077 }3078 3079 // Only if there isn't already a unique luxury on this plot3080 ResourceTypes ePlotResource = pCityPlot->getResourceType();3081 if (ePlotResource != NO_RESOURCE)3082 {3083 CvResourceInfo* pkPlotResourceInfo = GC.getResourceInfo(ePlotResource);3084 if (pkPlotResourceInfo && pkPlotResourceInfo->isOnlyMinorCivs())3085 {3086 bAddUniqueLuxury = false;3087 }3088 }30893090 // Pick and add a unique luxury3091 if (bAddUniqueLuxury)3092 {3093 FStaticVector< ResourceTypes, 64, true, c_eCiv5GameplayDLL > veUniqueLuxuries;3094 for(int iResourceLoop = 0; iResourceLoop < GC.getNumResourceInfos(); iResourceLoop++)3095 {3096 const ResourceTypes eResourceLoop = (ResourceTypes) iResourceLoop;3097 CvResourceInfo* pkResourceInfo = GC.getResourceInfo(eResourceLoop);3098 if(pkResourceInfo)3099 {3100 if(pkResourceInfo->isOnlyMinorCivs())3101 {3102 veUniqueLuxuries.push_back(eResourceLoop);3103 }3104 }3105 }31063107 pCityPlot->setResourceType(NO_RESOURCE, 0, true);3108 if (veUniqueLuxuries.size() > 0)3109 {3110 int iRoll = GC.getGame().getJonRandNum(veUniqueLuxuries.size(), "Rolling for Mercantile city-state special luxury"); // range = [0, size - 1]3111 int iQuantity = GC.getMINOR_CIV_MERCANTILE_RESOURCES_QUANTITY();3112 ResourceTypes eSpecialLuxury = veUniqueLuxuries[iRoll];31133114 pCityPlot->setResourceType(eSpecialLuxury, iQuantity, true);3115 }3116 }3117 }3118}