Aller au contenu

hdv — Hôtel de Vente

API hôtel de vente MoonBot Lua : vendre, acheter, configurer le mode HDV automatique.

25 fonctions dans ce namespace.

Index


Référence

hdv.autoSell

hdv.autoSell()

blocking · returns boolean

Vente automatique selon la config HDV. Ouvre l'HDV, vend items specifiques puis par defaut, met a jour les prix, ferme.


hdv.openSell / openBuy

hdv.openSell(npcId?) / hdv.openBuy(npcId?)

blocking · returns boolean

Ouvre l'HDV en mode vente ou achat. -1 = auto-detect.


hdv.close

hdv.close()

returns boolean

Ferme l'HDV.


hdv.sellItem

hdv.sellItem(templateId: number, lotSize: number, price: number)

blocking · returns boolean

Met en vente. lotSize = 1/10/100. price = prix total du lot.


hdv.listItem

hdv.listItem(templateId: number)

blocking · returns number

Charge les offres du marche. Retourne le nombre d'offres. En mode achat, selectionne automatiquement la categorie de l'item (sinon le serveur renvoie 0).


hdv.refreshListings

hdv.refreshListings(templateId: number)

blocking · returns boolean

Recharge les offres du marche pour un item (comme listItem, sans le comptage). Selectionne aussi la categorie en mode achat.


hdv.getLowestPrice

hdv.getLowestPrice(templateId: number, lotSize?: number)

returns number

Prix le plus bas. lotSize: 1/10/100. 0 = aucune offre.


hdv.getMiddlePrice

hdv.getMiddlePrice(templateId: number)

blocking · returns number

Prix moyen serveur.


hdv.itemPrices

hdv.itemPrices(templateId: number)

returns table

Prix par lot : {x1=prix, x10=prix, x100=prix}.


hdv.offers / listingsWithJets

hdv.offers(templateId: number)

returns table

Offres du marche avec leurs JETS. Retourne une liste : {uid, id, templateId, name, effects, x1, x10, x100, jets={{id, value, max, text}, ...}}. templateId/name = objet reellement mis en vente, effects = chaine brute du jeu. Pierres d'ame (categories 85 pleines, 124 gardiens de donjon, 125 archi-monstres de l'HDV des ames) : l'entree demandee est l'id du MONSTRE (hdv.getCategoryItems() renvoie isMonster = true) et chaque offre ajoute soulStone = true, total (nombre de monstres captures) et monsters = {{id, name, count}, ...}, meme format que inventory.getSoulStones() ; templateId est alors la pierre elle-meme (7010, 10417, 10418...). Certificats de dragodinde (categorie 97 de l'HDV des animaux) : chaque offre ajoute mountCertificate = {mountId, validity, model?, name?, owner?, days?, hours?, minutes?}, ce que dit le certificat sans demander le serveur : modele (nombre), nom de la DD si elle en a un, proprietaire, validite restante (jours, heures, minutes). La fiche complete (niveau, sexe, capacites, jauges, genealogie) : hdv.inspectMount(o.uid). Charger d'abord via hdv.listItem/refreshListings. Alias : hdv.listingsWithJets.


hdv.inspectMount

hdv.inspectMount(uid: number, timeoutMs?: number)

blocking · returns table | nil

Fiche complete de la dragodinde d'une offre certificat (paquet Rd, comme « Voir les caracteristiques » dans l'HDV du jeu), au meme format que mount.getMountData : uid (celui de la DD, different de mountCertificate.mountId), name, level, sex (0 male, 1 femelle), model, capacities, energy/energy_max, maturity, serenity, love, stamina, fecondable, reprod (-1 castree), ancestors... nil si l'offre n'est pas chargee (HDV ouvert + hdv.listItem), n'est pas un certificat, ou sans reponse en timeoutMs (5000 par defaut, 200 a 60000). Une seule consultation a la fois : les enchainer avec une pause, pas en parallele.


Exemple — voir les DD (certificats) en HDV

