landsandboat/scripts/commands/addeffect.lua
2026-02-20 18:42:33 -07:00

94 lines
2.3 KiB
Lua

-----------------------------------
-- func: addeffect
-- desc: Adds the given effect to the given player.
-----------------------------------
---@type TCommand
local commandObj = {}
commandObj.cmdprops =
{
permission = 1,
parameters = 'ssssss'
}
local function error(player, msg)
player:printToPlayer(msg)
player:printToPlayer('!addeffect (player) <effect> (power) (duration) (subid) (subPower)')
end
commandObj.onTrigger = function(player, arg1, arg2, arg3, arg4, arg5, arg6)
local targ
local id
local power
local duration
local subId
local subPower
if arg1 == nil then
error(player, 'Invalid effect.')
return
else
targ = GetPlayerByName(arg1)
if targ == nil then
-- no valid target given. shift arguments by one.
targ = player
id = arg1
power = tonumber(arg2) or 1
duration = tonumber(arg3) or 60
subId = tonumber(arg4) or 0
subPower = tonumber(arg5) or 0
else
-- valid target found. assign arguments as usual
id = arg2
power = tonumber(arg3) or 1
duration = tonumber(arg4) or 60
subId = tonumber(arg5) or 0
subPower = tonumber(arg6) or 0
end
end
-- validate effect
if id == nil then
error(player, 'Invalid effect.')
return
else
id = tonumber(id) or xi.effect[string.upper(id)]
if id == nil then
error(player, 'Invalid player or effect.')
return
end
end
-- validate power
if power < 0 then
error(player, 'Invalid power.')
return
end
-- validate duration
if duration < 0 then
error(player, 'Invalid duration.')
return
end
-- validate subId
if subId < 0 then
error(player, 'Invalid subId.')
return
end
-- validate subPower
if subPower < 0 then
error(player, 'Invalid subPower.')
return
end
-- add effect
if targ:addStatusEffect(id, { power = power, duration = duration, origin = player, tick = 3, subType = subId, subPower = subPower }) then
targ:messagePublic(280, targ, id, id)
else
targ:messagePublic(283, targ, id)
end
end
return commandObj