HEX
HexscriptsClassicLifeinvader

Configurations

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

Open Source Files

Config = {}

Config.Debug = true

Config.Locale = 'de'

Config.Framework = {
    current = 'ESX', -- only ESX or QB
    object = nil, -- leave it alone
    
    cachedInformations = {  -- leave it alone
        phone_number = {}
    },

    loadFunction = function()
        if Config.Framework.current == 'ESX' then
            Config.Framework.object = exports['es_extended']:getSharedObject()
        elseif Config.Framework.current == 'QB' then
            Config.Framework.object = exports['qb-core']:GetCoreObject()
        end
    end,

    getMoney = function(playerId)
        if Config.Framework.current == 'ESX' then
            local xPlayer = Config.Framework.object.GetPlayerFromId(playerId)
        
            return xPlayer.getMoney()
        elseif Config.Framework.current == 'QB' then
            local Player = Config.Framework.object.Functions.GetPlayer(playerId)

            return Player.Functions.GetMoney('cash')
        end

        return 0
    end,

    removeMoney = function(playerId, amount)
        if Config.Framework.current == 'ESX' then
            local xPlayer = Config.Framework.object.GetPlayerFromId(playerId)

            xPlayer.removeMoney(amount)
        elseif Config.Framework.current == 'QB' then
            local Player = Config.Framework.object.Functions.GetPlayer(playerId)
            
            Player.Functions.RemoveMoney('cash', amount)
        end
    end,

    getName = function(playerId)
        if Config.Framework.current == 'ESX' then
            local xPlayer = Config.Framework.object.GetPlayerFromId(playerId)

            return xPlayer.getName()
        elseif Config.Framework.current == 'QB' then
            local Player = Config.Framework.object.Functions.GetPlayer(playerId)

            return Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname
        end
    end,

    getPhoneNumber = function(playerId)
        if Config.Framework.current == 'ESX' then 
            local xPlayer = Config.Framework.object.GetPlayerFromId(playerId)
            local wait = 0

            if Config.Framework.cachedInformations.phone_number[xPlayer.identifier] == nil then
                MySQL.Async.fetchScalar('SELECT `phone_number` FROM `users` WHERE identifier = @identifier', {
                    ['@identifier'] = xPlayer.identifier
                }, function(phone_number)
                    Config.Framework.cachedInformations.phone_number[xPlayer.identifier] = phone_number
                end)
            end

            while Config.Framework.cachedInformations.phone_number[xPlayer.identifier] == nil and wait <= 20 do
                Citizen.Wait(100)
                wait = wait + 1
            end

            if wait >= 20 then
                Config.Framework.cachedInformations.phone_number[xPlayer.identifier] = '| unknown'
            end

            return Config.Framework.cachedInformations.phone_number[xPlayer.identifier]
        elseif Config.Framework.current == 'QB' then
            local Player = Config.Framework.object.Functions.GetPlayer(playerId)

            return Player.PlayerData.metadata["phonedata"].SerialNumber
        end
    end,
}

Config.Position = {
    coords = vector4(4045.8623, 2344.4043, 24.8556, 178.4864),

    ped = {
        enabled = false,
        distance = 1.0,
        hash = joaat('CS_FBISuit_01')
    },

    marker = {
        enabled = true,
        type = 0,
        drawDistance = 50.0,
        scale = vector3(0.5, 0.5, 0.5),
        color = {
            red = 255,
            green = 46,
            blue = 58,
            alpha = 100
        },

        moveUpAndDown = false,
        rotate = true
    },

    blip = {
        enabled = true,
        coords = vector3(4045.8623, 2344.4043, 24.8556),
        sprite = 77,
        scale = 0.8,
        color = 1,
        display = 4,
        shortRange = true,
        text = 'Lifeinvader'
    }
}

Config.Avatar = true -- need steam api linked in the server.cfg
Config.Cooldown = 300 -- seconds
Config.Price = {
    minLetter = 15,
    maxLetter = 50,
    price = 2500,
    perLetter = true,
    pricePerLetter = 100
}

Config.blacklistedStrings = {
    "<",
    ">",
    "mp3",
    "mp4"
}

Config.Locales = {
    ['de'] = {
        ['press_e'] = 'Drücke E um eine Werbung zu schalten',
        ['message_short'] = 'Deine Nachricht ist zu kurz (mind. %s Buchstaben)',
        ['message_long'] = 'Deine Nachricht ist zu lang (max. %s Buchstaben)',
        ['not_enough'] = 'Du hast nicht genug Geld dabei!',
        ['cooldown'] = 'Derzeit ist ein Cooldown aktiv!',
        ['you_paid'] = 'Du bezahlst %s$!',
        ['blacklisted_string'] = 'Blacklisted string detected!',

        ['webhook_username'] = '@%s',
        ['webhook_description'] = '%s\n\nTelefonnummer: %s',
        ['webhook_date'] = "Werbung geschalten am %s um %s"
    },

    ['en'] = {
        ['press_e'] = 'Press E to display an advertisement',
        ['message_short'] = 'Your message is too short (at least %s characters)',
        ['message_long'] = 'Your message is too long (max. %s characters)',
        ['not_enough'] = "You don't have enough money!",
        ['cooldown'] = 'Currently a cool down is active!',
        ['you_paid'] = 'You payed %s$!',
        ['blacklisted_string'] = 'Blacklisted string detected!',

        ['webhook_username'] = '@%s',
        ['webhook_description'] = '%s\n\nPhonenumber: %s',
        ['webhook_date'] = "Advertisement placed on %s at %s"
    }
}

function NotifyLifeinvader(name, text, phoneNumber, timeout)
    TriggerEvent('hex_lifeinvader:lifeinvaderNotify', name, text, phoneNumber, timeout)
end

function DrawHelpNotify(message)
    SetTextComponentFormat('STRING')
    AddTextComponentString(message)
    DisplayHelpTextFromStringLabel(0, 0, 1, -1)
end

function Notify(title, message, type, timeout)
    TriggerEvent('hex_hud:notify', title, message, type, timeout)
end

On this page