Files
qb-core-qbcore-fivem/client/functions.lua
T
Kakarot ddc396d2c9 fix(qb-core/client/functions.lua): Close Player
There was a mistake when replacing table.insert that caused closest player to not be found
2021-09-25 11:08:40 -05:00

419 lines
17 KiB
Lua

QBCore.Functions = {}
QBCore.RequestId = 0
-- Player
function QBCore.Functions.GetPlayerData(cb)
if cb then
cb(QBCore.PlayerData)
else
return QBCore.PlayerData
end
end
function QBCore.Functions.GetCoords(entity)
local coords = GetEntityCoords(entity, false)
local heading = GetEntityHeading(entity)
return vector4(coords.x, coords.y, coords.z, heading)
end
function QBCore.Functions.HasItem(item)
QBCore.Functions.TriggerCallback('QBCore:HasItem', function(result)
if result then
return true
end
return false
end, item)
return false
end
-- Utility
function QBCore.Functions.DrawText(x, y, width, height, scale, r, g, b, a, text) -- Use local function instead
SetTextFont(4)
SetTextProportional(0)
SetTextScale(scale, scale)
SetTextColour(r, g, b, a)
SetTextDropShadow(0, 0, 0, 0,255)
SetTextEdge(2, 0, 0, 0, 255)
SetTextDropShadow()
SetTextOutline()
SetTextEntry('STRING')
AddTextComponentString(text)
DrawText(x - width/2, y - height/2 + 0.005)
end
function QBCore.Functions.DrawText3D(x, y, z, text) -- Use local function instead
SetTextScale(0.35, 0.35)
SetTextFont(4)
SetTextProportional(1)
SetTextColour(255, 255, 255, 215)
SetTextEntry('STRING')
SetTextCentre(true)
AddTextComponentString(text)
SetDrawOrigin(x,y,z, 0)
DrawText(0.0, 0.0)
local factor = (string.len(text)) / 370
DrawRect(0.0, 0.0+0.0125, 0.017+ factor, 0.03, 0, 0, 0, 75)
ClearDrawOrigin()
end
function QBCore.Functions.Notify(text, textype, length)
local ttype = textype or 'primary'
local length = length or 5000
SendNUIMessage({action = 'show', type = ttype, length = length, text = text})
end
function QBCore.Debug(resource, obj, depth)
TriggerServerEvent('QBCore:DebugSomething', resource, obj, depth)
end
function QBCore.Functions.TriggerCallback(name, cb, ...)
QBCore.ServerCallbacks[name] = cb
TriggerServerEvent('QBCore:Server:TriggerCallback', name, ...)
end
function QBCore.Functions.Progressbar(name, label, duration, useWhileDead, canCancel, disableControls, animation, prop, propTwo, onFinish, onCancel)
exports['progressbar']:Progress({
name = name:lower(),
duration = duration,
label = label,
useWhileDead = useWhileDead,
canCancel = canCancel,
controlDisables = disableControls,
animation = animation,
prop = prop,
propTwo = propTwo,
}, function(cancelled)
if not cancelled then
if onFinish then
onFinish()
end
else
if onCancel then
onCancel()
end
end
end)
end
-- Getters
function QBCore.Functions.GetVehicles() return GetGamePool('CVehicle') end
function QBCore.Functions.GetPeds() return GetGamePool('CPed') end
function QBCore.Functions.GetObjects() return GetGamePool('CObject') end
function QBCore.Functions.GetPlayers() return GetActivePlayers() end
function QBCore.Functions.GetClosestPlayer(coords)
if coords == nil then
coords = GetEntityCoords(PlayerPedId())
end
local closestPlayers = QBCore.Functions.GetPlayersFromCoords(coords)
local closestDistance = -1
local closestPlayer = -1
for i=1, #closestPlayers, 1 do
if closestPlayers[i] ~= PlayerId() and closestPlayers[i] ~= -1 then
local pos = GetEntityCoords(GetPlayerPed(closestPlayers[i]))
local distance = #(pos - coords)
if closestDistance == -1 or closestDistance > distance then
closestPlayer = closestPlayers[i]
closestDistance = distance
end
end
end
return closestPlayer, closestDistance
end
function QBCore.Functions.GetPlayersFromCoords(coords, distance)
local players = QBCore.Functions.GetPlayers()
local coords = coords or GetEntityCoords(PlayerPedId())
local distance = distance or 5
local closePlayers = {}
for _, player in pairs(players) do
local target = GetPlayerPed(player)
local targetCoords = GetEntityCoords(target)
local targetdistance = #(targetCoords - coords)
if targetdistance <= distance then
closePlayers[#closePlayers+1] = player
end
end
return closePlayers
end
function QBCore.Functions.GetClosestVehicle()
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
local vehicles = GetGamePool('CVehicle')
local closestDistance = -1
local closestVehicle = -1
for i = 1, #vehicles, 1 do
local vehicleCoords = GetEntityCoords(vehicles[i])
local distance = #(vehicleCoords - coords)
if closestDistance == -1 or closestDistance > distance then
closestVehicle = vehicles[i]
closestDistance = distance
end
end
return closestVehicle
end
function QBCore.Functions.GetClosestObject()
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
local objects = GetGamePool('CObject')
local closestDistance = -1
local closestObject = -1
for i = 1, #objects, 1 do
local objectCoords = GetEntityCoords(objects[i])
local distance = #(objectCoords - coords)
if closestDistance == -1 or closestDistance > distance then
closestObject = objects[i]
closestDistance = distance
end
end
return closestObject
end
function QBCore.Functions.GetClosestPed()
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
local peds = GetGamePool('CPed')
local closestDistance = -1
local closestPed = -1
for i = 1, #peds, 1 do
local pedCoords = GetEntityCoords(peds[i])
local distance = #(pedCoords - coords)
if closestDistance == -1 or closestDistance > distance then
closestPed = peds[i]
closestDistance = distance
end
end
return closestPed
end
-- Vehicle
local function Round(value, numDecimalPlaces)
if numDecimalPlaces then
local power = 10^numDecimalPlaces
return math.floor((value * power) + 0.5) / (power)
else
return math.floor(value + 0.5)
end
end
local function Trim(value)
if value then
return (string.gsub(value, '^%s*(.-)%s*$', '%1'))
else
return nil
end
end
function QBCore.Functions.SpawnVehicle(model, cb, coords, isnetworked)
local model = GetHashKey(model)
local coords = coords or QBCore.Functions.GetCoords(PlayerPedId())
local isnetworked = isnetworked or true
if not IsModelInCdimage(model) then return end
RequestModel(model)
while not HasModelLoaded(model) do Citizen.Wait(10) end
local veh = CreateVehicle(model, coords.x, coords.y, coords.z, coords.w, isnetworked, false)
local netid = NetworkGetNetworkIdFromEntity(veh)
SetVehicleHasBeenOwnedByPlayer(veh, true)
SetNetworkIdCanMigrate(netid, true)
SetVehicleNeedsToBeHotwired(veh, false)
SetVehRadioStation(veh, 'OFF')
SetModelAsNoLongerNeeded(model)
if cb then cb(veh) end
end
function QBCore.Functions.DeleteVehicle(vehicle)
SetEntityAsMissionEntity(vehicle, true, true)
DeleteVehicle(vehicle)
end
function QBCore.Functions.GetVehicleProperties(vehicle)
if DoesEntityExist(vehicle) then
local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
local extras = {}
for extraId=0, 12 do
if DoesExtraExist(vehicle, extraId) then
local state = IsVehicleExtraTurnedOn(vehicle, extraId) == 1
extras[tostring(extraId)] = state
end
end
return {
model = GetEntityModel(vehicle),
plate = Trim(GetVehicleNumberPlateText(vehicle)),
plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
bodyHealth = Round(GetVehicleBodyHealth(vehicle), 1),
engineHealth = Round(GetVehicleEngineHealth(vehicle), 1),
tankHealth = Round(GetVehiclePetrolTankHealth(vehicle), 1),
fuelLevel = Round(GetVehicleFuelLevel(vehicle), 1),
dirtLevel = Round(GetVehicleDirtLevel(vehicle), 1),
color1 = colorPrimary,
color2 = colorSecondary,
pearlescentColor = pearlescentColor,
interiorColor = GetVehicleInteriorColor(vehicle),
dashboardColor = GetVehicleDashboardColour(vehicle),
wheelColor = wheelColor,
wheels = GetVehicleWheelType(vehicle),
windowTint = GetVehicleWindowTint(vehicle),
xenonColor = GetVehicleXenonLightsColour(vehicle),
neonEnabled = {
IsVehicleNeonLightEnabled(vehicle, 0),
IsVehicleNeonLightEnabled(vehicle, 1),
IsVehicleNeonLightEnabled(vehicle, 2),
IsVehicleNeonLightEnabled(vehicle, 3)
},
neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)),
extras = extras,
tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)),
modSpoilers = GetVehicleMod(vehicle, 0),
modFrontBumper = GetVehicleMod(vehicle, 1),
modRearBumper = GetVehicleMod(vehicle, 2),
modSideSkirt = GetVehicleMod(vehicle, 3),
modExhaust = GetVehicleMod(vehicle, 4),
modFrame = GetVehicleMod(vehicle, 5),
modGrille = GetVehicleMod(vehicle, 6),
modHood = GetVehicleMod(vehicle, 7),
modFender = GetVehicleMod(vehicle, 8),
modRightFender = GetVehicleMod(vehicle, 9),
modRoof = GetVehicleMod(vehicle, 10),
modEngine = GetVehicleMod(vehicle, 11),
modBrakes = GetVehicleMod(vehicle, 12),
modTransmission = GetVehicleMod(vehicle, 13),
modHorns = GetVehicleMod(vehicle, 14),
modSuspension = GetVehicleMod(vehicle, 15),
modArmor = GetVehicleMod(vehicle, 16),
modTurbo = IsToggleModOn(vehicle, 18),
modSmokeEnabled = IsToggleModOn(vehicle, 20),
modXenon = IsToggleModOn(vehicle, 22),
modFrontWheels = GetVehicleMod(vehicle, 23),
modBackWheels = GetVehicleMod(vehicle, 24),
modCustomTiresF = GetVehicleModVariation(vehicle, 23),
modCustomTiresR = GetVehicleModVariation(vehicle, 24),
modPlateHolder = GetVehicleMod(vehicle, 25),
modVanityPlate = GetVehicleMod(vehicle, 26),
modTrimA = GetVehicleMod(vehicle, 27),
modOrnaments = GetVehicleMod(vehicle, 28),
modDashboard = GetVehicleMod(vehicle, 29),
modDial = GetVehicleMod(vehicle, 30),
modDoorSpeaker = GetVehicleMod(vehicle, 31),
modSeats = GetVehicleMod(vehicle, 32),
modSteeringWheel = GetVehicleMod(vehicle, 33),
modShifterLeavers = GetVehicleMod(vehicle, 34),
modAPlate = GetVehicleMod(vehicle, 35),
modSpeakers = GetVehicleMod(vehicle, 36),
modTrunk = GetVehicleMod(vehicle, 37),
modHydrolic = GetVehicleMod(vehicle, 38),
modEngineBlock = GetVehicleMod(vehicle, 39),
modAirFilter = GetVehicleMod(vehicle, 40),
modStruts = GetVehicleMod(vehicle, 41),
modArchCover = GetVehicleMod(vehicle, 42),
modAerials = GetVehicleMod(vehicle, 43),
modTrimB = GetVehicleMod(vehicle, 44),
modTank = GetVehicleMod(vehicle, 45),
modWindows = GetVehicleMod(vehicle, 46),
modLivery = GetVehicleMod(vehicle, 48),
}
else
return
end
end
function QBCore.Functions.SetVehicleProperties(vehicle, props)
if DoesEntityExist(vehicle) then
local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
SetVehicleModKit(vehicle, 0)
if props.plate then SetVehicleNumberPlateText(vehicle, props.plate) end
if props.plateIndex then SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex) end
if props.bodyHealth then SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0) end
if props.engineHealth then SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0) end
if props.fuelLevel then SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0) end
if props.dirtLevel then SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0) end
if props.color1 then SetVehicleColours(vehicle, props.color1, colorSecondary) end
if props.color2 then SetVehicleColours(vehicle, props.color1 or colorPrimary, props.color2) end
if props.pearlescentColor then SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor) end
if props.interiorColor then SetVehicleInteriorColor(vehicle, props.interiorColor) end
if props.dashboardColor then SetVehicleDashboardColour(vehicle, props.dashboardColor) end
if props.wheelColor then SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor) end
if props.wheels then SetVehicleWheelType(vehicle, props.wheels) end
if props.windowTint then SetVehicleWindowTint(vehicle, props.windowTint) end
if props.neonEnabled then
SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1])
SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2])
SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3])
SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4])
end
if props.extras then
for id,enabled in pairs(props.extras) do
if enabled then
SetVehicleExtra(vehicle, tonumber(id), 0)
else
SetVehicleExtra(vehicle, tonumber(id), 1)
end
end
end
if props.neonColor then SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3]) end
if props.modSmokeEnabled then ToggleVehicleMod(vehicle, 20, true) end
if props.tyreSmokeColor then SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3]) end
if props.modSpoilers then SetVehicleMod(vehicle, 0, props.modSpoilers, false) end
if props.modFrontBumper then SetVehicleMod(vehicle, 1, props.modFrontBumper, false) end
if props.modRearBumper then SetVehicleMod(vehicle, 2, props.modRearBumper, false) end
if props.modSideSkirt then SetVehicleMod(vehicle, 3, props.modSideSkirt, false) end
if props.modExhaust then SetVehicleMod(vehicle, 4, props.modExhaust, false) end
if props.modFrame then SetVehicleMod(vehicle, 5, props.modFrame, false) end
if props.modGrille then SetVehicleMod(vehicle, 6, props.modGrille, false) end
if props.modHood then SetVehicleMod(vehicle, 7, props.modHood, false) end
if props.modFender then SetVehicleMod(vehicle, 8, props.modFender, false) end
if props.modRightFender then SetVehicleMod(vehicle, 9, props.modRightFender, false) end
if props.modRoof then SetVehicleMod(vehicle, 10, props.modRoof, false) end
if props.modEngine then SetVehicleMod(vehicle, 11, props.modEngine, false) end
if props.modBrakes then SetVehicleMod(vehicle, 12, props.modBrakes, false) end
if props.modTransmission then SetVehicleMod(vehicle, 13, props.modTransmission, false) end
if props.modHorns then SetVehicleMod(vehicle, 14, props.modHorns, false) end
if props.modSuspension then SetVehicleMod(vehicle, 15, props.modSuspension, false) end
if props.modArmor then SetVehicleMod(vehicle, 16, props.modArmor, false) end
if props.modTurbo then ToggleVehicleMod(vehicle, 18, props.modTurbo) end
if props.modXenon then ToggleVehicleMod(vehicle, 22, props.modXenon) end
if props.xenonColor then SetVehicleXenonLightsColor(vehicle, props.xenonColor) end
if props.modFrontWheels then SetVehicleMod(vehicle, 23, props.modFrontWheels, false) end
if props.modBackWheels then SetVehicleMod(vehicle, 24, props.modBackWheels, false) end
if props.modCustomTiresF then SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomTiresF) end
if props.modCustomTiresR then SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomTiresR) end
if props.modPlateHolder then SetVehicleMod(vehicle, 25, props.modPlateHolder, false) end
if props.modVanityPlate then SetVehicleMod(vehicle, 26, props.modVanityPlate, false) end
if props.modTrimA then SetVehicleMod(vehicle, 27, props.modTrimA, false) end
if props.modOrnaments then SetVehicleMod(vehicle, 28, props.modOrnaments, false) end
if props.modDashboard then SetVehicleMod(vehicle, 29, props.modDashboard, false) end
if props.modDial then SetVehicleMod(vehicle, 30, props.modDial, false) end
if props.modDoorSpeaker then SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false) end
if props.modSeats then SetVehicleMod(vehicle, 32, props.modSeats, false) end
if props.modSteeringWheel then SetVehicleMod(vehicle, 33, props.modSteeringWheel, false) end
if props.modShifterLeavers then SetVehicleMod(vehicle, 34, props.modShifterLeavers, false) end
if props.modAPlate then SetVehicleMod(vehicle, 35, props.modAPlate, false) end
if props.modSpeakers then SetVehicleMod(vehicle, 36, props.modSpeakers, false) end
if props.modTrunk then SetVehicleMod(vehicle, 37, props.modTrunk, false) end
if props.modHydrolic then SetVehicleMod(vehicle, 38, props.modHydrolic, false) end
if props.modEngineBlock then SetVehicleMod(vehicle, 39, props.modEngineBlock, false) end
if props.modAirFilter then SetVehicleMod(vehicle, 40, props.modAirFilter, false) end
if props.modStruts then SetVehicleMod(vehicle, 41, props.modStruts, false) end
if props.modArchCover then SetVehicleMod(vehicle, 42, props.modArchCover, false) end
if props.modAerials then SetVehicleMod(vehicle, 43, props.modAerials, false) end
if props.modTrimB then SetVehicleMod(vehicle, 44, props.modTrimB, false) end
if props.modTank then SetVehicleMod(vehicle, 45, props.modTank, false) end
if props.modWindows then SetVehicleMod(vehicle, 46, props.modWindows, false) end
if props.modLivery then
SetVehicleMod(vehicle, 48, props.modLivery, false)
SetVehicleLivery(vehicle, props.modLivery)
end
end
end