# 50 волн, золотая экономика и хранитель

Дата: 9 ноября 2026. Реализация: 0.6.0, профиль prototype-solo50-v7. Этот раздел уточняет прежние документы20,22,23 и37. Утверждённые иллюстрации минералов и окружение сохранены.

Актуализация0.6.1: молитва вида ранга1, полный обмен600 и повтор пятёрки600 реализованы; актуальная поставка — документ45. Далее сохранены аудит и описание этапа0.6.0; ограничения качества уточнены по всем57 Lua-файлам.

## 1. Что реализовано

- Экспедиция расширена с30 до50 волн. После боссов30 и40 начинается следующая стройка; победа — после50-й волны. Настоящий бесконечный режим остаётся следующим этапом.
- Все50 основных NPC проверены по установленному пакету GemTD2.0 Workshop3817795446: базовое здоровье, скорость, броня, сопротивление магии, тип движения, врождённые и добавляемые способности. Полная таблица доступна в онлайн-плане и CSV.
- Устранено смешение версий: прежние коэффициенты прототипа HP×0,63/speed×0,85 заменены коэффициентами установленного2.0 — HP×0,69/speed×0,69. Одна клетка соответствует128 исходным единицам. Это меняет также уже существовавшие волны1–30, а не только новые.
- Исправлены скорость второй волны700, отрицательное магическое сопротивление ранних врагов, броня отдельных ранних волн, невидимость8-й, лечение15-й на10% вместо20%, награда босса30 —150 золота/300XP. Потери жизней за обычного врага по главам:1–3/1–7/1–11/1–15/1–19. За босса — округлённый вверх процент оставшегося здоровья.
- Поздние способности работают в веб-симуляции: регенерация0,3%maxHP/с; прыжок вперёд по маршруту; очищение имеющихся замедлений/яда/ослабления брони; глобальная суммирующаяся аура замедления союзных врагов. Добавлены краткие вспышки прыжка/очищения и подсказки волн.
- В меню карты появилась кнопка хранителя с полоской опыта. Окно показывает уровень, текущий опыт, остаток до следующего, шансы шести качеств и таблицу всех пяти уровней. Генератор и интерфейс используют одну таблицу.
- Сохранённая победа на30-й продолжается с31-й без потери поля, ресурсов, опыта, случайных потоков, избранного и целей рецептов. Уже живые враги старого сохранения сохраняют записанные HP/скорость; новые появления используют проверенные характеристики. Старые победы10/20 также поддерживаются.

## 2. Основание и границы соответствия

Источник: F:/SteamLibrary/steamapps/workshop/content/570/3817795446/3817795446.vpk. SHA256 VPK: c2aed66ec055edf7fdd3bceb02a0d941d207c01b82326074366f0642c623166e. Расшифрованный Lua исследован как текст, не запускался. SHA256 Lua:810f1ede9cece57b2413f5e0629407554703b1b0e22fd52866ee11e95a1a7695. NPC KV SHA256:19af24c6a0a1151965d9ab8d1962344893ef924954eca179156da91efa7a060e. Ability KV SHA256:1c46eaa37834bb53be854ffa35c720bd8b53bc614385fcd0488c4e49add250f4.

Повторяемый аудит: tools/maps/audit-fifty-waves-and-gold.mjs. Факты и точные выдержки: reference_data/gemtd2-source/fifty-wave-audit/audit.json, economy-functions.json и gold-evidence.json. Значения CharacterOffset в новом gold-evidence — позиции UTF-16 в строке JavaScript, не byte offsets. Старые evidence-файлы future-audit имеют собственные подписанные byte offsets. Полные исходники Dota не публикуются с веб-игрой.

Это установленная локальная редакция, не утверждение о самой последней версии всех GemTD. Старый reference_data/addon_game_mode.lua имеет другие коэффициенты и цены. Проверка в запущенной Dota и внешнем сервере не проводилась.

Основные50 строк соответствуют данным источника. Полное поведение Classic ещё не достигнуто: пока10 обычных врагов/1 босс; в оригинале wave_enemy_count начинается с10, меняется от WinStreakAdjust, имеет минимум5 и не имеет найденного верхнего лимита. Оригинал также выбирает альтернативные NPC, особые варианты35/36/38, календарных/редких боссов и элиту1/400. Эти ветви исследованы, но в0.6.0 не активированы. Нельзя выдавать455 врагов за постоянное число в оригинале:455 — номинал фиксированной основной ветви нашей кампании.

