mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 03:25:23 +09:00
84 lines
2.9 KiB
Lua
84 lines
2.9 KiB
Lua
--[[-- Commands Module - Home
|
|
- Adds a command that allows setting and teleporting to your home position
|
|
@commands Home
|
|
]]
|
|
|
|
local Commands = require("modules.exp_legacy.expcore.commands") --- @dep expcore.commands
|
|
local Storage = require("modules/exp_util/storage")
|
|
require("modules.exp_legacy.config.expcore.command_general_parse")
|
|
|
|
local homes = {}
|
|
Storage.register(homes, function(tbl)
|
|
homes = tbl
|
|
end)
|
|
|
|
local function teleport(player, position)
|
|
local surface = player.physical_surface
|
|
local pos = surface.find_non_colliding_position("character", position, 32, 1)
|
|
if not position then return false end
|
|
if player.driving then player.driving = false end -- kicks a player out a vehicle if in one
|
|
player.teleport(pos, surface)
|
|
return true
|
|
end
|
|
|
|
local function floor_pos(position)
|
|
return {
|
|
x = math.floor(position.x),
|
|
y = math.floor(position.y),
|
|
}
|
|
end
|
|
|
|
--- Teleports you to your home location
|
|
-- @command home
|
|
Commands.new_command("home", { "expcom-home.description-home" }, "Teleports you to your home location")
|
|
:register(function(player)
|
|
local home = homes[player.index]
|
|
if not home or not home[1] then
|
|
return Commands.error{ "expcom-home.no-home" }
|
|
end
|
|
local rtn = floor_pos(player.physical_position)
|
|
teleport(player, home[1])
|
|
home[2] = rtn
|
|
Commands.print{ "expcom-home.return-set", rtn.x, rtn.y }
|
|
end)
|
|
|
|
--- Sets your home location to your current position
|
|
-- @command home-set
|
|
Commands.new_command("home-set", { "expcom-home.description-home-set" }, "Sets your home location to your current position")
|
|
:register(function(player)
|
|
local home = homes[player.index]
|
|
if not home then
|
|
home = {}
|
|
homes[player.index] = home
|
|
end
|
|
local pos = floor_pos(player.physical_position)
|
|
home[1] = pos
|
|
Commands.print{ "expcom-home.home-set", pos.x, pos.y }
|
|
end)
|
|
|
|
--- Returns your current home location
|
|
-- @command home-get
|
|
Commands.new_command("home-get", { "expcom-home.description-home-get" }, "Returns your current home location")
|
|
:register(function(player)
|
|
local home = homes[player.index]
|
|
if not home or not home[1] then
|
|
return Commands.error{ "expcom-home.no-home" }
|
|
end
|
|
local pos = home[1]
|
|
Commands.print{ "expcom-home.home-get", pos.x, pos.y }
|
|
end)
|
|
|
|
--- Teleports you to previous location
|
|
-- @command return
|
|
Commands.new_command("return", { "expcom-home.description-return" }, "Teleports you to previous location")
|
|
:register(function(player)
|
|
local home = homes[player.index]
|
|
if not home or not home[2] then
|
|
return Commands.error{ "expcom-home.no-return" }
|
|
end
|
|
local rtn = floor_pos(player.physical_position)
|
|
teleport(player, home[2])
|
|
home[2] = rtn
|
|
Commands.print{ "expcom-home.return-set", rtn.x, rtn.y }
|
|
end)
|