Setting Up Flash

From Valve Developer Community
< Ru‎ | Dota 2 Workshop Tools
Revision as of 11:21, 9 August 2014 by Justincase (talk | contribs) (Created page with "== Обзор == Элементы пользовательского интерфейса в Dota 2 созданы с помощью Adobe Flash CS5. Более поздние в...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Обзор

Элементы пользовательского интерфейса в Dota 2 созданы с помощью Adobe Flash CS5. Более поздние версии этого инструмента тоже должны работать, но эти инструкции относятся к CS5.

Каждый элемент Пользовательского Интерфейса ("далее ПИ") состоит из определенного количества файлов:

  • Папка с контентом вашего аддона(Пример: dota_ugc\content\dota_addons\holdout_example\flash) содержит:
    • Файл с расширением .fla, содержит пользовательские настройки управления и общую схему ПИ.
    • Соответствующий файл с расширением .as (Actionscript 3.0) в нем записаны логические связи между элементами ПИ и игровым движком.
  • Папка (Пример: dota_ugc\game\dota_addons\holdout_example\resource\flash3) для вашего аддона содержит:
    • Файл с расширением .swf. Это откомпилированная версия двух вышеуказанных файлов, которую использует движок в реальном времени.

ПИ Манифест (Manifest)

custom_ui.txt содержит список всех .swf файлов для загрузки во время запуска вашего аддона. Вы также должны указать уникальное значение глубины ("очень похоже на слои в графических редакторах") в которую будет загружаться каждый элемент. Это предопределяет порядок в котором элементы будут показаны на экране, поэтому если вы хотите чтобы элемент был над чем-то другим, удостоверьтесь что числовое значение глубины элемента больше. Рассмотрим dota_ugc\game\dota_addons\holdout_example\resource\flash3\custom_ui.txt в качестве примера.

Образцы файлов

Образец Flash-файлов для Holdout mid-round панели сводки и панели итогов можно найти в: dota_ugc\content\dota_addons\holdout_example\flash

Конфигурация файлов

Во время создания Flash-файла, рекомендуется копировать пустой образец из dota_ugc\content\dota_addons\addon_template\flash в вашу личную flash папку аддона, а после выполнить следующие настройки:

  • Переименуйте .fla и .as файлы как вам удобно.
  • Откройте .fla во Flash CS5
  • Нажмите File -> Publish Settings, отредактируйте путь файла .swf для экспорта (куда он будет сохраняться), так чтобы ваш новый элемент был в конце, а также чтобы "addon_template" изменил название на имя папки вашего аддона:
Custom ui publishsettingsswfname.png


  • Нажмите ЛКМ вне сцены, для того чтобы у вас не было выделенных элементов, затем в Properties panel, отредактируйте Document Class чтобы соответствовать новому названию.
Custom ui fladocumentclass.png


  • Откройте файл .as в CS5
  • Измените два случая "Образца" в файле .as будет ваше новое имя элемента. Все это должно соответствовать Document Class, который вы установили ранее в Properties panel.

Шрифты

Dota 2 имеет набор шрифтов которые используются в ПИ. Эти шрифты содержат символы всех поддерживаемых языков. Шрифты изменятся при работе на определенных платформах или языках. Важно использовать только четыре шрифта в ПИ для поддержки вашего дополнения в различных регионах. Вы можете найти их в библиотеке файла Example.fla. ПРИМЕЧАНИЕ: При проверке ПИ внутри Flash, эти шрифты могут отобразиться другими системными шрифтами (которые установлены по умолчанию). Тем не менее, при запуске ПИ внутри Dota 2, они будут отображены правильным Dota-style шрифтом.

Custom ui fonts.png


Если вы добавите область для текста, убедитесь в том, что она переключена в Classic Text, Dynamic Text и использование одного из $* шрифтов:

Custom ui textfield.png


Локализация

По возможности, вы должны использовать маркеры (tokens) локализации в областях для текста, вместо прямого ввода на английским языке. Маркеры локализации автоматически заменяются соответствующим текстом из языкового файла для вашего аддона.

Например, dota_ugc\game\dota_addons\addon_template\resource\addon_english.txt содержит один маркер:

"lang"
{
	"Language"		"English"
	"Tokens"
	{		
		"addon_game_name"			"YOUR ADDON NAME"
	}
}

Если области для текста были установлены как "#addon_game_name", оно появится в игре как "YOUR ADDON NAME". If a textfield's text were set to "#addon_game_name", it would appear ingame as "YOUR ADDON NAME". Обратите внимание на символ '#', это важно. Дополнительные языковые файлы (Пример: addon_french.txt) могут быть созданы для того, чтобы ваш аддон мог охватить более широкую аудиторию. Языковые предпочтения устанавливаются на основе настроек клиента Steam, если требуемый язык не найден, то по умолчанию установится английская локализация - addon_english.txt.

Обращение сервера к ПИ на клиенте

Основной способ для вызова интерфейса на клиенте, осуществляется через игровые события. Вы можете определить свои собственные события в scripts/custom_events.txt (папка аддона). Пример события может выглядеть следующим образом:

	"holdout_show_round_end_summary"
	{
		"nRoundNumber"				"short"
		"nRoundDifficulty"			"long"
		"roundName"				"string"
		"nTowers"				"short"
		"nTowersStanding"			"short"
		"nTowersStandingGoldReward"		"long"
		"nGoldBagsExpired"			"short"
	}

Это срабатывает в нужный момент из .lua файла на стороне сервера (директория аддона):

	local roundEndSummary = {
		nRoundNumber = self._nRoundNumber - 1,
		nRoundDifficulty = GameRules:GetCustomGameDifficulty(),
		roundName = self._szRoundTitle,
		nTowers = nTowers,
		nTowersStanding = nTowersStanding,
		nTowersStandingGoldReward = nTowersStandingGoldReward,
		nGoldBagsExpired = self._nGoldBagsExpired
	}
	FireGameEvent( "holdout_show_round_end_summary", roundEndSummary )

В вашем actionscript файле, вы можете просмотреть события с помощью функции "SubscribeToGameEvent", например:

		public function onLoaded():void
		{
			gameAPI.SubscribeToGameEvent( "holdout_show_round_end_summary", showRoundEndSummary );
		}

		public function showRoundEndSummary( eventData:Object )
		{
			// показать ПИ, анимировать кнопки управления, установить метки и надписи и т.д.
			trace( "Towers standing: " + eventData.nTowersStanding );
		}

Обращение ПИ к серверу

Используйте этот actionscript, чтобы отослать консольную команду на сервер:

gameAPI.SendServerCommand( "my_command arg1 arg2" )


Это может быть консольная команда зарегистрированная в .lua файле на серверной стороне аддона. Наприер:

function CMyGameMode:InitGameMode()
	Convars:RegisterCommand( "my_command", function(...) return self:_MyCommand( ... ) end, "Test console command.", 0 )
end

function CMyGameMode:_MyCommand( cmdName, arg1, arg2 )
	local cmdPlayer = Convars:GetCommandClient()  -- возвращает игрока который выполнил консольную команду
	if cmdPlayer then
		local nPlayerID = cmdPlayer:GetPlayerID()
		-- осуществить определенное действие
	end
end

Получение информации из движка

Ознакомьтесь с Actionscript game engine reference для списка функций для actionscript.

Внешняя документация

Отладка

Вы можете использовать trace() функцию чтобы отобразить текст или переменные в консоли. Вывод данных Actionscript будет показан в консоли только в том случае, если ConVar scaleform_spew выставлен на 1, поэтому рекомендуется добавить+scaleform_spew 1 в вашу командную строку. Template:Tip:ru

Использование FlashDevelop

Также возможно создать файл .swf используя только actionscript, с помощью бесплатной FlashDevelop IDE (Интегрированная Среда Разработки). Убедитесь что ваш класс происходит из MovieClip, имеет три открытые переменные(gameAPI, globals и elementName), также функции onLoaded и nScreenSizeChanged. Тем не менее, с этим методом вы не получите визуального инструмента для анимации элементов ИП.