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) |