Нативные механики движка портированы с явными границами: прыжок проверяется на узлах наземного пути с шансом10%, cooldown12s, дальность до925 исходных единиц; в веб-версии не пропускает следующий маяк и не воспроизводит Source2 steering/jitter. Аура guai_xietong снимает150 единиц скорости за каждого живого носителя, включает самого носителя, след сохраняется1s; минимальная скорость0,2клетки/с — прежнее веб-решение, не установленный минимум Source2. Blubber использует450 полученного урона и сброс счётчика после7s без урона из локального nativeKV; порядок native dispel и модификаторов не проверен в Dota. Веб-порт снимает существующие яд/замедление/ослабление брони, не отключая действующую огненную ауру. Полный реестр особых эффектов составных башен, MVP, активное перенаправление Mars и остальные ранее обозначенные системы требуют отдельного этапа.

50 уникальных финальных анимированных моделей ещё не изготовлены. Волны31–50 используют существующие16 моделей в разных ролях и масштабах. Это временная графика; исходные Valve-модели не перенесены. После50 оригинал содержит усиленный повтор51–100 без строительства, что не равно запрошенному бесконечному режиму.

## 3. Как зарабатывается золото

| Волны | Обычный противник: золото | Обычный противник: опыт |
| --- | --- | --- |
| 1–9 | 5 | 5 |
| 11–19 | 10 | 10 |
| 21–29 | 15 | 15 |
| 31–39 | 20 | 20 |
| 41–49 | 25 | 25 |
| 10/20/30/40/50: босс | 150 | 300 |

Начальное золото0, пассивного дохода нет. В Solo/Coop общий team_gold; в Race отдельный баланс игрока. XP начисляется до деления большой награды: если награда>=100, золото делится пополам. Элита сначала умножает награду на10. В Race отстающий на2+ волны поток сначала получает половину базовой награды. Есть геройская greed-способность с5% шансом×10 золота; это не базовая способность каждого хранителя. Вор отнимает1% текущего золота у промежуточного маяка. Эти необязательные профильные бонусы и элита ещё не включены в веб-кампанию.

При10 обычных врагах, всех убийствах и без воров/элиты/бонусов50 волн дают7500 золота и8250 опыта. Это проверочный расчёт, не гарантированный доход игрока. Неполученные награды за пропущенных врагов не компенсируются.

## 4. Подтверждённая покупка нужного вида камня

Да, в установленной2.0 есть восемь отдельных цветовых молитв. Сапфир/алмаз/аквамарин/опал/изумруд/топаз/рубин/аметист соответствуют gemtd_hero_lanse/baise/fense/danbai/lvse/huangse/hongse/zise. Каждое применение стоит200 золота, cooldown3s. Это разовая попытка для следующей успешной постановки камня, а не постоянное увеличение вероятности всех следующих пятёрок.

| Ранг способности молитвы | Порог в таблице | Реальный шанс принудительной подмены | Итоговый шанс выбранного вида |
| --- | --- | --- | --- |
| 1 | 40 | 39% | 46,625% |
| 2 | 55 | 54% | 59,75% |
| 3 | 65 | 64% | 68,5% |
| 4 | 70 | 69% | 72,875% |

Расхождение на1п.п. важно: Lua использует RandomInt(1,100) < pray, а не <=. В обычном броске восемь видов равновероятны12,5%; даже при неудаче подмены нужный вид ещё может выпасть сам. Поэтому итог P=override+(1−override)/8. Остальные семь видов имеют соответственно7,625%/5,75%/4,5%/3,875% каждый. Сумма всегда100%.

После следующей успешной постановки поля pray_color/pray очищаются независимо от успеха. Это не гарантия и не эффект на пять камней. Невалидная постановка не должна трактоваться как новый выпавший камень. Повторный каст заменяет ожидающий выбор; накопления нескольких зарядов/суммирования шансов в этих полях нет. Ранг молитвы1–4 — ранг отдельной геройской способности; его нельзя автоматически приравнять к уровню хранителя1–5. Источник получения/улучшения профильных способностей — отдельный профильный поток.

