Chasse à l'album
La plupart des bots attaquent les trois adversaires que l'arène propose. C'est très bien pour l'honneur et inutile pour l'album, parce que ces trois noms sont choisis par le jeu, pas par ce qui vous manque.
Mercy SF parcourt le Panthéon en arrière-plan, retient l'équipement de chaque joueur qu'il voit, et envoie l'attaque suivante sur la meilleure cible battable au niveau global : celle qui porte le plus d'objets que votre album n'a pas encore.

Activez-le avec auto_scrapbook, et mettez arena_mode sur Scrapbook.
Comment fonctionne le vivier
Le crawler construit en mémoire, par compte, un vivier de joueurs et de leur équipement. Chaque combat est ensuite choisi dans le vivier plutôt que dans la liste de suggestions de l'arène.
Le vivier vit le temps de la session et pas plus, et c'est délibéré. Le conserver avait l'air d'être une connaissance gratuite, et ne l'était pas :
- il grossissait sans limite. Un compte mesuré a atteint 187 136 joueurs pour 119 Mo et grimpait encore d'environ 20 Mo toutes les vingt minutes ;
- chaque changement réécrivait tout le fichier de façon synchrone, en tenant le verrou dont le bot a besoin pour choisir un combat et dont l'écran Arène a besoin pour s'afficher. Mesuré : une réécriture de 119 Mo toutes les 27 secondes ;
- l'écriture n'était pas atomique, et un échec de lecture retombait sur un cache vide, donc un plantage en cours d'écriture jetait de toute façon silencieusement tout le parcours ;
- l'équipement en cache est un instantané de ce que quelqu'un portait, et les joueurs se rééquipent en permanence, donc l'essentiel de ce qui survivait à un redémarrage était faux.
Rescanner à chaque exécution est ce que fait l'outil de référence dont ceci s'inspire, pour la même raison.
Choisir une cible
Un joueur du vivier doit franchir plusieurs filtres avant de valoir une attaque.
| Filtre | Réglage | Par défaut | Sens |
|---|---|---|---|
| Plafond de niveau | scrapbook_max_level_diff | 0 | Combien de niveaux au-dessus du vôtre une cible peut être. 0 veut dire « jamais au-dessus de moi ». |
| Plancher de niveau | scrapbook_min_level_diff | 0 | Combien de niveaux en dessous du vôtre une cible peut être. 0 veut dire pas de plancher. |
| Force | scrapbook_max_attribute_pct | 120 | Plafond sur les attributs totaux d'une cible, en pourcentage des vôtres. 100 voudrait dire « jamais plus fort que moi ». |
| Liste noire | arena_never_attack | vide | Noms jamais attaqués, quoi qu'ils portent. |
| Vivant | Les noms que le serveur a rejetés par « joueur introuvable » sont retenus et sautés. |
Les deux limites de niveau existent toutes les deux parce qu'elles échouent dans des directions opposées. Loin au-dessus de vous, les combats sont perdus ; loin en dessous, ils sont gagnés sans effort mais l'équipement est de bas niveau, donc sur un album presque complet ils coûtent un combat gratuit et ne rapportent rien.
Les attributs prédisent l'issue bien mieux que le niveau, donc scrapbook_max_attribute_pct est le bouton qui décide réellement. La valeur par défaut de 120 autorise une cible jusqu'à un cinquième plus forte que vous, ce qui est un combat perdu assez souvent pour se remarquer. Descendez-la à 100 si vous préférez n'en perdre aucun.
La liste noire est vérifiée contre toutes les sources : les trois suggestions de l'arène, le Panthéon et le vivier du crawler. Un nom auquel vous avez dit non ne doit pas revenir par une autre porte.
La bande de recherche
scrapbook_search_band_enabled est activé, et cela change la façon dont le vivier est fouillé, pas qui est éligible.
Le vivier atteint six chiffres sur un compte installé, et le joueur qui y obtient le meilleur score se trouve fréquemment à l'extrémité de la plage de niveaux, ce qui donne un combat soit ingagnable, soit sans valeur. La recherche commence donc dans une bande autour de votre propre niveau et ne s'élargit que quand cette bande s'épuise.
| Réglage | Par défaut | Sens |
|---|---|---|
scrapbook_search_band_start | 10 | Demi-largeur de la bande où commence la recherche, en niveaux. |
scrapbook_search_band_step | 10 | Niveaux dont la bande grandit chaque fois qu'elle s'épuise. |
scrapbook_search_band_max | 100 | Largeur maximale de la bande avant qu'elle ne revienne au début. |
Le retour au début fait aussi le ménage. Avoir balayé chaque niveau jusqu'au maximum sans trouver de cible s'explique plus probablement par des souvenirs périmés que par un serveur vide.
Vieillissement
scrapbook_cache_max_age_hours vaut 72 par défaut. L'équipement en cache est un instantané, et les joueurs changent de matériel sans arrêt, donc une entrée relevée il y a une semaine dit davantage ce que quelqu'un portait que ce qu'il porte maintenant. Pire, une panoplie que vous avez déjà collectée ne se distingue pas d'une qui n'a jamais rien valu. Le mettre à 0 désactive complètement le vieillissement.
Noms morts
Les joueurs sont renommés, supprimés et transférés de serveur. Le serveur répond « joueur introuvable », et sans mémoire une entrée périmée du vivier propagerait cette erreur et mettrait tout le module au repos pendant une heure. Ces noms sont retenus par compte, donc la cible morte d'un compte ne cache jamais un joueur tout à fait valable pour un autre.
L'ensemble est borné à dix mille noms. L'atteindre signifie que le vivier a tourné bien plus qu'une session réelle ne le fait, il est donc vidé et les quelques noms qui comptent encore sont réappris au prix d'une requête gâchée chacun.
Rythme du parcours
Deux réglages, et ils font des choses différentes.
| Réglage | Par défaut | Ce qu'il limite |
|---|---|---|
scrapbook_max_hof_lookups | 20 | Requêtes par cycle du bot. |
scrapbook_crawl_requests_per_min | 60 | Requêtes par minute, pour tout le compte. 0 désactive la limite. |
Soixante par minute, c'est en gros une requête par seconde en continu : assez pour faire grossir le vivier sans les rafales de requêtes que produirait le seul fait d'augmenter le budget par cycle. C'est précisément pour cela que les deux existent. Si vous voulez que le parcours pousse plus fort, montez les deux.
Autres réglages

