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

Содержание:
Кратко: рассмотрим фрейм ConsoleUI и его потомков.
ORIGIN_FRAME_SIMPLE_UI_PARENT или ConsoleUI - главный фрейм рамочных текстур интерфейса. Текстуры рамок консоли (см. ниже скрин). Единственное, что на скрине ниже это хп и ману под портретом забыл убрать.
Эти лежат в папке ui\war3skins.txt или ui/framedef/consoleui.fdf - у разных рас разные текстуры и модели интерфейса.
код fdf
Frame "SIMPLEFRAME" "ConsoleUI" {
    DecorateFileNames,

    // The top of the UI console
    Texture {
        File "ConsoleTexture05",
        Width 0.256,
        Height 0.032,
        TexCoord 0, 1, 0, 0.125,
        AlphaMode "ALPHAKEY",
        Anchor TOPLEFT,-0.256,0,
    }
    Texture {
        File "ConsoleTexture01",
        Width 0.256,
        Height 0.032,
        TexCoord 0, 1, 0, 0.125,
        AlphaMode "ALPHAKEY",
        Anchor TOPLEFT,0,0,
    }
    Texture {
        File "ConsoleTexture02",
        Width 0.087,
        Height 0.032,
        TexCoord 0, 0.33984375, 0, 0.125,
        AlphaMode "ALPHAKEY",
        Anchor TOPLEFT,0.256, 0,
    }
    Texture {
        File "ConsoleTexture02",
        Width 0.053,
        Height 0.032,
        TexCoord 0.79296875, 1, 0, 0.125,
        AlphaMode "ALPHAKEY",
        Anchor TOPRIGHT,-0.288, 0,
    }
    Texture {
        File "ConsoleTexture03",
        Width 0.256,
        Height 0.032,
        TexCoord 0, 1, 0, 0.125,
        AlphaMode "ALPHAKEY",
        Anchor TOPRIGHT,-0.032, 0,
    }
    Texture {
        File "ConsoleTexture04",
        Width 0.032,
        Height 0.032,
        TexCoord 0, 1, 0, 0.125,
        AlphaMode "ALPHAKEY",
        Anchor TOPRIGHT,0,0,
    }
    Texture {
        File "ConsoleTexture06",
        Width 0.256,
        Height 0.032,
        TexCoord 0, 1, 0, 0.125,
        AlphaMode "ALPHAKEY",
        Anchor TOPRIGHT,0.256,0,
    }

    // The bottom of the UI console
    Texture {
        File "ConsoleTexture05",
        Width 0.256,
        Height 0.176,
        AlphaMode "ALPHAKEY",
        TexCoord 0, 1, 0.3125, 1,
        Anchor BOTTOMLEFT,-0.256,0,
    }
    Texture {
        File "ConsoleTexture01",
        Width 0.256,
        Height 0.176,
        TexCoord 0, 1, 0.3125, 1,
        AlphaMode "ALPHAKEY",
        Anchor BOTTOMLEFT,0,0,
    }
    Texture {
        File "ConsoleTexture02",
        Width 0.256,
        Height 0.15,
        TexCoord 0, 1, 0.4140625, 1,
        AlphaMode "ALPHAKEY",
        Anchor BOTTOMLEFT,0.256,0,
    }
    Texture {
        File "ConsoleTexture03",
        Width 0.256,
        Height 0.176,
        TexCoord 0, 1, 0.3125, 1,
        AlphaMode "ALPHAKEY",
        Anchor BOTTOMRIGHT,-0.032,0.0,
    }
    Texture {
        File "ConsoleTexture04",
        Width 0.032,
        Height 0.176,
        TexCoord 0, 1, 0.3125, 1,
        AlphaMode "ALPHAKEY",
        Anchor BOTTOMRIGHT,0,0,
    }
    Texture {
        File "ConsoleTexture06",
        Width 0.256,
        Height 0.176,
        TexCoord 0, 1, 0.3125, 1,
        AlphaMode "ALPHAKEY",
        Anchor BOTTOMRIGHT,0.256,0,
    }

}

Frame "BACKDROP" "ConsoleUIBackdrop" {
    //Width 0.8,
    Height 0.13,
    SetPoint BOTTOMLEFT, "ConsoleUI", BOTTOMLEFT, 0.0, 0.0,
    SetPoint BOTTOMRIGHT, "ConsoleUI", BOTTOMRIGHT, 0.0, 0.0,
    BackdropTileBackground,
    BackdropBackground  "Textures\Black32.blp",
}
"ConsoleUI" - еще и главный родительский фрейм отвечающий за пользовательский интерфейс (за все -кнопочки и менюшки, кроме часиков, портрета и мини-карты).
От ConsoleUI остается разве что часики, портрет и мини-карта.
таблица fdf-files
Если картодел захочет использовать какой-то шаблон, он может заранее использовать его.
Тут показывает связь фреймов с fdf-files. И fdf-file подключаются игрой. Некоторые fdf-file могут быть изначально выключены за ненадобность разработчиками, и вы не сможете шаблоны из выключенных наследовать - fdf-files не загружен toc-files/создавать в триггерах - т.к. не существует такого шаблона.
Такие fdf-скрипты можно загрузить toc-file. В этом toc-файле прописываем все fdf-file, которые должны быть загружены. Триггером toc-file грузят при инициализации (об этом позже). И таким способом можем подключать не только созданные нами fdf, но и выключенные разработчиками.
Вам рассказал вкратце, что это такое. Внизу показывают список fdf-file ConsoleUI, которые подключены игрой.
ConsoleUI Loaded consoleui.fdf
SimpleObserverPanel Loaded observerpanel.fdf
SimpleReplayPanel Loaded replaypanel.fdf
ResourceBarFrame Loaded resourcebar.fdf
SimpleInfoPanelUnitDetail Loaded simpleinfopanel.fdf
SimpleInfoPanelCargoDetail Loaded simpleinfopanel.fdf
SimpleInfoPanelBuildingDetail Loaded simpleinfopanel.fdf
SimpleInfoPanelItemDetail Loaded simpleinfopanel.fdf
SimpleInfoPanelDestructableDetail Loaded simpleinfopanel.fdf
SimpleInfoPanelIconDamage Loaded simpleinfopanel.fdf
SimpleInfoPanelIconArmor Loaded simpleinfopanel.fdf
SimpleInfoPanelIconRank Loaded simpleinfopanel.fdf
SimpleInfoPanelIconFood Loaded simpleinfopanel.fdf
SimpleInfoPanelIconGold Loaded simpleinfopanel.fdf
SimpleInfoPanelIconHero Loaded simpleinfopanel.fdf
SimpleInfoPanelIconAlly Loaded simpleinfopanel.fdf
UpperButtonBarFrame Loaded upperbuttonbar.fdf
Как заменить/отредактировать текстуры ConsoleUI? Как убрать нижние боковины?
В рефордже ввели по бокам дополнительные текстуры, и не всем это нравилось. Это было очень непривычно. В частности мне захотелось убрать эти боковые текстуры.
Минусом фрейма ConsoleUI является то, что он тащит за собой потомков. И скрыть ConsoleUI или перетащить его не получится. Если скроешь ConsoleUI, то и потомки исчезнут, у вас получится пустой интерфейс. А перетащить его за пределы экрана - это тоже не вариант.
ССЫЛКА <= не стану ниче копировать.

