Урон по частям тела.

Версия Minecraft
1.7.10
Стало мне интересно, как на некоторых серверах по minecraft сделан урон по частям тела, то есть есть у вас лук стреляешь в голову наноситься 2x урона, в ногу или руку наносится 30% урона и т.д, если есть у кого идеи скажите как. Заранее спасибо)
P.S.По форуму искал, но не нашёл, если уже кто-то задавал такой вопрос то жду в коментах "Плохо искал" :)
 
2,932
44
598
Ну у меня есть одна идея (по крайне мере я бы именно так сделал): Создаём снаружи игрока разные сущности которые будут копией оригинальных частей тела только в чуть увеличенном состояний (Что бы из тела игрока выпирал хитбокс). Дальше при попаданий в сущность наносился урон игроку которому принадлежит эта часть тела!

(Этот вариант не самый эффективный и он очень лагуч, но это первое что в голову пришло)
 

Icosider

Kotliner
Администратор
3,600
99
663
Просто и без боли не получится, так как у игрока да и у всех сущностей один хитбокс. С 1.8 это наглядно можно увидеть нажав f3+b(вроде такое сочетание). Тебе придется делать свои хитбоксы на каждую часть тела и по ним "давать" урон.
 
477
7
51
Стало мне интересно, как на некоторых серверах по minecraft сделан урон по частям тела, то есть есть у вас лук стреляешь в голову наноситься 2x урона, в ногу или руку наносится 30% урона и т.д, если есть у кого идеи скажите как. Заранее спасибо)
P.S.По форуму искал, но не нашёл, если уже кто-то задавал такой вопрос то жду в коментах "Плохо искал" :)
есть мод в интернете н 2х урон в голову от лука ищи я вот видел недавно
 
1,057
50
234
Там поди, как-нибудь, костыльно высчитывается высота стрелы от блока и если совпадает с высотой глаз игрока - х2 урон =D
 

Icosider

Kotliner
Администратор
3,600
99
663
Угадал xd

Зашифрованный говнокод:
Java:
@SubscribeEvent
   public void onHit(LivingHurtEvent e) {
      if(!(e.entity instanceof EntityPlayer)) {
         if(e.source.func_76352_a()) {
            Entity en = e.source.func_76364_f();
            if((e.entity instanceof EntityLiving && en instanceof IProjectile || Headshots.EntityBullet.isInstance(en)) && e.entity.field_70163_u + (double)e.entity.func_70047_e() - 0.4000000059604645D < en.field_70163_u && en.field_70163_u < e.entity.field_70163_u + (double)e.entity.func_70047_e() + 0.4000000059604645D && !this.isBadEntity(e.entity)) {
               System.out.println("DEBUG " + e.entity.toString());
               e.ammount *= 5.0F;
               ((EntityLiving)e.entityLiving).func_94058_c("HEADSHOT!");
               ((EntityLiving)e.entityLiving).func_94061_f(true);
            }
         }

      }
   }
 
7,099
324
1,509
Можно совместить эту идею и хитбоксы, получив красивое и эффективное решение: кастомные хитбоксы, которые юзаются только во время ударов
 
7,099
324
1,509
Ты деградировать начал, после общения с максиком.

Костыли...
Это решение лучше, чем твое, по производительности
Тебе придется делать свои хитбоксы на каждую часть тела и по ним "давать" урон.


Переписать систему хитбоксов ._.
Но тут сразу будет трабла - а именно с сервер/клиентской частью
Возможно Mixin поможет
Зачем трогать ванильные хитбоксы, которые нормально выполняют свою функцию?
 
7,099
324
1,509
хитбоксЫ ? У ентини всего лишь один жирный и большой хитбокс
Верно. Потому что форма большинства энтити хорошо вписывается в параллелепипед.
И это позволяет довольно хорошо обрабатывать столкновения с блоками, другими сущностями...
Другой случай у дракона: он стоит из множества частей, с множеством хитбоксов, т.к. его форма далека от параллелепипеда(но может быть выражена через их множество).
Это я к тому, что ванильные хитбоксы не предназначены для определения, куда же там Петя ткнул Васю, это другая задача.
 
Сверху