🚪ox_doorlock usage

Unfortunately, ox_doorlock does not provide functions that will help us grant doorlock access to a member of the organization, so one solution may be to use it as follows.

  1. Go to pp-orgpanel/server/editable/framework and find this

RegisterNetEvent('esx:playerLoaded', function(player, xPlayer, isNew)
    [...]
end)
  1. Change this part of code to something like this

if interiorsResult and #interiorsResult > 0 then
    local orgDoorlock = interiorsResult[1].doorlock
    Player(xPlayer.source).state.orgDoorlock = orgDoorlock
end
  1. Below the playerLoaded event, add something like this to keep the door lock system in sync.

RegisterNetEvent('pp-orgpanel:memberAdded', function(orgId, sourceId, targetId)
    MySQL.Async.fetchAll('SELECT doorlock FROM organization_interiors WHERE org_id = @org_id', { 
        ['@org_id'] = orgId 
    }, function(interiorsResult)
        if interiorsResult and #interiorsResult > 0 then
            local orgDoorlock = interiorsResult[1].doorlock
            Player(targetId).state.orgDoorlock = orgDoorlock
        end
    end)
end)

RegisterNetEvent('pp-orgpanel:memberFired', function(targetId)
    Player(targetId).state.orgDoorlock = nil
end)

RegisterNetEvent('pp-orgpanel:memberLeaved', function(orgId, targetId)
    Player(targetId).state.orgDoorlock = nil
end)
  1. Now go to ox_doorlock/server/framework/es_extended find the IsPlayerInGroup function and replace it with this

function IsPlayerInGroup(player, filter)
    local type = type(filter)
    local currentOrg = Player(player.source).state.orgDoorlock
    if type == 'string' then
        if player.job.name == filter or currentOrg == filter then
            return true
        end
    else
        local tabletype = table.type(filter)
        if tabletype == 'hash' then
            local grade = filter[player.job.name]

            if grade and grade <= player.job.grade or filter[currentOrg] then
                return true
            end
        elseif tabletype == 'array' then
            for i = 1, #filter do
                if player.job.name == filter[i] or currentOrg == filter[i] then
                    return true
                end
            end
        end
    end

    return false
end
  1. Now set the interior doorlock in pp-orgpanel/config_c/Config.interiors to the same name as the group in the doorlock settings, for example:

        ['interior1'] = {
            size = vec3(1.20000004768371, 0.60000002384185, 3.0),
            coords = vec3(746.5399780273438, -1781.989990234375, 36.54000091552734),
            rotation = 90,
            doorlock = 'organization1' -- doorlock group name
        }
  1. Restart your server and everything should work great now