!refactor(es_extended): Completely New Onesync spawing

THIS REQUIRES ARTIFACT 5949 OR ABOVE ASWELL AS ONESYNC INFINITY
This commit is contained in:
Mycroft
2022-10-14 17:09:04 +01:00
parent 2d2d53da33
commit 505fb6da6f
6 changed files with 92 additions and 59 deletions
+34 -46
View File
@@ -196,9 +196,17 @@ end)
AddStateBagChangeHandler('VehicleProperties', nil, function(bagName, key, value)
if value then
Wait(0)
local NetId = tonumber(bagName:gsub('entity:', ''), 10)
local NetId = value.NetId
local Vehicle = NetworkGetEntityFromNetworkId(NetId)
local Tries = 0
while not DoesEntityExist(Vehicle) do
local Vehicle = NetworkGetEntityFromNetworkId(NetId)
Wait(100)
Tries = Tries + 1
if Tries > 300 then
break
end
end
if NetworkGetEntityOwner(Vehicle) == PlayerId() then
ESX.Game.SetVehicleProperties(Vehicle, value)
end
@@ -310,50 +318,6 @@ AddEventHandler('esx:setJob', function(Job)
ESX.SetPlayerData('job', Job)
end)
RegisterNetEvent('esx:spawnVehicle')
AddEventHandler('esx:spawnVehicle', function(vehicle)
ESX.TriggerServerCallback("esx:isUserAdmin", function(admin)
if admin then
local model = (type(vehicle) == 'number' and vehicle or joaat(vehicle))
if IsModelInCdimage(model) then
local playerCoords, playerHeading = GetEntityCoords(ESX.PlayerData.ped), GetEntityHeading(ESX.PlayerData.ped)
ESX.Game.SpawnVehicle(model, playerCoords, playerHeading, function(vehicle)
TaskWarpPedIntoVehicle(ESX.PlayerData.ped, vehicle, -1)
SetVehicleDirtLevel(vehicle, 0)
SetVehicleFuelLevel(vehicle, 100.0)
-- SetVehicleCustomSecondaryColour(vehicle, 55, 140, 191) -- ESX Blue
SetEntityAsMissionEntity(vehicle, true, true) -- Persistant Vehicle
-- Max out vehicle upgrades
if Config.MaxAdminVehicles then
SetVehicleExplodesOnHighExplosionDamage(vehicle, true)
SetVehicleModKit(vehicle, 0)
SetVehicleMod(vehicle, 11, 3, false) -- modEngine
SetVehicleMod(vehicle, 12, 2, false) -- modBrakes
SetVehicleMod(vehicle, 13, 2, false) -- modTransmission
SetVehicleMod(vehicle, 15, 3, false) -- modSuspension
SetVehicleMod(vehicle, 16, 4, false) -- modArmor
ToggleVehicleMod(vehicle, 18, true) -- modTurbo
SetVehicleTurboPressure(vehicle, 100.0)
SetVehicleNumberPlateText(vehicle, "ESX KISS")
SetVehicleNumberPlateTextIndex(vehicle, 1)
SetVehicleNitroEnabled(vehicle, true)
for i=0, 3 do
SetVehicleNeonLightEnabled(vehicle, i, true)
end
SetVehicleNeonLightsColour(vehicle, 55, 140, 191) -- ESX Blue
end
end)
else
ESX.ShowNotification('Invalid vehicle model.')
end
end
end)
end)
if not Config.OxInventory then
RegisterNetEvent('esx:createPickup')
AddEventHandler('esx:createPickup', function(pickupId, label, coords, type, name, components, tintIndex)
@@ -742,6 +706,30 @@ AddEventHandler("esx:freezePlayer", function(input)
end
end)
RegisterNetEvent("esx:GetVehicleType", function(Model, Request)
local Model = Model
local VehicleType = GetVehicleClassFromName(Model)
local type = "automobile"
if VehicleType == 15 then
type = "heli"
elseif VehicleType == 16 then
type = "plane"
elseif VehicleType == 14 then
type = "boat"
elseif VehicleType == 11 then
type = "trailer"
elseif VehicleType == 21 then
type = "train"
elseif VehicleType == 13 or VehicleType == 8 then
type = "bike"
end
if Model == `submersible` or Model == `submersible2` then
type = "submarine"
end
TriggerServerEvent("esx:ReturnVehicleType", type, Request)
end)
local DoNotUse = {
'essentialmode',
'es_admin2',
+2
View File
@@ -71,6 +71,8 @@ files {
}
dependencies {
'/server:5949',
'/onesync',
'oxmysql',
'spawnmanager',
}
+21 -2
View File
@@ -31,13 +31,32 @@ ESX.RegisterCommand('car', 'admin', function(xPlayer, args, showError)
{name = "ID", value = xPlayer.source, inline = true},
{name = "Vehicle", value = args.car, inline = true}
})
xPlayer.triggerEvent('esx:spawnVehicle', args.car)
local upgrades = Config.MaxAdminVehicles and {
plate = "ADMINCAR",
modEngine = 3,
modBrakes = 2,
modTransmission = 2,
modSuspension = 3,
modArmor = true,
windowTint = 1,
} or {}
local coords = xPlayer.getCoords(true)
local PlayerPed = GetPlayerPed(xPlayer.source)
ESX.OneSync.SpawnVehicle(args.car, coords - vector3(0,0, 0.9), GetEntityHeading(PlayerPed), upgrades, function(networkId)
local vehicle = NetworkGetEntityFromNetworkId(networkId)
Wait(250)
TaskWarpPedIntoVehicle(PlayerPed, vehicle, -1)
end)
end, false, {help = TranslateCap('command_car'), validate = false, arguments = {
{name = 'car',validate = false, help = TranslateCap('command_car_car'), type = 'string'}
}})
ESX.RegisterCommand({'cardel', 'dv'}, 'admin', function(xPlayer, args, showError)
local Vehicles = ESX.OneSync.GetVehiclesInArea(xPlayer.getCoords(true), tonumber(args.radius) or 4)
local PedVehicle = GetVehiclePedIsIn(GetPlayerPed(xPlayer.source), false)
if DoesEntityExist(PedVehicle) then
DeleteEntity(PedVehicle)
end
local Vehicles = ESX.OneSync.GetVehiclesInArea(GetEntityCoords(GetPlayerPed(xPlayer.source)), tonumber(args.radius) or 5.0)
for i=1, #Vehicles do
local Vehicle = NetworkGetEntityFromNetworkId(Vehicles[i])
if DoesEntityExist(Vehicle) then
+9
View File
@@ -5,6 +5,8 @@ ESX.Items = {}
Core = {}
Core.UsableItemsCallbacks = {}
Core.ServerCallbacks = {}
Core.ClientCallbacks = {}
Core.CurrentRequestId = 0
Core.TimeoutCount = -1
Core.CancelledTimeouts = {}
Core.RegisteredCommands = {}
@@ -113,3 +115,10 @@ AddEventHandler('esx:triggerServerCallback', function(name, requestId,Invoke, ..
TriggerClientEvent('esx:serverCallback', source, requestId,Invoke, ...)
end, ...)
end)
RegisterNetEvent("esx:ReturnVehicleType", function(Type, Request)
if Core.ClientCallbacks[Request] then
Core.ClientCallbacks[Request](Type)
Core.ClientCallbacks[Request] = nil
end
end)
+6
View File
@@ -265,6 +265,12 @@ function ESX.GetIdentifier(playerId)
end
end
function ESX.GetVehicleType(Vehicle, Player, cb)
Core.CurrentRequestId = Core.CurrentRequestId < 65535 and Core.CurrentRequestId + 1 or 0
Core.ClientCallbacks[Core.CurrentRequestId] = cb
TriggerClientEvent("esx:GetVehicleType", Player, Vehicle, Core.CurrentRequestId)
end
function ESX.DiscordLog(name, title, color, message)
local webHook = Config.DiscordLogs.Webhooks[name] or Config.DiscordLogs.Webhooks.default
+20 -11
View File
@@ -59,24 +59,33 @@ end
---@param model number|string
---@param coords vector3|table
---@param heading number
---@param autoMobile boolean
---@param Properties table
---@param cb function
function ESX.OneSync.SpawnVehicle(model, coords, heading, autoMobile, Properties, cb)
function ESX.OneSync.SpawnVehicle(model, coords, heading, Properties, cb)
model = type(model) == 'string' and joaat(model) or model
Properties = Properties or {}
local coords = type(coords) == "vector3" and coords or vector3(coords.x, coords.y, coords.z)
if type(autoMobile) ~= 'boolean' then
return
end
local vector = type(coords) == "vector3" and coords or vec(coords.x, coords.y, coords.z)
CreateThread(function()
local SpawnedEntity = autoMobile and Citizen.InvokeNative(`CREATE_AUTOMOBILE`, model, coords.x, coords.y, coords.z, heading) or CreateVehicle(model, coords, heading, true, true)
while not DoesEntityExist(SpawnedEntity) do
local PlayerCount = ESX.Table.SizeOf(ESX.Players)
local xPlayer = ESX.Players[math.random(1, PlayerCount)]
local tries = 0
while not xPlayer do
Wait(0)
xPlayer = ESX.Players[math.random(1, PlayerCount)]
tries += 1
if tries > 100 then
print("[^2ERROR^7] Failed to find a valid player to spawn vehicle")
return
end
end
Entity(SpawnedEntity).state:set('VehicleProperties', Properties, true)
local netID = NetworkGetNetworkIdFromEntity(SpawnedEntity)
cb(netID)
ESX.GetVehicleType(model, xPlayer.source, function(Type)
local SpawnedEntity = CreateVehicleServerSetter(model, Type, vector, heading)
Wait(250)
local NetworkId = NetworkGetNetworkIdFromEntity(SpawnedEntity)
Properties.NetId = NetworkId
Entity(SpawnedEntity).state:set('VehicleProperties', Properties, true)
cb(NetworkId)
end)
end)
end