База из ремейка: ассеты, предметы, звуки и правки плана

Выгрузили из ремейка Rustex всё, на чём будем работать, и переписали план
под реальные цифры.

Ассеты:
- tools/extract-rustex-assets.py распаковывает res/ и game.jar и декодирует
  однобайтовый XOR (ключ по сигнатуре: PNG ^0x89, OGG ^0x4F, JSON ^0x7B).
  Итог: assets/rustex, 1.65 ГБ, 19 тыс. файлов. В репозиторий не кладём.
- Не прочитались 553 .obj, 106 .rrs, 113 .nbt: у них другой шифр, нужен
  разбор кода (REA).

Таблицы (в репозитории):
- items.csv: 218 предметов с уроном, дальностью, темпом, прочностью, добычей
  за удар, материалом, иконкой и моделью;
- sounds.csv: 505 звуковых событий с файлами;
- item-texts.json: 543 названия и описания предметов.

План (PLAN.md):
- Сбор теперь по балансу ремейка: камень берёт 50 дерева и 35 руды, топор 85
  дерева, каменная кирка 80 руды. Дерево 750 топором рубится за 9 ударов, с
  меткой за 6-7 - ровно те 7-10 ударов, которых ждали.
- Исследования - версия после 2020: два пути. Стол (15/30/60/120, нужен сам
  предмет, превращается в чертёж) и тех-дерево верстака (125/250/500, ветки с
  предками, разблокировка личная). Утверждение "тех-дерево бесплатно" было
  ошибкой community-вики.
- Лозы больше нет: она из джунглей, а джунглей нет. Выкинута из HP-таблицы,
  цен, таймеров гниения и правил шкафа.
- Новые разделы 1.10 (мусорка на дороге: серая бочка - скрап, синяя -
  компоненты, красная - нефть и топливо, плюс ящики с едой) и 1.11 (дороги:
  сетка 3-4 полос плюс кольцо, сегменты - точки спавна мусорки).
- Первый источник скрапа - мусорка, лутбоксы отложены: вопрос о прогрессии
  крафта снят.
