Main/resources/[test]/okokCrafting/cl_utils.lua

249 lines
No EOL
7.5 KiB
Lua

QBCore = exports[Config.qbPrefix.."-core"]:GetCoreObject()
RegisterNetEvent(Config.EventPrefix..":notification")
AddEventHandler(Config.EventPrefix..":notification", function(title, text, time, type)
exports['okokNotify']:Alert(title, text, time, type)
end)
RegisterNetEvent(Config.EventPrefix..":openTextUI")
AddEventHandler(Config.EventPrefix..":openTextUI", function(text)
exports['qb-core']:DrawText(text, 'left')
end)
RegisterNetEvent(Config.EventPrefix..":closeTextUI")
AddEventHandler(Config.EventPrefix..":closeTextUI", function()
exports['qb-core']:HideText()
end)
function onOpenMenu()
-- Executed when the menu is opened
end
function onCloseMenu()
-- Executed when the menu is closed
end
function claimAll(workbench, CraftQueues)
TriggerServerEvent(Config.EventPrefix..':claimAll', workbench, CraftQueues)
end
Citizen.CreateThread(function()
if Config.UseXP then
if Config.SameLevelForAllTables then
TriggerEvent('chat:addSuggestion', '/'..Config.SetXPCommand, _L('suggestion_xp').maintext, {
{ name=_L('suggestion_xp').id, help=_L('suggestion_xp').idtext },
{ name=_L('suggestion_xp').xp, help=_L('suggestion_xp').xptext },
})
TriggerEvent('chat:addSuggestion', '/'..Config.SetLevelCommand, _L('suggestion_level').maintext, {
{ name=_L('suggestion_level').id, help=_L('suggestion_level').idtext },
{ name=_L('suggestion_level').level, help=_L('suggestion_level').leveltext },
})
else
TriggerEvent('chat:addSuggestion', '/'..Config.SetXPCommand, _L('suggestion_xp').maintext, {
{ name=_L('suggestion_xp').id, help=_L('suggestion_xp').idtext },
{ name=_L('suggestion_xp').xp, help=_L('suggestion_xp').xptext },
{ name=_L('suggestion_xp').workbench, help=_L('suggestion_xp').workbenchtext },
})
TriggerEvent('chat:addSuggestion', '/'..Config.SetLevelCommand, _L('suggestion_level').maintext, {
{ name=_L('suggestion_level').id, help=_L('suggestion_level').idtext },
{ name=_L('suggestion_level').level, help=_L('suggestion_level').leveltext },
{ name=_L('suggestion_level').workbench, help=_L('suggestion_level').workbenchtext },
})
end
end
end)
Citizen.CreateThread(function()
while PlayerData == nil do
PlayerData = QBCore.Functions.GetPlayerData()
Citizen.Wait(10)
end
while PlayerData.job == nil do
PlayerData.job = QBCore.Functions.GetPlayerData().job
Citizen.Wait(10)
end
while PlayerData.gang == nil do
PlayerData.gang = QBCore.Functions.GetPlayerData().gang
Citizen.Wait(10)
end
local inZone = false
local num = 0
local nearZone = false
local enteredRange = false
local inWideRange = false
local ped = PlayerPedId()
while true do
Citizen.Wait(0)
local playerExists = false
if not playerExists then
if DoesEntityExist(ped) then
playerExists = true
else
ped = PlayerPedId()
end
end
local playerCoords = GetEntityCoords(ped)
nearZone = false
inZone = false
for k,v in pairs(Config.Crafting) do
if v.jobs['all'] ~= nil or checkJob(v.jobs) or checkGang(v.jobs) then
local distance = #(vector3(v.coordinates[1], v.coordinates[2], v.coordinates[3]) - playerCoords)
if distance < Config.CraftRadius then
if closeWorkbench ~= v.tableID then
closeWorkbench = v.tableID
workbenchCoords = v.coordinates
end
if not gotQueue then
gotQueue = true
QBCore.Functions.TriggerCallback(Config.EventPrefix..":getQueue", function(queue, queues)
CraftQueues = queues
WorkbenchCraft = queue
end, v.tableID)
end
end
if distance < v.radius + 2 then
local zDistance = playerCoords.z - v.coordinates[3]
nearZone = true
if waitMore and not isCraftOpen then
waitMore = false
end
if not Config.NotInterectableTables then
if distance < v.radius and zDistance < 3 and zDistance > -3 then
inZone = true
if IsControlJustReleased(0, Config.Key) and not IsEntityDead(ped) then
if GetVehiclePedIsUsing(ped) == 0 then
waitMore = true
if not isCraftOpen then
TriggerEvent(Config.EventPrefix..':openWorkbench', k)
end
else
TriggerEvent(Config.EventPrefix..':notification', _L('inside_vehicle').title, _L('inside_vehicle').text, _L('inside_vehicle').time, _L('inside_vehicle').type)
end
end
end
end
elseif not waitMore and not inWideRange then
waitMore = true
end
end
end
if nearZone and not enteredRange then
enteredRange = true
inWideRange = true
elseif not nearZone and enteredRange then
enteredRange = false
inWideRange = false
end
if inZone and not hasEntered then
if Config.UseOkokTextUI then
exports['okokTextUI']:Open(_L('textUI').text, _L('textUI').color, _L('textUI').side)
else
TriggerEvent(Config.EventPrefix..':openTextUI', _L('textUI').text)
end
hasEntered = true
elseif not inZone and hasEntered then
if Config.UseOkokTextUI then
exports['okokTextUI']:Close()
else
TriggerEvent(Config.EventPrefix..':closeTextUI')
end
hasEntered = false
end
if waitMore then
Citizen.Wait(1000)
end
end
end)
Citizen.CreateThread(function()
while true do
local canCraft = false
local queue = CraftQueues[closeWorkbench]
if CraftQueues[closeWorkbench] ~= nil and closeWorkbench ~= "" and workbenchCoords ~= nil then
local playerCoords = GetEntityCoords(PlayerPedId())
local distance = #(vector3(workbenchCoords[1], workbenchCoords[2], workbenchCoords[3]) - playerCoords)
local zDistance = playerCoords.z - workbenchCoords[3]
if distance < Config.CraftRadius then
local craftingItemID = 1
for k,v in ipairs(CraftQueues[closeWorkbench]) do
if v.time >= 0 and not v.isDone then
craftingItemID = k
canCraft = true
break
end
end
if canCraft then
if not updateTable then
updateTable = true
end
local craftTime = CraftQueues[closeWorkbench][craftingItemID].time
CraftQueues[closeWorkbench][craftingItemID].isPending = false
SendNUIMessage({
action = "ShowCraftCount",
time = CraftQueues[closeWorkbench][craftingItemID].time,
name = CraftQueues[closeWorkbench][craftingItemID].itemName,
})
if CraftQueues[closeWorkbench][craftingItemID].time <= 0 then
CraftQueues[closeWorkbench][craftingItemID].time = 0
CraftQueues[closeWorkbench][craftingItemID].isDone = true
local randomNum = math.random(1, 100)
if randomNum <= tonumber(CraftQueues[closeWorkbench][craftingItemID].sucPC) then
SendNUIMessage({
action = "CompleteCraftCount",
name = CraftQueues[closeWorkbench][craftingItemID].itemName,
})
else
CraftQueues[closeWorkbench][craftingItemID].suc = false
SendNUIMessage({
action = "FailedCraftCount",
name = CraftQueues[closeWorkbench][craftingItemID].itemName,
})
end
SendNUIMessage({
action = "updateCraftingItems",
queue = CraftQueues[closeWorkbench],
})
SendNUIMessage({
action = "HideCraftCount",
})
Citizen.Wait(500)
else
SendNUIMessage({
action = "updateCraftingItems",
queue = CraftQueues[closeWorkbench],
})
CraftQueues[closeWorkbench][craftingItemID].time = craftTime - 1
Citizen.Wait(1000)
end
else
if updateTable then
updateTable = false
QBCore.Functions.TriggerCallback(Config.EventPrefix..":updateQueue", function(cb)
end, CraftQueues)
end
Citizen.Wait(2000)
end
else
Citizen.Wait(3000)
end
else
Citizen.Wait(5000)
end
end
end)