114 lines
4.9 KiB
Lua
114 lines
4.9 KiB
Lua
|
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
RegisterNetEvent('QBCore:Client:UpdateObject', function() QBCore = exports['qb-core']:GetCoreObject() end)
|
||
|
|
||
|
local Props, Targets, Notes = {}, {}, {}
|
||
|
|
||
|
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() TriggerEvent("jim-notepad:Client:SyncNotes") end)
|
||
|
AddEventHandler('onResourceStart', function(r) if GetCurrentResourceName() ~= r then return end TriggerEvent("jim-notepad:Client:SyncNotes") end)
|
||
|
|
||
|
RegisterNetEvent("jim-notepad:Client:SyncNotes", function(newNotes)
|
||
|
if not newNotes then
|
||
|
local p = promise.new()
|
||
|
QBCore.Functions.TriggerCallback('jim-notepad:Server:SyncNotes', function(cb) p:resolve(cb) end)
|
||
|
Notes = Citizen.Await(p)
|
||
|
else Notes = newNotes end
|
||
|
for k, v in pairs(Notes) do
|
||
|
if not Props[k] and Notes[k] then
|
||
|
Props[k] = makeProp({prop = `prop_amanda_note_01b`, coords = vec4(v.coords.x, v.coords.y, v.coords.z+0.07, v.coords.w)}, 1, 0)
|
||
|
Targets[k] =
|
||
|
exports['qb-target']:AddCircleZone(k, vec3(v.coords.x, v.coords.y, v.coords.z-1.1), 0.5, { name=k, debugPoly=Config.Debug, useZ=true, },
|
||
|
{ options = { { type = "server", event = "jim-notepad:Server:ReadNote", icon = "fas fa-receipt", label = Loc[Config.Lan].targetinfo["read"], noteid = k, }, },
|
||
|
distance = 1.5 })
|
||
|
end
|
||
|
end
|
||
|
for k in pairs(Props) do if not Notes[k] then exports["qb-target"]:RemoveZone(k) destroyProp(Props[k]) end end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent("jim-notepad:Client:CreateNote", function()
|
||
|
ExecuteCommand("e notepad")
|
||
|
local dialog = nil
|
||
|
if Config.Menu == "ox" then
|
||
|
dialog = exports.ox_lib:inputDialog(Loc[Config.Lan].menu["make_a_note"], {
|
||
|
{ type = 'input', label = "", placeholder = Loc[Config.Lan].text["enter_message"] },
|
||
|
{ type = 'checkbox', label = "Billede" },
|
||
|
{ type = 'checkbox', label = "Anonym" },
|
||
|
})
|
||
|
print(json.encode(dialog))
|
||
|
else
|
||
|
dialog = exports['qb-input']:ShowInput({
|
||
|
header = Loc[Config.Lan].menu["make_a_note"],
|
||
|
submitText = "Smid",
|
||
|
inputs = {
|
||
|
{ text = Loc[Config.Lan].text["enter_message"], name = "note", type = "text", isRequired = true, },
|
||
|
{ text = "", name = "checkbox", type = "checkbox",
|
||
|
options = { { value = "isImage", text = "Billede" }, { value = "isAnon", text = "Anonym" }, },
|
||
|
},
|
||
|
},
|
||
|
})
|
||
|
end
|
||
|
if dialog.note or dialog[1] then
|
||
|
local c = GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0.0, 0.6, 0.0)
|
||
|
loadAnimDict("pickup_object")
|
||
|
TaskPlayAnim(PlayerPedId(), "pickup_object", "pickup_low", 8.0, -8.0, -1, 0, 0, false, false, false)
|
||
|
ExecuteCommand("e c")
|
||
|
unloadAnimDict("pickup_object")
|
||
|
if toBool(dialog.isImage) or toBool(dialog[2]) then if Config.Menu == "ox" then dialog.image = "" else dialog.image = "<img src='"..dialog.note.."' width=200px>" end end
|
||
|
Wait(900)
|
||
|
TriggerServerEvent("jim-notepad:Server:CreateNote", {
|
||
|
coords = vec4(c.x, c.y, c.z, GetEntityHeading(PlayerPedId())),
|
||
|
message = dialog.note or dialog[1],
|
||
|
anon = dialog.isAnon or dialog[3],
|
||
|
image = dialog.image or nil,
|
||
|
})
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent("jim-notepad:Client:ReadNote", function(data)
|
||
|
local notepad = {}
|
||
|
notepad[#notepad+1] = {
|
||
|
icon = "fas fa-receipt",
|
||
|
isMenuHeader = true,
|
||
|
header = Loc[Config.Lan].menu["message"], text = data.message,
|
||
|
title = Loc[Config.Lan].menu["message"], description = data.message
|
||
|
}
|
||
|
notepad[#notepad+1] = {
|
||
|
icon = "fas fa-person",
|
||
|
isMenuHeader = true,
|
||
|
header = "", text = Loc[Config.Lan].menu["written_by"]..data.creator,
|
||
|
title = Loc[Config.Lan].menu["written_by"]..data.creator
|
||
|
}
|
||
|
notepad[#notepad+1] = {
|
||
|
icon = "fas fa-hand-scissors",
|
||
|
header = "", text = Loc[Config.Lan].menu["tear_up_note"],
|
||
|
title = Loc[Config.Lan].menu["tear_up_note"],
|
||
|
event = "jim-notepad:Client:DestroyNote", args = data,
|
||
|
params = { event = "jim-notepad:Client:DestroyNote", args = data }
|
||
|
}
|
||
|
if Config.Menu == "ox" then
|
||
|
exports.ox_lib:registerContext({id = 'notepad', title = "Note", position = 'top-right', options = notepad })
|
||
|
exports.ox_lib:showContext("notepad")
|
||
|
elseif Config.Menu == "qb" then
|
||
|
exports['qb-menu']:openMenu(notepad)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent("jim-notepad:Client:DestroyNote", function(data)
|
||
|
loadAnimDict("pickup_object")
|
||
|
TaskPlayAnim(PlayerPedId(), "pickup_object", "pickup_low", 8.0, -8.0, -1, 0, 0, false, false, false)
|
||
|
unloadAnimDict("pickup_object")
|
||
|
Wait(900)
|
||
|
TriggerServerEvent("jim-notepad:Server:SyncEffect", data.coords)
|
||
|
TriggerServerEvent("jim-notepad:Server:DestroyNote", data.id)
|
||
|
end)
|
||
|
|
||
|
RegisterNetEvent("jim-notepad:Client:SyncEffect", function(coords)
|
||
|
UseParticleFxAssetNextCall("core")
|
||
|
local dust = StartNetworkedParticleFxNonLoopedAtCoord("ent_sht_paper_bails", vec3(coords.x, coords.y, coords.z-1.03), 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0)
|
||
|
end)
|
||
|
|
||
|
AddEventHandler('onResourceStop', function(r) if r ~= GetCurrentResourceName() then return end
|
||
|
if GetResourceState("qb-target") == "started" or GetResourceState("ox_target") == "started" then
|
||
|
for k in pairs(Targets) do exports["qb-target"]:RemoveZone(k) end
|
||
|
for k in pairs(Props) do DeleteEntity(Props[k]) end
|
||
|
end
|
||
|
end)
|