Работа с ЛЦУ
Лучший Ответ 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) чтобы избежать "ложного" срабатывания.
#1 OFFLINE
Отправлено 07 July 2021 - 16:53
#2 OFFLINE
Отправлено 08 July 2021 - 00:46
можно узнать суть этого всего? на... зачем?
#3 OFFLINE
Отправлено 11 July 2021 - 17:15
Ну как зачем) Делаю миссию где нужно заметить лазерную растяжку)
#4 OFFLINE
Отправлено 11 July 2021 - 19:36
в сетевой бот все равно смещается на какой-то градус, когда заходит джип клиент и соответственно, луч уже не попадает в данный зазор между стенами.
Значит, нужно сделать синхронизацию, чтобы для вновь подключившихся игроков бот был повёрнут именно так, как нужно. Например, разместить этот код в поле инициализации бота.
#5 OFFLINE
Отправлено 11 July 2021 - 21:52
В том и проблема, он почему то дергается для всех клиентов и для сервера в том числе. Причем бывает так что даже только при 1 плеере. Смещения очень незначительные, но учитывая размер "щели", куда он должен попасть, в 99% случаев он промахивается лучом.
#7 OFFLINE
Отправлено 12 July 2021 - 21:49
bot disableAI "ANIM"; bot disableAI "AIMINGERROR"; - это прописано у бота в ините, чтоб не дергался
#8 OFFLINE
Отправлено 13 July 2021 - 20:28
GSBcom, по идее, достаточно отключить только анимацию, плюс команду надо применять, если бот локален:
if (local bot) then { bot disableAI "ANIM"; };
Если бот всё равно смещается, то можно попробовать дополнительно прописать команды установки угла поворота и позиции, или создавать и настраивать полностью командами.
#9 OFFLINE
Отправлено 13 July 2021 - 22:38
Спасибо, буду думать.
#10 OFFLINE
Отправлено 15 July 2021 - 06:48
Ну как зачем) Делаю миссию где нужно заметить лазерную растяжку)
а зачем тебе ввобще бот? ты же можешь приатачить лцу к чему угодно намертво. включить его командой и все. бот то нафига нужен?
#11 OFFLINE
Отправлено 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
#12 OFFLINE
Отправлено 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
#13 OFFLINE
Отправлено 16 July 2021 - 20:54
Ну как зачем) Делаю миссию где нужно заметить лазерную растяжку)
а зачем тебе ввобще бот? ты же можешь приатачить лцу к чему угодно намертво. включить его командой и все. бот то нафига нужен?
Не могу я это сделать. Команда на включение работает фонаря/лцу работает только на оружии, и есть владелец этого оружия - бот или плеер.
Если знаешь рабочий способ как сделать и приведешь пример, будет круто.
Сообщение отредактировал GSBcom: 16 July 2021 - 20:56
#14 OFFLINE
Отправлено 17 July 2021 - 13:15
ToxaBes, огромное спасибо, реально лучшее решение! Единственное, не совсем понял что вставлять вместо objNull. Указать как я назвал лцу ? Назвал лцу в редакторе R1, во что упирается R2. Не срабатывает ничего.... В принципе можно просто триггер поставить, но ваше решение изящнее, конечно
Посмотрите описание функций:
Там есть примеры как указывать объекты. В общем случае достаточно просто указать R1, R2 вместо objNull,objNull. Если не работает, попробуйте использовать lineIntersectsObjs или lineIntersectsWith.
#15 OFFLINE
Отправлено 17 July 2021 - 15:30
Спасибо за помощь!