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

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

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

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

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

Меняющийся LoadingScreen

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

Привет, в этой теме расскажу вам как сделать меняющийся фон на экране загрузки.

Каждый раз при входе на сервер/игру/в очереди, у вас будет другой фон.

Начнем, будем модифицировать класс LoadingScreen.
код:

modded class LoadingScreen
{
	ref Widget m_WidgetRoot;
	TextWidget m_TextWidgetTitle;
	TextWidget m_TextWidgetStatus;
	TextWidget m_ModdedWarning;
	ImageWidget m_ImageWidgetBackground;
	DayZGame m_DayZGame;
	float m_LastProgressUpdate;
	
	ImageWidget m_ImageLogoMid;
	ImageWidget m_ImageLogoCorner;
	ImageWidget m_ImageLoadingIcon;
	ImageWidget m_ImageBackground;
	ProgressBarWidget m_ProgressLoading;
	float m_ImageLoadingIconRotation;
	TextWidget m_ProgressText;
	
	int m_Counter;
	ref Timer m_Timer;
	ref UiHintPanelLoading m_HintPanel;

	//
	ImageWidget m_Loading_aod;
	static int TotalBackgroundsNumber;
    static int RandomBackgroundNumber;

	static string GetRandomLoadingBackground()
    {
        TStringArray backgrounds = new TStringArray;
        backgrounds.Insert("DEADZONE/gui/imagesets/loading/loadingscreen_1.edds");
        backgrounds.Insert("DEADZONE/gui/imagesets/loading/loadingscreen_2.edds");
        backgrounds.Insert("DEADZONE/gui/imagesets/loading/loadingscreen_3.edds");
		backgrounds.Insert("DEADZONE/gui/imagesets/loading/loadingscreen_4.edds");
		backgrounds.Insert("DEADZONE/gui/imagesets/loading/loadingscreen_5.edds");
		backgrounds.Insert("DEADZONE/gui/imagesets/loading/loadingscreen_6.edds");
		backgrounds.Insert("DEADZONE/gui/imagesets/loading/loadingscreen_7.edds");
		backgrounds.Insert("DEADZONE/gui/imagesets/loading/loadingscreen_8.edds");
                
        TotalBackgroundsNumber = backgrounds.Count();
        RandomBackgroundNumber = Math.RandomInt( 0, TotalBackgroundsNumber - 1 );
            
        return backgrounds[RandomBackgroundNumber];
    }
	//

	void LoadingScreen(DayZGame game)
	{
		m_DayZGame = game;
		
		m_WidgetRoot = game.GetLoadingWorkspace().CreateWidgets("DEADZONE/gui/dz_loading.layout");
		Class.CastTo(m_ImageLogoMid, m_WidgetRoot.FindAnyWidget("ImageLogoMid"));
		Class.CastTo(m_ImageLogoCorner, m_WidgetRoot.FindAnyWidget("ImageLogoCorner"));
		
		Class.CastTo(m_TextWidgetTitle, m_WidgetRoot.FindAnyWidget("TextWidget"));
		Class.CastTo(m_TextWidgetStatus, m_WidgetRoot.FindAnyWidget("StatusText"));
		Class.CastTo(m_ImageWidgetBackground, m_WidgetRoot.FindAnyWidget("ImageBackground"));
		Class.CastTo(m_ImageLoadingIcon, m_WidgetRoot.FindAnyWidget("ImageLoadingIcon"));
		Class.CastTo(m_ModdedWarning, m_WidgetRoot.FindAnyWidget("ModdedWarning"));

		m_Loading_aod = ImageWidget.Cast( m_WidgetRoot.FindAnyWidget("Loading_aod") );
		m_Loading_aod.LoadImageFile( 0, GetRandomLoadingBackground() );
		
		m_ProgressLoading = ProgressBarWidget.Cast(m_WidgetRoot.FindAnyWidget("LoadingBar"));
		
		string tmp;
		m_ProgressText = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("ProgressText"));
		if (GetGame())
		{
			m_ProgressText.Show(GetGame().CommandlineGetParam("loadingTest", tmp));
		}
		m_WidgetRoot.FindAnyWidget("notification_root").Show(false);
				
		m_ModdedWarning.Show(g_Game.ReportModded());
		m_ImageLogoMid.Show(true);
		m_ImageLogoCorner.Show(false);
		
		m_ImageWidgetBackground.Show(true);		
		m_Counter = 0;
				
		// lighten up your desktop
		game.GetBacklit().LoadingAnim();
		
		ProgressAsync.SetProgressData(m_ProgressLoading);
		ProgressAsync.SetUserData(m_ImageBackground);
	}

	//! DEPRECATED
	void OnTimer();
	
	void Inc()
	{
		m_LastProgressUpdate = m_DayZGame.GetTickTime();
		m_Counter++;
		if (m_Counter == 1)
		{
			Show();
		}
	}
	
	void Dec()
	{
		m_Counter = m_Counter - 1;
	
		if (m_Counter <= 0)
		{
			m_Counter = 0;
			EndLoading();
			m_HintPanel = null;
		}
	}
	
	void EndLoading()
	{
		ProgressAsync.SetProgressData(null);
		ProgressAsync.SetUserData(null);
		m_WidgetRoot.Show(false);
		GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Call(g_Game.CheckDialogs);
	}
	
	bool IsLoading()
	{
		return m_WidgetRoot.IsVisible();
	}
	
	void SetTitle(string title)
	{
		m_TextWidgetTitle.SetText(title);
	}
	
	void SetStatus(string status)
	{
		m_TextWidgetStatus.SetText(status);
	}
	
	void SetProgress(float val)
	{
		float time_delta = m_DayZGame.GetTickTime() - m_LastProgressUpdate;
		
		m_LastProgressUpdate = m_DayZGame.GetTickTime();
	}
	
	void OnUpdate(float timeslice)
	{

	}
	
	void ShowEx(DayZGame game)
	{
		if (!m_HintPanel)
		{
			m_HintPanel					= new UiHintPanelLoading(m_WidgetRoot.FindAnyWidget("hint_frame"));
			m_HintPanel.Init(game);
		}

		Show();
	}
	
	void Show()
	{
		Widget lIcon = m_ImageBackground;
		Widget pText = m_ProgressLoading;
		m_ProgressText.SetText("");
		m_ProgressLoading.SetCurrent(0.0);
		m_ImageBackground.SetMaskProgress(0.0);
		
		if (!m_WidgetRoot.IsVisible())
		{
			if (m_DayZGame.GetUIManager().IsDialogVisible())
			{
				m_DayZGame.GetUIManager().HideDialog();
			}
			
			if (m_DayZGame.GetMissionState() == DayZGame.MISSION_STATE_MAINMENU)
			{
				m_ImageLogoMid.Show(false);
				m_ImageLogoCorner.Show(false);				
				m_ImageWidgetBackground.Show(true);		
				m_TextWidgetStatus.Show(true);
			}
			else
			{
				m_ImageLogoMid.Show(true);
				m_ImageLogoCorner.Show(false);
				m_ImageWidgetBackground.Show(true);
				m_TextWidgetStatus.Show(false);
			}
			
			m_WidgetRoot.Show(true);
			m_TextWidgetTitle.SetText("");
			m_TextWidgetStatus.SetText("");
		}
		
		ProgressAsync.SetProgressData(pText);
		ProgressAsync.SetUserData(lIcon);
	}
	
	void Hide(bool force)
	{
		if (force)
		{
			while (m_Counter > 0)
			{
				Dec();
			}
		}

		if (m_Counter <= 0)
		{
			m_WidgetRoot.Show(false);
			ProgressAsync.SetUserData(null);
			ProgressAsync.SetProgressData(null);
			m_HintPanel = null;
		}
	}
};

