mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-09-04 16:23:21 +00:00
!refactor(es_extended): Completely New Onesync spawing
THIS REQUIRES ARTIFACT 5949 OR ABOVE ASWELL AS ONESYNC INFINITY
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -71,6 +71,8 @@ files {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
'/server:5949',
|
||||
'/onesync',
|
||||
'oxmysql',
|
||||
'spawnmanager',
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user