Потомки ConsoleUI

0. CommandBarFrame
Command Button Parent
Родитель командной панели кнопок (12). Этот фрейм отключает не полностью, а только когда видим фрейм. Эта командная панель постоянно обновляется при переключении юнитов. Когда мы выделяем юнита, кнопки панели не сразу меняются.
Координаты кнопок командной панели
Выше картинка с координатами кнопок, чтобы заменить. Можно создать базу данных координат:
--инициируем таблицы
CommandButtonX, CommandButtonY  = {},{}
--далее забиваем координаты
--1 кнопка
CommandButtonX[0] = 0.6375
CommandButtonY[0] = 0.1136
--2 кнопка
CommandButtonX[1] = 0.6809
CommandButtonY[1] = 0.1136
--3 кнопка
CommandButtonX[2] = 0.7243
CommandButtonY[2] = 0.1136
--4 кнопка
CommandButtonX[3] = 0.7677
CommandButtonY[3] = 0.1136
--5 кнопка 
CommandButtonX[4] = 0.6375
CommandButtonY[4] = 0.0697
--6 кнопка
CommandButtonX[5] = 0.6809
CommandButtonY[5] = 0.0697
--7 кнопка
CommandButtonX[6] = 0.7243
CommandButtonY[6] = 0.0697
--8 кнопка
CommandButtonX[7] = 0.7677
CommandButtonY[7] = 0.0697
--9 кнопка 
CommandButtonX[8] = 0.6375
CommandButtonY[8] = 0.0258
--10 кнопка
CommandButtonX[9] = 0.6809
CommandButtonY[9] = 0.0258
--11 кнопка
CommandButtonX[10] = 0.7243
CommandButtonY[10] = 0.0258
--12 кнопка
CommandButtonX[11] = 0.7677
CommandButtonY[11] = 0.0258
сокрытие командной панели
Можно скрыть BlzFrameSetVisible командную панель. Однако, BlzFrameSetVisible скрывает не полностью. При переключении с одного на другого, мы замечаем панель на долю секунды, прежде чем она скроется.
Если хотите навсегда выключить, вот код (мне пригодился, когда нужно было скрыть показ кнопок). Можно скрыть каждую кнопку, но тут тоже ничего не выйдет, при переключении юнита, у вас обновляется, и скрытие получается не постоянным. Есть способ.
У каждой из 12 кнопок есть системные родители, именно они отвечают за параметры кнопки. Если родитель будет скрыт, то и кнопка скрыта, логично же:
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 0)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 1)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 2)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,3)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 4)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 5)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 6)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 7)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 8)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 9)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 10)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON, 11)), FALSE)
или можете переместить
function ReposMenuButtons1 takes nothing returns nothing
   local framehandle fh = BlzGetFrameByName("CommandBarFrame", 0)
   call BlzFrameSetAbsPoint(fh, FRAMEPOINT_RIGHT, 0.5, 0.5)
