Основы Интерфейса

Содержание:
Кратко: рассматриваем подробно потомков gameUI.
0. ORIGIN_FRAME_WORLD_FRAME
Игровой экран, где отображается вся карта. На карте отображены юниты, предметы, декорации, ландшафт, эффекты, молнии и др. Короче рабочая область. Этот фрейм находится ниже всего интерфейса
обратиться можно как:
WorldFrame = BlzGetOriginFrame ( ORIGIN_FRAME_WORLD_FRAME, 0 )
или так:
WorldFrame = BlzFrameGetChild( gameUI, 0 )
Размеры Width = 0.0 Height = 0.0
BlzFrameSetEnable(WorldFrame, false) <= отключение фрейма ничего не дало. Визуальных каких-то изменении не замечено. Обычно эта влияет на работу события триггера. Пробовал разные события вешать, ничего.
BlzFrameSetVisible(WorldFrame, false) <= скрытие фрейма не только отключает показ экрана, но и не дает возможность выбирать объекты на карте. Мини-карта тоже не работает. Кнопки интерфейса остаются видимыми.
как отследить лежит ли курсор мыши на фрейме
do
    local InitGlobalsOrigin = InitGlobals

    function InitGlobals()
        InitGlobalsOrigin()
        gameUI = BlzGetOriginFrame ( ORIGIN_FRAME_GAME_UI , 0 )
        WorldFrame = BlzGetOriginFrame ( ORIGIN_FRAME_WORLD_FRAME , 0 )
        tooltip = BlzCreateFrameByType("FRAME", "", gameUI, "", 0)
        BlzFrameSetTooltip(frame, tooltip)
        
         TimerStart(CreateTimer(), 1.0/32, true, function()        
                if BlzFrameIsVisible(tooltip) then
                    print("курсор мыши лежит")
                else
                    print("курсор мыши НЕ лежит")
                end
        end)
    end
