inventory — Inventaire¶
API inventaire MoonBot Lua : équiper, déséquiper, utiliser items, gestion des pods et du sac.
23 fonctions dans ce namespace.
Index¶
inventory.listJets d'un item (effects / jets)inventory.countinventory.countIteminventory.findByTemplateinventory.findByUidinventory.findByNameinventory.findAllByNameinventory.itemNameIdinventory.pods / podsMax / podsPinventory.itemWeightinventory.itemPodsinventory.useIteminventory.equipIteminventory.unequipItemInventaire et aliases historiquesinventory.deleteIteminventory.dropIteminventory.getUID / getGIDinventory.isEquippedinventory.totalQuantityinventory.getSoulStonesExemple : pierres d'âme de la monture
Référence¶
inventory.list¶
returns table of {uid, templateId, quantity, position, name, type, superType, typeName, weight, totalWeight, level, equipped, effects, jets}
Tous les items de l'inventaire. weight=poids unitaire, totalWeight=weight×quantity. position < 0 = en inventaire, position >= 0 = equipe (0=amulette, 1=arme, 2=anneau1, 3=ceinture, 4=anneau2, 5=bottes, 6=coiffe, 7=cape, 8=familier, 9=dofus1..14=dofus6, 15=bouclier). effects = chaine brute des effets, jets = jets decodes {id, value, max, text} (voir « Jets d'un item »).
Jets d'un item (effects / jets)¶
local item = inventory.findByTemplate(2107)
for _, jet in ipairs(item.jets) do
print(jet.id, jet.value, jet.max, jet.text)
end
-- Familier : PV et date du dernier repas
for _, item in ipairs(inventory.equippedItems()) do
if item.position == 8 then
for _, jet in ipairs(item.jets) do
if jet.id == 800 then print("PV familier", jet.value) end
if jet.id == 808 then print(jet.text) end
end
end
end
returns effects: string, jets: table of {id, value, max, text}
Chaque item d'inventaire, d'equipement (equippedItems) et de coffre (exchange.storageItems) expose ses jets reels, decodes depuis les paquets que MoonBot recoit deja (ASK a la connexion, OAKO a l'ajout, OCO/OCK aux modifications, EL a l'ouverture du coffre). effects = chaine brute du jeu (hex, id#val1#val2#val3 separes par des virgules). jets = liste lisible au meme format que hdv.offers : id = identifiant d'effet en DECIMAL (125 = vitalite, 124 = sagesse, 118 = force, 126 = intelligence, 123 = chance, 119 = agilite, 111 = PA, 128 = PM...), value = valeur jetee, max = borne haute (= value pour un jet fixe), text = libelle du jeu (« +346 en vitalite »). Voir aussi le module pets pour la lecture structuree et le nourrissage. Familiers : 800 = points de vie (value = PV restants, hex 320 dans le paquet), 806 = corpulence, 807 = dernier repas (value = id de l'objet donne), 808 = date du dernier repas (text = jj/mm/aaaa hh:mm). Lecture seule ; les effets sans affichage sont ignores et un item sans effet donne jets = {}.
inventory.count¶
returns number
Nombre d'items uniques.
inventory.countItem¶
returns number
Quantite totale d'un item par template ID.
inventory.findByTemplate¶
returns {uid, templateId, quantity, position, name, effects, jets, ...} | nil
Trouve le premier item correspondant au template ID (memes champs que inventory.list, jets inclus). Retourne nil si absent.
inventory.findByUid¶
returns {uid, templateId, quantity, position, name, effects, jets, ...} | nil
Trouve un item par son UID unique (memes champs que inventory.list, jets inclus).
inventory.findByName¶
returns {uid, templateId, quantity, position, name, effects, jets, ...} | nil
Trouve le premier item correspondant au nom exact (memes champs que inventory.list, jets inclus).
inventory.findAllByName¶
returns table of {uid, templateId, quantity, position, name, effects, jets, ...}
Tous les items dont le nom correspond (memes champs que inventory.list, jets inclus).
inventory.itemNameId¶
returns string
Nom d'un item depuis son template ID.
inventory.pods / podsMax / podsP¶
returns number
Pods actuels, max, pourcentage.
inventory.itemWeight¶
returns number
Poids unitaire d'un item (pods par exemplaire) depuis les game data. 0 si l'item est inconnu.
inventory.itemPods¶
returns number
Poids total d'un item dans l'inventaire = poids unitaire × quantité. Par défaut cherche par template ID (somme toutes les stacks). Avec "uid" en 2e arg, cible un stack précis par UID. Retourne 0 si absent.
inventory.useItem¶
returns boolean
Utilise un item (par UID).
inventory.equipItem¶
returns boolean
Demande l'equipement d'une instance par UID, pas par templateId. Position optionnelle deduite du type ; le slot 1 correspond a l'arme ou a l'outil de metier. true signifie que la commande est mise en file, pas que le serveur a accepte l'equipement. Relire inventory.findByUid(uid).position ou inventory.equippedItems() avec une attente bornee avant une action dependante. Un refus de niveau/conditions reste possible. Reequiper un outil ne recharge pas les metiers : en cas de gather() sans ressource apres un craft, verifier aussi job.list() et job.level(28) pour Paysan. Voir docs/diagnostic-cycle-ble-farine-pain-2026-09-06.md pour le defaut de mise a jour d'XP corrige.
inventory.unequipItem¶
returns boolean
Desequipe un item.
Inventaire et aliases historiques¶
returns table / number / number / table
inventoryContent est l'ancien format de liste; itemCount est un alias de countItem; equippedItems liste l'equipement ({uid, templateId, quantity, position, name, effects, jets}). getTypeId est un stub historique et retourne 0.
inventory.deleteItem¶
returns boolean
Supprime un item.
inventory.dropItem¶
returns boolean
Jette un item au sol.
inventory.getUID / getGID¶
returns number
Conversion UID <-> template ID.
inventory.isEquipped¶
returns boolean
True si l'item est equipe.
inventory.totalQuantity¶
returns number
Nombre total d'items en inventaire.
inventory.getSoulStones¶
returns table of {uid, templateId, name, quantity, location, total, monsters: table of {id, name, count}}
Liste les Pierres d'âme PLEINES et, pour chacune, les monstres capturés. scope (optionnel) : "inventory" (défaut) = sac du personnage ; "mount" = stockage de la monture équipée, qui doit être ouvert au préalable avec mount.openInventory() (échange type 15) ; "all" = sac puis monture. location vaut "inventory" ou "mount". monsters = liste {id monstre, nom, nombre capturé} ; total = nombre total de monstres dans la pierre. Inventaire de monture fermé ⇒ partie monture vide (avertissement dans le journal pour "mount") ; scope inconnu ⇒ erreur Lua. Utile pour trier/vendre les pierres en arène/HV selon leur contenu, ou choisir lesquelles retirer de la DD avec mount.getItemByUid(stone.uid, 1).
Exemple : pierres d'âme de la monture¶
if mount.openInventory() then
for _, stone in ipairs(inventory.getSoulStones("mount")) do
for _, m in ipairs(stone.monsters) do
print(stone.uid, m.name, m.count)
end
if stone.monsters[1] and stone.monsters[1].id == 466 then
mount.getItemByUid(stone.uid, 1) -- retire la pierre vers le sac
end
end
mount.closeInventory()
end
returns exemple
Ouvre le stockage de la DD, lit les pierres pleines qui s'y trouvent avec leur contenu, puis retire celles dont le premier monstre est l'id 466. Les tables sont des instantanés : relire après un retrait. mount.getSoulStones() est un raccourci de inventory.getSoulStones("mount").