HEX
HexscriptsClassicFinal HUD

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_final_hud:reSendTeamlerData') server only
        airportDimension = 5,   
    },

    Server = {
        Name = 'Hex <span>Scripts</span>',
        letterSpacing = '.24vh',
        Currency = '$'
    },

    Speedo = {
        kmh = true, -- if false it will mp/h instead of km/h
        maxSpeed = 350,
        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 = {
        weapon = true,
        job = true,
        street = true,
        enableEatAndDrink = true,
        enableBankOrBlack = true,
        switchBankBlack = true,
    },

    DefaultPositions = {
        food = { x = 0, y = 0 },
        thirst = { x = 0, y = 0 },
        speedo = { x = 0, y = 0 },
        street = { x = 0, y = 0 },
        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',

            ['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.',
            ['enableEatAndDrink'] = 'Essen und Trinkenanzeige',
            ['enableEatAndDrink_description'] = 'Hier kannst du das Essen & Trinken 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.',
        },
    
        ['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',

            ['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.',
            ['enableEatAndDrink'] = 'Food and Thrist Display',
            ['enableEatAndDrink_description'] = 'Here, you can enable or disable food and drinks..',
            ['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.',
        }
    }
}

Config.Options = {
    {
        label = Config.Locales[Config.Locale]['weapon'],
        name = 'weapon',
        type = 'checkbox'
    },

    {
        label = Config.Locales[Config.Locale]['job'],
        name = 'job',
        type = 'checkbox'
    },

    {
        label = Config.Locales[Config.Locale]['street'],
        name = 'street',
        type = 'checkbox'
    },

    {
        label = Config.Locales[Config.Locale]['enableEatAndDrink'],
        name = 'enableEatAndDrink',
        type = 'checkbox'
    },

    {
        label = Config.Locales[Config.Locale]['enableBankOrBlack'],
        name = 'enableBankOrBlack',
        type = 'checkbox'
    },

    {
        label = Config.Locales[Config.Locale]['switchBankBlack'],
        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