function widget:GetInfo() return { name = "Mex Defense (v1.0)", desc = "automates constructors to build basic defenses next to every mex built", author = "AutoWar", date = "2015", license = "GNU GPL, v2 or later", layer = 9999, enabled = true } end ----------------------------------------------------------------- local spGetUnitNearestEnemy = Spring.GetUnitNearestEnemy local spGetAllUnits = Spring.GetAllUnits --( ) -> nil | unitTable = { [1] = number unitID, ... } local spMarkerAddPoint = Spring.MarkerAddPoint local spEcho = Spring.Echo local spInsertUnitCmdDesc = Spring.InsertUnitCmdDesc local spGetUnitAllyTeam = Spring.GetUnitAllyTeam local spValidUnitID = Spring.ValidUnitID local spGetUnitPosition = Spring.GetUnitPosition local spGetUnitDefID = Spring.GetUnitDefID local spGiveOrderToUnit = Spring.GiveOrderToUnit local spGetUnitStates = Spring.GetUnitStates local spGiveOrderToUnitArray= Spring.GiveOrderToUnitArray local spGetUnitIsDead = Spring.GetUnitIsDead local spValidUnitID = Spring.ValidUnitID local spGetTeamUnits = Spring.GetTeamUnits --( number teamID ) -> nil | unitTable = { [1] = number unitID, etc... } local spGetMyTeamID = Spring.GetMyTeamID local spGetMyAllyTeamID = Spring.GetMyAllyTeamID local spIsUnitIcon = Spring.IsUnitIcon local myAllyID = Spring.GetMyAllyTeamID() local myTeamID = Spring.GetMyTeamID() local CMD_ATTACK = CMD.ATTACK local CMD_MOVE = CMD.MOVE local CMD_UNIT_SET_TARGET = 34923 local spGetAllyTeamList = Spring.GetAllyTeamList --( ) -> { [1] = number allyTeamID, etc... } local spGetTeamList = Spring.GetTeamList --( [number allyTeamID = -1] ) -> nil | { [1] = number teamID, etc... } local spGetUnitTeam = Spring.GetUnitTeam --( number unitID ) -> nil | number teamID local CMD_LOAD_UNITS = CMD.LOAD_UNITS -- expect 1 parameter in return (unitid) or 4 parameters in return (mappos+radius) local spGetUnitTransporter = Spring.GetUnitTransporter --( number unitID ) -> nil | number unitID local spGetUnitIsTransporting = Spring.GetUnitIsTransporting --( number unitID ) -> nil | { [1] = number unitID, etc... } local spGetUnitHealth = Spring.GetUnitHealth --( number unitID ) -> nil | number health, number maxHealth, number paralyzeDamage, number captureProgress, number buildProgress local spGetUnitIsStunned = Spring.GetUnitIsStunned --( number unitID ) -> nil | boolean stunned_or_inbuild, boolean stunned, boolean inbuild local spGetUnitRulesParam = Spring.GetUnitRulesParam --( number unitID, number index | string ruleName ) -> nil | number value | string value local CMD_OPT_SHIFT = CMD.OPT_SHIFT --If the unit is working down a shift queue, add it seemless into it local CMD_INSERT = CMD.INSERT local spGetCommandQueue = Spring.GetCommandQueue --( number unitID, number count = 0 ) -> nil | number commandQueueSize, ( number unitID [, number count = -1] ) -> nil | table commandQueueTable = {[1] = {("id"=number),("params"={ [1]=number, ...}),("options"={"coded"=number,"alt"=boolean,"ctrl"=boolean,"shift"=boolean,"right"=boolean,"internal"=boolean,"meta"=boolean}}), ...} local spGetSelectedUnits = Spring.GetSelectedUnits --( ) -> { [1] = unitID, ... } local spGetGroundHeight = Spring.GetGroundHeight --(x,z) ----------------------------------------------------------------- ----------------------------------------------------------------- local function Distance(x1,z1,x2,z2) return math.sqrt((x1-x2)^2 + (z1-z2)^2) end local function GetUnitName(unitID) if spValidUnitID(unitID)==true and spGetUnitDefID(unitID) then return UnitDefs[spGetUnitDefID(unitID)].name end end ----------------------------------------------------------------- function widget:UnitCreated(unitID, unitDefID, unitTeam, builderID) if unitDefID==UnitDefNames["cormex"].id then local x,y,z = spGetUnitPosition (unitID) --Spring.GiveOrderToUnit(builderID, -UnitDefNames["corllt"].id, {x+50,0,z}, {"shift"}) spGiveOrderToUnit(builderID, CMD.INSERT, {1, -UnitDefNames["corllt"].id, CMD.OPT_SHIFT, x+50,0,z}, {"alt"}) spGiveOrderToUnit(builderID, CMD.INSERT, {1, -UnitDefNames["corrad"].id, CMD.OPT_SHIFT, x-50,0,z}, {"alt"}) spGiveOrderToUnit(builderID, CMD.INSERT, {1, -UnitDefNames["armwin"].id, CMD.OPT_SHIFT, x-100,0,z}, {"alt"}) if spGetGroundHeight(x,z)<=0 then spGiveOrderToUnit(builderID, CMD.INSERT, {1, -UnitDefNames["turrettorp"].id, CMD.OPT_SHIFT, x+100,0,z}, {"alt"}) end end end --[[ Mex Defense automates the constructor to build an LLT , radar, wind gen, and on sea an urchin, next to every mex built ]]