forked from overextended/ox_inventory
-
-
Notifications
You must be signed in to change notification settings - Fork 90
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Problem:
Players can access job-specific inventories and resources even when off duty, breaking roleplay immersion and allowing potential exploits.
Solution:
Validate that the player is onDuty before allowing access to inventories, shops, or job-specific actions.
Benefit:
Ensures realistic roleplay and prevents misuse of resources for jobs like police, EMS, or mechanics.
Base Example code:
modules/bridge/client.lua
function client.hasGroup(group)
if not PlayerData.loaded then return end
if PlayerData.groups.onDuty ~= nil and not PlayerData.groups.onDuty then return end
if type(group) == 'table' then
for name, rank in pairs(group) do
local groupRank = PlayerData.groups[name]
if groupRank and groupRank >= (rank or 0) then
return name, groupRank
end
end
else
local groupRank = PlayerData.groups[group]
if groupRank then
return group, groupRank
end
end
endmodules/bridge/server.lua
function server.hasGroup(inv, group)
if inv.player.groups.onDuty ~= nil and not inv.player.groups.onDuty then return end
if type(group) == 'table' then
for name, rank in pairs(group) do
local groupRank = inv.player.groups[name]
if groupRank and groupRank >= (rank or 0) then
return name, groupRank
end
end
else
local groupRank = inv.player.groups[group]
if groupRank then
return group, groupRank
end
end
endESX Example code:
modules/bridge/esx/client.lua
AddEventHandler('esx:setPlayerData', function(key, value)
if not PlayerData.loaded or GetInvokingResource() ~= 'es_extended' then return end
if key == 'job' then
key = 'groups'
value = {
[value.name] = value.grade,
onDuty = value.onDuty
}
end
PlayerData[key] = value
OnPlayerData(key, value)
end)modules/bridge/esx/server.lua
AddEventHandler('esx:setJob', function(source, job, lastJob)
local inventory = Inventory(source)
if not inventory then return end
inventory.player.groups[lastJob.name] = nil
inventory.player.groups[job.name] = job.grade
inventory.player.groups.onDuty = job.onDuty or false
end)
function server.setPlayerData(player)
local groups = {
[player.job.name] = player.job.grade,
onDuty = player.job.onDuty
}
return {
source = player.source,
name = player.name,
groups = groups,
sex = player.sex or player.variables.sex,
dateofbirth = player.dateofbirth or player.variables.dateofbirth,
}
endMetadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request