landsandboat/scripts/commands/promote.lua

104 lines
3.5 KiB
Lua

-----------------------------------
-- func: promote
-- desc: Promotes the player to a new GM level.
-----------------------------------
---@type TCommand
local commandObj = {}
commandObj.cmdprops =
{
permission = 1,
parameters = 'si'
}
local function error(player, msg)
player:printToPlayer(msg)
player:printToPlayer('!promote <player> <level>')
end
commandObj.onTrigger = function(player, target, level)
-- determine maximum level player can promote to
local maxLevel = player:getGMLevel() - 1
if maxLevel < 1 then
maxLevel = 0
end
-- validate target
local targ
if target == nil then
error(player, 'You must provide a player name.')
return
else
targ = GetPlayerByName(target)
if targ == nil then
error(player, string.format('Player named "%s" not found!', target))
return
end
end
-- catch players trying to change level of equal or higher tiered GMs.
if targ:getGMLevel() >= player:getGMLevel() then
printf('%s attempting to adjust same or higher tier GM %s.', player:getName(), targ:getName())
targ:printToPlayer(string.format('%s attempted to adjust your GM rank.', player:getName()))
error(player, 'You can not use this command on same or higher tiered GMs.')
return
end
-- validate level
if level == nil or level < 0 or level > maxLevel then
error(player, string.format('Invalid level. Must be 0 to %i.', maxLevel))
return
end
-- change target gm level
targ:setGMLevel(level)
-- if target is being set to non-GM, remove active GM priveleges, which they will no longer be able to remove themselves
if level == 0 then
-- remove god mode
if targ:getCharVar('GodMode') == 1 then
targ:setCharVar('GodMode', 0)
targ:delStatusEffect(xi.effect.MAX_HP_BOOST)
targ:delStatusEffect(xi.effect.MAX_MP_BOOST)
targ:delStatusEffect(xi.effect.MIGHTY_STRIKES)
targ:delStatusEffect(xi.effect.HUNDRED_FISTS)
targ:delStatusEffect(xi.effect.CHAINSPELL)
targ:delStatusEffect(xi.effect.PERFECT_DODGE)
targ:delStatusEffect(xi.effect.INVINCIBLE)
targ:delStatusEffect(xi.effect.ELEMENTAL_SFORZO)
targ:delStatusEffect(xi.effect.MANAFONT)
targ:delStatusEffect(xi.effect.REGAIN)
targ:delStatusEffect(xi.effect.REFRESH)
targ:delStatusEffect(xi.effect.REGEN)
targ:delMod(xi.mod.RACC, 2500)
targ:delMod(xi.mod.RATT, 2500)
targ:delMod(xi.mod.ACC, 2500)
targ:delMod(xi.mod.ATT, 2500)
targ:delMod(xi.mod.MATT, 2500)
targ:delMod(xi.mod.MACC, 2500)
targ:delMod(xi.mod.RDEF, 2500)
targ:delMod(xi.mod.DEF, 2500)
targ:delMod(xi.mod.MDEF, 2500)
end
-- See https://github.com/atom0s/XiPackets/tree/main/world/server/0x0037, flags0_t GmLevel
player:setVisibleGMLevel(0)
-- remove hidden
if targ:getCharVar('GMHidden') == 1 then
targ:setCharVar('GMHidden', 0)
targ:setGMHidden(false)
end
-- remove costume
targ:setCostume(0)
-- remove wallhack
targ:setWallhack(false)
end
player:printToPlayer(string.format('%s set to tier %i.', targ:getName(), level))
targ:printToPlayer(string.format('You have been set to tier %i.', level))
end
return commandObj