- Узлы: руда - своя 3D-модель с AABB, деревья - пока блоки мира.
This commit is contained in:
sasheg dev
2026-10-21 19:31:51 +03:00
parent 8488a34c80
commit 27047e8071
9 changed files with 5937 additions and 210 deletions
+405 -209
View File
@@ -12,24 +12,29 @@
| модуль | что в нём | состояние |
|---|---|---|
| `rsx-protocol` | формат провода: кадрирование, буфер, рукопожатие, игровые пакеты | рабочий, 22 теста |
| `rsx-protocol` | формат провода: кадрирование, буфер, рукопожатие, игровые пакеты | рабочий, 24 теста |
| `rsx-auth` | свои аккаунты сервера (PBKDF2, токены, троттлинг) | рабочий, используется только когда лаунчер не настроен |
| `rsx-server-core` | тик-луп, мир (чанки, генерация, сохранение), сессии, вход через лаунчер | рабочий, 49 тестов |
| `rsx-server-core` | тик-луп, мир (чанки, генерация, сохранение), сессии, вход через лаунчер, инвентарь | рабочий, 57 тестов |
| `rsx-client` | загрузчик модов, API модов, хуки в клиент | рабочий, 128 тестов |
| `game-fork` | форк Minecraft 1.12.2: свой сетевой слой, свой экран входа, свой HUD | собирается чисто, 3275 классов |
| `tools` | извлечение ассетов ремейка: `extract-rustex-assets.py`, `extract-items.py`, `extract-sounds.py` | рабочий, ассеты выгружены (1.65 ГБ) |
| `assets/rustex` | ассеты ремейка: модели, текстуры, звуки, иконки, база предметов, карты | выгружено, **временная база** |
Уже работает целиком: клиент заходит на сервер по токену лаунчера → сервер спрашивает
лаунчер «этот ваш?» → клиент получает мир → чанки приходят и рисуются →
игрок ходит и ломает блоки.
игрок ходит и ломает блоки → сервер выдаёт камень в руку (инвентарь есть).
Не сделано: предметы, инвентарь, крафт, верстаки, изучение чертежей, узлы-ресурсы
(деревья/камни/руда как разрушаемые объекты), постройка баз, нормальная генерация
мира, транспорт на NIO, дальний вид (DistantView).
Не сделано: клиентский рендер своих предметов, крафт, верстаки, исследование
(стол + тех-дерево), узлы-ресурсы (деревья/камни/руда как разрушаемые объекты),
мусорка и дороги, постройка баз, нормальная генерация мира, транспорт на NIO,
дальний вид (DistantView).
**Данные оригинала** — раздел 1: срез Rust на **06.11.2025** («Pivot Or Die»).
Упрощения проекта поверх оригинала: **без тех-дерева верстака**, **без автоматизации**
(Industrial Crafter), **без биомов и джунглей**, **стартовые предметы не исследуются**.
Все числа раздела 1 помечены: ✅ подтверждено · 🟡 косвенно · ❌ не подтверждено.
Упрощения проекта поверх оригинала: **без автоматизации** (Industrial Crafter),
**без биомов и джунглей** (значит, без лозы), **стартовые предметы не исследуются**.
**Баланс берём из ремейка**, а не из вики (п. 1.1) — там есть все 218 предметов
с характеристиками. Все числа раздела 1 помечены: ✅ подтверждено · 🟡 косвенно ·
❌ не подтверждено.
---
@@ -93,24 +98,38 @@ fandom: `…/api.php?action=query&prop=revisions&titles=<Page>&rvlimit=1
темп удара 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) + С (расчёт)
- **Сбор:** за удар инструмент берёт из узла столько, сколько у него в таблице
(у камня 50 дерева и 35 руды, у каменного топора 80 дерева, у топора 85
дерева, у каменной кирки 80 руды, у ледяной кирки 100 руды) — п. 1.6.
✅ (ремейк, `stacks.json`, у нас `rsx-protocol/.../items/items.csv`)
- **Прочность:** шкала 0…100 у камня, 160 у каменных инструментов, 300 у
топора, 400 у молотка, 1500 у ледяной кирки. ✅ (ремейк)
- **Урон по постройкам:** считаем от HP постройки и урона оружия (п. 5.1).
Числа «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 ударов | — |
Узел — это запас (HP) ресурса. За удар инструмент забирает своё число из
таблицы п. 1.6; последний удар отдаёт остаток узла, поэтому дерево всегда
даёт ровно свой запас. **Метка** (светящийся «крестик» на дереве, «горячая
точка» на руде) увеличивает урон за удар: по дереву до ×2, по руде до ×3,
по серии ударов по метке бонус растёт. С меткой ударов примерно на треть
меньше — «7 идеальных» против «10 обычных» у топора по берёзе.
| узел | запас | камень | каменная кирка | топор | ледяная кирка |
|---|---|---|---|---|---|
| дерево (нищий дуб) | 500 дерева | 10 | — | 6 | — |
| дерево (берёза) | 750 дерева | 15 | — | 9 | — |
| дерево (мёртвое) | 1000 дерева | 20 | — | 12 | — |
| узел камня | 750 Stones | 21 | 9 | — | 8 |
| узел металла | 500 Metal Ore | 14 | 6 | — | 5 |
| узел серы | 200 Sulfur Ore | 6 | 3 | — | 2 |
✅ (запасы узлов — официальная вики и rustpedia; урон за удар — ремейк)
⚠️ Официальная вика даёт другие числа сбора (камень по дереву 10, руда 5) —
это баланс оригинального Rust. **Мы берём баланс ремейка**: он совпадает с
ощущением «7–10 ударов на дерево», и по нему у нас есть все 218 предметов
с точными характеристиками (п. 1.6).
### 1.2 Верстак (Workbench) — 3 уровня
@@ -119,8 +138,8 @@ fandom: `…/api.php?action=query&prop=revisions&titles=<Page>&rvlimit=1
**Верстак — станция крафта с требованием уровня.** Уровень верстака = минимальный уровень,
на котором рецепт доступен: предмет уровня 1 крафтится на верстаке 1 (и на любом более
высоком), уровня 2 — только на верстаке 2 и выше, и так далее. Знание рецепта добывается
отдельно — столом исследований (п. 1.3) либо тех-деревом верстака (в оригинале есть,
у нас не делаем).
отдельно — столом исследований (п. 1.3) **или** тех-деревом верстака (в оригинале есть,
**у нас делаем** — п. 1.3).
| уровень | рецепт | где крафтится | время крафта |
|---|---|---|---|
@@ -160,15 +179,38 @@ craftTime(tier) = max( floor( base × 0.5 ^ min( max(tier − requiredTier, 0),
**Кто что открывает** — по каждому предмету указано в п. 1.7 (уровень верстака).
### 1.3 Стол исследований (Research Table) и чертежи (Blueprints)
### 1.3 Исследование: стол и тех-дерево (версия после 2020)
**Два пути, оба рабочие:**
1. **Стол исследований (Research Table)** — «исследовать сразу», но нужен сам предмет.
2. **Тех-дерево верстака** — «пройти ветку до нужного предмета, тратя скрап».
**Сам стол:** 200 Metal Fragments + 20 Scrap, крафтится **на верстаке 1**, время
30 с (L1) / 15 с (L2) / 7 с (L3). ✅
**Как исследуют:** кладёшь **один** нужный предмет в верхний слот → показывается требуемый
скрап (в нижний слот) → кнопка «Research» → **10 секунд** → в верхнем слоте появляется
**чертёж**, **предмет уничтожается**. 🟡
_(вся механика исследования — только по community-вики; официальная вики её не описывает)_
**Путь 1 — стол.** Кладёшь **один** нужный предмет в верхний слот → показывается
требуемый скрап (в нижний слот) → кнопка «Research» → **10 секунд** → **предмет
превращается в чертёж** (в инвентаре: текстура чертежа, а поверх неё — сам
исследуемый предмет) и **уничтожается как предмет**. Предмет должен **быть у
тебя** — буквально разобрать, чтобы понять, из чего он сделан. 🟡
_(механика — по community-вики; официальная вики подтверждает итог: «Blueprints
can be used to learn how to craft an item… obtained by using a research table with
scrap and the item you want to research»)_
**Путь 2 — тех-дерево верстака.** У каждого уровня верстака **своё дерево**:
ветки, в вершинах — предметы. Чтобы открыть предмет, заплати скрап и пройди по
ветке до него (предки сначала). Разблокировка **личная и непередаваемая**.
| верстак | цена узла | что открывает |
|---|---|---|
| L1 | **125** скрапа | каменные → металлические инструменты, меч, тесак |
| L2 | **250** скрапа | salvage-топор, ледяная кирка, металлический клинок, гаражные ворота, большая печь, автотурель |
| L3 | **500** скрапа | шестерни, металлическая труба, бронедверь, C4, взрывчатка |
| Engineering | **250** скрапа | промышленный крафтер, автотурель, телефон |
✅ (официальная вики: у каждого предмета в блоке Research **две** строки —
«Research Table» со своей ценой и «Workbench Level N – Tech Tree» со своей)
- Прочность предмета на результат не влияет (если предмет не сломана — иначе не работает). 🟡
- Исследование **продолжается**, если закрыть интерфейс стола. 🟡
@@ -181,7 +223,14 @@ _(вся механика исследования — только по communi
Официальная вики подтверждает косвенно: предмет `researchpaper` — *«Use this item in a
Research Bench to create blueprints of items»*. ✅
**Цена исследования — по редкости предмета** (после «Pivot Or Die», 06.11.2025):
**Результат в тех-дереве** — не чертёж, а **открытый рецепт**: предмет можно сразу
крафтить. Физический чертёж (для промышленного крафтера) получают через стол.
**Известен по умолчанию** — рецепт открыт с начала игры: ни стола, ни скрапа не нужно.
У камня, каменных инструментов, молота, строительного плана, верстаков 1–3, стола
исследований, дверей и замков — пометка «known by default» в официальной вики.
**Цена стола** — по редкости предмета (после «Pivot Or Die», 06.11.2025):
| редкость | скрап | сколько предметов |
|---|---|---|
@@ -195,11 +244,24 @@ Research Bench to create blueprints of items»*. ✅
обновление. Шкалы «по тирам предмета» в Rust **нет**: цена привязана к редкости, а не к
уровню верстака.
**Тех-дерево верстака** (в оригинале есть, у нас **не делаем** — оверхед): разблокировка
прямо в верстаке, по веткам. На 06.11.2025 **тех-дерево бесплатно** — в «Pivot Or Die»
убрали «tech tree tax», так что платить за разблокировку в нём не нужно; 15/30/60/120 —
это цена **физического чертежа** на столе исследований. Колонка «125 / 250 / 500» в вике —
**устаревшая** (это старый налог тех-дерева по уровню верстака, снят 06.11.2025). ✅ О-нов
**Цена тех-дерева — своя у каждого уровня верстака** (125 / 250 / 500 / 250, см. выше).
Это **отдельная плата** от цены стола: предмет можно получить и через стол (дёшево, но
нужен найденный предмет), и через дерево (дороже, но предмет не нужен — нужен только
скрап и время). Официальная вики даёт обе цены рядом:
| предмет | стол | тех-дерево |
|---|---|---|
| Топор (Hatchet) | 30 | L1 — 125 |
| Кирка (Pickaxe) | 30 | L1 — 125 |
| Меч (Salvaged Sword) | 15 | L1 — 125 |
| Верстак 1 / 2 / 3 | 60 / 30 / 30 | — |
| Промышленный крафтер | 30 | Engineering — 250 |
| Автотурель | 120 | Engineering — 250 |
| Телефон | 30 | Engineering — 125 |
⚠️ Утверждение прошлой версии плана («тех-дерево бесплатно с 06.11.2025, колонка
125 / 250 / 500 устарела») — **неверно**: это данные community-вики. Официальная вики
показывает обе цены и сейчас. **Делаем как в оригинале: два пути.**
**Монументы:** официально задокументирован только **Outpost** (Workbench L1 + Research
Table). По community-вике столы есть также на аэродроме, электростанции, спутниковой
@@ -218,9 +280,12 @@ Table). По community-вике столы есть также на аэродр
андроидов; разрушение построек скрапа **не даёт**. ✅ О (раздел Loot Sources)
- **Не крафтится** (Craftable: False). ✅ О
- **В рецептах верстаков скрапа нет** (убрали 06.11.2025). Тратится на исследование
(15/30/60/120) и на разблокировку в тех-дереве. ✅ О-нов
(15/30/60/120) и на разблокировку в тех-дереве (125/250/500). ✅ О
- Основные источники (О): базовый ящик 3, синий и жёлтый бочонок 2, военный ящик 8,
элитный 25, аирдроп 140–160, учёный 8–24.
- **Первый источник в нашей игре — мусорка на дороге** (§1.11): серая бочка даёт
до 15 скрапа. Лутбоксы (монументы) отложены — фундамента для них ещё нет, а
прогрессию исследования скрап должен закрывать уже сейчас.
- Косвенно: в Outpost можно обменять металл на скрап (1 скрап = 20 металла). 🟡
- Фрагменты чертежей скрап **не заменяют** — это отдельная валюта (п. 1.2).
@@ -229,7 +294,7 @@ Table). По community-вике столы есть также на аэродр
**Как ставится.** Строительный план (Building Plan, **20 дерева**, крафт 15 с) —
разворачиваемый предмет: кладёшь в хотбар, ПКМ открывает колесо конструкций, выбираешь
объект, видишь «призрак»; **ПКМ + движение мышью** перебирает варианты, **ЛКМ** ставит.
✅ План ставит **только лозу**; все старшие уровни получаются **улучшением молотком**. ✅
✅ План ставит **деревянный** уровень; все старшие уровни получаются **улучшением молотком**. ✅
**Два слоя объектов:**
@@ -248,21 +313,23 @@ Table). По community-вике столы есть также на аэродр
| уровень | HP |
|---|---|
| Twig (лоза) | **10** |
| Wood (дерево) | **250** |
| Stone (камень) | **500** |
| Stone (камни) | **500** |
| Sheet Metal (лист) | **1000** |
| Armored (броня) | **2000** |
**Стоимость детали по уровням.** Лоза платится деревом; **улучшение молотком стоит как
целевой уровень** (лоза→камень = столько же камней, сколько дерево→камень); понизить
уровень нельзя.
❌ **Уровня «лоза» (twig) у нас нет:** в Rust лоза — из джунглей, джунглей в нашем мире
нет (п. 5.1), поэтому её выкидываем отовсюду: из HP-таблицы, из цен, из таймеров гниения
и из правил шкафа.
| деталь | Twig (дерево) | Wood (дерево) | Stone (камни) | Sheet Metal (металл) | Armored (ХМ) |
|---|---|---|---|---|---|
| стена, фундамент, полустена, лестница | 50 | 200 | 300 | 200 | 25 |
| треугольный фундамент, ступени, пол, рамка пола, треугольный пол, рамка треугольного пола, низкая стена, большой проём, крыша, рампы | 25 | 100 | 150 | 100 | 13 |
| малый дверной проём, окно | 35 | 140 | 210 | 140 | 18 |
**Стоимость детали по уровням.** **Улучшение молотком стоит как целевой уровень**
(дерево→камень = столько же камней, сколько металл→камень); понизить уровень нельзя.
| деталь | Wood (дерево) | Stone (камни) | Sheet Metal (металл) | Armored (ХМ) |
|---|---|---|---|---|
| стена, фундамент, полустена, лестница | 200 | 300 | 200 | 25 |
| треугольный фундамент, ступени, пол, рамка пола, треугольный пол, рамка треугольного пола, низкая стена, большой проём, крыша, рампы | 100 | 150 | 100 | 13 |
| малый дверной проём, окно | 140 | 210 | 140 | 18 |
Скрап и ХМ в постройке не участвуют (кроме армированного уровня — там ХМ).
@@ -298,10 +365,10 @@ meter radius of it»), радиус «проецируется фундамен
вика), но помечаем как спорное. ✅/⚠️
Блокирует и постройку, и предметы (спальники, сундуки) внутри. Аптейп — **доля от
стоимости постройки**, списывается раз в **24 ч**; уничтоженный шкаф съедает до 24 ч
аптейпа. ✅ Неавторизованные могут ставить **лозовые полы и деревянные лестницы**, всё
остальное — «BUILDING BLOCKED». ✅ (в плане было верно)
аптейпа. ✅ Неавторизованные не могут ставить **ничего** — всё «BUILDING BLOCKED»
(исключение про лозовые полы выкинуто вместе с лозой). ✅ (в плане было верно)
**Гниение (decay):** когда аптейп кончился: лоза **1 ч**, дерево **3 ч**, камень **5 ч**,
**Гниение (decay):** когда аптейп кончился: дерево **3 ч**, камень **5 ч**,
лист **8 ч**, броня **12 ч**. Внутри здания — **в 10 раз дольше** (деревянная дверь 30 ч,
листовая 80 ч, бронедверь 120 ч). Открытие/закрытие двери с замком сбрасывает таймер. 🟡
⚠️ В вики 2020 г. эти же числа стояли как **1 / 2 / 4 / 8 / 12 ч** — таймеры дерева и
@@ -317,59 +384,44 @@ meter radius of it»), радиус «проецируется фундамен
### 1.6 Инструменты: сбор, урон, износ
**Что значат три числа у пары «инструмент × ресурс»** (официальная вика, таблица Gather Rates):
**Gather Damage** — сколько ресурса снимает удар, **Bonus** — разброс этого количества
(±10 % для дерева и плоти, ±20 % для руды), **Condition Loss** — сколько прочности
инструмента уходит за удар.
**Откуда цифры.** Основной источник — **база предметов ремейка**
(`rsx-protocol/src/main/resources/items/items.csv`, выгружена из `models/stacks.json`):
там у каждого предмета урон, дальность, темп, прочность, сколько ресурса он берёт
за удар и из чего сделан. Официальная вики даёт **другой** баланс (оригинальный
Rust) — см. предупреждение в п. 1.1. ✅ (ремейк, 218 предметов)
| инструмент | цель | 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 |
| **Молот** | постройки | добычи нет | | |
**За удар инструмент берёт** из дерева `rwood`, из руды `rore`, из плоти — свой урон.
**Темп** — `rcooldown` в тиках (20 тиков = 1 с). **Прочность** — `rdurability`.
✅ Перекрёстная проверка: вики 2020 г. (правка 2018–2020) даёт те же числа —
камень 10/5, каменный топор 20 по дереву, каменная кирка 16 по руде, топор 30, кирка 30,
Salvaged Axe 50, Icepick 50, Hammer 15 по дереву. Расхождений в самих значениях нет.
| инструмент | урон | дальность | темп (тики / с) | прочность | дерево за удар | руда за удар |
|---|---|---|---|---|---|---|
| **Камень** | 10 | 2 | 40 / 2.0 | 100 | 50 | 35 |
| **Каменный топор** | 15 | 3 | 32 / 1.6 | 160 | 80 | — |
| **Каменная кирка** | 17 | 3 | 32 / 1.6 | 160 | — | 80 |
| **Топор (Hatchet)** | 25 | 3 | 31 / 1.55 | 300 | 85 | — |
| **Кирка (Pickaxe)** | 30 | 3 | 32 / 1.6 | 300 | — | 100 |
| **Молот** | 0 | 3 | 32 / 1.6 | 300 | — | — |
| **Salvaged Hammer** | 30 | 3 | 19 / 0.95 | 400 | 40 | 59 |
| **Salvaged Axe** | 40 | 3 | 28 / 1.4 | 1500 | 100 | — |
| **Salvaged Icepick** | 40 | 3 | 28 / 1.4 | 1500 | — | 100 |
| **Salvaged Sword** | 50 | 3 | 25 / 1.25 | 300 | — | — |
| **Salvaged Cleaver** | 60 | 3 | 35 / 1.75 | 400 | — | — |
| **Дубинка (Bone Club)** | 16 | 3 | 16 / 0.8 | 300 | 60 | 44 |
| **Нож (костяной)** | 16 | 3 | 16 / 0.8 | 250 | — | — |
| **Нож (боевой)** | 35 | 3 | 16 / 0.8 | 250 | — | — |
| **Мачете** | 35 | 3 | 20 / 1.0 | 300 | — | — |
| **Булава (Mace)** | 60 | 3 | 35 / 1.75 | 300 | — | — |
| **Длинный меч** | 75 | 3 | 35 / 1.75 | 400 | — | — |
| **Копьё (каменное)** | 35 | 5 | 32 / 1.6 | 400 | — | — |
| **Копьё (деревянное)** | 25 | 4 | 32 / 1.6 | 250 | — | — |
**Боевая статистика** (официальная вика): «урон» — базовый по торсу, «×2» — множитель
в голову, «темп» — секунд между ударами, «дальность» — максимум.
⚠️ Поле `skinning` (0.45…1) в базе есть, но смысл его не разобран — **пока не
применяем**. Поле `rmaterial` (stone / metalwood / metalmediumrattley / gun / cloth /
leather …) — «материал» предмета: по нему считается цена ремонта и уровень брони.
| инструмент | урон | в голову | темп | дальность | радиус |
|---|---|---|---|---|---|
| Камень | 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 |
**Для сравнения — баланс оригинального Rust** (официальная вики, Gather Rates):
камень 10 дерева / 5 руды, каменный топор 20, каменная кирка 16, топор 30, кирка 30,
Salvaged Axe 50, Icepick 50, Hammer 15. **Не берём** — у нас баланс ремейка (п. 1.1).
**Урон по частям тела** (вики 2020 г., проверено современной вики по базовому урону):
камень **20/10/8/8**, каменный топор **27/15/12/12**, каменная кирка **35/17/13/13**.
@@ -377,27 +429,17 @@ Salvaged Axe 50, Icepick 50, Hammer 15 по дереву. Расхождений
Для нашей модели достаточно «голова ×2, торс ×1, руки/ноги — общая доля», но в Rust это
не так. 🟡
**Прочность:** официальной вики **нет поля HP** ни у одного предмета. Ремонт стоит
ровно 20 % рецепта → шкала 0…100 → камень (0.3 за удар) живёт ~333 удара по дереву,
кирка по плоти (1.0) — 100 ударов. ❌ Значение «100» — вывод из ремонта, не подтверждение.
**Прочность:** в ремейке у каждого предмета своё число (камень 100, каменные
инструменты 160, топор 300, молот 400, ледяная кирка 1500). Износ за удар считаем
пропорционально износу вики (0.3 за удар по дереву и руде, 1.0 по плоти). ✅/С
**Сколько ударов на ресурс** (узел = 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 |
**Сколько ударов на ресурс** — таблица в п. 1.1 (запасы узлов: 500/750/1000 дерева,
750 камней, 500 металла, 200 серы; урон за удар — из п. 1.6).
**Урон по постройкам:** официальной вики **нет** данных «урон инструмента по уровню
постройки». Есть HP блоков (п. 1.5) и расчёт «сколько инструментов надо взять» из
игровых зеркал: камнем лозу — **1 удар**, дерево — **37 камней**, камень — **74**,
лист — **295**, броню — **589**. Таблица «лоза 9, дерево 0.2, металл 0.1» — из
игровых зеркал: камнем — **37 камней** на дерево, **74** на камень, **295** на лист,
**589** на броню. Таблица «лоза 9, дерево 0.2, металл 0.1» — из
экспериментальной вики 2015–16, **не использовать**. ❌
⚠️ Логическая нестыковка: 250 HP / 10 урона = 25 ударов, а зеркала дают 37 — значит у
оружия есть множитель урона по постройкам, который **нигде не опубликован**. Для нас:
@@ -405,7 +447,7 @@ Salvaged Axe 50, Icepick 50, Hammer 15 по дереву. Расхождений
**Кого чем:** топоры и камень бьют по дереву, кирки — по руде, камень умеет и то
и другое, Salvaged Hammer — и дерево и руду. Мечи и тесаки — только по плоти: у них
на официальной вики нет строк Tree/Ore. ✅
в базе ремейка нет ни дерева, ни руды. ✅
**Броня** (официальная вика, таблица Protection). Слои: голова/торс/ноги — по 2 слота
(L1 — одежда, L2 — броня), руки и ступни — по одному; **оба слота дают защиту**.
@@ -441,51 +483,61 @@ heavy plate helmet 90 % пули, hazmat 30/30; по футболке источ
**`bench`** — минимальный уровень верстака для крафта: 0 = крафтится без верстака,
1 / 2 / 3 = нужен верстак соответствующего уровня.
**«По умолчанию»** — рецепт открыт с начала игры (знать не нужно, чертёж не нужен).
**Чертёж** — цена физического чертежа на столе исследований (если рецепт не открыт
по умолчанию). Стол тратит 15 / 30 / 60 / 120 скрапа по редкости.
**Стол** — цена физического чертежа на столе исследований (если рецепт не открыт
по умолчанию): 15 / 30 / 60 / 120 скрапа по редкости.
**Дерево** — путь через тех-дерево верстака: уровень верстака и цена узла
(125 / 250 / 500 / 250). `—` = пути нет (рецепт по умолчанию или предмет не в дереве).
| предмет | 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 | нет |
| предмет | 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 | L1 — 125 | нет |
| Кирка (Pickaxe) | 1 | 100 дерева + 125 металла | 30 с | 30 | L1 — 125 | нет |
| **Salvaged Hammer** | 1 | 1 металл. труба + 50 металла | 30 с | 30 | L1 — 125 | нет |
| **Salvaged Sword** | 1 | 1 металл. клинок + 15 металла | 30 с | 15 | L1 — 125 | нет |
| **Salvaged Cleaver** | 1 | 1 дорожный знак + 50 металла | 30 с | 30 | L1 — 125 | нет |
| **Salvaged Axe** | 2 | 1 металл. труба + 5 металл. клинков | 30 с | 60 | L2 — 250 | нет |
| **Salvaged Icepick** | 2 | 1 металл. труба + 5 металл. клинков | 30 с | 60 | L2 — 250 | нет |
| Металлический клинок | 2 | — | 1 с | 30 | L2 — 250 | нет |
| Шестерни | 3 | — | 1 с | 60 | L3 — 500 | нет |
| Металлическая труба | 3 | — | 1 с | 60 | L3 — 500 | нет |
| Металлическая пружина | 3 | — | 1 с | 60 | L3 — 500 | нет |
| Большая печь | 2 | 600 дерева + 500 камня + 75 топлива | 40 с | 60 | L2 — 250 | нет |
| Гаражные ворота | 2 | 300 металла + 2 шестерни | 30 с | 30 | L2 — 250 | нет |
| Автотурель | 2 | — | 45 с | 120 | L2 — 250 | нет |
| **Бронедверь** | 3 | 20 ХМ + 5 шестерён | 30 с | 120 | L3 — 500 | нет |
| **Бронедвойная дверь** | 3 | 25 ХМ + 5 шестерён | 30 с | 120 | L3 — 500 | нет |
| **Взрывчатка** (Explosives) | 3 | — | 5 с | 120 | L3 — 500 | нет |
| **Timed Explosive Charge** (C4) | 3 | — | 30 с | 120 | L3 — 500 | нет |
✅ (вики на 11.2025). «По умолчанию» = рецепт открыт без чертежа — **для нас это значит
«не исследуется»** (см. правило в шапке раздела).
**Ветки наших тех-деревьев** (предок → потомок; цена узла одна на уровень верстака):
| верстак | ветка |
|---|---|
| L1 (125) | молот → топор → кирка → меч → тесак |
| L2 (250) | salvage-топор → ледяная кирка; металлический клинок; большая печь; гаражные ворота; автотурель |
| L3 (500) | шестерни → металлическая труба → бронедверь; C4; взрывчатка |
**Что НЕ существует** (в плане раньше было — убрано):
`Salvaged Hatchet`, `Salvaged Pick Axe`, `M16` (есть LR-300), `Doorway (small)` как предмет,
`Oil Refinery` (есть только Small Oil Refinery), `Refrigerator` (есть Fridge),
@@ -494,6 +546,10 @@ heavy plate helmet 90 % пули, hazmat 30/30; по футболке источ
**Ресурсы** (дерево, камни, металл, ХМ, сера, скрап, ткань, кожа) не крафтятся, а
собираются — рецепта нет вовсе.
**Полный список предметов с характеристиками** — в
`rsx-protocol/src/main/resources/items/items.csv` (218 шт, выгружено из ремейка,
п. 1.6). Названия и описания — в `assets/rustex/data/item-texts.json` (543 шт).
### 1.8 Строительные объекты и сокеты
**Объекты** (набор одинаков для всех уровней): квадратный фундамент, треугольный
@@ -533,13 +589,14 @@ inside door frames.»* 🟡
| сумма цен исследования по редкости | 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, стоимость листа дешевле камня (но нужна переплавка) ✅ |
| **удары по узлу (наши цифры)** | камень 750 ÷ 35 за удар = **21 удар**; ÷ 80 (каменная кирка) = **9**; ÷ 100 (кирка) = **8** ✅ |
| **удары по дереву (наши цифры)** | 500 ÷ 50 (камень) = **10**; ÷ 85 (топор) = **6**; 750 ÷ 85 = **9**; 1000 ÷ 85 = **12** ✅ |
| **ощущение «7–10 ударов»** | топор по берёзе (750) — 9 ударов, с меткой ≈ 6–7 ✅ совпадает с ожиданием игрока |
| **расход прочности** | камень: 21 удар по узлу × 0.3 = 6.3 прочности (шкала 100 → ~16 узлов на камень) ✅ |
| прогрессия уровней постройки | HP 250 → 500 → 1000 → 2000 при цене 200 → 300 → 200 → 25 — растёт по HP, стоимость листа дешевле камня (но нужна переплавка) ✅ |
| двери | дерево 200 HP / 300 дерева, лист 250 / 150 металла, броня 1000 / 20 ХМ ✅ |
| формула времени крафта | 589 предметов, 0 расхождений с формулой п. 1.2 ✅ |
| **база ремейка против наших таблиц** | 218 предметов в `items.csv`; все наши числа (урон, темп, прочность, добыча) взяты оттуда ✅ |
**Не сошлось (требует решения проекта, п. 5):**
@@ -549,8 +606,10 @@ inside door frames.»* 🟡
| радиус шкафа | 50 м (официальная вика) против 16 м (старая вики) |
| HP броневой двери | 1000 (зеркала) против 800 (fandom, 2020) |
| таймеры гниения | 1/3/5/8/12 ч против 1/2/4/8/12 ч (2020) |
| таблица «урон по постройкам» 2018 г. | лоза 9 / дерево 0.2 / металл 0.1 — не публикуется современной викой и не сходится с калькулятором |
| таблица «урон по постройкам» 2018 г. | лоза 9 / дерево 0.2 / металл 0.1 — не публикуется современной викой и не сходится с калькулятором; лозы у нас нет |
| скрап на исследование | вики до 06.11.2025 давала плоские 20/75/125/500; после обновления — 15/30/60/120 **по редкости**, а не по уровню верстака. У нас нет ни ящиков с лутом по тирам, ни «редкости» предмета — тиры придётся задавать вручную |
| **баланс вики против баланса ремейка** | вики: камень 10 дерева / 5 руды; ремейк: 50 / 35. Берём **ремейк** (п. 1.1) — под него и под «7–10 ударов» подобраны все числа |
| **огнестрел: урон/отдача/спрей** | в базе ремейка только магазин, тип патрона, ADS-зум, прочность, reach. Остальное — серверные данные; ищем в коде (п. 5.2 п. 5) |
**Как перепроверять:** страница предмета `wiki.facepunch.com/rust/item/<id>` даёт блоки
**Craft** (рецепт, требование верстака, «Craft Time by Workbench»), **Research** (цена
@@ -558,6 +617,55 @@ inside door frames.»* 🟡
Состояние страницы на дату — через `~history` / `~diff:<revision>`; для эпохи до
03.12.2020 — через MediaWiki API fandom с `rvstart`/`rvdir=older`; резерв — Wayback.
### 1.10 Мусорка (Roadside Junk Pile) — первый источник скрапа
**Что это.** Небольшой макро-монумент на дороге: брошенная машина / куча мусора.
В Rust это «Roadside Junk Pile»: спавнится **только на дороге**, внутри **1–4 бочки**
и изредка один ящик еды, обновляется примерно раз в 20 минут. 🟡
У нас — своя версия: **2–4 бочки + 0–2 ящика еды**.
**Состав и лут:**
| бочка | что даёт | примечание |
|---|---|---|
| **серая** | скрап **1–15** + один случайный предмет-мусор | мусор логичный: дорожные знаки, ящики, пустая банка, рваная одежда, гитара, бочка для воды |
| **синяя** | один случайный **компонент**: электропредохранитель, шестерни, металлическая труба, металлическая пружина, дорожные знаки, лист металла, **корпус полу-автомата** | корпуса SMG и винтовки **не выпадают** (как в оригинале: только из «технических» ящиков) |
| **красная** | **сырая нефть 10–20** + **топливо низкого качества 5–15** | топливная бочка |
**Ящики с едой** (1–2 слота): еда (фрукты, ягоды, консервы, шоколад, картошка) и вода —
вода необязательна, второй слот может быть тоже едой.
**Как это работает у нас:**
- бочки **разрушаемые** (HP 35 обычная / 50 топливная) — при разрушении выпадает лут;
- ящики с едой — обычный контейнер, его обыскивают;
- когда всё опустошено, мусорка **пропадает через 60–180 с** (случайно) и
**появляется на другом участке дороги**, preferably рядом с игроками (но не на глазах);
- сервер сам решает точки спавна по сегментам дороги (п. 1.11).
✅ О (официальные вики-страницы контейнеров: yellow barrel, blue barrel, oil barrel,
tech parts 1, food box) + 🟡 (roadside junk pile — community-вики) + С (наши решения:
3–4 бочки, время жизни, выбор точки).
**Модели и звуки — из ремейка**: `nextgen/models/barrel_blue`, `barrel_red`,
`barrel_white`, `crate`, `foodcrate`, `dieselbarrelloot`, `primitivecrate`,
`lockcrate`, `medicalcrate`; звуки бочки/ящика — из `sounds.csv`.
### 1.11 Дороги
**Сеть дорог** — сетка из 3–4 пересекающихся дорог через остров **плюс кольцо**
вдоль берега. Ширина — 6–8 блоков, покрытие — свой блок «асфальт» (новый id
в общем словаре блоков).
**Генерация:** дорога выравнивает рельеф (по своей линии, со скруглением на поворотах)
и кладёт покрытие; пересечения сливаются в площади. Кольцо идёт по берегу, вдоль
линии прилива.
**Точки спавна мусорки** (п. 1.10) — дискретные **сегменты** дороги: сервер держит
список точек вдоль всех дорог, из них выбирает свободную ближе к игрокам.
**Слой дорог — часть генератора мира** (Шаг D), но нужен раньше мусорки, поэтому
генерацию дорог тянем в Шаг C.
## 2. Решения по проекту
### 2.1 Кто такой админ
@@ -590,35 +698,57 @@ ROLE_ELDER / ROLE_CREATOR`).
### 2.4 Предметы
- Все предметы игрока — **кастомные, через наш код и наше API** (не ванильные `ItemStack`).
- У предмета: **прочность**, **урон**, **значение bench**, **знание по умолчанию**.
- У предмета: **прочность**, **урон**, **значение bench**, **знание по умолчанию**,
**цена исследования**, **ветка тех-дерева**, **тег `admin`**.
- `bench` — **минимальный уровень верстака**, на котором рецепт доступен
(0 = крафтится без верстака, 1/2/3 = нужен верстак этого уровня или выше).
Это **гейт крафта, а не знания** — в Rust это разные вещи.
- `knownByDefault` — рецепт открыт с начала игры: **не исследуется, скрап не нужен**
(по вики такую пометку имеют 97 предметов из 380 с указанным уровнем верстака).
- `researchScrap` — цена физического чертежа на столе (0 = не исследуется).
- `techTreeBench` + `techTreeScrap` + `techTreeParent` — верстак, цена узла и
**предок** в тех-дереве (0 = предка нет, узел — корень ветки).
- `admin` — **тег блока/предмета**: без тега может всё, с тегом — только админы
сервера; **креатив прав не даёт** (п. 2.2).
- Знание рецепта — **состояние игрока** (`knownRecipes`), а не свойство предмета.
- У предмета есть **класс инструмента** (NONE / PICKAXE / AXE / SWORD / …) и
**класс ресурса**, который он добывает.
- Все числа берём из п. 1.6–1.7 (срез 06.11.2025), ничего не выдумываем.
- Все числа берём из п. 1.6–1.7, **источник — база ремейка**
(`rsx-protocol/src/main/resources/items/items.csv`, 218 предметов), ничего не
выдумываем.
### 2.5 Крафт
- Как в Rust (срез 06.11.2025): **верстаки трёх уровней** (разворачиваемый предмет,
надо стоять рядом) и **чертежи** (стол исследований: нужен найденный предмет + скрап;
получается физический чертёж, который изучается и открывает рецепт).
- **Тех-дерево верстака и эксперимент на верстаке не делаем** — это оверхед (п. 1).
- Как в Rust (после 2020): **верстаки трёх уровней** (разворачиваемый предмет,
надо стоять рядом) и **два пути исследования** (п. 1.3):
- **стол**: нужен найденный предмет + скрап → получается **физический чертёж**,
который изучается и открывает рецепт;
- **тех-дерево верстака**: платишь скрап и открываешь узел, рецепт становится
доступен; разблокировка личная, чертёж не выдаётся.
- **Эксперимент на верстаке** (75 / 300 / 1000 скрапа → случайный чертёж) — механика
2017–2020, **не реализуем**.
- Знание рецепта — **состояние игрока**, а не свойство предмета.
- Время крафта, множитель от уровня верстака, стоимость скрапа — как в Rust.
- Время крафта, множитель от уровня верстака, цены скрапа — как в Rust.
- То, что игрок получает **на старте**, не исследуется вообще.
### 2.6 Структуры вместо блоков мира
Руда, деревья и камни — **не блоки мира, а разрушаемые объекты** (как узлы в Rust):
у них есть прочность, они бьются инструментом и дают дроп. Мир меняют только админы.
у них есть **HP**, **запас ресурса** и **метка** («крестик» на дереве, «горячая точка»
на руде), они бьются инструментом и дают дроп. Последний удар отдаёт остаток запаса.
Мир меняют только админы.
- **Руда** — своя 3D-модель (в ремейке есть `ore/stone`, `ore/metal`, `ore/sulfur`)
+ свой AABB; **деревья** — пока обычные блоки мира, у которых сервер держит
HP и запас узла.
- **Мусорка** (п. 1.10) — тоже структура: бочки и ящики, у неё есть состояние
(что опустошено) и таймер исчезновения.
### 2.7 Текстуры
- Текстуры предметов пока **временные**, взяты из ремейка как заглушки.
- Текстуры предметов пока **временные**, взяты из ремейка как заглушки:
иконки — из атласа `assets/rustex/gamejar/assets/rustex/icons/atlas.png`
(MTSDF, 2048×2048, тайлы 64×64) по именам `rusticon` из базы предметов.
- **Пометка: заменить на свои** (см. п. 6).
---
@@ -677,18 +807,25 @@ ROLE_ELDER / ROLE_CREATOR`).
### Шаг A. Фундамент предметов и инвентаря (следующий)
- [x] **База предметов выгружена из ремейка**: `rsx-protocol/src/main/resources/items/items.csv`
(218 предметов) + `sounds.csv` (505 событий) + описания в
`assets/rustex/data/item-texts.json`. Инструменты: `tools/extract-rustex-assets.py`,
`tools/extract-items.py`, `tools/extract-sounds.py`.
- [ ] `ItemType`: id, имя, класс инструмента, класс ресурса, прочность, урон по частям тела,
скорость сбора, `bench`, `knownByDefault`, рецепт.
- [ ] **Данные предметов — из п. 1.6/1.7** (срез 06.11.2025): держать отдельным
ресурсом/таблицей, чтобы числа не расходились с планом.
скорость сбора, `bench`, `knownByDefault`, `researchScrap`, `techTreeBench`,
`techTreeScrap`, `techTreeParent`, `admin`, рецепт.
- [ ] **Данные предметов — из п. 1.6/1.7** (база ремейка): держать таблицей, чтобы
числа не расходились с планом.
- [ ] Модель знания: `knownByDefault` у типа + `knownRecipes` у игрока; стол исследований
выдаёт физический чертёж, изучение открывает рецепт навсегда (п. 1.3).
выдаёт физический чертёж, изучение открывает рецепт навсегда (п. 1.3);
тех-дерево открывает рецепт лично и бесплатно после оплаты скрапа.
- [ ] `ItemStack`: тип + количество + прочность + `ItemData` (свой ключ→значение).
- [ ] `Inventory`: слоты, хотбар, что в руках. **Сервер — источник истины.**
- [ ] Реестр предметов + протокол `Inventory` / `InventorySlot`.
- [ ] Клиент: свой реестр + свои текстуры + свой рендер предмета в руке и в слоте
(наши предметы не ванильные `IItem`).
- [ ] **Текстуры предметов — временные** (взяты из ремейка как заглушки).
- [ ] **Текстуры предметов — временные** (взяты из ремейка как заглушки, иконки из
атласа `icons/atlas.png`).
**ПОМЕТКА: заменить на свои.**
- [ ] Стартовый набор: **камень** — решение проекта (в Rust официально не документировано,
п. 1.1); выдаём в первый слот хотбара, отдельным флагом конфига.
@@ -715,19 +852,32 @@ ROLE_ELDER / ROLE_CREATOR`).
игроку не ломается ни в выживании, ни в креативе; у остальных — ломается инструментом
того класса, который нужен.
### Шаг C. Структуры, узлы, постройка
### Шаг C. Узлы, мусорка, дороги, крафт и постройка
- [ ] `StructureTemplate` (блоки + AABB + меш + HP + дроп), `StructureInstance`,
`StructureWorld`. Деревья/камни/руда — **узлы**, не блоки мира.
- [ ] Сбор: попадание инструментом → урон по классу ресурса → разрушение → дроп.
Узлы: камень 750 Stones, металл 500 Metal Ore, сера 200 Sulfur Ore; добыча за удар
и потеря прочности — п. 1.6.
- [ ] `ResourceNode`: класс ресурса, **HP = запас**, **метка** (дерево ×1→×2, руда
×1→×3), дроп. Запасы: дерево 500/750/1000, камень 750, металл 500, сера 200;
урон за удар — п. 1.6; последний удар отдаёт остаток.
- [ ] Сбор: попадание инструментом → урон по классу ресурса × метка → разрушение → дроп.
- [ ] **Дороги** (п. 1.11): сетка 3–4 полос + кольцо, выравнивание рельефа, покрытие,
список сегментов для спавна.
- [ ] **Мусорка** (п. 1.10): 2–4 бочки (серая/синяя/красная) + 0–2 ящика еды; лут-таблицы;
разрушаемые бочки; после опустошения исчезновение через 60–180 с и респавн
на другом участке дороги ближе к игрокам.
- [ ] **Крафт и исследование** (п. 1.3): `CraftingStation` (поставленный верстак),
проверка рецепта (уровень верстака + знание + ингредиенты), `ResearchTable`
(предмет + скрап → 10 с → **чертёж**), разблокировка в тех-дереве.
- [ ] Постройка: игрок ставит **наши** кастомные предметы-конструкции (не блоки мира).
Снаппинг и сокеты — п. 1.5 и 1.8; HP и цены по уровням — п. 1.5;
аптейп инструментального шкафа и гниение — п. 1.5.
- [ ] Растительность и руда в генерации — через шаблоны структур.
- [ ] Модель урона по постройкам — **решить до реализации** (п. 5): без множителя
«оружие → уровень постройки» рейд не считается.
- [ ] Модель урона по постройкам — **своя**: ударов = HP постройки ÷ урон оружия (п. 5.1).
- [ ] Клиент: модель рудного узла (3D + AABB), метки (крестик / горячая точка).
Критерий готовности: игрок рубит дерево (7 ударов по метке, 9 без), ломает узел камня
за 9 ударов каменной киркой, разбирает мусорку и получает скрап, крафтит верстак 1,
исследует предмет на столе и получает чертёж, строит стену.
### Шаг D. Мир один раз, конфиг, барьер
@@ -761,22 +911,33 @@ ROLE_ELDER / ROLE_CREATOR`).
|---|---|
| **Роли: из лаунчера или свои на сервере?** | **Свои на сервере.** Лаунчер может подсказать роль, но решение — за сервером: админ это свойство конкретного сервера, а не проекта |
| **Урон по частям тела** | По таблице п. 1.6: голова ×2, торс ×1, руки/ноги — своей долей у оружия. Общего «общего урона» не вводим |
| **Множитель урона по постройкам** | **Своя модель: ударов = HP постройки ÷ урон оружия.** Без скрытого множителя. Лоза (10 HP) от камня (10 урона) — 1 удар, дерево (250) — 25, камень (500) — 50, лист (1000) — 100, броня (2000) — 200. Зеркальные 37/74/295/589 — не воспроизводим, но и не мешают: считаем от HP |
| **Множитель урона по постройкам** | **Своя модель: ударов = HP постройки ÷ урон оружия.** Без скрытого множителя. Дерево (250) от камня (10 урона) — 25, камень (500) — 50, лист (1000) — 100, броня (2000) — 200. Зеркальные 37/74/295/589 — не воспроизводим, но и не мешают: считаем от HP |
| **Бронедверь** | **1000 HP** (игровые зеркала; fandom 800 — устарело) |
| **Прочность инструментов** | **Шкала 0…100**, ремонт = 20 % рецепта (как в Rust, выведено из цены ремонта) |
| **Джунгли и биомы** | **Не делаем.** Мир один, без джунглевого лута (джунгли в игре появились 01.05.2025, за пределами нашего среза) |
| **Прочность инструментов** | **Из базы ремейка**: камень 100, каменные 160, топор 300, молот 400, ледяная кирка 1500. Ремонт = 20 % рецепта |
| **Джунгли, лоза, биомы** | **Не делаем.** Мир один, джунглей нет → **лозы (twig) у нас тоже нет**: выкинута из HP-таблицы, цен, таймеров гниения и правил шкафа |
| **Строительные детали и сетка** | Не «свободно и без сетки»: **сетка мира не важна**, но есть **строительная сетка** (фундамент 3×3) и привязка внутренних блоков к уже поставленным строительным. Слова «не привязываясь к сетке мира» — про сетку мира, не про строительную |
| **Исследования** | **Версия после 2020**: два пути — стол (предмет + скрап → чертёж) и тех-дерево верстака (125/250/500, ветки с предками, разблокировка личная) |
| **Тех-дерево** | **Делаем**, с ветками и предками (не плоский список) |
| **Баланс предметов** | **Из ремейка** (`items.csv`, 218 шт), а не из вики: у нас есть все характеристики, и цифры совпадают с ощущением «7–10 ударов на дерево». Вика — только для сверки |
| **Скрап на первом срезе** | Даёт **мусорка на дороге** (серая бочка, 1–15 скрапа) — лутбоксы отложены, а прогрессия исследования скрап закрывать должна уже сейчас |
| **Дороги** | **Сетка 3–4 полос + кольцо** по берегу; сегменты дороги — точки спавна мусорки |
| **Вид узлов** | **Руда** — своя 3D-модель + AABB (модели `ore/*` из ремейка); **деревья** — пока блоки мира, у которых сервер держит HP и запас |
| **Ассеты** | Временная база из ремейка: `assets/rustex/` (1.65 ГБ), иконки из атласа, звуки из реестра. **ПОМЕТКА: заменить на свои** |
### 5.2 Нужно решение (блокирует реализацию)
1. **Крафт упирается в лутбоксы.** По п. 1.4 скрап падает **только** из ящиков, бочек, аирдропов и учёных, а чертёж требует **найденного** предмета. То есть без лутбоксов нельзя ни изучить рецепт, ни потратить скрап: прогрессия крафта не запускается.
Варианты:
- **(а)** перенести лутбоксы вперёд (они нужны раньше крафта);
- **(б)** первый срез без прогрессии: все рецепты «по умолчанию» (`knownByDefault`), стол исследований и скрап — позже, вместе с лутбоксами;
- **(в)** свой источник скрапа (например, из узлов) — но это уже не Rust.
2. **Фрагменты чертежей для верстаков 2 и 3** (5 Basic / 5 Advanced) — они тоже из лутбоксов. Повторяем или заменяем скрапом, как до 02.10.2025? Пока лутбоксов нет — вопрос отложен.
3. **Скрап как валюта** — если исследование только для найденных вещей, скрап нужен редко. Оставляем ли его в прогрессии вообще?
4. **Стоимость и время каждого рецепта**, который будем реализовывать — в п. 1.7 есть только по ключевым. Долить по мере надобности.
1. ~~**Крафт упирается в лутбоксы.**~~ **Снято:** источник скрапа на первом срезе —
**мусорка на дороге** (п. 1.10). Лутбоксы (монументы) остаются на потом.
2. **Фрагменты чертежей для верстаков 2 и 3** (5 Basic / 5 Advanced) — они тоже из лутбоксов.
Повторяем или заменяем скрапом, как до 02.10.2025? Пока лутбоксов нет — вопрос отложен.
3. **Скрап как валюта** — цена стола 15–120, цена дерева 125–500. Скрапа с мусорки
(1–15 за бочку) хватает, но как быстро — решаем по факту.
4. **Стоимость и время каждого рецепта**, который будем реализовывать — в п. 1.7 есть только
по ключевым. Долить по мере надобности.
5. **Огнестрел: урон, отдача, спрей, темп** — в клиенте ремейка этих чисел нет (это
серверные данные в Rust-подобных играх), в базе предметов есть только магазин, тип
патрона, ADS-зум и прочность. Ищем таблицу по `rweaponid` в коде ремейка (1–21);
пока не нашли — берём с официальной вики как страховку.
---
@@ -810,27 +971,37 @@ rsx-client\scripts\run-game.ps1 # клиент
### 6.3 Что не сделано (по порядку)
1. **Шаг A** — предметы, инвентарь, реестр, протокол инвентаря, рендер предмета
в руке и в слоте, стартовый камень.
1. **Шаг A** — добить: клиентский рендер своих предметов (хотбар и рука) и иконки
из атласа; поля исследования в `ItemType`; `NodeType`; `TechTree`.
2. **Шаг B** — `Dig`/`BreakProgress` в протоколе, состояние ломания на сервере,
правила инструмента, тег `admin`, 4 клиентских патча.
3. **Шаг C** — структуры (узлы), сбор, постройка по сокетам.
3. **Шаг C** — узлы (дерево/камень/металл/сера) с метками, дороги, мусорка,
крафт и исследование (стол + тех-дерево), постройка по сокетам.
4. **Шаг D** — конфиг, мир 4000×4000 один раз, барьер.
5. **Шаг E** — транспорт на NIO.
6. **Шаг F** — DistantView.
7. **REA** — найти в коде ремейка таблицу оружия по `rweaponid` (урон, отдача, спрей,
темп) и шифр конфигов `.obj/.rrs/.nbt`; до этого — цифры с официальной вики.
### 6.4 Мелочи, которые легко упустить
- **Текстуры предметов — временные** (взяты из ремейка как заглушки). **ПОМЕТКА:
заменить на свои.** Ассеты ремейка обфусцированы: каждый файл **XOR-ится одним
байтом**, ключ = `файл[0] ^ 0x89` (у `rock.png` это 0x20). Декод:
`key = b[0] ^ 0x89; for (i) b[i] ^= key;`
- **Ассеты ремейка обфусцированы:** каждый файл **XOR-ится одним байтом**, ключ
восстанавливается по сигнатуре формата: PNG — `b[0] ^ 0x89`, OGG — `b[0] ^ 0x4F`,
JSON — `b[0] ^ 0x7B`. Уже декодировано: `assets/rustex/` (1.65 ГБ, 19 тыс. файлов).
Скрипты: `tools/extract-rustex-assets.py`, `tools/extract-items.py`,
`tools/extract-sounds.py`. **Осталось непрочитанным:** 553 `.obj`, 106 `.rrs`,
113 `.nbt` — у них не однобайтовый шифр, нужен разбор кода.
- **Текстуры предметов — временные** (взяты из ремейка как заглушки, иконки из
`assets/rustex/gamejar/assets/rustex/icons/atlas.png`). **ПОМЕТКА: заменить на свои.**
- **База предметов** — `rsx-protocol/src/main/resources/items/items.csv` (218 шт,
из `models/stacks.json`), описания — `assets/rustex/data/item-texts.json` (543 шт),
звуки — `rsx-protocol/src/main/resources/items/sounds.csv` (505 событий).
- Пути: `G:\RustNotMC` (репозиторий), `G:\decompiled-rustex` (референс, только читать),
`G:\rustexremake` (исходники ремейка с ассетами).
`G:\rustexremake` (ремейк: `gamefiles\res`, `gamefiles\game.jar`, `working_dir`).
- ⚠️ **`G:\decompiled-rustex` — НЕ источник фактов.** Он копиял community-вику 2017–2020
(отсюда шкала скрапа 20/75/125/500, «урон по постройкам» 9/0.2/0.1, списки верстаков
с перемешанными уровнями). Проверять числа по официальной вики Facepunch и по истории
её правок (рецепт запроса — в шапке раздела 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"`.
@@ -840,14 +1011,16 @@ rsx-client\scripts\run-game.ps1 # клиент
### 6.5 Дописать в этот файл
- [x] Полные таблицы предмет→верстак (п. 1.2, 1.7) и предмет→скрап/чертёж (п. 1.3, 1.7).
- [x] Таблица сбора по классам ресурсов (п. 1.6).
- [x] Таблица сбора по классам ресурсов (п. 1.6) — **из базы ремейка**.
- [x] Список строительных объектов с сокетами (п. 1.8) — пересобран по игровым данным.
- [ ] Что решили по ролям: из лаунчера или свои на сервере (вопрос в п. 5).
- [x] Мусорка (п. 1.10) и дороги (п. 1.11).
- [x] Что решили по ролям: свои на сервере (п. 2.1, 5.1).
- [ ] Стоимость и время каждого рецепта, который будем реализовывать (пока есть по
ключевым предметам, п. 1.7).
- [ ] Завести в репозитории выгрузку данных оригинала **на дату 06.11.2025**
(страницы вики + история правок), чтобы цифры не разъезжались при перечитывании.
- [ ] Решить модель урона по постройкам (п. 5, п. 1.11) — без неё рейд не считается.
- [ ] Таблица оружия по `rweaponid` из кода ремейка (REA) — урон, отдача, спрей, темп.
- [ ] Модель урона по постройкам — своя: ударов = HP ÷ урон оружия (п. 5.1).
---
@@ -939,3 +1112,26 @@ rsx-client\scripts\run-game.ps1 # клиент
датированной вики нет (на странице в 2017 г. стоял текст «has X health»).
19. **Взрыв у Heavy Plate** (8/12/12 % против 17/17/17 % против 100 %) — не подтверждён.
### П.3 Правки 21.10.2026 (база из ремейка)
Что поменялось после того, как выгрузили ассеты и базу предметов ремейка.
| было в плане | как на самом деле | метка |
|---|---|---|
| Сбор по вики: камень 10 дерева / 5 руды, топор 30, кирка 30; узлы 750/500/200 | **База ремейка**: камень 50 дерева / 35 руды, каменный топор 80, топор 85, каменная кирка 80, кирка 100. Удары: дерево 750 ÷ 85 = **9** (с меткой ≈ 6–7) — ровно «7–10 ударов», которые и ждал игрок | ✅ |
| «Тех-дерево не делаем, оно бесплатно с 06.11.2025, колонка 125/250/500 устарела» | **Официальная вики показывает обе цены**: «Research Table» (15/30/60/120) и «Workbench Level N – Tech Tree» (125/250/500). Это community-вика была неправа | ✅ |
| Исследование только через стол | **Два пути**: стол (нужен сам предмет → чертёж) и тех-дерево (только скрап, личная разблокировка) | ✅ |
| В мире есть лоза (twig): HP 10, цены, гниение 1 ч, «лозовые полы» | **Лозы у нас нет** — она из джунглей, а джунглей нет. Выкинута отовсюду | ✅ |
| Скрап только из лутбоксов; прогрессия не запускается | **Мусорка на дороге** даёт скрап (серая бочка, 1–15), компоненты (синяя) и топливо (красная) | С |
| Узлы-руда — как в Rust | Руда — **3D-модель + AABB** (модели `ore/*` из ремейка), деревья — пока блоки мира с серверным HP | С |
| Дорог в мире нет | **Сетка 3–4 дорог + кольцо** по берегу; сегменты дороги — точки спавна мусорки | С |
**Что выгружено из ремейка** (инструменты в `tools/`, результат в `assets/rustex/`):
1.65 ГБ, 19 тыс. файлов. Ассеты зашифрованы одним байтом (ключ по сигнатуре формата),
декод делает `extract-rustex-assets.py`. Не прочитались 553 `.obj`, 106 `.rrs`, 113 `.nbt` —
у них другой шифр, нужен разбор кода (REA).
**Что теперь не подтверждено:** урон/отдача/спрей/темп огнестрела — в клиенте ремейка
этих чисел нет (серверные данные), есть только магазин, тип патрона, ADS-зум, прочность,
reach и `rweaponid` (1–21). Ищем таблицу в коде; до этого — цифры с официальной вики.