Интересный вопрос - что убило игрока

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Неинформативное название или содержание темы
Все здравствуйте.
Я опять возвращаюсь к своему старому-старому вопросу, как определить кто (или что ) убил игрока?
Что-бы было понятнее - пример, в игрока стреляет противник-игрок, и в то-же время в него стреляет противник-ENT(в моём случае автоматическая пушка).
Игрок помер, и возникает вопрос, а конкретно кто(или что) произвел последний выстрел, которым и был убит игрок?
У меня этот вопрос давно вызывает кучу проблем, но вплотную я им заняться не мог, руки не доходили. У кого, какие есть мысли по этому поводу?
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Все здравствуйте.
Я опять возвращаюсь к своему старому-старому вопросу, как определить кто (или что ) убил игрока?
Что-бы было понятнее - пример, в игрока стреляет противник-игрок, и в то-же время в него стреляет противник-ENT(в моём случае автоматическая пушка).
Игрок помер, и возникает вопрос, а конкретно кто(или что) произвел последний выстрел, которым и был убит игрок?
У меня этот вопрос давно вызывает кучу проблем, но вплотную я им заняться не мог, руки не доходили. У кого, какие есть мысли по этому поводу?
В SDKHooks есть хук

// OnTakeDamage
function Action (int victim, int attacker, int inflictor, float damage, int damagetype);

в котором есть bits damagetype, которая определяет тип урона, можно по нему отследить, зная индекс ента турели, сопоставив данные и будет аттакующий, веть не может за тик (или как они там это считыют) что бы попало два дамага, от игрока и турели, поэтому что-то одно.
 

Вложения

  • 1604279417308.png
    1604279417308.png
    49.1 КБ · Просмотры: 33

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
В SDKHooks есть хук

// OnTakeDamage
function Action (int victim, int attacker, int inflictor, float damage, int damagetype);

в котором есть bits damagetype, которая определяет тип урона, можно по нему отследить, зная индекс ента турели, сопоставив данные и будет аттакующий, веть не может за тик (или как они там это считыют) что бы попало два дамага, от игрока и турели, поэтому что-то одно.
Ок. Спасибо за совет. Я уже, кстати, пробовал его использовать - так ничего не понял и оставил это дело, тогда не было времени просто.
Попробую более детально вникнуть, о результатах- отпишусь.
Сообщения автоматически склеены:

У меня появилась идея, я сейчас ущерб игроку от пулемета наношу при помощи point_hurt.
Так вот может быть просто получать разницу между оставшимся у игрока HP и нанесенным ущербом, и если HP игрока после такого ущерба будет = труп, это и взять за основу.
Я не люблю всякие хуки, если я не понимаю принципа их работы, сидеть методом тыка изучать - как то не прикалывает.
А здесь понятно вроде всё.
 
Последнее редактирование:

Faya™

Жуестер
Сообщения
867
Реакции
457
Тупой конечно вопрос, а в player_death получить attacker нельзя?
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Давайте хоть немного порассуждаем - что из предложенного реально:
почему не ивент убийства используется
Выдаст индекс игрока создавшего ENT(пушки) которая убила противника, а как получить индекс ENT?
Единственно что я не пробовал, это если создать ENT(пушку)не игроком, а просто сервером то какой индекс выдаст. Но я думаю выдаст индекс не больше мах. индекса игроков. Но я не пробовал, повторюсь.
Можно, вернёт индекс убийцы.
А кто будет убийцей?
Проблема в том, что для советов нужно знать предмет совета, а так просто писать, ну я не знаю, хотя бы добавить наверно, возможно, вероятно и т.д. Если на то пошло, наиболее вероятным получается OnTakeDamage, я его оставлю на последний момент.

Вообще смысл этого, моего вопроса не в хуках (хотя и они пойдут, в принципе), а в самом принципе работы той или иной функции, как получить то что я хочу. Я хочу не хакерить, хукать и т.д. короче мне не интересны перехваты игровых событий, у меня есть, по идее, всё что нужно, зачем мне перехватывать события?
Я выше писал свою идею, она работает, но работает, естественно, неправильно, так как я не могу получить точный урон, а когда игрок убит - урон вообще не отразится. Я могу только примерно, как бы прогнозировать, есть HP игрока и есть заданный ущерб, из этой разницы можно спрогнозировать будет игрок убит или нет. Но это будет прогноз так как заданный ущерб не значит что ущерб будет именно таким.
Это мое направление мысли, как можно решить этот вопрос.
 
