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


Фотография

Бесконечный цикл проверки дистанции


Лучший Ответ Ibragim , 10 December 2021 - 15:40

Во-первых, проверь, в какой среде ты запускаешь скрипт:

1) В запланированной среде (запущенное через execVM, spawn) можно использовать циклы.

2) В незапланированной (call) - не всегда.

 

Попробуй:

[] spawn 
	{
		while (true) do 
			{
				sleep 1;
				
				if (player distance zalog > 5) then 
					{
						zalog doMove position player;
					};
			} ;
	}; 

Для шлагбаума тебе нужно писать скрипт для его поднятия и опускания (он не опускается автоматически)

Поставь повторяющийся триггер на присутствие игрока в зоне действия шлагбаума.
В его активации впиши:

imja_shlagbauma animate ["door_1_rot", 1];

В деактивации:

imja_shlagbauma animate ["door_1_rot", 0];
Перейти к сообщению


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

#1 OFFLINE   CuPOTA

CuPOTA

    Рядовой

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

Отправлено 10 December 2021 - 13:57

Доброго времени суток, что то я совсем запутался, но проблема в следующем:

Для миссий по освобождению заложников когда они должны следовать за тобой или для открытия\закрытия шлагбаумов, мне нужна проверка дистанции до игрока, что то вроде 

if (zalog distance player <2) then {zalog move position player};

пробовал и так:

1) while {player distance zalog <2} do {zalog move position player};
2) while (true) do {if (player distance zalog >2)} then {zalog move position player};

Но к сожалению, все это срабатывает единоразово, тоесть после отработки кода, он заканчивается и при нарастании дистанции бот не бежит за мной, как сделать эту самую проверку на дистанцию в бесконечном цикле?

 

Аналогично и со шлагбаумом, он срабатывает единожды, открывается и больше не закрывается :(

 

Спасибо за ответы.

P.S Я понимаю вопрос простой и возможно не достоин отдельной темы, а мои попытки выглядят смешно, но я только учусь. Спасибо.

P.S.S Пока писал пост подумал о триггире, который мог бы запускать эти команды "повторно", но хотелось бы в скрипте все таки такую проверку, т.к хочется понимать принцип циклов. Документацию почитываю, на бис вики захожу, но тут прям ступор.


Сообщение отредактировал CuPOTA: 10 December 2021 - 13:58

  • 0

#2 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 10 December 2021 - 15:40   Лучший Ответ

Во-первых, проверь, в какой среде ты запускаешь скрипт:

1) В запланированной среде (запущенное через execVM, spawn) можно использовать циклы.

2) В незапланированной (call) - не всегда.

 

Попробуй:

[] spawn 
	{
		while (true) do 
			{
				sleep 1;
				
				if (player distance zalog > 5) then 
					{
						zalog doMove position player;
					};
			} ;
	}; 

Для шлагбаума тебе нужно писать скрипт для его поднятия и опускания (он не опускается автоматически)

Поставь повторяющийся триггер на присутствие игрока в зоне действия шлагбаума.
В его активации впиши:

imja_shlagbauma animate ["door_1_rot", 1];

В деактивации:

imja_shlagbauma animate ["door_1_rot", 0];

  • 0

#3 OFFLINE   CuPOTA

CuPOTA

    Рядовой

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

Отправлено 10 December 2021 - 16:06

 

Во-первых, проверь, в какой среде ты запускаешь скрипт:

1) В запланированной среде (запущенное через execVM, spawn) можно использовать циклы.

2) В незапланированной (call) - не всегда.

 

Попробуй:

[] spawn 
	{
		while (true) do 
			{
				sleep 1;
				
				if (player distance zalog > 5) then 
					{
						zalog doMove position player;
					};
			} ;
	}; 

Для шлагбаума тебе нужно писать скрипт для его поднятия и опускания (он не опускается автоматически)

Поставь повторяющийся триггер на присутствие игрока в зоне действия шлагбаума.
В его активации впиши:

imja_shlagbauma animate ["door_1_rot", 1];

В деактивации:

imja_shlagbauma animate ["door_1_rot", 0];

Спасибо за ответ, да способ с тригерами и шлагбаумом я знаю, спасибо, хотелось через скрипты это все делать. Пойду поковыряю ) и перечитаю мурзилку и разберусь с разницей между call и spawn.


  • 0

#4 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 10 December 2021 - 16:26

Скриптом можно сделать так:

[] spawn 
	{
		while (alive imja_shlagbauna) do // Цикл работает, пока шлагбаум стоит
			{				
				waitUntil 
					{
						sleep 0.5; 
						
						(player distance imja_shlagbauna < 5) // Игрок подошел на 5 метров
					};
				
				imja_shlagbauma animate ["door_1_rot", 1]; // Открылся

				waitUntil 
					{
						sleep 0.5;
						
						(player distance imja_shlagbauna > 5) // Игрок отошел на больше, чем 5 метров
					};
				
				imja_shlagbauma animate ["door_1_rot", 0]; // Закрылся
			};
	};

Сообщение отредактировал Ibragim: 10 December 2021 - 16:28

  • 0

#5 OFFLINE   CuPOTA

CuPOTA

    Рядовой

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

Отправлено 10 December 2021 - 18:56

 

Скриптом можно сделать так:

[] spawn 
	{
		while (alive imja_shlagbauna) do // Цикл работает, пока шлагбаум стоит
			{				
				waitUntil 
					{
						sleep 0.5; 
						
						(player distance imja_shlagbauna < 5) // Игрок подошел на 5 метров
					};
				
				imja_shlagbauma animate ["door_1_rot", 1]; // Открылся

				waitUntil 
					{
						sleep 0.5;
						
						(player distance imja_shlagbauna > 5) // Игрок отошел на больше, чем 5 метров
					};
				
				imja_shlagbauma animate ["door_1_rot", 0]; // Закрылся
			};
	};

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


  • 1




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