Setup & Configuration

πŸ“₯ Installation

  1. Download latest release

  2. Place in resources folder

  3. Add to server.cfg:

# Dependencies
ensure ox_lib #Required for elevator system to work

# Other resources (inventory, etc.) depending on your config

# Elevator System
ensure ss_elevator

πŸ“‚ Resource Structure

ss_elevator/
β”œβ”€β”€ config.lua               # Core settings
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ registry.lua        # Building registry
β”‚   └── buildings/          # Building configs
β”‚       β”œβ”€β”€ building1.lua   # Building config 1
β”‚       └── building2.lua   # Building config 2
β”œβ”€β”€ modules/
β”‚   β”œβ”€β”€ main/
β”‚   β”‚   β”œβ”€β”€ client.lua      # Client-side main module
β”‚   β”‚   └── server.lua      # Server-side main module
β”‚   └── ...
β”œβ”€β”€ providers/
β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”œβ”€β”€ provider/        # Core provider module
β”‚   |   β”‚   β”œβ”€β”€ client.lua   # Client-side provider module
β”‚   |   β”‚   └── server.lua   # Server-side provider module
|   |   β”œβ”€β”€ qb-core/          # QBCore provider module
|   |   |   β”œβ”€β”€ client.lua   # Client-side provider module
|   |   |   └── server.lua   # Server-side provider module
|   |   └── qbx_core/        # QBX Core provider module
|   |       β”œβ”€β”€ client.lua   # Client-side provider module
|   |       └── server.lua   # Server-side provider module
β”‚   └── ...
β”œβ”€β”€ client.lua              # Client-side main script
β”œβ”€β”€ server.lua              # Server-side main script
β”œβ”€β”€ types.lua               # Type definitions
└── fxmanifest.lua          # Resource manifest

βš™οΈ Global Settings (config.lua)

return {
    -- Development Settings
    debug = false,        -- Enable debug mode for advanced logging

    -- Core Settings
    maxDistance = 5.0,    -- Maximum interaction distance in meters (anti-exploit)
    waitTime = 100,       -- Default transit time between floors (milliseconds)

    -- Visual & Audio Settings
    useEffects = true,    -- Enable screen fade transitions
    useSounds = true,     -- Enable elevator sound effects globally

    -- Framework Providers
    providers = {
        -- Inventory System (Choose one)
        inventory = 'ox_inventory',    -- Supported: 'ox_inventory', 'qb-inventory'

        -- Core Framework (Choose one)
        core = 'qbx_core',            -- Supported: 'qbx_core', 'qb-core'

        -- Target System (Choose one)
        interaction = 'ox_target',     -- Supported: 'ox_target', 'qb-target'

        -- Notification System (Choose one)
        notify = 'ox_lib',            -- Supported: 'ox_lib', 'qb-core'
    }
}

🏒 Building Configuration

Each building must be defined in data/buildings/ and registered in data/registry.lua.

Example Building (data/buildings/office.lua)

return {
    id = 'downtown_office',           -- Unique identifier
    name = 'Downtown Office',         -- Display name
    description = 'Corporate HQ',     -- Building description

    elevators = {                     -- List of elevators
        {
            id = 'main_elevator',     -- Unique elevator ID
            name = 'Main Elevator',   -- Display name
            description = 'Public',   -- Elevator description
            sound = true,            -- Play sounds (optional)
            waitTime = 200,          -- Override default wait time (optional)

            floors = {               -- List of floors
                -- Example: Public floor
                {
                    id = 'reception',
                    name = 'Reception',
                    description = 'Public Area',
                    teleportCoords = vector4(100.0, 200.0, 35.0, 90.0),
                    target = {
                        coords = vector3(100.0, 200.0, 36.5),
                        size = vector3(0.5, 0.5, 0.5)
                    }
                },
                -- Example: Private floor
                {
                    id = 'lobby',    -- Unique floor ID
                    name = 'Lobby',  -- Display name
                    description = 'Ground Floor', -- Floor description

                    -- Where players teleport to (x, y, z, heading)
                    teleportCoords = vector4(100.0, 200.0, 30.0, 90.0),

                    -- Interaction zone
                    target = {
                        coords = vector3(100.0, 200.0, 31.5),   -- Location
                        size = vector3(0.5, 0.5, 0.5),         -- Zone size
                        rotation = 90.0,                       -- Zone rotation
                        distance = 2.0,                        -- Interaction range
                        icon = 'fas fa-elevator',              -- Custom icon
                        label = 'Call Elevator'                -- Custom label
                    },

                    -- Access Control (all optional)
                    restricted = true,                    -- Hide if no access
                    requiredJobs = {                     -- Required jobs
                        ['police'] = 0,                  -- Job name = min grade
                        ['office'] = 2
                    },
                    requiredItems = {                    -- Required items
                        {
                            name = 'office_guest_keycard',      -- Item name
                            count = 1,                          -- Required amount
                            remove = false                      -- Remove on use
                        }
                    }
                }
            }
        }
    }
}

Building Registry (data/registry.lua)

return {
    ['downtown_office'] = require 'data.buildings.office',
    ['city_hall'] = require 'data.buildings.cityhall',
    -- Add more buildings here
}

Access Control Features

  • Public Access: No restrictions by default

  • Job Restrictions: Require specific jobs/grades

  • Item Requirements: Require items/keycards

  • Hidden Floors: restricted = true hides floors without access

  • Item Removal: remove = true consumes required items

Customization

  • Interaction Range: Adjust maxDistance and target distance

  • Animations: Toggle useEffects and useSounds

  • Wait Times: Global waitTime or per-elevator override

  • Icons/Labels: Customize target appearance

By Sahara Scripters - Elevating your server, one floor at a time

Last updated