1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-07-30 01:33:52 +02:00
parent 98a52d34f5
commit 44c5ed941b
3 changed files with 126 additions and 72 deletions

View file

@ -4,6 +4,9 @@ local QBCore = exports['qb-core']:GetCoreObject()
function PrintAllClothingComponents() function PrintAllClothingComponents()
local ped = PlayerPedId() local ped = PlayerPedId()
local components = {} local components = {}
local gender = IsPedMale(ped) and 0 or 1
print("Character Gender: " .. (gender == 0 and "Male" or "Female"))
-- Component IDs: 0=face, 1=mask, 2=hair, 3=torso, 4=leg, 5=bag, 6=shoes, 7=accessory, 8=undershirt, 9=kevlar, 10=badge, 11=torso2 -- Component IDs: 0=face, 1=mask, 2=hair, 3=torso, 4=leg, 5=bag, 6=shoes, 7=accessory, 8=undershirt, 9=kevlar, 10=badge, 11=torso2
for i = 0, 11 do for i = 0, 11 do
@ -30,54 +33,63 @@ function PrintAllClothingComponents()
end end
end end
return components return components, gender
end end
-- Command to print all clothing components (for debugging) -- Command to print all clothing components (for debugging)
RegisterCommand('checkclothing', function() RegisterCommand('checkclothing', function()
PrintAllClothingComponents() local components, gender = PrintAllClothingComponents()
lib.notify({ lib.notify({
title = 'Debug', title = 'Debug',
description = 'Clothing components printed to console', description = 'Clothing components printed to console. Gender: ' .. (gender == 0 and "Male" or "Female"),
type = 'info' type = 'info'
}) })
end, false) end, false)
-- Check if player has a backpack equipped with improved detection -- Get character gender (0 = male, 1 = female)
function GetCharacterGender()
local ped = PlayerPedId()
return IsPedMale(ped) and 0 or 1
end
-- Check if player has a backpack equipped with gender detection
function CheckForBackpack() function CheckForBackpack()
local ped = PlayerPedId() local ped = PlayerPedId()
local gender = GetCharacterGender()
-- Get the current bag drawable ID (component 5 is the bag slot) -- Get the current bag drawable ID (component 5 is the bag slot)
local currentBag = GetPedDrawableVariation(ped, 5) local currentBag = GetPedDrawableVariation(ped, 5)
local currentTexture = GetPedTextureVariation(ped, 5) local currentTexture = GetPedTextureVariation(ped, 5)
print("Current bag: Drawable=" .. currentBag .. ", Texture=" .. currentTexture) if Config.Debug then
print("Current bag: Gender=" .. gender .. ", Drawable=" .. currentBag .. ", Texture=" .. currentTexture)
end
-- Check if this bag ID is in our config -- Check if this bag ID is in our config for the current gender
if Config.Backpacks[currentBag] then if Config.Backpacks[gender] and Config.Backpacks[gender][currentBag] then
-- If we need to check for specific textures as well -- If we need to check for specific textures as well
if Config.Backpacks[currentBag].textures then if Config.Backpacks[gender][currentBag].textures then
if Config.Backpacks[currentBag].textures[currentTexture] then if Config.Backpacks[gender][currentBag].textures[currentTexture] then
return currentBag, currentTexture return currentBag, currentTexture, gender
end end
else else
-- If we don't care about texture, just return the drawable -- If we don't care about texture, just return the drawable
return currentBag, currentTexture return currentBag, currentTexture, gender
end end
end end
return nil, nil return nil, nil, gender
end end
-- Open backpack inventory command -- Open backpack inventory command
RegisterCommand('openbackpack', function() RegisterCommand('openbackpack', function()
local backpackId, textureId = CheckForBackpack() local backpackId, textureId, gender = CheckForBackpack()
if backpackId then if backpackId then
local citizenId = QBCore.Functions.GetPlayerData().citizenid local citizenId = QBCore.Functions.GetPlayerData().citizenid
local backpackStashId = "backpack_" .. citizenId .. "_" .. backpackId .. "_" .. textureId local backpackStashId = "backpack_" .. citizenId .. "_" .. gender .. "_" .. backpackId .. "_" .. textureId
TriggerServerEvent('backpack:server:openInventory', backpackStashId, backpackId, textureId) TriggerServerEvent('backpack:server:openInventory', backpackStashId, backpackId, textureId, gender)
else else
lib.notify(Config.Notifications.noBackpack) lib.notify(Config.Notifications.noBackpack)
end end
@ -89,14 +101,14 @@ RegisterKeyMapping('openbackpack', 'Open Backpack Inventory', 'keyboard', Config
-- Listen for inventory open event -- Listen for inventory open event
RegisterNetEvent('inventory:client:OpenInventory', function() RegisterNetEvent('inventory:client:OpenInventory', function()
-- Check if player has a backpack -- Check if player has a backpack
local backpackId, textureId = CheckForBackpack() local backpackId, textureId, gender = CheckForBackpack()
if backpackId then if backpackId then
local citizenId = QBCore.Functions.GetPlayerData().citizenid local citizenId = QBCore.Functions.GetPlayerData().citizenid
local backpackStashId = "backpack_" .. citizenId .. "_" .. backpackId .. "_" .. textureId local backpackStashId = "backpack_" .. citizenId .. "_" .. gender .. "_" .. backpackId .. "_" .. textureId
-- Small delay to let the main inventory open first -- Small delay to let the main inventory open first
Citizen.Wait(100) Citizen.Wait(100)
TriggerServerEvent('backpack:server:openInventory', backpackStashId, backpackId, textureId) TriggerServerEvent('backpack:server:openInventory', backpackStashId, backpackId, textureId, gender)
end end
end) end)
@ -104,45 +116,39 @@ end)
Citizen.CreateThread(function() Citizen.CreateThread(function()
local lastBackpack = nil local lastBackpack = nil
local lastTexture = nil local lastTexture = nil
local lastGender = nil
while true do while true do
Citizen.Wait(1000) -- Check every second Citizen.Wait(1000) -- Check every second
local currentBackpack, currentTexture = CheckForBackpack() local currentBackpack, currentTexture, currentGender = CheckForBackpack()
-- If backpack status changed -- If backpack status changed
if currentBackpack ~= lastBackpack or currentTexture ~= lastTexture then if currentBackpack ~= lastBackpack or currentTexture ~= lastTexture or currentGender ~= lastGender then
lastBackpack = currentBackpack lastBackpack = currentBackpack
lastTexture = currentTexture lastTexture = currentTexture
lastGender = currentGender
-- If player removed a backpack, we could add additional logic here -- If player removed a backpack, we could add additional logic here
if not currentBackpack then if not currentBackpack then
-- Player removed backpack -- Player removed backpack
if Config.Debug then
print("Backpack removed") print("Backpack removed")
end
else else
-- Player equipped backpack -- Player equipped backpack
print("Backpack equipped: " .. currentBackpack .. " with texture " .. currentTexture) if Config.Debug then
print("Backpack equipped: Gender=" .. currentGender .. ", ID=" .. currentBackpack .. ", Texture=" .. currentTexture)
end end
end end
end end
end)
-- Initialize when player loads
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
-- Nothing needed here, backpack will be checked when inventory is opened
Citizen.Wait(1000) -- Wait a bit for player data to be ready
local backpackId, textureId = CheckForBackpack()
if backpackId then
print("Player loaded with backpack: " .. backpackId .. " texture: " .. textureId)
else
print("Player loaded without backpack")
end end
end) end)
-- Event for checking backpack info -- Event for checking backpack info
RegisterNetEvent('backpack:client:checkBackpack', function() RegisterNetEvent('backpack:client:checkBackpack', function()
local backpackId, textureId = CheckForBackpack() local backpackId, textureId, gender = CheckForBackpack()
TriggerServerEvent('backpack:server:showBackpackInfo', backpackId, textureId) TriggerServerEvent('backpack:server:showBackpackInfo', backpackId, textureId, gender)
end) end)
-- Event for listing all clothing (debug) -- Event for listing all clothing (debug)
@ -154,3 +160,19 @@ RegisterNetEvent('backpack:client:listClothing', function()
type = 'info' type = 'info'
}) })
end) end)
-- Initialize when player loads
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
-- Nothing needed here, backpack will be checked when inventory is opened
Citizen.Wait(1000) -- Wait a bit for player data to be ready
local backpackId, textureId, gender = CheckForBackpack()
if backpackId then
if Config.Debug then
print("Player loaded with backpack: Gender=" .. gender .. ", ID=" .. backpackId .. ", Texture=" .. textureId)
end
else
if Config.Debug then
print("Player loaded without backpack. Gender=" .. gender)
end
end
end)

