play for me® widget!
Posted: 15 Jun 2013, 00:29
people always complained widgets could replace a player, and i'm going to demonstrate it's possible, the following widget reimplements the playing style of various players, callable with some chat commands
WARNING: this widget is completely untested, it won't necessarily work, use at your own risk
WARNING: this widget is completely untested, it won't necessarily work, use at your own risk
Code: Select all
function widget:GetInfo()
return {
name = "commands",
desc = "Adds useful commands for play",
author = "BD",
date = "-",
license = "WTFPL",
layer = 0,
enabled = true -- loaded by default?
}
end
--ctrl+a ctrl+d
function JeenodeCmd()
for _,unitID in ipairs(Spring.GetAllUnits()) do
Spring.GiveOrderToUnit(unitID, CMD.SELFD, {}, {})
end
end
--kamikaze all units to first found enemy com
function MurtagonCmd()
local coms = {[UnitDefNames.armcom.id]=true,[UnitDefNames.corcom.id]=true}
local enemycom
for _,unitID in ipairs(Spring.GetAllUnits()) do
if not Spring.IsUnitAllied(unitID) and coms[Spring.GetUnitDefID(unitID)] then
enemycom = unitID
break
end
end
if enemycom then
for _,unitID in ipairs(Spring.GetAllUnits()) do
Spring.GiveOrderToUnit(unitID, CMD.ATTACK, {enemycom}, {})
end
end
end
--spam whole map with fus
function FightlessCmd()
for _,unitDefID in ipairs({UnitDefNames.aafus.id,UnitDefNames.cafus.id,UnitDefNames.armfus.id,UnitDefNames.corfus.id}) do
for _,unitID in ipairs(Spring.GetAllUnits()) do
for x=0, Game.mapSizeX, UnitDefs[unitDefID].xsize do
for z=0, Game.mapSizeZ, UnitDefs[unitDefID].zsize do
Spring.GiveOrderToUnit(unitID, -unitDefID,{x,0,z}, {})
end
end
end
end
end
--all in guard to air lab with fighters on repeat
function FlorisCmd()
local airlabs = {UnitDefNames.armaap.id,UnitDefNames.armap.id,UnitDefNames.coraap.id,UnitDefNames.corap.id}
local airlab
for _,unitID in ipairs(Spring.GetAllUnits()) do
if Spring.IsUnitAllied(unitID) and airlabs[Spring.GetUnitDefID(unitID)] then
airlab = unitID
break
end
end
if airlab then
for _,unitID in ipairs(Spring.GetAllUnits()) do
Spring.GiveOrderToUnit(unitID, CMD.GUARD, {airlab}, {})
end
Spring.GiveOrderToUnit(airlab,-UnitDefNames.corveng.id, {}, {})
Spring.GiveOrderToUnit(airlab, -UnitDefNames.armfig.id, {}, {})
Spring.GiveOrderToUnit(airlab, -UnitDefNames.armhawk.id, {}, {})
Spring.GiveOrderToUnit(airlab, -UnitDefNames.corvamp.id, {}, {})
Spring.GiveOrderToUnit(airlab,CMD.REPEAT,{1},{})
end
end
--split map in half with HLT wall
function BobbelCmd()
for _,unitDefID in ipairs({UnitDefNames.corgaat.id,UnitDefNames.armhlt.id}) do
for _,unitID in ipairs(Spring.GetAllUnits()) do
for x=0, Game.mapSizeX, UnitDefs[unitDefID].xsize do
Spring.GiveOrderToUnit(unitID, -unitDefID,{x,0,Game.mapSizeZ/2}, {})
end
for z=0, Game.mapSizeZ, UnitDefs[unitDefID].zsize do
Spring.GiveOrderToUnit(unitID, -unitDefID,{Game.mapSizeX/2,0,z}, {})
end
end
end
end
--combomb first enemy com
function GasmaskCmd()
local coms = {[UnitDefNames.armcom.id]=true,[UnitDefNames.corcom.id]=true}
local enemycom
local allycom
for _,unitID in ipairs(Spring.GetAllUnits()) do
if not Spring.IsUnitAllied(unitID) and coms[Spring.GetUnitDefID(unitID)] then
enemycom = unitID
end
if Spring.IsUnitAllied(unitID) and coms[Spring.GetUnitDefID(unitID)] then
allycom = unitID
end
end
if enemycom and allycom then
Spring.GiveOrderToUnit(allycom, CMD.MANUALFIRE, {enemycom}, {})
end
end
--omg .D
function TarellinaCmd()
for i=1,10 do
local rand = math.rand()
if rand < 0.3 then
Spring.SendCommands({"say omg"})
elseif rand > 0.3 and rand < 0.6 then
Spring.SendCommands({"say .D"})
else
Spring.SendCommands({"say omg .D"})
end
end
end
--this command does absolutely nothing
function 7777zCmd()
end
--random commands to random units!
function AgilityCmd()
for _,unitID in ipairs(Spring.GetAllUnits()) do
Spring.GiveOrderToUnit(unitID, math.rand()*800-400, {math.rand()*Game.mapSizeZ,0,math.rand()*Game.mapSizeZ}, {})
end
end
function widget:Initialize()
widgetHandler:AddAction("jeenode", JeenodeCmd)
widgetHandler:AddAction("murtagon", MurtagonCmd)
widgetHandler:AddAction("fightless", FightlessCmd)
widgetHandler:AddAction("floris", FlorisCmd)
widgetHandler:AddAction("bobbel", BobbelCmd)
widgetHandler:AddAction("gasmask", GasmaskCmd)
widgetHandler:AddAction("tarellina", TarellinaCmd)
widgetHandler:AddAction("7777z", 7777zCmd)
widgetHandler:AddAction("agility", AgilityCmd)
end