From 4a8bb56e73ffcfaa04db7c687882ef7c12bdbeaf Mon Sep 17 00:00:00 2001 From: Critical Date: Fri, 10 Jul 2026 18:19:08 -0600 Subject: [PATCH] [lua][module] Adds several beta command modules --- modules/phoenix/lua/beta_gm_commands.lua | 2 + modules/phoenix/lua/debuginfo.lua | 39 ++++++++++++++++ modules/phoenix/lua/restrict_job_changes.lua | 47 ++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 modules/phoenix/lua/debuginfo.lua create mode 100644 modules/phoenix/lua/restrict_job_changes.lua diff --git a/modules/phoenix/lua/beta_gm_commands.lua b/modules/phoenix/lua/beta_gm_commands.lua index 3a94ec84f4f..241f5b9ffd9 100644 --- a/modules/phoenix/lua/beta_gm_commands.lua +++ b/modules/phoenix/lua/beta_gm_commands.lua @@ -28,6 +28,8 @@ local commands = 'uptime', 'immortal', 'reset', + 'spawnmob', + 'gotoname' } for _, name in ipairs(commands) do diff --git a/modules/phoenix/lua/debuginfo.lua b/modules/phoenix/lua/debuginfo.lua new file mode 100644 index 00000000000..d6f38ab64f6 --- /dev/null +++ b/modules/phoenix/lua/debuginfo.lua @@ -0,0 +1,39 @@ +----------------------------------- +-- func: debuginfo +-- desc: Prints zone, position, level, and target information for testing. +----------------------------------- +---@type TCommand +local commandObj = {} + +commandObj.cmdprops = +{ + permission = 0, + parameters = '', +} + +commandObj.onTrigger = function(player) + local zone = player:getZone() + + if not zone then + player:printToPlayer('Error: Unable to retrieve zone information.', xi.msg.channel.SYSTEM_3) + return + end + + player:printToPlayer(string.format('Zone: %s (%i) Pos: X %.2f Y %.2f Z %.2f Rot %i', + zone:getName(), zone:getID(), player:getXPos(), player:getYPos(), player:getZPos(), player:getRotPos()), + xi.msg.channel.SYSTEM_3) + + player:printToPlayer(string.format('Level: %i Job: %i/%i HP: %i/%i MP: %i/%i', + player:getMainLvl(), player:getMainJob(), player:getSubJob(), + player:getHP(), player:getMaxHP(), player:getMP(), player:getMaxMP()), + xi.msg.channel.SYSTEM_3) + + local target = player:getCursorTarget() + if target ~= nil then + player:printToPlayer(string.format('Target: %s ID: %i Pos: X %.2f Y %.2f Z %.2f', + target:getName(), target:getID(), target:getXPos(), target:getYPos(), target:getZPos()), + xi.msg.channel.SYSTEM_3) + end +end + +return commandObj diff --git a/modules/phoenix/lua/restrict_job_changes.lua b/modules/phoenix/lua/restrict_job_changes.lua new file mode 100644 index 00000000000..b62c87ab14e --- /dev/null +++ b/modules/phoenix/lua/restrict_job_changes.lua @@ -0,0 +1,47 @@ +----------------------------------- +-- Prevents !changejob and !changesjob from being used to switch a player +-- into SCH, DNC, RUN, or GEO. +----------------------------------- +require('modules/module_utils') +----------------------------------- +local m = Module:new('restrict_job_changes') + +local blockedJobs = +{ + [xi.job.SCH] = true, + [xi.job.DNC] = true, + [xi.job.RUN] = true, + [xi.job.GEO] = true, +} + +local function isBlockedJob(jobId) + if jobId == nil then + return false + end + + local resolvedJobId = tonumber(jobId) or xi.job[string.upper(jobId)] + + return blockedJobs[resolvedJobId] == true +end + +m:addOverride('xi.commands.changejob.onTrigger', function(player, jobId, level, master) + if isBlockedJob(jobId) then + player:printToPlayer('That job is not allowed to be changed to.') + player:printToPlayer('!changejob (level) (master: 0/1)') + return + end + + super(player, jobId, level, master) +end) + +m:addOverride('xi.commands.changesjob.onTrigger', function(player, jobId, level) + if isBlockedJob(jobId) then + player:printToPlayer('That job is not allowed to be changed to.') + player:printToPlayer('!changesjob (level)') + return + end + + super(player, jobId, level) +end) + +return m