View file

@ -2,9 +2,10 @@ Config = {}
-- Bag component IDs and their inventory properties -- Bag component IDs and their inventory properties
-- These are the drawable IDs for the "bags" component (component ID 5) -- These are the drawable IDs for the "bags" component (component ID 5)
-- Separated by gender (0 = male, 1 = female)
Config.Backpacks = { Config.Backpacks = {
-- [drawableId] = inventory properties [0] = { -- Male backpacks
[158] = { -- Example: Small backpack drawable ID [31] = { -- Example: Small backpack drawable ID for males
maxweight = 10000, -- 10kg maxweight = 10000, -- 10kg
slots = 10, slots = 10,
label = 'Small Backpack', label = 'Small Backpack',
@ -15,26 +16,54 @@ Config.Backpacks = {
-- Add more textures if needed -- Add more textures if needed
} }
}, },
[41] = { -- Example: Medium backpack drawable ID [41] = { -- Example: Medium backpack drawable ID for males
maxweight = 20000, -- 20kg maxweight = 20000, -- 20kg
slots = 15, slots = 15,
label = 'Medium Backpack' label = 'Medium Backpack'
}, },
[44] = { -- Example: Large backpack drawable ID [44] = { -- Example: Large backpack drawable ID for males
maxweight = 30000, -- 30kg maxweight = 30000, -- 30kg
slots = 20, slots = 20,
label = 'Large Backpack' label = 'Large Backpack'
}, },
[52] = { -- Example: Tactical backpack drawable ID [52] = { -- Example: Tactical backpack drawable ID for males
maxweight = 40000, -- 40kg maxweight = 40000, -- 40kg
slots = 25, slots = 25,
label = 'Tactical Backpack' label = 'Tactical Backpack'
}, },
[81] = { -- Example: Hiking backpack drawable ID [81] = { -- Example: Hiking backpack drawable ID for males
maxweight = 50000, -- 50kg maxweight = 50000, -- 50kg
slots = 30, slots = 30,
label = 'Hiking Backpack' label = 'Hiking Backpack'
} }
},
[1] = { -- Female backpacks
[29] = { -- Example: Small backpack drawable ID for females
maxweight = 10000, -- 10kg
slots = 10,
label = 'Small Backpack'
},
[39] = { -- Example: Medium backpack drawable ID for females
maxweight = 20000, -- 20kg
slots = 15,
label = 'Medium Backpack'
},
[42] = { -- Example: Large backpack drawable ID for females
maxweight = 30000, -- 30kg
slots = 20,
label = 'Large Backpack'
},
[49] = { -- Example: Tactical backpack drawable ID for females
maxweight = 40000, -- 40kg
slots = 25,
label = 'Tactical Backpack'
},
[77] = { -- Example: Hiking backpack drawable ID for females
maxweight = 50000, -- 50kg
slots = 30,
label = 'Hiking Backpack'
}
}
} }
-- Key to open backpack inventory (default: B) -- Key to open backpack inventory (default: B)

