Script Integration
Snippet
Go to Any Server-side script that you want to implement, in this example we're going to use esx_jobs, go to the line 53 or find any xPlayer.addMoney and replace it with this trigger:
TriggerEvent("dsPaycheckSystem:AddMoney", source, amount)
In the case of esx_jobs, the trigger would be:
CreateThread(function()
while true do
Wait(1000)
local timeNow = os.clock()
for playerId,data in pairs(playersWorking) do
Wait(0)
local xPlayer = ESX.GetPlayerFromId(playerId)
-- is player still online?
if xPlayer then
local distance = #(xPlayer.getCoords(true) - data.zoneCoords)
-- player still within zone limits?
if distance <= data.zoneMaxDistance then
-- calculate the elapsed time
local timeElapsed = timeNow - data.time
if timeElapsed > data.jobItem[1].time then
data.time = os.clock()
for k,v in ipairs(data.jobItem) do
local itemQtty, requiredItemQtty = 0, 0
if v.name ~= TranslateCap('delivery') then
itemQtty = xPlayer.getInventoryItem(v.db_name).count
end
if data.jobItem[1].requires ~= 'nothing' then
requiredItemQtty = xPlayer.getInventoryItem(data.jobItem[1].requires).count
end
if v.name ~= TranslateCap('delivery') and itemQtty >= v.max then
xPlayer.showNotification(TranslateCap('max_limit', v.name))
playersWorking[playerId] = nil
elseif v.requires ~= 'nothing' and requiredItemQtty <= 0 then
xPlayer.showNotification(TranslateCap('not_enough', data.jobItem[1].requires_name))
playersWorking[playerId] = nil
else
if v.name ~= TranslateCap('delivery') then
-- chances to drop the item
if v.drop == 100 then
xPlayer.addInventoryItem(v.db_name, v.add)
else
local chanceToDrop = math.random(100)
if chanceToDrop <= v.drop then
xPlayer.addInventoryItem(v.db_name, v.add)
end
end
else
TriggerEvent("dsPaycheckSystem:AddMoney", playerId, v.price)
end
end
end
if data.jobItem[1].requires ~= 'nothing' then
local itemToRemoveQtty = xPlayer.getInventoryItem(data.jobItem[1].requires).count
if itemToRemoveQtty > 0 then
xPlayer.removeInventoryItem(data.jobItem[1].requires, data.jobItem[1].remove)
end
end
end
else
playersWorking[playerId] = nil
end
else
playersWorking[playerId] = nil
end
end
end
end)
Citizen.CreateThread(function()
while true do
Citizen.Wait(1000)
local timeNow = os.clock()
for playerId,data in pairs(playersWorking) do
Citizen.Wait(10)
local xPlayer = ESX.GetPlayerFromId(playerId)
-- is player still online?
if xPlayer then
local distance = #(xPlayer.getCoords(true) - data.zoneCoords)
-- player still within zone limits?
if distance <= data.zoneMaxDistance then
-- calculate the elapsed time
local timeElapsed = timeNow - data.time
if timeElapsed > data.jobItem[1].time then
data.time = os.clock()
for k,v in ipairs(data.jobItem) do
local itemQtty, requiredItemQtty = 0, 0
if v.name ~= _U('delivery') then
itemQtty = xPlayer.getInventoryItem(v.db_name).count
end
if data.jobItem[1].requires ~= 'nothing' then
requiredItemQtty = xPlayer.getInventoryItem(data.jobItem[1].requires).count
end
if v.name ~= _U('delivery') and itemQtty >= v.max then
xPlayer.showNotification(_U('max_limit', v.name))
playersWorking[playerId] = nil
elseif v.requires ~= 'nothing' and requiredItemQtty <= 0 then
xPlayer.showNotification(_U('not_enough', data.jobItem[1].requires_name))
playersWorking[playerId] = nil
else
if v.name ~= _U('delivery') then
-- chances to drop the item
if v.drop == 100 then
xPlayer.addInventoryItem(v.db_name, v.add)
else
local chanceToDrop = math.random(100)
if chanceToDrop <= v.drop then
xPlayer.addInventoryItem(v.db_name, v.add)
end
end
else
TriggerEvent("dsPaycheckSystem:AddMoney", playerId, v.price)
end
end
end
if data.jobItem[1].requires ~= 'nothing' then
local itemToRemoveQtty = xPlayer.getInventoryItem(data.jobItem[1].requires).count
if itemToRemoveQtty > 0 then
xPlayer.removeInventoryItem(data.jobItem[1].requires, data.jobItem[1].remove)
end
end
end
else
playersWorking[playerId] = nil
end
else
playersWorking[playerId] = nil
end
end
end
end)
Last updated