## 5. Качество: базовая система и исключение

| Уровень хранителя | Минимум суммарногоXP | I:скол | II:с дефектом | III:обычный | IV:безупречный | V:идеальный | VI:огромный |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 1 | 0 | 100% | 0% | 0% | 0% | 0% | 0% |
| 2 | 250 | 80% | 20% | 0% | 0% | 0% | 0% |
| 3 | 650 | 60% | 30% | 10% | 0% | 0% | 0% |
| 4 | 1200 | 40% | 30% | 20% | 10% | 0% | 0% |
| 5 | 1900 | 10% | 30% | 30% | 20% | 10% | 0% |

Базовая таблица неизменна: XP повышает хранителя максимум до5; VI случайно не выпадает. Но утверждение «золото никогда не влияет на качество» не подходит к установленной версии: есть три отдельные молитвы качества.

| Молитва | Точное качество подмены | Цена | Пороги по рангам1–4 | Реальные шансы подмены |
| --- | --- | --- | --- | --- |
| gemtd_hero_putong | III | 200 | 50/65/75/80 | 49/64/74/79% |
| gemtd_hero_wuxia | IV | 200 | 29/41/47/50 | 28/40/46/49% |
| gemtd_hero_wanmei | V | 400 | 6/14/18/20 | 5/13/17/19% |

Это тоже однократная попытка на следующий камень, с тем же строгим сравнением<. Успех устанавливает точное качество, а не «не ниже»: III может заменить уже выпавшее IV/V. Итоговый шанс качества=Pподмены+(1−Pподмены)×Pобычного выпадения. Поля молитвы качества очищаются и при неуспехе. В Solo/Coop общий флаг perfected допускает один успешный qualityoverride на строительный интервал и сбрасывается при каждом старте общей волны. В Race caster.perfected сбрасывается в finish_build после завершения своей пятёрки. Это не один успех на всю партию; полный просмотр57 Lua-файлов уточнил предыдущий вывод. Повторная оплата может всё ещё пройти до отсутствующей проверки — такой неудобный путь нельзя молча копировать в интерфейс. Успех любого из трёх видов использует общий perfected-флаг. Молитвы вида и качества хранятся отдельно и могут влиять на один следующий камень одновременно.

В0.6.0 молитвы вида/качества не включены. Окно хранителя честно показывает действующие базовые вероятности, без вымышленных покупок.

## 6. Другие расходы золота

| Действие | Цена по рангам1–4 | Условия и назначение |
| --- | --- | --- |
| Swap/yixinghuanwei | 300/225/175/150 | Обмен двух выбранных объектов; cooldown3s, range500 |
| Adja-Swap/qingyi | 200/140/100/80 | Обмен башни с соседним обычным камнем; cooldown5s, radius192 |
| xuanfeng | 200/125/75/50 | Циклическое перемещение соседних объектов; cooldown5s |
| huidaoguoqu | 600/500/400/300 | Сброс текущей незавершённой пятёрки, не перенос сохранённой башни; cooldown10s |
| Обычное понижение качества | 200 | Выбор результата из текущей пятёрки; снижение по исходной таблице |

В старой редакции Swap стоил375/275/225/200 и возвращал цену при обычном камне. В исследованной2.0 такой возврат отсутствует. Конечный лимит бесплатных переносов и покупка его пополнения не подтверждены. ItemStockMax5 у item_hummer не доказывает пять перестановок: это другой индикатор.

Внутриматчевые ItemCost: jingying750, fog500, huichun500, fly750, aojiao250, qianggong250, huabingxie500, qiongguidun500, mobang500, moshuhe1000. Обработчики эффектов есть, но доступный ассортимент, ограничения закупки и режимы надо дополнительно сверить с интерфейсом оригинала. Эти предметы пока не предлагать как готовый магазин веб-версии.

Ракушки/shell, ice/candy и профильные товары отделены от золота партии. Локальные API отправляют GoodsId на внешний backend, его актуальные цены/платежи/возвраты не установлены. Нельзя объявлять исследованные ракушечные цены или продавать игровые преимущества на основании догадки. Монетизацию проектировать отдельно от этой базовой экономики.

## 7. Следующий этап реализации экономики для ИИ-агента

- Сначала выбрать и зафиксировать versioned ruleset GemTD2.0; не смешивать старые цены Swap и новые молитвы. Добавить реестр расходов: actionId, rank, cost, cooldownTicks, допустимые фазы, effect, evidence. Отдельно pendingFamilyPrayer и pendingQualityPrayer/perfected, не один универсальный бафф удачи.
- Первым реализовать разовый выбор вида: компактное окно из меню хранителя, восемь изображений, цена200, текущий ранг и рассчитанный итоговый шанс. Показать «На следующий камень, попытка не гарантирована». Подсветить активный выбор на карте; не загромождать плашки рецептов.
- Перед принятием команды проверить баланс, фазу/возможность дальнейшей постановки, доступную способность и cooldown. Ожидающая молитва не должна молча пропадать от повторного случайного нажатия: замену показать явно. Ранг брать из доступной способности, не из XP хранителя.
- Применять эффект после успешной проверки клетки и перед созданием фактического минерала. Отказанная команда не меняет деньги/RNG/ожидающий эффект. Одно успешное создание камня потребляет один ожидающий эффект, включая неуспех подмены. Зафиксировать порядок quality roll → family roll → family prayer → quality prayer. Все RNG-потоки и результаты команд сохранять детерминированно.
- Списывать золото и сохранять намерение атомарно; дубль commandId не списывает повторно. Это сознательная защита веб-версии: оригинальный CostGold вызывается до channel success, некоторые последующие проверки происходят после оплаты. Исторические неудобства нельзя выдавать за необходимое правило.
- После цветовых молитв реализовать Swap с предпросмотром двух клеток и нового маршрута. При конфликте блокировки/чужой собственности/дистанции — отказ без списания. Далее повтор пятёрки и понижение. Молитвы качества вводить отдельным решением с ясным perfected-флагом и доступностью — не прятать исключение за стандартной таблицей хранителя.
- В кооперативе общий кошелёк обслуживается серверной последовательностью команд: резервирование суммы, права игрока, активные эффекты владельца и журнал. Клиент отправляет намерение, сервер решает RNG и результат. В Race кошельки и pending-эффекты раздельны. Профильная валюта никогда не участвует в goldLedger.
- Счётчики статистики разделить: goldEarned/goldSpent/goldStolen/currentGold; расходы по actionId; купленные/потреблённые/успешные молитвы; фактические family/quality rolls. Возвраты отдельными событиями, не отрицательный доход. Подготовить save migration, reconnect, replay и экспорт итогов.
- Проверки: граничные1/39/40/100 и прочие пороги, сумма вероятностей100%, невалидная клетка без расхода, исчерпание эффекта при неуспехе, повторная команда, новая вкладка/загрузка, изменение фаз, совместный кошелёк при одновременных покупках. Числовые вероятность/цена/описание должны иметь единый источник данных.

## 8. Дальнейшая очередь кампании

- Довести источник до Classic: случайные альтернативы и их собственные HP/способности; специальные35/36/38; боссовые варианты; элита; WinStreakAdjust и связанные с контрольными точками веса. До этого называть таблицу основной ветвью50 волн.
- Проверить Source2 native Blubber/Mars/невидимость/ограничения скорости/округление HP и порядок модификаторов в запущенной игре. Не заменять кодированные значения пересказами вики другой версии.
- Довести эффекты всех составных башен и проверить достижимость50-й волны реальными стратегиями. Прогон с принудительными убийствами проверяет жизненный цикл и награды, а не баланс победной стратегии.
- Производство50 индивидуальных моделей вести по волнам и ролям из документа20; нынешние16 временных моделей оставить до замены. Не увеличивать все существа до нечитаемого масштаба на телефоне.
- После кампании50 реализовать запрошенный настоящий endless как отдельный профиль: детерминированные рост/награды/ограничения/рейтинги; не объявлять оригинальный повтор51–100 бесконечным режимом.

## 9. Проверка поставки

157 автоматических тестов: все50 независимых строк аудита, цикл455 основных врагов,7500gold/8250XP без потерь, переходы30→31/40→41/50→победа, старые сохранения, новые способности и сохранение детерминизма, границы опыта и общая таблица вероятностей. Браузерная проверка дополнительно фиксируется в output/GemTD_fifty_waves_guardian_QA.json. Производительность физического телефона не измерена программным браузерным стендом.
