Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
Sayrex

Закрытие диалогового окна

Всем привет! Ребят, нужна помощь.... Первый игрок открывает определённое диалоговое окно. Если в радиусе 10-ти метров появляется другой игрок, то у первого игрока закрывается то самое диалоговое окно... И окно нельзя вновь открыть пока в радиусе не останется только один игрок. Как то так... Надеюсь, понятно объяснил...))

Как такое можно осуществить? Может быть через триггер как то? 

Буду очень благодарен за помощь! Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

 

Этот код работает, но закрывает абсолютно все диалоги в радиусе 10м :) Попробовал прописать

closeDialog 39400; 
где "39400" это idd диалога, но всё равно закрываются все диалоги.)

Тогда через closeDisplay.

1. В диалоге добавляем в класс следующий код:

onLoad = "uiNamespace setVariable ['MyDialog', _this select 0]";

В скрипте определяем диалог:

_display = uiNameSpace getVariable "MyDialog";

Или другой вариант. Определяем диалог по IDD через findDisplay.

_display = findDisplay 39400;

2. Закрываем диалог:

_display closeDisplay 1;

Полностью код будет выглядеть так:

while {true} do { 
  _nearbyPlayers = count nearestObjects [player, ["CAManBase"], 10]; 
  if ((_nearbyPlayers) > 1) then { 
    _display = findDisplay 39400;
    if (!isNull _display) then {
        _display closeDisplay 1;
    };
  }; 
  uiSleep 1;
};

 

Изменено пользователем BigCrazyCat (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





  • 0

Добавьте следующий код в начало вашего скрипта, после секции private:

_nearbyPlayers = count nearestObjects [player, ["CAManBase"], 10];
if ((_nearbyPlayers) > 1) exitWith {cutText [format["Вы не можете открыть диалоговое окно, если рядом находится игрок"], "PLAIN DOWN"];}; 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

BigCrazyCat сказал(а) 05 Фев 2017 - 19:44:

 

Добавьте следующий код в начало вашего скрипта, после секции private:

_nearbyPlayers = count nearestObjects [player, ["CAManBase"], 10];if ((_nearbyPlayers) > 1) exitWith {cutText [format["Вы не можете открыть диалоговое окно, если рядом находится игрок"], "PLAIN DOWN"];};

Спасибо за ответ, но немного не то... Нужно сделать чтобы диалоговое окно автоматом закрывалось, если в определённый радиус(или триггер), заходит другой игрок. Вы же дали код который просто не даст открыться окну если рядом есть кто то ещё.

Изменено пользователем Sayrex (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо за ответ, но немного не то... Нужно сделать чтобы диалоговое окно автоматом закрывалось, если в определённый радиус(или триггер), заходит другой игрок. Вы же дали код который просто не даст открыться окну если рядом есть кто то ещё.

Тогда можно через цикл и closeDialog.

while {true} do { 
  _nearbyPlayers = count nearestObjects [player, ["CAManBase"], 10]; 
  if ((_nearbyPlayers) > 1) then { 
    closeDialog 1; // для эмуляции "ОК" или 2 для "Отмена" 
  }; 
  uiSleep 3;
};

Но может есть более верное решение.

Изменено пользователем BigCrazyCat (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо за ответ, но немного не то... Нужно сделать чтобы диалоговое окно автоматом закрывалось, если в определённый радиус(или триггер), заходит другой игрок. Вы же дали код который просто не даст открыться окну если рядом есть кто то ещё.

 

У тебя есть скрипт, который открывает диалог(создает диалоговое окно)

Как то так

_dialog    =    createDialog _dialog_name;

вставляешь цикл после открытия(где то ниже открытия)

//пока существует диалог
while (_dialog) do
    {
        if ( (count nearestObjects [player, ["CAManBase"], 10]) > 0) exitWith
            {closeDialog 1;};
        uiSleep 0.5;
    }; 

   

P.S.

Функция поиска -

count nearestObjects [player, ["CAManBase"], 10]

Вернет любые модели, в т.ч. и ИИ(ботов), и НПЦ.

Если необходима проверка, только на игроков, то так

//пока существует диалог
Private ["_close"];
while (_dialog) do
    {
        _close    =    false;
        {
            if (isPlayer _x) then
                {
                    if ( (player distance _x) < 10 ) exitWith
                        {
                            _close    =    true;
                            closeDialog 1;
                        };
                };
            if (_close) exitWith {};
        } forEach playableUnits;
        uiSleep 0.5;
    };

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Тогда можно через цикл и closeDialog.

while {true} do { 
  _nearbyPlayers = count nearestObjects [player, ["CAManBase"], 10]; 
  if ((_nearbyPlayers) > 1) then { 
    closeDialog 1; // для эмуляции "ОК" или 2 для "Отмена" 
  }; 
  uiSleep 3;
};

Но может есть более верное решение.

 

 

У тебя есть скрипт, который открывает диалог(создает диалоговое окно)

Как то так

_dialog    =    createDialog _dialog_name;

вставляешь цикл после открытия(где то ниже открытия)

//пока существует диалог
while (_dialog) do
    {
        if ( (count nearestObjects [player, ["CAManBase"], 10]) > 0) exitWith
            {closeDialog 1;};
        uiSleep 0.5;
    }; 

   

P.S.

Функция поиска -

count nearestObjects [player, ["CAManBase"], 10]

Вернет любые модели, в т.ч. и ИИ(ботов), и НПЦ.

Если необходима проверка, только на игроков, то так

//пока существует диалог
Private ["_close"];
while (_dialog) do
    {
        _close    =    false;
        {
            if (isPlayer _x) then
                {
                    if ( (player distance _x) < 10 ) exitWith
                        {
                            _close    =    true;
                            closeDialog 1;
                        };
                };
            if (_close) exitWith {};
        } forEach playableUnits;
        uiSleep 0.5;
    };

Спасибо! Проверю, отпишусь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

*Код вставлять в самый низ скрипта создания диалога.

Или используя функция spawn, после строки создания диалога -

 

1 вариант

[_dialog] spawn
    {
        Private ["_dialog"];
        _dialog    =    (_this select 0);
        while (_dialog) do
            {
                if ( (count nearestObjects [player, ["CAManBase"], 10]) > 0) exitWith
                    {closeDialog 1;};
                uiSleep 0.5;
            };
    };


 

2 вариант

[_dialog] spawn
    {
        Private ["_dialog", "_close"];
        _dialog    =    (_this select 0);
        while (_dialog) do
            {
                _close    =    false;
                {
                    if (isPlayer _x) then
                        {
                            if ( (player distance _x) < 10 ) exitWith
                                {
                                    _close    =    true;
                                    closeDialog 1;
                                };
                        };
                    if (_close) exitWith {};
                } forEach playableUnits;
                uiSleep 0.5;
            };
    };
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

*Код вставлять в самый низ скрипта создания диалога.

Или используя функция spawn, после строки создания диалога -

 

1 вариант

[_dialog] spawn
    {
        Private ["_dialog"];
        _dialog    =    (_this select 0);
        while (_dialog) do
            {
                if ( (count nearestObjects [player, ["CAManBase"], 10]) > 0) exitWith
                    {closeDialog 1;};
                uiSleep 0.5;
            };
    };


 

2 вариант

[_dialog] spawn
    {
        Private ["_dialog", "_close"];
        _dialog    =    (_this select 0);
        while (_dialog) do
            {
                _close    =    false;
                {
                    if (isPlayer _x) then
                        {
                            if ( (player distance _x) < 10 ) exitWith
                                {
                                    _close    =    true;
                                    closeDialog 1;
                                };
                        };
                    if (_close) exitWith {};
                } forEach playableUnits;
                uiSleep 0.5;
            };
    };
 

Что то не хочет работать, к сожалению.... Не закрывает окно. А может быть как то через триггер это сделать можно? Если в триггере больше чем один игрока, то окно dialog_name закрываем и не можем открыть пока в триггере не останется кто то один

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Тогда можно через цикл и closeDialog.

while {true} do { 
  _nearbyPlayers = count nearestObjects [player, ["CAManBase"], 10]; 
  if ((_nearbyPlayers) > 1) then { 
    closeDialog 1; // для эмуляции "ОК" или 2 для "Отмена" 
  }; 
  uiSleep 3;
};

Но может есть более верное решение.

Этот код работает, но закрывает абсолютно все диалоги в радиусе 10м :)  Попробовал прописать 

closeDialog 39400; 

где "39400"  это idd диалога, но всё равно закрываются все диалоги.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

Или другой вариант. Определяем диалог по IDD через findDisplay.

while {true} do { 
  _nearbyPlayers = count nearestObjects [player, ["CAManBase"], 10]; 
  if ((_nearbyPlayers) > 1) then { 
    _display = findDisplay 39400;
    if (!isNull "_display") then {
        _display closeDisplay 1;
    };
  }; 
  uiSleep 1;
};

Привет! Не работает(( ошибку выдаёт:

12:37:30 Error in expression <n { 
_display = findDisplay 39400;
if (!isNull "_display") then {
_display close>
12:37:30   Error position: <isNull "_display") then {
_display close>
12:37:30   Error isnull: Тип Строка, ожидался Объект,Группа,Script,Config entry,Display (dialog),Control,Network Object,Task,Location

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

Привет! Не работает(( ошибку выдаёт:

12:37:30 Error in expression <n { 
_display = findDisplay 39400;
if (!isNull "_display") then {
_display close>
12:37:30   Error position: <isNull "_display") then {
_display close>
12:37:30   Error isnull: Тип Строка, ожидался Объект,Группа,Script,Config entry,Display (dialog),Control,Network Object,Task,Location

Без кавычек должно быть - _display.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Без кавычек должно быть - _display.

только сейчас получилось протестировать. И всё заработало! Просто огромнейшее тебе спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

только сейчас получилось протестировать. И всё заработало! Просто огромнейшее тебе спасибо!

Вопрос решен ставьте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Без кавычек должно быть - _display.

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

 

Вопрос решен ставьте.

уже поставил)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вопрос решен ставьте.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Sayrex сказал(а) 11 Фев 2017 - 15:24:

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

Проверка на то, что игрок находится в транспорте
if (vehicle player != player) then {};
Изменено пользователем BigCrazyCat (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

Проверка на то, что игрок находится в транспорте

if (vehicle player != player) then {};

Вот так, правильно?

	while {true} do {
		_nearbyPlayers = count nearestObjects [player, ["CAManBase"], 30];
		if (vehicle player != player) then {};
		if ((_nearbyPlayers) > 1) then {
			_display = findDisplay 39400;
			if (!isNull _display) then {
				_display closeDisplay 1;
			};
		};
	uiSleep 1;
	};

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: ЭтоЯ
      Не получается закрыть транспорт, хотя кнопка есть. 
       
       4:13:42 File mpmissions\DayZ_Epoch_11.Chernarus\custom\local_lockUnlock.sqf, line 19
       4:13:42 Suspending not allowed in this context
       
      Попробовал файл поменять на оригинальный - не помогло.
    • Автор: Alexis
      Вообщем, совмещаю я систему 2,0 с 3,0, вообщем все работает, в бд таблица пишется, если через бд закидывать деньги в игре они появляются! Но есть проблема, при попытке вызвать окно банка выбивает такую ошибку!
      Error in expression <dialog = createdialog "ALDialog"; call ALDialogUpdateAmounts; waitUntil { !dia> Error position: <ALDialogUpdateAmounts; waitUntil { !dia> Error Undefined variable in expression: alialogupdateamounts File mpmissions\__CUR_MP.Chernarus\Gold\al_dialog.sqf, line 3 Деньги в банк не падают, и не снимаются, просто ничего не происходит!
       
      Вот что в игре

       
      Есть у кого какие идеи?
    • Автор: SpiritWolf
      Ребят, подскажите как в шедулере Battleye сделать автокик с сервера, к примеру, за 30 секунд до рестарта и ставился пароль?
    • Автор: BanDizel
      Как изменить окно с черно из-за которого практически ничего не видно на зеленое ?

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

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: Alex39
      Привет всем, сразу скажу что не знаю так не знаю, суть  вот в чем, нужно сместить диалоговое окно по центру, но в этом не понимаю, кто может помочь в этом? Прилагаю скрипт и видео
       
       
       
       
       
       
       
      http://youtu.be/sla6oRmIpCg
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.