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

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

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

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

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

Отправка сообщения из кастомного интерфейса

Допустим, создан интерфейс, который открывается по нажатию кнопки, и в нем есть поле ввода и кнопка "Отправить".

Далее этот интерфейс закрывается, и появляется всплывающее сообщение с отправленным текстом.

 

Как реализовать саму отправку сообщения на серверную сторону, откуда сервер уже разошлет это сообщение всем игрокам?

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


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

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

  • 0
1 час назад, SinSin сказал:

Допустим, создан интерфейс, который открывается по нажатию кнопки, и в нем есть поле ввода и кнопка "Отправить".

Далее этот интерфейс закрывается, и появляется всплывающее сообщение с отправленным текстом.

 

Как реализовать саму отправку сообщения на серверную сторону, откуда сервер уже разошлет это сообщение всем игрокам?

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

Сам такого не проворачивал пока, надобности не было, но чисто в теории прикидываю насколько реально. Вызов вида 'сервер-клиент' делал уже, тут по идее примерно также должно быть.

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

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


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



  • 0

123new Через RPC вестимо

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

 

достатночно посмотреть внутри на мод DayZ-Expansion-Chat

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


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

BorizzK там мне единственное что не нравится - завязка на функционале CF. Как-то пытался вникнуть, но сам себя больше в тупик загнал. Без него я уже делал, от сервера работало. От клиента по идее также, ток хз как объект сервера определять в данном случае

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


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

123new Да можно свое нагромоздить перед CF

Я не заморачивался - не нужно просто было

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


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

Сколько ни искал информации по тому, как сделать так, чтобы созданный в Workbench layout можно было отобразить на экране, не нашел ничего. Прошу помощи!

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


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

SinSin Плохо искал. Любой мод с гуи возьми и поиск в блокноте по файлам и папкам с именем слоя.

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


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

SinSin Плохо искал. Любой мод с гуи возьми и поиск в блокноте по файлам и папкам с именем слоя.

Любой мод, увы, не объясняет принципы работы. Я не профессионал, и не знаю многие базовые вещи. Увы, по скриптингу в DayZ нет ничего практически, уж тем более по интерфейсам и горячим клавишам. Что-то смог понять, что-то нет. Речь шла именно о руководствах.

 

Собрав инфу во многих модах, я дошел до следующего:

 

В 3_Game/Constants.c:

static const int MY_CUSTOM_INTERFACE_ID							=	348743457437;

 

В 5_Mission/MissionGameplay.c

modded class MissionGameplay {

    private ref ShowMyCustomInterface m_ShowMyCustomInterface;

    override void OnKeyPress(int key) {
        switch (key) {
            case KeyCode.KC_N: {

                if ( !g_Game.GetUIManager().IsMenuOpen( MENU_CHAT ) && !g_Game.GetUIManager().IsMenuOpen( MY_CUSTOM_INTERFACE_ID ) && g_Game.GetUIManager().GetMenu() == NULL )
                {
                    g_Game.GetUIManager().EnterScriptedMenu(MY_CUSTOM_INTERFACE_ID, NULL);
                    g_Game.GetMission().PlayerControlDisable(INPUT_EXCLUDE_INVENTORY);
                    g_Game.GetUIManager().ShowUICursor(true);
                    g_Game.GetUIManager().ShowCursor(true);
                    g_Game.GetInput().ChangeGameFocus( 1 );
                    g_Game.GetMission().GetHud().Show( false );

                    GetGame().GetMission().PlayerControlDisable(INPUT_EXCLUDE_ALL);
                    GetGame().GetUIManager().ShowUICursor( true );
                    GetGame().GetMission().GetHud().Show( false );

                    m_ShowMyCustomInterface = new ShowMyCustomInterface();

                }
                break;
            }

            case KeyCode.KC_ESCAPE: {

                if ( !g_Game.GetUIManager().IsMenuOpen( MENU_CHAT ) && g_Game.GetUIManager().IsMenuOpen( MY_CUSTOM_INTERFACE_ID ) )
                {
                    closeMyCustomInterface();
                }
                break;
            }
        }
    }

    void closeMyCustomInterface()
    {
        g_Game.GetUIManager().ShowCursor(false);
        g_Game.GetUIManager().ShowUICursor(false);
        g_Game.GetInput().ResetGameFocus();
        g_Game.GetMission().PlayerControlEnable();
        g_Game.GetUIManager().Back();
        g_Game.GetMission().GetHud().Show( true );

        GetGame().GetMission().PlayerControlEnable();
        GetGame().GetInput().ResetGameFocus();
        GetGame().GetUIManager().ShowUICursor( false );
        GetGame().GetMission().GetHud().Show( true );
        return;
    }
}

class ShowMyCustomInterface
{
   Widget m_WidgetRoot;
    void ShowMyCustomInterface()
    {
        m_WidgetRoot = GetGame().GetWorkspace().CreateWidgets("My_Custom_Interface/My_Custom_Interface.layout");
    }

    void ~ShowMyCustomInterface()
    {
        delete m_WidgetRoot;
    }
}

 

При нажатии на N интерфейс появляется, блчится управление, появляется курсор. Однако при нажатии на ESC нет реакции.

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


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

Любой мод, увы, не объясняет принципы работы. Я не профессионал, и не знаю многие базовые вещи. Увы, по скриптингу в DayZ нет ничего практически, уж тем более по интерфейсам и горячим клавишам. Что-то смог понять, что-то нет. Речь шла именно о руководствах.

 

Собрав инфу во многих модах, я дошел до следующего:

 

В 3_Game/Constants.c:


static const int MY_CUSTOM_INTERFACE_ID							=	348743457437;

 

