Hooks
static bool BeforeCvLuaPlayer_lGetEspionageCityStatus(lua_State* L, int& result);static void AfterCvLuaPlayer_lGetEspionageCityStatus(lua_State* L, int& result);static int ReplaceCvLuaPlayer_lGetEspionageCityStatus(int (*original)(lua_State*), lua_State* L);CivRegisterBefore<CivHooks::CvLuaPlayer_lGetEspionageCityStatus>(host, &BeforeCvLuaPlayer_lGetEspionageCityStatus);CivRegisterAfter<CivHooks::CvLuaPlayer_lGetEspionageCityStatus>(host, &AfterCvLuaPlayer_lGetEspionageCityStatus);CivRegisterReplace<CivHooks::CvLuaPlayer_lGetEspionageCityStatus>(host, &ReplaceCvLuaPlayer_lGetEspionageCityStatus);
Code
11277int CvLuaPlayer::lGetEspionageCityStatus(lua_State* L)11278{11279 CvPlayerAI* pkThisPlayer = GetInstance(L);11280 CvPlayerEspionage* pkPlayerEspionage = pkThisPlayer->GetEspionage();1128111282 lua_createtable(L, 0, 0);11283 int index = 1;1128411285 // first pass to get the largest base potential available11286 int iLargestBasePotential = 0;11287 for(int i = 0; i < MAX_PLAYERS; ++i)11288 {11289 const PlayerTypes ePlayer(static_cast<PlayerTypes>(i));11290 CvPlayerAI& kPlayer = GET_PLAYER(ePlayer);1129111292 if(!kPlayer.isAlive() || kPlayer.isBarbarian())11293 {11294 continue;11295 }1129611297 int iLoop = 0;11298 for(CvCity* pCity = kPlayer.firstCity(&iLoop); pCity != NULL; pCity = kPlayer.nextCity(&iLoop))11299 {11300 if(pkPlayerEspionage->CanEverMoveSpyTo(pCity))11301 {11302 CvCityEspionage* pCityEspionage = pCity->GetCityEspionage();11303 int iPotential = 0;11304 if (pCity->getOwner() == pkThisPlayer->GetID())11305 {11306 iPotential = pkPlayerEspionage->CalcPerTurn(SPY_STATE_GATHERING_INTEL, pCity, -1);11307 }11308 else11309 {11310 iPotential = pCityEspionage->m_aiLastBasePotential[pkThisPlayer->GetID()];11311 }1131211313 if (iPotential > iLargestBasePotential)11314 {11315 iLargestBasePotential = iPotential;11316 }11317 }11318 }11319 }1132011321 // second pass to set the values11322 for(int i = 0; i < MAX_PLAYERS; ++i)11323 {11324 const PlayerTypes ePlayer(static_cast<PlayerTypes>(i));11325 CvPlayerAI& kPlayer = GET_PLAYER(ePlayer);1132611327 if(!kPlayer.isAlive() || kPlayer.isBarbarian())11328 {11329 continue;11330 }1133111332 int iLoop = 0;11333 for(CvCity* pCity = kPlayer.firstCity(&iLoop); pCity != NULL; pCity = kPlayer.nextCity(&iLoop))11334 {11335 if(pkPlayerEspionage->CanEverMoveSpyTo(pCity))11336 {11337 CvCityEspionage* pCityEspionage = pCity->GetCityEspionage();11338 lua_createtable(L, 0, 0);11339 const int t = lua_gettop(L);1134011341 lua_pushinteger(L, kPlayer.GetID());11342 lua_setfield(L, t, "PlayerID");1134311344 lua_pushinteger(L, pCity->GetID());11345 lua_setfield(L, t, "CityID");1134611347 lua_pushinteger(L, pCity->getX());11348 lua_setfield(L, t, "CityX");1134911350 lua_pushinteger(L, pCity->getY());11351 lua_setfield(L, t, "CityY");1135211353 lua_pushinteger(L, kPlayer.getCivilizationType());11354 lua_setfield(L, t, "CivilizationType");1135511356 lua_pushinteger(L, kPlayer.getTeam());11357 lua_setfield(L, t, "Team");1135811359 CvString strName = pCity->getNameKey();11360 lua_pushstring(L, strName.c_str());11361 lua_setfield(L, t, "Name");1136211363 lua_pushinteger(L, pCity->getPopulation());11364 lua_setfield(L, t, "Population");1136511366 if(pCity->getOwner() == pkThisPlayer->GetID())11367 {11368 int iRate = pkPlayerEspionage->CalcPerTurn(SPY_STATE_GATHERING_INTEL, pCity, -1);11369 lua_pushinteger(L, iRate);11370 }11371 else11372 {11373 lua_pushinteger(L, pCityEspionage->m_aiLastPotential[pkThisPlayer->GetID()]);11374 }11375 lua_setfield(L, t, "Potential");1137611377 if (pCity->getOwner() == pkThisPlayer->GetID())11378 {11379 lua_pushinteger(L, pkPlayerEspionage->CalcPerTurn(SPY_STATE_GATHERING_INTEL, pCity, -1));11380 }11381 else11382 {11383 lua_pushinteger(L, pCityEspionage->m_aiLastBasePotential[pkThisPlayer->GetID()]);11384 }11385 lua_setfield(L, t, "BasePotential");1138611387 lua_pushinteger(L, iLargestBasePotential);11388 lua_setfield(L, t, "LargestBasePotential");1138911390 lua_rawseti(L, -2, index++);11391 }11392 }11393 }1139411395 return 1;11396}