Логика простая. В ваших хитах создается динамический массив с "пакетами" которые вам нужно самим заполнить. При помощи цикла перебора всех ентити мы заносим нужных в массив, дальше записываем по определенному адресу эту структуру и игра сама их отправляет на сервер.
На счет того что персонаж сам себя режет могу сказать что из-за "прострела" когда игрок отправляет один валидный пакет удара ножом по себе что делает все последующие пакеты "валидными" для сервера. Получается, что вы сами себе отправляете пакет удара ножом, далее ударяете ножом противника. Исправить это можно просто и быстро сделав нужные проверки в коде перед занесением в массив пакета.