Docs: README (project map), AUDIT (review 03.09), BOTS/DEBUG/BOTBRAIN/INSTALL updated for SPP 3
This commit is contained in:
@@ -1,5 +1,29 @@
|
||||
# Боты: что сделано и как этим пользоваться
|
||||
|
||||
## SPP 3 (03.09.2026): боты реально играют
|
||||
|
||||
Население — headless-игроки (настоящие `Player` без клиента). Сборка живёт в git (`README.md`), деплой — `build.ps1`. Что делает каждый бот в течение дня, и как это проверить:
|
||||
|
||||
**Гринд.** Спот по своему уровню (96 зон, полосы уровней посчитаны по реальным спавнам датапака, `tools/fix_zones.py`), цель — моб не выше уровня+1 и подальше от стаи, автошоты своего грейда, скиллы по профилю класса (`FakePlayerCombat.xml`, 43 класса), самобафы и «городские» бафы (WW/Shield/Might/Empower/Acumen…, обновляются, когда спали), бижа своего грейда, зелья при HP < 45 %, отдых сидя при HP < 60 % / MP < 25 %, ответный удар любому, кто напал, бегство от моба на 7+ уровней выше, поводок к споту (1500 — идёт назад, 7000 — телепорт). Дварфы спойлят и свипают. Смерть — 15 с лежит, встаёт в ближайшем городе, продаёт хлам, докупает расходники, через 20–60 с возвращается на спот.
|
||||
|
||||
**Прокачка настоящая**: опыт с реальных убийств, левел-ап реальный, профы на 20/40/76 (`FakePlayerProfessionChange`) — бот берёт следующий класс своей ветки, получает скиллы, говорит об этом; при переходе тира прощается, идёт в город (продажа, покупки, бафы) и телепортируется в зону нового уровня.
|
||||
|
||||
**Экономика настоящая**: свой инвентарь, своя адена. Хлам (дешевле 1500 или стопки) продаётся НПС за полцены, дорогой дроп идёт в **лавку** (реальный `PrivateStoreType.SELL`, купить можно) в городе своего уровня; после лавки — покупка сосок/стрел/банок на заработанное и возврат на спот. Стартовый набор шотов — подарок один раз, дальше только за своё.
|
||||
|
||||
**Осады** (`FakePlayerSieges`). По расписанию `SiegeSchedule.xml` бот-кланы с ≥3 членами 40+ онлайн регистрируются атакующими на замки бот-кланов (по 2 клана на замок, `FakePlayerSiegeAttackerClans`; на замки игроков — только при `FakePlayerSiegeAttackPlayerCastles = True`). Лидеры кланов подгружаются в мир заранее. В начале осады атакующие собираются за внешними воротами, защитники — у артефакта. Атакующие бьют врагов, ломают ворота, идут к артефакту, лидер клана кастует Печать Правителя (3 минуты, остальные прикрывают) — замок переходит настоящей механикой движка. Крики в крик-чат: начало, ворота, печать, победа/поражение. Форс: `do=siege&arg=Giran`, `do=siegeend`, `do=siegeinfo`.
|
||||
|
||||
**Пати.** Соклановцы одного уровня стартуют на одном споте и собираются в настоящие пати (до 6), держатся лидера, ассистят его цель, хилеры лечат. С игроком: «го пати» → бот **приглашает сам** (обычное окно приглашения), инвайт игроку бот принимает.
|
||||
|
||||
**Чат — один движок на всех.** Шёпот и общий чат идут через `FakePlayerUnderstanding`: интенты с опечатками, память (кто убивал/помогал/соклановец/враг по кв), позиция на 15 минут (второй раз «я ж сказал: …»), молчание на первое сообщение незнакомца, реакция на капс, зеркалирование стиля, идиолект (свой смех, паразит, сленг, мат у трети), факты контекста (план: фарм/торговля/осада/переезд, событие: ап, ганг, профа, конец осады) и слоты (`{zone} {level} {mob} {town} {crowd} {drop} {clan} {enemyclan} {castle}`). Боты **разговаривают друг с другом**, когда рядом есть живой игрок: здороваются при встрече, задают вопросы (`bot_talk`: «как фарм», «дроп есть?», «какой лвл», «го в пати», «пк ходят?», «клан есть?»…), отвечают через тот же разбор интентов (до 3 реплик в цепочке), подхватывают жалобы и вопросы, поздравляют с лвлом, сплетничают. Зов на помощь при проигрываемом пвп — соклановцы в радиусе 1500 подтягиваются. LLM (Ollama) по умолчанию только для фраз без интента (`FakePlayerLlmPriority = seams`), `llm` — наоборот.
|
||||
|
||||
**Проверка, что они это делают, а не делают вид**: `do=stats` (сумма по населению), `do=stats&name=Ник` (один бот: убийства, опыт, лут, продано/куплено/адена, лавки, касты, отдыхи, реплики, пати, переезды, профы, осады, последнее действие), `/api/stats` (JSON), строка `FakePlayerTelemetry: last N min -> kills=+… exp=+… loot=+…` в логе раз в `FakePlayerStatsLogMinutes`, `FakePlayerChatLog = True` — каждая реплика в лог с каналом и швом. Оффлайн: `tools/run_harness.sh` (движок чата на реальных XML), `python tools/check_data.py` (пулы, слоты, швы, скиллы профилей).
|
||||
|
||||
Настройки — секция «SPP additions» в `game\config\Custom\FakePlayers.ini`: `FakePlayerLlmPriority`, `FakePlayerBotDialogues`, `FakePlayerEconomy`, `FakePlayerProfessionChange`, `FakePlayerSieges`, `FakePlayerSiegeAttackerClans`, `FakePlayerSiegeAttackPlayerCastles`, `FakePlayerStatsLogMinutes`, `FakePlayerChatLog`.
|
||||
|
||||
Ограничения: NPC-режим ботов (`FakePlayerProgression = True`) не поддерживается — шаблонов `fpc_spp_*` в сервере нет; смертность у магов и на спавне в центре стай выше, чем у живых (см. `AUDIT.md`).
|
||||
|
||||
---
|
||||
|
||||
Сборка от 2026-08-25 (пак `server_interlude.zip`). Население 1–76 с настоящей прокачкой, всё включено по умолчанию.
|
||||
|
||||
## Что в паке
|
||||
|
||||
Reference in New Issue
Block a user