В 5_Mission/MissionGameplay.c


modded class MissionGameplay {

    private ref ShowMyCustomInterface m_ShowMyCustomInterface;

    override void OnKeyPress(int key) {
        switch (key) {
            case KeyCode.KC_N: {

                if ( !g_Game.GetUIManager().IsMenuOpen( MENU_CHAT ) && !g_Game.GetUIManager().IsMenuOpen( MY_CUSTOM_INTERFACE_ID ) && g_Game.GetUIManager().GetMenu() == NULL )
                {
                    g_Game.GetUIManager().EnterScriptedMenu(MY_CUSTOM_INTERFACE_ID, NULL);
                    g_Game.GetMission().PlayerControlDisable(INPUT_EXCLUDE_INVENTORY);
                    g_Game.GetUIManager().ShowUICursor(true);
                    g_Game.GetUIManager().ShowCursor(true);
                    g_Game.GetInput().ChangeGameFocus( 1 );
                    g_Game.GetMission().GetHud().Show( false );

                    GetGame().GetMission().PlayerControlDisable(INPUT_EXCLUDE_ALL);
                    GetGame().GetUIManager().ShowUICursor( true );
                    GetGame().GetMission().GetHud().Show( false );

                    m_ShowMyCustomInterface = new ShowMyCustomInterface();

                }
                break;
            }

            case KeyCode.KC_ESCAPE: {

                if ( !g_Game.GetUIManager().IsMenuOpen( MENU_CHAT ) && g_Game.GetUIManager().IsMenuOpen( MY_CUSTOM_INTERFACE_ID ) )
                {
                    closeMyCustomInterface();
                }
                break;
            }
        }
    }

    void closeMyCustomInterface()
    {
        g_Game.GetUIManager().ShowCursor(false);
        g_Game.GetUIManager().ShowUICursor(false);
        g_Game.GetInput().ResetGameFocus();
        g_Game.GetMission().PlayerControlEnable();
        g_Game.GetUIManager().Back();
        g_Game.GetMission().GetHud().Show( true );

        GetGame().GetMission().PlayerControlEnable();
        GetGame().GetInput().ResetGameFocus();
        GetGame().GetUIManager().ShowUICursor( false );
        GetGame().GetMission().GetHud().Show( true );
        return;
    }
}

class ShowMyCustomInterface
{
   Widget m_WidgetRoot;
    void ShowMyCustomInterface()
    {
        m_WidgetRoot = GetGame().GetWorkspace().CreateWidgets("My_Custom_Interface/My_Custom_Interface.layout");
    }

    void ~ShowMyCustomInterface()
    {
        delete m_WidgetRoot;
    }
}

 

При нажатии на N интерфейс появляется, блчится управление, появляется курсор. Однако при нажатии на ESC нет реакции.

Ради примера возьми наипрстецкий мод:
https://steamcommunity.com/sharedfiles/filedetails/?id=1663588331
там всего лишь окошко с кнопочками и полями ввода в гл. меню, реализация более чем проста, думаю затруднений не возникнет.

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
8 минут назад, 123new сказал:

 

Этот пример ничем, к сожалению, не поможет, потому что вызов происходит совершенно иным образом в главном меню, а не через нажатие кнопки уже в мире.

Как создавать Layout в Workbench, я уже разобрался.

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


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

 

Этот пример ничем, к сожалению, не поможет, потому что вызов происходит совершенно иным образом в главном меню, а не через нажатие кнопки уже в мире.

Как создавать Layout в Workbench, я уже разобрался.

так а разница? ну создай ты layout в момент соединения с сервером, или же в момент когда у игрока в классе playerbase событие OnConnected произойдет, да вызывай его уже скрытием и показом на экран. Смысл то от этого не меняется, если элементы меню есть и записаны в переменные, с этого момента ими можно как хочешь крутить.
Ради интереса трейдер мод копни, если не боишься кучи сложного кода, там как раз вызов на клиенте в процессе игры меню трейдера, судя с выше запрошенного как раз то что ты ищешь.

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

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


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

SinSin Да в жопу эти ИД и т.п. выкинь.

Что ты как маленький, - есть прото функция .ShowScriptedMenu

 

//хот кей

MyHotKey1 = 50;

 

//Меню

class SimpleMenu extends UIScriptedMenu
{
	private TextWidget MyText;

	override Widget Init()
	{
		layoutRoot	=	GetGame().GetWorkspace().CreateWidgets( "SimpleMenu.layout" );
		MyText		=	TextWidget.Cast(layoutRoot.FindAnyWidget( "MyText" ));
		return layoutRoot;
	}
}

//Обработчик

private	SimpleMenu	m_SimpleMenu;
......
void OnKeyPress( int v_Key )
{
	if ( v_Key == KeyCode.KC_ESCAPE )
	{
		if ( m_SimpleMenu )
		{
			GetGame().GetUIManager().Back();
		}
	}
	switch ( v_Key )
	{
		case MyHotKey1:
			if ( GetGame().GetUIManager().GetMenu() )
			{
				break;
			}
			m_SimpleMenu = new SimpleMenu();
			GetGame().GetUIManager().ShowScriptedMenu( m_SimpleMenu, NULL );
		break;
	}
}

В конструкторе меню, если оч надо - блочь там управление, скрывай ХАД... В деструкторе разблочь,покажи.

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


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

SinSin А ты в общем то и не меню показывал а ХАД, с курсором.

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


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

NoNameUltima кстати, всегда забывал спросить, а вот эту 50 в

MyHotKey1 = 50;

откуда брать или как вычислять?

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

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


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

123new Google dik key потом калькулятор 16ричное в десятичное.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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