From 1e72bac22319778de958b95d564ee739098844a0 Mon Sep 17 00:00:00 2001 From: ZioPao Date: Thu, 28 Mar 2024 23:04:26 +0100 Subject: [PATCH] Cleaned admin menu --- media/lua/client/TOC/Admin.lua | 53 ++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/media/lua/client/TOC/Admin.lua b/media/lua/client/TOC/Admin.lua index e03a628..825c60e 100644 --- a/media/lua/client/TOC/Admin.lua +++ b/media/lua/client/TOC/Admin.lua @@ -1,31 +1,52 @@ local CommandsData = require("TOC/CommandsData") +------------------- ---@param playerNum number ---@param context ISContextMenu ----@param items any -local function AddAdminTocOptions(playerNum, context, items) +---@param worldobjects table +local function AddAdminTocOptions(playerNum, context, worldobjects) if not isAdmin() then return end - -- This is a global var already handled in vanilla zomboid, we don't need to find the player once again - ---@cast clickedPlayer IsoPlayer - if clickedPlayer then + local players = {} + for _,v in ipairs(worldobjects) do - local clickedPlayerNum = clickedPlayer:getOnlineID() - - local option = context:addOption(getText("ContextMenu_Admin_TOC"), items, nil) - local subMenu = ISContextMenu:getNew(context) - context:addSubMenu(option, subMenu) - - subMenu:addOption(getText("ContextMenu_Admin_ResetTOC") .. " - " .. clickedPlayer:getUsername(), items, function() - sendClientCommand(CommandsData.modules.TOC_RELAY, CommandsData.server.Relay.RelayExecuteInitialization, {patientNum=clickedPlayerNum} ) - end) - - -- TODO add other options + for x=v:getSquare():getX()-1,v:getSquare():getX()+1 do + for y=v:getSquare():getY()-1,v:getSquare():getY()+1 do + local sq = getCell():getGridSquare(x,y,v:getSquare():getZ()); + if sq then + for z=0,sq:getMovingObjects():size()-1 do + local o = sq:getMovingObjects():get(z) + if instanceof(o, "IsoPlayer") then + + ---@cast o IsoPlayer + local oId = o:getOnlineID() + players[oId] = o + + end + end + end + end + end end + for _, pl in pairs(players) do + + ---@cast pl IsoPlayer + + local clickedPlayerNum = pl:getOnlineID() + + local option = context:addOption(getText("ContextMenu_Admin_TOC") .. " - " .. pl:getUsername(), nil, nil) + local subMenu = ISContextMenu:getNew(context) + context:addSubMenu(option, subMenu) + + subMenu:addOption(getText("ContextMenu_Admin_ResetTOC"), nil, function() + sendClientCommand(CommandsData.modules.TOC_RELAY, CommandsData.server.Relay.RelayExecuteInitialization, {patientNum=clickedPlayerNum} ) + end) + + end end Events.OnFillWorldObjectContextMenu.Add(AddAdminTocOptions) \ No newline at end of file