Bazaar developer reference

CvLuaPlayer::lGetRecommendedWorkerPlots(lua_State *)

Defined in
Lua/CvLuaPlayer.cpp, line 9225
Class
CvLuaPlayer
Hook name
CivHooks::CvLuaPlayer_lGetRecommendedWorkerPlots

Hooks

static bool BeforeCvLuaPlayer_lGetRecommendedWorkerPlots(lua_State* L, int& result);static void AfterCvLuaPlayer_lGetRecommendedWorkerPlots(lua_State* L, int& result);static int ReplaceCvLuaPlayer_lGetRecommendedWorkerPlots(int (*original)(lua_State*), lua_State* L);CivRegisterBefore<CivHooks::CvLuaPlayer_lGetRecommendedWorkerPlots>(host, &BeforeCvLuaPlayer_lGetRecommendedWorkerPlots);CivRegisterAfter<CivHooks::CvLuaPlayer_lGetRecommendedWorkerPlots>(host, &AfterCvLuaPlayer_lGetRecommendedWorkerPlots);CivRegisterReplace<CivHooks::CvLuaPlayer_lGetRecommendedWorkerPlots>(host, &ReplaceCvLuaPlayer_lGetRecommendedWorkerPlots);

Code

9225int CvLuaPlayer::lGetRecommendedWorkerPlots(lua_State* L)9226{9227	CvPlayerAI* pkPlayer = GetInstance(L);92289229	CvUnit* pWorkerUnit = NULL;92309231#if defined(MOD_API_LUA_EXTENSIONS) && defined(MOD_UNITS_LOCAL_WORKERS)9232	if (MOD_UNITS_LOCAL_WORKERS) {9233		//Get head selected unit (which will be a worker).9234		auto_ptr<ICvUnit1> pSelectedUnit(DLLUI->GetHeadSelectedUnit());9235		pWorkerUnit = GC.UnwrapUnitPointer(pSelectedUnit.get());9236	} else {9237#endif9238		//Get first selected worker.9239		CvEnumerator<ICvUnit1> selectedUnits(GC.GetEngineUserInterface()->GetSelectedUnits());9240		while(selectedUnits.MoveNext())9241		{9242			auto_ptr<ICvUnit1> pUnit(selectedUnits.GetCurrent());9243			if(pUnit.get() != NULL)9244			{9245				CvUnitEntry* pUnitEntry = GC.getUnitInfo(pUnit->GetUnitType());9246				if(pUnitEntry && pUnitEntry->GetWorkRate() > 0)9247				{9248					pWorkerUnit = GC.UnwrapUnitPointer(pUnit.get());9249					break;9250				}9251			}9252		}9253#if defined(MOD_API_LUA_EXTENSIONS) && defined(MOD_UNITS_LOCAL_WORKERS)9254	}9255#endif92569257	//Early out9258	if(pWorkerUnit == NULL)9259	{9260		return 0;9261	}92629263	const size_t cuiMaxDirectives = 3;9264	const size_t cuiDirectiveSize = 4;9265	BuilderDirective aDirective[ cuiDirectiveSize ];9266	bool bUseDirective[cuiDirectiveSize];9267	CvPlot* pDirectivePlots[cuiDirectiveSize] = {0};92689269#if defined(MOD_API_LUA_EXTENSIONS) && defined(MOD_UNITS_LOCAL_WORKERS)9270	if (MOD_UNITS_LOCAL_WORKERS) {9271		pkPlayer->GetBuilderTaskingAI()->EvaluateBuilder(pWorkerUnit, aDirective, cuiDirectiveSize, true, false, pkPlayer->isHuman());9272	} else {9273#endif9274		pkPlayer->GetBuilderTaskingAI()->EvaluateBuilder(pWorkerUnit, aDirective, cuiDirectiveSize, true);9275#if defined(MOD_API_LUA_EXTENSIONS) && defined(MOD_UNITS_LOCAL_WORKERS)9276	}9277#endif92789279	for(uint ui = 0; ui < cuiDirectiveSize; ui++)9280	{9281		bUseDirective[ui] = false;92829283		if(aDirective[ui].m_eDirective != BuilderDirective::NUM_DIRECTIVES)9284		{9285			CvPlot* pPlot = GC.getMap().plot(aDirective[ui].m_sX, aDirective[ui].m_sY);9286			if(pPlot != NULL)9287			{9288				// Don't recommend plots that are already improved9289				if(aDirective[ui].m_eDirective != BuilderDirective::BUILD_IMPROVEMENT || pPlot->getImprovementType() == NO_IMPROVEMENT)9290				{9291					pDirectivePlots[ui] = pPlot;9292					bUseDirective[ui] = true;9293				}9294			}9295		}9296	}92979298	lua_createtable(L, cuiMaxDirectives, 0);9299	int iPositionIndex = lua_gettop(L);9300	int i = 1;93019302	for(uint ui = 0; ui < cuiDirectiveSize && i < cuiMaxDirectives; ui++)9303	{9304		if(bUseDirective[ui] == true)9305		{9306			lua_createtable(L, 0, 2);9307			CvLuaPlot::Push(L, pDirectivePlots[ui]);9308			lua_setfield(L, -2, "plot");9309			lua_pushinteger(L, aDirective[ui].m_eBuild);9310			lua_setfield(L, -2, "buildType");93119312			lua_rawseti(L, iPositionIndex, i);9313			i++;9314		}9315	}93169317	return 1;9318}

Calls

Called by