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


Фотография

createSimpleObject по триггеру


Лучший Ответ ReXcOr , 12 February 2018 - 03:30

Я не понимаю правда зачем ты используешь скрипт, если эти две команды проще загнать в активацию триггера и не заниматься ерундой, но раз уж на то пошло, то вот:

1. Назови игрока - player1
2. Назови триггер - trgChecker
3. В папки миссии создай checking.sqf, внутри него пиши -

checkIt = true;

while{checkIt} do {

	sleep 1;
	if((player1 distance trgChecker) <= 10) then {
	
		_Object = createSimpleObject ['ca\misc2\samsite\powgen_big_ruins.p3d', [127.642998,1261.467041,6.583987]];
		_Object setVectorDirAndUp [[0,1,0],[0,0,1]];
		checkIt = false;
	
	};
};
4. В инит игрока напиши:
0 = [] execVM "checking.sqf"
Перейти к сообщению


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

#1 OFFLINE   Karp1989

Karp1989

    Ефрейтор

  • Пользователи
  • 56 сообщений
  • Откуда:Краснодар

Отправлено 11 February 2018 - 23:21

​Сделал триггер, в нём поставил активацию по присутствии игрока красной стороны, при активации: execVM "1.sqf";

 

Сам скрипт:

_Object = createSimpleObject ['ca\misc2\samsite\powgen_big_ruins.p3d', [127.642998,1261.467041,6.583987]];
_Object setVectorDirAndUp [[0,1,0],[0,0,1]];

Всё бы хорошо, но объект создаётся при запуске карты, а не при входе в триггер. Как сделать спавн объекта при входе в триггер?


  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 11 February 2018 - 23:37

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

PS А вы точно уверены что в радиусе действия триггера совсем нету красных на старте?

Сообщение отредактировал vlad333000: 11 February 2018 - 23:37

  • 0

#3 OFFLINE   Karp1989

Karp1989

    Ефрейтор

  • Пользователи
  • 56 сообщений
  • Откуда:Краснодар

Отправлено 12 February 2018 - 00:50

Прикрепленный файл  123.jpg   72.83К   0 Количество загрузок:

 

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

PS А вы точно уверены что в радиусе действия триггера совсем нету красных на старте?

Вот триггер, и в зоне триггера ни кого нет точно.


Сообщение отредактировал Karp1989: 12 February 2018 - 00:51

  • 0

#4 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 сообщений
  • Откуда:Moscow

Отправлено 12 February 2018 - 03:30   Лучший Ответ

Я не понимаю правда зачем ты используешь скрипт, если эти две команды проще загнать в активацию триггера и не заниматься ерундой, но раз уж на то пошло, то вот:

1. Назови игрока - player1
2. Назови триггер - trgChecker
3. В папки миссии создай checking.sqf, внутри него пиши -
checkIt = true;

while{checkIt} do {

	sleep 1;
	if((player1 distance trgChecker) <= 10) then {
	
		_Object = createSimpleObject ['ca\misc2\samsite\powgen_big_ruins.p3d', [127.642998,1261.467041,6.583987]];
		_Object setVectorDirAndUp [[0,1,0],[0,0,1]];
		checkIt = false;
	
	};
};
4. В инит игрока напиши:
0 = [] execVM "checking.sqf"

Сообщение отредактировал ReXcOr: 12 February 2018 - 03:52

  • 0

#5 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 12 February 2018 - 07:59

для меня тоже странно создавать триггер (работающий цикл) и при это еще создавать один цикл while...

вместо триггера поставь маркер таким же размером и в цикле проверяй условие 
 

 player inArea _mymarker 
while{true} do {

	sleep 1;
	if(player inarea marker) exitwith 
        {
	
		_Object = createSimpleObject ['ca\misc2\samsite\powgen_big_ruins.p3d', [127.642998,1261.467041,6.583987]];
		_Object setVectorDirAndUp [[0,1,0],[0,0,1]];
	};
};

Сообщение отредактировал Dimon UA: 12 February 2018 - 08:03

  • 0

#6 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 12 February 2018 - 08:10

Karp1989, а зачем вы батюшка в условие написали “true”? (<- вот поэтому я и попросил вас другие настройки скинуть) Ясен пень он будет срабатывать сразу после стата миссии. Что бы триггеру не было пофиг на его собственные настройки активации нужно использовать “this”
  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 12 February 2018 - 08:20

