Skip to content

Охота за альбомом

Большинство ботов бьют тех трёх соперников, которых предложила арена. Для чести это нормально, а для альбома бесполезно, потому что эти три имени выбирает игра, а не то, чего вам не хватает.

Mercy SF обходит Зал славы в фоне, запоминает снаряжение каждого увиденного игрока и отправляет следующую атаку на лучшую одолимую цель в целом: ту, что несёт больше всего предметов, которых в вашем альбоме ещё нет.

Альбом

Включается через auto_scrapbook, а arena_mode надо поставить в Scrapbook.

Как работает пул

Обходчик строит в памяти, отдельно для каждого аккаунта, пул игроков и их снаряжения. Дальше каждый бой выбирается из пула, а не из списка подсказок арены.

Пул живёт в пределах сессии и не дольше, и это сделано намеренно. Хранить его казалось бесплатным знанием, а им не было:

  • он рос без предела. Один замеренный аккаунт дошёл до 187 136 игроков при 119 МБ и продолжал прибавлять примерно по 20 МБ каждые двадцать минут;
  • каждое изменение переписывало весь файл синхронно, удерживая при этом блокировку, которая нужна боту для выбора боя, а экрану арены для отрисовки. Замерено: переписывание 119 МБ каждые 27 секунд;
  • запись не была атомарной, а неудачный разбор откатывался к пустому кэшу, так что падение посреди записи всё равно молча выбрасывало весь обход;
  • сохранённое снаряжение это снимок того, что кто-то носил, а игроки переодеваются постоянно, так что большая часть пережившего перезапуск была неверной.

Пересканировать при каждом запуске делает и тот эталонный помощник, которым это вдохновлено, по той же причине.

Выбор цели

Игрок в пуле должен пройти несколько фильтров, прежде чем станет достоин атаки.

ФильтрНастройкаПо умолчаниюСмысл
Потолок уровняscrapbook_max_level_diff0На сколько уровней выше вашего может быть цель. 0 это «никогда выше меня».
Пол уровняscrapbook_min_level_diff0На сколько уровней ниже вашего может быть цель. 0 это без нижней границы.
Силаscrapbook_max_attribute_pct120Потолок суммы характеристик цели в процентах от ваших. 100 означало бы «никогда сильнее меня».
Чёрный списокarena_never_attackпустоИмена, которые не атакуются никогда, что бы они ни несли.
ЖивойИмена, которые сервер отверг с «игрок не найден», запоминаются и пропускаются.

Обе границы по уровню существуют потому, что подводят в противоположных направлениях. Далеко выше вас бои проиграны; далеко ниже они выигрываются без труда, но снаряжение низкоуровневое, так что на почти собранном альбоме они стоят бесплатного боя и не возвращают ничего.

Характеристики предсказывают исход куда лучше уровня, поэтому scrapbook_max_attribute_pct это та ручка, которая на самом деле решает. Значение по умолчанию 120 допускает цель на пятую часть сильнее вас, а это проигранный бой достаточно часто, чтобы это заметить. Опустите до 100, если предпочитаете не проигрывать ни одного.

Чёрный список сверяется с каждым источником: тремя подсказками арены, Залом славы и пулом обходчика. Имя, которому вы сказали нет, не должно вернуться через другую дверь.

Полоса поиска

scrapbook_search_band_enabled включена, и она меняет то, как ищут в пуле, а не то, кто подходит.

На обжитом аккаунте пул доходит до шестизначных величин, и игрок с лучшим счётом в нём часто оказывается на самом краю диапазона уровней, что даёт бой либо невыигрышный, либо ничего не стоящий. Поэтому поиск начинается в полосе вокруг вашего собственного уровня и расширяется только тогда, когда эта полоса иссякла.

НастройкаПо умолчаниюСмысл
scrapbook_search_band_start10Полуширина полосы, с которой начинается поиск, в уровнях.
scrapbook_search_band_step10На сколько уровней полоса растёт каждый раз, когда иссякает.
scrapbook_search_band_max100Наибольшая ширина полосы, прежде чем она вернётся к началу.

Возврат к началу заодно прореживает. Если пройдены все уровни до максимума и цель не нашлась, вероятнее, что запомненное устарело, а не что сервер пуст.

Старение

scrapbook_cache_max_age_hours по умолчанию равен 72. Сохранённое снаряжение это снимок, а игроки меняют вещи без остановки, так что запись недельной давности говорит больше о том, что кто-то носил, чем о том, что он носит сейчас. Хуже того: комплект, который вы уже собрали, не отличить от того, который никогда ничего не стоил. Значение 0 отключает старение целиком.

Мёртвые имена

Игроков переименовывают, удаляют и переносят между серверами. Сервер отвечает «игрок не найден», и без памяти одна устаревшая запись пула разносила бы эту ошибку и ставила весь модуль на паузу на час. Такие имена запоминаются по аккаунтам, так что мёртвая цель одного аккаунта никогда не прячет вполне пригодного игрока от другого.

Набор ограничен десятью тысячами имён. Дойти до этого значит, что пул переворачивался куда сильнее, чем в настоящей сессии, поэтому он очищается, а те немногие имена, которые ещё важны, узнаются заново ценой одного потраченного запроса на каждое.

Темп обхода

Две настройки, и они делают разную работу.

НастройкаПо умолчаниюЧто ограничивает
scrapbook_max_hof_lookups20Запросов на один цикл бота.
scrapbook_crawl_requests_per_min60Запросов в минуту по всему аккаунту. 0 отключает ограничение.

Шестьдесят в минуту это примерно один запрос в секунду непрерывно: достаточно, чтобы пул рос постоянно, без всплесков запросов, которые дало бы одно только повышение бюджета на цикл. Именно поэтому есть обе. Если хотите, чтобы обход шёл жёстче, поднимите обе.

Прочие настройки

Настройки обходчика и целей

НастройкаПо умолчаниюЧто делает
auto_scrapbookвклСам модуль.
scrapbook_crawler_enabledвклОбходить Зал славы непрерывно, а не читать только подсказки арены.
scrapbook_after_xp_winsвклОхотиться за целями для альбома только после боёв на опыт.
scrapbook_scan_arena_opponentsвклЗаписывать и снаряжение трёх соперников, которых предлагает арена, это бесплатные сведения.
scrapbook_early_game_priorityвклОтдавать предпочтение боям ради альбома, пока персонаж низкого уровня, когда альбом наполняется быстрее всего.
scrapbook_hof_rankupвклВести список кандидатов для подъёма в Зале славы, а не только ради предметов.
scrapbook_notify_at0Сообщить, когда в альбоме наберётся столько предметов. 0 значит никогда.
buy_scrapbookвклПокупать записи альбома там, где игра выставляет их на продажу.

Где принимается решение

Стоит знать, если вы читаете исходники: раньше альбом был отдельным модулем бота, и это была ошибка. Он и модуль арены оба считали, что откат арены принадлежит им, зеркалили фильтры друг друга и расходились в том, может ли нижняя граница шанса наложить вето на бесплатный бой.

Решающая половина теперь живёт в модуле боя. Под «альбомом» осталась та механика, которая держит пул достойным выбора: обходчик, старение, границы уровней и список кандидатов на подъём.

Смотрите также

Mercy SF не связан с Shakes & Fidget или Playa Games. Вы используете его на свой риск.