Aller au contenu

inventory — Inventaire

API inventaire MoonBot Lua : équiper, déséquiper, utiliser items, gestion des pods et du sac.

23 fonctions dans ce namespace.

Index


Référence

inventory.list

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

inventory.count()

returns number

Nombre d'items uniques.


inventory.countItem

inventory.countItem(templateId: number)

returns number

Quantite totale d'un item par template ID.


inventory.findByTemplate

inventory.findByTemplate(templateId: number)

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

inventory.findByUid(uid: number)

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

inventory.findByName(name: string)

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

inventory.findAllByName(name: string)

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

inventory.itemNameId(templateId: number)

returns string

Nom d'un item depuis son template ID.


inventory.pods / podsMax / podsP

inventory.pods() / podsMax() / podsP()

returns number

Pods actuels, max, pourcentage.


inventory.itemWeight

inventory.itemWeight(templateId: number)

returns number

Poids unitaire d'un item (pods par exemplaire) depuis les game data. 0 si l'item est inconnu.


inventory.itemPods

inventory.itemPods(id: number, mode?: "uid")

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

inventory.useItem(uid: number)

returns boolean

Utilise un item (par UID).


inventory.equipItem

inventory.equipItem(uid: number, position?: number)

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

inventory.unequipItem(uid: number)

returns boolean

Desequipe un item.


Inventaire et aliases historiques

inventory.inventoryContent() / itemCount(templateId) / getTypeId(templateId) / equippedItems()

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

inventory.deleteItem(uid: number, quantity: number)

returns boolean

Supprime un item.


inventory.dropItem

inventory.dropItem(uid: number, quantity: number)

returns boolean

Jette un item au sol.


inventory.getUID / getGID

inventory.getUID(templateId) / getGID(uid)

returns number

Conversion UID <-> template ID.


inventory.isEquipped

inventory.isEquipped(uid: number)

returns boolean

True si l'item est equipe.


inventory.totalQuantity

inventory.totalQuantity()

returns number

Nombre total d'items en inventaire.


inventory.getSoulStones

inventory.getSoulStones(scope?: "inventory" | "mount" | "all")

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").