HEX
HexscriptsVersion 4.0HUD

Configurations

Here you will get all configurations & open source files that are included within this script.

Config Files

Config = {
    Debug = false,

    Framework = 'ESX', -- ESX | QBCore | Standalone
    Locale = 'en',
    Voice = {
        System = 'saltychat', -- Saltychat | pma
        Ranges = { 1, 3.5, 8, 32 },
        RangeColor = {
            red = 237,
            green = 2,
            blue = 2
        } 
    },

    TxAnnounces = {
        restart = {
            enable = true, -- if true it will use txAdmin restarts, dont forget to hide it in the settings from txAdmin
            type = 'announcement', -- announcement | notify
            timeout = 8000 -- ms how long the restart announcement should be shown
        },
        announcement = {
            enable = true, -- if true it will use txAdmin announcements, dont forget to hide it in the settings from txAdmin
            type = 'announcement', -- announcement | notify
            timeout = 8000 -- ms how long the announcement should be shown
        },
        directMessage = {
            enable = true, -- if true it will use txAdmin Direct Messages, dont forget to hide it in the settings from txAdmin
            type = 'notify', -- announcement | notify
            timeout = 7000 -- ms how long the direct message should be shown
        },
    },

    TeamlerAd = {
        enable = true,
        defaultGroup = 'user',
        reSendData = 1000 * 15, -- 15 Seconds, you can refresh it too via the event TriggerEvent('hex_4_hud:reSendTeamlerData') server only
        airportDimension = 5,   
    },

    DisableAmmoDisplay = true, -- disable the default ammo display of gta

    Server = {
        Name = "HEX <span>Scripts</span>",
        Currency = '$'
    },

    Speedo = {
        kmh = false, -- if false it will mp/h instead of km/h
        disableSpecificVehicles = {
            class = {
                [13] = true, -- cycles
            },
            models = {
                [joaat('bmx')] = true,
            }
        }
    },

    Chat = {
        enabled = true,
        text = 'Write a message here...',
        keymapping = {
            command = 'openChat',
            desc = 'Open the Chat',
            mapper = 'keyboard',
            key = 't'
        }
    },

    Waits = {
        Vehicle = 0,
        Refreshfood = 1000 * 60 * 10
    },

    Permissions = {
        teamchat = {
            'projektleitung',
            'superadmin',
            'admin'
        },

        announce = {
            'projektleitung',
            'superadmin',
            'admin'
        }
    },

    NotifySound = {
        ["notify"] = {
            mp3 = false,
            gta = {
                audioName = 'ATM_WINDOW',
                audioRef = 'HUD_FRONTEND_DEFAULT_SOUNDSET'
            },
            url = 'sounds/alarm.mp3'
        },

        ["announce"] = {
            mp3 = false,
            gta = {
                audioName = 'CHALLENGE_UNLOCKED',
                audioRef = 'HUD_AWARDS'
            },
            url = 'sounds/alarm.mp3'
        }
    },

    Commands = {
        ["settings"] = {
            command = 'settings',
            enabled = true,
        },

        ["id"] = {
            command = 'id',
            enabled = true
        },

        ["ids"] = {
            command = 'ids',
            enabled = true
        },

        ["ooc"] = {
            command = 'ooc',
            enabled = true
        },

        ["tc"] = {
            command = 'tc',
            enabled = true
        },

        ["announce"] = {
            command = 'announce',
            enabled = true
        }
    },
    
    DefaultSettings = {
        food = 0,
        speedo = 2,
        notify = 0,
        teamchat = 0,
        announce = 0,
        server = 1,
        weapon = true,
        job = true,
        street = true,
        enableBankOrBlack = true,
        switchBankBlack = true
    },

    DefaultPositions = {
        food = { x = 0, y = 0 },
        thirst = { x = 0, y = 0 },
        speedo = { x = 0, y = 0 },
        modern_street = { x = 0, y = 0 },
        modern_job = { x = 0, y = 0 },
        classic_street = { x = 0, y = 0 },
        classic_job = { x = 0, y = 0 }
    },

    Locales = {
        ['de'] = {
            ['info'] = 'Information!',
            ['your_id'] = 'Deine Id Lautet: %s',
            ['no_player'] = 'Kein Spieler in der Nähe!',
            ['near_player_id'] = 'Seine Id Lautet: %s',

            ['tx_admin_restart'] = 'Geplanter Neustart',
            ['tx_admin_announce'] = 'Serverankündigung von %s',
            ['tx_admin_dm'] = 'Direktnachricht von %s',

            ['settings_panel'] = 'Einstellungs<span>Panel</span>',
            ['settings_panel_description'] = 'Hier kannst du dein Hud Einstellen',

            -- ui
            ['save'] = 'Setzen',
            ['reset'] = 'Reset',
            ['select'] = 'Auswählen',

            ['lifeinvader_title'] = 'Lifeinvader',
            ['lifeinvader_newad'] = 'Neue Werbung von',
            ['lifeinvader_number'] = 'Telefonnummer',

            ['weapon'] = 'Waffenanzeige',
            ['weapon_description'] = 'Hier kannst du die Waffenanzeige oben rechts Aktivieren oder Deaktivieren.',
            ['job'] = 'Jobanzeige',
            ['job_description'] = 'Hier kannst du die Jobanzeige Aktivieren oder Deaktivieren.',
            ['street'] = 'Straßenanzeige',
            ['street_description'] = 'Hier kannst du die Straßenanzeige Aktivieren oder Deaktivieren.',
            ['enableBankOrBlack'] = 'Grün oder Schwarzgeld Anzeigen',
            ['enableBankOrBlack_description'] = 'Hier kannst du dich entscheiden ob du deine Bank oder Schwarzgeldanzeige an haben möchtest.',
            ['switchBankBlack'] = 'Grün oder Schwarzgeld',
            ['switchBankBlack_description'] = 'Hier kannst du dich entscheiden ob du dein Bank oder Schwarzgeldanzeigen lassen möchtest.',
            ['food'] = 'Nahrungsanzeige',
            ['food_description'] = 'Hier kannst du die Nahrungsanzeige Einstellen.',
            ['speedo'] = 'Geschwindigkeitsanzeige',
            ['speedo_description'] = 'Hier kannst du die Geschwindigkeitsanzeige Einstellen.',
            ['notify'] = 'Benachrichtigung',
            ['notify_description'] = 'Hier kannst du die Benachrichtigungsanzeige Einstellen.',
            ['teamchat'] = 'Teamchat',
            ['teamchat_description'] = 'Hier kannst du die Teamchatanzeige Einstellen.',
            ['announce'] = 'Ankündigung',
            ['announce_description'] = 'Hier kannst du die Ankündigungsanzeige Einstellen.',
            ['server'] = 'HUD',
            ['server_description'] = 'Hier kannst du dein HUD Einstellen.',
        },
    
        ['en'] = {
            ['info'] = 'Information!',
            ['your_id'] = 'Your Id Is: %s',
            ['no_player'] = 'No player nearby!',
            ['near_player_id'] = 'His Id Is: %s',

            ['tx_admin_restart'] = 'Scheduled Restart',
            ['tx_admin_announce'] = 'Server announcement by %s',
            ['tx_admin_dm'] = 'Direct Message from %s',

            ['settings_panel'] = 'Settings<span>Panel</span>',
            ['settings_panel_description'] = 'Here you can set up your Hud Configuration',

            -- ui
            ['save'] = 'Save',
            ['reset'] = 'Reset',
            ['select'] = 'Select',

            ['lifeinvader_title'] = 'Lifeinvader',
            ['lifeinvader_newad'] = 'New advertisement from',
            ['lifeinvader_number'] = 'Phone Number',

            ['weapon'] = 'Weapons display',
            ['weapon_description'] = 'Here, you can enable or disable the weapon display in the top right corner.',
            ['job'] = 'Job display',
            ['job_description'] = 'Here, you can enable or disable the job display.',
            ['street'] = 'Street display',
            ['street_description'] = 'Here, you can enable or disable the street display.',
            ['enableBankOrBlack'] = 'Bank or Black Money Display',
            ['enableBankOrBlack_description'] = 'Here you can decide whether you want to have your bank or black money displayed.',
            ['switchBankBlack'] = 'Bank or Black Money',
            ['switchBankBlack_description'] = 'Here, you can decide whether you`d like to have your bank account or black money.',
            ['food'] = 'Food indicator',
            ['food_description'] = 'Here you can set the food indicator.',
            ['speedo'] = 'Speedometer',
            ['speedo_description'] = 'Here you can set the speedometer.',
            ['notify'] = 'Notification',
            ['notify_description'] = 'Here you can set the notification display.',
            ['announce'] = 'Announce',
            ['announce_description'] = 'Here you can set the announce display.',
            ['teamchat'] = 'Teamchat',
            ['teamchat_description'] = 'Here you can set the teamchat display.',
            ['server'] = 'HUD',
            ['server_description'] = 'Here you can set up your Hud Configuration.',
        }
    }
}

