Natives фреймов довольно мощные и позволяют одновременно показывать больше мультибордов. В игре вы могли показать только один мультиборд, даже если вы создали несколько. Вы не смогли показать три разных мультиборда. Только один на экране будет отображен. Пример у тебя 1-ый и 2-ой мультиборды. У игрока локально отображен какой то один. Пусть будет 1-ый. Есть спец нативки показа мультиборда. Когда ты показываешь этому игроку 2-ой мульт, 1-ый прячется. Хочешь снова 1-ый показать, показываем его.
native IsMultiboardDisplayed takes multiboard lb returns boolean
native MultiboardDisplay takes multiboard lb, boolean show returns nothing
Проблему показа несколько мультибордов можно решить фреймовыми нативками.
Для этого нужно кое-что знать. Во-первых, нужно знать, что после того, как мультиборд показан в первый раз, его дескриптор кадра может быть доступен с помощью BlzGetFrameByName ("Multiboard", 0). Имея этот фрейм, можно изменить его положение и видимость, используя родные фреймы, что мы и сделаем в этом примере. Можно посмотреть, как позиционировать фреймы, чтобы получить более подробную информацию об этом позиционирующем предмете.
Как было сказано выше, когда Multiboard отображается в первый раз, они будут использовать createcontext 0 в графическом интерфейсе, который происходит при создании multiboard. Также дальнейшие мультиборды также будут использовать createcontext 0. Означает, что нужно сохранить фрейм в переменной перед созданием другого мультиборда (GUI). Это должно быть сделано, потому что отображение другой мультиборды скроет предыдущую показанную и перезапишет загружаемое нами хранилище кадров с помощью BlzGetFrameByName. Поэтому мы должны сохранить все нужные multiboard-Frames в varibales. Ведь мультиборды были созданы один раз. Показать все фреймы multiboard с помощью BlzFrameSetVisible (multiFrame, true).
Example
В этом примере созданы 3 мультиборды, а эти 3 размещены где-то еще. Multiboard 1 находится ниже Board 2, а Board 2 - ниже Board 3. Поскольку в этом примере доски расположены ниже друг друга, их положение должно часто обновляться в зависимости от того, открыты они или нет. Если этого не сделать, Multiboards будут перекрываться и отображаться только частично, что не очень хорошо.
В этом примере созданы 3 мультиборды, а эти 3 размещены где-то еще. Multiboard 1 находится ниже Board 2, а Board 2 - ниже Board 3. Поскольку в этом примере доски расположены ниже друг друга, их положение должно часто обновляться в зависимости от того, открыты они или нет. Если этого не сделать, Multiboards будут перекрываться и отображаться только частично, что не очень хорошо.
Вот как это должно выглядеть. Только в разрешении 4: 3. В 16: 9 это лестница.
Это код Lua, создающий "хорошо" выглядящий пример. Определены первые 6 переменных, они нужны нам для частого повторного размещения мультибордов.
Он следует за функцией UpdateMultiboards, которая заменяет multi2 и multi1 в зависимости от состояния multi 3 или 2. Если мультиборд вверху открыт, то поместите мультиборд под его MultiboardListContainer, если он закрыт, поместите его прямо под мультибордом.
CreateMultiboards() создает мультиборды. Это должно быть выполнено, чтобы эта штука работала. Поскольку мы требуем, чтобы доски были видны, он должен вызываться не ранее истечения времени 0.00
lua код
multi1 = nil
multi1Container = nil --that is the frame containing the multiboard items.
multi2 = nil
multi2Container = nil
multi3 = nil
multi3Container = nil
function UpdateMultiboards()
--update 5 times a second the position of the multiboards.
--this has to be done cause multiboards can be opened and closed. In closed and opened state I repos them to save screen space. One could use events but nah to much extra work, set up a trigger events...
BlzFrameClearAllPoints(multi1)
if BlzFrameIsVisible(multi2Container) then --multiboard 2 is open?
--yes, pos multiboard 1 below the container.
BlzFrameSetPoint(multi1, FRAMEPOINT_TOPRIGHT, multi2Container, FRAMEPOINT_BOTTOMRIGHT,0,0)
else
--no, pos multiboard 1 below multiboard2.
BlzFrameSetPoint(multi1, FRAMEPOINT_TOPRIGHT, multi2, FRAMEPOINT_BOTTOMRIGHT,0,0)
end
BlzFrameClearAllPoints(multi2)
if BlzFrameIsVisible(multi3Container) then
BlzFrameSetPoint(multi2, FRAMEPOINT_TOPRIGHT, multi3Container, FRAMEPOINT_BOTTOMRIGHT,0,0)
else
BlzFrameSetPoint(multi2, FRAMEPOINT_TOPRIGHT, multi3, FRAMEPOINT_BOTTOMRIGHT,0,0)
end
end
function CreateMultiboards()
CreateMultiboardBJ( 4, 2, "Board1" )
multi1 = BlzGetFrameByName("Multiboard",0)
multi1Container = BlzGetFrameByName("MultiboardListContainer",0)
CreateMultiboardBJ( 3, 3, "Board2" )
multi2 = BlzGetFrameByName("Multiboard",0)
multi2Container = BlzGetFrameByName("MultiboardListContainer",0)
CreateMultiboardBJ( 3, 1, "Board3" )
multi3 = BlzGetFrameByName("Multiboard",0)
multi3Container = BlzGetFrameByName("MultiboardListContainer",0)
BlzFrameClearAllPoints(multi1)
BlzFrameSetPoint(multi1, FRAMEPOINT_TOPRIGHT, multi2, FRAMEPOINT_BOTTOMRIGHT,0,0)
BlzFrameClearAllPoints(multi2)
BlzFrameSetPoint(multi2, FRAMEPOINT_TOPRIGHT, multi3, FRAMEPOINT_BOTTOMRIGHT,0,0)
BlzFrameClearAllPoints(multi3)
BlzFrameSetAbsPoint(multi3, FRAMEPOINT_TOPRIGHT, 0.5,0.55)
BlzFrameSetVisible(multi1, true)
BlzFrameSetVisible(multi2, true)
BlzFrameSetVisible(multi3, true)
TimerStart(CreateTimer(), 0.2, true, UpdateMultiboards)
BlzFrameCageMouse(mult2)
end
fdf-код для мультиборда
fdf код
// -- INCLUDE FILES ---------------------------------------------------------
IncludeFile "UI\FrameDef\UI\EscMenuTemplates.fdf",
// -- LOCAL TEMPLATES -------------------------------------------------------
// -- FRAMES ----------------------------------------------------------------
Frame "FRAME" "Multiboard" {
Height 0.024,
Width 0.024,
Frame "GLUETEXTBUTTON" "MultiboardMinimizeButton" {
SetAllPoints,
ControlBackdrop "ButtonBackdropTemplate",
Frame "BACKDROP" "ButtonBackdropTemplate" {
DecorateFileNames,
BackdropBackground "MultiboardMinimizeButtonEnabled",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundInsets 0.005f 0.005f 0.005f 0.005f,
BackdropEdgeFile "MultiboardBorder",
}
ControlPushedBackdrop "ButtonPushedBackdropTemplate",
Frame "BACKDROP" "ButtonPushedBackdropTemplate" {
DecorateFileNames,
BackdropBackground "MultiboardMinimizeButtonPushed",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundInsets 0.005f 0.005f 0.005f 0.005f,
BackdropEdgeFile "MultiboardBorder",
}
ControlDisabledBackdrop "ButtonDisabledBackdropTemplate",
Frame "BACKDROP" "ButtonDisabledBackdropTemplate" {
DecorateFileNames,
BackdropBackground "EscMenuButtonBackground",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundInsets 0.005f 0.005f 0.005f 0.005f,
BackdropEdgeFile "MultiboardBorder",
}
ControlDisabledPushedBackdrop "ButtonDisabledPushedBackdropTemplate",
Frame "BACKDROP" "ButtonDisabledPushedBackdropTemplate" {
DecorateFileNames,
BackdropBackground "MultiboardMinimizeButtonDisabled",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundInsets 0.005f 0.005f 0.005f 0.005f,
BackdropEdgeFile "MultiboardBorder",
}
}
Frame "BACKDROP" "MultiboardTitleBackdrop" {
Width 0.2f,
//Height 0.011f,
SetPoint TOPRIGHT, "MultiboardMinimizeButton", TOPLEFT, 0.0057, 0.0,
SetPoint BOTTOMRIGHT, "MultiboardMinimizeButton", BOTTOMLEFT, 0.0057, 0.0,
UseActiveContext,
SetAllPoints,
DecorateFileNames,
BackdropTileBackground,
BackdropBackground "MultiboardBackground",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundInsets 0.005f 0.005f 0.005f 0.005f,
BackdropEdgeFile "MultiboardBorder",
BackdropBlendAll,
}
Frame "TEXT" "MultiboardTitle" INHERITS "EscMenuLabelTextTemplate" {
UseActiveContext,
SetPoint TOPLEFT, "MultiboardTitleBackdrop", TOPLEFT, 0.0, 0.0,
SetPoint BOTTOMRIGHT, "MultiboardTitleBackdrop", BOTTOMRIGHT, 0.0, 0.0,
FrameFont "MasterFont", 0.011, "",
FontJustificationH JUSTIFYCENTER,
}
Frame "BACKDROP" "MultiboardBackdrop" {
UseActiveContext,
SetPoint TOPRIGHT, "MultiboardMinimizeButton", BOTTOMRIGHT, 0.0, 0.0057,
SetPoint TOPLEFT, "MultiboardTitleBackdrop", BOTTOMLEFT, 0.0, 0.0057,
DecorateFileNames,
BackdropTileBackground,
BackdropBackground "MultiboardBackground",
BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
BackdropCornerSize 0.0125,
BackdropBackgroundInsets 0.005f 0.005f 0.005f 0.005f,
BackdropEdgeFile "MultiboardBorder",
BackdropBlendAll,
}
Frame "FRAME" "MultiboardListContainer" {
UseActiveContext,
SetPoint TOPLEFT, "MultiboardBackdrop", TOPLEFT, 0.001f, -0.0048,
SetPoint BOTTOMRIGHT, "MultiboardBackdrop", BOTTOMRIGHT, -0.001f, 0.001,
}
}
арту можете скачать по ссылке