Server Editable

tgiCore.VersionCheck('tgiann-core', '4.20.0')

local lb_phone = GetResourceState("lb-phone") ~= "missing"
local adminPerm = config.tgiannServer and { "tgi" } or config.framework == "qb" and "god" or "admin"
GlobalState.tgiPoliceGradeList = GlobalState.tgiPoliceGradeList or {}

---@param src number
---@param webhook "alert" | "personalUpdatePlayer" | "emergencyCommands"
---@param msg string
function log(src, webhook, msg)
    TriggerEvent("tgiann-core:discordLog", webhooks[webhook], msg, src)
end

function isPrimeTime()
    local date = os.date("*t")
    return date.hour >= config.primeTime.start or date.hour < config.primeTime.finish
end

function playerOnDuty(xPlayer)
    if not config.needOnDutyJob then return true end
    if config.framework == "esx" then
        return true
    elseif config.framework == "qb" then
        return xPlayer.PlayerData.job and xPlayer.PlayerData.job.onduty
    end
end

function getNumber(src, xPlayer)
    if lb_phone then
        local numStr = exports["lb-phone"]:GetEquippedPhoneNumber(src)
        local area = numStr:sub(1, 3)
        local prefix = numStr:sub(4, 6)
        local line = numStr:sub(7, 10)
        return string.format("(%s) %s-%s", area, prefix, line)
    elseif config.framework == "esx" then
        local result = MySQL.query.await('SELECT phone_number FROM users WHERE identifier = ?', {
            xPlayer.identifier
        })
        if result?.phone_number then return result.phone_number end
    elseif config.framework == "qb" then
        return xPlayer.PlayerData.charinfo.phone or LANG.UNKNOWN
    end
    return LANG.UNKNOWN
end

lib.callback.register("tgiann-policealert:getGradeList", function(_, jobName)
    local esxJobList = tgiCore.core.GetJobs()
    local jobData = esxJobList[jobName]
    assert(jobData, ("Job data not found for job: %s"):format(jobName))

    ---@type {name: string, label:string, salary: number, grade:number}[]
    local gradeList = jobData.grades
    local jobGradeList = {}
    for _, grade in pairs(gradeList) do
        jobGradeList[#jobGradeList + 1] = {
            label = grade.label or LANG.UNKNOWN,
            value = grade.grade
        }
    end

    table.sort(jobGradeList, function(a, b)
        return a.value > b.value
    end)

    local oldValue = GlobalState.tgiPoliceGradeList
    oldValue[jobName] = jobGradeList
    GlobalState.tgiPoliceGradeList = oldValue

    return jobGradeList
end)

tgiCore.CommandsAdd("testAlert", "Send a test alert", { { name = "label", help = "Alert Label" }, { name = "job", help = "Alert Job" } }, false, function(source, args)
    local label = args[1] or "Test Alert"
    local jobs = args[2] and { arg[2] } or config.jobNames

    local randomFunction = function(change)
        return math.random(0, 100) <= (change or 50)
    end

    local randomCoord = function()
        return {
            x = math.random(-2500, 2500),
            y = math.random(-2500, 2500),
            z = math.random(1, 100)
        }
    end

    local alertData = {
        jobs = jobs,
        label = label,
        duration = randomFunction() and 5 or nil,
        coords = randomFunction() and randomCoord() or nil,
        code = randomFunction() and "10-99" or nil,
        icon = randomFunction() and "dog" or nil,
        iconColor = randomFunction() and "#36FF9F" or nil,
        bgAnimate = randomFunction(10),
        vehicle = {
            label = randomFunction(),
            plate = randomFunction(),
            color = randomFunction()
        },
        gender = randomFunction()
    }

    exports["tgiann-policealert"]:Alert(source, alertData)
    -- SetTimeout(2000, function()
    --     exports["tgiann-policealert"]:Alert(source, { jobs = jobs, label = label .. " - 2" })
    -- end)
end, adminPerm)

function phoneControl(xPlayer)
    for i = 1, #config.phoneItems do
        if tgiCore.getItemByName(xPlayer, config.phoneItems[i]).amount > 0 then
            return true
        end
    end
    return false
end

Last updated