Hooks
static bool BeforeCvLuaPlayer_lGetPotentialTradeUnitNewHomeCity(lua_State* L, int& result);static void AfterCvLuaPlayer_lGetPotentialTradeUnitNewHomeCity(lua_State* L, int& result);static int ReplaceCvLuaPlayer_lGetPotentialTradeUnitNewHomeCity(int (*original)(lua_State*), lua_State* L);CivRegisterBefore<CivHooks::CvLuaPlayer_lGetPotentialTradeUnitNewHomeCity>(host, &BeforeCvLuaPlayer_lGetPotentialTradeUnitNewHomeCity);CivRegisterAfter<CivHooks::CvLuaPlayer_lGetPotentialTradeUnitNewHomeCity>(host, &AfterCvLuaPlayer_lGetPotentialTradeUnitNewHomeCity);CivRegisterReplace<CivHooks::CvLuaPlayer_lGetPotentialTradeUnitNewHomeCity>(host, &ReplaceCvLuaPlayer_lGetPotentialTradeUnitNewHomeCity);
Code
3923int CvLuaPlayer::lGetPotentialTradeUnitNewHomeCity(lua_State* L)3924{3925 CvPlayerAI* pkPlayer = GetInstance(L);3926 CvUnit* pkUnit = CvLuaUnit::GetInstance(L, 2, false);3927 CvPlot* pkUnitPlot = pkUnit->plot();39283929 lua_createtable(L, 0, 0);3930 int index = 1;39313932 if (pkUnit->canChangeTradeUnitHomeCity(pkUnitPlot))3933 {3934 int iCityLoop;3935 CvCity* pLoopCity = NULL;3936 for(pLoopCity = pkPlayer->firstCity(&iCityLoop); pLoopCity != NULL; pLoopCity = pkPlayer->nextCity(&iCityLoop))3937 {3938 int iLoopCityX = pLoopCity->getX();3939 int iLoopCityY = pLoopCity->getY();39403941 // can't change to its own home city3942 if (pLoopCity->plot() == pkUnitPlot)3943 {3944 continue;3945 }39463947 if (pkUnit->canChangeTradeUnitHomeCityAt(pkUnitPlot, iLoopCityX, iLoopCityY))3948 {3949 lua_createtable(L, 0, 0);3950 const int t = lua_gettop(L);3951 lua_pushinteger(L, pLoopCity->getX());3952 lua_setfield(L, t, "X");3953 lua_pushinteger(L, pLoopCity->getY());3954 lua_setfield(L, t, "Y");3955 lua_rawseti(L, -2, index++);3956 }3957 }3958 }39593960 return 1;3961}