Skip to content

Commit

Permalink
revert: persistent job/gangs (#383)
Browse files Browse the repository at this point in the history
  • Loading branch information
Manason committed Feb 25, 2024
1 parent 246ec06 commit 74cd589
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 352 deletions.
17 changes: 2 additions & 15 deletions bridge/qb/client/main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@ require 'bridge.qb.client.events'
local qbCoreCompat = {}
qbCoreCompat.PlayerData = QBX.PlayerData
qbCoreCompat.Config = lib.table.merge(require 'config.client', require 'config.shared')

qbCoreCompat.Shared = require 'bridge.qb.shared.main'
qbCoreCompat.Shared.Jobs = {}
qbCoreCompat.Shared.Gangs = {}

qbCoreCompat.Shared.Jobs = GetJobs()
qbCoreCompat.Shared.Gangs = GetGangs()
qbCoreCompat.Functions = require 'bridge.qb.client.functions'

---@deprecated use https://overextended.github.io/docs/ox_lib/Callback/Lua/Client/ instead
Expand Down Expand Up @@ -78,14 +76,3 @@ end)
RegisterNetEvent('qbx_core:client:onGangUpdate', function(gangName, gang)
qbCoreCompat.Shared.Gangs[gangName] = gang
end)

lib.callback('qbx_core:server:getJobs', false, function(jobs)
for jobName, job in pairs(jobs) do
TriggerEvent('qbx_core:client:onJobUpdate', jobName, job)
end
end)
lib.callback('qbx_core:server:getGangs', false, function(gangs)
for gangName, gang in pairs(gangs) do
TriggerEvent('qbx_core:client:onGangUpdate', gangName, gang)
end
end)
4 changes: 2 additions & 2 deletions client/groups.lua
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
local jobs = {}
local gangs = {}
local jobs = require 'shared.jobs'
local gangs = require 'shared.gangs'

