1
0
Fork 0
forked from Simnation/Main
Main/resources/[defaultmaps]/prompt_sandy_cityhall/ipls_command.lua
2025-08-05 16:33:46 +02:00

260 lines
No EOL
7.9 KiB
Lua

local InteriorId = GetInteriorAtCoords(1753.6223, 3804.6450, 35.4474)
-- Texto de los IPLS
local IPL_LABELS = {
["p_prompt_sandy_cityhall_fences_backopened"] = "Back Fences (Open)",
["p_prompt_sandy_cityhall_backtables"] = "Back Tables",
["p_prompt_sandy_cityhall_tables"] = "Tables",
["p_prompt_sandy_cityhall_coffin_closed"] = "Coffin (Closed)",
["p_prompt_sandy_cityhall_coffin_opened"] = "Coffin (Open)",
["p_prompt_sandy_cityhall_fences_backclosed"] = "Back Fences (Closed)",
["p_prompt_sandy_cityhall_funeral_chairs"] = "Funeral Chairs",
["p_prompt_sandy_cityhall_funeral_picture"] = "Funeral Picture",
["p_prompt_sandy_cityhall_leaves"] = "Leaves",
["p_prompt_sandy_cityhall_wedding_chairs"] = "Wedding Chairs",
["p_prompt_sandy_cityhall_wedding_spotlight"] = "Wedding Spotlight",
["p_prompt_sandy_cityhall_wedding_venue"] = "Wedding Venue",
}
-- Configuraciones predefinidas para eventos
local PRECONFIGURACIONES = {
["Dinner (Opened Back)"] = {
"p_prompt_sandy_cityhall_backtables",
"p_prompt_sandy_cityhall_tables",
"p_prompt_sandy_cityhall_fences_backopened"
},
["Dinner (Closed Back)"] = {
"p_prompt_sandy_cityhall_tables",
"p_prompt_sandy_cityhall_fences_backclosed"
},
["Wedding Ceremony"] = {
"p_prompt_sandy_cityhall_fences_backclosed",
"p_prompt_sandy_cityhall_wedding_chairs",
"p_prompt_sandy_cityhall_wedding_spotlight",
"p_prompt_sandy_cityhall_wedding_venue",
"p_prompt_sandy_cityhall_leaves"
},
["Funeral"] = {
"p_prompt_sandy_cityhall_fences_backclosed",
"p_prompt_sandy_cityhall_funeral_chairs",
"p_prompt_sandy_cityhall_funeral_picture",
"p_prompt_sandy_cityhall_leaves",
"p_prompt_sandy_cityhall_coffin_closed"
},
}
-- Textos de los Entity Sets
local ENTITY_SET_LABELS = {
["static_elevator"] = "Static Elevator",
["conference_chairs"] = "Conference Chairs",
["conference_meeting_table"] = "Meeting Table",
["eventroom_voting"] = "Voting Room"
}
-- Declaración anticipada de las funciones de menú
local showMainMenu, showManualMenu, showPreconfiguradoMenu, showEntitySetsMenu
-- Función para alternar (activar/desactivar) un IPL
local function toggleIPL(ipl, menuCallback)
local currentState = IsIplActive(ipl)
TriggerServerEvent('ipls:sync:toggleIPL', ipl, not currentState)
-- Pequeño delay para dar tiempo a que se aplique el cambio
SetTimeout(100, function()
menuCallback()
end)
end
-- Función para alternar (activar/desactivar) un Entity Set
local function toggleEntitySet(entitySet)
local currentState = IsInteriorEntitySetActive(InteriorId, entitySet)
TriggerServerEvent('ipls:sync:toggleEntitySet', entitySet, not currentState)
-- Pequeño delay para dar tiempo a que se aplique el cambio
SetTimeout(100, function()
showEntitySetsMenu()
end)
end
-- Función para retornar un icono basado en el estado activo/inactivo
local function getIcon(state)
return state and 'fas fa-check' or 'fas fa-times'
end
-- Función para verificar si una configuración está completamente activa
local function isConfigurationActive(listaIPLS)
for _, ipl in ipairs(listaIPLS) do
if not IsIplActive(ipl) then
return false
end
end
return true
end
-- Menú de activación manual de cada IPL
showManualMenu = function()
local menuOptions = {}
for ipl, label in pairs(IPL_LABELS) do
local isActive = IsIplActive(ipl)
table.insert(menuOptions, {
title = label,
icon = getIcon(isActive),
description = isActive and "Enabled" or "Disabled",
onSelect = function()
toggleIPL(ipl, showManualMenu)
end
})
end
lib.registerContext({
id = 'ipls_manual_menu',
title = 'IPLS - Manual',
menu = 'ipls_main_menu',
onBack = function()
showMainMenu()
end,
options = menuOptions,
})
lib.showContext('ipls_manual_menu')
end
-- Menú de Entity Sets
showEntitySetsMenu = function()
local menuOptions = {}
for entitySet, label in pairs(ENTITY_SET_LABELS) do
local isActive = IsInteriorEntitySetActive(InteriorId, entitySet)
table.insert(menuOptions, {
title = label,
icon = getIcon(isActive),
description = isActive and "Enabled" or "Disabled",
onSelect = function()
toggleEntitySet(entitySet)
end
})
end
lib.registerContext({
id = 'entity_sets_menu',
title = 'Entity Sets',
menu = 'ipls_main_menu',
onBack = function()
showMainMenu()
end,
options = menuOptions,
})
lib.showContext('entity_sets_menu')
end
-- Menú de configuraciones preestablecidas
showPreconfiguradoMenu = function()
local menuOptions = {}
for grupo, listaIPLS in pairs(PRECONFIGURACIONES) do
local isActive = isConfigurationActive(listaIPLS)
table.insert(menuOptions, {
title = grupo,
icon = getIcon(isActive),
description = isActive and "Configuration active" or "Configuration inactive",
onSelect = function()
local activar = false
for _, ipl in ipairs(listaIPLS) do
if not IsIplActive(ipl) then
activar = true
break
end
end
for _, ipl in ipairs(listaIPLS) do
if activar and not IsIplActive(ipl) then
toggleIPL(ipl, showPreconfiguradoMenu)
elseif (not activar) and IsIplActive(ipl) then
toggleIPL(ipl, showPreconfiguradoMenu)
end
end
end
})
end
lib.registerContext({
id = 'ipls_preconfigurado_menu',
title = 'IPLS - Presets',
menu = 'ipls_main_menu',
onBack = function()
showMainMenu()
end,
options = menuOptions,
})
lib.showContext('ipls_preconfigurado_menu')
end
-- Menú principal
showMainMenu = function()
lib.registerContext({
id = 'ipls_main_menu',
title = 'IPLS Manager',
options = {
{
title = 'Presets',
icon = 'fas fa-list',
onSelect = function()
showPreconfiguradoMenu()
end
},
{
title = 'Manual',
icon = 'fas fa-wrench',
onSelect = function()
showManualMenu()
end
},
{
title = 'Entity Sets',
icon = 'fas fa-cube',
onSelect = function()
showEntitySetsMenu()
end
}
}
})
lib.showContext('ipls_main_menu')
end
-- Registro del comando '/cityhall' para abrir el menú
RegisterCommand("cityhall", function()
showMainMenu()
end, false)
-- También se puede registrar un evento para abrir el menú desde otro recurso
RegisterNetEvent("ipls:openMenu", function()
showMainMenu()
end)
-- Handlers para GlobalState
AddStateBagChangeHandler('ipls', 'global', function(bagName, key, value)
if value then
for ipl, state in pairs(value) do
if state then
RequestIpl(ipl)
else
RemoveIpl(ipl)
end
end
end
end)
AddStateBagChangeHandler('entitySets', 'global', function(bagName, key, value)
if value then
for entitySet, state in pairs(value) do
if state then
ActivateInteriorEntitySet(InteriorId, entitySet)
RefreshInterior(InteriorId)
else
DeactivateInteriorEntitySet(InteriorId, entitySet)
RefreshInterior(InteriorId)
end
end
end
end)