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


Фотография

Активация триггера только для одного игрока


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

#1 OFFLINE   Master_Cher

Master_Cher

    Рядовой

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

Отправлено 06 September 2022 - 21:48

Суть в следующем. В сценарии есть триггер, при активации которого скрипт проверяет принадлежит ли юнит стороне красных. Если да, то появляется БМП, если нет, выдаёт сообщение. В сингле всё работает как надо. При активации красным появляется БМП и триггер больше не работает. Когда триггер активирует синий, выдаётся сообщение и скрипт создаёт триггер снова, т.к., он предназначен для красных. Проблема наблюдается в мультиплеере.

Подключено 2 игрока за красных и 1 за синих. При активации триггера игроком синих, создаётся 2 БМП для красных и появляется сообщение для синего, а нужно, чтобы при активации синим было только сообщение для него без создания БМП.

Триггер активируется радио Альфа.

Уловие триггера:

call {true}

При активации:

call{_trig1 = execVM 'bmp2.sqf'}

 

Сам скрипт:
if (side player == opfor) then {
_veh = createVehicle ["CUP_O_BMP2_RU",getpos player,[],0,""];
_veh setPos (player modelToWorld [0,6,100]);
_veh setDir ([_veh, player] call Bis_fnc_dirTo);
} else 
{
_trg = createTrigger ["EmptyDetector", getPos player];
_trg setTriggerText "Вызов БМП-2";
_trg setTriggerArea [0, 0, 0, false];
_trg setTriggerActivation ["ALPHA", "PRESENT", false];
_trg setTriggerStatements ["call {true}", "call{_trig1 = execVM 'bmp2.sqf'}",""];
hint "Вам недоступна данная техника";
playSound "pindos";
};
};
 
В мультиплеере все игроки распознаются скриптом как player и поэтому появились 2 БМП. На что заменить player, чтобы скрипт срабатывал только для вызывающего?

Сообщение отредактировал Master_Cher: 06 September 2022 - 21:49

  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1780 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 06 September 2022 - 23:35

Master_Cher, зачем создавать новые триггеры BLUFOR-игроками? Сделай имеющийся триггер повторяемым, в условии и активации убери ненужные call'ы (то есть оставь, например, просто "true" для условия), а в bmp2.sqf убери код создания нового триггера.


Сообщение отредактировал Schatten: 06 September 2022 - 23:36

  • 0

#3 OFFLINE   Master_Cher

Master_Cher

    Рядовой

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

Отправлено 06 September 2022 - 23:48

Триггер активируется через радио, поэтому он доступен всем сторонам. И из-за этого, если синий активирует радио, красные не смогут вызвать БМП. Пытаюсь сделать, чтобы красные могли один раз воспользоваться сбросом техники, поэтому повторяемый триггер не вариант.


Сообщение отредактировал Master_Cher: 06 September 2022 - 23:53

  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1780 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 07 September 2022 - 00:05

Master_Cher, а BLUFOR, как я понимаю, нужно всегда показывать сообщение о недоступности техники? Если да, то триггер всё равно надо сделать повторяемым, а bmp2.sqf переписать:

if ((playerSide == opfor) and { !(thisTrigger getVariable ["vehicleCreated", false]) }) then {
    ...

    thisTrigger setVariable ["vehicleCreated", true, true];
} else {
    hint "Вам недоступна данная техника";

    ...
};

Сообщение отредактировал Schatten: 07 September 2022 - 00:19

  • 0

#5 OFFLINE   Gonarx

Gonarx

    Рядовой

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

Отправлено 12 September 2022 - 20:57

Привет всем, мне кажется вопрос в тему, так как вроде перерыл все и не нашел ответа, а тут похожая тема! Есть ли варианты с триггерами активируемыми радио - сделать их кастомными для конкретного игрока, а не глобальными, какими они являются по умолчанию? Что бы радио Альфа и тп, видел только конкретный игрок, а не все стороны и все игроки? Предложенное Schatten решение, не особо подходит, так как у нескольких игроков в МП миссии по задумке должны быть вызываемые триггеры, которые доступны только им, а если все будут видеть список из 10 радио от Альфы до Жулиет и большая часть из них не будет доступна, это будет не удобно, с точки зрения игры. Возможно есть какие то другие варианты условий для триггеров, которые позволят, игроку их вызывать в игре своим действием (как с рацией), а не по событию (владелец и тп)?


  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1780 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 12 September 2022 - 21:04

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.


  • 0

#7 OFFLINE   Master_Cher

Master_Cher

    Рядовой

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

Отправлено 12 September 2022 - 21:23

