37 lines
1.4 KiB
Lua
37 lines
1.4 KiB
Lua
|
-- teleport.lua
|
||
|
-- teleports a unit to a location
|
||
|
-- author Putnam
|
||
|
-- edited by expwnent
|
||
|
|
||
|
local function teleport(unit,pos)
|
||
|
local unitoccupancy = dfhack.maps.getTileBlock(unit.pos).occupancy[unit.pos.x%16][unit.pos.y%16]
|
||
|
unit.pos.x = pos.x
|
||
|
unit.pos.y = pos.y
|
||
|
unit.pos.z = pos.z
|
||
|
if not unit.flags1.on_ground then unitoccupancy.unit = false else unitoccupancy.unit_grounded = false end
|
||
|
end
|
||
|
|
||
|
local function getArgsTogether(args)
|
||
|
local settings={pos={}}
|
||
|
for k,v in ipairs(args) do
|
||
|
v=string.lower(v)
|
||
|
if v=="unit" then settings.unitID=tonumber(args[k+1]) end
|
||
|
if v=="x" then settings.pos['x']=tonumber(args[k+1]) end
|
||
|
if v=="y" then settings.pos['y']=tonumber(args[k+1]) end
|
||
|
if v=="z" then settings.pos['z']=tonumber(args[k+1]) end
|
||
|
if v=="showunitid" then print(dfhack.gui.getSelectedUnit(true).id) end
|
||
|
if v=="showpos" then printall(df.global.cursor) end
|
||
|
end
|
||
|
if not settings.pos.x or not settings.pos.y or not settings.pos.z then settings.pos=nil end
|
||
|
if not settings.unitID and not settings.pos.x then qerror("Needs a position, a unit ID or both, but not neither!") end
|
||
|
return settings
|
||
|
end
|
||
|
|
||
|
local args = {...}
|
||
|
local teleportSettings=getArgsTogether(args)
|
||
|
local unit = teleportSettings.unitID and df.unit.find(teleportSettings.unitID) or dfhack.gui.getSelectedUnit(true)
|
||
|
local pos = teleportSettings.pos and teleportSettings.pos or df.global.cursor
|
||
|
|
||
|
teleport(unit,pos)
|
||
|
|