It’s already been resolved by the nice guy
thibaultD
1 Like
Hey !
You can add the following lines to the [ /esx_jobs/server/main.lua ] :
- Line 2
- Line 4-12
- Line 55
local playersWorking = {}
priceMultiplier = 0
RegisterCommand("increaseSalary", function(source, args, rawCommand)
if(args[1] ~= nil) then
--set our price multiplier with the argument given to the /increaseSalary command
priceMultiplier = args[1]
end
print("Good "..priceMultiplier)
end, false)
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
--[ v.price*priceMultiplier ] multiplies the amount win when selling an item by the multiplier defined by the command
xPlayer.addMoney(v.price*priceMultiplier)
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)
RegisterServerEvent('esx_jobs:startWork')
AddEventHandler('esx_jobs:startWork', function(zoneIndex, zoneKey)
if not playersWorking[source] then
local xPlayer = ESX.GetPlayerFromId(source)
if xPlayer then
local jobObject = Config.Jobs[xPlayer.job.name]
if jobObject then
local jobZone = jobObject.Zones[zoneKey]
if jobZone and jobZone.Item then
playersWorking[source] = {
jobItem = jobZone.Item,
zoneCoords = vector3(jobZone.Pos.x, jobZone.Pos.y, jobZone.Pos.z),
zoneMaxDistance = jobZone.Size.x,
time = os.clock()
}
end
end
end
end
end)
RegisterServerEvent('esx_jobs:stopWork')
AddEventHandler('esx_jobs:stopWork', function()
if playersWorking[source] then
playersWorking[source] = nil
end
end)
RegisterNetEvent('esx_jobs:caution')
AddEventHandler('esx_jobs:caution', function(cautionType, cautionAmount, spawnPoint, vehicle)
local xPlayer = ESX.GetPlayerFromId(source)
if cautionType == 'take' then
if cautionAmount <= Config.MaxCaution and cautionAmount >= 0 then
TriggerEvent('esx_addonaccount:getAccount', 'caution', xPlayer.identifier, function(account)
if xPlayer.getAccount('bank').money >= cautionAmount then
xPlayer.removeAccountMoney('bank', cautionAmount)
account.addMoney(cautionAmount)
xPlayer.showNotification(_U('bank_deposit_taken', ESX.Math.GroupDigits(cautionAmount)))
TriggerClientEvent('esx_jobs:spawnJobVehicle', xPlayer.source, spawnPoint, vehicle)
else
xPlayer.showNotification(_U('caution_afford', ESX.Math.GroupDigits(cautionAmount)))
end
end)
end
elseif cautionType == 'give_back' then
if cautionAmount <= 1 and cautionAmount > 0 then
TriggerEvent('esx_addonaccount:getAccount', 'caution', xPlayer.identifier, function(account)
local caution = account.money
local toGive = ESX.Math.Round(caution * cautionAmount)
xPlayer.addAccountMoney('bank', toGive)
account.removeMoney(toGive)
TriggerClientEvent('esx:showNotification', source, _U('bank_deposit_returned', ESX.Math.GroupDigits(toGive)))
end)
end
end
end)
Peace
1 Like
Here are the changes you ask me do to, allowing you to specify the job for wich the item prices need to be increased
Changes are lines 2 - 15 and 68
local playersWorking = {}
salaryMultiplier = { fisherman = 0, fueler = 0, lumberjack = 0, miner = 0, reporter = 0, slaughterer = 0, tailor = 0 }
RegisterCommand("increaseSalary", function(source, args, rawCommand)
-- Use of the command = /increaseSalary miner 2
-- This will double the selling value of the miner's items
--args[1] = job / args[2] = salary multiplier value
if(args[1] ~= nil and args[2] ~= nil) then
salaryMultiplier[args[1]] = args[2]
end
end, false)
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
--[ v.price*salaryMultiplier[xPlayer.job.name] ] multiplies the amount win when selling an item for the given job by the multiplier defined by the command
xPlayer.addMoney(v.price*salaryMultiplier[xPlayer.job.name])
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)
RegisterServerEvent('esx_jobs:startWork')
AddEventHandler('esx_jobs:startWork', function(zoneIndex, zoneKey)
if not playersWorking[source] then
local xPlayer = ESX.GetPlayerFromId(source)
if xPlayer then
local jobObject = Config.Jobs[xPlayer.job.name]
if jobObject then
local jobZone = jobObject.Zones[zoneKey]
if jobZone and jobZone.Item then
playersWorking[source] = {
jobItem = jobZone.Item,
zoneCoords = vector3(jobZone.Pos.x, jobZone.Pos.y, jobZone.Pos.z),
zoneMaxDistance = jobZone.Size.x,
time = os.clock()
}
end
end
end
end
end)
RegisterServerEvent('esx_jobs:stopWork')
AddEventHandler('esx_jobs:stopWork', function()
if playersWorking[source] then
playersWorking[source] = nil
end
end)
RegisterNetEvent('esx_jobs:caution')
AddEventHandler('esx_jobs:caution', function(cautionType, cautionAmount, spawnPoint, vehicle)
local xPlayer = ESX.GetPlayerFromId(source)
if cautionType == 'take' then
if cautionAmount <= Config.MaxCaution and cautionAmount >= 0 then
TriggerEvent('esx_addonaccount:getAccount', 'caution', xPlayer.identifier, function(account)
if xPlayer.getAccount('bank').money >= cautionAmount then
xPlayer.removeAccountMoney('bank', cautionAmount)
account.addMoney(cautionAmount)
xPlayer.showNotification(_U('bank_deposit_taken', ESX.Math.GroupDigits(cautionAmount)))
TriggerClientEvent('esx_jobs:spawnJobVehicle', xPlayer.source, spawnPoint, vehicle)
else
xPlayer.showNotification(_U('caution_afford', ESX.Math.GroupDigits(cautionAmount)))
end
end)
end
elseif cautionType == 'give_back' then
if cautionAmount <= 1 and cautionAmount > 0 then
TriggerEvent('esx_addonaccount:getAccount', 'caution', xPlayer.identifier, function(account)
local caution = account.money
local toGive = ESX.Math.Round(caution * cautionAmount)
xPlayer.addAccountMoney('bank', toGive)
account.removeMoney(toGive)
TriggerClientEvent('esx:showNotification', source, _U('bank_deposit_returned', ESX.Math.GroupDigits(toGive)))
end)
end
end
end)
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.