Quick tidy and optimizations of a few functions

This commit is contained in:
Jim Shield
2025-09-05 14:37:39 +01:00
parent 0caeca4824
commit fffef0c228
6 changed files with 154 additions and 73 deletions

View File

@@ -463,7 +463,7 @@ function PerformRaycast(startCoords, endCoords, entity, flags)
local shapeTest = StartExpensiveSynchronousShapeTestLosProbe( local shapeTest = StartExpensiveSynchronousShapeTestLosProbe(
startCoords.x, startCoords.y, startCoords.z, startCoords.x, startCoords.y, startCoords.z,
endCoords.x, endCoords.y, endCoords.z, endCoords.x, endCoords.y, endCoords.z,
flags or 4294967295, entity, 0 flags or 4294967295, entity, 4
) )
return GetShapeTestResult(shapeTest) return GetShapeTestResult(shapeTest)

View File

@@ -1320,7 +1320,7 @@ function hasItem(items, amount, src)
end end
end end
end end
for k, v in pairs(hasTable) do for _, v in pairs(hasTable) do
if not v.hasItem then if not v.hasItem then
return false, hasTable return false, hasTable
end end
@@ -1410,31 +1410,39 @@ end
--- ``` --- ```
function createUseableItem(item, funct) function createUseableItem(item, funct)
if doesItemExist(item) then if doesItemExist(item) then
local itemResource = "" local useableFunc = {
if isStarted(ESXExport) then { framework = ESXExport,
itemResource = ESXExport func = function(item, funct)
while not ESX do Wait(0) end while not ESX do Wait(0) end
ESX.RegisterUsableItem(item, funct) ESX.RegisterUsableItem(item, funct)
end,
elseif isStarted(QBExport) and not isStarted(QBXExport) then },
itemResource = QBExport { framework = QBXExport,
Core.Functions.CreateUseableItem(item, funct) func = function(item, funct)
exports[QBXExport]:CreateUseableItem(item, funct)
elseif isStarted(QBXExport) then end,
itemResource = QBXExport },
exports[QBXExport]:CreateUseableItem(item, funct) { framework = QBExport,
func = function(item, funct)
elseif isStarted(RSGExport) then Core.Functions.CreateUseableItem(item, funct)
itemResource = RSGExport end,
Core.Functions.CreateUseableItem(item, funct) },
{ framework = RSGExport,
func = function(item, funct)
Core.Functions.CreateUseableItem(item, funct)
end,
},
}
for i = 1, #useableFunc do
local framework = useableFunc[i]
if isStarted(framework.framework) then
debugPrint("^6Bridge^7: ^2Registering ^3UsableItem^2 with ^4"..framework.framework.."^7:", item)
framework.func(item, funct)
return
end
end end
debugPrint("^4ERROR^7: No supported framework detected for registering usable item: ^3"..item.."^7")
if itemResource ~= "" then
debugPrint("^6Bridge^7: ^2Registering ^3UsableItem^2 with ^4"..itemResource.."^7:", item)
else
debugPrint("^4ERROR^7: No supported framework detected for registering usable item: ^3"..item.."^7")
end
else else
print("^1ERROR^7: ^1Tried to make item usable but it didn't exist^7: "..item) print("^1ERROR^7: ^1Tried to make item usable but it didn't exist^7: "..item)
end end
@@ -2312,6 +2320,7 @@ RegisterNetEvent(getScript()..":server:stashRemoveItem", stashRemoveItem)
function stashhasItem(stashItems, items, amount) function stashhasItem(stashItems, items, amount)
local invs = { OXInv, QSInv, CoreInv, CodeMInv, OrigenInv, TgiannInv, JPRInv, QBInv, PSInv, RSGInv } local invs = { OXInv, QSInv, CoreInv, CodeMInv, OrigenInv, TgiannInv, JPRInv, QBInv, PSInv, RSGInv }
local foundInv = "" local foundInv = ""
for _, inv in ipairs(invs) do for _, inv in ipairs(invs) do
if isStarted(inv) then if isStarted(inv) then
foundInv = inv:gsub("%-", "^7-^6"):gsub("%_", "^7_^6") foundInv = inv:gsub("%-", "^7-^6"):gsub("%_", "^7_^6")