endfunction
Активная кнопка переключения командной панели
Не смог узнать только как найти у этих кнопок фрейм выделения зеленой рамки, когда выделяется кнопка приказом, пример:
Мне нужно было в одной из карт заменить патруль. Свечение зеленой рамки надо было показать. За это отвечает наложенный сверху фрейм Highlight с рамкой:
UI\Widgets\Console\Human\CommandButton\human-activebutton.blp
Пример fdf-кода:
Frame "HIGHLIGHT" "CommandButtonActiveHighlight" {
    DecorateFileNames,
    HighlightType "FILETEXTURE",
    HighlightAlphaFile "CommandButtonActiveHighlight",
    HighlightAlphaMode "ADD",
}
пример fdf-кода для SimpleButton :
Frame "SIMPLEFRAME" "ParentActiveTextureCommabdPanel" {
    Width 0.0001,
    Height 0.0001,
    Texture "ActiveTextureCommabdPanel" {
    DecorateFileNames,
        File "CommandButtonActiveHighlight",
        AlphaMode "ADD",
    }
}
Пример lua-кода:
--загружаем toc-file
BlzLoadTOCFile("templates.toc")
--родитель
local gameUI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
--frame
local frame = BlzCreateFrameByType("HIGHLIGHT", "frame", gameUI, "CommandButtonActiveHighlight", 0)
--задаем координаты экрана (на месте 1 кнопки)
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, CommandButtonX[0], CommandButtonY[0])
--прозрачность (если она потребуется)
--BlzFrameSetAlpha(frame, 50)
--размер
BlzFrameSetSize(frame, 0.039, 0.039)
Можно взять и прописать другие эффекты для кнопки вместо зеленой рамки активной области.
в war3skins.txt
CommandButtonAutocast=UI\Feedback\Autocast\UI-ModalButtonOn.mdl
CommandButtonCooldown=UI\Feedback\Cooldown\UI-Cooldown-Indicator.mdl
CommandButtonActiveHighlight=UI\Widgets\Console\Human\CommandButton\human-activebutton.blp
CommandButtonHeroGlow=UI\Widgets\Console\Human\CommandButton\human-multipleselection-heroglow.blp
CommandButtonNumberOverlay=UI\Widgets\Console\Human\CommandButton\human-button-lvls-overlay.blp
CommandButtonEffect=UI\Feedback\CommandButton\UI-CommandButtonHighlight.mdl
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/commandbar.fdf - станд сетка 12
ui/framedef/ui/reforged/commandbar.fdf - какая-то другая сетка, где кнопок 14
1. BottomCenter UI parent (unit info-Inventory)
Родитель центральной информационной панели посередине и инвентаря. Тут имеют в виду не саму панель инвентаря, а предметы инвентаря, если они лежали там в инвентаре, просто исчезают.
Этот фрейм отвечает за переключение центральной панели (там несколько информационных панель, и в зависимости от того какой объект выделен, такая панель и будет отображена с инвентарем).
Думаю, что этот фрейм-родитель создан не зря, как и CommandBarFrame. Эта панель постоянно обновляете при переключении объектов, и информация характеристик и предметов обновляются. Если это декор или предмет, или у юнита нет инвентаря - инвентарь закрыт.
Можно обращаться к этому родителю так:
infoPanel = BlzFrameGetParent(BlzGetFrameByName("SimpleInfoPanelUnitDetail",0)) <= т.к. у этого родителя нет имени.
или так:
infoPanel = BlzFrameGetChild(BlzGetFrameByName("ConsoleUI", 0), 1)
находится в файле fdf "ui\framedef\ui\simpleinfopanel.fdf"
1.0 SimpleInfoPanelUnitDetail
Single Unit "SimpleInfoPanelUnitDetail", 0 - отвечает за информационную панель интерфейса одного выделенного юнита (обычного юнита: атака и защита; и героя: атака, защита, характеристики и др)
BlzGetFrameByName("SimpleInfoPanelUnitDetail", 0) <= можно спрятать панель BlzFrameSetVisible(frame, false) когда вы скроете, то все равно не получится скрыть полностью. При смене инфо панели с SimpleInfoPanelBuildingDetail на SimpleInfoPanelUnitDetail - это со строящегося здания на обычного, тут происходит смена панели, и она не сразу скрывает. Вы сможете на долю секунды увидеть характеристики юнита прежде чем скроется.
BlzFrameSetVisible(frame, false) прячет частично. Для полного сокрытия советую перетащить панель за пределы экрана.
Проверяйте на наличие фрейма BlzFrameIsVisible(frame), т.к. у вас может в данный момент не существовать панели, т.к. отображена другая какая-нибудь панель например SimpleInfoPanelBuildingDetail. К примеру, нельзя скрыть панель, если она не выделена (видна). При создании игры изначально отображается этот фрейм.
перетащить инфо панель одиночного юнита
код
do
    local InitGlobalsOrigin = InitGlobals

	function InitGlobals()
		InitGlobalsOrigin()
        
    infoPanel  = BlzFrameGetParent(BlzGetFrameByName("SimpleInfoPanelUnitDetail",0))

    BlzFrameClearAllPoints(infoPanel)
    BlzFrameSetAbsPoint(infoPanel, FRAMEPOINT_RIGHT, 0.4, 0.3)
    end
