149 lines
5.9 KiB
Lua
149 lines
5.9 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
local Routes = {}
|
|
|
|
local function CanPay(Player)
|
|
return Player.PlayerData.money['bank'] >= Config.TruckPrice
|
|
end
|
|
|
|
QBCore.Functions.CreateCallback("garbagejob:server:NewShift", function(source, cb, continue)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
local CitizenId = Player.PlayerData.citizenid
|
|
local shouldContinue = false
|
|
local nextStop = 0
|
|
local totalNumberOfStops = 0
|
|
local bagNum = 0
|
|
|
|
if CanPay(Player) or continue then
|
|
math.randomseed(os.time())
|
|
local MaxStops = math.random(Config.MinStops, #Config.Locations["trashcan"])
|
|
local allStops = {}
|
|
|
|
for _=1, MaxStops do
|
|
local stop = math.random(#Config.Locations["trashcan"])
|
|
local newBagAmount = math.random(Config.MinBagsPerStop, Config.MaxBagsPerStop)
|
|
allStops[#allStops+1] = {stop = stop, bags = newBagAmount}
|
|
end
|
|
|
|
Routes[CitizenId] = {
|
|
stops = allStops,
|
|
currentStop = 1,
|
|
started = true,
|
|
currentDistance = 0,
|
|
depositPay = Config.TruckPrice,
|
|
actualPay = 0,
|
|
stopsCompleted = 0,
|
|
totalNumberOfStops = #allStops
|
|
}
|
|
|
|
nextStop = allStops[1].stop
|
|
shouldContinue = true
|
|
totalNumberOfStops = #allStops
|
|
bagNum = allStops[1].bags
|
|
TriggerClientEvent('qb-jobselector:addxp:client', 30)
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', source, Lang:t("error.not_enough", {value = Config.TruckPrice}), "error")
|
|
end
|
|
cb(shouldContinue, nextStop, bagNum, totalNumberOfStops)
|
|
end)
|
|
|
|
RegisterNetEvent("qb-garbagejob:server:payDeposit", function()
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
if not Player.Functions.RemoveMoney("bank", Config.TruckPrice, "garbage-deposit") then
|
|
TriggerClientEvent('QBCore:Notify', source, Lang:t("error.not_enough", {value = Config.TruckPrice}), "error")
|
|
end
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback("garbagejob:server:NextStop", function(source, cb, currentStop, currentStopNum, currLocation)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
local CitizenId = Player.PlayerData.citizenid
|
|
|
|
local currStopCoords = Config.Locations["trashcan"][currentStop].coords
|
|
currStopCoords = vector3(currStopCoords.x, currStopCoords.y, currStopCoords.z)
|
|
|
|
local distance = #(currLocation - currStopCoords)
|
|
local newStop = 0
|
|
local shouldContinue = false
|
|
local newBagAmount = 0
|
|
|
|
TriggerClientEvent('qb-jobselector:addxp:client', 20) -- 100 is amount of exp
|
|
|
|
if(math.random(100) >= Config.CryptoStickChance) and Config.GiveCryptoStick then
|
|
Player.Functions.AddItem("cryptostick", 1, false)
|
|
TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items["cryptostick"], 'add')
|
|
TriggerClientEvent('QBCore:Notify', source, Lang:t("info.found_crypto"))
|
|
|
|
end
|
|
|
|
if distance <= 20 then
|
|
if currentStopNum >= #Routes[CitizenId].stops then
|
|
Routes[CitizenId].stopsCompleted = tonumber(Routes[CitizenId].stopsCompleted) + 1
|
|
newStop = currentStop
|
|
else
|
|
newStop = Routes[CitizenId].stops[currentStopNum+1].stop
|
|
newBagAmount = Routes[CitizenId].stops[currentStopNum+1].bags
|
|
shouldContinue = true
|
|
local bagAmount = Routes[CitizenId].stops[currentStopNum].bags
|
|
local totalNewPay = 0
|
|
|
|
for _ = 1, bagAmount do
|
|
totalNewPay = totalNewPay + math.random(Config.BagLowerWorth, Config.BagUpperWorth)
|
|
end
|
|
|
|
Routes[CitizenId].actualPay = math.ceil(Routes[CitizenId].actualPay + totalNewPay)
|
|
Routes[CitizenId].stopsCompleted = tonumber(Routes[CitizenId].stopsCompleted) + 1
|
|
end
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', source, Lang:t("error.too_far"), "error")
|
|
end
|
|
cb(shouldContinue,newStop,newBagAmount)
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback('garbagejob:server:EndShift', function(source, cb)
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
local CitizenId = Player.PlayerData.citizenid
|
|
local status = false
|
|
if Routes[CitizenId] ~= nil then status = true end
|
|
cb(status)
|
|
end)
|
|
|
|
RegisterNetEvent('garbagejob:server:PayShift', function(continue)
|
|
local src = source
|
|
local Player = QBCore.Functions.GetPlayer(src)
|
|
local CitizenId = Player.PlayerData.citizenid
|
|
if Routes[CitizenId] ~= nil then
|
|
local depositPay = Routes[CitizenId].depositPay
|
|
if tonumber(Routes[CitizenId].stopsCompleted) < tonumber(Routes[CitizenId].totalNumberOfStops) then
|
|
depositPay = 0
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("error.early_finish", {completed = Routes[CitizenId].stopsCompleted, total = Routes[CitizenId].totalNumberOfStops}), "error")
|
|
end
|
|
if continue then
|
|
depositPay = 0
|
|
end
|
|
local totalToPay = depositPay + Routes[CitizenId].actualPay
|
|
local payoutDeposit = Lang:t("info.payout_deposit", {value = depositPay})
|
|
if depositPay == 0 then
|
|
payoutDeposit = ""
|
|
end
|
|
|
|
Player.Functions.AddMoney("bank", totalToPay , 'garbage-payslip')
|
|
TriggerClientEvent('QBCore:Notify', src, Lang:t("success.pay_slip", {total = totalToPay, deposit = payoutDeposit}), "success")
|
|
Routes[CitizenId] = nil
|
|
else
|
|
TriggerClientEvent('QBCore:Notify', source, Lang:t("error.never_clocked_on"), "error")
|
|
end
|
|
end)
|
|
|
|
QBCore.Commands.Add("cleargarbroutes", "Fjern skralde-ruter for bruger (Admin)", {{name="id", help="Spiller ID"}}, false, function(source, args)
|
|
local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
|
|
local CitizenId = Player.PlayerData.citizenid
|
|
local count = 0
|
|
for k, _ in pairs(Routes) do
|
|
if k == CitizenId then
|
|
count = count + 1
|
|
end
|
|
end
|
|
|
|
TriggerClientEvent('QBCore:Notify', source, Lang:t("success.clear_routes", {value = count}), "success")
|
|
Routes[CitizenId] = nil
|
|
end, "admin")
|