landsandboat/scripts/commands/garrison.lua
claywar 55de6a5440
Fix issues reported in command scripts
Additional nil checks
2024-08-25 12:01:53 -04:00

71 lines
1.9 KiB
Lua

-----------------------------------
-- func: garrison <command> (player)
-- commands:
-- !garrison start (player) starts the garrison for the given player (or targetted one). This bypasses requirements like lockout
-- !garrison stop (player) stops the garrison (if any) currently running in the player's zone
-- !garrison win (player) win the garrison (if any) currently running in the player's zone
-----------------------------------
---@type TCommand
local commandObj = {}
commandObj.cmdprops =
{
permission = 1,
parameters = 'ss'
}
local function error(player, msg)
local usage = 'Usage: !garrison <command> (player)'
player:printToPlayer(msg .. '\n' .. usage)
end
commandObj.onTrigger = function(player, command, target)
-- Validate command
if command == nil then
error(player, 'Invalid command')
return
end
-- Obtain target
local targ = player:getCursorTarget()
if target ~= nil then
targ = GetPlayerByName(target)
if targ == nil then
error(player, string.format('Player named "%s" not found', target))
return
end
else -- targ == nil, select player
targ = player
end
-- Validate target
if targ == nil and target == nil then
error(player, 'Either provide a valid target name (in same zone) or target the desired player')
return
end
local zone = targ:getZone()
if not zone then
return
end
switch(command): caseof
{
['start'] = function()
xi.garrison.start(targ, targ)
targ:printToPlayer(string.format('%s garrison started', zone:getName()))
end,
['stop'] = function()
xi.garrison.stop(targ:getZone())
targ:printToPlayer(string.format('%s garrison stopped', zone:getName()))
end,
['win'] = function()
xi.garrison.win(targ:getZone())
end,
}
end
return commandObj