forked from Simnation/Main
88 lines
No EOL
2.1 KiB
Lua
88 lines
No EOL
2.1 KiB
Lua
---@type number | nil
|
|
local cam = nil
|
|
---@type table | nil
|
|
local currentDialogue = nil
|
|
|
|
---@param ped number
|
|
local createCam = function(ped)
|
|
local coords = GetEntityCoords(ped, true)
|
|
local x, y, z = coords.x + GetEntityForwardX(ped) * 1.2, coords.y + GetEntityForwardY(ped) * 1.2, coords.z + 0.52
|
|
local camRot = GetEntityRotation(ped, 2)
|
|
cam = CreateCamWithParams("DEFAULT_SCRIPTED_CAMERA", x, y, z, camRot.x, camRot.y, camRot.z + 181.0, GetGameplayCamFov(), false, 0)
|
|
SetCamActive(cam, true)
|
|
RenderScriptCams(true, true, 2000, true, true)
|
|
end
|
|
|
|
local destroyCamera = function()
|
|
RenderScriptCams(false, true, 2000, true, false)
|
|
DestroyCam(cam, false)
|
|
end
|
|
|
|
---@param data table
|
|
local showDialogue = function(data)
|
|
if data.ped then
|
|
createCam(data.ped)
|
|
end
|
|
|
|
for ok, ov in pairs(data.options) do
|
|
if ov.canInteract == nil then ov.canInteract = true end
|
|
end
|
|
|
|
currentDialogue = data
|
|
|
|
SetEntityAlpha(cache.ped, 0, true)
|
|
|
|
SendNUIMessage({
|
|
action = 'dialogue',
|
|
data = {
|
|
label = data.label,
|
|
speech = data.speech,
|
|
options = data.options,
|
|
}
|
|
})
|
|
SendNUIMessage({
|
|
action = 'setVisibleDialogue',
|
|
data = true
|
|
})
|
|
SetNuiFocus(true, true)
|
|
end
|
|
exports("showDialogue", showDialogue)
|
|
|
|
RegisterNuiCallback('executeAction', function(data, cb)
|
|
if data.options then
|
|
for ok, ov in pairs(currentDialogue.options) do
|
|
if ov.id == data.id then
|
|
if ov.action then
|
|
ov.action()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if data.close then
|
|
SendNUIMessage({
|
|
action = 'setVisibleDialogue',
|
|
data = false
|
|
})
|
|
SetNuiFocus(false, false)
|
|
destroyCamera()
|
|
ResetEntityAlpha(cache.ped)
|
|
currentDialogue = nil
|
|
end
|
|
cb(true)
|
|
end)
|
|
|
|
RegisterNuiCallback('hideFrame', function(data, cb)
|
|
SendNUIMessage({
|
|
action = data.name,
|
|
data = false
|
|
})
|
|
SetNuiFocus(false, false)
|
|
|
|
if data.name then
|
|
destroyCamera()
|
|
ResetEntityAlpha(cache.ped)
|
|
currentDialogue = nil
|
|
end
|
|
cb(true)
|
|
end) |