Перейти к содержимому


Фотография

Работа с ЛЦУ


Лучший Ответ ToxaBes , 15 July 2021 - 16:39

GSBcom, рисование линии:


addMissionEventHandler ["Draw3D", {
    _pos1 = [1,2,3];
    _pos2 = [4,5,6];
    _color = [1,0,0,1];
    drawLine3D [_pos1, _pos2, _color]; 
}];

проверка на пересечение линии:


addMissionEventHandler ["EachFrame", {
    _pos1 = [1,2,3];
    _pos2 = [4,5,6];
    if (lineIntersects [_pos1,_pos2,objNull,objNull]) then {
        systemChat "Alarm!";
    };
}];

Если нужно поставить какой-то ЛЦУ то ставьте его без бота внутри и указывайте третьим параметром в lineIntersects (вместо objNull), если луч во что-то упирается, то указывайте этот объект четвертым параметром в lineIntersects (вместо objNull) чтобы избежать "ложного" срабатывания.

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 OFFLINE   GSBcom

GSBcom

    Рядовой

  • Пользователи
  • 26 сообщений

Отправлено 07 July 2021 - 16:53

Всем привет. Может быть кто-то знает как решить такую задачу: нужно чтобы визуально отображался луч лцу, - суть, чтобы при пересечении этого луча происходило какое-то действие. Проблема именно с визуальной частью. ЛЦУ как предмет без юнита/игрока заставить работать нельзя (вроде как). Пытался сделать с помощью "костыля": ставил бота, добавлял ему оружие с лцу, включал лцу, отключал мозги боту (чтоб не дергался). Далее ставил две стены, оставлял небольшой зазор и направлял туда луч лазера. Все работает, за одним исключением - в сетевой бот все равно смещается на какой-то градус, когда заходит джип клиент и соответственно, луч уже не попадает в данный зазор между стенами. Вот хочу узнать, может есть еще какой вариант сделать этот лазерный луч? Или хотя бы чтобы бот не смещался.
  • 0

#2 OFFLINE   TopDen

TopDen

    Мл. лейтенант

  • Пользователи
  • 803 сообщений
  • Откуда:Москва
  • Отряд:[АТР] АРМАТОП

Отправлено 08 July 2021 - 00:46

можно узнать суть этого всего? на...  зачем?


  • 0

#3 OFFLINE   GSBcom

GSBcom

    Рядовой

  • Пользователи
  • 26 сообщений

Отправлено 11 July 2021 - 17:15

Ну как зачем) Делаю миссию где нужно заметить лазерную растяжку)


  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 11 July 2021 - 19:36

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

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


  • 0

#5 OFFLINE   GSBcom

GSBcom

    Рядовой

  • Пользователи
  • 26 сообщений

Отправлено 11 July 2021 - 21:52

В том и проблема, он почему то дергается для всех клиентов и для сервера в том числе. Причем бывает так что даже только при 1 плеере. Смещения очень незначительные, но учитывая размер "щели", куда он должен попасть, в 99% случаев он промахивается лучом.


  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 12 July 2021 - 13:20

GSBcom, ты бы код привёл что ли, чтобы мы могли какое-нибудь решение предложить.


  • 0

#7 OFFLINE   GSBcom

GSBcom

    Рядовой

  • Пользователи
  • 26 сообщений

Отправлено 12 July 2021 - 21:49

bot disableAI "ANIM"; bot disableAI "AIMINGERROR";  - это прописано у бота в ините, чтоб не дергался


  • 0

#8 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1832 сообщений

Отправлено 13 July 2021 - 20:28

GSBcom, по идее, достаточно отключить только анимацию, плюс команду надо применять, если бот локален:

if (local bot) then {
    bot disableAI "ANIM";
};

Если бот всё равно смещается, то можно попробовать дополнительно прописать команды установки угла поворота и позиции, или создавать и настраивать полностью командами.


  • 0

#9 OFFLINE   GSBcom

GSBcom

    Рядовой

  • Пользователи
  • 26 сообщений

Отправлено 13 July 2021 - 22:38

Спасибо, буду думать.


  • 0

#10 OFFLINE   TopDen

TopDen

    Мл. лейтенант

  • Пользователи
  • 803 сообщений
  • Откуда:Москва
  • Отряд:[АТР] АРМАТОП

Отправлено 15 July 2021 - 06:48

Ну как зачем) Делаю миссию где нужно заметить лазерную растяжку)