View File

@@ -152,35 +152,57 @@ end
--- toggleDuty() -- Player receives a notification of their new duty status. --- toggleDuty() -- Player receives a notification of their new duty status.
--- ``` --- ```
function toggleDuty() function toggleDuty()
if isStarted(QBExport) or isStarted(QBXExport) then local dutyFunc = {
TriggerServerEvent("QBCore:ToggleDuty") { framework = QBExport,
Wait(100) func = function()
onDuty = getPlayer().onDuty TriggerServerEvent("QBCore:ToggleDuty")
Wait(100)
onDuty = getPlayer().onDuty
end
},
{ framework = QBXExport,
func = function()
TriggerServerEvent("QBCore:ToggleDuty")
Wait(100)
onDuty = getPlayer().onDuty
end
},
{ framework = RSGExport,
func = function()
TriggerServerEvent("RSGCore:ToggleDuty")
Wait(100)
onDuty = getPlayer().onDuty
end
},
{ framework = ESXExport,
func = function()
local tempJob = ESX.GetPlayerData().job
tempJob.onDuty = not onDuty
ESX.SetPlayerData("job", tempJob)
onDuty = getPlayer().onDuty
if onDuty then
triggerNotify(nil, "Now on duty", "success")
else
triggerNotify(nil, "Now off duty", "success")
end
end
},
}
elseif isStarted(RSGExport) then for i = 1, #dutyFunc do
TriggerServerEvent("RSGCore:ToggleDuty") local framework = dutyFunc[i]
Wait(100) if isStarted(framework.framework) then
onDuty = getPlayer().onDuty framework.func()
return
elseif isStarted(ESXExport) then
local tempJob = ESX.GetPlayerData().job
tempJob.onDuty = not onDuty
ESX.SetPlayerData("job", tempJob)
onDuty = getPlayer().onDuty
if onDuty then
triggerNotify(nil, "Now on duty", "success")
else
triggerNotify(nil, "Now off duty", "success")
end end
end
-- fallback
onDuty = not onDuty
if onDuty then
triggerNotify(nil, "Now on duty", "success")
else else
onDuty = not onDuty triggerNotify(nil, "Now off duty", "success")
if onDuty then
triggerNotify(nil, "Now on duty", "success")
else
triggerNotify(nil, "Now off duty", "success")
end
end end
end end

View File

@@ -53,7 +53,10 @@ local polyCreation = {
return zone return zone
end, end,
createCircle = function(data) createCircle = function(data)
local zone = CircleZone:Create(data.coords, data.radius, { name = data.name, debugPoly = debugMode }) local zone = CircleZone:Create(data.coords, data.radius, {
name = data.name,
debugPoly = data.debug
})
zone:onPlayerInOut(function(isPointInside) zone:onPlayerInOut(function(isPointInside)
if isPointInside then if isPointInside then
data.onEnter() data.onEnter()

View File

@@ -22,7 +22,8 @@ local skillCheckFunc = {
"2", "2",
"3", "3",
"4" "4"
}) }
)
if Skillbar then if Skillbar then
return true return true
else else

View File