end
потомки SimpleInfoPanelUnitDetail
SimpleInfoPanelUnitDetail - основной фрейм, на него много других повешено, т.к. содержит информацию о юните:
SimpleNameValue, 0 - название юнита (с этим фреймом ничего не мог сделать. По-моему, в fdf это даже не фрейм, а строка)
индикатор таймера жизни призванного
SimpleProgressIndicator, 0 - полоска таймера жизни (полоска а не текст внутри полоски). Полоса опыта имеет значение 0-1.0
BlzFrameSetScale(BlzGetFrameByName("SimpleProgressIndicator", 0), 0.001) - скрывает полоску. BlzFrameSetVisible скрывает частично, моргает.
Внутри полосы вписывают название призванного таймером жизни.
индикатор статуса (стройка, тренировка итд)
SimpleBuildTimeIndicator, 0 - полоска строительства, по идее она где-то должна использоваться у SimpleInfoPanelUnitDetail. Но пока неизвестно где, я пока не могу вспомнить где еще применяется. Может в кампании игры. Чтобы вы понимали, есть вторая полоска строительства SimpleBuildTimeIndicator, 1, используемая в строительстве/улучшении итд. А вот SimpleBuildTimeIndicator, 0 мы не можем знать где применяется
SimpleBuildingActionLabel, 0 - строка над полосой строительства. Туда записывают текст (типа прогресс стройки/обучение итд)
Есть другие фреймы, когда выделен один юнит. Эти фреймы отображаются / скрываются в зависимости от характеристик текущего юнита (если у юнита есть атака, у него будет. Если нет, то там будет пустое место. Или если это герой, то у него еще и параметры атрибуты отображены). Обновляются при выборе юнита. И показана информация об этом юните:
основная группа 0-5
SimpleInfoPanelIconDamage,0-1 - информация об атаке и уроне. Тут показан тип атаки, урон. Тут два index = 0 и 1, дело в том, что могут быть показаны две атаки, как у ледяных змеи или химер. Атака может быть выключена, и тогда фреймы не отображают инфу.
SimpleInfoPanelIconArmor,2 - информация об защите юнита. Тут показан тип брони и кол-во защиты. Эта броня есть у любого юнита.
SimpleInfoPanelIconRank,3 - информация о ранге. Обычно такие есть только у магов и целителей. Показывает уровень магических улучшения.
SimpleInfoPanelIconFood,4 - информация о пище. Такую информацию обычно дают здания типа ферм, колодцев. Пища - ограничитель, и позволяет нанимать определенное число войск.
SimpleInfoPanelIconGold,5 - информация о запасах золота в шахтах.
У этих фреймов есть дочерние фреймы с одинаковыми именами, отличается только createContext.
"InfoPanelIconBackdrop" the image
"InfoPanelIconLevel" the shown techLevel (text)
"InfoPanelIconLabel" Damage/Armor..
"InfoPanelIconValue" the amount
обращение к ним
BlzFrameGetText(BlzGetFrameByName("InfoPanelIconLevel", 0)) - чтобы узнать уровень апгрейда.
BlzFrameGetText(BlzGetFrameByName("InfoPanelIconLabel", 0)) - чтобы узнать заглавие (тексты над иконками. типа "Урон:", "Защита:" и др).
BlzFrameGetText(BlzGetFrameByName("InfoPanelIconValue", 0)) - чтобы узнать значение.
К сожалению мне не удалось выяснить текстуру InfoPanelIconBackdrop. Нативки такой нет.
Заметка: обращение к данным фрейма не всегда безопасно: там может быть ничего не указано (пример, если выбрать героя, то у него не указаны апгрейды атаки, как у пеотинца), либо фрейм SimpleInfoPanelUnitDetail не видим (достаточно выделить несколько юнитов, и панель SimpleInfoPanelUnitDetail с дочерними фреймами станет невидимым => ничего оттуда не получишь. При выделении несколько юнитов, например, у вас отображается другая панель => групповая, и одиночная панель SimpleInfoPanelUnitDetail будет скрыта ).
Еще помните, что это дочерние фреймы SimpleInfoPanelUnitDetail являются не полноценными simpleframes, т.е. простыми строками string. Игра не любит, если вы используете ниже перечисленнные natives на строках(String) /текстурах(Texture), игра вылетает:
BlzFrameSetVisible
BlzFrameIsVisible
BlzFrameSetAlpha
BlzFrameSetLevel​
Но зато вы можете получить string с помощью BlzFrameGetText(frame), если есть что прочесть. Но перед этим лучше проверяйте видим ли родитель SimpleInfoPanelUnitDetail. Но в основном мало применения этому.
Перемещение этих фреймов лучше всего выполнять путем перемещения IconFrame «InfoPanelIconBackdrop», поскольку тексты позиционируются относительно IconFrame, а фреймы-родители контейнера, такие как «SimpleInfoPanelIconDamage», часто меняют положение в зависимости от выбранного юнита (если у него нет атаки, то атака выключена, и фрейм атаки тоже).
Можно разрушить положение всех фреймов. К примеру, хотел спрятать атаку, ибо BlzFrameSetVisible скрывает частично, моргает, поэтому спрятал так:
BlzFrameSetScale(BlzGetFrameByName("SimpleInfoPanelIconDamage", 0), 0.001)
Фрейм атаки спрятал, но таким образом другие фреймы потеряли прежние позиции, и магнитом прилипли в одной точке.
При этом у вас все еще должна быть вся функциональность для работы, и полный контроль над положением (можете сами задать положение, переместив их).
Можно читать и писать в эти фреймы, но за исключением «InfoPanelIconLabel», игра очень часто обновляет отображаемое содержимое этих фреймов. От некоторых фреймов отображаемых текстов можно избавиться, используя на нем BlzFrameSetFont(frame, "", 0, 0) или переместив его.
Когда кто-то читает этот текст, он должен помнить, что отображаемое значение является локальным, и единственным для всех, у кого выбрана другая единица измерения, значение не будет совпадать - это приведет к десинхрону, поэтому будьте осторожны с тем, что вы делаете с этим.
группа для героя-6
SimpleHeroLevelBar, 0 - полоска опыта героя (полоска а не текст внутри полоски). Полоса опыта имеет значение 0-1.0.
BlzFrameSetScale(BlzGetFrameByName("SimpleHeroLevelBar", 0), 0.001) - скрывает полоску. BlzFrameSetVisible скрывает частично, моргает.
SimpleUnitStatsPanel, 0 - является также родителем фрейма SimpleClassValue.
SimpleClassValue, 0 - текст внутри полоски опыта.
Если спрятать фрейм, то получится:
Все фреймы UnitInfo-Hero используют в качестве CreateContext = 6.
SimpleInfoPanelIconHero,6 - это родитель фреймов героя, это контейнер.
InfoPanelIconHeroIcon - большой значок, показывающий основной атрибут.
SimpleInfoPanelIconHeroText - это дополнительный логический контейнерный фрейм для Attribute String-Frames.
"InfoPanelIconHeroStrengthLabel"
"InfoPanelIconHeroStrengthValue"
"InfoPanelIconHeroAgilityLabel"
"InfoPanelIconHeroAgilityValue"
"InfoPanelIconHeroIntellectLabel"
"InfoPanelIconHeroIntellectValue"
BlzFrameIsVisible(BlzGetFrameByName("SimpleInfoPanelIconHero", 6)) - с помощью этого кода можно узнать видим ли в данный момент локальным игроком контейнер героя. Короче, так мы можем узнать выделен ли в данный момент игроком герой, так вы можете всякие элементы интерфейса на героя юзать.
группа фрейма альянса
Информация об альянсе (точнее информация об ресурсах союзника) при выборе одного союзного здания, все ниже фреймы используют CreateContext 7.
SimpleInfoPanelIconAlly, 7 - родитель фрейма альянса

