Hooks
static bool BeforeCvMapGenerator_pGetGameInitialItemsOverrides(lua_State* L, int& result);static void AfterCvMapGenerator_pGetGameInitialItemsOverrides(lua_State* L, int& result);static int ReplaceCvMapGenerator_pGetGameInitialItemsOverrides(int (*original)(lua_State*), lua_State* L);CivRegisterBefore<CivHooks::CvMapGenerator_pGetGameInitialItemsOverrides>(host, &BeforeCvMapGenerator_pGetGameInitialItemsOverrides);CivRegisterAfter<CivHooks::CvMapGenerator_pGetGameInitialItemsOverrides>(host, &AfterCvMapGenerator_pGetGameInitialItemsOverrides);CivRegisterReplace<CivHooks::CvMapGenerator_pGetGameInitialItemsOverrides>(host, &ReplaceCvMapGenerator_pGetGameInitialItemsOverrides);
Code
151int CvMapGenerator::pGetGameInitialItemsOverrides(lua_State* L)152{153 cvStopWatch stopWatch("CvMapGenerator - GetGameInitialItemsOverrides()");154 GetGameInitialItemsOverridesArgs* pArgs = (GetGameInitialItemsOverridesArgs*)lua_touserdata(L, 1);155156 pArgs->bSuccess = false;157 lua_getglobal(L, "GetGameInitialItemsOverrides");158 if(lua_isfunction(L, -1))159 {160 pArgs->pkScriptSystem->CallFunction(L, 0, 1);161 const int t = lua_gettop(L);162 if(lua_istable(L, t))163 {164165 //Initial Free Techs per Team166 lua_getfield(L, t, "GrantInitialFreeTechsPerTeam");167 if(lua_istable(L, -1))168 {169 lua_pushnil(L); /* first key */170 while(lua_next(L, -2) != 0)171 {172 if(lua_isnumber(L, -2) && lua_isboolean(L, -1))173 {174 const TeamTypes eTeam = static_cast<TeamTypes>(lua_tointeger(L, -2));175 const bool bOverride = lua_toboolean(L, -1);176 if(eTeam >= 0 && eTeam < MAX_TEAMS)177 {178 pArgs->pkOverrides->GrantInitialFreeTechsPerTeam[eTeam] = bOverride;179 }180 }181 lua_pop(L, 1);182 }183 }184 lua_pop(L, 1);185186 //Initial Gold per Player187 lua_getfield(L, t, "GrantInitialGoldPerPlayer");188 if(lua_istable(L, -1))189 {190 lua_pushnil(L); /* first key */191 while(lua_next(L, -2) != 0)192 {193 if(lua_isnumber(L, -2) && lua_isboolean(L, -1))194 {195 const PlayerTypes ePlayer = static_cast<PlayerTypes>(lua_tointeger(L, -2));196 const bool bOverride = lua_toboolean(L, -1);197 if(ePlayer >= 0 && ePlayer < MAX_PLAYERS)198 {199 pArgs->pkOverrides->GrantInitialGoldPerPlayer[ePlayer] = bOverride;200 }201 }202 lua_pop(L, 1);203 }204 }205 lua_pop(L, 1);206207 //Initial Culture per Player208 lua_getfield(L, t, "GrantInitialCulturePerPlayer");209 if(lua_istable(L, -1))210 {211 lua_pushnil(L); /* first key */212 while(lua_next(L, -2) != 0)213 {214 if(lua_isnumber(L, -2) && lua_isboolean(L, -1))215 {216 const PlayerTypes ePlayer = static_cast<PlayerTypes>(lua_tointeger(L, -2));217 const bool bOverride = lua_toboolean(L, -1);218 if(ePlayer >= 0 && ePlayer < MAX_PLAYERS)219 {220 pArgs->pkOverrides->GrantInitialCulturePerPlayer[ePlayer] = bOverride;221 }222 }223 lua_pop(L, 1);224 }225 }226 lua_pop(L, 1);227228 //Clear research queue per Player229 lua_getfield(L, t, "ClearResearchQueuePerPlayer");230 if(lua_istable(L, -1))231 {232 lua_pushnil(L); /* first key */233 while(lua_next(L, -2) != 0)234 {235 if(lua_isnumber(L, -2) && lua_isboolean(L, -1))236 {237 const PlayerTypes ePlayer = static_cast<PlayerTypes>(lua_tointeger(L, -2));238 const bool bOverride = lua_toboolean(L, -1);239 if(ePlayer >= 0 && ePlayer < MAX_PLAYERS)240 {241 pArgs->pkOverrides->ClearResearchQueuePerPlayer[ePlayer] = bOverride;242 }243 }244 lua_pop(L, 1);245 }246 }247 lua_pop(L, 1);248249 //Initial Units per Player250 lua_getfield(L, t, "GrantInitialUnitsPerPlayer");251 if(lua_istable(L, -1))252 {253 lua_pushnil(L); /* first key */254 while(lua_next(L, -2) != 0)255 {256 if(lua_isnumber(L, -2) && lua_isboolean(L, -1))257 {258 const PlayerTypes ePlayer = static_cast<PlayerTypes>(lua_tointeger(L, -2));259 const bool bOverride = lua_toboolean(L, -1);260 if(ePlayer >= 0 && ePlayer < MAX_PLAYERS)261 {262 pArgs->pkOverrides->GrantInitialUnitsPerPlayer[ePlayer] = bOverride;263 }264 }265 lua_pop(L, 1);266 }267 }268 lua_pop(L, 1);269 pArgs->bSuccess = true;270 }271 }272273 return 0;274}