260 lines
		
	
	
		
			No EOL
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			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) |