end
как сделать объекты невыделяемыми на карте
Идея закрыть клики по экрану или отследить нажатие.
Кратко: писанину ниже можно воспринимать как идею. Раз WorldFrame находится в самом внизу, иногда полезно узнать находится ли ваш курсор в поле интерфейса или лежит в игровой карте.
Напомню, что при создании фреймов задают родителей. И созданные фреймы занимают чуть выше уровня родителя. Нельзя опустить ниже родителя фрейм, хотя я пробовал все, и действительно не смог. ORIGIN_FRAME_WORLD_FRAME может помочь с этим. На самого главного фрейма нельзя события вешать, и ничего нельзя сделать, но вот если создать самодельного потомка, то можно. Можно покрыть весь экран невидимым фреймом. Однако, есть и недостатки такого метода: вы не сможете выделить объекты на карте мышью, т.к. фрейм словно пленка закрыл игровую область. Но этому можно найти применение, пример искусственному таргету нельзя чтобы выделялись какие-то объекты на карте и пр. Пример, если полностью отказаться от меню строительства и сделать самодельное меню и таргет => курсор прячем, вместо курсора индикатор и спецэффект в виде модели здания, то при выборе участка курсором у вас могут случайно выделяться объекты. Минусы: кажется, это работает только в пределах 4:3 экрана.
Кол-во потомков WorldFrame: 1
index описание
0 без понятия
1. info подсказки и bars
Кратко: имя или константы фрейм не имеет, обратиться можно как потомку gameUI.
info_bar = BlzFrameGetChild(gameUI, 1)
Этот фрейм отвечает за информационные подсказки над головой объектов (юнитов, героев, нейтральных юнитов, декор и т.д.), и полосками здоровья и маны.
В настройках игры можно поменять индикаторы здоровья. Но и от настроек преображаются сами индикаторы.
При отображении они выглядят вот так:
А когда этот фрейм скрываю, то все информационные подсказки и hp-bar и mana-bar пропадают:
Этот фрейм очень похож на World Object Hover, только между ними есть отличие. World Object Hover скрывает только подсказку (и то только частично), а наш фрейм убирает еще и hp-bar, mana-bar.
Кол-во потомков: 0
2. BottomUI Black Background "ConsoleUIBackdrop"
Черный фон нижней части интерфейса. Если отключить этот фрейм, то интерфейс станет прозрачным. А область в BottomCenterUI станет кликабельной, и там возможно выделить и выбрать юнитов.
Есть специальная нативка для скрытия всего интерфейса:
BlzHideOriginFrames(true)
После использования экран будет выглядеть так:
Кнопки способностей появятся, как только игрок выберет юнита или выделит отряд:
Начиная с Reforged, World Frame по умолчанию занимает весь экран. Но этот черный фон может все еще беспокоить. Это дополнительный BACKDROP Blizzard, добавленный для нижнего пользовательского интерфейса, но он не скрыт BlzHideOriginFrames, поэтому требуется дополнительная строка кода, которая скрывает:
BlzFrameSetVisible(BlzGetFrameByName("ConsoleUIBackdrop",0), false)
То получим:
Однако, если выделить юнита, то мы снова увидим кнопки. Кнопки интерфейса тоже придется прятать, если хотите полностью скрыть. Но об этом позже.
Обратиться можно через нативку по названию fdf:
ConsoleUIBackdrop = BlzGetFrameByName( "ConsoleUIBackdrop", 0 )
или так:
ConsoleUIBackdrop = BlzFrameGetChild( gameUI , 2 )
Кол-во потомков: 0.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/consoleui.fdf
3. Parent of ORIGIN_FRAME_PORTRAIT и ORIGIN_FRAME_HERO_BUTTON_INDICATOR
Автор хайва назвал этот фрейм родителем. Но когда я лично пытался скрыть, и посмотреть таким образом на что влияет. Я увидел, что скрывает портрет (портрета не будет, черный фон) и индикатор кнопок героев (свечение рамок перестает работать).
Всего потомков: 8
indexописание дочерних фреймов
0 ORIGIN_FRAME_PORTRAIT
1-7 ORIGIN_FRAME_HERO_BUTTON_INDICATOR
4. SimpleFrames
InventoryText, связанный с визуальными эффектами. SimpleFrames, при его скрытии все SimpleFrames становятся невидимыми, но по-прежнему доступны для просмотра и активации.
Есть подозрение, что этот фрейм не для скрытия. А для отключения фреймов. Во время паузы многие кнопки становятся неактивными при отключении, и многие текстуры становятся DisabledTexture. Просто мы скрывали, чтобы посмотреть на какие фреймы влияет этот фрейм.
Короче, скрывает лишь визуально пользовательский интерфейс (кроме инфо подсказок над объектами: героями, нейтральными юнитами, декор и т.д.). Остаются не тронутыми:
  • портрет + HeroButtonIndicator => родитель
  • мини-карта и часики => родитель
  • BottomUI Black Background "ConsoleUIBackdrop"