Что нам нужно изменить(иметь) для своего сервера?
1. Фоны для экрана загрузки в формате edds (как их "сделать" ниже есть спойлер)
2. Изменить пути к этим фонам (edds) соответственно и к вашему "layout" (думаю тут всё понятно)
Пути к фонам указываются в массиве: backgrounds, к примеру вам необходимо добавить новый фон, пишем следующее:
backgrounds.Insert("ТУТ ВАШ ПУТЬ К ФАЙЛУ В ФОРМАТЕ edds, ЕСЛИ МНОГО ФОНОВ ЗАМЕНЯЕМ МОИ НА ВАШИ СООТВЕСТВЕННО");

Путь к файлу в формате layout меняется тут:
m_WidgetRoot = game.GetLoadingWorkspace().CreateWidgets("ТУТ ВАШ ПУТЬ К ФАЙЛУ В ФОРМАТЕ .layout");

3. Закидываем скрипт в папку клиентского мода по пути scripts/3_Game
4. Проверяем!

Получить фон в формате .edds

Скрытый текст

 заранее заготовьте ваши картинки в формате png

1. Открываем "DayZ Tools"
2. Открываем в нём "Workbench"
3. Слева вверху находим "Resource browser"
4. Нажимаем ПКМ по "CurrentDir" - "Open file location"
5. Откроется проводник, переносим туда наши изображение в формате png
6. Открываем обратно "Workbench" (есть такая вероятность что он крашнется при проведении пятого пункта, ну ничего, запускаем его заново) ?
 7. Выделяем (выбираем) наши изображения 
8. Нажимаем ПКМ и выбираем "Register resource and import"
9. Профит в папке будут лежать ваши png и картинки в формате edds, png можно удалять, а edds вам соответственно нужны ?

 

p.s.

Скрытый текст

Возможно вы столкнетесь с такой проблемой, вроде бы всё сработало, но далее при загрузке на сервер когда появляется отсчёт до входа на сервер то там ничего не поменяется, чтобы это исправить надо реализовать такой же "скрипт" для остальных layout загрузок, соответственно для dialog_login_time.layout , dialog_queue_position.layout. Что вам нужно будет добавить, это массив с путями до изображений, переменные

ImageWidget backgroundIMG;

static int TotalBackgroundsNumber;

static int RandomBackgroundNumber; 

и следующий код в Init() после всех "обработанных виджетов"
для dialog_login_time и dialog_queue_position:

backgroundIMG = ImageWidget.Cast( layoutRoot.FindAnyWidget("Background") );

backgroundIMG.LoadImageFile( 0, GetRandomLoadingBackground() );

 

Всё будет работать! Удачи

 

 Спасибо! Если кому-то понадобилось, поставьте лайк ?

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


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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка