feat: esx client compatibility

This commit is contained in:
Andyyy7666
2023-11-11 03:02:19 +01:00
parent c50003cfd8
commit f48ea5b4f3

View File

@@ -1,2 +1,386 @@
if not lib.table.contains(Config.compatibility, "esx") then return end if not lib.table.contains(Config.compatibility, "esx") then return end
NDCore.Game = {}
NDCore.Game.Utils = {}
NDCore.Scaleform = {}
NDCore.Scaleform.Utils = {}
NDCore.Streaming = {}
NDCore.UI = {}
NDCore.UI.HUD = {}
NDCore.UI.Menu = {}
local uiMetatable = {
__index = function(table, key)
if type(key) == "string" and key:match("^%a+$") then
return function()
print(("[^3WARNING^7] ESX Function '%s' is not compatible with NDCore!"):format(key))
end
end
end
}
setmetatable(NDCore.UI, uiMetatable)
setmetatable(NDCore.UI.HUD, uiMetatable)
setmetatable(NDCore.UI.Menu, uiMetatable)
local function exportHandler(resource, exportName, cb)
AddEventHandler(("__cfx_export_%s_%s"):format(resource, exportName), function(setCB)
setCB(cb)
end)
end
exportHandler("es_extended", "getSharedObject", function()
return NDCore
end)
function NDCore.GetPlayerData()
local player = NDCore.getPlayer()
player.Accounts = {
Bank = player.bank,
Money = player.Cash,
Black = player.Cash
}
-- add more here
return player
end
function NDCore.IsPlayerLoaded()
return NDCore.getPlayer() ~= nil
end
function NDCore.Progressbar(message, lenght, options)
local newOptions = {
duration = lenght,
label = message,
canCancel = true
}
if options.animation then
newOptions.anim = {}
if options.animation.type == "anim" then
if options.animation.dict then
newOptions.anim.dict = options.animation.dict,
end
if options.animation.lib then
newOptions.anim.clip = options.animation.lib
end
elseif options.animation.type == "Scenario" then
newOptions.anim.scenario = options.animation.Scenario
end
end
if options.FreezePlayer then FreezeEntityPosition(cache.ped, true) end
local complete = lib.progressBar(newOptions)
if options.FreezePlayer then FreezeEntityPosition(cache.ped, false) end
if newOptions.onFinish and complete then
newOptions.onFinish()
end
if newOptions.onCancel and not complete then
newOptions.onCancel()
end
return complete
end
function NDCore.SearchInventory(item, count)
local itemCount = exports.ox_inventory:Search(item)
return itemCount >= count and itemCount
end
function NDCore.SetPlayerData()
print("[^3WARNING^7] ESX Function 'SetPlayerData' is not compatible with NDCore!")
end
function NDCore.ShowAdvancedNotification()
print("[^3WARNING^7] ESX Function 'ShowAdvancedNotification' is not compatible with NDCore!")
end
function NDCore.ShowFloatingHelpNotification()
print("[^3WARNING^7] ESX Function 'ShowFloatingHelpNotification' is not compatible with NDCore!")
end
function NDCore.ShowHelpNotification()
print("[^3WARNING^7] ESX Function 'ShowHelpNotification' is not compatible with NDCore!")
end
function NDCore.ShowInventory()
exports.ox_inventory:openInventory("player", cache.serverId)
end
function NDCore.ShowNotification(msg, type, time)
NDCore.notify({
title = "Notification",
description = msg,
type = type == "info" and "inform" or type,
duration = time
})
end
function NDCore.TriggerServerCallback(name, cb, ...)
lib.callback(name, nil, cb, ...)
end
function NDCore.Streaming.RequestAnimDict(animDict, cb)
lib.requestAnimDict(animDict)
if cb then cb(animDict) end
return animDict
end
function NDCore.Streaming.RequestAnimSet(animSet, cb)
lib.requestAnimSet(animSet)
if cb then cb(animSet) end
return animSet
end
function NDCore.Streaming.RequestModel(model, cb)
lib.requestModel(model)
if cb then cb(model) end
return model
end
function NDCore.Streaming.RequestNamedPtfxAsset(assetName, cb)
lib.requestNamedPtfxAsset(assetName)
if cb then cb(assetName) end
return assetName
end
function NDCore.Streaming.RequestStreamedTextureDict(textureDict, cb)
lib.requestStreamedTextureDict(textureDict)
if cb then cb(textureDict) end
return textureDict
end
function NDCore.Streaming.RequestWeaponAsset(weaponHash, cb)
lib.requestWeaponAsset(weaponHash)
if cb then cb(weaponHash) end
return weaponHash
end
function NDCore.Scaleform.ShowBreakingNews()
print("[^3WARNING^7] ESX Function 'Scaleform.ShowBreakingNews' is not compatible with NDCore!")
end
function NDCore.Scaleform.ShowFreemodeMessage()
print("[^3WARNING^7] ESX Function 'Scaleform.ShowFreemodeMessage' is not compatible with NDCore!")
end
function NDCore.Scaleform.ShowPopupWarning()
print("[^3WARNING^7] ESX Function 'Scaleform.ShowPopupWarning' is not compatible with NDCore!")
end
function NDCore.Scaleform.ShowTrafficMovie()
print("[^3WARNING^7] ESX Function 'Scaleform.ShowTrafficMovie' is not compatible with NDCore!")
end
function NDCore.Scaleform.Utils.RequestScaleformMovie()
print("[^3WARNING^7] ESX Function 'Scaleform.Utils.RequestScaleformMovie' is not compatible with NDCore!")
end
function NDCore.Game.Utils.DrawText3D(coords, text, size, font)
local onScreen, x, y = World3dToScreen2d(coords.x, coords.y, coords.z)
if not onScreen then return end
SetTextScale(size or 0.4, size or 0.4)
SetTextFont(font or 4)
SetTextProportional(1)
SetTextEntry("STRING")
SetTextCentre(true)
SetTextColour(255, 255, 255, 255)
SetTextOutline()
AddTextComponentString(text)
DrawText(x, y)
end
function NDCore.Game.DeleteObject(object)
if not DoesEntityExist(object) then return end
DeleteEntity(object)
end
function NDCore.Game.DeleteVehicle(vehicle)
if not DoesEntityExist(vehicle) then return end
DeleteEntity(vehicle)
end
function NDCore.Game.GetClosestEntity(coords)
coords = coords or GetEntityCoords(cache.ped)
local loc = vec3(coords.x, coords.y, coords.z)
local entities = {lib.getClosestObject(loc), lib.getClosestPed(loc), lib.getClosestVehicle(loc)}
local closest = nil
local closestDistance = math.huge
for i = 1, #entities do
local ent = entities[i]
if DoesEntityExist(ent.object or ent.ped or ent.vehicle) then
local distance = #(loc-ent.coords)
if distance < closestDistance then
closest = ent
closestDistance = distance
end
end
end
return closest.object or closest.ped or closest.vehicle
end
function NDCore.Game.GetClosestObject(coords)
coords = coords or GetEntityCoords(cache.ped)
local loc = vec3(coords.x, coords.y, coords.z)
return lib.getClosestObject(loc).object
end
function NDCore.Game.GetClosestPed(coords)
coords = coords or GetEntityCoords(cache.ped)
local loc = vec3(coords.x, coords.y, coords.z)
return lib.getClosestPed(loc).ped
end
function NDCore.Game.GetClosestPlayer(coords)
coords = coords or GetEntityCoords(cache.ped)
local loc = vec3(coords.x, coords.y, coords.z)
local ply = lib.getClosestPlayer(loc)
return ply.playerId, #(ply.playerCoords-loc)
end
function NDCore.Game.GetClosestVehicle(coords)
coords = coords or GetEntityCoords(cache.ped)
local loc = vec3(coords.x, coords.y, coords.z)
return lib.getClosestVehicle(loc).vehicle
end
function NDCore.Game.GetObjects()
return GetGamePool("CObject")
end
function NDCore.Game.GetPedMugshot()
print("[^3WARNING^7] ESX Function 'Game.GetPedMugshot' is not compatible with NDCore!")
end
function NDCore.Game.GetPeds(onlyOtherPeds)
local peds = GetGamePool("CPed")
if onlyOtherPeds then
for i=1, #peds do
if peds[i] == cache.ped then
table.remove(peds, i)
end
end
end
return peds
end
function NDCore.Game.GetPlayers()
print("[^3WARNING^7] ESX Function 'Game.GetPlayers' is not compatible with NDCore!")
end
function NDCore.Game.GetPlayersInArea()
print("[^3WARNING^7] ESX Function 'Game.GetPlayersInArea' is not compatible with NDCore!")
end
function NDCore.Game.GetPlayersInArea()
print("[^3WARNING^7] ESX Function 'Game.GetPlayersInArea' is not compatible with NDCore!")
end
function NDCore.Game.GetVehicleInDirection()
print("[^3WARNING^7] ESX Function 'Game.GetVehicleInDirection' is not compatible with NDCore!")
end
function NDCore.Game.GetVehicleProperties(vehicle)
return lib.getVehicleProperties(vehicle)
end
function NDCore.Game.GetVehicles()
return GetGamePool("CVehicle")
end
function NDCore.Game.GetVehiclesInArea()
print("[^3WARNING^7] ESX Function 'Game.GetVehiclesInArea' is not compatible with NDCore!")
end
function NDCore.Game.IsSpawnPointClear()
print("[^3WARNING^7] ESX Function 'Game.IsSpawnPointClear' is not compatible with NDCore!")
end
function NDCore.Game.IsVehicleEmpty(vehicle)
for i=-1, 6 do
if not IsVehicleSeatFree(vehicle, i) then
return false
end
end
return true
end
function NDCore.Game.SetVehicleProperties(vehicle, props)
lib.setVehicleProperties(vehicle, props)
end
function NDCore.Game.SpawnLocalObject(model, coords, cb)
if type(model) == "string" then
model = GetHashKey(model)
end
local entity = CreateObject(model, coords.x, coords.y, coords.z, false, false, false)
entity = lib.waitFor(function()
if DoesEntityExist(entity) end
end)
if cb then
cb(entity)
end
return entity
end
function NDCore.Game.SpawnLocalVehicle(model, coords, heading, cb)
if type(model) == "string" then
model = GetHashKey(model)
end
local entity = CreateVehicle(model, coords.x, coords.y, coords.z, heading, false, false, false)
entity = lib.waitFor(function()
if DoesEntityExist(entity) end
end)
if cb then
cb(entity)
end
return entity
end
function NDCore.Game.SpawnObject(model, coords, cb)
if type(model) == "string" then
model = GetHashKey(model)
end
local entity = CreateObject(model, coords.x, coords.y, coords.z, true, false, false)
entity = lib.waitFor(function()
if DoesEntityExist(entity) end
end)
if cb then
cb(entity)
end
return entity
end
function NDCore.Game.SpawnVehicle(model, coords, heading, cb)
if type(model) == "string" then
model = GetHashKey(model)
end
local entity = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false, false)
entity = lib.waitFor(function()
if DoesEntityExist(entity) end
end)
if cb then
cb(entity)
end
return entity
end
function NDCore.Game.Teleport(entity, coords, cb)
if DoesEntityExist(entity) then
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
while not HasCollisionLoadedAroundEntity(entity) do
Wait(0)
end
SetEntityCoords(entity, coords.x, coords.y, coords.z, false, false, false, false)
SetEntityHeading(entity, coords.w or coords.heading or 0.0)
end
if cb then
cb()
end
end