perceptor — Percepteurs de guilde¶
API percepteurs MoonBot Lua : lister, poser et relever les percepteurs de la guilde, percepteurs visibles sur la carte.
9 fonctions dans ce namespace.
Index¶
Percepteurs : fonctionnement communperceptor.listExemple — lister les percepteurs de la guildeperceptor.hireExemple — poser un percepteurperceptor.collectExemple — relever les percepteurs de la guilde sur la carteperceptor.onMapAlertes de percepteurs
Référence¶
Percepteurs : fonctionnement commun¶
Fonctions bloquantes (comme les autres actions) ; formes perceptor.f() et perceptor:f() acceptées. Arrêt du script pendant l'attente : la fonction s'interrompt proprement (une relève dont la fenêtre est déjà ouverte va quand même au bout, sinon son contenu serait perdu) ; garde de 25 s (« délai dépassé : le moteur n'a pas répondu »). Si le compte est piloté ailleurs (controller, planning…), elles rendent « Action non exécutée : le compte est piloté ailleurs (controller, planning ou autre script). ».
perceptor.list¶
blocking · returns { open, count, max, hireCost, list } | nil, string
Lit la liste des percepteurs de la guilde. Déjà ouverte (autre script, client natif), ou vue ouverte il y a moins de 60 s : réponse immédiate, aucun paquet (open faux dans ce second cas). Sinon ouvre la fenêtre de guilde comme un joueur (onglet Percepteurs ; seul le clic d'onglet si la fenêtre est déjà ouverte sur Maisons après une potion de foyer), lit la liste, puis la referme après un court délai de lecture si personne d'autre ne la tient. Durée typique 1-3 s. Appelée en boucle, elle ne rouvre donc la fenêtre qu'une fois par minute au plus. Comme dans le client officiel, la fenêtre de guilde se ferme à chaque nouvelle carte, combat, dialogue ou échange. liste = { open, count, max, hireCost, list = { entrée, … } } (open : liste à jour en direct, faux pour une liste servie depuis la dernière ouverture) ; entrée = { id, mapId, x, y, name, state, callerName, startMs, lastHarvester, lastHarvestMs, nextHarvestMs, mine } : id = id de la liste (= id de la carte du percepteur, différent de l'id du sprite) ; x/y nil si la carte est inconnue ; state 0 = en collecte, 1 = attaqué, 2 = en combat ; callerName (poseur), startMs (date de pose, ms), lastHarvester, lastHarvestMs, nextHarvestMs : nil si inconnus ; mine = posé par ce personnage. Raisons : « Le personnage n'est pas en jeu. », « Le personnage n'est dans aucune guilde. », « La guilde doit compter au moins 10 membres pour avoir des percepteurs. », « La guilde n'a pas répondu (5 s) : liste des percepteurs indisponible. », « La liste des percepteurs n'est pas arrivée (5 s). », « La liste des percepteurs a été fermée. », « La fenêtre de guilde a été rechargée sur l'onglet Maisons. », « Connexion perdue : … », « Guilde changée : … ».
Exemple — lister les percepteurs de la guilde¶
local percos, err = perceptor.list()
if not percos then
global:printError("Percepteurs : " .. err)
return
end
global:printMessage(percos.count .. "/" .. percos.max .. " percepteurs, pose à " .. percos.hireCost .. " kamas")
for _, p in ipairs(percos.list) do
global:printMessage(p.name .. " en [" .. tostring(p.x) .. "," .. tostring(p.y) .. "], état " .. p.state)
end
Nombre, maximum et coût de pose, puis chaque percepteur avec sa position (nil si la carte est inconnue) et son état.
perceptor.hire¶
blocking · returns boolean, string | nil
Pose un percepteur sur la carte du personnage, comme le bouton « Poser un percepteur » : lit la liste (nombre, maximum, coût), vérifie les conditions officielles, confirme après un délai humain (0,8-2 s), envoie la pose et attend la réponse du serveur (5 s). Durée typique 2-5 s. Conditions : en jeu sur une carte chargée, hors combat, personnage libre (pas de déplacement, récolte, échange, dialogue, fenêtre de voyage ni demande ouverte), en guilde avec le droit « Poser un percepteur » (ou meneur), aucun percepteur sur la carte, aucune autre action percepteur en cours, nombre < maximum, kamas strictement supérieurs au coût. Raisons (exemples) : « Pas le droit de poser un percepteur dans
Exemple — poser un percepteur¶
local ok, err = perceptor.hire()
if ok then global:printSuccess("Percepteur posé") else global:printError(err) end
Pose sur la carte actuelle ; la raison d'un refus est en clair.
perceptor.collect¶
blocking · returns true, { xp, kamas, items, message } | false, string
Relève le percepteur id de la carte (menu « Relever ») : ouvre sa fenêtre, « Tout transférer » après 0,8-2 s, ferme après 0,6-1,5 s, puis lit le rapport de la guilde. Le percepteur est retiré par le jeu ; ce qui n'a pas pu être pris (pods) est perdu et le message le dit. id : l'id rendu par perceptor.onMap() (sprite), ou l'id de perceptor.list() pour le percepteur de la guilde sur la carte actuelle. Durée typique 2-5 s. récolte = { xp, kamas, items = { { id, qty, name }, … }, message } : xp nil si le rapport n'est pas arrivé (récolte alors comptée depuis la fenêtre) ; kamas nil si rien n'a été reçu ; name nil pour un objet inconnu ; message = texte français (« Percepteur Dan Do'Barilla relevé en [3,-7] : 130 XP, 11056 kamas, 5 objet(s). »). Conditions : comme la pose (sauf droit et liste) + percepteur sur la carte, de notre guilde, droit « Collecter les percepteurs » (ou meneur), ou « Collecter ses propres percepteurs » pour un percepteur à soi. Raisons (exemples) : « identifiant invalide : entier attendu (perceptor.onMap()) », « Ce percepteur n'est pas sur la carte du personnage. », « Ce percepteur appartient à la guilde
Exemple — relever les percepteurs de la guilde sur la carte¶
for _, p in ipairs(perceptor.onMap()) do
if p.mine then
local ok, res = perceptor.collect(p.id)
if ok then global:printSuccess(res.message) else global:printError(res) end
end
end
Relève chaque percepteur de la guilde présent sur la carte (le percepteur est retiré).
perceptor.onMap¶
returns { id, name, guild, level, mine, own, cell }[]
Percepteurs visibles sur la carte (aucun paquet). id = id du sprite (à passer à collect) ; guild (nom de la guilde, nil en combat) ; level = niveau de la guilde ; mine = de notre guilde ; own = « ce percepteur m'appartient » selon le jeu ; cell = cellule. Table vide s'il n'y en a pas.
Alertes de percepteurs¶
-- console du bot (source « Percepteur »)
-- Discord : Config → Notifications Discord → « Percepteurs de la guilde »
Les attaques, survies, morts, poses, retraits et récoltes des percepteurs de la guilde s'écrivent dans la console du bot (source « Percepteur », par exemple « Le percepteur Dan Do'Barilla est attaqué en [3,-7] », ou « sur la carte 1234 » quand la position est inconnue) et, si la case « Percepteurs de la guilde » de Config → Notifications Discord est cochée, partent aussi sur le salon Discord du bot. Option « Prévenir quand un percepteur posé depuis N h n'a pas été attaqué » : message « prêt à récolter », une fois par percepteur. Une récolte donne l'XP, les kamas et les objets du rapport de la guilde, objets nommés (10 sortes au plus, les suivantes comptées) : « … a relevé la collecte du percepteur … : 130 XP, 11056 kamas, 5 objet(s) (2 × …, 3 × …) ». Le jeu n'envoie le contenu d'un percepteur qu'à sa relève : avant, personne ne peut voir ce qu'il a récolté.