Броня в семи местах и три зоны урона
- В реестр заведены 46 предметов одежды ремейка: слот, слой, какие части тела закрывает и сколько снимает из каждого вида вреда. Данные выгружены в items.csv (extract-items.py), в коде у каждого предмета armor(...). - Семь мест: голова, лицо, грудь (2 слоя), ноги (2 слоя), руки, стопы, полный костюм. Пояс не делали - в ремейке его нет, есть только быстрая панель. - Inventory сервера: семь мест по два слоя, вещи надеваются и снимаются. - Damage: зона урона по точке попадания (голова верхние 0.4, ноги нижние 0.4), множители голова 2, тело 1, ноги 0.75; одежда снимает вред только там, где закрывает. - Пакет Attack (цель, точка попадания, рука) и клиентский патч, который его шлёт. У игрока появилась жизнь. - В items.csv добавлены колонки armor_slot, armor_layer, armor_zones. Тесты: протокол 24 + 10, сервер 85. Форк собирается чисто, 3279 классов.
This commit is contained in:
@@ -759,23 +759,65 @@ ROLE_ELDER / ROLE_CREATOR`).
|
||||
EntityPlayerSP` (в `src-overlay`), рядом `RsxMovementInput extends
|
||||
MovementInputFromOptions` и `RsxPlayerTuning` с числами.
|
||||
|
||||
| что | ванильно | у нас |
|
||||
|---|---|---|
|
||||
| скорость подкрадывания | ~1.30 блока/с (множитель 0.3) | **1.5 блока/с** (множитель 0.34746) |
|
||||
| высота прыжка | 1.25 блока (импульс 0.42) | **1.35 блока** (импульс 0.43713) |
|
||||
| что | ванильно | у нас | как считается |
|
||||
|---|---|---|---|
|
||||
| скорость подкрадывания | ~1.30 блока/с (множитель 0.3) | **1.5 блока/с** | множитель 0.34746; ванильный 0.3 отменяется, ставится наш (×1.158) |
|
||||
| высота прыжка с места | 1.25 блока (импульс 0.42) | **1.5 блока** (0.46341) | высота в конфиге класса игрока, импульс обратным счётом по физике |
|
||||
| высота прыжка в движении | 1.25 блока | **1.25 блока** (ванильная) | ходьба и бег не меняются, спринт-толчок ванильный |
|
||||
| высота при подкрадывании | 1.65 блока | **1.45 блока** | проходит в щель 1.5 блока |
|
||||
| высота глаз в подкрадывании | 1.54 | **1.37** | иначе глаза выше головы |
|
||||
|
||||
- Скорость прыжка считается по высоте: `v = 0.42 · √(h / 1.25)`.
|
||||
- Подкрадывание: ванильный множитель 0.3 отменяется и ставится наш.
|
||||
- **Правило пользователя:** если задать значение меньше, оно не принимается —
|
||||
подкрадывание остаётся 1.5 блока/с, прыжок 1.5 блока. Значения по умолчанию
|
||||
(1.5 и 1.35) через это правило не проходят.
|
||||
- Переопределяется из командной строки: `-Drsx.sneakSpeed=1.6 -Drsx.jumpHeight=1.4`.
|
||||
- Скорость прыжка считается обратным счётом по физике ваниллы (гравитация 0.08,
|
||||
сопротивление 0.98): формула `v = 0.42·√(h/1.25)` давала 1.48 вместо 1.5.
|
||||
- Значения живут в `RsxPlayerTuning` — это и есть «конфиг игрока»: переписали код
|
||||
игрока — поменяли числа. Переопределение из командной строки:
|
||||
`-Drsx.sneakSpeed=`, `-Drsx.jumpHeight=`, `-Drsx.jumpHeightStanding=`,
|
||||
`-Drsx.crouchHeight=`.
|
||||
- Мобы прыгают как в ванилле: переопределение живёт в `RsxPlayer`, а не в
|
||||
`EntityLivingBase`.
|
||||
- Патчи в ванильное дерево — три строки (`PlayerControllerMP` создаёт
|
||||
`RsxPlayer`, `Minecraft` создаёт `RsxMovementInput`), вся логика — в нашем коде.
|
||||
- Патчи в ванильное дерево — три строки: `PlayerControllerMP` создаёт `RsxPlayer`,
|
||||
`Minecraft` создаёт `RsxMovementInput`, `EntityPlayer.updateSize` берёт высоту
|
||||
подкрадывания из нашего класса. Вся логика — в нашем коде.
|
||||
|
||||
### 2.9 Декомпил ремейка лежит на диске
|
||||
### 2.9 Броня: семь мест и три зоны урона
|
||||
|
||||
**Семь мест**, как в базе ремейка (без пояса):
|
||||
|
||||
| слот | слои | предметы ремейка |
|
||||
|---|---|---|
|
||||
| голова | 1 | `helmet` (13) |
|
||||
| лицо | 1 | `hat` — повязка (1) |
|
||||
| грудь | 2 | `plate` (одежда, 9) + `jacket` (броня, 6) |
|
||||
| ноги | 2 | `pants` (одежда, 6) + `kilt` (броня, 2) |
|
||||
| руки | 1 | `gloves` (5) |
|
||||
| стопы | 1 | `boots` (3) |
|
||||
| полный костюм | 1 | `suit` (1) — хазмат, заменяет остальные |
|
||||
|
||||
- Данные 46 предметов одежды выгружены в `items.csv` (слот, слой, какие части
|
||||
тела закрывает, сколько снимает из каждого вида вреда) и заведены в реестр.
|
||||
- **Три зоны урона**: голова (верхние 0.4 высоты) **×2** (так в Rust), тело **×1**,
|
||||
ноги (нижние 0.4) **×0.75** (наше правило; в Rust не документировано).
|
||||
- Одежда снимает вред **только там, где закрывает**: маска не спасает от удара
|
||||
в грудь.
|
||||
- Удар приходит пакетом `Attack` (цель, точка попадания, рука) — в ванильном
|
||||
`CPacketUseEntity` точка есть, в нашем протоколе добавили.
|
||||
|
||||
### 2.10 AABB: редактор хитбоксов
|
||||
|
||||
- **Данные** (`rsx-protocol`): `Hitbox` (имя, зона, min/max, поворот) и наборы по
|
||||
моделям; пакеты `Hitboxes` (определения), `HitboxInstances` (где стоят модели),
|
||||
`HitboxesReload` (клиент просит перечитать файл).
|
||||
- **Сервер**: `HitboxRegistry` читает JSON (по умолчанию `world/hitboxes.json`,
|
||||
можно указать `--hitboxes`), перечитывает по запросу и шлёт наборы игрокам.
|
||||
Сломанный файл не стирает рабочие коробки, а объясняет причину.
|
||||
- **Клиент**: `RsxHitboxDebug` рисует коробки через `RenderGlobal.drawBoundingBox`
|
||||
с подписями `DebugRenderer`, красит зоны (голова красная, тело жёлтое, ноги
|
||||
синие). Команды: `/rsx hitboxes on|off|reload|list|show NAME`.
|
||||
- **API**: `rsx-plugin-api` (новый модуль) — интерфейс `Hitboxes`: плагин
|
||||
регистрирует свои коробки.
|
||||
- Область: наши структуры (узлы, мусорка, постройки) и игроки с зонами.
|
||||
|
||||
### 2.11 Декомпил ремейка лежит на диске
|
||||
|
||||
`G:\src-decoded` (5207 файлов, строки расшифрованы), также `G:\src`,
|
||||
`G:\builds\v31\src{,-decoded}` и `G:\decompiled-rustex`. Это **исходники клиента
|
||||
@@ -1013,12 +1055,15 @@ rsx-client\scripts\run-game.ps1 # клиент
|
||||
ремейка (`ItemData`), `NodeType`, `TechTree`, 218 предметов в реестре.
|
||||
Не сделано: **клиентский рендер своих предметов** (хотбар и рука) и иконки из атласа.
|
||||
2. **Шаг B** — сделано: `Dig`/`BreakProgress` в протоколе, проверка досягаемости
|
||||
на сервере, тег `admin` в типах предметов. Не сделано: узлы в мире (шаг C),
|
||||
трещины на клиенте, 4 клиентских патча.
|
||||
3. **Шаг C** — сделано: `ResourceNode` (HP, запас, метка), `JunkPile` (бутылки,
|
||||
на сервере, тег `admin` в типах предметов, пакет `Attack` с точкой попадания,
|
||||
клиент шлёт удар (патч `PlayerControllerMP`). Не сделано: узлы в мире (шаг C),
|
||||
трещины на клиенте, серверный боевой код (жизнь, смерть, респавн).
|
||||
3. **Шаг C** — сделано: `ResourceNode` (HP, запас, метка), `JunkPile` (бочки,
|
||||
ящик с едой, таймер исчезновения), `RoadNetwork` + дороги в генераторе
|
||||
(сетка и кольцо, ровная по ширине). Не сделано: мусорка в мире (спавн и
|
||||
респавн у дороги), станции крафта (верстак в мире), постройка по сокетам.
|
||||
(сетка и кольцо, ровная по ширине), `Knowledge`, `Crafter`, `ResearchTable`,
|
||||
семь слотов брони с данными ремейка, три зоны урона, редактор хитбоксов.
|
||||
Не сделано: мусорка в мире (спавн и респавн у дороги), станции крафта (верстак
|
||||
в мире), постройка по сокетам, клиентский рендер брони.
|
||||
4. **Шаг D** — конфиг, мир 4000×4000 один раз, барьер.
|
||||
5. **Шаг E** — транспорт на NIO.
|
||||
6. **Шаг F** — DistantView.
|
||||
|
||||
Reference in New Issue
Block a user