Привет всем, мне кажется вопрос в тему, так как вроде перерыл все и не нашел ответа, а тут похожая тема! Есть ли варианты с триггерами активируемыми радио - сделать их кастомными для конкретного игрока, а не глобальными, какими они являются по умолчанию? Что бы радио Альфа и тп, видел только конкретный игрок, а не все стороны и все игроки? Предложенное Schatten решение, не особо подходит, так как у нескольких игроков в МП миссии по задумке должны быть вызываемые триггеры, которые доступны только им, а если все будут видеть список из 10 радио от Альфы до Жулиет и большая часть из них не будет доступна, это будет не удобно, с точки зрения игры. Возможно есть какие то другие варианты условий для триггеров, которые позволят, игроку их вызывать в игре своим действием (как с рацией), а не по событию (владелец и тп)?

Я вижу вариант только через addAction конкретному юниту прописывать действие. Или можно задать владельца триггера, чтобы его активировал кто-то конкретный или группа с которой он соединён. Но т.к., у меня в сценарии каждый игрок отдельный без отряда, это на каждого делать триггер и чтобы он проверял, вызвал ли кто-то БМП, и после этого отключал возможность вызова для остальных


Сообщение отредактировал Master_Cher: 12 September 2022 - 21:26

  • 0

#8 OFFLINE   Master_Cher

Master_Cher

    Рядовой

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

Отправлено 12 September 2022 - 21:28

И то, что я изначально хотел сделать, использовалось бы в Варлордс, как бонус за захват точки. Захватили крупный город, можно 1 бесплатный БМП вызвать, но подумал, проблем с покупкой техники при игре не возникает, поэтому забил на это


  • 0

#9 OFFLINE   Gonarx

Gonarx

    Рядовой

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

Отправлено 12 September 2022 - 22:20

У меня другая задача, мне нужно, что бы срабатывала активация триггера по действию игрока  и у каждого игрока, на каждой стороне. Конкретно нужно что бы игроки могли присоединять по необходимости к себе отряды (которые формально подчинены только им). Такое себе повторение High Command, так как работа этого модуля мне не нравиться.  Поэтому пытаюсь найти каким действием вызвать исполнение условий триггера - нажал игрок кнопку, триггер сработал! В СП, то все классно, а оказалось, что радио триггеры глобальны и их видят все стороны и игроки в МП. Может кто натолкнет на мысль?


  • 0

#10 OFFLINE   Gonarx

Gonarx

    Рядовой

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

Отправлено 12 September 2022 - 22:29

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.

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

 

s1 = createTrigger ["EmptyDetector", getMarkerPos "Drop_2"]; 

s1 setTriggerArea [0, 0, 0, false]; 
s1 setTriggerActivation ["Bravo","NOT PRESENT", true]; 
s1 setTriggerStatements ["this", "hint 'trigger on'", ""];
 
Еще раз проверил, что false -  это локальный, но ничего не меняется, если я добавлю сюда "false", что вроде как по Вики должно сделать его локальным:
 
 
s1 = createTrigger ["EmptyDetector", [....], false]; 
 
Все равно его видят все. 

Сообщение отредактировал Gonarx: 12 September 2022 - 22:48

  • 0

#11 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1780 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 12 September 2022 - 22:40

У меня другая задача, мне нужно, что бы срабатывала активация триггера по действию игрока  и у каждого игрока, на каждой стороне. Конкретно нужно что бы игроки могли присоединять по необходимости к себе отряды (которые формально подчинены только им). Такое себе повторение High Command, так как работа этого модуля мне не нравиться.  Поэтому пытаюсь найти каким действием вызвать исполнение условий триггера - нажал игрок кнопку, триггер сработал! В СП, то все классно, а оказалось, что радио триггеры глобальны и их видят все стороны и игроки в МП. Может кто натолкнет на мысль?

Триггер может активировать любое условие, возвращающее true. Например, можно просто присвоить глобальной переменной true. Но возникает вопрос: зачем этот промежуточный шаг, если активировать триггер можно по радио?
 

 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.

Этой командой, если создавать триггер активируемый по рации,  то он то же будет глобальным, это я пробовал, возможно есть какие то доп. условия при создании, которые я не учел?
 
s1 = createTrigger ["EmptyDetector", getMarkerPos "Drop_2"]; 
s1 setTriggerArea [0, 0, 0, false]; 
s1 setTriggerActivation ["Bravo","NOT PRESENT", true]; 
s1 setTriggerStatements ["this", "hint 'trigger on'", ""];

Ты не передал аргумент makeGlobal, который отвечает за локальность триггера.


