Lua wraith-aimline - Рендер линий прицеливания игроков с учетом всех соотношений сторон

qrlk

Известный
Автор темы
Друг
411
925
Описание:
wraith-aimline - скрипт для рендера приблизительных линий прицеливания, основанный на aspectRatio в aimSync.
Функционал вырезан из моего проекта на SC23: Wraith.lua - предупреждение что в вас кто-то целится.

Это более наглядное Proof-Of-Value части работы, проделанной над Wraith.lua.

Помимо этого скрипта, есть wraith-xiaomi (определяет соотношения сторон и мобильных игроков по которым проходит х2 урон).

К тому же рендер может быть полезен кому-то в виде отдельного скрипта и его намного проще пилить в отрыве от wraith.lua.

Работает довольно точно на большинстве соотношений сторон как с widescreenfix, так и без.
В настоящий момент wraith-aimline поддерживает 9 популярных соотношений сторон и всё оружие.

Под соотношением сторон имеется ввиду соотношение сторон игры других игроков, определяется через wraith-xiaomi.

Все комбинации соотношений сторон/углов отклонения вектора камеры были подобраны вручную.

Скрипт создан для отладки этого рендера и более прикладной демонстрации его работы.

Функционал:



См. меню, полное видео будет позже.

Untitled.png
Untitled.png
1703305731847.png

Зачем это нужно?
  • Узнав куда смотрит прицел игрока можно узнать куда он целится (да).
  • Помощь в перестрелках вблизи прозрачных объектов со странной коллизией.
  • Помощь в администрировании?
  • Варнинги на читы?
  • Для любопытных?

После доработки алгоритмов wraith-xiaomi и wraith-aimline будут опубликованы сниппеты.



Для запуска скрипта требуется: SA-MP 0.3.7-R1 (на других не проверял) и MoonLoader.
Зависимости: CLEO 4+, SAMPFUNCS, Samp.Lua. Есть поддержка Samp.Lua <2.2.0 (<2020 года).


Для установки перенесите один из двух файлов в папку moonloader:
  • Первый файл поддерживает автообновление, аналитику (количество пользователей) и отправку краш репортов.
    • Это дебаг скрипт для отладки рендера на котором работает wraith.lua.
    • Когда алгоритм будет доработан до состояния стабильного сниппета, скрипт будет обновлен.
  • Во втором файле автообновление, аналитика и sentry отключены, но вы сами должны следить за актуальной версией в этой теме.
Меню: /wraith-aimline.
Рендер на конкретного игрока: /wra [id].


Скрипт лучше использовать в комбинации с wraith-xiaomi.
xiaomi отвечает за отладку определения соотношения сторон, aimline - за отладку точности линии прицела на разных соотношениях.

1703300325755.png


