Броня в семи местах и три зоны урона

- В реестр заведены 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:
sasheg dev
2026-10-21 22:43:52 +03:00
parent 9980c1561d
commit 7505ddd84e
18 changed files with 1188 additions and 262 deletions
@@ -317,6 +317,22 @@ public final class ItemTest {
Packets.LearnBlueprint.read(new Buf(learn.write().toByteArray()));
eq("the blueprint survives", Integer.valueOf(ItemRegistry.PICKAXE),
Integer.valueOf(learnBack.item));
Packets.Attack attack = new Packets.Attack(7, 1.5F, 2.5F, 3.5F,
Packets.Attack.HAND_MAIN);
Packets.Attack attackBack =
Packets.Attack.read(new Buf(attack.write().toByteArray()));
eq("the target survives", Integer.valueOf(7), Integer.valueOf(attackBack.target));
near("the place of the hit survives", 2.5, attackBack.y);
eq("the hand survives", Integer.valueOf(Packets.Attack.HAND_MAIN),
Integer.valueOf(attackBack.hand));
}
private static void near(Object what, double expected, double actual) {
if (Math.abs(expected - actual) > 0.0001D) {
failed++;
failures.add(what + ": expected " + expected + " but got " + actual);
}
}
private static void run(String name, Runnable body) {
@@ -551,6 +551,8 @@ public final class ProtocolTest {
Packets.KNOWN_RECIPES, Packets.TECH_TREE_STATE,
Packets.CONTAINER_OPEN, Packets.CONTAINER_TAKE,
Packets.LEARN_BLUEPRINT,
Packets.HITBOXES, Packets.HITBOX_INSTANCES, Packets.HITBOXES_RELOAD,
Packets.ATTACK,
Packets.DISCONNECT,
};
for (int i = 0; i < ids.length; i++) {