Scripts/resources/[qb]/[qb_extras]/qb-notepad/client.lua

179 lines
5.9 KiB
Lua
Raw Permalink Normal View History

2024-12-29 20:07:50 +00:00
-- 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)