1
0
Fork 0
forked from Simnation/Main
Main/resources/[jobs]/[police]/ps-dispatch/client/utils.lua
2025-06-07 08:51:21 +02:00

204 lines
6.4 KiB
Lua

function GetPlayerHeading()
local heading = GetEntityHeading(cache.ped)
if heading >= 315 or heading < 45 then
return locale('north')
elseif heading >= 45 and heading < 135 then
return locale('west')
elseif heading >= 135 and heading < 225 then
return locale('south')
elseif heading >= 225 and heading < 315 then
return locale('east')
end
end
function GetPlayerGender()
local gender = locale('male')
if QBCore.Functions.GetPlayerData().charinfo.gender == 1 then
gender = locale('female')
end
return gender
end
function GetIsHandcuffed()
return QBCore.Functions.GetPlayerData()?.metadata?.ishandcuffed
end
function IsOnDuty()
if Config.OnDutyOnly then
if QBCore.Functions.GetPlayerData().job.onduty then
return true
else
return false
end
end
return true
end
---@return boolean
local function HasPhone()
for _, item in ipairs(Config.PhoneItems) do
if QBCore.Functions.HasItem(item) then
return true
end
end
return false
end
---@param coords table
---@return string
function GetStreetAndZone(coords)
local zone = GetLabelText(GetNameOfZone(coords.x, coords.y, coords.z))
local street = GetStreetNameFromHashKey(GetStreetNameAtCoord(coords.x, coords.y, coords.z))
return street .. ", " .. zone
end
---@param vehicle string
---@return string
local function getVehicleColor(vehicle)
local vehicleColor1, vehicleColor2 = GetVehicleColours(vehicle)
local color1 = Config.Colors[tostring(vehicleColor1)]
local color2 = Config.Colors[tostring(vehicleColor2)]
if color1 and color2 then
return color2 .. " on " .. color1
elseif color1 then
return color1
elseif color2 then
return color2
else
return "Unknown"
end
end
---@param vehicle string
---@return string
local function getVehicleDoors(vehicle)
local doorCount = 0
if GetEntityBoneIndexByName(vehicle, 'door_pside_f') ~= -1 then doorCount = doorCount + 1 end
if GetEntityBoneIndexByName(vehicle, 'door_pside_r') ~= -1 then doorCount = doorCount + 1 end
if GetEntityBoneIndexByName(vehicle, 'door_dside_f') ~= -1 then doorCount = doorCount + 1 end
if GetEntityBoneIndexByName(vehicle, 'door_dside_r') ~= -1 then doorCount = doorCount + 1 end
if doorCount == 2 then
doorCount = locale('two_door')
elseif doorCount == 3 then
doorCount = locale('three_door')
elseif doorCount == 4 then
doorCount = locale('four_door')
else
doorCount = 'unknown'
end
return doorCount
end
---@param vehicle string
---@return table
function GetVehicleData(vehicle)
local data = {}
local vehicleClass = {
[0] = locale('compact'),
[1] = locale('sedan'),
[2] = locale('suv'),
[3] = locale('coupe'),
[4] = locale('muscle'),
[5] = locale('sports_classic'),
[6] = locale('sports'),
[7] = locale('super'),
[8] = locale('motorcycle'),
[9] = locale('offroad'),
[10] = locale('industrial'),
[11] = locale('utility'),
[12] = locale('van'),
[17] = locale('service'),
[19] = locale('military'),
[20] = locale('truck')
}
data.class = vehicleClass[GetVehicleClass(vehicle)] or "Unknown"
data.name = GetLabelText(GetDisplayNameFromVehicleModel(GetEntityModel(vehicle)))
data.plate = GetVehicleNumberPlateText(vehicle)
data.doors = getVehicleDoors(vehicle)
data.color = getVehicleColor(vehicle)
data.id = NetworkGetNetworkIdFromEntity(vehicle)
return data
end
function PhoneAnimation()
lib.requestAnimDict("cellphone@in_car@ds", 500)
if not IsEntityPlayingAnim(cache.ped, "cellphone@in_car@ds", "cellphone_call_listen_base", 3) then
TaskPlayAnim(cache.ped, "cellphone@in_car@ds", "cellphone_call_listen_base", 3.0, 3.0, -1, 50, 0, false, false, false)
end
Wait(2500)
StopEntityAnim(cache.ped, "cellphone_call_listen_base", "cellphone@in_car@ds", 3)
end
---@param message string
---@return boolean
function IsCallAllowed(message)
local msgLength = string.len(message)
if msgLength == 0 then return false end
if GetIsHandcuffed() then return false end
if Config.PhoneRequired and not HasPhone() then QBCore.Functions.Notify('You need a communications device for this.', 'error', 5000) return false end
return true
end
local weaponTable = {
[584646201] = "CLASS 2: AP-Pistol",
[453432689] = "CLASS 1: Pistol",
[3219281620] = "CLASS 1: Pistol MK2",
[1593441988] = "CLASS 1: Combat Pistol",
[-1716589765] = "CLASS 1: Heavy Pistol",
[-1076751822] = "CLASS 1: SNS-Pistol",
[-771403250] = "CLASS 2: Desert Eagle",
[137902532] = "CLASS 2: Vintage Pistol",
[-598887786] = "CLASS 2: Marksman Pistol",
[-1045183535] = "CLASS 2: Revolver",
[911657153] = "Taser",
[324215364] = "CLASS 2: Micro-SMG",
[-619010992] = "CLASS 2: Machine-Pistol",
[736523883] = "CLASS 2: SMG",
[2024373456] = "CLASS 2: SMG MK2",
[-270015777] = "CLASS 2: Assault SMG",
[171789620] = "CLASS 2: Combat PDW",
[-1660422300] = "CLASS 4: Combat MG",
[3686625920] = "CLASS 4: Combat MG MK2",
[1627465347] = "CLASS 4: Gusenberg",
[-1121678507] = "CLASS 2: Mini SMG",
[-1074790547] = "CLASS 3: Assaultrifle",
[961495388] = "CLASS 3: Assaultrifle MK2",
[-2084633992] = "CLASS 3: Carbinerifle",
[4208062921] = "CLASS 3: Carbinerifle MK2",
[-1357824103] = "CLASS 3: Advancedrifle",
[-1063057011] = "CLASS 3: Specialcarbine",
[2132975508] = "CLASS 3: Bulluprifle",
[1649403952] = "CLASS 3: Compactrifle",
[100416529] = "CLASS 4: Sniperrifle",
[205991906] = "CLASS 4: Heavy Sniper",
[177293209] = "CLASS 4: Heavy Sniper MK2",
[-952879014] = "CLASS 4: Marksmanrifle",
[487013001] = "CLASS 2: Pumpshotgun",
[2017895192] = "CLASS 2: Sawnoff Shotgun",
[-1654528753] = "CLASS 3: Bullupshotgun",
[-494615257] = "CLASS 3: Assaultshotgun",
[-1466123874] = "CLASS 3: Musket",
[984333226] = "CLASS 3: Heavyshotgun",
[-275439685] = "CLASS 2: Doublebarrel Shotgun",
[317205821] = "CLASS 2: Autoshotgun",
[-1568386805] = "CLASS 5: GRENADE LAUNCHER",
[-1312131151] = "CLASS 5: RPG",
[125959754] = "CLASS 5: Compactlauncher"
}
function GetWeaponName()
local currentWeapon = GetSelectedPedWeapon(cache.ped)
return weaponTable[currentWeapon] or "Unknown"
end