View file

@ -1,19 +1,20 @@
local QBCore = exports['qb-core']:GetCoreObject() local QBCore = exports['qb-core']:GetCoreObject()
-- Open backpack inventory -- Open backpack inventory
RegisterNetEvent('backpack:server:openInventory', function(backpackStashId, backpackId, textureId) RegisterNetEvent('backpack:server:openInventory', function(backpackStashId, backpackId, textureId, gender)
local src = source local src = source
local Player = QBCore.Functions.GetPlayer(src) local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end if not Player then return end
-- Open the inventory -- Open the inventory
local backpackConfig = Config.Backpacks[backpackId] if not Config.Backpacks[gender] or not Config.Backpacks[gender][backpackId] then
if not backpackConfig then print("Error: Backpack config not found for Gender=" .. gender .. ", ID=" .. backpackId)
print("Error: Backpack config not found for ID " .. backpackId)
return return
end end
local backpackConfig = Config.Backpacks[gender][backpackId]
exports["tgiann-inventory"]:OpenInventory(src, "stash", backpackStashId, { exports["tgiann-inventory"]:OpenInventory(src, "stash", backpackStashId, {
maxweight = backpackConfig.maxweight, maxweight = backpackConfig.maxweight,
slots = backpackConfig.slots, slots = backpackConfig.slots,
@ -30,6 +31,7 @@ RegisterNetEvent('backpack:server:openInventory', function(backpackStashId, back
Config.Logs.openTitle, Config.Logs.openTitle,
Config.Logs.openColor, Config.Logs.openColor,
'**Player:** ' .. Player.PlayerData.name .. '**Player:** ' .. Player.PlayerData.name ..
'\n**Gender:** ' .. (gender == 0 and "Male" or "Female") ..
'\n**Backpack Type:** ' .. backpackConfig.label .. '\n**Backpack Type:** ' .. backpackConfig.label ..
'\n**Backpack ID:** ' .. backpackId .. '\n**Backpack ID:** ' .. backpackId ..
'\n**Texture ID:** ' .. textureId .. '\n**Texture ID:** ' .. textureId ..
@ -48,16 +50,17 @@ QBCore.Commands.Add('listclothing', 'List all clothing components (Debug)', {},
end) end)
-- Receive backpack info from client and show notification -- Receive backpack info from client and show notification
RegisterNetEvent('backpack:server:showBackpackInfo', function(backpackId, textureId) RegisterNetEvent('backpack:server:showBackpackInfo', function(backpackId, textureId, gender)
local src = source local src = source
local Player = QBCore.Functions.GetPlayer(src) local Player = QBCore.Functions.GetPlayer(src)
if backpackId and Config.Backpacks[backpackId] then if backpackId and Config.Backpacks[gender] and Config.Backpacks[gender][backpackId] then
local backpackConfig = Config.Backpacks[backpackId] local backpackConfig = Config.Backpacks[gender][backpackId]
TriggerClientEvent('ox_lib:notify', src, { TriggerClientEvent('ox_lib:notify', src, {
title = 'Backpack Info', title = 'Backpack Info',
description = 'Type: ' .. backpackConfig.label .. description = 'Type: ' .. backpackConfig.label ..
'\nGender: ' .. (gender == 0 and "Male" or "Female") ..
'\nDrawable ID: ' .. backpackId .. '\nDrawable ID: ' .. backpackId ..
'\nTexture ID: ' .. textureId .. '\nTexture ID: ' .. textureId ..
'\nCapacity: ' .. (backpackConfig.maxweight / 1000) .. 'kg' .. '\nCapacity: ' .. (backpackConfig.maxweight / 1000) .. 'kg' ..