| Réglage | Par défaut | Ce qu'il fait |
|---|---|---|
auto_scrapbook | activé | Le module lui-même. |
scrapbook_crawler_enabled | activé | Parcourir le Panthéon en continu plutôt que de lire seulement les suggestions de l'arène. |
scrapbook_after_xp_wins | activé | Ne chasser les cibles d'album qu'une fois les combats d'expérience faits. |
scrapbook_scan_arena_opponents | activé | Enregistrer aussi l'équipement des trois adversaires proposés par l'arène, qui est une information gratuite. |
scrapbook_early_game_priority | activé | Préférer les combats d'album tant que le personnage est de bas niveau, quand l'album se remplit le plus vite. |
scrapbook_hof_rankup | activé | Tenir une liste de candidats pour monter au Panthéon, et pas seulement pour les objets. |
scrapbook_notify_at | 0 | Me prévenir quand l'album atteint ce nombre d'objets. 0 veut dire jamais. |
buy_scrapbook | activé | Acheter des entrées d'album là où le jeu les propose à la vente. |
Où se prend la décision
Bon à savoir si vous lisez le code : l'album était autrefois un module de bot à part entière, et c'était un bug. Lui et le module d'arène croyaient tous deux posséder le temps de recharge de l'arène, reproduisaient les filtres l'un de l'autre, et n'étaient pas d'accord sur le fait qu'un plancher de probabilité puisse opposer son veto à un combat gratuit.
La moitié décisionnelle vit maintenant dans le module de combat. Ce qui reste sous « album », c'est la machinerie qui garde le vivier digne d'être choisi : le crawler, le vieillissement, les limites de niveau et la liste de candidats à la montée.