Config.Options = {
    {
        name = 'server',
        type = 'options',
        maxOptions = 2
    },

    {
        name = 'food',
        type = 'options',
        maxOptions = 5
    },

    {
        name = 'speedo',
        type = 'options',
        maxOptions = 5
    },

    {
        name = 'notify',
        type = 'options',
        maxOptions = 2
    },

    {
        name = 'teamchat',
        type = 'options',
        maxOptions = 2
    },

    {
        name = 'announce',
        type = 'options',
        maxOptions = 2
    },

    {
        name = 'weapon',
        type = 'checkbox'
    },

    {
        name = 'job',
        type = 'checkbox'
    },

    {
        name = 'street',
        type = 'checkbox'
    },

    {
        name = 'enableBankOrBlack',
        type = 'checkbox'
    },

    {
        name = 'switchBankBlack',
        type = 'checkbox'
    },
}

Open Source Files

local playerLoaded = false

Citizen.CreateThread(function()
    if Config.Framework == 'ESX' then
        local status, ESX = pcall(function()
            return exports['es_extended']:getSharedObject()
        end)

        if not status then
            while not ESX do
                TriggerEvent("esx:getSharedObject", function(object) ESX = object end)
                Citizen.Wait(50)
            end
        end

        while ESX.GetPlayerData().job == nil do
            Citizen.Wait(100)
        end

        while not ESX.IsPlayerLoaded() do
            Citizen.Wait(50)
        end

        Citizen.Wait(500)

        ESX.PlayerData = ESX.GetPlayerData()

        playerLoaded = true

        RegisterNetEvent('esx:setJob', function(job)
            ESX.PlayerData.job = job
        end)

        RegisterNetEvent('esx:setAccountMoney', function(account)
            SendNUIMessage({
                action = 'setMoney',
                data = {
                    type = account.name,
                    money = account.money
                }
            })
        end)

        RegisterNetEvent('esx:setJob', function(job)
            ESX.PlayerData.job = job

            SendNUIMessage({
                action = 'setJob',
                data = {
                    label = ESX.PlayerData.job.label,
                    gLabel = ESX.PlayerData.job.grade_label
                }
            })
        end)

        function GetJob()
            return {
                label = ESX.PlayerData.job.label,
                gLabel = ESX.PlayerData.job.grade_label
            }
        end

        if GetResourceState('hex_food') == 'started' then
            RegisterNetEvent('hex_food:onTick', function(food, thirst)
                SendNUIMessage({
                    action = 'refreshFood',
                    data = {
                        food = food,
                        thirst = thirst
                    }
                })
            end)
        elseif GetResourceState('esx_status') == 'started' then
            RegisterNetEvent('esx_status:onTick', function(data)
                local hunger, thirst
                
                for i = 1, #data do
                    if data[i].name == "thirst" then
                        thirst = math.ceil(data[i].percent)
                    end
                    if data[i].name == "hunger" then
                        hunger = math.ceil(data[i].percent)
                    end
                end

                SendNUIMessage({
                    action = 'refreshFood',
                    data = {
                        food = hunger,
                        thirst = thirst
                    }
                })
            end)
        end

        function GetFood()
            if GetResourceState('hex_food') == 'started' then
                return exports['hex_food']:GetFood()
            elseif GetResourceState('esx_status') == 'started' then
                local status = nil
                local timesToTry = 0

                while status == nil and timesToTry < 10 do
                    Citizen.Wait(50)
                    timesToTry = timesToTry + 1

                    TriggerEvent('esx_status:getStatus', 'hunger', function(stats)
                        status = stats.val / 10000
                    end)
                end
                
                return status ~= nil and math.ceil(status) or 0
            else
                return math.random(1, 100)
            end
        end

        function GetThirst()
            if GetResourceState('hex_food') == 'started' then
                return exports['hex_food']:GetThirst()
            elseif GetResourceState('esx_status') == 'started' then
                local status = nil
                local timesToTry = 0

                while status == nil and timesToTry < 10 do
                    Citizen.Wait(50)
                    timesToTry = timesToTry + 1
                
                    TriggerEvent('esx_status:getStatus', 'thirst', function(stats)
                        status = stats.val / 10000
                    end)
                end

                return status ~= nil and math.ceil(status) or 0
            else
                return math.random(1, 100)
            end
        end

        function GetWeaponFromHash(weapon)
            return ESX.GetWeaponFromHash(weapon)
        end

        function GetWeaponLabel(weaponName)
            return ESX.GetWeaponLabel(weaponName)
        end

        function GetMoney(account)
            for k, v in pairs(ESX.GetPlayerData().accounts) do
                if v.name == account then
                    return v.money
                end
            end

            return 0
        end
    end
end)

function IsPlayerLoaded()
    return playerLoaded
end