"InfoPanelIconAllyTitle"
"InfoPanelIconAllyGoldIcon"
"InfoPanelIconAllyGoldValue"
"InfoPanelIconAllyWoodIcon"
"InfoPanelIconAllyWoodValue"
"InfoPanelIconAllyFoodIcon"
"InfoPanelIconAllyFoodValue"
"InfoPanelIconAllyUpkeep"
Текстуры привязаны к предыдущим текстурам и строкам рядом с текстурами. За исключением «InfoPanelIconAllyTitle» и «InfoPanelIconAllyGoldIcon», они привязаны к «SimpleInfoPanelIconAlly».
Кроме того тут еще SimpleInfoPanelUnitDetail есть статус-бар и баффы. Это напомню ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR_LABEL и ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR, зависящие от SimpleInfoPanelUnitDetail.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/infopanelunitdetail.fdf
ui/framedef/ui/reforged/infopanelunitdetail.fdf
ui/framedef/ui/simpleinfopanel.fdf
ui/framedef/ui/reforged/simpleinfopanel.fdf
1.1 SimpleInfoPanelBuildingDetail
Trainer "SimpleInfoPanelBuildingDetail", 1 - отвечает за процесс строительства здания, обучения войск и исследования технологии. Однако, этот фрейм появляется при выделении здания, которое строится/обучает/занимает исследования. При событии выделения здания у вас не сразу появляется фрейм. Проверяйте на наличие фрейма BlzFrameIsVisible(frame), т.к. у вас мб в данный момент не существовать панели, т.к. отображена другая какая-нибудь панель например SimpleInfoPanelUnitDetail. К примеру, нельзя скрыть панель, если она не выделена (видна).
BlzGetFrameByName("SimpleInfoPanelBuildingDetail", 1) <= можно спрятать BlzFrameSetVisible(frame, false) панель. И когда вы скроете, то все равно не получится скрыть полностью. При смене инфо панели с SimpleInfoPanelUnitDetail на SimpleInfoPanelBuildingDetail - это с обычного юнита на строящееся здание, тут происходит смена панели, и она не сразу скрывает. Вы сможете на долю секунды увидеть что что-то у вас строится/обучается/проводят исследования прежде чем скроется.
BlzFrameSetVisible(frame, false) скрывает частично панель. Для полного скрытия рекомендуется перетащить панель за пределы экрана.
1.1.0 SimpleBuildTimeIndicator
SimpleBuildTimeIndicator, 1 - индикатор времени.
1.1.0.0 Bar Border
Bar Border - рамка (полоса) индикатора времени. Без рамки выглядит так:
1.1.1 SimpleBuildQueueBackdrop
SimpleBuildQueueBackdrop, 1 - фон или слой. Можно так убрать рисунок рамки и окошек с очередями, так и вернуть.
Напрямую вызвать SimpleBuildQueueBackdrop нельзя, т.к. это даже не фрейм, слой. Вызовет фатал. Поэтому придется обратиться как к потомку
BlzFrameGetChild(BlzGetFrameByName("SimpleInfoPanelBuildingDetail", 1), 1)
1.1.2 Que Button next to the Progressbar
Que Button next to the Progressbar
кнопка прогресса - на нее можно нажать мышью, тогда вы отмените действие.
BlzFrameGetChild(BlzGetFrameByName("SimpleInfoPanelBuildingDetail", 1), 2) - эту кнопку можно скрыть.
1.1.3 Que Bottom Button Container
это контейнер отвечает за кнопки (требуется детальное изучение, т.к. у контейнера есть потомки. К сожалению, из-за лени я не вписал их сюда)
1.1.4
No Idea
SimpleInfoPanelBuildingDetail, 1 - основной родительский фрейм. На него повешены другие потомки.
SimpleBuildingNameValue, 1 - строка, название здания, которое строится или кого-то обучает.
SimpleBuildingDescriptionValue, 1 - строка-описание. Если посмотреть в fdf-файле, то увидим как-то связана с SimpleBuildingNameValue.
SimpleBuildingActionLabel, 1 - строка от полосы строительства. туда записывают текст (типа прогресс стройки/обучение итд).
SimpleBuildQueueBackdropFrame, 1 - родитель-фрейм очереди. Тут создает несколько иконок, если задано в очереди несколько юнитов или технологии. К нему еще привязан индикатор времени и фон.
SimpleBuildTimeIndicator, 1 - индикатор времени
SimpleBuildQueueBackdrop, 1 - фон или слой
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/infopanelbuildingdetail.fdf
ui/framedef/ui/reforged/infopanelbuildingdetail.fdf
ui/framedef/ui/simpleinfopanel.fdf
ui/framedef/ui/reforged/simpleinfopanel.fdf
1.2 SimpleInfoPanelCargoDetail
Transporter "SimpleInfoPanelCargoDetail", 2 - отвечает за показ инфы о пассажирах в транспортнике/здании или любом похожем. Однако, этот фрейм появляется при выделении транспорта, в котором расположены пассажиры. При событии выделения транспортника у вас не сразу появляется фрейм. Проверяйте на наличие фрейма BlzFrameIsVisible(frame), т.к. у вас может в данный момент не существовать панели, т.к. отображена другая какая-нибудь панель например SimpleInfoPanelUnitDetail. К примеру, нельзя скрыть панель, если она не выделена (видна).
BlzGetFrameByName("SimpleInfoPanelCargoDetail", 2) <= можно спрятать этим фреймом панель. И когда вы скроете, то все равно не получится скрыть полностью. При смене инфо панели с SimpleInfoPanelUnitDetail на SimpleInfoPanelCargoDetail - это с обычного юнита на транспортник, тут происходит смена панели, и она не сразу скрывает. вы сможете на долю секунды увидеть какие пассажиры находятся прежде чем скроется
BlzFrameSetVisible(frame, false) скрывает частично панель. Для полного скрытия рекомендуется перетащить панель за пределы экрана.
1.2.0 CargoContainer
1.2.0.0 Cargo Button Container (includes Box)
1.2.0.0.0 Button
1.2.0.0.1 Life Bar
1.2.0.0.2 Mana Bar
"SimpleInfoPanelCargoDetail", 2
"SimpleHoldNameValue", 2
"SimpleHoldDescriptionValue", 2​
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/simpleinfopanel.fdf
ui/framedef/ui/reforged/simpleinfopanel.fdf
1.3 SimpleInfoPanelItemDetail
Item on Ground "SimpleInfoPanelItemDetail", 3 - отвечает за информацию об итеме, лежащим на земле. Это текстовое описание итема. Панель постоянно обновляется, поэтому проверяйте на наличие фрейма BlzFrameIsVisible(frame), т.к. у вас может в данный момент не существовать панели, т.к. отображена другая какая-нибудь панель например SimpleInfoPanelUnitDetail. К примеру, нельзя скрыть панель, если она не выделена (видна).
Этот фрейм можно скрыть аналогично как и вышеперечисленные фреймы
"SimpleInfoPanelItemDetail", 3
"SimpleItemNameValue", 3
"SimpleItemDescriptionValue", 3
BlzFrameSetVisible(frame, false) скрывает частично панель. Для полного скрытия рекомендуется перетащить панель за пределы экрана.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/infopanelitemdetail.fdf
ui/framedef/ui/reforged/infopanelitemdetail.fdf
ui/framedef/ui/simpleinfopanel.fdf
ui/framedef/ui/reforged/simpleinfopanel.fdf
1.4 SimpleInfoPanelDestructableDetail
selectable Gate/tree/etc "SimpleInfoPanelDestructableDetail", 4 - отвечает за информационную панель всяких декораций: деревьев, ворот, рычагов, бочек и др. Панель постоянно обновляется, поэтому проверяйте на наличие фрейма BlzFrameIsVisible(frame), т.к. у вас может в данный момент не существовать панели, т.к. отображена другая какая-нибудь панель например SimpleInfoPanelUnitDetail. К примеру, нельзя скрыть панель, если она не выделена (видна).
"SimpleInfoPanelDestructableDetail", 4
"SimpleDestructableNameValue", 4​
BlzFrameSetVisible(frame, false) скрывает частично панель. Для полного сокрытия рекомендуется перетащить панель за пределы экрана.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/simpleinfopanel.fdf
ui/framedef/ui/reforged/simpleinfopanel.fdf
1.5 multiple unit group selection
информационная панель отряда. Короче показывают вам какие юниты выделены в группу.
Панель постоянно обновляется, поэтому проверяйте на наличие фрейма BlzFrameIsVisible(frame), т.к. у вас может в данный момент не существовать панели, т.к. отображена другая какая-нибудь панель например SimpleInfoPanelUnitDetail. К примеру, нельзя скрыть панель, если она не выделена (видна).
infoPanel = BlzFrameGetParent(BlzGetFrameByName("SimpleInfoPanelUnitDetail", 0)) - можно и по-другому через ORIGIN_FRAME_SIMPLE_UI_PARENT. Но так будет длиннее на одно поколение
selectgroup = BlzFrameGetChild(infoPanel, 5)
1.5.0 ContainerGroupButtons
1.5.0. 0-11 ButtonContainer
1.5.0.index.0 Highlighter Background
1.5.0.index.1 Button
1.5.0.index.2 Life Bar
1.5.0.index.3 Mana Bar
где index = 0-11
BlzFrameSetVisible(frame, false) скрывает частично панель. Для полного скрытия рекомендуется перетащить панель за пределы экрана.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/simpleinfopanel.fdf
ui/framedef/ui/reforged/simpleinfopanel.fdf
1.6 Inventory Parent
фрейм-родитель от слотов инвентаря. Отвечает за показ иконок итемов, лежащих в инвентаре. Обычно при переключении на юнита без инвентаря или на декорацию, то инвентарь закрывается / итемы прячут.
когда я скрывают этот фрейм, исчезают итемы:
Скрытые итемы и надпись “Инвентарь” в режиме паузы становятся вновь видимы. Но как-только закрываю главное меню, их не видно.
Панель постоянно обновляется, поэтому проверяйте на наличие фрейма BlzFrameIsVisible(frame). К примеру, нельзя скрыть панель, если она не выделена (видна).
infoPanel = BlzFrameGetParent(BlzGetFrameByName("SimpleInfoPanelUnitDetail", 0)) - можно и по-другому через ORIGIN_FRAME_SIMPLE_UI_PARENT. Но так будет длиннее на одно поколение
InventoryParent = BlzFrameGetChild(infoPanel, 6)
indexИнформация и описание дочерних frames InventoryParent
0-5 Inventory Button или ORIGIN_FRAME_ITEM_BUTTON. Ранее мы изучали константы. Короче, это одни и те же фреймы. Можно обратиться по-разному
InventoryButton_0, 0
InventoryButton_1, 0
InventoryButton_2, 0
InventoryButton_3, 0
InventoryButton_4, 0
InventoryButton_5, 0
InventoryCoverTexture, 0
InventoryText, 0
BlzFrameSetVisible(frame, false) скрывает частично панель. Для полного сокрытия рекомендуется перетащить панель за пределы экрана.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/inventorybar.fdf
ui/framedef/ui/reforged/inventorybar.fdf
1.7 Inventory Cover
Плавающая панель инвентаря. Есть открытая панель инвентаря, когда у юнита есть способность инвентаря. И закрытая, когда у юнита она не доступна. Также когда вы выделяется декорации, итемы.
Короче, все что видите ниже на скрине 1 часть - это просто фон, картинка (нарисованные слоты инвентаря). Когда вы прячете Inventory Parent вы можете увидеть результат на второй картинке, тут фрейм текстуры кладётся поверх.
Закрытая версия инвентаря отображается так в 2 части. Но если фрейм Inventory Parent не спрятан, то у вас могут быть отображены иконки итемов и надпись “Инвентарь” поверху 2 картинки.
BlzFrameSetVisible(frame, false) скрывает частично панель. Для полного сокрытия рекомендуется перетащить панель за пределы экрана.
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/inventorybar.fdf
ui/framedef/ui/reforged/inventorybar.fdf
2. ResourceBarFrame
полоса фреймов с ресурсами
ResourceBarFrame
index информация и описание дочерних фреймов
0 Mouse Listener (Gold)
1 Mouse Listener (Lumber)
2 Mouse Listener (UpKeep)
3 Mouse Listener (Food)
4 Fps/Apm/Ping display (скрин ниже)
Так понимаю, если показ включен, то будет 5 потомков?
ResourceBarFrame, 0
ResourceBarGoldText, 0
ResourceBarLumberText, 0
ResourceBarSupplyText, 0
ResourceBarUpkeepText, 0
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/resourcebar.fdf
ui/framedef/ui/reforged/resourcebar.fdf
3. UpperButtonBar
UpperButtonBarFrame
UpperButtonBar
indexинформация и описание дочерних фреймов
0 Quest
1 Menu
2 Alliance
3 Log/Chat
ранее рассматривали ORIGIN_FRAME_SYSTEM_BUTTON, эти фреймы одни и те же, просто разное обращение
UpperButtonBarAlliesButton, 0
UpperButtonBarChatButton, 0
UpperButtonBarFrame, 0
UpperButtonBarMenuButton, 0
UpperButtonBarQuestsButton, 0
Эти 4 кнопки можно вызвать с помощью BlzFrameClick(frame) так вы легко можете вызвать окно, и паузу в сингл-плеере
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/upperbuttonbar.fdf
ui/framedef/ui/reforged/upperbuttonbar.fdf
4. MinimapButtonBar
MinimapButtonBar
indexинформация и описание дочерних фреймов
0-4 Кнопки мини-карты или ORIGIN_FRAME_MINIMAP_BUTTON
MiniMapAllyButton, 0 (цвет ваших войск и союзников а мини-карте и на карте)
MiniMapCreepButton, 0 (крипы на мини-карте)
MinimapSignalButton, 0 (отметка на мини-карте)
MiniMapTerrainButton, 0 (рельеф на мини-карте)
FormationButton, 0 (боевое построение - кнопка на мини-карте)
Чтобы посмотреть этот фрейм подробнее с помощью Casc Viewer, есть файл fdf:
ui/framedef/ui/minimapframe.fdf
ui/framedef/ui/reforged/minimapframe.fdf
5. command button mouse deadzone
Невидимый фрейм В позиции командной панели, где находятся 12 кнопок CommandButton сверху наложен невидимый фрейм, который блокирует щелчок мышью в этом месте. Внимание: для тех кто в танке, объясняю, что по факту этот фрейм никак не влияет на работу существующих 12 кнопок панели. Но стоит их заменить самодельными кнопками, или поставить свой фрейм в эту область, у вас тут же перестают работать кнопки. Просто этот “невидимый” фрейм находится выше самодельных кнопок, никак не опустить его уровнем ниже, и блокирует нажатие и клики по самодельным фреймам. Короче, из-за него ничего не можем сделать. Некоторые новички могли бы не понять из-за чего происходила ошибка, когда перемещали свои кнопки в область.
На положение и размер этого фрейма влияет ConsoleUI, т.е. ConsoleUI является родителем интерфейса, в том числе нашего “невидимого фрейма”. поэтому до Warcraft 3 V1.32.6 предлагалось сделать что-то с «ConsoleUI», т.е. переместить ConsoleUI за пределами экрана. Но это вам придется слишком много переделывать, тк вместе с ConsoleUI перемещаются Console Texture и многие другие вещи.
Естественно нашлось другое решение:
С 1.32.6 можно получить доступ к этому фрейму и скрыть его напрямую с помощью такого действия.
BlzFrameSetVisible(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI", 0), 5), false)
или
BlzFrameSetScale(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI", 0), 5), 0.001)
ИЛИ:
Никаких проблем думаю не будет для simpleframe, который можно поднять выше, чем невидимый фрейм. А вот с функциональными фреймами такое сделать никак. У функциональных фреймов древовидная зависимость “родитель-ребенок”, повышение или понижение влияет только между детьми.
6. Hero ButtonBar
Hero ButtonBar
indexинформация и описание дочерних фреймов
0-7 Кнопки героев сбоку слева
ранее изучали ORIGIN_FRAME_HERO_BAR и ORIGIN_FRAME_HERO_BUTTON - эти и выше одни и те же фреймы.
7. Idle worker Button Container
BlzFrameGetChild(BlzGetFrameByName("ConsoleUI", 0), 7)
7.0 Button
indexИнформация и описание дочерних frames Button
0 Charges Box (created with the first idle worker)
8. World Object Hover info
отображается после того, как какой-либо объект был наведен мышью
Этот фрейм скрывает подсказку.
BlzFrameSetVisible(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI", 0), 8), false) - скрывает подсказку частично. Если снова навести мышь, то над объектом заново всплывает подсказка. С отключением видимости могут быть проблемы, т.к. игра из-за вылетает.
BlzFrameSetScale(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI", 0), 8), 0.001) - можно скрыть другим способом. И подсказка над головой исчезнет навсегда

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
32
2 года назад
2
Выделил красным
Даже если всё отключить, вот тут есть ещё 1 неизвестный фрейм, но он весьма странный, потому что там перестаёт детектится событие мыши - маус мув и маус клик, однако там можно размещать интерактивные фреймы, найти бы ещё и его, но он точно никак не привязан к ResourceBarFrame
Загруженные файлы
0
23
2 года назад
Отредактирован Makeba
0
Естественно нашлось другое решение:
С 1.32.6 можно получить доступ к этому фрейму и скрыть его напрямую с помощью такого действия.
BlzFrameSetVisible(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI",0),5), false)
или
BlzFrameSetScale(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI",0),5), 0.001)
Тут есть какие-то подводные камни? При использовании любой из этих строк получаю такой результат:
Кнопка, находящаяся на месте бывшей командной панели, при наведении мыши начинает стабильно подсвечиваться (то есть этот момент исправляется, по умолчанию не подсвечивалась), но клик срабатывает примерно 1 раз из 10, в зависимости от того, с какой стороны подведёшь курсор.
0
27
2 года назад
Отредактирован MpW
0
poisoNDealer, нужны подробности
если кнопка подсвечивается, значит, реакция мыши и событие сфокусированы на кнопке, клики должны работать
но клик срабатывает примерно 1 раз из 10, в зависимости от того, с какой стороны подведёшь курсор.
сложно сказать, возможно залипание.
Тут есть какие-то подводные камни?
никаких. это просто невидимый фрейм. его убрать/скрыть можно.
0
23
2 года назад
Отредактирован Makeba
0
МрачныйВорон, ну вот, создал голую карту, где мы скрываем этот невидимый фрейм первой же строкой, и затем остальной интерфейс, и у меня не кликается. Дело даже не в отслеживании фреймэвента, чисто интерфейсной реакции на клик не происходит.
На видео я отчаянно клацаю ЛКМ сто тыщ раз, кнопка отработала лишь пару раз. И да, тут видно, что если мы подводим курсор снизу, то подсветка тоже может не сработать.
Код:
function init()
BlzFrameSetVisible(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI",0),5), false)
-------------------
BlzHideOriginFrames(true) 
BlzFrameSetVisible(BlzGetOriginFrame(ORIGIN_FRAME_HERO_BAR,0), false)
BlzFrameSetVisible(BlzGetOriginFrame(ORIGIN_FRAME_MINIMAP,0), false)
BlzFrameSetVisible(BlzGetFrameByName("ResourceBarFrame",0), false)
BlzFrameSetVisible(BlzGetOriginFrame(ORIGIN_FRAME_PORTRAIT, 0), false)
BlzFrameSetVisible(BlzGetFrameByName("UpperButtonBarFrame",0), true)
-----------------
TestButton = BlzCreateFrame("BrowserButton", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),0,0) 
BlzFrameSetAbsPoint(TestButton, FRAMEPOINT_TOPLEFT, 0.70, 0.10) 
BlzFrameSetAbsPoint(TestButton, FRAMEPOINT_BOTTOMRIGHT, 0.750, 0.05) 
BlzFrameSetText(TestButton, "|cffFCD20Dtest|r") 
end
Загруженные файлы
0
32
2 года назад
0
poisoNDealer, там рамка мёртвой зоны панели приказов
0
23
2 года назад
Отредактирован Makeba
0
Bergi_Bear, дык я понимаю, но написано, что
Проблеме было больше года, и вот самое изящное решение, в 1 строчку
BlzFrameSetScale(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI",0),5), 0.001)
Однако это решение, как и скрытие фрейма, почему-то в моём случае не решает, видос скинул выше.

updt Bergi_Bear, о, дочитал до последнего комментария Ворона в этом треде. Совместно с его кодом всё работает. То есть нужно ещё всякую фигню поскрывать, помимо этой рамки
1
32
2 года назад
1
poisoNDealer, я видел твой видос
попробуй ещё вот так
function HideEverythingAll()
    BlzFrameSetAbsPoint(BlzGetFrameByName("ConsoleUIBackdrop", 0), FRAMEPOINT_TOPRIGHT, 0, 0)
    for i = 0, 11 do
        BlzFrameSetVisible(BlzGetFrameByName("CommandButton_" .. i, 0), false) 
    end
    BlzHideOriginFrames(true)--скрыть всё
    BlzFrameSetScale(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI", 0), 5), 0.001) 
end
0
23
2 года назад
0
Bergi_Bear, да, так работает, спасибо
1
27
2 года назад
Отредактирован MpW
1
poisoNDealer, там невидимые родители кнопок 1-12. они вот слоем выше вашего фрейма находятся. когда выделяешь юнита, то кнопки появляются
0
23
2 года назад
0
Таки дезинформация в последней строке таблиы. С индексом, отличным от 0-3 игру просто крашнет. Эти фреймы не гетнуть через GetChild
Загруженные файлы
0
27
2 года назад
0
poisoNDealer, возможно ты прав. Но это инфу я брал с хайва. Тайсен там расписал. Но мб сначала надо проверить видим ли фрейм? Мб он пустой, тк невидим.
1
23
2 года назад
1
МрачныйВорон, на хайве так:
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.