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) | 