а зачем тебе ввобще бот? ты же можешь приатачить лцу к чему угодно намертво. включить его командой и все. бот то нафига нужен?


  • 0

#11 OFFLINE   ToxaBes

ToxaBes

    Ефрейтор

  • Пользователи
  • 34 сообщений

Отправлено 15 July 2021 - 16:39   Лучший Ответ

GSBcom, рисование линии:


addMissionEventHandler ["Draw3D", {
    _pos1 = [1,2,3];
    _pos2 = [4,5,6];
    _color = [1,0,0,1];
    drawLine3D [_pos1, _pos2, _color]; 
}];

проверка на пересечение линии:


addMissionEventHandler ["EachFrame", {
    _pos1 = [1,2,3];
    _pos2 = [4,5,6];
    if (lineIntersects [_pos1,_pos2,objNull,objNull]) then {
        systemChat "Alarm!";
    };
}];

Если нужно поставить какой-то ЛЦУ то ставьте его без бота внутри и указывайте третьим параметром в lineIntersects (вместо objNull), если луч во что-то упирается, то указывайте этот объект четвертым параметром в lineIntersects (вместо objNull) чтобы избежать "ложного" срабатывания.


Сообщение отредактировал ToxaBes: 15 July 2021 - 16:41

  • 0

#12 OFFLINE   GSBcom

GSBcom

    Рядовой

  • Пользователи
  • 26 сообщений

Отправлено 16 July 2021 - 20:46

 

GSBcom, рисование линии:


addMissionEventHandler ["Draw3D", {
    _pos1 = [1,2,3];
    _pos2 = [4,5,6];
    _color = [1,0,0,1];
    drawLine3D [_pos1, _pos2, _color]; 
}];

проверка на пересечение линии:


addMissionEventHandler ["EachFrame", {
    _pos1 = [1,2,3];
    _pos2 = [4,5,6];
    if (lineIntersects [_pos1,_pos2,objNull,objNull]) then {
        systemChat "Alarm!";
    };
}];

Если нужно поставить какой-то ЛЦУ то ставьте его без бота внутри и указывайте третьим параметром в lineIntersects (вместо objNull), если луч во что-то упирается, то указывайте этот объект четвертым параметром в lineIntersects (вместо objNull) чтобы избежать "ложного" срабатывания.

 

ToxaBes, огромное спасибо, реально лучшее решение! Единственное, не совсем понял что вставлять вместо objNull. Указать как я назвал лцу ? Назвал лцу в редакторе R1, во что упирается R2. Не срабатывает ничего.... В принципе можно просто триггер поставить, но ваше решение изящнее, конечно :)


Сообщение отредактировал GSBcom: 16 July 2021 - 20:52

  • 0

#13 OFFLINE   GSBcom

GSBcom

    Рядовой

  • Пользователи
  • 26 сообщений

Отправлено 16 July 2021 - 20:54

 

Ну как зачем) Делаю миссию где нужно заметить лазерную растяжку)

а зачем тебе ввобще бот? ты же можешь приатачить лцу к чему угодно намертво. включить его командой и все. бот то нафига нужен?

 

Не могу я это сделать. Команда на включение работает фонаря/лцу работает только на оружии, и есть владелец этого оружия - бот или плеер.

Если знаешь рабочий способ как сделать и приведешь пример, будет круто.


Сообщение отредактировал GSBcom: 16 July 2021 - 20:56

  • 0

#14 OFFLINE   ToxaBes

ToxaBes

    Ефрейтор

  • Пользователи
  • 34 сообщений

Отправлено 17 July 2021 - 13:15

 

 

ToxaBes, огромное спасибо, реально лучшее решение! Единственное, не совсем понял что вставлять вместо objNull. Указать как я назвал лцу ? Назвал лцу в редакторе R1, во что упирается R2. Не срабатывает ничего.... В принципе можно просто триггер поставить, но ваше решение изящнее, конечно :)

 

Посмотрите описание функций:

 

Там есть примеры как указывать объекты. В общем случае достаточно просто указать R1, R2 вместо objNull,objNull. Если не работает, попробуйте использовать lineIntersectsObjs или lineIntersectsWith.


  • 0

#15 OFFLINE   GSBcom

GSBcom

    Рядовой

  • Пользователи
  • 26 сообщений

Отправлено 17 July 2021 - 15:30

Спасибо за помощь!


  • 0




Яндекс.Метрика