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¶
hdv.autoSellhdv.openSell / openBuyhdv.closehdv.sellItemhdv.listItemhdv.refreshListingshdv.getLowestPricehdv.getMiddlePricehdv.itemPriceshdv.offers / listingsWithJetshdv.inspectMountExemple — voir les DD (certificats) en HDVhdv.buyItemhdv.buyListing / buyOffer / buyByUidExemple — acheter un jet precisExemple — lire les pierres d'ame en HDVhdv.updatePricehdv.removeListingMes venteshdv.myListingshdv.sellableItemshdv.isTypeAllowed / canSellItemhdv.getTax / getLotSizeshdv.undercutAllCategories et limites HDV
Référence¶
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¶
blocking · returns boolean
Ouvre l'HDV en mode vente ou achat. -1 = auto-detect.
hdv.close¶
returns boolean
Ferme l'HDV.
hdv.sellItem¶
blocking · returns boolean
Met en vente. lotSize = 1/10/100. price = prix total du lot.
hdv.listItem¶
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¶
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¶
returns number
Prix le plus bas. lotSize: 1/10/100. 0 = aucune offre.
hdv.getMiddlePrice¶
blocking · returns number
Prix moyen serveur.
hdv.itemPrices¶
returns table
Prix par lot : {x1=prix, x10=prix, x100=prix}.
hdv.offers / listingsWithJets¶
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¶
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¶
blocking · returns number
Achete le moins cher sous maxPrice. Retourne prix paye ou 0.
hdv.buyListing / buyOffer / buyByUid¶
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¶
blocking · returns boolean
Retire et remet en vente au nouveau prix.
hdv.removeListing¶
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¶
returns table
Tous nos listings : {uid, id, quantity, price, hours, name, type, typeName}.
hdv.sellableItems¶
returns table
Items vendables dans cet HDV : {id, uid, quantity, name, type}.
hdv.isTypeAllowed / canSellItem¶
returns boolean
Verifie si un type/item est autorise dans cet HDV.
hdv.getTax / getLotSizes¶
returns number / table
Taxe (ex: 2.0) et tailles de lot ({1, 10, 100}).
hdv.undercutAll¶
blocking · returns table
Met a jour tous les listings a -1k du moins cher. Retourne {updated, skipped, errors}.
Categories et limites HDV¶
returns boolean / table / table / number / number
Charge une categorie et expose ses items, les types autorises et les limites de l'HDV courant.