1
0
Fork 0
forked from Simnation/Main
Main/resources/[tools]/dialog/client/main.lua

125 lines
3.3 KiB
Lua
Raw Normal View History

2025-07-20 19:03:04 +02:00
Open = false
cam = nil
Peds = {}
local Actions = {}
if Config.FrameworkLoadinEvent ~= '' then
RegisterNetEvent(Config.FrameworkLoadinEvent, function()
SpawnPeds()
end)
end
AddEventHandler('onResourceStart', function(resourceName)
if (GetCurrentResourceName() == resourceName) then
if #Config.peds ~= 0 then SpawnPeds() end
end
end)
---@param ped number # The id of the ped
---@param data table # The data for the interaction
---@param zoom number # Camera zoom level (optional, default: 40.0)
---@param x number # Camera X position (optional, default: 0)
---@param y number # Camera Y position (optional, default: 1.5)
---@param z number # Camera Z position (optional, default: 0.3)
---@param rotX number # Camera X rotation (optional, default: 0.0)
---@param rotY number # Camera Y rotation (optional, default: 0.0)
---@param rotZ number # Camera Z rotation (optional, default: GetEntityHeading(ped) + 180)
OpenDialog = function(ped, data, zoom, x, y, z, rotX, rotY, rotZ)
-- Setting defaults
local newX, newY, newZ = x or 0, y or 1.5, z or 0.3
local newRotX, newRotY, newRotZ = rotX or 0.0, rotY or 0.0, rotZ or GetEntityHeading(ped) + 180
local fov = zoom or 40.0
local coords = GetOffsetFromEntityInWorldCoords(ped, newX, newY, newZ)
-- camera setup
cam = CreateCam('DEFAULT_SCRIPTED_CAMERA', true)
SetEntityLocallyInvisible(PlayerPedId())
SetCamActive(cam, true)
RenderScriptCams(true, true, 500, true, true)
SetCamCoord(cam, coords.x, coords.y, coords.z + 0.2)
SetCamRot(cam, newRotX, newRotY, newRotZ, 5)
SetCamFov(cam, fov)
local Dialog = data
local function extractEvents(tbl)
for k, v in pairs(tbl) do
if type(v) == "table" then
extractEvents(v)
elseif k == "event" and type(v) == "string" then
Actions[v] = v
end
end
end
extractEvents(Dialog)
SetNuiFocus(true, true)
SendNUIMessage({
type = 'New',
data = data
})
Open = true
SetInvisible()
end
SetDialog = function(data)
SendNUIMessage({
type = 'Set',
data = data
})
end
CloseDialog = function()
Open = false
SendNUIMessage({
type = 'Close',
})
end
SpawnPedByID = function(id, data)
Peds[id] = data
SpawnPed(id, data)
end
DeletePedByID = function(id)
if Peds[id].ped then
exports['qb-target']:RemoveTargetEntity(Peds[id].ped)
DeleteEntity(Peds[id].ped)
Peds[id] = nil
end
end
RegisterNuiCallback("click", function(data, cb)
if data.data then
SendNUIMessage({
type = 'Continue',
data = data.data
})
cb(false)
return
end
if data.close then
SetNuiFocus(false, false)
if cam and DoesCamExist(cam) then
RenderScriptCams(false, true, 500, true, true)
DestroyCam(cam, true)
end
CloseDialog()
end
if Actions[data.event] then
if data.server then
TriggerServerEvent(Actions[data.event], data)
else
TriggerEvent(Actions[data.event], data)
end
end
end)
exports('OpenDialog', OpenDialog)
exports('SetDialog', SetDialog)
exports('CloseDialog', CloseDialog)
exports('SpawnPed', SpawnPedByID)