Здесь скорее всего будет видос, но надо иметь:
  • bullettrace.asi
    • bullettrace.json:
      {
        "color_mode": 2,
        "long_tracers": 1,
        "override_oldern": 0,
        "pool_size": 1024,
        "weapon": {
          "22": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "23": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "24": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "25": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "26": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "27": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "28": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "29": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "30": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "31": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "32": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "33": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "38": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "49": {
            "color": {
              "blue": 0,
              "green": 0,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "default": {
            "color": {
              "blue": 0,
              "green": 255,
              "red": 0
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "miss": {
            "color": {
              "blue": 255,
              "green": 255,
              "red": 255
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          },
          "object": {
            "color": {
              "blue": 255,
              "green": 0,
              "red": 0
            },
            "life_time": 100000,
            "radius": 0.009999999776482582
          }
        }
      }
  • Lua - NoSpread
  • DisplayFusion
    • resize:
      using System;using System.Drawing;
      
      public static class DisplayFusionFunction
      {
          public static void Run(IntPtr windowHandle)
          {
              string x = BFS.Dialog.GetUserInput("x?", "1920");
              string y = BFS.Dialog.GetUserInput("y?", "1080");
              // Get the current monitor's work area and the window's current location
              BFS.Window.SetSize(windowHandle, int.Parse(x), int.Parse(y));
          }
      }
    • resize:
      using System;using System.Drawing;
      
      public static class DisplayFusionFunction
      {
          public static void Run(IntPtr windowHandle)
          {
              BFS.Application.Start("nircmd", "win togglehide class Shell_TrayWnd");
              BFS.Application.Start("nircmd", "win togglehide class Shell_SecondaryTrayWnd");
          }
      }
    • resize:
      using System;using System.Drawing;
      
      public static class DisplayFusionFunction
      {
          public static void Run(IntPtr windowHandle)
          {
              BFS.Window.SetLocation(windowHandle, BFS.Input.GetMousePositionX(), BFS.Input.GetMousePositionY());
          }
      }
    • resize:
      using System;using System.Drawing;
      
      public static class DisplayFusionFunction
      {
          public static void Run(IntPtr windowHandle)
          {
              //get the current style of the window
              BFS.WindowEnum.WindowStyle style = BFS.Window.GetWindowStyle(windowHandle);
      
              //if the window has any styling that we don't want, remove it
              if(BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_CAPTION, windowHandle) ||
                  BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_SYSMENU, windowHandle) ||
                  BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_THICKFRAME__SIZEBOX, windowHandle) ||
                  BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_MINIMIZEBOX, windowHandle) ||
                  BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_MAXIMIZEBOX, windowHandle))
              {
                  style &= ~BFS.WindowEnum.WindowStyle.WS_CAPTION;
                  style &= ~BFS.WindowEnum.WindowStyle.WS_SYSMENU;
                  style &= ~BFS.WindowEnum.WindowStyle.WS_THICKFRAME__SIZEBOX;
                  style &= ~BFS.WindowEnum.WindowStyle.WS_MINIMIZEBOX;
                  style &= ~BFS.WindowEnum.WindowStyle.WS_MAXIMIZEBOX;
              }
              else //otherwise, make sure that the window has the styling
              {   
                  style |= BFS.WindowEnum.WindowStyle.WS_CAPTION;
                  style |= BFS.WindowEnum.WindowStyle.WS_SYSMENU;
                  style |= BFS.WindowEnum.WindowStyle.WS_THICKFRAME__SIZEBOX;
                  style |= BFS.WindowEnum.WindowStyle.WS_MINIMIZEBOX;
                  style |= BFS.WindowEnum.WindowStyle.WS_MAXIMIZEBOX;
              }
      
              //set the new style to the window
              BFS.Window.SetWindowStyle(style, windowHandle);
          }
      }
    • resize:
      using System;using System.Drawing;
      
      
      public static class DisplayFusionFunction
      {
          public static void Run(IntPtr windowHandle)
          {
      
              BFS.Dialog.ShowMessageInfo(@"
      //-- 2. 720x480 - Aspect Ratio: 3:2  127
      
      //-- 1. 640x480 - Aspect Ratio: 4:3 85
      //-- 4. 800x600 - Aspect Ratio: 4:3 85
      //-- 5. 1024x768 - Aspect Ratio: 4:3 85
      //-- 6. 1152x864 - Aspect Ratio: 4:3 85
      //-- 11. 1280x960 - Aspect Ratio: 4:3 85
      //-- 15. 1440x1080 - Aspect Ratio: 4:3 85
      //-- 18. 1600x1200 - Aspect Ratio: 4:3 85
      //-- 24. 1920x1440 - Aspect Ratio: 4:3 85
      
      //-- 9. 1280x768 - Aspect Ratio: 5:3 169
      
      //-- 3. 720x576 - Aspect Ratio: 5:4 63
      //-- 12. 1280x1024 - Aspect Ratio: 5:4 63
      
      //-- 7. 1176x664 - Aspect Ratio: 16:9 196
      //-- 13. 1360x768 - Aspect Ratio: 16:9 196
      
      //-- 8. 1280x720 - Aspect Ratio: 16:9 198
      //-- 14. 1366x768 - Aspect Ratio: 16:9 198
      //-- 16. 1600x900 - Aspect Ratio: 16:9 198
      //-- 22. 1920x1080 - Aspect Ratio: 16:9 198
      //-- 25. 2560x1440 - Aspect Ratio: 16:9 198
      
      //-- 26. 3440x1440 - Aspect Ratio: 43:18 98 2,38 2,388888888888889 2,365253077975376
      //-- 27. 2580x1080 - Aspect Ratio: 43:18 98
      
      //-- 17. 1600x1024 - Aspect Ratio: 25:16 143
      
      //-- 10. 1280x800 - Aspect Ratio: 16:10 153
      //-- 21. 1680x1050 - Aspect Ratio: 16:10 153
      //-- 23. 1920x1200 - Aspect Ratio: 16:10 153
      ");
          }
      }
  • терпение

  • С готовыми инструментами достаточно менять соотношение сторон игры и подстраивать прицел с помощью alt+стрелки клавиатуры.
  • Настраивать нужно для всех групп оружия: автоматы | рифл | пистолеты дробовики смг.
  • Скрипт идёт с предустановленными 27 наборами, но они могут измениться в обновах.
  • Замедленные трасера и носпред визуально помогают убедится что всё работает правильно (плюс можно корректировать отклонение стрелками как указано выше).
  • В скрипте есть ини файл который сохраняет настроенные углы.
  • По умолчанию отладка выключена - в настройках внизу есть отдельный раздел.
  • Отладка определения соотношений сторон идёт сюда - wraith-xiaomi. В wraith-aimline нет инструментов для этого, он использует сниппет из wraith-xiaomi.
 

Вложения

  • wraith-aimline.lua
    43.4 KB · Просмотры: 32
  • wraith-aimline v05.01.2024-rc2 no autoupdate no sentry .lua
    45.6 KB · Просмотры: 15
Последнее редактирование:

UBP

Известный
329
168
Добавь плавности передвижениям линиий
 

qrlk

Известный
Автор темы
Друг
411
925
Добавь плавности передвижениям линиий
Я не вижу в этом смысла.

Рендер основан на aimSync и onSendAimSync (для локальной отладки на разных соотношениях).
Эти пакеты отправляются раз в секунду без оружия и по разному во время прицеливания, я не понимаю где тут можно плавность добавить и зачем.

Если только отдельно записывать предыдущий пакет, но какой смысл прикладной в этом.
 
Последнее редактирование:
  • Нравится
Реакции: kyrtion и Vespan

qrlk

Известный
Автор темы
Друг
411
925
обновление v05.01.2024-rc2

улучшена логика меню и добавлена опция для просчета трасеров за пределами экрана (офф по умолчанию)

 
  • Нравится
Реакции: kyrtion