# RustNotMC — данные оригинала, решения и план работ Файл для перечитывания: после сброса контекста, при передаче работы другому агенту или при возврате к проекту через месяц. Здесь лежит всё, что нужно знать, чтобы продолжить, не выясняя заново. Порядок работы: сначала этот файл, потом код. --- ## 0. Где мы сейчас | модуль | что в нём | состояние | |---|---|---| | `rsx-protocol` | формат провода: кадрирование, буфер, рукопожатие, игровые пакеты | рабочий, 22 теста | | `rsx-auth` | свои аккаунты сервера (PBKDF2, токены, троттлинг) | рабочий, используется только когда лаунчер не настроен | | `rsx-server-core` | тик-луп, мир (чанки, генерация, сохранение), сессии, вход через лаунчер | рабочий, 49 тестов | | `rsx-client` | загрузчик модов, API модов, хуки в клиент | рабочий, 128 тестов | | `game-fork` | форк Minecraft 1.12.2: свой сетевой слой, свой экран входа, свой HUD | собирается чисто, 3275 классов | Уже работает целиком: клиент заходит на сервер по токену лаунчера → сервер спрашивает лаунчер «этот ваш?» → клиент получает мир → чанки приходят и рисуются → игрок ходит и ломает блоки. Не сделано: предметы, инвентарь, крафт, верстаки, изучение чертежей, узлы-ресурсы (деревья/камни/руда как разрушаемые объекты), постройка баз, нормальная генерация мира, транспорт на NIO, дальний вид (DistantView). **Данные оригинала** — раздел 1: срез Rust на **06.11.2025** («Pivot Or Die»). Упрощения проекта поверх оригинала: **без тех-дерева верстака**, **без автоматизации** (Industrial Crafter), **без биомов и джунглей**, **стартовые предметы не исследуются**. Все числа раздела 1 помечены: ✅ подтверждено · 🟡 косвенно · ❌ не подтверждено. --- ## 1. Данные оригинала (Rust) — срез на 06.11.2025 **Какая версия игры.** Rust на **6 ноября 2025** — обновление **«Pivot Or Die»** (06 Nov 2025). Это уже после: - **«Tech Tree Update»** (03.12.2020) — в верстаке появилось тех-дерево, а заодно приехала большая ребалансировка («over 300 balance changes, touching nearly every item»: переписаны времена крафта, HP, стоимости, Holosight переехал на T2, из ящиков перестали падать чертежи); - **«Meta Shift»** (02.10.2025) — фрагменты чертежей в рецептах верстаков 2 и 3, скрап из рецептов верстаков убран. И **до** обновлений 2026 года (апгрейд верстака на месте 07.05.2026, Livestock 01.10.2026) — их не берём. **Что это меняет в цифрах:** | механика | состояние на 06.11.2025 | |---|---| | цена исследования (стол) | **15 / 30 / 60 / 120** скрапа по редкости (Common / Uncommon / Rare / Very Rare). До 06.11.2025 было 20 / 75 / 125 / 500 | | тех-дерево верстака | есть; цена разблокировки — те же 15/30/60/120 по редкости (колонка «125/250/500» в вике — **устаревшая**) | | рецепты верстаков | L1: 500 дерева + 100 металла, **без скрапа**; L2: 500 металла + 20 ХМ + **5 Basic Blueprint Fragment**; L3: 1000 металла + 100 ХМ + **5 Advanced Blueprint Fragment** | | скрап | в рецепты верстаков **больше не входит**; тратится только на исследование и разблокировку | **Что из этого мы НЕ делаем** (решения проекта, см. п. 5): - **стартовые предметы не исследуются**: то, что игрок получает в самом начале, и всё «известное по умолчанию» — без чертежей и без скрапа; - **тех-дерево верстака** — оверхед (отдельный UI с деревом и ветками): знания берём только со стола исследований; цифры на случай, если решим иначе, — в п. 1.3; - **автоматизация** (Industrial Crafter, индустриальный крафт, Research Paper для него) — оверхед; - **биомы и джунгли** (Jungle Crate и прочее) — мир один, без биомов; - **обновления после 06.11.2025** — не берём. **Как доставать данные этой эпохи.** У вики Facepunch есть история правок: `https://wiki.facepunch.com/rust/item/~history` (список ревизий) и `~diff:` (изменения), плюс `~edit` (текущий wikitext). Отсюда берётся состояние страницы на дату. Для более старой эпохи (до 03.12.2020) — MediaWiki API fandom: `…/api.php?action=query&prop=revisions&titles=&rvlimit=1 &rvstart=<дата>&rvdir=older&rvprop=content&format=json`. Значки: ✅ подтверждено на 06.11.2025 · 🟡 косвенный источник · ❌ не подтверждено. ### 1.1 Камень (Rock) — стартовый предмет > «the most basic resource gathering and fighting tool» — инструмент сбора и оружие. - **Крафт:** 10 Stones, **верстак не нужен**, время 5 с (на верстаке 1 — 2 с, на 2/3 — 1 с). ✅ О - **Знание по умолчанию:** рецепт открыт с начала игры, исследовать не нужно. Цена **физического чертежа** — 120 скрапа; платится только ради бумажки (например, для Industrial Crafter). Формулировка вики: *«This blueprint is known by default. Research is only needed to obtain a physical blueprint for the Industrial Crafter.»* ✅ О - **Стартовый набор:** по гайдам 2023–2025 игрок спавнится с камнем и фонарём. ❌ На официальной вике **не документировано** — для нас это не факт, а решение проекта (выдаём камень в первый слот хотбара). - **Боевая статистика:** урон 10, множитель в голову ×2 (голова 20, торс 10), темп удара 0.8 с, дальность 1.2, радиус удара 0.2. ✅ О Руки/ноги — 8 (только С, и это **частный случай**: единого правила «руки/ноги = 0.8» в Rust нет — у разного оружия доли рук 0.63–1.0, ног 0.48–0.9). 🟡 - **Сбор:** дерево — 10 дерева за удар (±10 %), руда — 5 руды за удар (±20 %), плоть — 10 урона; потеря прочности 0.3 за удар по дереву и руде. ✅ О - **Прочность:** официальной вики **нет поля HP** ни у одного предмета. Ориентир — шкала 0…100 (ремонт = ровно 20 % рецепта), значит камень выдерживает ~333 удара по дереву. ❌ Точное значение официально не подтверждено. - **Урон по постройкам:** камнем **лоза ломается с одного удара** (HP лозы 10 = урон камня 10). На дерево нужно 37 камней (370 камней-ресурса), на камень — 74, на лист — 295, на броню — 589. ✅ О (HP) + С (расчёт) Числа «9 / 0.2 / 0.1» из старой версии плана — **неверны** (см. 1.9). **Сколько ударов на ресурс (реально):** | ресурс | ресурса в узле | камень | каменная кирка | каменный топор | |---|---|---|---|---| | дерево | ~500 дерева | ~50 ударов | — | ~25–28 ударов | | узел камня | 750 Stones | ~150 ударов | ~47 ударов | — | | узел металла | 500 Metal Ore | ~100 ударов | ~31 удар | — | | узел серы | 200 Sulfur Ore | ~40 ударов | ~13 ударов | — | ### 1.2 Верстак (Workbench) — 3 уровня **Разворачиваемый предмет:** ставится на землю, нужно **стоять рядом**, чтобы крафтить. **Верстак — станция крафта с требованием уровня.** Уровень верстака = минимальный уровень, на котором рецепт доступен: предмет уровня 1 крафтится на верстаке 1 (и на любом более высоком), уровня 2 — только на верстаке 2 и выше, и так далее. Знание рецепта добывается отдельно — столом исследований (п. 1.3) либо тех-деревом верстака (в оригинале есть, у нас не делаем). | уровень | рецепт | где крафтится | время крафта | |---|---|---|---| | **L1** | 500 Wood + 100 Metal Fragments | без верстака | 30 с / 15 с (L1) / 7 с (L2, L3) | | **L2** | 500 Metal Fragments + 20 High Quality Metal + **5 Basic Blueprint Fragment** | верстак 1 | 45 с (L1) / 22 с (L2) / 11 с (L3) | | **L3** | 1000 Metal Fragments + 100 High Quality Metal + **5 Advanced Blueprint Fragment** | верстак 2 | 60 с (L2) / 30 с (L3) | ✅ Скрапа в рецептах **нет** (убрали 06.11.2025), вместо него у T2/T3 **фрагменты чертежей** (02.10.2025). **Фрагменты чертежей** (для T2/T3): - **Basic**: всегда в зелёных головоломках (x1) и в синих головоломках рядом с красным ключом (x2), на всех средних и крупных монументах, в аирдропах; шанс — военный ящик, большой подводный ящик, мусорные учёные, металлоискание у дороги; - **Advanced**: гарантированно в хакбоксах, 1 шанс из 10 в элитных ящиках, всегда парами; Launch Site, Military Tunnels, Nuclear Missile Silo, Underwater Labs, Small/Large Oilrigs, Cargoship, CH47-дроп; - конвертация: **20 Basic → 1 Advanced**. ✅ (10.2025) Для нас это **гейт прогрессии T2/T3**: решение — повторяем (нужны «монолиты» с лутом) или заменяем скрапом — в п. 5. **Время крафта:** *«Using a higher tier Workbench than required results in a shortened crafting time of 50% less for the immediate next tier and caps at 75% less for the second tier above»* — **+1 уровень → −50 %, +2 уровня → −75 %** (дальше потолок), отсчёт от **требуемого** уровня. Чтобы разгонка действовала на всю очередь, надо **оставаться в радиусе** верстака. ✅ **Формула для реализации** (проверена на 589 предметах, 0 расхождений): ``` craftTime(tier) = max( floor( base × 0.5 ^ min( max(tier − requiredTier, 0), 2 ) ), 1 ) ``` `base` — время на **требуемом** уровне верстака. Три уровня выше не дают ничего: T3 не быстрее T2 для предметов, требующих не выше L1. **Кто что открывает** — по каждому предмету указано в п. 1.7 (уровень верстака). ### 1.3 Стол исследований (Research Table) и чертежи (Blueprints) **Сам стол:** 200 Metal Fragments + 20 Scrap, крафтится **на верстаке 1**, время 30 с (L1) / 15 с (L2) / 7 с (L3). ✅ **Как исследуют:** кладёшь **один** нужный предмет в верхний слот → показывается требуемый скрап (в нижний слот) → кнопка «Research» → **10 секунд** → в верхнем слоте появляется **чертёж**, **предмет уничтожается**. 🟡 _(вся механика исследования — только по community-вики; официальная вики её не описывает)_ - Прочность предмета на результат не влияет (если предмет не сломана — иначе не работает). 🟡 - Исследование **продолжается**, если закрыть интерфейс стола. 🟡 - Звук слышно рядом. 🟡 - Скрапа тратится ровно нужное количество, остаток остаётся в нижнем слоте. 🟡 **Результат — физический чертёж** (предмет Research Paper / Blueprint): его можно **изучить** (чертёж уничтожается, рецепт открывается навсегда) или **отдать / продать** другому игроку; выученные чертежи переживают смерть и вайп. 🟡 Официальная вики подтверждает косвенно: предмет `researchpaper` — *«Use this item in a Research Bench to create blueprints of items»*. ✅ **Цена исследования — по редкости предмета** (после «Pivot Or Die», 06.11.2025): | редкость | скрап | сколько предметов | |---|---|---| | Common | **15** | 144 | | Uncommon | **30** | 133 | | Rare | **60** | 96 | | Very Rare | **120** | 212 | ✅ О (разобран весь реестр, 585 исследовабельных предметов) До 06.11.2025 шкала была **20 / 75 / 125 / 500** — это и есть цифры из прошлой версии плана; они устарели на одно обновление. Шкалы «по тирам предмета» в Rust **нет**: цена привязана к редкости, а не к уровню верстака. **Тех-дерево верстака** (в оригинале есть, у нас **не делаем** — оверхед): разблокировка прямо в верстаке, по веткам. На 06.11.2025 **тех-дерево бесплатно** — в «Pivot Or Die» убрали «tech tree tax», так что платить за разблокировку в нём не нужно; 15/30/60/120 — это цена **физического чертежа** на столе исследований. Колонка «125 / 250 / 500» в вике — **устаревшая** (это старый налог тех-дерева по уровню верстака, снят 06.11.2025). ✅ О-нов **Монументы:** официально задокументирован только **Outpost** (Workbench L1 + Research Table). По community-вике столы есть также на аэродроме, электростанции, спутниковой тарелке, в супермаркете, в Military Tunnel и на Launch Site. 🟡 Разницы в поведении (стоимость, длительность) **нигде не задокументировано** — считать такую же. ❌ **Кому что передаётся:** физический чертёж — передаваемый предмет; разблокировка из тех-дерева — **личная, не передаётся**. ✅ О + С **Эксперимент на верстаке** (75 / 300 / 1000 скрапа → случайный чертёж) — механика 2017–2020 годов, заменена тех-деревом в декабре 2020. **Не реализуем.** ❌ ### 1.4 Скрап (Scrap) - **Не из построек.** Скрап выпадает из **ящиков и бочек**, аирдропов, учёных и андроидов; разрушение построек скрапа **не даёт**. ✅ О (раздел Loot Sources) - **Не крафтится** (Craftable: False). ✅ О - **В рецептах верстаков скрапа нет** (убрали 06.11.2025). Тратится на исследование (15/30/60/120) и на разблокировку в тех-дереве. ✅ О-нов - Основные источники (О): базовый ящик 3, синий и жёлтый бочонок 2, военный ящик 8, элитный 25, аирдроп 140–160, учёный 8–24. - Косвенно: в Outpost можно обменять металл на скрап (1 скрап = 20 металла). 🟡 - Фрагменты чертежей скрап **не заменяют** — это отдельная валюта (п. 1.2). ### 1.5 Постройка баз (Rust) **Как ставится.** Строительный план (Building Plan, **20 дерева**, крафт 15 с) — разворачиваемый предмет: кладёшь в хотбар, ПКМ открывает колесо конструкций, выбираешь объект, видишь «призрак»; **ПКМ + движение мышью** перебирает варианты, **ЛКМ** ставит. ✅ План ставит **только лозу**; все старшие уровни получаются **улучшением молотком**. ✅ **Два слоя объектов:** - **Строительные**: квадратный и треугольный фундамент, ступени на фундаменте, квадратный и треугольный пол, рамка пола, стена, полустена, низкая стена, **малый дверной проём**, **большой проём (wall frame)**, окно, крыша, лестница, рампы. - **Внутренние**: двери, верстаки, печи, сундуки, торговый автомат, шкаф, инструментальный шкаф, замки. > ❌ **Столбов (колонн) в Rust нет** — их убрали в обновлении 196 (01.02.2018). Правила > «столбы ставят до стен», «под столбом должен быть фундамент», «на втором этаже столбы > должны быть снизу» — **мёртвые**, из плана выкидываем. **HP по уровням** — одинаково для всех деталей уровня: 🟡 (игровые зеркала, официальной вики по базовым блокам нет вовсе) | уровень | HP | |---|---| | Twig (лоза) | **10** | | Wood (дерево) | **250** | | Stone (камень) | **500** | | Sheet Metal (лист) | **1000** | | Armored (броня) | **2000** | **Стоимость детали по уровням.** Лоза платится деревом; **улучшение молотком стоит как целевой уровень** (лоза→камень = столько же камней, сколько дерево→камень); понизить уровень нельзя. | деталь | Twig (дерево) | Wood (дерево) | Stone (камни) | Sheet Metal (металл) | Armored (ХМ) | |---|---|---|---|---|---| | стена, фундамент, полустена, лестница | 50 | 200 | 300 | 200 | 25 | | треугольный фундамент, ступени, пол, рамка пола, треугольный пол, рамка треугольного пола, низкая стена, большой проём, крыша, рампы | 25 | 100 | 150 | 100 | 13 | | малый дверной проём, окно | 35 | 140 | 210 | 140 | 18 | Скрап и ХМ в постройке не участвуют (кроме армированного уровня — там ХМ). **Двери и замки:** | предмет | HP | крафт | верстак | цена физического чертежа | |---|---|---|---|---| | деревянная дверь | **200** | 300 дерева | — | 120, известен по умолчанию | | деревянная двойная | **200** | 350 дерева | — | 60, известен по умолчанию | | листовая дверь | **250** | 150 металла | — | 60, известен по умолчанию | | листовая двойная | **250** | 200 металла | — | 120, известен по умолчанию | | **бронедверь** | **1000** | 20 ХМ + 5 шестерён | **L3** | 120, нужен чертёж | | бронедвойная | **1000** | 25 ХМ + 5 шестерён | **L3** | 120, нужен чертёж | | гаражные ворота | **600** | 300 металла + 2 шестерни | **L2** | 30, нужен чертёж | ⚠️ Есть конфликт источников: fandom даёт бронедверь 800 HP, игровые зеркала — **1000**. Берём 1000. - **Мешковый баррикад (Sandbag):** 200 HP, 100 камней + 10 ткани, верстак 1, стек 10. ✅ (на 06.11.2025; в 10.2026 его переделали — за пределами нашего среза) - **Кодовый замок:** 100 металла, 4 цифры, 30 с, без верстака, известен по умолчанию. ✅ (в плане было верно) Неверный код даёт урон током; 10⁴ комбинаций; снять нельзя. - **Ключевой замок:** 75 дерева, 15 с, без верстака, известен по умолчанию. Ключ не крафтится — выдаётся замком. - Оба замка ставятся на: одиночные и двойные двери, гаражные ворота, витрины, люки, сундуки, инструментальный шкаф, ворота клетки, сетка-фенси, внешние ворота. ✅ **Инструментальный шкаф (Tool Cupboard):** 1000 дерева, 30 с, без верстака, HP 100. Разблокирует постройку в радиусе: **официальная вика — 50 м** («only you can build in a 50 meter radius of it»), радиус «проецируется фундаментами», а не точкой шкафа. ⚠️ **Конфликт**: вики 2020 г. в статье Building даёт **16 м от фундамента** и прямо называет «50 meter radius» в инфобоксе **долгой ошибкой вики**. Берём 50 м (официальная вика), но помечаем как спорное. ✅/⚠️ Блокирует и постройку, и предметы (спальники, сундуки) внутри. Аптейп — **доля от стоимости постройки**, списывается раз в **24 ч**; уничтоженный шкаф съедает до 24 ч аптейпа. ✅ Неавторизованные могут ставить **лозовые полы и деревянные лестницы**, всё остальное — «BUILDING BLOCKED». ✅ (в плане было верно) **Гниение (decay):** когда аптейп кончился: лоза **1 ч**, дерево **3 ч**, камень **5 ч**, лист **8 ч**, броня **12 ч**. Внутри здания — **в 10 раз дольше** (деревянная дверь 30 ч, листовая 80 ч, бронедверь 120 ч). Открытие/закрытие двери с замком сбрасывает таймер. 🟡 ⚠️ В вики 2020 г. эти же числа стояли как **1 / 2 / 4 / 8 / 12 ч** — таймеры дерева и камня перенастроили позже; берём современные (1/3/5/8/12), старые — как след истории изменений. **Прочность конструкции (stability):** при наведении с молотком виден процент стабильности; если он упал в ноль, деталь ломается сразу при установке. Точные правила поддержки второго этажа **официально не задокументированы**. ❌ **Куда можно строить:** почти везде; крутые склоны и неровная земля мешают, фундамент ставят и под водой. 🟡 ### 1.6 Инструменты: сбор, урон, износ **Что значат три числа у пары «инструмент × ресурс»** (официальная вика, таблица Gather Rates): **Gather Damage** — сколько ресурса снимает удар, **Bonus** — разброс этого количества (±10 % для дерева и плоти, ±20 % для руды), **Condition Loss** — сколько прочности инструмента уходит за удар. | инструмент | цель | Gather Damage | Bonus | Condition Loss | |---|---|---|---|---| | **Камень** | дерево | 10 | 1 | 0.3 | | | руда | 5 | 1 | 0.3 | | | плоть | 10 (урон) | 1 | — | | **Каменный топор** | дерево | 20 | 2 | 0.3 | | | плоть | 10 | 1 | 0.3 | | **Каменная кирка** | руда | 16 | 3.2 | 0.3 | | | плоть | 10 | 1 | 1 | | **Salvaged Hammer** | дерево | 20 | 2 | 0.5 | | | руда | 20 | 4 | 0.5 | | | плоть | 10 | 1 | 0.5 | | **Salvaged Axe** | дерево | 50 | 5 | 0.3 | | | плоть | 15 | 1.5 | 1 | | **Salvaged Icepick** | руда | 50 | 10 | 0.3 | | | плоть | 5 | 0.5 | 0.5 | | **Salvaged Sword** | плоть | 10 | 1 | 0.5 | | **Salvaged Cleaver** | плоть | 10 | 1 | 0.5 | | **Топор (Hatchet)** | дерево | 30 | 3 | 0.3 | | | плоть | 12 | 1.2 | 1 | | **Кирка (металл)** | руда | 30 | 6 | 1 | | | плоть | 5 | 0.5 | 1 | | **Молот** | постройки | добычи нет | | | ✅ Перекрёстная проверка: вики 2020 г. (правка 2018–2020) даёт те же числа — камень 10/5, каменный топор 20 по дереву, каменная кирка 16 по руде, топор 30, кирка 30, Salvaged Axe 50, Icepick 50, Hammer 15 по дереву. Расхождений в самих значениях нет. **Боевая статистика** (официальная вика): «урон» — базовый по торсу, «×2» — множитель в голову, «темп» — секунд между ударами, «дальность» — максимум. | инструмент | урон | в голову | темп | дальность | радиус | |---|---|---|---|---|---| | Камень | 10 | ×2 | 0.8 | 1.2 | 0.2 | | Каменный топор | 15 | ×2 | 1.1 | 1.5 | 0.3 | | Каменная кирка | 17 | ×2 | 1.1 | 1.5 | 0.3 | | Каменное копьё | 35 | ×2 | 0.7 | 2.8 | 0.2 | | Молот | 0 | — | 2.0 | 1.5 | 0.3 | | Топор (Hatchet, металл) | 25 | ×2 | 1.1 | 1.5 | 0.3 | | Кирка (металл) | 30 | ×2 | 0.7 | 1.5 | 0.3 | | Булава (Mace) | 60 | ×2 | 0.5 | 1.5 | 0.3 | | Длинный меч | 75 | ×2 | 0.5 | 1.5 | 0.3 | | Salvaged Hammer | 40 | ×2 | 1.0 | 1.5 | 0.3 | | Salvaged Axe | 40 | ×2 | 0.8 | 1.5 | 0.3 | | Salvaged Icepick | 40 | ×2 | 0.8 | 1.5 | 0.3 | | Salvaged Sword | 50 | ×2 | 0.8 | 1.5 | 0.3 | | Salvaged Cleaver | 60 | ×2 | 0.5 | 1.5 | 0.4 | | Дубинка (Bone Club) | 12 | ×2 | 1.4 | 1.5 | 0.2 | **Урон по частям тела** (вики 2020 г., проверено современной вики по базовому урону): камень **20/10/8/8**, каменный топор **27/15/12/12**, каменная кирка **35/17/13/13**. Универсального правила **нет**: доли рук у разного оружия 0.63–1.0, ног 0.48–0.9. Для нашей модели достаточно «голова ×2, торс ×1, руки/ноги — общая доля», но в Rust это не так. 🟡 **Прочность:** официальной вики **нет поля HP** ни у одного предмета. Ремонт стоит ровно 20 % рецепта → шкала 0…100 → камень (0.3 за удар) живёт ~333 удара по дереву, кирка по плоти (1.0) — 100 ударов. ❌ Значение «100» — вывод из ремонта, не подтверждение. **Сколько ударов на ресурс** (узел = 750 Stones / 500 Metal Ore / 200 Sulfur Ore, дерево ≈ 500–700 дерева): | инструмент | дерево | узел камня | узел металла | узел серы | |---|---|---|---|---| | Камень | ~50–70 | ~150 | ~100 | ~40 | | Каменный топор | ~25–35 | — | — | — | | Каменная кирка | ~60–120 (в вике 2020 — 5 дерева за удар) | ~47 | ~31 | ~13 | | Топор (Hatchet) | ~17–23 | — | — | — | | Кирка (металл) | ~50–70 | ~25 | ~17 | ~7 | | Salvaged Axe | ~11–14 | — | — | — | | Salvaged Icepick | ~50–70 | ~15 | ~10 | ~4 | **Урон по постройкам:** официальной вики **нет** данных «урон инструмента по уровню постройки». Есть HP блоков (п. 1.5) и расчёт «сколько инструментов надо взять» из игровых зеркал: камнем лозу — **1 удар**, дерево — **37 камней**, камень — **74**, лист — **295**, броню — **589**. Таблица «лоза 9, дерево 0.2, металл 0.1» — из экспериментальной вики 2015–16, **не использовать**. ❌ ⚠️ Логическая нестыковка: 250 HP / 10 урона = 25 ударов, а зеркала дают 37 — значит у оружия есть множитель урона по постройкам, который **нигде не опубликован**. Для нас: взять HP по п. 1.5 и решить модель урона самим (п. 5). **Кого чем:** топоры и камень бьют по дереву, кирки — по руде, камень умеет и то и другое, Salvaged Hammer — и дерево и руду. Мечи и тесаки — только по плоти: у них на официальной вики нет строк Tree/Ore. ✅ **Броня** (официальная вика, таблица Protection). Слои: голова/торс/ноги — по 2 слота (L1 — одежда, L2 — броня), руки и ступни — по одному; **оба слота дают защиту**. | предмет | пули | ближний бой | укус | радиация | холод | взрыв | |---|---|---|---|---|---|---| | футболка | 10–15 % ⚠ | 10–15 % ⚠ | 4–5 % ⚠ | 3 % | 4–6 % ⚠ | — | | рубашка, штаны | 15 % | 15 % | 3 % | 5 % | 8 % | — | | hoodie | 20 % | 15 % | 23 % | 5 % | 34 % | — | | bucket helmet | **20 %** | 50 % | 8 % | 4 % | 6 % | **8 %** | | riot helmet | 25 % | 80 % | 13 % | 5 % | 6 % | **8 %** | | костяной шлем / костяная броня | 25 % | 40 % | **13 %** | 4 % | — | **7 %** | | heavy plate helmet | 90 % | 80 % | 13 % | 7 % | −17 % | ❓ | | heavy plate jacket / pants | 75 % | 70 % | 12 % | 7 % | −17 % | ❓ | | hazmat suit | 30 % | 30 % | 50 % | 50 % | 50 % | **30 %** | | ninja suit | 25 % | 30 % | 50 % | 15 % | 50 % | 30 % | | jumpsuit | 25 % | 40 % | 67 % | 4 % | — | 40 % | ⚠️ **В официальной вики колонка «взрыв» у брони содержит ошибки**: Bucket Helmet 50 % (в игре 8 %), Riot Helmet 50 % (8 %), Bone Armor 40 % (7 %), Heavy Plate 100 % (17 %), и «укус» у Bone Armor 67 % вместо 13 %. Верен только взрыв у Hazmat Suit (30 %). ❓ Heavy Plate: взрыв — fandom 8/12/12 %, rustclash 17/17/17 %, вики 100 % — **не подтверждено**, брать 17 % как среднее или 12 % по fandom. ⚠️ Футболка: датированная вики (2018) даёт 10/10, современные источники — 15/15. 📅 Данные приведены на **06.11.2025**; 06.08.2026 bucket helmet бафнули (20 → 25 % пули, 8 → 13 % укус, крафт 35 → 20 металла) — это уже за пределами нашего среза. Перекрёстная проверка (вики 2020 г.) сходится по существу: riot helmet 80 % ближний бой, heavy plate helmet 90 % пули, hazmat 30/30; по футболке источники расходятся (10 % против 15 %). ### 1.7 Таблица: предмет → верстак → чертёж **`bench`** — минимальный уровень верстака для крафта: 0 = крафтится без верстака, 1 / 2 / 3 = нужен верстак соответствующего уровня. **«По умолчанию»** — рецепт открыт с начала игры (знать не нужно, чертёж не нужен). **Чертёж** — цена физического чертежа на столе исследований (если рецепт не открыт по умолчанию). Стол тратит 15 / 30 / 60 / 120 скрапа по редкости. | предмет | bench | крафт | время | чертёж | по умолчанию | |---|---|---|---|---|---| | Камень (Rock) | 0 | 10 камня | 5 с | 120 | **да** | | Каменный топор | 0 | 200 дерева + 100 камня | 15 с | 120 | **да** | | Каменная кирка | 0 | 200 дерева + 100 камня | 15 с | 120 | **да** | | Каменное копьё | 0 | 1 деревянное копьё + 20 камня | 10 с | 120 | **да** | | Строительный план | 0 | 20 дерева | 15 с | 120 | **да** | | Молот | 0 | 100 дерева | 15 с | — | да | | **Верстак 1** | 0 | 500 дерева + 100 металла | 30 с | 60 | **да** | | **Верстак 2** | 1 | 500 металла + 20 ХМ + **5 Basic Fragment** | 45 с | 30 | **да** | | **Верстак 3** | 2 | 1000 металла + 100 ХМ + **5 Advanced Fragment** | 60 с | 30 | **да** | | Стол исследований | 1 | 200 металла + 20 скрапа | 30 с | 60 | **да** | | Инструментальный шкаф | 0 | 1000 дерева | 30 с | 120 | **да** | | Верстак для ремонта | 1 | 125 металла | 30 с | 120 | **да** | | Деревянная дверь | 0 | 300 дерева | 30 с | 120 | **да** | | Двойная деревянная дверь | 0 | 350 дерева | 30 с | 60 | **да** | | Листовая дверь | 0 | 150 металла | 30 с | 60 | **да** | | Двойная листовая дверь | 0 | 200 металла | 30 с | 120 | **да** | | Кодовый замок | 0 | 100 металла | 30 с | 120 | **да** | | Ключевой замок | 0 | 75 дерева | 15 с | 120 | **да** | | Топор (Hatchet) | 1 | 100 дерева + 75 металла | 30 с | 30 | нет | | Кирка (Pickaxe) | 1 | 100 дерева + 125 металла | 30 с | — | нет | | **Salvaged Hammer** | 1 | 1 металл. труба + 50 металла | 30 с | 30 | нет | | **Salvaged Sword** | 1 | 1 металл. клинок + 15 металла | 30 с | 15 | нет | | **Salvaged Cleaver** | 1 | 1 дорожный знак + 50 металла | 30 с | 30 | нет | | **Salvaged Axe** | 2 | 1 металл. труба + 5 металл. клинков | 30 с | 60 | нет | | **Salvaged Icepick** | 2 | 1 металл. труба + 5 металл. клинков | 30 с | 60 | нет | | Металлический клинок | 2 | — | 1 с | 30 | нет | | Шестерни | 3 | — | 1 с | 60 | нет | | Металлическая труба | 3 | — | 1 с | 60 | нет | | Металлическая пружина | 3 | — | 1 с | 60 | нет | | Большая печь | 2 | 600 дерева + 500 камня + 75 топлива | 40 с | 60 | нет | | Гаражные ворота | 2 | 300 металла + 2 шестерни | 30 с | 30 | нет | | Автотурель | 2 | — | 45 с | 120 | нет | | **Бронедверь** | 3 | 20 ХМ + 5 шестерён | 30 с | 120 | нет | | Бронедвойная дверь | 3 | 25 ХМ + 5 шестерён | 30 с | 120 | нет | | **Взрывчатка** (Explosives) | 3 | — | 5 с | 120 | нет | | **Timed Explosive Charge** (C4) | 3 | — | 30 с | 120 | нет | ✅ (вики на 11.2025). «По умолчанию» = рецепт открыт без чертежа — **для нас это значит «не исследуется»** (см. правило в шапке раздела). **Что НЕ существует** (в плане раньше было — убрано): `Salvaged Hatchet`, `Salvaged Pick Axe`, `M16` (есть LR-300), `Doorway (small)` как предмет, `Oil Refinery` (есть только Small Oil Refinery), `Refrigerator` (есть Fridge), `Metal Gear` (есть Gears), `Shooting Range` (есть Reactive Target). **Ресурсы** (дерево, камни, металл, ХМ, сера, скрап, ткань, кожа) не крафтятся, а собираются — рецепта нет вовсе. ### 1.8 Строительные объекты и сокеты **Объекты** (набор одинаков для всех уровней): квадратный фундамент, треугольный фундамент, ступени на фундаменте, квадратный пол, треугольный пол, рамка пола, стена, полустена, низкая стена, **малый дверной проём (Doorway)**, **большой проём (Wall Frame)**, окно, крыша, лестница, рампы. Столбов нет (п. 1.5). **Сокеты** — что к чему присоединяется (из игровых данных, rusthelp): ✅ | сокет | что в него входит | |---|---| | **Малый дверной проём** (Doorway) | одиночная дверь (деревянная / листовая / бронедверь), торговый автомат | | **Большой проём** (Wall Frame) | двойные двери (деревянные / листовые / броневые), гаражные ворота, сетка-фенси, ворота клетки, стена клетки, витрина, металлическая витрина, сетка (netting) | | **Окно** | оконные решётки (дерево / металл / усиленные), укреплённое и закалённое стекло, ставни, бойницы (горизонтальные и вертикальные) | | **Рамка пола** (Floor Frame) | решётка пола, люк (Ladder Hatch), бронированный люк | **Проёмы двух видов:** малый (Doorway) — влезает **только одиночная** дверь; большой (Wall Frame) — влезают **двойные двери и гаражные**, но **не одиночные**. ✅ (в плане было верно) **Снаппинг строительных деталей** (общее правило из вики): стены ставятся к **краю фундамента**, полы — к **верхней кромке стены**, двери — **внутрь дверного проёма**. Правило из вики дословно: *«To place walls, select them and aim at the edge of a foundation. Floors must be placed at the top edge of a wall, and doors must be placed inside door frames.»* 🟡 **Свободное размещение:** строительные детали садятся **по сетке** (фундамент 3×3), привязка есть только у внутренних блоков — к уже поставленным строительным. ❌ Старая формулировка плана «ставятся свободно, не по сетке мира» — неверна. ### 1.9 Сверка данных (что сошлось и что не сошлось) **Сошлось:** | проверка | результат | |---|---| | сумма цен исследования по редкости | 144 + 133 + 96 + 212 = **585** исследовабельных предметов — совпадает с разобранным реестром ✅ | | сумма тех-дерева | 87 + 78 + 20 (верстаки) + 39 + 47 + 7 (Eng-верстак) = **278** ✅ | | сумма уровней верстаков | 269 + 167 + 131 + 27 = **594** крафтбельных с указанным уровнем ✅ | | узел камня ÷ камень | 750 Stones ÷ 10 за удар = **75 камней** на узел; 750 ÷ 5 = 150 ударов ✅ | | узел ÷ каменная кирка | 750 ÷ 16 = **47 ударов** ✅ | | дерево ÷ камень | ~500–700 дерева ÷ 10 = **50–70 ударов** ✅ | | расход прочности | камень: 150 ударов × 0.3 = 45 прочности на узел камня (шкала 100 → ~2 узла на камень) ✅ правдоподобно | | прогрессия уровней постройки | HP 10 → 250 → 500 → 1000 → 2000 при цене 50 → 200 → 300 → 200 → 25 — растёт по HP, стоимость листа дешевле камня (но нужна переплавка) ✅ | | двери | дерево 200 HP / 300 дерева, лист 250 / 150 металла, броня 1000 / 20 ХМ ✅ | | формула времени крафта | 589 предметов, 0 расхождений с формулой п. 1.2 ✅ | **Не сошлось (требует решения проекта, п. 5):** | расхождение | цифры | |---|---| | урон по постройкам | 250 HP ÷ 10 урона = 25 ударов, а калькулятор рейда даёт 37 → есть ненулевой множитель урона по постройкам, который не опубликован | | радиус шкафа | 50 м (официальная вика) против 16 м (старая вики) | | HP броневой двери | 1000 (зеркала) против 800 (fandom, 2020) | | таймеры гниения | 1/3/5/8/12 ч против 1/2/4/8/12 ч (2020) | | таблица «урон по постройкам» 2018 г. | лоза 9 / дерево 0.2 / металл 0.1 — не публикуется современной викой и не сходится с калькулятором | | скрап на исследование | вики до 06.11.2025 давала плоские 20/75/125/500; после обновления — 15/30/60/120 **по редкости**, а не по уровню верстака. У нас нет ни ящиков с лутом по тирам, ни «редкости» предмета — тиры придётся задавать вручную | **Как перепроверять:** страница предмета `wiki.facepunch.com/rust/item/` даёт блоки **Craft** (рецепт, требование верстака, «Craft Time by Workbench»), **Research** (цена физического чертежа + приписка «known by default»), **Weapon Stats** и **Gather Rates**. Состояние страницы на дату — через `~history` / `~diff:`; для эпохи до 03.12.2020 — через MediaWiki API fandom с `rvstart`/`rvdir=older`; резерв — Wayback. ## 2. Решения по проекту ### 2.1 Кто такой админ **Админ — свойство конкретного сервера, а не проекта.** Проект коммьюнити-френдли: в разных серверах разные роли и разные права. Роль приходит из лаунчера (у лаунчера есть `server/roles.py` и роли `ROLE_USER / ROLE_PASS_HOLDER / ROLE_MODERATOR / ROLE_ELDER / ROLE_CREATOR`). ### 2.2 Кто что может ставить и ломать Правило на **блоке/предмете** (тег `admin`): | тег `admin` | кто может ставить/ломать/менять | |---|---| | **нет** | **кто угодно**, включая обычных игроков | | **есть** | **только админы сервера** | - Тег `admin` есть, например, у «тестблока» и у всего, что не добавлено в крафт/изучение/дроп. - **Режим креатива не даёт прав.** Даже игрок в креативе без админки не может поставить или сломать блок с тегом `admin`. - Проверка — **на сервере**. Клиент только показывает или не показывает курсор. ### 2.3 Ванильные блоки игры Мир (карта, монолиты, рельеф) — **не ломается и не строится обычными игроками**: это работа админов. Игроки строят **нашими кастомными** предметами через наш API. ### 2.4 Предметы - Все предметы игрока — **кастомные, через наш код и наше API** (не ванильные `ItemStack`). - У предмета: **прочность**, **урон**, **значение bench**, **знание по умолчанию**. - `bench` — **минимальный уровень верстака**, на котором рецепт доступен (0 = крафтится без верстака, 1/2/3 = нужен верстак этого уровня или выше). Это **гейт крафта, а не знания** — в Rust это разные вещи. - `knownByDefault` — рецепт открыт с начала игры: **не исследуется, скрап не нужен** (по вики такую пометку имеют 97 предметов из 380 с указанным уровнем верстака). - Знание рецепта — **состояние игрока** (`knownRecipes`), а не свойство предмета. - У предмета есть **класс инструмента** (NONE / PICKAXE / AXE / SWORD / …) и **класс ресурса**, который он добывает. - Все числа берём из п. 1.6–1.7 (срез 06.11.2025), ничего не выдумываем. ### 2.5 Крафт - Как в Rust (срез 06.11.2025): **верстаки трёх уровней** (разворачиваемый предмет, надо стоять рядом) и **чертежи** (стол исследований: нужен найденный предмет + скрап; получается физический чертёж, который изучается и открывает рецепт). - **Тех-дерево верстака и эксперимент на верстаке не делаем** — это оверхед (п. 1). - Знание рецепта — **состояние игрока**, а не свойство предмета. - Время крафта, множитель от уровня верстака, стоимость скрапа — как в Rust. - То, что игрок получает **на старте**, не исследуется вообще. ### 2.6 Структуры вместо блоков мира Руда, деревья и камни — **не блоки мира, а разрушаемые объекты** (как узлы в Rust): у них есть прочность, они бьются инструментом и дают дроп. Мир меняют только админы. ### 2.7 Текстуры - Текстуры предметов пока **временные**, взяты из ремейка как заглушки. - **Пометка: заменить на свои** (см. п. 6). --- ## 3. Архитектура ### 3.1 Модули | модуль | про что | лицензия | |---|---|---| | `rsx-client` | загрузчик модов, API модов, хуки в клиент | MIT | | `rsx-protocol` | формат провода, общий словарь (блоки, формат чанка) | MIT | | `rsx-plugin-api` | **API серверного контента**: события, реестр предметов, рецепты, роли | MIT (пустой, следующий) | | `rsx-server-core` | тик-луп, мир, сущности, масштабирование | proprietary | | `rsx-auth` | свои аккаунты сервера (когда лаунчер не настроен) | proprietary | ### 3.2 Провод - Кадр: `magic "RSX1"`, версия, id пакета, длина, тело. - Рукопожатие: `Hello → HelloAck → Auth|LauncherAuth → AuthAck → Login → LoginAck`. - **Вход через лаунчер:** клиент отдаёт токен лаунчера, сервер спрашивает лаунчер `POST /auth/validate` (у лаунчера такой эндпоинт есть, он же проверяет бан) → если «свой» — выдаёт свой игровой токен. - Игровая фаза: `JoinWorld → WorldJoin`, `ChunkData`, `BlockChange`, `PlayerMove`, `EntitySpawn/Move/Remove`, `BreakProgress`, `SetGameMode`, `Inventory`, `Ping/Pong`. ### 3.3 Мир - Чанк 16×16×256, **палитра по секциям** (4 бита на блок) — плоский массив не годится: 62 500 чанков × 64 КБ = 4 ГБ. - Лежат **регионами на диске** (32×32 чанка в файле), в памяти — LRU-кэш. - Генерация — чистая функция от зерна и координат (детерминизм обязателен: чанк может прийти через месяц после соседнего). - Сгенерированный чанк **не пишется на диск**: террейн восстанавливается генератором. На диск уходит только то, во что построили. ### 3.4 Что взято из Paper/Bukkit (как образец) | у Paper | зачем нам | у нас | |---|---|---| | `BlockBreakEvent` (cancellable, `setDropItems`) | сервер решает, ломается ли блок и что падает | `BreakEvent`: `cancelled`, `drops` | | `BlockPlaceEvent`, `PlayerInteractEvent` | кто что нажал | `InteractEvent` (левая/правая), `PlaceEvent` | | `ItemMeta` + `PersistentDataContainer` | свои данные на предмете | `ItemStack` + `ItemData` (ключ→значение) | | `PlayerInventory` / `InventoryClickEvent` | инвентарь, хотбар, защита от дюпа | свой `Inventory` + проверки на сервере | | `Permissible` / роли | «мир только для админов» | роли сервера, тег `admin` у блоков | | `ShapedRecipe` / `ShapelessRecipe` | рецепты | свой реестр **с гейтом по чертежу и верстаку** (в Paper такого нет) | Чего у Paper нет, а нужно нам: гейт крафта по изученности, прочность/урон/сбор по классам ресурсов, **структуры вместо блоков мира**. --- ## 4. План работ Каждый шаг — законченный кусок, который можно проверить. Порядок важен. ### Шаг A. Фундамент предметов и инвентаря (следующий) - [ ] `ItemType`: id, имя, класс инструмента, класс ресурса, прочность, урон по частям тела, скорость сбора, `bench`, `knownByDefault`, рецепт. - [ ] **Данные предметов — из п. 1.6/1.7** (срез 06.11.2025): держать отдельным ресурсом/таблицей, чтобы числа не расходились с планом. - [ ] Модель знания: `knownByDefault` у типа + `knownRecipes` у игрока; стол исследований выдаёт физический чертёж, изучение открывает рецепт навсегда (п. 1.3). - [ ] `ItemStack`: тип + количество + прочность + `ItemData` (свой ключ→значение). - [ ] `Inventory`: слоты, хотбар, что в руках. **Сервер — источник истины.** - [ ] Реестр предметов + протокол `Inventory` / `InventorySlot`. - [ ] Клиент: свой реестр + свои текстуры + свой рендер предмета в руке и в слоте (наши предметы не ванильные `IItem`). - [ ] **Текстуры предметов — временные** (взяты из ремейка как заглушки). **ПОМЕТКА: заменить на свои.** - [ ] Стартовый набор: **камень** — решение проекта (в Rust официально не документировано, п. 1.1); выдаём в первый слот хотбара, отдельным флагом конфига. Критерий готовности: игрок заходит, получает камень в руку, видит его в хотбаре и в руке; сервер знает, что у него в руках. ### Шаг B. Ломание и установка — решает сервер - [ ] Протокол: `Dig` (START/STOP, позиция, грань) **вместо** «клиент присылает результат»; `BreakProgress` (0..9) — трещины у всех. - [ ] Сервер: состояние ломания по образцу `PlayerInteractionManager` (`PlayerInteractionManager.java:79 updateBlockRemoving`, `:124 onBlockClicked`, `:216 tryHarvestBlock`): прогресс по твёрдости блока и скорости инструмента, рассылка прогресса, досягаемость, роль/тег `admin`. - [ ] Правило из ваниллы: **меч в креативе блок не ломает** (`PlayerInteractionManager.java:217`). - [ ] **Клиент ничего не решает:** 4 патча (`Minecraft.clickMouse` → свой `Dig`, `Minecraft.sendClickBlockToController` → состояние кнопки, `PlayerControllerMP.clickBlock` → клиент не ломает сам, `EntityRenderer.isDrawBlockOutline` → контур только там, где можно). Критерий готовности: зажатая кнопка ломает **один** блок; блок с тегом `admin` обычному игроку не ломается ни в выживании, ни в креативе; у остальных — ломается инструментом того класса, который нужен. ### Шаг C. Структуры, узлы, постройка - [ ] `StructureTemplate` (блоки + AABB + меш + HP + дроп), `StructureInstance`, `StructureWorld`. Деревья/камни/руда — **узлы**, не блоки мира. - [ ] Сбор: попадание инструментом → урон по классу ресурса → разрушение → дроп. Узлы: камень 750 Stones, металл 500 Metal Ore, сера 200 Sulfur Ore; добыча за удар и потеря прочности — п. 1.6. - [ ] Постройка: игрок ставит **наши** кастомные предметы-конструкции (не блоки мира). Снаппинг и сокеты — п. 1.5 и 1.8; HP и цены по уровням — п. 1.5; аптейп инструментального шкафа и гниение — п. 1.5. - [ ] Растительность и руда в генерации — через шаблоны структур. - [ ] Модель урона по постройкам — **решить до реализации** (п. 5): без множителя «оружие → уровень постройки» рейд не считается. ### Шаг D. Мир один раз, конфиг, барьер - [ ] Конфиг: `world.size` (сторона карты в блоках), `world.gamemode`, `world.seed`, `world.generate`, `barrier.distance`. - [ ] Мир генерится один раз и отдаётся; изменения игроков — отдельным слоем. - [ ] Барьер: сервер не пускает; клиент рисует (прозрачность → 0.5 у границы, блендинг с блоком под игроком в ±5 блоках, дальше размытие в невидимую стену). ### Шаг E. Транспорт на NIO (независим, можно раньше) - [ ] `Selector` + неблокирующие `SocketChannel`, `ClientSession` → конечный автомат, блокирующие места (HTTP к лаунчеру) — в пул потоков. - [ ] Проверка: 49 существующих тестов идут по сокету и должны пройти без правок; + 100 одновременных соединений. ### Шаг F. DistantView - [ ] Сервер шлёт LOD (высоты + цвет) по регионам; клиент кэширует **архивом** и досылает недостающее. - [ ] Рендер: квадродерево, **Hi-Z отсечение** (пирамида глубины), `uCamOffset` (float не хватает на ±2000), зажим UV по мипам, свой шейдер GLSL 330. --- ## 5. Открытые вопросы ### 5.1 Решено (не обсуждаем заново) | вопрос | решение | |---|---| | **Роли: из лаунчера или свои на сервере?** | **Свои на сервере.** Лаунчер может подсказать роль, но решение — за сервером: админ это свойство конкретного сервера, а не проекта | | **Урон по частям тела** | По таблице п. 1.6: голова ×2, торс ×1, руки/ноги — своей долей у оружия. Общего «общего урона» не вводим | | **Множитель урона по постройкам** | **Своя модель: ударов = HP постройки ÷ урон оружия.** Без скрытого множителя. Лоза (10 HP) от камня (10 урона) — 1 удар, дерево (250) — 25, камень (500) — 50, лист (1000) — 100, броня (2000) — 200. Зеркальные 37/74/295/589 — не воспроизводим, но и не мешают: считаем от HP | | **Бронедверь** | **1000 HP** (игровые зеркала; fandom 800 — устарело) | | **Прочность инструментов** | **Шкала 0…100**, ремонт = 20 % рецепта (как в Rust, выведено из цены ремонта) | | **Джунгли и биомы** | **Не делаем.** Мир один, без джунглевого лута (джунгли в игре появились 01.05.2025, за пределами нашего среза) | | **Строительные детали и сетка** | Не «свободно и без сетки»: **сетка мира не важна**, но есть **строительная сетка** (фундамент 3×3) и привязка внутренних блоков к уже поставленным строительным. Слова «не привязываясь к сетке мира» — про сетку мира, не про строительную | ### 5.2 Нужно решение (блокирует реализацию) 1. **Крафт упирается в лутбоксы.** По п. 1.4 скрап падает **только** из ящиков, бочек, аирдропов и учёных, а чертёж требует **найденного** предмета. То есть без лутбоксов нельзя ни изучить рецепт, ни потратить скрап: прогрессия крафта не запускается. Варианты: - **(а)** перенести лутбоксы вперёд (они нужны раньше крафта); - **(б)** первый срез без прогрессии: все рецепты «по умолчанию» (`knownByDefault`), стол исследований и скрап — позже, вместе с лутбоксами; - **(в)** свой источник скрапа (например, из узлов) — но это уже не Rust. 2. **Фрагменты чертежей для верстаков 2 и 3** (5 Basic / 5 Advanced) — они тоже из лутбоксов. Повторяем или заменяем скрапом, как до 02.10.2025? Пока лутбоксов нет — вопрос отложен. 3. **Скрап как валюта** — если исследование только для найденных вещей, скрап нужен редко. Оставляем ли его в прогрессии вообще? 4. **Стоимость и время каждого рецепта**, который будем реализовывать — в п. 1.7 есть только по ключевым. Долить по мере надобности. --- ## 6. Как продолжить (для VPS и для другого агента) ### 6.1 Сборка и проверка ```powershell rsx-protocol\scripts\build.ps1 # и test.ps1 (22 проверки) rsx-server-core\scripts\build.ps1 # и test.ps1 (49 проверок) rsx-client\scripts\build.ps1 # и test.ps1 (128 проверок) game-fork\scripts\prepare-game.ps1 # пересобрать форк из ванильного jar (медленно) game-fork\scripts\compile-game.ps1 # только компиляция форка (быстро) ``` **Порядок важен:** `rsx-protocol` → потом `rsx-server-core` (он компилируется против `rsx-protocol\build\classes`) → потом `rsx-client` → потом форк. Форк компилируется против `rsx-client\dist\rsx-loader.jar` и `rsx-protocol\dist\rsx-protocol.jar` — если меняли протокол, пересобери его **до** форка, иначе форк соберётся против старого jar. ### 6.2 Запуск ```powershell rsx-server-core\scripts\run-server.ps1 -Port 25565 rsx-client\scripts\run-game.ps1 # клиент ``` Клиент для проверки: `--server 127.0.0.1 --port 25565` плюс токен лаунчера (`--accessToken`, `--uuid`, `--username`). ### 6.3 Что не сделано (по порядку) 1. **Шаг A** — предметы, инвентарь, реестр, протокол инвентаря, рендер предмета в руке и в слоте, стартовый камень. 2. **Шаг B** — `Dig`/`BreakProgress` в протоколе, состояние ломания на сервере, правила инструмента, тег `admin`, 4 клиентских патча. 3. **Шаг C** — структуры (узлы), сбор, постройка по сокетам. 4. **Шаг D** — конфиг, мир 4000×4000 один раз, барьер. 5. **Шаг E** — транспорт на NIO. 6. **Шаг F** — DistantView. ### 6.4 Мелочи, которые легко упустить - **Текстуры предметов — временные** (взяты из ремейка как заглушки). **ПОМЕТКА: заменить на свои.** Ассеты ремейка обфусцированы: каждый файл **XOR-ится одним байтом**, ключ = `файл[0] ^ 0x89` (у `rock.png` это 0x20). Декод: `key = b[0] ^ 0x89; for (i) b[i] ^= key;` - Пути: `G:\RustNotMC` (репозиторий), `G:\decompiled-rustex` (референс, только читать), `G:\rustexremake` (исходники ремейка с ассетами). - ⚠️ **`G:\decompiled-rustex` — НЕ источник фактов.** Он копиял community-вику 2017–2020 (отсюда шкала скрапа 20/75/125/500, «урон по постройкам» 9/0.2/0.1, списки верстаков с перемешанными уровнями). Проверять числа по официальной вики Facepunch и по истории её правок (рецепт запроса — в шапке раздела 1). - Скрипты — **ASCII без BOM** (PS 5.1 читает без BOM в ANSI и ломает парсер). - В PowerShell **нет heredoc**: сообщения коммитов пишем в файл и `git commit -F`. - Класс-паттерн SSH: `git config core.sshCommand "ssh -i C:/Users/User/.ssh/id_ed25519_zernmc -o IdentitiesOnly=yes"`. - Коммиты по-русски, комментарии в коде — по-английски. - Тесты: `scripts\test.ps1` у каждого модуля, всё на голом JDK, без фреймворков. ### 6.5 Дописать в этот файл - [x] Полные таблицы предмет→верстак (п. 1.2, 1.7) и предмет→скрап/чертёж (п. 1.3, 1.7). - [x] Таблица сбора по классам ресурсов (п. 1.6). - [x] Список строительных объектов с сокетами (п. 1.8) — пересобран по игровым данным. - [ ] Что решили по ролям: из лаунчера или свои на сервере (вопрос в п. 5). - [ ] Стоимость и время каждого рецепта, который будем реализовывать (пока есть по ключевым предметам, п. 1.7). - [ ] Завести в репозитории выгрузку данных оригинала **на дату 06.11.2025** (страницы вики + история правок), чтобы цифры не разъезжались при перечитывании. - [ ] Решить модель урона по постройкам (п. 5, п. 1.11) — без неё рейд не считается. --- ## Приложение. История правок этого файла Отдельный разбор: что в прошлой версии плана было неверно и как это проверено. Сохранено, чтобы правки не откатились и чтобы было видно, чему здесь верить. ### П.1 Разбор: что в прошлой версии этого файла было неверно Сверка с эпохой **06.11.2025**. | было в плане | как на самом деле | метка | |---|---|---| | Камень выдаётся первым в хотбаре при спавне | официально **не документировано**; по гайдам 2023–2025 — камень и фонарь. В вики 2020 г. Rock есть и он «Basic» | ❌ | | Камень «не исследуется» | по сути **верно**: рецепт известен по умолчанию. Но цена физического чертежа — **120 скрапа** | ✅ | | Урон по постройкам: лоза 9, дерево 0.2, металл 0.1, броня 0.1 | эти числа взяты **из вики 2018–2020 гг.** (страница Rock), ремейк их скопировал; современная вика их **не публикует**, и с игровым калькулятором рейда они не сходятся. Камнем лозу — **1 удар**, дерево — 37 камней | ⚠️ | | Камень рубит дерево за 2 удара | **~50–70 ударов** (10 дерева за удар) | ✅ | | Кирка копает руду за ~7 ударов | **~47 ударов** (16 руды за удар, 750 камней в узле) | ✅ | | Кирка рубит дерево за 3 удара | в вики 2020 г. — 5 дерева за удар, это **~60–120 ударов** | ✅ | | Дальность камня 1.25 | **1.2** | ✅ | | Скрап по тирам 20 / 75 / 125 / 500 | на 06.11.2025 — **15 / 30 / 60 / 120** по редкости (редкость Common→Very Rare) | ✅ | | «высокоскоростная стрела — 0 скрапа» | **15 скрапа** | ✅ | | «Укреплённое стекло — 50» | Strengthened Glass Window — **30**, Reinforced Glass Window — **60** | ✅ | | Скрап выпадает из построек | **нет**: только ящики, бочки, аирдропы, учёные | ✅ | | Верстак 1: +50 скрапа в рецепте | **без скрапа** (убрали 06.11.2025) | ✅ | | Верстак 2/3: 500 / 1250 скрапа | **фрагменты чертежей**: 5 Basic / 5 Advanced | ✅ | | Всё крафтится 60 с | у каждого предмета **своё** базовое время; правило «+1 уровень → −50 %, +2 → −75 %» **верно** | ✅ | | Верстаки надо исследовать | рецепты верстаков **известны по умолчанию** | ✅ | | Эксперимент на верстаке 75 / 300 / 1000 | механика **2017–2020**, заменена тех-деревом 03.12.2020 | ❌ | | Тех-дерево верстака (в плане отсутствовало) | в оригинале **есть** с 03.12.2020; у нас сознательно **не делаем** (оверхед) | ✅ | | Salvaged Hatchet, Salvaged Pick Axe | таких предметов **нет** ни в 2020, ни сейчас | ❌ | | M16 | M16 в Rust нет; ближайшее — **LR-300** | ❌ | | «Холодильник», «шестерни», «мишень», «нефтезаводка» | **Fridge**, **Gears**, **Reactive Target**, **Small Oil Refinery** | ✅ | | Лист (Sheet Metal) — без HP | **1000 HP** | 🟡 | | Бронедверь 800 HP | **1000 HP** по игровым зеркалам; fandom даёт 800 | 🟡 | | Дверь листовая 250 HP | **250** — подтверждено | ✅ | | Кодовый замок: 100 металла, 4 цифры | **верно** | ✅ | | Гниение: «лоза/дерево — часы, камень/металл — дни» | точные числа: лоза **1 ч**, дерево **3 ч**, камень **5 ч**, лист **8 ч**, броня **12 ч**; внутри здания ×10 | 🟡 | | Столбы и правила про них | **столбов в Rust нет** с 01.02.2018 (обновление 196) | ✅ | | «Ставятся свободно, не по сетке мира» | детали садятся **по сетке** (фундамент 3×3) | 🟡 | | Инструменты L1: «Salvaged Hammer, Salvaged Hatchet, Pick Axe» | это **Salvaged Hammer + Hatchet + Pick Axe** (металлические) — ошибка разбора списка | ✅ | | Списки «что открывает уровень» | L1/L2/L3 были перемешаны (M16, огнемёт, F1, 8-кратник — это L2/L3) | ✅ | | Джунгли | биом появился **01.05.2025** («Jungle Update»); в проекте не делаем | ✅ | | Тех-дерево: разблокировка за скрап | на 06.11.2025 «tech tree tax» **убран** — в верстаке разблокировка бесплатна; 15/30/60/120 — цена чертежа на столе | ✅ О-нов | | Броня: взрыв 50–100 % у шлемов | вики ошибается: Bucket 8 %, Riot 8 %, Bone 7 %, Heavy Plate — не подтверждено | ⚠️ | ### П.2 Спорные и неподтверждённые места (см. п. 5) 1. **Прочность инструментов (HP).** В вики нет такого поля ни у одного предмета; шкала 0…100 — вывод из цены ремонта. Если нужна точность — брать из игровых данных. 2. **Механика исследования** (10 с, уничтожение предмета, продолжение при закрытом интерфейсе, звук) — **только community-вика**, официальной нет. Если это основа проекта — проверить в живой игре. 3. **Множитель урона оружия по постройкам** — не опубликован нигде: 250 HP / 10 урона = 25 ударов, а игровые зеркала дают 37. Старая вики (2018–2020) давала «лоза 9, дерево 0.2, металл 0.1» — но с калькулятором рейда она тоже не сходится. Нужна своя модель. 4. **HP броневой двери** — 1000 (игровые зеркала) против 800 (fandom; так же и в 2020). 5. **HP базовых блоков** — в официальной вики по ним страниц нет вообще, числа взяты из игровых зеркал (rusthelp / rustclash), которые сходятся. 6. **Радиус инструментального шкафа** — 50 м (официальная вика) против 16 м (старая вики, статья Building); «50 meter radius» в инфобоксе вики сама вики называет своей ошибкой — но оно же стоит на официальной странице предмета. 7. **Таймеры гниения** — 1/3/5/8/12 ч (официальная вика, современные гайды) против 1/2/4/8/12 ч (вики 2020 г.): похоже, дерево и камень перенастраивали после 2020. 8. **Стартовый набор** (камень и фонарь) — официально не документирован; в вики 2018 г. у Rock написано *«Every time you spawn this item will be present as the first item in your toolbar»*, но это может быть остаток Legacy-описания. 9. **Порядок и ветки тех-дерева** — цены есть, структура только community. 10. **Столы исследований на монументах** — список и разница в поведении только community; список может быть устаревшим. 11. **Правила стабильности второго этажа** — ни один доступный источник не описывает. 12. **Сброс таймера гниения** (открытие двери с замком) — только community, радиус эффекта неизвестен. 13. **rust.wiki.gg недоступна** для автоматической проверки (401 на все запросы) — часть спорных мест может ею опровергаться; при сомнениях проверять руками. 14. **Обновления после 06.11.2025** (апгрейд верстака 07.05.2026, Livestock 01.10.2026) по условию задачи не проверялись. 15. **Вики Facepunch — снимок от 19–20.02.2026.** Данные предметов там сгенерированы массово в феврале 2026 (до них страницы велись вручную и были местами протухшие). То есть «текущая вика» = игра на ~февраль 2026, а не сегодня. Для нашего среза (11.2025) это удачный факт: почти все числа совпадают. 16. **Страницы вики на 06.11.2025 местами показывали протухшее** (например, верстак 1 ещё со «50 Scrap», хотя скрап убрали в тот же день). Поэтому «что вики говорила тогда» ≠ «что было в игре тогда»; верить надо девблогам и ченджлистам. 17. **Колонка «взрыв» в таблице Protection вики — с ошибками** (см. п. 1.6): верны только 8 % / 8 % / 7 % для Bucket / Riot / Bone Armor и 30 % для Hazmat. 18. **HP деревянной двойной двери** — подтверждён только игровыми зеркалами (200); датированной вики нет (на странице в 2017 г. стоял текст «has X health»). 19. **Взрыв у Heavy Plate** (8/12/12 % против 17/17/17 % против 100 %) — не подтверждён.