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