Ситуация такая: необходимо, чтобы через 1,5 часа после старта игры началась проверка в зоне маркера. Если в зоне только атакующая сторона (например, красные), то миссия останавливается и победа Красных. Если обе, то ждет, пока не останется только одна из сторон или не останется никого. Если только оборонцы (синие) или нет никого - победа Синих.
Пробовал сделать обычными триггерами, например: Красные - Отсутствуют - Многократно - Отсчет "5400" - Конец #1. Если на момент 5400 секунд условие выполняется, то всё нормально. Если же в момент включения триггера в зоне обе стороны, то похоже, что триггер начинает отсчитывать заново 5400 секунд, вместо того чтобы постоянно проверять условие. Поэтому решил сделать отсчет в скрипте и через 1,5 часа создать триггер с нужными условиями. Скрипт в файле init.sqf(используется тушинская сборка и платформа Серп):
if (isServer) then { [] spawn { waitUntil { sleep 0.221; warbegins == 1 }; _missionTime = 7200; _triggerTime = 60; _endMessage = "Закончилось установленное время на операцию. Победа обороны!"; _srv_gameStart = diag_tickTime; while {isNil "srv_missionFinished"} do { if (((diag_tickTime - _srv_gameStart) > _triggerTime) && isNil "srv_triggerAdd") then { _trg=createTrigger["SWITCH",getPos Zona_1]; _trg setTriggerArea [400, 400, 0, false ]; _trg setTriggerActivation ["ANY", "PRESENT", false]; _trg setTriggerTimeout [0, 0, 0, false]; _trg setTriggerStatements ["east countside thislist < 1", "srv_missionFinished = true;['Атакующих в зоне нет. Победа обороны!'] call SerP_endMission;", "hint 'trigger off'"]; srv_triggerAdd = true; }; if (((diag_tickTime - _srv_gameStart) > _missionTime)) then { srv_missionFinished = true; [_endMessage] call SerP_endMission; }; sleep 3.712; }; }; };
Чтобы долго не ждать при отладке, поставил время не 5400, а _triggerTime = 60; Так вот, по всей видимости триггер не создается. Ставил в зону маркера 1-го юнита синей стороны. Соответственно, красных не было - условие должно было выполниться. Я даже менял условие триггера на _trg setTriggerStatements ["true", ...]; - всё равно ничего не происходит.
При этом условие "if (((diag_tickTime - _srv_gameStart) > _triggerTime) && isNil "srv_triggerAdd") then {" функционирует должным образом. Проверял, вставляя после then завершение миссии (srv_missionFinished = true; [_endMessage] call SerP_endMission;).
После этого была ещё идея: создать в редакторе обычный триггер с условием "false" и именем "trg1", а затем в скрипте, когда время перейдет заданную границу, поменять условие на необходимое:
Однако и это не принесло результата... Помогите, пожалуйста! Где у меня ошибка? Что делаю не так? Или предложите другой вариант решения проблемы! Заранее огромное спасибо!
Добавлено (01.02.2014, 09:08) --------------------------------------------- Ошибку нашел. Написал вместо getPos - getMarkerPos. И взял имя маркера в кавычки - всё заработало!
Сообщение отредактировал dadJoe - Пятница, 31.01.2014, 10:14