Hooks
static bool BeforeCvLuaPlayer_lGetGreatWorks(lua_State* L, int& result);static void AfterCvLuaPlayer_lGetGreatWorks(lua_State* L, int& result);static int ReplaceCvLuaPlayer_lGetGreatWorks(int (*original)(lua_State*), lua_State* L);CivRegisterBefore<CivHooks::CvLuaPlayer_lGetGreatWorks>(host, &BeforeCvLuaPlayer_lGetGreatWorks);CivRegisterAfter<CivHooks::CvLuaPlayer_lGetGreatWorks>(host, &AfterCvLuaPlayer_lGetGreatWorks);CivRegisterReplace<CivHooks::CvLuaPlayer_lGetGreatWorks>(host, &ReplaceCvLuaPlayer_lGetGreatWorks);
Code
4815int CvLuaPlayer::lGetGreatWorks(lua_State* L)4816{4817 CvPlayerAI* pkPlayer = GetInstance(L);4818 GreatWorkClass eGreatWorkClass = (GreatWorkClass)lua_tointeger(L, 2);48194820 lua_createtable(L, 0, 0);4821 int index = 1;48224823 int iCityLoop;4824 CvCity* pCity = NULL;4825 for (pCity = pkPlayer->firstCity(&iCityLoop); pCity != NULL; pCity = pkPlayer->nextCity(&iCityLoop))4826 {4827 for(int iBuildingClassLoop = 0; iBuildingClassLoop < GC.getNumBuildingClassInfos(); iBuildingClassLoop++)4828 {4829 CvCivilizationInfo& playerCivilizationInfo = pkPlayer->getCivilizationInfo();4830 BuildingTypes eBuilding = (BuildingTypes)playerCivilizationInfo.getCivilizationBuildings((BuildingClassTypes)iBuildingClassLoop);4831 if (eBuilding != NO_BUILDING)4832 {4833 CvBuildingEntry *pkBuilding = GC.getBuildingInfo(eBuilding);4834 if (pkBuilding)4835 {4836 if (pCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)4837 {4838 int iNumSlots = pkBuilding->GetGreatWorkCount();4839 for (int iI = 0; iI < iNumSlots; iI++)4840 {4841 int iGreatWorkIndex = pCity->GetCityBuildings()->GetBuildingGreatWork((BuildingClassTypes)iBuildingClassLoop, iI);4842 if (iGreatWorkIndex != -1)4843 {4844 if (GC.getGame().GetGameCulture()->m_CurrentGreatWorks[iGreatWorkIndex].m_eClassType == eGreatWorkClass)4845 {4846 lua_createtable(L, 0, 0);4847 const int t = lua_gettop(L);4848 lua_pushinteger(L, iGreatWorkIndex);4849 lua_setfield(L, t, "Index");4850 lua_pushinteger(L, GC.getGame().GetGameCulture()->m_CurrentGreatWorks[iGreatWorkIndex].m_ePlayer);4851 lua_setfield(L, t, "Creator");4852 int iEra = GC.getGame().GetGameCulture()->m_CurrentGreatWorks[iGreatWorkIndex].m_eEra;4853 lua_pushinteger(L, iEra);4854 lua_setfield(L, t, "Era");4855 lua_rawseti(L, -2, index++);4856 }4857 }4858 }4859 }4860 }4861 }4862 }4863 }48644865 return 1;4866}