Но все кнопки еще доступны. Это значит, я могу навести мышью на невидимые кнопки (вызвать меню, прожать абилку, нажать кнопки мини-карты и т.д.).
Этот фрейм очень отличается от ORIGIN_FRAME_SIMPLE_UI_PARENT (ConsoleUI), т.к. ORIGIN_FRAME_SIMPLE_UI_PARENT полностью скрывает кнопки. А наш фрейм только визуально, и то эти кнопки прожать можно.
Кол-во потомков: 1
indexописание
0 InventoryText. Текст
InventoryText скрывает частично. Фрейм постоянно обновляется. При переключении юнитов текст "Инвентарь" становится снова видим на долю секунд прежде чем исчезнуть.
BlzFrameSetScale(BlzGetFrameByName("InventoryText",0), 0.001) - лучше скрыть таким способом. А то через BlzFrameSetVisible скрывается частично, видно как текст "Инвентарь" периодически обновляется и мелькает перед глазами, а BlzFrameSetScale убирает навсегда.
Чтобы посмотреть фрейм InventoryText подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/inventorybar.fdf
ui/framedef/ui/reforged/inventorybar.fdf
5. Parent of Day Time Clock и ORIGIN_FRAME_MINIMAP
Родительский фрейм часов и мини-карты.
5.0 Day Time Clock
Влияет на визуальные дневные часы (их перемещение вызывает странные эффекты)
indexинформация и описание дочерних фреймов
0 Day Time Clock Mouse Listener. TimeIndicatorFrame - так называют импорте интерфейса фрейм-изображение. Но такого названия фрейма не существует в базе. Я не смог найти fdf файлах никаких часов.
Существует переменная TimeOfDayIndicator в ui/war3skins.txt
TimeOfDayIndicator=UI\Console\Human\HumanUI-TimeIndicator.mdl
5.1 MinimapFrame
6. CinematicPanel
При создании Cinematic появляются панели. Обычно такие можно увидеть при прохождении кампании, когда сюжетные ролики проигрывают.
Тут в триггерах синематик можно редактировать. Портреты, диалоги, камера и многое другое.
При отключении этого фрейма происходит вот что (но cinematic mode сохраняется):
Вызвать фрейм можно как по родителю:
CinematicPanel = BlzFrameGetChild(GameUI, 6)
так и по названию fdf:
CinematicPanel = BlzGetFrameByName("CinematicPanel", 0)
Кол-во потомков: 1 (возможно потомков даже и больше, т.к. не тестировал полностью синематик. Там портреты, диалоги и прочее, синематик это не мое).
список
CinematicPanel, 0
CinematicPanelControlFrame, 0
HDCinematicBackground, 0
CinematicBottomBorder, 0
CinematicScenePanel, 0
CinematicPortraitBackground, 0
CinematicPortrait, 0
CinematicPortraitCover, 0
HDCinematicPortraitCover, 0
CinematicSpeakerText, 0
CinematicDialogueText, 0
CinematicTopBorder, 0
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/cinematicpanel.fdf
ui/framedef/ui/reforged/cinematicpanel.fdf
7. LogDialog / ChatDialog
LogDialog - это журнал сообщении в одиночной игре.
ChatDialog - это чат-окно в режиме сетевой игры.
Вы можете вызвать это окно:
BlzFrameSetVisible(LogDialog, true)
Или наоборот, закрыть, если окно открыто у вас:
BlzFrameSetVisible(LogDialog, false)
Обычно в одиночной игре фрейм ChatDialog не создается (handle = 0). Проверить можно BlzFrameIsVisible(frame). Думаю, что аналогично, в мультиплеерной игре не работает LogDialog.
Единственное, что огорчает при вызове окна - это кнопки. После клика ничего не происходит. Наверное нужен особый фрейм для активации.
LogDialog
Вызвать фрейм можно как по родителю:
LogDialog / ChatDialog = BlzFrameGetChild(GameUI, 7)
так и по названию fdf:
LogDialog = BlzGetFrameByName("LogDialog", 0)
Кол-во потомков: 4
список потомков
LogDialog, 0
LogBackdrop, 0
LogTitle, 0
LogOkButton, 0
LogOkButtonText, 0
LogAreaBackdrop, 0
LogArea, 0
LogAreaScrollBar, 0
ChatDialog
ChatDialog = BlzGetFrameByName("ChatDialog", 0)
Кол-во потомков: 15
список потомков
ChatDialog
ChatBackdrop
ChatTitle
ChatPlayerRadioButton (написать игроку)
ChatAlliesRadioButton (написать союзнику)
ChatObserversRadioButton (написать наблюдателям)
ChatEveryoneRadioButton (написать в общий чат)
ChatPlayerLabel
ChatAlliesLabel
ChatObserversLabel
ChatEveryoneLabel
ChatPlayerMenu
EscMenuPopupMenuBackdropTemplate
EscMenuPopupMenuDisabledBackdropTemplate
PopupMenuTitleTemplate
PopupMenuArrowTemplate
ChatAcceptButton
ChatAcceptButtonText
ChatHistoryDisplayBackdrop
ChatHistoryDisplay
ChatHistoryScrollBar
ChatHistoryDisplayLabel
ChatInfoText
Полная информация по ссылке.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/logdialog.fdf
ui/framedef/ui/reforged/logdialog.fdf
ui/framedef/ui/ChatDialog.fdf
ui/framedef/ui/reforged/ChatDialog.fdf
С 8 фрейма может меняться положение фреймов. Это зависит от того, будут ли работать мультиборд, leaderboard, TimerDialog (окно таймера), Quest, +1 неизвестный фрейм. То они первые втиснутся в 8, а следом пойдет фрейм AllianceDialog (Parent).
8. AllianceDialog (Parent)
Есть одноименный фрейм BlzGetFrameByName("AllianceDialog", 0) который отличается от нашего фрейма-родителя на 1 единичку. Отвечает за окно:
Это меню можно вызвать:
BlzFrameSetVisible(BlzGetFrameByName("AllianceDialog", 0), true)
Или скрыть, если оно открыто:
BlzFrameSetVisible(BlzGetFrameByName("AllianceDialog", 0), false)
Единственное, что огорчает при вызове окна - это кнопки. После клика ничего не происходит. Наверное, нужен особый фрейм для активации.
потомки
список
AllianceDialog, 0
AllianceBackdrop, 0 (фон)
AllianceTitle, 0 (заглавие “Союзники”)
ResourceTradingTitle, 0 (заглавие “Обмен ресурсами”)
PlayersHeader, 0 (заголовок “Игроки”)
AllyHeader, 0 (заголовок “Союзник”)
VisionHeader, 0 (заголовок “Общий обзор”)
UnitsHeader, 0 (заголовок “Общие войска”)
GoldHeader, 0 (заголовок “золото”)
LumberHeader, 0 (заголовок “древесина”)
AllianceAcceptButton, 0 (кнопка “Принять”)
AllianceAcceptButtonText, 0
AllianceCancelButton, 0 (кнопка “Отмена”)
AllianceCancelButtonText, 0
AlliedVictoryCheckBox, 0 (“Общая победа”)
AlliedVictoryLabel, 0
AllianceDialogScrollBar, 0 (ползунок для прокрутки списка)
AllianceSlot, 0-23 (родитель всех ниже фреймов)
ColorBackdrop, 0-23
ColorBorder, 0-23
PlayerNameLabel, 0-23
AllyCheckBox, 0-23
VisionCheckBox, 0-23
UnitsCheckBox, 0-23
GoldBackdrop, 0-23
GoldText, 0-23
LumberBackdrop, 0-23
LumberText, 0-23
Полная информация по ссылке.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/AllianceDialog.fdf
ui/framedef/ui/reforged/AllianceDialog.fdf
ui/framedef/ui/AllianceSlot.fdf
ui/framedef/ui/reforged/AllianceSlot.fdf
Внимание: безопаснее обращаться к фрейму так:
AllianceDialog = BlzGetFrameByName("AllianceDialog", 0)
9. EscMenuOptionsPanel
ui/framedef/ui/escmenuoptionspanel.fdf
ui/framedef/ui/reforged/escmenuoptionspanel.fdf
9.1 OptionsPanel
EscMenuOptionsPanel, 0 (главный родитель “настройки”)
OptionsPanel, 0 (панель настроек)
OptionsTitleText, 0
Получить окно настроек:
BlzFrameGetChild(BlzFrameGetChild(BlzFrameGetChild(GameUI, 9), 0)
или
“OptionsPanel”, 0
При закрытии окна осталось пустое место. Тут по идее должны быть кнопки менюшки F10. Окно без кнопок никак не закрыть.
10. Main Menu ESC
Это старший фрейм, родитель всего меню. Потомков очень много, и даже может на скрине не влезли.
всю информацию об этом можно посмотреть в файлах с помощью Casc Viewer:
ui/framedef/ui/escmenumainpanel.fdf
ui/framedef/ui/reforged/escmenumainpanel.fdf
ui/framedef/ui/escmenuoptionspanel.fdf
ui/framedef/ui/reforged/escmenuoptionspanel.fdf
ui/framedef/ui/escmenusavegamepanel.fdf
ui/framedef/ui/reforged/escmenusavegamepanel.fdf
10.0 EscMenuBackdrop (фоновое окно меню F10)
EscMenuBackdrop, 0 (На самом деле этот фрейм является просто backdrop (фоном). Но как видим по потомкам (см. скрины выше) этот фрейм является родителем всего меню. Короче, влияет на EscMenuMainPanel)
BlzGetFrameByName("EscMenuBackdrop", 0)
Можно открыть окно (показать фрейм), так и закрыть (спрятать). Но все таки оно изначально вызывается без кнопок.
10.0.0 EscMenuMainPanel, 0
родитель MainPanel, OptionsPanel. SaveGamePanel
10.0.0.0 MainPanel, 0
MainPanel, 0 - панель-родитель переключения. Влияет на первую панель "Меню":
10.0.0.0.0 - WouldTheRealOptionsTitleTextPleaseStandUp, 0 (заглавие текста)
10.0.0.0.1 - InsideMainPanel, 0 (панель "меню")
Кажется у InsideMainPanel не раскрыты полностью кнопки (см. выше скрин с потомками), не ожидал, что будет столько потомков. Хорошо, что на хайве полностью раскрыли имена. Мне как переводчику не приходилось тестировать.
10.0.0.1 ""EndGamePanel, 0""
EndGamePanel, 0 - панель-родитель переключения, влияет на меню завершения ("Завершить игру")
10.0.0.1.0 InsideEndGamePanel, 0 (панель завершения игры)
10.0.0.2 ConfirmQuitPanel, 0
ConfirmQuitPanel, 0 - панель-родитель переключения, влияет на меню подтверждения выхода из игры ("Выйти из игры")
10.0.0.2.0 InsideConfirmQuitPanel, 0 (панель подтверждения выхода из игры)
10.0.0.3 HelpPanel, 0
HelpPanel, 0 - панель-родитель, влияющая на смену панели ("Справка")
10.0.0.3.0 InsideHelpPanel, 0 (панель справки)
10.0.0.4 TipsPanel, 0
TipsPanel, 0 - панель-родитель, влияющая на смену панели ("Советы")
10.0.0.4.0 InsideTipsPanel, 0 (панель советы)
Тут очень много фреймов. Опустил меню настроек, т.к. там все запутанно.
потомки EscMenuSaveGamePanel
EscMenuSaveGamePanel, 0 (главная панель "загрузить/сохранить игру")
EscMenuSaveLoadContainer, 0 (сохранить/загрузить контейнер)
SaveAndLoad, 0 (родитель фреймов LoadOnly и SaveOnly)

кнопка из главного меню запускает панель "LoadOnly"
LoadGameButton, 0
LoadGameButtonText, 0
панель
LoadOnly, 0
LoadGameTitleText, 0
кнопка отмены
LoadGameCancelButton, 0
LoadGameCancelButtonText, 0
кнопка загрузки (подтверждения)
LoadGameLoadButton, 0
LoadGameLoadButtonText, 0

кнопка в главном меню вызываем панель SaveOnly
SaveGameButton, 0
SaveGameButtonText, 0
панель
SaveOnly, 0
SaveGameTitleText, 0
окошко с файлами
SaveGameFileEditBox, 0
SaveGameFileEditBoxText, 0
кнопка отмены
SaveGameCancelButton, 0
SaveGameCancelButtonText, 0
кнопка удаления
SaveGameDeleteButton, 0
SaveGameDeleteButtonText, 0
кнопка сохранения
SaveGameSaveButton, 0
SaveGameSaveButtonText, 0

EscMenuOverwriteContainer, 0 (перезаписать контейнер)
OverwriteOnly, 0
OverwriteTitleText, 0
OverwriteMessageText, 0
кнопка переписать
OverwriteOverwriteButton, 0
OverwriteOverwriteButtonText, 0
кнопка отменить
OverwriteCancelButton, 0
OverwriteCancelButtonText, 0

EscMenuDeleteContainer, 0 (удалить контейнер)
DeleteOnly, 0
DeleteTitleText, 0
DeleteMessageText, 0
Удалить
DeleteDeleteButton, 0
DeleteDeleteButtonText, 0
Отмена
DeleteCancelButton, 0
DeleteCancelButtonText, 0
11. Chat Input box (окно чата)
Если показать его, то получится так без курсора ввода
К нему очень сложно обратиться, т.к. от любого действия часто вылетает. Не помню как вызвал (см. на скрине). Скорее всего останется без точного ответа. Давно тестировал, а сегодня вызвать не могу. Скорее всего скрыт, и поэтому невозможно обратиться, и игра вылетает.
У этого окна есть безымянные потомки, но я не понял за что они отвечают.
Этот фрейм мне не понятен. Скрытием этого фрейма мне не удалось никак отключить ввод печати через enter в эту строку. Если желаете скрыть, то есть костыльный способ
12. Option Menu (Parent)
Без комментариев.
Судя по всему родитель "меню настроек" - OptionsPanel. Тестить дальше не захотел.
13. Mouse Cursor (Parent)
Кол-во потомков: 1.
При отключении видимости прячет курсор в определенной области экрана. Но оно частично видно по краям, или в поле интерфейса.
BlzFrameGetChild(BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 13) 
Возможно этот фрейм отвечает за границы курсора. Когда вы курсор мыши пытаетесь сместить за край экрана, то вы упираетесь в границу экрана, и благодаря этому вращается камера. Сначала я думал, что это курсор. И даже пытался передвинуть его, но сдвинул границы курсора, в пределах которых находится мышь.
local gameUI = BlzGetOriginFrame( ORIGIN_FRAME_GAME_UI, 0)
local ParentOfMouseCursor = BlzFrameGetChild(gameUI, 13) --index не всегда мб равен 13, мб смещения
local MouseCursor = BlzFrameGetChild(ParentOfMouseCursor, 0)
BlzFrameClearAllPoints(ParentOfMouseCursor)
BlzFrameSetAbsPoint(ParentOfMouseCursor, FRAMEPOINT_CENTER, 0.4, 0.3)
Смог еще узнать размеры мыши
do
    local InitGlobalsOrigin = InitGlobals

	function InitGlobals()
		InitGlobalsOrigin()
		
		TimerStart(CreateTimer(), 1, false, function()
            local gameUI = BlzGetOriginFrame( ORIGIN_FRAME_GAME_UI, 0 )
            local ParentOfMouseCursor = BlzFrameGetChild(gameUI, 13)
            local MouseCursor = BlzFrameGetChild(ParentOfMouseCursor, 0)
            print("ширина: "..BlzFrameGetWidth(ParentOfMouseCursor).." ,высота: "..BlzFrameGetHeight(ParentOfMouseCursor))

        end)	
	end
end
Аналогично прячет курсор нативка:
function BlzEnableCursor(enable) end -- (native)
Недостаток: существуют два поля: игровое и поле интерфейса. Вы можете спрятать курсор, но прячет его не на постоянной основе. Если невидимый курсор мыши переместить в поле интерфейса, то настройка сбрасывается, и курсор становится видимым какое-то время. Можно отслеживать событиями фреймов MOUSE_ENTER и MOUSE_LEAVE, когда курсор входит в фрейм или покидает фрейм. Еще можно отслеживать перемещается ли курсор по карте событием bj_MOUSEEVENTTYPE_MOVE. Проблема сброса происходит из-за дефолтного интерфейса.
14. Multiboard
Вызвать фрейм можно как по родителю:
Multiboard = BlzFrameGetChild(gameUI, index)
так и по названию fdf:
Multiboard = BlzGetFrameByName("Multiboard ", 0) <- этот способ безопаснее.
Если спрятать этот фрейм, то мультиборд исчезнет. Проблема мультиборда в том, что в игре можно показать один мультиборд, если создать еще один, то игра старый прячет. Это не значит, что его больше нет, он существует, но его не видно. Аналогично, если триггерно показываем другой MultiboardDisplay, то текущий игра скрывает. Чтобы отобразить несколько мутибордов, можно фреймами отобразить.
список фреймов
Multiboard
MultiboardMinizeButton
ButtonBackdropTemplate
ButtonPushedBackdropTemplate
ButtonDisabledBackdropTemplate
ButtonDisabledPushedBackdropTemplate
MultiboardTitleBackdrop
MultiboardTitle
MultiboardBackdrop
MultiboardListContainer
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/Multiboard.fdf
ui/framedef/ui/reforged/Multiboard.fdf
15. Leaderboard
Если спрятать этот фрейм, то доска исчезнет.
Вызвать фрейм можно либо по родителю:
Leaderboard = BlzFrameGetChild(GAMEUI, index)
либо по названию fdf:
BlzGetFrameByName("Leaderboard", 0) <- этот способ безопаснее
список фреймов
Leaderboard
LeaderboardBackdrop
LeaderboardTitle
LeaderListContainer
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/Leaderboard.fdf
ui/framedef/ui/reforged/Leaderboard.fdf
16. TimerDialog
Это окно таймера:
Вызвать фрейм можно:
TimerDialog = BlzFrameGetChild(GAMEUI, index)
или
TimerDialog = BlzGetFrameByName("TimerDialog", 0) <- этот способ безопаснее
список фреймов
TimerDialog [0 to x]
TimerDialogBackdrop [0 to x]
TimerDialogValue [0 to x]
TimerDialogTitle [0 to x]
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/TimerDialog.fdf
ui/framedef/ui/reforged/TimerDialog.fdf
17. QuestDialog
Это окно квестовых заданий:
Если в игре у вас уже создан Quest, то все равно у вас фрейм не существует. Поэтому никак не удается открыть, т.к. его нет. Handle = 0. Видим ли в данный момент фрейм или нет - проверить можно нативкой BlzFrameIsVisible(frame).
После того, как кто-либо щелкнул диалог квеста, добавляются еще 2 пользовательских добавленных фрейма.
Этот фрейм можно закрыть (скрыть), однако, почему-то паузится игра, и только нажатием Esc сбрасывает паузу.
Лучше использовать BlzGetFrameByName("QuestDialog", 0)
список
QuestAcceptButton,0 кнопка “закрыть”
QuestAcceptButtonText,0 текст кнопки
QuestBackdrop,0 основной фон
"QuestDetailsTitle",0
"QuestDialog",0
"QuestDisplay",0
"QuestDisplayBackdrop",0
"QuestDisplayScrollBar",0 крутящая полоса списка задании
"QuestItemListContainer",0
"QuestItemListItem",6
"QuestItemListItem",7
"QuestItemListItem",8
"QuestItemListItem",9
"QuestItemListItemTitle",6
"QuestItemListItemTitle",7
"QuestItemListItemTitle",8
"QuestItemListItemTitle",9
"QuestItemListScrollBar",0 крутящая полоса описания задания
"QuestListItem",0-5
"QuestListItemBorder",0-5
"QuestListItemButton",0-5
"QuestListItemComplete",0-5
"QuestListItemCompletedHighlight",0-5
"QuestListItemFailedHighlight",0-5
"QuestListItemIconContainer",0-5
"QuestListItemSelectedHighlight",0-5
"QuestListItemTitle",0-5
"QuestMainContainer",0
"QuestMainListScrollBar",0
"QuestMainTitle",0
"QuestOptionalContainer",0
"QuestOptionalListScrollBar",0
"QuestOptionalTitle",0
"QuestSubtitleValue",0
"QuestTitleValue",0
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/QuestDialog.fdf
ui/framedef/ui/reforged/QuestDialog.fdf

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
23
1 год назад
Отредактирован Makeba
1
  1. Chat Input box (окно чата)
Там, как оказалось, целая группа фреймов
Попытка убить эти фреймы заканчивается фаталом (не сразу, а по повторному вызову на Enter), выключить ввод у меня тоже никак не получилось.
Но к одному из них можно обращаться как к эдитбоксу и, например, отслеживать события. Запилил наработку по этой теме xgm.guru/p/blog-storm-shadow/chemax-plachet
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.