SDKHooks_TakeDamage - damageForce + damagePosition

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Привет знающим :D

Хочу понять как можно взять свои damageForce и damagePosition что бы выставить их в функцию.
Как я понимаю эти два параметра отвечают за поведение рагдолла после смерти, а именно силу и позицию "толчка".
Делал вывод в консоль через SDKHooks_OnTakeDamage - что в первом, что и во втором случае выводило страшные и непонятные числа.

SDKHooks_TakeDamage · sdkhooks · SourceMod Scripting API Reference

Либо если кому не лень - пример как можно отправить труп в сторону, которою я смотрю с помощью этих вот фич, заранее спасибо.

В тред призываю @AlmazON @FrozDark @R1KO @Reiko1231 @White Wolf @SenatoR
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
не знаю правильно ли я понял но может при смерти взять рагдолл, и получить его velocity ?
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
не знаю правильно ли я понял но может при смерти взять рагдолл, и получить его velocity ?
Не совсем.
Цель треда заключается в том, что бы подставить нужные параметры в SDKHooks_TakeDamage, т.е. до смерти, рагдолла еще нету.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
@Danyas, ну по идее тебе нужно получать позицию аттакера и жертвы, толчек будет в этом направлении
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Цель треда заключается в том, что бы подставить нужные параметры в SDKHooks_TakeDamage, т.е. до смерти, рагдолла еще нету.
Грубо говоря: получаешь количество здоровья у victim и, если оно равно единице (меньше единицы - урона уже нет, смерть игрока), то просто "умножаешь" velocity, которое пришло в вызове, возвратив return Plugin_Changed; Оффтоп
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #7
upload_2016-6-10_1-28-52.png
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
пытался юзать такое, безуспешно
PHP:
        static Float: fKnockback = 1.0;
        new Float:pfKnockbackAngles[3];
        pfKnockbackAngles[0] = FloatMul(Cosine(DegToRad(clientEyeAng[1])), fKnockback);
        pfKnockbackAngles[1] = FloatMul(Sine(DegToRad(clientEyeAng[1])), fKnockback);
        pfKnockbackAngles[2] = FloatMul(Sine(DegToRad(clientEyeAng[0])), fKnockback);
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Варианты с осколочной гранатой невозможны?
Крайне нежелательны. Я понимаю что это проще, но факт остается фактом - это костыль.

Думаю что-нить такое попробовать:
PHP:
GetClientEyePosition(client, userloc);
GetClientEyePosition(target, targloc);
MakeVectorFromPoints(userloc, targloc, force);
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
с осколочной гранатой
пытался юзать такое
PHP:
#include <sdkhooks>
#include <sdktools>

public OnClientPostAdminCheck(client) SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamageClient);

public Action:OnTakeDamageClient(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, Float:damageForce[3], Float:damagePosition[3])
{
    TeleportEntity(victim, NULL_VECTOR, NULL_VECTOR, damageForce);
    return Plugin_Continue;
}
damageForce - это и есть уже готовое направление "velocity". Вам остаётся лишь его ослабить, как необходимо. Оффтоп
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Немного не то, урон наноситься через SDKHook_TakeDamage, и в нём отсутствуют последние два параметра, а именно
PHP:
const float[3] damageForce
const float[3] damagePosition

Мне их нужно заполнить.
Если я буду юзать метод, который описан выше, то ничего вообще происходить не будет, так как будет передаваться NULL_VECTOR
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
урон наноситься через SDKHook_TakeDamage
Давай подробнее, "в честь чего" он так наносится. Например, если игрок всё же стреляет, а уже после по каким-то причинам вызывается искусственный урон, то просто запоминаем в массив тот же damageForce и передаём функции (телепорт).
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Давай подробнее, "в честь чего" он так наносится. Например, если игрок всё же стреляет, а уже после по каким-то причинам вызывается искусственный урон, то просто запоминаем в массив тот же damageForce и передаём функции (телепорт).

Грубо говоря это можно назвать взрывом, которого по факту нету.

т.е.
GRAF_1475773943475.png
@Саша Шеин это изобразил как-то так.

Красная точка - точка основания взрыва, т.е. откуда нужно отталкиваться.
Синие точки - точки, которые нужно отталкивать
Фиолетовые вектора - направление толчка
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
это можно назвать взрывом
Нахимичил. :biggrin: Оффтоп
PHP:
decl Float:originGrenade[3], Float:origin[3], Float:velocity[3];
GetClientAbsOrigin(attacker, originGrenade);
GetClientAbsOrigin(victim, origin);
MakeVectorFromPoints(originGrenade, origin, velocity);
ScaleVector(velocity, 1000.0/GetVectorDistance(originGrenade, origin) * 1.0);
SDKHook_TakeDamage(victim, entityGrenade, entityGrenade, 100.0, DMG_BLAST, -1, entityGrenade, velocity, originGrenade);
Где: Float:originGrenade[3] - точка (позиция) "взрыва" или атакующего с индексом attacker.
1.0 - типа "сила отталкивания" (больше - сильнее отталкивание).
Чем ближе был взрыв, тем сильнее сила отталкивания.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Нахимичил. :biggrin: Оффтоп
PHP:
decl Float:originGrenade[3], Float:origin[3], Float:velocity[3];
GetClientAbsOrigin(attacker, originGrenade);
GetClientAbsOrigin(victim, origin);
MakeVectorFromPoints(originGrenade, origin, velocity);
ScaleVector(velocity, 1000.0/GetVectorDistance(originGrenade, origin) * 1.0);
SDKHook_TakeDamage(victim, entityGrenade, entityGrenade, 100.0, DMG_BLAST, -1, entityGrenade, velocity, originGrenade);
Где: Float:originGrenade[3] - точка (позиция) "взрыва" или атакующего с индексом attacker.
1.0 - типа "сила отталкивания" (больше - сильнее отталкивание).
Чем ближе был взрыв, тем сильнее сила отталкивания.
серавно как какахи падают :c
 
Сверху Снизу