@@ -105,16 +105,28 @@ end
function getVehicleProperties(vehicle) function getVehicleProperties(vehicle)
if not vehicle then return nil end if not vehicle then return nil end
local properties = {} local propertyFunc = {
if isStarted(QBExport) and not isStarted(QBXExport) then { framework = OXLibExport,
properties = Core.Functions.GetVehicleProperties(vehicle) func = function(vehicle)
debugPrint("^6Bridge^7: ^2Getting Vehicle Properties ^7[^6"..QBExport.."^7] - [^3"..vehicle.."^7] - [^3"..GetEntityModel(vehicle).."^7/^3"..properties.model.."^7] - [^3"..properties.plate.."^7]") return lib.getVehicleProperties(vehicle)
end,
elseif isStarted(OXLibExport) then },
properties = lib.getVehicleProperties(vehicle) { framework = QBExport,
debugPrint("^6Bridge^7: ^2Getting Vehicle Properties ^7[^6"..OXLibExport.."^7] - [^3"..vehicle.."^7] - [^3"..GetEntityModel(vehicle).."^7/^3"..properties.model.."^7] - [^3"..properties.plate.."^7]") func = function(vehicle)
return Core.Functions.GetVehicleProperties(vehicle)
end,
},
}
for i = 1, #propertyFunc do
local prop = propertyFunc[i]
if isStarted(prop.framework) then
local properties = prop.func(vehicle)
debugPrint("^6Bridge^7: ^2Getting Vehicle Properties ^7[^6"..prop.framework.."^7] - [^3"..vehicle.."^7] - [^3"..GetEntityModel(vehicle).."^7/^3"..properties.model.."^7] - [^3"..properties.plate.."^7]")
return properties
end
end end
return properties
return nil
end end
--- Sets the properties of a given vehicle if changes are detected. --- Sets the properties of a given vehicle if changes are detected.
@@ -228,7 +240,7 @@ function pushVehicle(entity)
if entity ~= 0 and DoesEntityExist(entity) then if entity ~= 0 and DoesEntityExist(entity) then
-- Request network control if not already controlled. -- Request network control if not already controlled.
if not NetworkHasControlOfEntity(entity) then if not NetworkHasControlOfEntity(entity) then
debugPrint("^6Bridge^7: ^3pushVehicle^7: ^2Requesting network control of vehicle^7.") debugPrint("^6Bridge^7: ^3pushEnt^7: ^2Requesting network control of vehicle^7.")
NetworkRequestControlOfEntity(entity) NetworkRequestControlOfEntity(entity)
local timeout = 2000 local timeout = 2000
while timeout > 0 and not NetworkHasControlOfEntity(entity) do while timeout > 0 and not NetworkHasControlOfEntity(entity) do
@@ -236,13 +248,13 @@ function pushVehicle(entity)
timeout = timeout - 100 timeout = timeout - 100
end end
if NetworkHasControlOfEntity(entity) then if NetworkHasControlOfEntity(entity) then
debugPrint("^6Bridge^7: ^3pushVehicle^7: ^2Network now has control of the entity^7.") debugPrint("^6Bridge^7: ^3pushEnt^7: ^2Network now has control of the entity^7.")
end end
end end
-- Set as mission entity if not already set. -- Set as mission entity if not already set.
if not IsEntityAMissionEntity(entity) then if not IsEntityAMissionEntity(entity) then
debugPrint("^6Bridge^7: ^3pushVehicle^7: ^2Setting vehicle as a ^7'^2mission^7' ^2entity^7.") debugPrint("^6Bridge^7: ^3pushEnt^7: ^2Setting vehicle as a ^7'^2mission^7' ^2entity^7.")
SetEntityAsMissionEntity(entity, true, true) SetEntityAsMissionEntity(entity, true, true)
local timeout = 2000 local timeout = 2000
while timeout > 0 and not IsEntityAMissionEntity(entity) do while timeout > 0 and not IsEntityAMissionEntity(entity) do
@@ -250,18 +262,23 @@ function pushVehicle(entity)
timeout = timeout - 100 timeout = timeout - 100
end end
if IsEntityAMissionEntity(entity) then if IsEntityAMissionEntity(entity) then
debugPrint("^6Bridge^7: ^3pushVehicle^7: ^2Vehicle is a ^7'^2mission^7'^2 entity^7.") debugPrint("^6Bridge^7: ^3pushEnt^7: ^2Vehicle is a ^7'^2mission^7'^2 entity^7.")
end end
end end
end end
end end
-- add entitty named version
function pushEnt(...) pushVehicle(...) end
--- Finds the closest vehicle to the specified coordinates. --- Finds the closest vehicle to the specified coordinates.
--- The function uses different APIs based on whether a source is provided. --- The function uses different APIs based on whether a source is provided.
--- ---
--- @param coords table|vector3 (Optional) The reference coordinates. If nil, uses the player's position. --- @param coords table|vector3 (Optional) The reference coordinates. If nil, uses the player's position.
--- @param src boolean (Optional) If true, uses GetPlayerPed(source) and GetAllVehicles. --- @param src boolean (Optional) If true, uses GetPlayerPed(source) and GetAllVehicles.
--- @return number|number closestVehicle|closestDistance The closest vehicle entity and its distance. --- @return number closestVehicle The closest vehicle entity and its distance.
--- @return number closestDistance The distance of the closest vehicle.
--- ---
--- @usage --- @usage
--- ```lua --- ```lua
@@ -271,9 +288,11 @@ function getClosestVehicle(coords, src)
local ped, vehicles, closestDistance, closestVehicle local ped, vehicles, closestDistance, closestVehicle
if src then if src then
-- if checking server side cache src's ped and use server native
ped = GetPlayerPed(src) ped = GetPlayerPed(src)
vehicles = GetAllVehicles() vehicles = GetAllVehicles()
else else
-- if checking client side cache local ped and use client native
ped = PlayerPedId() ped = PlayerPedId()
vehicles = GetGamePool('CVehicle') vehicles = GetGamePool('CVehicle')
end end
@@ -290,7 +309,7 @@ function getClosestVehicle(coords, src)
for i = 1, #vehicles, 1 do for i = 1, #vehicles, 1 do
local vehicleCoords = GetEntityCoords(vehicles[i]) local vehicleCoords = GetEntityCoords(vehicles[i])
local distance = #(vehicleCoords - coords) local distance = #(vehicleCoords - coords.xyz)
if closestDistance == -1 or distance < closestDistance then if closestDistance == -1 or distance < closestDistance then
closestDistance = distance closestDistance = distance
@@ -311,19 +330,46 @@ end
--- local plate = "ABCD1234" --- local plate = "ABCD1234"
--- local isVehicleOwned = isVehicleOwned(plate) --- local isVehicleOwned = isVehicleOwned(plate)
--- ``` --- ```
local vehiclesOwned = {} local vehiclesOwned = {}
function isVehicleOwned(plate) function isVehicleOwned(plate)
vehDatabase = "player_vehicles" -- If already checked, cache it to reduce database calls
if isStarted(ESXExport) then vehDatabase = "owned_vehicles"
elseif isStarted(OXCoreExport) then vehDatabase = "vehicles" end
if vehiclesOwned[plate] == true then if vehiclesOwned[plate] == true then
return true return true
else else
local result = MySQL.query.await("SELECT 1 from "..vehDatabase.." WHERE plate = ?", { plate }) -- Find frameworks vehicle table and search sql for if vehicle plate is owned
local sqlTable = "player_vehicles"
local vehDatabase = {
{ framework = ESXExport,
sqlTable = "owned_vehicles"
},
{ framework = QBExport,
sqlTable = "player_vehicles"
},
{ framework = QBXExport,
sqlTable = "player_vehicles"
},
{ framework = OXCoreExport,
sqlTable = "owned_vehicles"
},
}
for i = 1, #vehDatabase do
local framework = vehDatabase[i]
if isStarted(framework.framework) then
sqlTable = framework.sqlTable
end
end
local result = MySQL.query.await("SELECT 1 from "..sqlTable.." WHERE plate = ?", { plate })
if json.encode(result) ~= "[]" then if json.encode(result) ~= "[]" then
vehiclesOwned[plate] = true vehiclesOwned[plate] = true -- Cache ownership for later checks
return true return true
else else
return false return false