---@return table<string, Job>
function GetJobs()
Expand Down
19 changes: 1 addition & 18 deletions qbx_core.sql
Original file line number Diff line number Diff line change
Expand Up @@ -43,28 +43,11 @@ CREATE TABLE IF NOT EXISTS `player_contacts` (
KEY `citizenid` (`citizenid`)
) ENGINE=InnoDB AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS `groups` (
`name` VARCHAR(50) NOT NULL,
`type` VARCHAR(50) NOT NULL,
`data` LONGTEXT NOT NULL,
PRIMARY KEY (`name`, `type`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `group_grades` (
`group` VARCHAR(50) NOT NULL,
`type` VARCHAR(50) NOT NULL,
`grade` TINYINT(3) UNSIGNED NOT NULL,
`data` LONGTEXT NOT NULL,
PRIMARY KEY (`group`, `grade`, `type`),
CONSTRAINT `fk_groups` FOREIGN KEY (`group`, `type`) REFERENCES `groups` (`name`, `type`) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `player_groups` (
`citizenid` VARCHAR(50) NOT NULL,
`group` VARCHAR(50) NOT NULL,
`type` VARCHAR(50) NOT NULL,
`grade` TINYINT(3) UNSIGNED NOT NULL,
PRIMARY KEY (`citizenid`, `type`, `group`),
CONSTRAINT `fk_citizenid` FOREIGN KEY (`citizenid`) REFERENCES `players` (`citizenid`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `fk_grade` FOREIGN KEY (`group`, `type`, `grade`) REFERENCES `group_grades` (`group`, `type`, `grade`) ON UPDATE CASCADE ON DELETE CASCADE
CONSTRAINT `fk_citizenid` FOREIGN KEY (`citizenid`) REFERENCES `players` (`citizenid`) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;
89 changes: 34 additions & 55 deletions server/groups.lua
Original file line number Diff line number Diff line change
@@ -1,15 +1,45 @@
local storage = require 'server.storage.main'
---@class GroupData
---@field label string

---@class JobData : GroupData
---@field type? string
---@field defaultDuty boolean
---@field offDutyPay boolean

---@class GangData : GroupData

---@class GradeData
---@field name string
---@field isboss? boolean
---@field bankAuth? boolean

---@class JobGradeData : GradeData
---@field payment number

---@class GangGradeData : GradeData

---@class Job : JobData
---@field grades table<integer, JobGradeData>

---@class Gang : GangData
---@field grades table<integer, GangGradeData>

---@enum GroupType
GroupType = {
JOB = 'job',
GANG = 'gang'
}

---@type table<string, Job>
local jobs = {}
local jobs = require 'shared.jobs'

---@type table<string, Gang>
local gangs = {}
local gangs = require 'shared.gangs'

---Adds or overwrites jobs in shared/jobs.lua
---@param newJobs table<string, Job>
function CreateJobs(newJobs)
for jobName, job in pairs(newJobs) do
storage.upsertJob(jobName, job)
jobs[jobName] = job
TriggerEvent('qbx_core:server:onJobUpdate', jobName, job)
TriggerClientEvent('qbx_core:client:onJobUpdate', -1, jobName, job)
Expand All @@ -31,7 +61,6 @@ function RemoveJob(jobName)
return false, "job_not_exists"
end

storage.deleteJobEntity(jobName)
jobs[jobName] = nil
TriggerEvent('qbx_core:server:onJobUpdate', jobName, nil)
TriggerClientEvent('qbx_core:client:onJobUpdate', -1, jobName, nil)
Expand All @@ -44,7 +73,6 @@ exports('RemoveJob', RemoveJob)
---@param newGangs table<string, Gang>
function CreateGangs(newGangs)
for gangName, gang in pairs(newGangs) do
storage.upsertGang(gangName, gang)
gangs[gangName] = gang
TriggerEvent('qbx_core:server:onGangUpdate', gangName, gang)
TriggerClientEvent('qbx_core:client:onGangUpdate', -1, gangName, gang)
Expand All @@ -66,7 +94,6 @@ function RemoveGang(gangName)
return false, "gang_not_exists"
end

storage.deleteGangEntity(gangName)
gangs[gangName] = nil

TriggerEvent('qbx_core:server:onGangUpdate', gangName, nil)
Expand Down Expand Up @@ -106,18 +133,9 @@ end

exports('GetGang', GetGang)

lib.callback.register('qbx_core:server:getJobs', function()
return jobs
end)

lib.callback.register('qbx_core:server:getGangs', function()
return gangs
end)

---@param name string
---@param data JobData
local function upsertJobData(name, data)
storage.upsertJobEntity(name, data)
if jobs[name] then
jobs[name].defaultDuty = data.defaultDuty
jobs[name].label = data.label
Expand All @@ -141,7 +159,6 @@ exports('UpsertJobData', upsertJobData)
---@param name string
---@param data GangData
local function upsertGangData(name, data)
storage.upsertGangEntity(name, data)
if gangs[name] then
gangs[name].label = data.label
else
Expand All @@ -164,7 +181,6 @@ local function upsertJobGrade(name, grade, data)
lib.print.error("Job must exist to edit grades. Not found:", name)
return
end
storage.upsertJobGradeEntity(name, grade, data)
jobs[name].grades[grade] = data
TriggerEvent('qbx_core:server:onJobUpdate', name, jobs[name])
TriggerClientEvent('qbx_core:client:onJobUpdate', -1, name, jobs[name])
Expand All @@ -180,7 +196,6 @@ local function upsertGangGrade(name, grade, data)
lib.print.error("Gang must exist to edit grades. Not found:", name)
return
end
storage.upsertGangGradeEntity(name, grade, data)
gangs[name].grades[grade] = data
TriggerEvent('qbx_core:server:onGangUpdate', name, gangs[name])
TriggerClientEvent('qbx_core:client:onGangUpdate', -1, name, gangs[name])
Expand All @@ -195,7 +210,6 @@ local function removeJobGrade(name, grade)
lib.print.error("Job must exist to edit grades. Not found:", name)
return
end
storage.deleteJobGradeEntity(name, grade)
jobs[name].grades[grade] = nil
TriggerEvent('qbx_core:server:onJobUpdate', name, jobs[name])
TriggerClientEvent('qbx_core:client:onJobUpdate', -1, name, jobs[name])
Expand All @@ -210,44 +224,9 @@ local function removeGangGrade(name, grade)
lib.print.error("Gang must exist to edit grades. Not found:", name)
return
end
storage.deleteGangGradeEntity(name, grade)
gangs[name].grades[grade] = nil
TriggerEvent('qbx_core:server:onGangUpdate', name, gangs[name])
TriggerClientEvent('qbx_core:client:onGangUpdate', -1, name, gangs[name])
end

exports('RemoveGangGrade', removeGangGrade)

local function loadGroups()
local fetchedJobs, fetchedGangs = storage.fetchGroups()
local configJobs = require 'shared.jobs'
local configGangs = require 'shared.gangs'

for name, job in pairs(configJobs) do
if not fetchedJobs[name] then
jobs[name] = job
storage.upsertJob(name, job)
end
end

for name, gang in pairs(configGangs) do
if not fetchedGangs[name] then
gangs[name] = gang
storage.upsertGang(name, gang)
end
end

for name, job in pairs(fetchedJobs) do
jobs[name] = job
TriggerEvent('qbx_core:server:onJobUpdate', name, job)
TriggerClientEvent('qbx_core:client:onJobUpdate', -1, name, job)
end

for name, gang in pairs(fetchedGangs) do
gangs[name] = gang
TriggerEvent('qbx_core:server:onGangUpdate', name, gang)
TriggerClientEvent('qbx_core:client:onGangUpdate', -1, name, gang)
end
end

loadGroups()
4 changes: 2 additions & 2 deletions server/player.lua
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ function CheckPlayerData(source, playerData)

local job = GetJob(playerData.job?.name) or GetJob('unemployed')
if not job then
error("unemployed job not found. Is it in your config and/or database?")
error("unemployed job not found. Is it in your config?")
end
local jobGrade = GetJob(playerData.job?.name) and playerData.job.grade.level or 0
playerData.job = {
Expand All @@ -405,7 +405,7 @@ function CheckPlayerData(source, playerData)
playerData.jobs = jobs or {}
local gang = GetGang(playerData.gang?.name) or GetGang('none')
if not gang then
error("none gang not found. Is it in your config and/or database?")
error("none gang not found. Is it in your config?")
end
local gangGrade = GetGang(playerData.gang?.name) and playerData.gang.grade.level or 0
playerData.gang = {
Expand Down
Loading

0 comments on commit 74cd589

Please sign in to comment.