Dimon UA,ReXcOr, вы со своими циклами не учли одной очень существенной вещи - частоты проверки условия:
Все ваши while, waitUntil и т. д. заставляют движок игры на КАЖДОМ КАДРЕ проверять условие, триггер же заставляет арму проверять условие не чаще чем 2 РАЗА В СЕКУНДУ (Как вы понимаете кадров в секунде обычно как минмум в 10 раз больше), тем самым создавая меньшую нагрузку и при этом игрок абсолютно не заметит разницу в задержке появления

PS Использование триггера оправдано еще тем, что “скорость” смены позиции юнита крайне мала и частоты “опроса” триггера достаточно, что бы вовремя реагировать на данное событие

Сообщение отредактировал vlad333000: 12 February 2018 - 08:22

  • 0

#8 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 12 February 2018 - 08:25


Все ваши while, waitUntil и т. д. заставляют движок игры на КАЖДОМ КАДРЕ проверять условие, триггер же заставляет арму проверять условие не чаще чем 2 РАЗА В СЕКУНДУ (Как вы понимаете кадров в секунде обычно как минмум в 10 раз больше), тем самым создавая меньшую нагрузку и при этом игрок абсолютно не заметит разницу в задержке появления.

тут я не понял - т.е. если сделать в цикле sleep 3; - все равно будет хуже чем триггер?


  • 0

#9 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 12 February 2018 - 08:35

Dimon UA, даже sleep, ВСЕ скриптовые способы задержки заставляю скриптовый движок проверять условие на КАЖДОМ КАДРЕ (А в случае крайне высокой нагрузки нагрузки на “запланированое” пространство вообще получается непредсказуемая задержка между проверкам)

PS sleep вообще эквивалентен более низкоуровневому:
private _endTime = time + _delay;
waitUntil {time > _endTime};

  • 0

#10 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 12 February 2018 - 08:37

ок ) получается если я все циклы в миссии переведу в триггеры - будет хорошо?


  • 0

#11 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 12 February 2018 - 08:44

Dimon UA, как я писал выше - смотря какой код, для проверки входа игрока в зону с головой хватает частоты проверки триггером, для каких-то других действий его будет не достаточно
А вообще если у вас в этих циклах критически важный код (Напрмер, влияющий на геймплей) то вы просто обязаны проверку либо в триггер, либо в обработчик события EachFrame/Dra3D запихать (Тяжелый код для обработки в случае выполнения условия достаточно будет заспавнить), вместо его обработки в «запланированном» пространстве

Сообщение отредактировал vlad333000: 12 February 2018 - 08:46

  • 2

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 February 2018 - 17:19

Чего ради простого создания объекта столько танцев?

Во первых, для этого действительно достаточно ванильного триггера.

Во вторых, триггер на скрине не настроен так как следует для решения задачи.

 

// при активации
thistrigger setVariable ["SimpleObject", createSimpleObject ["A3\Misc_F\Helpers\Sign_sphere100cm_F.p3d", [0,0,0]]];
(thistrigger getVariable "SimpleObject") setPosWorld (getPosWorld thistrigger);
(thistrigger getVariable "SimpleObject") setDir (getDir thistrigger);
systemChat "активирован";

// при деактивации
if !(isNull (thistrigger getVariable ["SimpleObject", objNull])) then {
	deleteVehicle (thistrigger getVariable "SimpleObject");
	systemChat "деактивирован";
};

Сообщение отредактировал SteelRat: 12 February 2018 - 18:08

  • 0

#13 OFFLINE   Karp1989

Karp1989

    Ефрейтор

  • Пользователи
  • 56 сообщений
  • Откуда:Краснодар

Отправлено 12 February 2018 - 21:34

Всем спасибо, просто через триггер не удобно, потому что мне надо заспавнить 170 объектов в заданных позициях. Поэтому юзать скрипт проще. 

Получается по заданию, игроки приходят, зачищают плацдарм для ПВД, миссия выполнена, чёрный экран и во время чёрного экрана появляется сам ПВД (пункт временной дислокации), 


  • 0

#14 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 February 2018 - 21:58

Ну так и вызывайте скрипт из триггера, который создаст все нужные объекты, и если не нужно удаление объектов, то оставьте поле деактивации пустым.

Всё равно вам нужен триггер для активации события.

 

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


  • 0




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