diff --git a/config.lua b/config.lua index 8d432c30..6e2f8423 100644 --- a/config.lua +++ b/config.lua @@ -36,3 +36,6 @@ Config.LockpickItems = { ---Play sounds using game audio (sound natives) instead of through NUI. Config.NativeAudio = true + +-- Are you using mythic inventory +Config.MythicInventory = false \ No newline at end of file diff --git a/server/framework/mythic-base.lua b/server/framework/mythic-base.lua new file mode 100644 index 00000000..38a28da2 --- /dev/null +++ b/server/framework/mythic-base.lua @@ -0,0 +1,85 @@ +local cachedJobs = {} + +-- Triggered when the mythic job resource is finished loaded +AddEventHandler("Jobs:Server:Startup", function() + -- Store the jobs into the cached table, so they can be referenced later, without recalling + cachedJobs = Jobs:GetAll() +end) + +local function retrieveComponents() + Fetch = exports["mythic-base"]:FetchComponent("Fetch") + Jobs = exports["mythic-base"]:FetchComponent("Jobs") + Inventory = exports["mythic-base"]:FetchComponent("Inventory") +end + +AddEventHandler("ox_doorlock:Shared:DependencyUpdate", retrieveComponents) + +AddEventHandler("Core:Shared:Ready", function() + exports["mythic-base"]:RequestDependencies("ox_doorlock", { + "Fetch", + "Jobs", + "Inventory" + }, function(error) + if #error > 0 then + Logger:Critical("ox_doorlock", "Failed To Load All Dependencies") + return + end + + retrieveComponents() + end) +end) + +function GetPlayer(playerId) + local player = { source = playerId } + return player +end + +function GetCharacterId(player) + local char = Fetch:Source(player.source):GetData("Character") + if not char then return -1 end + + return char:GetData("SID") +end + +function IsPlayerInGroup(player, filter) + if not player then return false end + + local char = Fetch:Source(player.source):GetData("Character") + if not char then return false end + + if type(filter) == "string" then + return Jobs.Permissions:HasJob(player.source, filter) + end + + for job, grade in pairs(filter) do + if cachedJobs[job] then + local jobData = Jobs.Permissions:HasJob(player.source, job) + if jobData and jobData.Grade.Level >= grade then + return true + end + end + end + + return false +end + +if Config.MythicInventory then + function DoesPlayerHaveItem(player, items, removeItem) + if not player then return false end + + local char = Fetch:Source(player.source):GetData("Character") + if not char then return false end + + for i = 1, #items do + local item = items[i] + local itemName = item.name or item + if Inventory.Items:Has(char:GetData("SID"), 1, itemName, 1) then + if removeItem or item.remove then + Inventory.Items:Remove(char:GetData("SID"), 1, itemName, 1) + end + + return itemName + end + end + end +end \ No newline at end of file diff --git a/server/main.lua b/server/main.lua index f39e0580..77c2aac3 100644 --- a/server/main.lua +++ b/server/main.lua @@ -179,20 +179,22 @@ end ---@param items string[] | { name: string, remove?: boolean, metadata?: string }[] ---@param removeItem? boolean ---@return string? -function DoesPlayerHaveItem(player, items, removeItem) - local playerId = player.source or player.PlayerData.source - - for i = 1, #items do - local item = items[i] - local itemName = item.name or item - local data = ox_inventory:Search(playerId, 'slots', itemName, item.metadata)[1] +if not Config.MythicInventory then + function DoesPlayerHaveItem(player, items, removeItem) + local playerId = player.source or player.PlayerData.source + + for i = 1, #items do + local item = items[i] + local itemName = item.name or item + local data = ox_inventory:Search(playerId, 'slots', itemName, item.metadata)[1] + + if data and data.count > 0 then + if removeItem or item.remove then + ox_inventory:RemoveItem(playerId, itemName, 1, nil, data.slot) + end - if data and data.count > 0 then - if removeItem or item.remove then - ox_inventory:RemoveItem(playerId, itemName, 1, nil, data.slot) + return itemName end - - return itemName end end end diff --git a/server/utils.lua b/server/utils.lua index a8582863..55a44254 100644 --- a/server/utils.lua +++ b/server/utils.lua @@ -24,7 +24,7 @@ function utils.getFilesInDirectory(path, pattern) return files, fileCount end -local frameworks = { 'es_extended', 'ND_Core', 'ox_core', 'qbx_core' } +local frameworks = { 'es_extended', 'ND_Core', 'ox_core', 'qbx_core', 'mythic-base' } local sucess = false for i = 1, #frameworks do diff --git a/types.lua b/types.lua index 38e79887..ba9275b6 100644 --- a/types.lua +++ b/types.lua @@ -21,3 +21,4 @@ ---@field LockpickItems string[] ---@field NativeAudio boolean ---@field DrawSprite { [0]: DrawSpriteProps, [1]: DrawSpriteProps } +---@field MythicInventory boolean