Caractéristiques
- Cachettes (personnelles et/ou partagées)
- Coffre et boîte à gants du véhicule
- Accessoires d'armes
- Boutiques
- Objets lâchés
Télécharger
Documentation
Introduction
- Gère tout le stockage du joueur, comme le stockage personnel, le véhicule, la réserve et les largages
- boutiques qb intégration pour afficher tous les articles disponibles à l'achat
- Prise en charge intégrée des distributeurs automatiques utilisables
Toutes les exportations répertoriées sont réservées au SERVEUR, sauf indication contraire
État de l'inventaire
L'état de l'inventaire est contrôlé via des sacs d'état utilisant un nom de sac d'état de inv_busy
. Vous pouvez utiliser cet état pour contrôler si l'inventaire doit pouvoir être ouvert ou non
Exemple (serveur) :
Copie
RegisterCommand('checkState', function(source) local player = Player(source) local state = player.state.inv_busy print('L'état actuel de l'inventaire est', state) end, true) RegisterCommand('lockInventory', function(source) local player = Player(source) player.state.inv_busy = true print('L'état actuel de l'inventaire est', state) end, true) RegisterCommand('unlockInventory', function(source) local player = Player(source) player.state.inv_busy = false print('L'état actuel de l'inventaire est', state) end, true)
Exemple (client) :
Copie
RegisterCommand('lockInventory', function() LocalPlayer.state:set('inv_busy', true, true) fin, false) RegisterCommand('unlockInventory', function() LocalPlayer.state:set('inv_busy', false, true) fin, false)
Informations sur l'article
Vous pouvez utiliser SetItemData pour y parvenir
Les éléments prennent en charge des informations supplémentaires qui peuvent leur être ajoutées via un informations
attribut. Ces informations s'afficheront sur l'élément lorsque le joueur passera dessus dans un format de paire clé/valeur
Exemple:
Copie
RegisterCommand('addItemWithInfo', function(source, args) local itemName = args[1] si ce n'est pas itemName alors renvoie fin local info = { uniqueData1 = 'uniqueData1', uniqueData2 = 'uniqueData2', uniqueData3 = 'uniqueData3', uniqueData4 = 'uniqueData4', } exportations['qb-inventory']:AddItem(source, itemName, 1, false, info, 'qb-inventory:testAdd') fin, true) RegisterCommand('editItemWithInfo', function(source) local Player = QBCore.Functions.GetPlayer(source) si ce n'est pas Player alors renvoie fin local éléments = Player.PlayerData.items local itemInfo = éléments[1] print(json.encode(itemInfo, { indent = true })) itemInfo.info = { newInfo = 'Nouvelles informations' } print(json.encode(itemInfo, { indent = vrai })) éléments[1] = itemInfo Player.Functions.SetPlayerData('éléments', éléments) fin, vrai)
Charger l'inventaire
Cette fonction récupérera l'inventaire des joueurs de la base de données via leur identifiant unique, également appelé citoyen
Copie
exportations['qb-inventory']:LoadInventory(source, citizenid)
- source:
nombre
- citoyenid:
chaîne
- retours:
tableau
Copie
RegisterCommand('getInv', function(source) local Player = QBCore.Functions.GetPlayer(source) local citizenId = Player.PlayerData.citizenid local items = exportations['qb-inventory']:LoadInventory(source, citizenid) print(json.encode(items, { indent = true })) fin)
EnregistrerInventaire
Cette fonction enregistre les éléments actuels des joueurs dans la base de donnéesCopier
exportations['qb-inventory']:SaveInventory(source, hors ligne)
- source:
nombre
- hors ligne:
booléen
Exemple:
Copie
RegisterCommand('saveInv', function(source) exportations['qb-inventory']:SaveInventory(source, false) fin)
Effacer l'inventaire
Copie
exportations['qb-inventory']:Effacer l'inventaire(source, éléments de filtre)
- source:
nombre
- Éléments de filtre :
chaîne | tableau
Exemple : Copier
RegisterCommand('clearInventoryExcludeItem', function(source, args) local filterItem = args[1] if not filterItem then return end exportations['qb-inventory']:ClearInventory(source, filterItem) print('Inventaire effacé pour le joueur '..source..', à l'exclusion des éléments : '..filterItem) fin, true) RegisterCommand('clearInventoryExcludeItems', function(source) local filterItems = {'item1', 'item2'} exportations['qb-inventory']:ClearInventory(source, filterItems) print('Inventaire effacé pour le joueur '..source..', à l'exclusion des éléments : '..table.concat(filterItems, ', ')) fin, true)
FermerInventaire
Copie
exportations['qb-inventory']:CloseInventory(source, identifiant)
- source:
nombre
- identifiant:
chaîne
Exemple : Copier
RegisterCommand('closeInventory', function(source) exportations['qb-inventory']:CloseInventory(source) print('Inventaire fermé pour le joueur '..source..' et inventaire '..identifier..' défini sur fermé') fin, true)
Inventaire ouvert
Copie
exportations['qb-inventory']:OpenInventory(source, identifiant, données)
- source:
nombre
- identifiant:
chaîne | facultatif
- données:
tableau | optionnel
Exemple:
Copie
RegisterCommand('openinv', function(source) exportations['qb-inventory']:OpenInventory(source) fin, true) RegisterCommand('openinvbyname', function(source, args) inventaire localName = args[1] exportations['qb-inventory']:OpenInventory(source, inventaireName) fin, true) RegisterCommand('openinvbynamewithdata', function(source, args) inventaire localName = args[1] données locales = { label = 'Réserve personnalisée', poids maximal = 400000, emplacements = 500 } exportations['qb-inventory']:OpenInventory(source, inventaireName, données) fin, true)
Ouvrir l'inventaire par identifiant
Copie
exportations['qb-inventory']:OpenInventoryById(source, playerId)
- source:
nombre
- ID joueur :
nombre
Exemple:
Copie
RegisterCommand('openplayerinv', function(source, args) local playerId = tonumber(args[1]) exportations['qb-inventory']:OpenInventoryById(source, playerId) fin, vrai)
Ouvrir l'inventaire par identifiant
fermera l'inventaire du joueur cible (s'il est ouvert) et le verrouillera via l'état. Il se déverrouillera ensuite lorsque le joueur qui l'ouvre le fermera
Créer une boutique
Copie
exportations['qb-inventory']:CreateShop(shopData)
- données de la boutique:
tableau
Copie
articles locaux = { { nom = 'sandwich', montant = 10, prix = 5 } } RegisterCommand('createShop', fonction(source) local playerPed = GetPlayerPed(source) local playerCoords = GetEntityCoords(playerPed) exportations['qb-inventory']:CreateShop({ nom = 'testShop', étiquette = 'Test Shop', coords = playerCoords, -- emplacements facultatifs = #items, articles = articles }) fin, vrai)
Coordonnées transmises à créerBoutique
sera vérifié par rapport aux coordonnées actuelles du joueur lorsque Boutique ouverte
est appelé si les coordonnées ont été fournies pendant créerBoutique
Boutique ouverte
Copie
exportations['qb-inventory']:OpenShop(source, nom)
- source:
nombre
- nom:
chaîne
Copie
RegisterCommand('openShop', function(source) exportations['qb-inventory']:OpenShop(source, 'testShop') fin)
PeutAjouterUnArticle
Copie
exportations['qb-inventory']:CanAddItem(source, article, montant)
- source:
nombre
- article:
chaîne
- montant:
nombre
- retours:
booléen
Exemple : Copier
RegisterCommand('canAddItem', function(source, args) local itemName = args[1] local amount = tonumber(args[2]) if not itemName or not amount then return end local canAdd, reason = exports['qb-inventory']:CanAddItem(source, itemName, amount) if canAdd then print('Peut ajouter '..amount..' de l'article '..itemName) else print('Impossible d'ajouter '..amount..' de l'article '..itemName..'. Reason: '..reason) end end, true)
Ajouter un article
Copie
exportations['qb-inventory']:AddItem(identifiant, article, montant, emplacement, informations, raison)
- identifiant:
nombre
- article:
chaîne
- montant:
nombre
- fente:
nombre | booléen
- info:
tableau | booléen
- raison:
chaîne
- retours:
booléen
Exemple:
Copie
RegisterCommand('addItem', function(source, args) local itemName = args[1] si ce n'est pas itemName alors renvoie fin exportations['qb-inventory']:AddItem(source, itemName, 1, false, false, 'qb-inventory:testAdd') fin, true)
Supprimer l'élément
Copie
exportations['qb-inventory']:RemoveItem(identifiant, article, montant, emplacement, raison)
- identifiant:
nombre
- article:
chaîne
- montant:
nombre
- fente:
nombre | booléen
- raison:
chaîne
- retours:
booléen
Copie
RegisterCommand('removeItem', function(source, args) local itemName = args[1] si ce n'est pas itemName alors renvoie fin exportations['qb-inventory']:RemoveItem(source, itemName, 1, false, 'qb-inventory:testRemove') fin, true)
Définir l'inventaire
Copie
exportations['qb-inventory']:SetInventory(source, éléments)
- source:
nombre
- articles:
tableau
Exemple : Copier
RegisterCommand('setInventory', function(source) local items = { { nom = 'sandwich', quantité = 10, type = 'item', info = {}, emplacement = 1 }, { nom = 'water_bottle', quantité = 10, type = 'item', info = {}, emplacement = 2 } } exportations['qb-inventory']:SetInventory(source, items) fin, vrai)
Définir les données de l'élément
Cette fonction utilise GetItemByName pour trouver l'élémentName transmisCopy
exportations['qb-inventory']:SetItemData(source, itemName, clé, val)
- source:
nombre
- Nom de l'élément:
chaîne
- clé:
chaîne
- valeur:
chaîne | tableau
- retours:
booléen
Exemple : Copier
RegisterCommand('setItemData', function(source, args) local itemName = args[1] local key = args[2] local val = args[3] si ce n'est pas itemName ou pas key ou pas val alors renvoie end local success = exports['qb-inventory']:SetItemData(source, itemName, key, val) si succès alors print('Définir les données pour l'élément '..itemName..': '..key..' = '..val) else print('Échec de la définition des données pour l'élément '..itemName) end end, true)
Exemple d'informations sur l'article :
Copie
RegisterCommand('setItemData', function(source) local itemName = 'markedbills' local key = 'info' local val = { worth = 1000 } si ce n'est pas itemName ou pas key ou pas val alors renvoie fin local success = exportations['qb-inventory']:SetItemData(source, itemName, key, val) si succès alors print('Définir les données pour l'élément '..itemName..': '..key..' = '..json.encode(val, { indent = true })) else print('Échec de la définition des données pour l'élément '..itemName) fin fin, true)
Utiliser l'élément
Copie
exportations['qb-inventory']:UseItem(nom_élément, ...)
- Nom de l'élément:
chaîne
- . . . :
fonction
Exemple : Copier
RegisterCommand('useItem', function(source, args) local itemName = args[1] si ce n'est pas itemName alors renvoie fin exportations['qb-inventory']:Useitem(itemName, function() print('Article utilisé avec le nom de '..itemName) fin) fin, vrai)
A un article
Cette exportation est également disponible pour une utilisation sur le clientCopier
exportations['qb-inventory']:HasItem(source, articles, quantité)
- source:
nombre
- articles:
chaîne | tableau
- montant:
nombre
- retours:
booléen
Exemple : Copier
RegisterCommand('hasSingleItem', function(source) local item = 'item1' local amount = 5 local hasItem = exports['qb-inventory']:HasItem(source, item, amount) if hasItem then print('Le joueur '..source..' a '..amount..' de '..item) else print('Le joueur '..source..' n'a pas '..amount..' de '..item) end end, true) RegisterCommand('hasMultipleItems', function(source) local items = {'item1', 'item2'} local amount = 5 local hasItems = exports['qb-inventory']:HasItem(source, items, amount) if hasItems then print('Le joueur '..source..' a '..amount..' de chaque article : '..table.concat(items, ', ')) else print('Le joueur '..source..' n'a pas '..quantité..' de chaque élément : '..table.concat(items, ', ')) end end, true) RegisterCommand('hasMultipleItemsWithAmounts', function(source) local itemsWithAmounts = {item1 = 5, item2 = 10} local hasItemsWithAmounts = exports['qb-inventory']:HasItem(source, itemsWithAmounts) if hasItemsWithAmounts then print('Le joueur '..source..' a les éléments spécifiés avec leurs montants') else print('Le joueur '..source..' n'a pas les éléments spécifiés avec leurs montants') end end, true)
Obtenir des emplacements par article
Copie
exportations['qb-inventory']:GetSlotsByItem(éléments, nom de l'élément)
- articles:
tableau
- Nom de l'élément:
chaîne
- retours:
tableau
Exemple : Copier
RegisterCommand('getSlots', function(source, args) local itemName = args[1] si ce n'est pas itemName alors renvoie fin local Player = QBCore.Functions.GetPlayer(source) local items = Player.PlayerData.Items local slots = exportations['qb-inventory']:GetSlotsByItem(items, itemName) pour _, slot dans ipairs(slots) faire print(slot) fin fin, vrai)
Obtenir le premier emplacement par élément
Copie
exportations['qb-inventory']:GetFirstSlotByItem(éléments, nom de l'élément)
- articles:
tableau
- Nom de l'élément:
chaîne
- retours:
nombre
Exemple : Copier
RegisterCommand('getFirstSlot', function(source, args) local itemName = args[1] si ce n'est pas itemName alors renvoie fin local Player = QBCore.Functions.GetPlayer(source) local items = Player.PlayerData.Items local slot = exports['qb-inventory']:GetFirstSlotByItem(items, itemName) si slot alors print('Le premier emplacement contenant l'élément '..itemName..' est : '..slot) else print('Aucun emplacement trouvé contenant l'élément '..itemName) fin fin, vrai)
Obtenir un élément par emplacement
Copie
exportations['qb-inventory']:GetItemBySlot(source, emplacement)
- source:
nombre
- fente:
nombre
- retours:
tableau
Exemple : Copier
RegisterCommand('getItem', function(source, args) local slot = tonumber(args[1]) if not slot then return end local item = exports['qb-inventory']:GetItemBySlot(source, slot) if item then print('L'élément dans l'emplacement '..slot..' est : '..item.name) else print('Aucun élément trouvé dans l'emplacement '..slot) end end, true)
Obtenir l'élément par nom
exportations['qb-inventory']:GetItemByName(source, élément)
- source:
nombre
- article:
chaîne
- retours:
tableau
RegisterCommand('getItemByName', function(source, args) local itemName = args[1] if not itemName then return end local item = exports['qb-inventory']:GetItemByName(source, itemName) if item then print('La première occurrence de l'élément '..itemName..' est dans l'emplacement : '..item.slot) else print('Aucun élément trouvé avec le nom '..itemName) end end, true)
Obtenir des éléments par nom
exportations['qb-inventory']:GetItemsByName(source, élément)
- source:
nombre
- article:
chaîne
- retours:
tableau
Exemple : Copier
RegisterCommand('getItemsByName', function(source, args) local itemName = args[1] if not itemName then return end local items = exports['qb-inventory']:GetItemsByName(source, itemName) if #items > 0 then print('Articles nommés '..itemName..' trouvés dans les emplacements :') for _, item in ipairs(items) do print(item.slot) end else print('Aucun article trouvé avec le nom '..itemName) end end, true)
Obtenir le nombre d'éléments
exportations['qb-inventory']:GetItemCount(source, éléments)
- source:
nombre
- articles:
chaîne | tableau
- retours:
nombre
Exemple : Copier
RegisterCommand('getItemCount', function(source, args) local itemName = args[1] if not itemName then return end local itemCount = exports['qb-inventory']:GetItemCount(source, itemName) if itemCount and itemCount > 0 then print('Vous avez '..itemCount..' d'éléments : '..itemName) else print('Aucun élément trouvé avec le nom '..itemName) end end, true) RegisterCommand('getItemCounts', function(source) local itemNames = {“pomme”, “banane”, “orange”} local itemCount = exports['qb-inventory']:GetItemCount(source, itemNames) if itemCount and itemCount > 0 then print('Vous avez '..itemCount..' des éléments : '..table.concat(itemNames, “, “)) else print('Aucun élément trouvé avec les noms : '..table.concat(itemNames, “, “)) fin fin, vrai)
Installation
Manuel
- Téléchargez le script et placez-le dans le
[qb]
répertoire. - Importer
qb-inventaire.sql
dans votre base de données - Ajoutez le code suivant à votre server.cfg/resouces.cfg
Migration depuis l'ancien inventaire qb
Base de données
Téléchargez le nouveau inventaire.sql
fichier pour créer le nouveau inventaires
tableau
Utilisez le fourni migrer.sql
fichier pour migrer toutes vos données d'inventaire enregistrées à partir de réserves, de coffres, etc.
Une fois terminé, vous pouvez supprimer articles de boîte à gants
objets de réserve
et articles de coffre
tables de votre base de données
CRÉER UNE TABLE SI ELLE N'EXISTE PAS `inventories` (`id` INT(11) NOT NULL AUTO_INCREMENT, `identifier` VARCHAR(50) NOT NULL, `items` LONGTEXT DEFAULT ('[]'), PRIMARY KEY (`identifier`), KEY `id` (`id`) ) MOTEUR=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;