forked from Simnation/Main
249 lines
No EOL
7.5 KiB
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) |