Написание плагина, рикошет

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

  1. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    Всем привет!
    Подскажите, возможно ли в Cs:Go сделать рикошет пуль?
    Если да, то буду крайне благодарен за пример кода; )
     
  2. Grey83

    Grey83

    Сообщения:
    362
    Симпатии:
    104
    1. Определяешь куда попала пуля, если попала не в игрока или NPC (хз, как определить столкновение с щитом/каской), то определяешь насколько уменьшится уровень кинетической энергии пули после столкновения.
      Например, если попал в дерево, воду или стекло, то пуля не станет рикошетить, если в металл или камень, то станет (толщину металла не узнать же никак, как я понимаю).
    2. Если в результате энергия будет больше некого значения (ну т.е. дамаг игроку будет больше 1, например), то нужно определить в каком направлении она станет лететь после отскока от препятствия (нужно найти вектор перпендикулярный поверхности препятствия в точке столкновения и изменить вектор полёта пули согласно правилу "угол падения равен углу отражения")
    3. См. п.1
     
    Саша Шеин и CrazyHackGUT нравится это.
  3. gibs

    gibs Фитиль народного волненья

    Сообщения:
    542
    Симпатии:
    139
    @Grey83, он хочет обычный рикошет для ксго при попадании в поверхность и для него требуется просто расчитать вектор. Точку попадания будет брать из события bullet_impact, ну а позиция выстрела и так понятно.
    1. Создаешь вектор из точки попадания в точку выстрела.
    2. Следующим делом следует найти нормаль к поверхности. Это можно сделать трассировкой в точку попадания и вызовом TR_GetPlaneNormal().
    3. Ну а третий шаг - найти вектор, который направлен на угол от первого вектора в два раза большим, чем угол между первым вектором и нормалью.

    Уровень кинетической энергии)))
     
    Саша Шеин нравится это.
  4. Grey83

    Grey83

    Сообщения:
    362
    Симпатии:
    104
    я думал он хочет именно рикошет, а не просто его визуальный эффект
     
  5. AS TRO

    AS TRO

    Сообщения:
    1.056
    Симпатии:
    509
    @Саша Шеин, когда ожидаешь код и что-то готовенькое, а тебе втирают какую-то дичь теорию)
     
    Саша Шеин нравится это.
  6. gibs

    gibs Фитиль народного волненья

    Сообщения:
    542
    Симпатии:
    139
    @Grey83, вовсе нет)) И у тебя нету причин так думать.
     
  7. Grey83

    Grey83

    Сообщения:
    362
    Симпатии:
    104
    и ни одного слова, что требуется простой визуальный эффект:
     
  8. Terminator-ws

    Terminator-ws

    Сообщения:
    55
    Симпатии:
    20
    Оффтоп
     
  9. gibs

    gibs Фитиль народного волненья

    Сообщения:
    542
    Симпатии:
    139
    @Grey83, чтобы хоть как-то адекватно отвечать на вопросы на этом форуме, ты должен понимать уровень обитающих тут юзеров. И произнося слова "рассчитать уровень кинетической энергии" ты им даже отдалённо не помогаешь. А вот @Terminator-ws понимает, хоть и высказывается слишком саркастично.
     
  10. Grey83

    Grey83

    Сообщения:
    362
    Симпатии:
    104
    @gibs, ой всё =)
     
  11. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    @Grey83, это все хорошо, но
    Это если только самому уменьшать(то есть посредством sm не определит/подсчитать) например на значение из квара
    А разве можно получить по каким углом "ударилась " пуля?
    --- Добавлено позже ---
    Тоесть этим я получаю угол между вектором1(след выстрела) и поверхностью, правильно понял? :)
    --- Добавлено позже ---
    Ну кода я конечно не ждал, а @Grey83 и @gibs, сказали практически одно и тоже, но первый с точки зрения физики (реальной), а вот gibs более точно попал)
     
    Последнее редактирование: 25 сен 2016
  12. Крабос

    Крабос

    Сообщения:
    47
    Симпатии:
    21
    Само проще это отследить координаты пули через bullet_impact, получить углы координат и использовать
    TR_TraceRay - RayType_Infinite

    Только для углов нужна формула,которая будет рандомно менять их направление
     
  13. gibs

    gibs Фитиль народного волненья

    Сообщения:
    542
    Симпатии:
    139
    @Саша Шеин, нормаль - это вектор, который перпендекулярен к поверхности.
     
    Саша Шеин нравится это.
  14. Саша Шеин

    Саша Шеин

    Сообщения:
    1.258
    Симпатии:
    191
    Все, спасибо. Буду пробовать)
     
  15. Grey83

    Grey83

    Сообщения:
    362
    Симпатии:
    104
    Это и подразумевалось. Для разных поверхностей плагин будет подставлять разный коэффициент, которые ты должен сам подставить.
     
  16. AlmazON

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

    Сообщения:
    4.588
    Симпатии:
    1.995
    Это ему ещё учитывать, с какого оружия был произведён выстрел (например, AWP - максимальный урон) и в какую часть тела + броня/шлем (больше/меньше урона). Оффтоп