❤️Cooldown Integration on Frameworks

Important!


QB-Core

  1. Locate the file: qb-core/server/player.lua

  2. Replace the function self.Functions.SetJob(job, grade) function with:

function self.Functions.SetJob(job, grade)
        job = job:lower()
        grade = grade or '0'
        if not QBCore.Shared.Jobs[job] then return false end

        if exports['mg-jobCenter']:HasCooldown(self.PlayerData.citizenid) then
            TriggerClientEvent('QBCore:Notify', self.PlayerData.source, 'You are still on cooldown!', 'error', 5000)
            return false
        end
        self.PlayerData.job = {
            name = job,
            label = QBCore.Shared.Jobs[job].label,
            onduty = QBCore.Shared.Jobs[job].defaultDuty,
            type = QBCore.Shared.Jobs[job].type or 'none',
            grade = {
                name = 'No Grades',
                level = 0,
                payment = 30,
                isboss = false
            }
        }
        local gradeKey = tostring(grade)
        local jobGradeInfo = QBCore.Shared.Jobs[job].grades[gradeKey]
        if jobGradeInfo then
            self.PlayerData.job.grade.name = jobGradeInfo.name
            self.PlayerData.job.grade.level = tonumber(gradeKey)
            self.PlayerData.job.grade.payment = jobGradeInfo.payment
            self.PlayerData.job.grade.isboss = jobGradeInfo.isboss or false
            self.PlayerData.job.isboss = jobGradeInfo.isboss or false
        end

        exports['mg-jobCenter']:SetPlayerCooldown(self.PlayerData.citizenid)
        TriggerClientEvent('QBCore:Notify', self.PlayerData.source, 'You are now on Job Cooldown!', 'success', 5000)
        
        if not self.Offline then
            self.Functions.UpdatePlayerData()
            TriggerEvent('QBCore:Server:OnJobUpdate', self.PlayerData.source, self.PlayerData.job)
            TriggerClientEvent('QBCore:Client:OnJobUpdate', self.PlayerData.source, self.PlayerData.job)
        end

        return true
    end

ESX

  1. Locate the file: es_extended/server/classes/player.lua

  2. Replace the self.setJob(newJob, grade, onDuty) function with:

function self.setJob(newJob, grade, onDuty)
    grade = tostring(grade)
    local lastJob = self.job

    if not ESX.DoesJobExist(newJob, grade) then
        return print(("[ESX] [^3WARNING^7] Ignoring invalid ^5.setJob()^7 usage for ID: ^5%s^7, Job: ^5%s^7"):format(self.source, newJob))
    end

    if exports['mg-jobCenter']:HasCooldown(self.getIdentifier()) then
        self.triggerEvent("esx:showNotification", 'You are still on cooldown!', 'error', 5000)
        return
    end
    if newJob == "unemployed" then
        onDuty = false
    end

    if type(onDuty) ~= "boolean" then
        onDuty = Config.DefaultJobDuty
    end

    local jobObject, gradeObject = ESX.Jobs[newJob], ESX.Jobs[newJob].grades[grade]

    self.job = {
        id = jobObject.id,
        name = jobObject.name,
        label = jobObject.label,
        onDuty = onDuty,

        grade = tonumber(grade),
        grade_name = gradeObject.name,
        grade_label = gradeObject.label,
        grade_salary = gradeObject.salary,

        skin_male = gradeObject.skin_male and json.decode(gradeObject.skin_male) or {},
        skin_female = gradeObject.skin_female and json.decode(gradeObject.skin_female) or {},
    }

    self.metadata.jobDuty = onDuty
    TriggerEvent("esx:setJob", self.source, self.job, lastJob)
    self.triggerEvent("esx:setJob", self.job, lastJob)
    Player(self.source).state:set("job", self.job, true)
    exports['mg-jobCenter']:SetPlayerCooldown(self.getIdentifier())
    self.triggerEvent("esx:showNotification", 'You are now on Job Cooldown!', 'success', 5000)
end


Last updated