179 lines
5.9 KiB
Lua
179 lines
5.9 KiB
Lua
|
-- Settings
|
||
|
local guiEnabled = false
|
||
|
local hasOpened = false
|
||
|
local serverNotes = {}
|
||
|
local Controlkey = {["generalUse"] = {38,"E"},["generalUseSecondaryWorld"] = {47,"G"}}
|
||
|
|
||
|
function openGui()
|
||
|
SetPlayerControl(PlayerId(), 0, 0)
|
||
|
guiEnabled = true
|
||
|
SetNuiFocus(true)
|
||
|
Citizen.Trace("OPENING")
|
||
|
SendNUIMessage({openSection = "openNotepad"})
|
||
|
|
||
|
local inveh = IsPedSittingInAnyVehicle(PlayerPedId())
|
||
|
TriggerEvent("qb-notepad")
|
||
|
end
|
||
|
|
||
|
function openGuiRead(text)
|
||
|
SetPlayerControl(PlayerId(), 0, 0)
|
||
|
guiEnabled = true
|
||
|
SetNuiFocus(true)
|
||
|
Citizen.Trace("OPENING")
|
||
|
SendNUIMessage({openSection = "openNotepadRead", TextRead = text})
|
||
|
end
|
||
|
|
||
|
function loadAnimDict(dict)
|
||
|
while (not HasAnimDictLoaded(dict)) do
|
||
|
RequestAnimDict(dict)
|
||
|
Citizen.Wait(5)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function closeGui()
|
||
|
guiEnabled = false
|
||
|
ped = PlayerPedId();
|
||
|
ClearPedTasks(ped);
|
||
|
Citizen.Trace("CLOSING")
|
||
|
SetNuiFocus(false)
|
||
|
SendNUIMessage({openSection = "close"})
|
||
|
ClearPedSecondaryTask(PlayerPedId())
|
||
|
DetachEntity(prop, 1, 1)
|
||
|
DeleteObject(prop)
|
||
|
DetachEntity(secondaryprop, 1, 1)
|
||
|
DeleteObject(secondaryprop)
|
||
|
SetPlayerControl(PlayerId(), 1, 0)
|
||
|
end
|
||
|
|
||
|
RegisterNUICallback('close', function(data, cb)
|
||
|
closeGui()
|
||
|
cb('ok')
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback('drop', function(data, cb)
|
||
|
closeGui()
|
||
|
local coords = GetEntityCoords(PlayerPedId())
|
||
|
TriggerServerEvent("server:newNote",data.noteText,coords["x"],coords["y"],coords["z"])
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('qb-notepad', function()
|
||
|
local player = PlayerPedId()
|
||
|
local ad = "missheistdockssetup1clipboard@base"
|
||
|
|
||
|
local prop_name = prop_name or 'prop_notepad_01'
|
||
|
local secondaryprop_name = secondaryprop_name or 'prop_pencil_01'
|
||
|
|
||
|
if ( DoesEntityExist( player ) and not IsEntityDead( player )) then
|
||
|
loadAnimDict( ad )
|
||
|
if ( IsEntityPlayingAnim( player, ad, "base", 3 ) ) then
|
||
|
TaskPlayAnim( player, ad, "exit", 8.0, 1.0, -1, 49, 0, 0, 0, 0 )
|
||
|
Citizen.Wait(100)
|
||
|
ClearPedSecondaryTask(PlayerPedId())
|
||
|
DetachEntity(prop, 1, 1)
|
||
|
DeleteObject(prop)
|
||
|
DetachEntity(secondaryprop, 1, 1)
|
||
|
DeleteObject(secondaryprop)
|
||
|
else
|
||
|
local x,y,z = table.unpack(GetEntityCoords(player))
|
||
|
prop = CreateObject(GetHashKey(prop_name), x, y, z+0.2, true, true, true)
|
||
|
secondaryprop = CreateObject(GetHashKey(secondaryprop_name), x, y, z+0.2, true, true, true)
|
||
|
AttachEntityToEntity(prop, player, GetPedBoneIndex(player, 18905), 0.1, 0.02, 0.05, 10.0, 0.0, 0.0, true, true, false, true, 1, true) -- lkrp_notepadpad
|
||
|
AttachEntityToEntity(secondaryprop, player, GetPedBoneIndex(player, 58866), 0.12, 0.0, 0.001, -150.0, 0.0, 0.0, true, true, false, true, 1, true) -- pencil
|
||
|
TaskPlayAnim( player, ad, "base", 8.0, 1.0, -1, 49, 0, 0, 0, 0 )
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
function DrawText3Ds(x,y,z, text)
|
||
|
local onScreen,_x,_y=World3dToScreen2d(x,y,z)
|
||
|
local px,py,pz=table.unpack(GetGameplayCamCoords())
|
||
|
SetTextScale(0.35, 0.35)
|
||
|
SetTextFont(4)
|
||
|
SetTextProportional(1)
|
||
|
SetTextColour(255, 255, 255, 215)
|
||
|
SetTextEntry("STRING")
|
||
|
SetTextCentre(1)
|
||
|
AddTextComponentString(text)
|
||
|
DrawText(_x,_y)
|
||
|
local factor = (string.len(text)) / 370
|
||
|
DrawRect(_x,_y+0.0125, 0.015+ factor, 0.03, 41, 11, 41, 68)
|
||
|
end
|
||
|
|
||
|
Citizen.CreateThread(function()
|
||
|
while true do
|
||
|
Citizen.Wait(1)
|
||
|
|
||
|
|
||
|
if #serverNotes == 0 then
|
||
|
Citizen.Wait(1000)
|
||
|
else
|
||
|
local plyLoc = GetEntityCoords(PlayerPedId())
|
||
|
local closestNoteDistance = 900.0
|
||
|
local closestNoteId = 0
|
||
|
for i = 1, #serverNotes do
|
||
|
local distance = #(plyLoc - vector3( serverNotes[i]["x"],serverNotes[i]["y"],serverNotes[i]["z"]))
|
||
|
|
||
|
if distance < 10.0 then
|
||
|
DrawMarker(27, serverNotes[i]["x"],serverNotes[i]["y"],serverNotes[i]["z"]-0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 2.0, 255, 255,150, 75, 0, 0, 2, 0, 0, 0, 0)
|
||
|
end
|
||
|
|
||
|
if distance < closestNoteDistance then
|
||
|
closestNoteDistance = distance
|
||
|
closestNoteId = i
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if closestNoteDistance > 100.0 then
|
||
|
Citizen.Wait(math.ceil(closestNoteDistance*10))
|
||
|
end
|
||
|
if serverNotes[closestNoteId] ~= nil then
|
||
|
local distance = #(plyLoc - vector3( serverNotes[closestNoteId]["x"],serverNotes[closestNoteId]["y"],serverNotes[closestNoteId]["z"]))
|
||
|
if distance < 2.0 then
|
||
|
DrawMarker(27, serverNotes[closestNoteId]["x"],serverNotes[closestNoteId]["y"],serverNotes[closestNoteId]["z"]-0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3, 0.3, 2.0, 255, 255, 155, 75, 0, 0, 2, 0, 0, 0, 0)
|
||
|
DrawText3Ds(serverNotes[closestNoteId]["x"],serverNotes[closestNoteId]["y"],serverNotes[closestNoteId]["z"]-0.4, "~g~"..Controlkey["generalUse"][2].."~s~ to read,~g~ "..Controlkey["generalUseSecondaryWorld"][2].."~s~ to destroy")
|
||
|
|
||
|
if IsControlJustReleased(0, Controlkey["generalUse"][1]) then
|
||
|
openGuiRead(serverNotes[closestNoteId]["text"])
|
||
|
end
|
||
|
if IsControlJustReleased(0, Controlkey["generalUseSecondaryWorld"][1]) then
|
||
|
TriggerServerEvent("server:destroyNote",closestNoteId)
|
||
|
end
|
||
|
|
||
|
end
|
||
|
else
|
||
|
if serverNotes[closestNoteId] ~= nil then
|
||
|
table.remove(serverNotes,closestNoteId)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('Notepad:close', function()
|
||
|
closeGui()
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('client:updateNotes', function(serverNotesPassed)
|
||
|
serverNotes = serverNotesPassed
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('client:updateNotesAdd', function(newNote)
|
||
|
serverNotes[#serverNotes+1] = newNote
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('client:updateNotesRemove', function(id)
|
||
|
table.remove(serverNotes,id)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent('Notepad:open', function()
|
||
|
local veh = GetVehiclePedIsUsing(PlayerPedId())
|
||
|
if GetPedInVehicleSeat(veh, -1) ~= PlayerPedId() then
|
||
|
openGui()
|
||
|
guiEnabled = true
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
CreateThread(function()
|
||
|
Wait(200)
|
||
|
TriggerServerEvent("server:requestNotes")
|
||
|
end)
|