Aller au contenu

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


Référence

Percepteurs : fonctionnement commun

perceptor.list() / perceptor:list() — de même pour hire, collect et onMap

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

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

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 (droit « Poser un percepteur »). », « Il y a déjà un percepteur sur cette carte. », « Le nombre maximum de percepteurs de la guilde est déjà atteint (5 sur 5). », « Pas assez de kamas pour poser un percepteur : il en faut plus de 1520, le personnage en a 1520. », « La carte a changé : rien n'a été posé. », « Impossible pendant un combat. », « Une action percepteur est déjà en cours (relève). », refus du serveur : « Impossible de poser un percepteur maintenant : il doit se reposer (délai entre deux poses). », « Impossible de poser un percepteur sur cette carte. »…, « Le serveur n'a pas répondu à la pose (5 s) : vérifiez la liste des percepteurs. », « La liste des percepteurs n'a pas pu être lue (15 s) : rien n'a été posé. ».


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

perceptor.collect(id: number)

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 , pas à la vôtre. », « Pas le droit de relever les percepteurs dans (droit « Collecter les percepteurs »). », « Ce percepteur est déjà ouvert par un autre joueur. », « Le percepteur ne s'est pas ouvert (5 s) : rien n'a été relevé. », « La fenêtre du percepteur s'est fermée avant le transfert : rien n'a été pris. », « Connexion perdue pendant la relève : vérifiez l'inventaire et le percepteur. ».


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

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é.