Сообщение отредактировал Schatten: 12 September 2022 - 22:41

  • 0

#12 OFFLINE   Gonarx

Gonarx

    Рядовой

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

Отправлено 12 September 2022 - 22:58

 

 

 

У меня другая задача, мне нужно, что бы срабатывала активация триггера по действию игрока  и у каждого игрока, на каждой стороне. Конкретно нужно что бы игроки могли присоединять по необходимости к себе отряды (которые формально подчинены только им). Такое себе повторение High Command, так как работа этого модуля мне не нравиться.  Поэтому пытаюсь найти каким действием вызвать исполнение условий триггера - нажал игрок кнопку, триггер сработал! В СП, то все классно, а оказалось, что радио триггеры глобальны и их видят все стороны и игроки в МП. Может кто натолкнет на мысль?

Триггер может активировать любое условие, возвращающее true. Например, можно просто присвоить глобальной переменной true. Но возникает вопрос: зачем этот промежуточный шаг, если активировать триггер можно по радио?
 

 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.

Этой командой, если создавать триггер активируемый по рации,  то он то же будет глобальным, это я пробовал, возможно есть какие то доп. условия при создании, которые я не учел?
 
s1 = createTrigger ["EmptyDetector", getMarkerPos "Drop_2"]; 
s1 setTriggerArea [0, 0, 0, false]; 
s1 setTriggerActivation ["Bravo","NOT PRESENT", true]; 
s1 setTriggerStatements ["this", "hint 'trigger on'", ""];

Ты не передал аргумент makeGlobal, который отвечает за локальность триггера.

 

Насколько я понимаю, это должно выглядеть правильно так:

 

 

s1 = createTrigger ["EmptyDetector", [....], false]; 

 
Все равно его видят все. 

 


  • 0

#13 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1780 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 12 September 2022 - 23:00

Насколько я понимаю, это должно выглядеть правильно так:
s1 = createTrigger ["EmptyDetector", [....], false];
Все равно его видят все.

Нет, не "видят" все. Триггер скорее всего создаётся у каждого игрока. Где создаётся триггер?


  • 0

#14 OFFLINE   Gonarx

Gonarx

    Рядовой

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

Отправлено 12 September 2022 - 23:00

 

Насколько я понимаю, это должно выглядеть правильно так:
s1 = createTrigger ["EmptyDetector", [....], false];
Все равно его видят все.

Нет, не "видят" все. Триггер скорее всего создаётся у каждого игрока. Где создаётся триггер?

 

В ините игрока s1


  • 0

#15 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1780 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 12 September 2022 - 23:03

В ините игрока s1

Всё, что там прописано, сработает у всех.
Попробуй так:

if (local this) then {
    ...
};

Сообщение отредактировал Schatten: 12 September 2022 - 23:04

  • 0

#16 OFFLINE   Gonarx

Gonarx

    Рядовой

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

Отправлено 12 September 2022 - 23:13

Schatten,

 

Из инита s1 то же самое получается - видят все, или ты имеешь в виду запустить это скриптом? стоит еще 2 безымянных играбельных юнита - они видят, у них инит пустой. 


Сообщение отредактировал Gonarx: 12 September 2022 - 23:14

  • 0

#17 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1780 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 12 September 2022 - 23:14

Из инита s1 то же самое получается - видят все

Что написано в init'ах?
 

или ты имеешь в виду запустить это скриптом?

Без разницы.


  • 0

#18 OFFLINE   Gonarx

Gonarx

    Рядовой

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

Отправлено 12 September 2022 - 23:19

В ините игрока s1:

 

if (local this) then {s1 =createTrigger ["EmptyDetector", [1713.52,5492.68,0], false]; 

s1 setTriggerArea [0, 0, 0, false]; 
s1 setTriggerActivation ["Bravo","NOT PRESENT", true]; 
s1 setTriggerStatements ["this", "hint 'trigger on'", ""];};
 
У других игроков ничего - стоит всего 3 юнита на карте - все играбельные. 

Сообщение отредактировал Gonarx: 12 September 2022 - 23:23

  • 0

#19 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1780 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 13 September 2022 - 01:11

или ты имеешь в виду запустить это скриптом?

Без разницы.

Похоже, всё-таки есть разница, поэтому код создания триггера перенеси в initPlayerLocal.sqf.


  • 0

#20 OFFLINE   Gonarx

Gonarx

    Рядовой

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

Отправлено 13 September 2022 - 23:18

Ok, попробую на днях, в командировке, в пятницу отпишу! Спасибо. 


  • 0




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