Последнее редактирование:

Madness aka null138

Участник
Сообщения
713
Реакции
737
Давайте хоть немного порассуждаем - что из предложенного реально:

Выдаст индекс игрока создавшего ENT(пушки) которая убила противника, а как получить индекс ENT?
Единственно что я не пробовал, это если создать ENT(пушку)не игроком, а просто сервером то какой индекс выдаст. Но я думаю выдаст индекс не больше мах. индекса игроков. Но я не пробовал, повторюсь.

А кто будет убийцей?
Проблема в том, что для советов нужно знать предмет совета, а так просто писать, ну я не знаю, хотя бы добавить наверно, возможно, вероятно и т.д. Если на то пошло, наиболее вероятным получается OnTakeDamage, я его оставлю на последний момент.

Вообще смысл этого, моего вопроса не в хуках (хотя и они пойдут, в принципе), а в самом принципе работы той или иной функции, как получить то что я хочу. Я хочу не хакерить, хукать и т.д. короче мне не интересны перехваты игровых событий, у меня есть, по идее, всё что нужно, зачем мне перехватывать события?
Я выше писал свою идею, она работает, но работает, естественно, неправильно, так как я не могу получить точный урон, а когда игрок убит - урон вообще не отразится. Я могу только примерно, как бы прогнозировать, есть HP игрока и есть заданный ущерб, из этой разницы можно спрогнозировать будет игрок убит или нет. Но это будет прогноз так как заданный ущерб не значит что ущерб будет именно таким.
Это мое направление мысли, как можно решить этот вопрос.
в point_hurt поставь любое название оружии. например robot. при его убийстве игрока в консоль выводится инфа о том, что игрок был убит оружием robot.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
@tonline_kms65_1, опишите как именно наносит пушка урон (какими действиями) и в каком плагине нужно нужно знать ент пушки, можно же просто сделать API и по нему работать.
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
в point_hurt поставь любое название оружии. например robot. при его убийстве игрока в консоль выводится инфа о том, что игрок был убит оружием robot.
Заинтересовало - сейчас попробую.
Это имя класса? Или имя самому хёрту задать?
Сообщения автоматически склеены:

опишите как именно наносит пушка урон (какими действиями) и в каком плагине нужно нужно знать ент пушки, можно же просто сделать API и по нему работать.
Не. Для такой фигни API делать, нет смысла. Область применения только у меня(может быть еще у кого нибудь, не массово)
 
Последнее редактирование:

tonline_kms65_1

Участник
Сообщения
565
Реакции
225

ASTRASERVER.RU killed Waldo with machinegun.
Сделал, да пишет, теперь осталось сообразить, как это можно использовать.
Сообщения автоматически склеены:


Вот что получается, выделил в консоли, да, реально пишет то что нужно.
Завтра, после работы, подумаю как это можно использовать.
kill.jpg
 
Последнее редактирование:

Madness aka null138

Участник
Сообщения
713
Реакции
737
к каждому такому энтити присвоить название оружии с его энтити ид например, а при смерти игрока получить через название оружии.
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
и в каком плагине нужно нужно знать ент пушки
Не понял я этого вопроса. Каком плагине, в моём плагине cssMachineGun
Сообщения автоматически склеены:

к каждому такому энтити присвоить название оружии с его энтити ид например, а при смерти игрока получить через название оружии.
В player_death ?
Слушай, да у тебя интересно мысли работают. Спасибо за совет! Это уже более чем интересно.
Сообщения автоматически склеены:


@ironman,
Попробовал - отлично работает идея!
Единственно что осталось - отфильтровать по оружию, но это уже проще. Так что еще раз спасибо за идею.

Но сам вопрос так и остался - как узнать точный ущерб, нанесенный противнику.
Сообщения автоматически склеены:

Всё, сделано! Получил то что хотел.
Хоть и не совсем то(хотел понять принцип работы от и до, и как узнать точный ущерб, нанесенный противнику) но для конкретного случая, и для этого движка, пойдет.

 
Последнее редактирование:

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Давайте хоть немного порассуждаем - что из предложенного реально:

Выдаст индекс игрока создавшего ENT(пушки) которая убила противника, а как получить индекс ENT?
Единственно что я не пробовал, это если создать ENT(пушку)не игроком, а просто сервером то какой индекс выдаст. Но я думаю выдаст индекс не больше мах. индекса игроков. Но я не пробовал, повторюсь.

А кто будет убийцей?
Проблема в том, что для советов нужно знать предмет совета, а так просто писать, ну я не знаю, хотя бы добавить наверно, возможно, вероятно и т.д. Если на то пошло, наиболее вероятным получается OnTakeDamage, я его оставлю на последний момент.

Вообще смысл этого, моего вопроса не в хуках (хотя и они пойдут, в принципе), а в самом принципе работы той или иной функции, как получить то что я хочу. Я хочу не хакерить, хукать и т.д. короче мне не интересны перехваты игровых событий, у меня есть, по идее, всё что нужно, зачем мне перехватывать события?
Я выше писал свою идею, она работает, но работает, естественно, неправильно, так как я не могу получить точный урон, а когда игрок убит - урон вообще не отразится. Я могу только примерно, как бы прогнозировать, есть HP игрока и есть заданный ущерб, из этой разницы можно спрогнозировать будет игрок убит или нет. Но это будет прогноз так как заданный ущерб не значит что ущерб будет именно таким.
Это мое направление мысли, как можно решить этот вопрос.
Какие вводные - такой ответ.
Если ты указываешь у энтити владельца игрока, то будет возвращать индекс игрока, которому принадлежит энтити. Если не будешь указывать, то будет мир, что и можно проверить в player_death.

Не заставляй нас вытягивать всю необходимую информацию, как получилось в этой теме, если хочешь получить корректный ответ максимально быстро.
 
Последнее редактирование:

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Какие вводные - такой ответ.
Если ты указываешь у энтити владельца игрока, то будет возвращать индекс игрока, которому принадлежит энтити. Если не будешь указывать, то будет мир, что и можно проверить в player_death.

Не заставляй нас вытягивать всю необходимую информацию, как получилось в этой теме, если хочешь получить корректный ответ максимально быстро.
Зачем мне нулевой индекс?! Если даже я пушку создам от сервера, индекс пушки никак не будет = 0,
Ты не парься - вопрос решен. А вообще, всем спасибо за участие в вопросе!
Сообщения автоматически склеены:

@iLoco,
в котором есть bits damagetype, которая определяет тип урона, можно по нему отследить, зная индекс ента турели, сопоставив данные и будет аттакующий,

Если я правильно понял, ты это и имел в виду?
Только через другую функцию OnTakeDamage. Нужно попробовать и её, может быть даже узнаю точный ущерб.
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,921
  • Команда форума
  • #17
Выдаст индекс игрока создавшего ENT(пушки) которая убила противника, а как получить индекс ENT?
inflictor в том же событии обычно - энтити, которое спровоцировало смерть.

Проблема в том, что для советов нужно знать предмет совета, а так просто писать, ну я не знаю, хотя бы добавить наверно, возможно, вероятно и т.д.
Какие детали в вопросе - такой и ответ.
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
inflictor в том же событии обычно - энтити, которое спровоцировало смерть.
Я посмотрю. Тоже заинтересовало.
Вообще inflictor - это косвенно пострадавшие при действиях, это я так думал. К примеру взорвалась граната в толпе, один убит, но пострадавшие есть, вот они то и есть inflictor, но это я так представлял.
Проверю.
Сообщения автоматически склеены:

Какие детали в вопросе - такой и ответ.

Как нибудь без этого. Кто нужно, тот сразу понял - ему спасибо.
 

Madness aka null138

Участник
Сообщения
713
Реакции
737
inflictor вообще редко нормально выводит легит инфу. либо постоянно -1 либо 0. бывает иногда и рандомный ид.
хотел под мод мг сделать убийство пропом считать за того, кто ударил по пропу, но не получилось так. в итоге пришлось по sdhook отслеживать последнего ударившего по пропам.
 
Сверху Снизу