hdv.openBuy()            -- HDV des animaux
hdv.listCategory(97)     -- 97 = certificats de dragodinde
for _, entree in ipairs(hdv.getCategoryItems()) do
  hdv.listItem(entree.id)
  for _, o in ipairs(hdv.offers(entree.id)) do
    local c = o.mountCertificate
    if c then
      local dd = hdv.inspectMount(o.uid)
      if dd then
        print(o.uid, o.x1 .. " k", c.name or "Sans nom", "niv. " .. dd.level,
          dd.sex == 1 and "femelle" or "male", #dd.capacities .. " capacite(s)")
      end
      global.delay(global.random(800, 1500))
    end
  end
end
hdv.close()

Parcourt les certificats en vente et lit la fiche de chaque dragodinde (niveau, sexe, capacites), avec une pause humaine entre deux consultations. Pour acheter une offre precise : hdv.buyListing(o.uid, 1, prixMax). Dans le MapViewer, le panneau HDV affiche le resume du certificat et un bouton « Voir la DD ».


hdv.buyItem

hdv.buyItem(templateId: number, lotSize: number, maxPrice: number)

blocking · returns number

Achete le moins cher sous maxPrice. Retourne prix paye ou 0.


hdv.buyListing / buyOffer / buyByUid

hdv.buyListing(uid: number, lotSize?: number, maxPrice?: number)

blocking · returns number

Achete UNE offre precise par son UID (champ uid de hdv.offers), pas la moins chere. lotSize = 1/10/100 (defaut 1). maxPrice = plafond optionnel. Retourne le prix paye ou 0 (offre inconnue, pas de lot de cette taille, ou au-dessus du plafond). Charger d'abord les offres via hdv.listItem. Le prix envoye est celui affiche : si l'offre a change entre-temps, le serveur refuse l'achat.


Exemple — acheter un jet precis

hdv.openBuy()
hdv.listItem(TEMPLATE)
local choix = nil
for _, o in ipairs(hdv.offers(TEMPLATE)) do
  for _, jet in ipairs(o.jets) do
    -- jet.id = effet (125 = vitalite), jet.value = valeur du jet
    if jet.id == 125 and jet.value >= 40 and o.x1 > 0 and o.x1 <= 50000 then
      if not choix or o.x1 < choix.x1 then choix = o end
    end
  end
end
if choix then
  local paye = hdv.buyListing(choix.uid, 1, 50000)
  print("Achete offre " .. choix.uid .. " pour " .. paye .. " kamas")
else
  print("Aucun jet convenable")
end
hdv.close()

Parcourt les offres d'un item avec leurs jets, garde la moins chere qui atteint le jet voulu (ici >= 40 vitalite pour 50 000 kamas max) puis achete exactement cette offre par son UID. hdv.buyItem prendrait la moins chere sans regarder les jets.


Exemple — lire les pierres d'ame en HDV

hdv.openBuy()             -- devant l'HDV des ames
hdv.listCategory(85)      -- pierres d'ame pleines
for _, entree in ipairs(hdv.getCategoryItems()) do
  -- entree.id = id du MONSTRE (entree.isMonster = true)
  hdv.listItem(entree.id)
  for _, o in ipairs(hdv.offers(entree.id)) do
    local contenu = {}
    for _, m in ipairs(o.monsters or {}) do
      table.insert(contenu, m.name .. " x" .. m.count)
    end
    print(o.uid, o.x1 .. " k", o.total .. " monstres : " .. table.concat(contenu, ", "))
  end
end
hdv.close()

Liste chaque pierre d'ame pleine en vente avec son contenu (monstre, nombre de captures), son prix et son UID. Pour acheter une pierre precise : hdv.buyListing(o.uid, 1, prixMax). Les pierres se vendent a l'unite (x1). Categories : 85 = pierres d'ame pleines, 124 = gardiens de donjon, 125 = archi-monstres ; o.templateId donne la pierre (7010, 10417 ou 10418).


hdv.updatePrice

hdv.updatePrice(uid: number, lotSize: number, templateId: number, newPrice: number)

blocking · returns boolean

Retire et remet en vente au nouveau prix.


hdv.removeListing

hdv.removeListing(uid: number, lotSize: number)

returns boolean

Retire un listing.


Mes ventes

hdv.myListingCount() / myListingUid(i) / myListingItemId(i) / myListingPrice(i) / myListingQty(i) / myFreeSlots()

returns number

Infos sur nos listings. Index 1-based.


hdv.myListings

hdv.myListings()

returns table

Tous nos listings : {uid, id, quantity, price, hours, name, type, typeName}.


hdv.sellableItems

hdv.sellableItems()

returns table

Items vendables dans cet HDV : {id, uid, quantity, name, type}.


hdv.isTypeAllowed / canSellItem

hdv.isTypeAllowed(typeId) / hdv.canSellItem(templateId)

returns boolean

Verifie si un type/item est autorise dans cet HDV.


hdv.getTax / getLotSizes

hdv.getTax() / hdv.getLotSizes()

returns number / table

Taxe (ex: 2.0) et tailles de lot ({1, 10, 100}).


hdv.undercutAll

hdv.undercutAll(lotSize: number, maxDropPercent?: number)

blocking · returns table

Met a jour tous les listings a -1k du moins cher. Retourne {updated, skipped, errors}.


Categories et limites HDV

hdv.listCategory(typeId) / getCategoryItems() / getAllowedTypes() / maxItems() / hdvType()

returns boolean / table / table / number / number

Charge une categorie et expose ses items, les types autorises et les limites de l'HDV courant.