Bazaar developer reference

CvMapGenerator::pGetGameInitialItemsOverrides(lua_State *)

Defined in
CvMapGenerator.cpp, line 151
Class
CvMapGenerator
Hook name
CivHooks::CvMapGenerator_pGetGameInitialItemsOverrides

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}

Calls

Called by