Hello, when there are too much buttons in a menu, sometimes, for some reasons, the menu freeze itself and we need to restart the script in order to unfreeze the controls on the menu. In my case, it happens on the players list.
local function setupMenu(group)
local menu = MenuV:CreateMenu(Config.translations["menuTitle"], Config.translations["menuSubtitle"], 'topleft', 255, 0, 0, 'size-125', 'default', 'menuv', 's1n_adminmenu_main', 'native')
local target
for _, subMenuType in ipairs(Sections) do
if subMenuType.disable then goto continue end
local subMenu = MenuV:CreateMenu(subMenuType.name, "", "topleft", 255, 0, 0, 'size-125', 'default', 'menuv', 'stl_adminmenu_' .. subMenuType.name, 'native')
menu:AddButton({ label = subMenuType.name, value = subMenu })
if subMenuType.name == Config.translations["sectionManagePlayers"] then
local targetMenu = MenuV:CreateMenu(Config.translations["menuActionsTitle"], Config.translations["menuActionsSubtitle"], "topleft", 255, 0, 0, 'size-125', 'default', 'menuv', 's1n_adminmenu_target', 'native')
for _, action in ipairs(subMenuType.functions) do
if not isNotBlacklist(action.blacklistID, group) and not action.disable then
if action.type == "checkbox" then
targetMenu:AddCheckbox({ label = action.name, value = "n", change = function(item)
ESX.TriggerServerCallback("s1n_adminmenu:logDiscord", function()
action.trigger(PlayerPedId(), target, item.Value)
end, action.name, target, item.Value)
end })
elseif action.type == "slider" then
targetMenu:AddSlider({ label = action.name, values = action.values, select = function(_, value)
ESX.TriggerServerCallback("s1n_adminmenu:logDiscord", function()
action.trigger(PlayerPedId(), target, value)
end, action.name, target, value)
end })
else
targetMenu:AddButton({ label = action.name, select = function()
ESX.TriggerServerCallback("s1n_adminmenu:logDiscord", function()
action.trigger(PlayerPedId(), target)
end, action.name, target)
end })
end
end
end
subMenu:On("open", function (menu)
ESX.TriggerServerCallback("s1n_adminmenu:getAllPlayers", function(players)
menu:ClearItems()
for k, player in pairs(players) do
menu:AddButton({ label = ('%s [ID: %s]'):format(player.name, k), value = targetMenu, select = function()
target = player
end })
end
end)
end)
else
for _, action in ipairs(subMenuType.functions) do
if not isNotBlacklist(action.blacklistID, group) and not action.disable then
if action.type == "checkbox" then
subMenu:AddCheckbox({ label = action.name, value = "n", change = function(item)
ESX.TriggerServerCallback("s1n_adminmenu:logDiscord", function()
action.trigger(PlayerPedId(), item.Value, PlayerId())
end, action.name, false, item.Value)
end })
elseif action.type == "slider" then
subMenu:AddSlider({ label = action.name, values = action.values, select = function(_, value)
ESX.TriggerServerCallback("s1n_adminmenu:logDiscord", function()
action.trigger(PlayerPedId(), value, PlayerId())
end, action.name, false, value)
end })
else
subMenu:AddButton({ label = action.name, select = function()
ESX.TriggerServerCallback("s1n_adminmenu:logDiscord", function()
action.trigger(PlayerPedId(), PlayerId())
end, action.name)
end })
end
end
end
end
::continue::
end
menu:OpenWith('keyboard', Config.keyOpenMenu)
end