• Страница 1 из 1
  • 1
Форум » Мастерская » В помощь картоделу » Вопросы и ответы » Связь триггеров и скриптов
Связь триггеров и скриптов
DrSl1m
Понедельник, 02.03.2015, 13:31
Пост №: 1
Будет ли работать данное выражение на сервере, при условии, что маркера относятся к захватываемым зонам?

Код
if (((player == VIP) && (alive HELI)) && {markerColor _x == "ColorOPFOR"} forEach ["VIPZ1","VIPZ2"]) then {  
   drs_ad = HELI addAction ["Вколоть антидот!", "ad.sqf",[],1,true,false,"","player distance HELI < 5"];  
};

Т.е. изначально эти 2 зоны принадлежат стороне BLUFOR и имеют аналогичный цвет соответственно, а при захвате стороной OPFOR должен активироваться данный скрипт. 
Конкретно интересует, реагируют ли скрипты в init.sqf на изменения в глобальном пространстве или для этого необходимо дописывать что-то еще?

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

Автор темы
 
Zealot
Понедельник, 02.03.2015, 13:43
Пост №: 2
Лучше все такие условия делать сериями триггеров. Допустим тебе надо чтобы завершалась миссия если одновременно выполнялись 2 условия из 3: один из 2 випов в зоне, грузовик уничтожен, зона захвачена. Сначала делаем 3 триггера -
1) Trg1 с условием, что 1 из 2 випов в зоне:
Код
{_x in [vip1,vip2]} count thislist > 0
 где vip1, vip2 - переменные випов

2) Trg2 с условием что грузовик уничтожен:
Код
!alive truck
 где truck - переменная грузовика

3) Trg3 с условием что зона захвачена (допустим нам нужно 2-кратное превосходство синих над красными и зелеными):
Код
(west countSide thislist) > ([east, resistance] countside thislist) * 2


4) Теперь можно сделать общий триггер на победу:
Код
{triggerActivated _x} count [Trg1,Trg2,Trg3] > 1


Сообщение при захвате зоны или уничтожении техники можно выводить с помощью функции Wmt_fnc_ZoneCaptured
Например:
Код
[west, "Электростанция захвачена", ["zone"]] call Wmt_fnc_ZoneCaptured;
покажет сообщение вверху экрана, перекрасит маркер "zone" в цвет синих. (можно указать несколько маркеров, если маркер точечный, то нарисует на нем крест)

 
DrSl1m
Понедельник, 02.03.2015, 13:46
Пост №: 3
А если необходимо, чтобы миссия завершалась при условии, что выполнен скрипт addAction, который ссылается на "script.sqf"?
Я так понял, что использование в "script.sqf" команды [west,"text"] call WMT_fnc_EndMission выполняется локально, только на той машине, что его вызывала, как и другие прописанные в нём и вызывать из него завершение миссии так не получится? Как же сделать, чтобы выполнение содержимого "script.sqf" имело эффект на всех машинах?

Например, если "script.sqf" содержит: удаление триггера, удаление функции addAction (т.к. использована) и вызов завершения миссии.

Распишу еще подробнее:

Есть триггер tr1, который удаляется через другой триггер - del_tr1, содержимое которого:
Код
//Условие
playerSide == west;

//Активация
drs_act = obj1 addAction ["Текст", {deleteVehicle tr1; deleteMarker "mrk_tr1"; [west,"Текст"] call WMT_fnc_ShowTaskNotification; obj1 removeAction drs_act; drs_act = nil;},[],1,true,false,"","player distance obj1 < 3"];
Как сделать так, чтобы команды указанные в коде {} работали для всех машин, а не только для локальной?
Сообщение отредактировал DrSl1m - Вторник, 03.03.2015, 00:44

Автор темы
 
Zealot
Вторник, 03.03.2015, 18:49
Пост №: 4
Цитата DrSl1m ()
А если необходимо, чтобы миссия завершалась при условии, что выполнен скрипт addAction, который ссылается на "script.sqf"?
    Устанавливать какую-нибудь переменную в этом script.sqf, что-то вроде
zlt_action = true; publicVariable "zlt_action";

и соответственно создать триггер на !isNil "zlt_action" чтобы проверять установлена она или нет.
Цитата DrSl1m ()
удаление триггера,
    Удалять триггеры нет необходимости, пусть остаются, управлять ими можно с помощью переменных и логических условий их проверки, см.выше
Цитата DrSl1m ()
Как сделать так, чтобы команды указанные в коде {} работали для всех машин, а не только для локальной?
Самый простой способ - завязать выполнение триггера на существование определенной переменной (через условие), а перменную разослать на другие машины с пом. publicVariable

 
DrSl1m
Среда, 04.03.2015, 12:55
Пост №: 5
Черт, всё так просто, оказывается. Как только добьюсь успешных результатов - отпишусь.

Добавлено (04.03.2015, 12:55)
---------------------------------------------
Всё заработало. Как раз через триггер вывел все необходимые глобальные изменения. Спасибо!
Сообщение отредактировал DrSl1m - Среда, 04.03.2015, 12:55

Автор темы
 
Форум » Мастерская » В помощь картоделу » Вопросы и ответы » Связь триггеров и скриптов
  • Страница 1 из 1
  • 1
Поиск: