Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
Sign in to follow this  
Sayrex

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

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

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

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

Share this post


Link to post
Share on other sites

19 answers to this question

Recommended Posts

  • 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;
};

 

Edited by BigCrazyCat (see edit history)

Share this post


Link to post
Share on other sites



  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

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

 

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

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

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

Edited by Sayrex (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

Edited by BigCrazyCat (see edit history)

Share this post


Link to post
Share on other sites
  • 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;
    };

Share this post


Link to post
Share on other sites
  • 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;
    };

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

Share this post


Link to post
Share on other sites
  • 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;
            };
    };
 

Share this post


Link to post
Share on other sites
  • 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 закрываем и не можем открыть пока в триггере не останется кто то один

Share this post


Link to post
Share on other sites
  • 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 диалога, но всё равно закрываются все диалоги.)

Share this post


Link to post
Share on other sites
  • 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

Share this post


Link to post
Share on other sites
  • 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.

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

 

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Проверка на то, что игрок находится в транспорте
if (vehicle player != player) then {};
Edited by BigCrazyCat (see edit history)

Share this post


Link to post
Share on other sites
  • 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;
	};

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By ЭтоЯ
      Не получается закрыть транспорт, хотя кнопка есть. 
       
       4:13:42 File mpmissions\DayZ_Epoch_11.Chernarus\custom\local_lockUnlock.sqf, line 19
       4:13:42 Suspending not allowed in this context
       
      Попробовал файл поменять на оригинальный - не помогло.
    • By 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 Деньги в банк не падают, и не снимаются, просто ничего не происходит!
       
      Вот что в игре

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

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

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

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.