SDKHooks_TakeDamage - damageForce + damagePosition

Тема в разделе "Программирование / Скриптинг", создана пользователем Danyas, 9 июн 2016.

  1. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Привет знающим :D

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

    SDKHooks_TakeDamage · sdkhooks · SourceMod Scripting API Reference

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

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

    R1KO Супер-модератор

    Сообщения:
    5.995
    Симпатии:
    2.990
    не знаю правильно ли я понял но может при смерти взять рагдолл, и получить его velocity ?
     
    Danyas нравится это.
  3. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Не совсем.
    Цель треда заключается в том, что бы подставить нужные параметры в SDKHooks_TakeDamage, т.е. до смерти, рагдолла еще нету.
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.995
    Симпатии:
    2.990
    @Danyas, ну по идее тебе нужно получать позицию аттакера и жертвы, толчек будет в этом направлении
     
    Danyas нравится это.
  5. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Оффтоп
    Ты имеешь ввиду вектор из двух точек сделать?
     
  6. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.550
    Симпатии:
    1.987
    Грубо говоря: получаешь количество здоровья у victim и, если оно равно единице (меньше единицы - урона уже нет, смерть игрока), то просто "умножаешь" velocity, которое пришло в вызове, возвратив return Plugin_Changed; Оффтоп
     
  7. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.995
    Симпатии:
    2.990
    upload_2016-6-10_1-28-52.png
     
    Danyas нравится это.
  8. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    пытался юзать такое, безуспешно
    PHP:
            static FloatfKnockback 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);
     
  9. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
  10. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Крайне нежелательны. Я понимаю что это проще, но факт остается фактом - это костыль.

    Думаю что-нить такое попробовать:
    PHP:
    GetClientEyePosition(clientuserloc);
    GetClientEyePosition(targettargloc);
    MakeVectorFromPoints(userloctarglocforce);
     
  11. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.550
    Симпатии:
    1.987
    PHP:
    #include <sdkhooks>
    #include <sdktools>

    public OnClientPostAdminCheck(clientSDKHook(clientSDKHook_OnTakeDamageOnTakeDamageClient);

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

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Немного не то, урон наноситься через SDKHook_TakeDamage, и в нём отсутствуют последние два параметра, а именно
    PHP:
    const float[3damageForce
    const float[3damagePosition
    Мне их нужно заполнить.
    Если я буду юзать метод, который описан выше, то ничего вообще происходить не будет, так как будет передаваться NULL_VECTOR
     
  13. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.550
    Симпатии:
    1.987
    Давай подробнее, "в честь чего" он так наносится. Например, если игрок всё же стреляет, а уже после по каким-то причинам вызывается искусственный урон, то просто запоминаем в массив тот же damageForce и передаём функции (телепорт).
     
  14. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Грубо говоря это можно назвать взрывом, которого по факту нету.

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

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

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.550
    Симпатии:
    1.987
    Нахимичил. :biggrin: Оффтоп
    PHP:
    decl Float:originGrenade[3], Float:origin[3], Float:velocity[3];
    GetClientAbsOrigin(attackeroriginGrenade);
    GetClientAbsOrigin(victimorigin);
    MakeVectorFromPoints(originGrenadeoriginvelocity);
    ScaleVector(velocity1000.0/GetVectorDistance(originGrenadeorigin) * 1.0);
    SDKHook_TakeDamage(victimentityGrenadeentityGrenade100.0DMG_BLAST, -1entityGrenadevelocityoriginGrenade);
    Где: Float:originGrenade[3] - точка (позиция) "взрыва" или атакующего с индексом attacker.
    1.0 - типа "сила отталкивания" (больше - сильнее отталкивание).
    Чем ближе был взрыв, тем сильнее сила отталкивания.
     
    Danyas нравится это.
  16. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    серавно как какахи падают :c
     
  17. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.550
    Симпатии:
    1.987
    Это для живых, а не для трупов.
     
  18. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Так это живые и падают как какахи
     
  19. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.550
    Симпатии:
    1.987
    С высоты? :biggrin: Падают, будучи трупами. Если остаётся хоть 1 HP после "взрыва", то это ещё живой.
     
  20. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Понял, спасибо, попытаюсь разобраться что и как. :prankster2: