Слышал, что с версии 1.31 можно менять интерфейс. Подскажите: как мне сделать, чтоб у способности типа "книга заклинаний" было не 11 свободных ячеек на панели(как это обычно), а на 3 больше, то есть всего 14? Без мемхака.

DopaMine, нельзя поменять кол-во ячеек в книге заклинаний.
Можно набросать в интерфейс кнопок и обрабатывать нажатия на них, без абилок юнитов. Но есть три нюанса
  1. нет визуального редактора интерфейса, все делается в коде и файлах разметки
  2. только жасс или луа, а гуй не справится с этой задачей
  3. это сложно
примерно алгоритм выглядит так
  1. разобраться в файлах разметки фреймов fdf
  2. запилить свой фрейм в fdf файле, засунуть этот файл в карту
  3. в нужный момент создать и отобразить фрейм триггером
  4. динамически добавить триггеры для обработки нажатий на кнопки фрейма после его создания
`
ОЖИДАНИЕ РЕКЛАМЫ...
24
DopaMine, тебе нужен toc файл и fdf файл с твоим фреймом, оба импортированные в карту. А дальше триггерами сперва грузиш toc, потом создаеш фрейм по айдишнику.
11
тебе нужен toc файл и fdf файл с твоим фреймом, оба импортированные в карту
Что такое toc и откуда импортировать эти оба файла?
native BlzGetOriginFrame takes originframetype frameType, integer index returns framehandle
Эта функция импортирует?
prog:
fdf файл с твоим фреймом
И тут имеется в виду, что он уже изменён где-то или "твой фрейм" - это тот, который надо изменить уже в самом редакторе?
24
Что такое toc и откуда импортировать эти оба файла?
Что значит откуда, тебе нужно их создать, естественно, а потом засунуть в карту через импорт.
BlzLoadTOCFile для загрузки toc файла. Внутри должен быть список fdf файлов которые ты хочешь чтобы игра загрузила, пример toc файла смотри в архивах игры (в твоем toc файле должны быть только те fdf которые тебе нужны, не надо туда стандартные копировать).
А дальше создаешь фрейм функцией создания фрейма.
BlzGetOriginFrame - получает уже созданый стандартный фрейм и для твоей задачи не подходит.

Еще, для простых задач, можно в коде собирать то что нужно из стандартных фреймов по кусочкам, не создавая свой fdf, но это еще больший геморой, чем fdf файлы.
11
Оо~prog:
пример toc файла смотри в архивах игры
Не понял, toc файл - это папка с fdf файлами?
24
DopaMine, toc файл это список fdf файлов. В архивах игры есть war3.w3mod:ui\framedef\framedef.toc, в который можно заглянуть чтобы понять как должен выглядеть toc файл внутри.
11
DopaMine, toc файл это список fdf файлов. В архивах игры есть war3.w3mod:ui\framedef\framedef.toc, в который можно заглянуть чтобы понять как должен выглядеть toc файл внутри.
А, понял. А как мне понять, какой именно fdf файл отвечает за панель с заклинаниями?(
Если я константу знаю: "ORIGIN_FRAME_COMMAND_BUTTON"
Proshel_Doty:
А ещё можно заглянуть сюда xgm.guru/p/wc3/frame
Спасибо! Заглядывал, не поверите! т
Там начинается не с того, что я не знаю, а дальше...
24
DopaMine, я тебе уже говорил - нельзя просто поменять панель заклинаний... Тебе нужна своя отдельная панель, не связаная со способностями юнитов...
11
нельзя просто поменять панель заклинаний...
Ну хотя бы, как это всё описывается мне же надо знать? Чтоб сделать такую же, к примеру, но свою с нуля.
То есть, эта новая панель - просто картинка типо и любое взаимодействие с нею нужно писать? Типо если игрок - владелец юнита навёл мышь на такую-то ячейку, то вывести описание способности, если он нажал левую кнопку мыши, то...
Так?Оо
DopaMine:
Чтоб сделать такую же, к примеру, но свою с нуля.
Тут я имею в виду именно визуально такую же.
prog:
DopaMine, я тебе уже говорил - нельзя просто поменять панель заклинаний... Тебе нужна своя отдельная панель, не связаная со способностями юнитов...
В рефоргеде будет проще сделать или так же?:D
24
Ну хотя бы, как это всё описывается мне же надо знать? Чтоб сделать такую же, к примеру, но свою с нуля.
То есть, эта новая панель - просто картинка типо и любое взаимодействие с нею нужно писать? Типо если игрок - владелец юнита навёл мышь на такую-то ячейку, то вывести описание способности, если он нажал левую кнопку мыши, то...
Так?Оо
Именно. Я же предупреждал что это сложно...
Как понять какой fdf тебе нужен? Никак, перебирать пока найдешь нужный. Ну или найти кого-то кто уже находил нужный тебе фрейм. Более того, фреймы могут наследоваться друг от друга, а также могут быть вложены один в другой и все это добро может быть раскидано по отдельным файлам.
В рефоргеде будет проще сделать или так же?:D
99% что так-же. Может когда-нибудь в далеком будущем будут какие-то улучшения.
11
Ну или найти кого-то кто уже находил нужный тебе фрейм.
АХАХ, так и думал, что в итоге только гуглить по форумам:DDDDD
prog:
Именно. Я же предупреждал что это сложно...
Хмм, ну, у меня не то чтобы прям целые абилки были вставлены в эти ячейки...Но если есть команды на жассе, позволяющие получить координаты мыши или нажатие "горячих клавиш", то с этим попроще будет. Дичь в том, что искать, что за фрейм.
Proshel_Doty:
А ещё можно заглянуть сюда xgm.guru/p/wc3/frame
А здесь нет указаний, какой fdf файл за что отвечает? Я пока в понятиях не совсем разобрался. Константы, функции. Это, как я понял, для работы с отображением готовых фреймов в самом редакторе уже.
24
Но если есть команды на жассе, позволяющие получить координаты мыши или нажатие "горячих клавиш", то с этим попроще будет.
Есть даже событие клика на кнопку в фрейме, если я правильно помню.
11
Есть даже событие клика на кнопку в фрейме, если я правильно помню.
То есть, всё-таки есть понятие "кнопка" внутри фрейма? Или это неточно)
24
DopaMine, кнопка - разновидность фрейма. Сама по себе кнопка без других фреймов невидима и умеет только ловить мышку и вроде звуки издавать. Чтобы у кнопки был текст и картинка, к кнопке добавляется еще несколько фреймов и все это добро складывается внутрь еще одного фрейма для удобства (и, естественно, есть стандартные фреймы в которых это уже сделано).
11
(и, естественно, есть стандартные фреймы в которых это уже сделано).
И, естественно, как их искать - никто не знает:D
Тогда вот вопрос: а как я хотя бы могу проверить, тот ли фрейм я просматриваю или не тот? Тупо изменить что-то в нём, сохранить в свой toc файл, импортировать в карту, загрузить с помощью нативки - и посмотреть, что поменялось в интерфейсе. Только так?
И я чёт не уловил: вот у меня к примеру свой скопированный и немножко изменённый(на одну цифру) фрейм. Я его загружу, допустим(с помощью команды) - он заменит стандартный или последний надо спрятать, прежде чем отобразить мой?
24
DopaMine, если я правильно помню, менять стандартные фреймы через fdf нельзя, только добавлять новые на их основе.
Т.е. создаеш fdf файл, в нем описание фрейма, с айдишником отличающимся от стандартного, импортируешь в карту, потом создаешь toc файл, в нем указываешь путь к fdf внутри карты, тоже импортируешь, потом в коде грузиш toc одной нативкой и создаешь фрейм по айди другой.
Вобще, в поисках нужного фрейма люди обычно включают мозг и смотрят по содержимому похож ли фрейм на то что они ищут, если похож, то проверяют уже на практике, если нет, то ищут дальше. Ну и статьи в которых рассказывается как прятать стандартные фреймы как минимум позволяют узнать айдишники стандартных фреймов, а дальше уже поиск по файлам сильно упрощается...
11
Хм, я, конечно, извиняюсь.
// -- INCLUDE FILES ---------------------------------------------

IncludeFile "UI\FrameDef\Glue\StandardTemplates.fdf",

// -- LOCAL TEMPLATES -------------------------------------------

Frame "POPUPMENU" "PlayerSlotPopupMenu" {
    Width 0.109,
    Height 0.025,
    PopupButtonInset 0.01,

    ControlBackdrop "PlayerSlotPopupMenuBackdrop",
    Frame "BACKDROP" "PlayerSlotPopupMenuBackdrop" {
        BackdropTileBackground,
        BackdropBackground  "UI\Widgets\Glues\GlueScreen-Button1-BackdropBackground.blp",
        BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
        BackdropCornerSize  0.016,
        BackdropBackgroundSize  0.032,
        BackdropBackgroundInsets 0.004 0.004 0.004 0.004,
        BackdropEdgeFile  "UI\Widgets\Glues\GlueScreen-Button1-BorderedBackdropBorder.blp",
    }

    ControlDisabledBackdrop "PlayerSlotPopupMenuDisabledBackdrop",
    Frame "BACKDROP" "PlayerSlotPopupMenuDisabledBackdrop" {
        BackdropTileBackground,
        BackdropBackground  "UI\Widgets\Glues\GlueScreen-Button1-BackdropBackground-Disabled.blp",
        BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
        BackdropCornerSize  0.016,
        BackdropBackgroundSize  0.032,
        BackdropBackgroundInsets 0.004 0.004 0.004 0.004,
        BackdropEdgeFile  "UI\Widgets\Glues\GlueScreen-Button1-BorderedBackdropBorder-Disabled.blp",
    }

    ControlPushedBackdrop "PlayerSlotPopupMenuPushedBackdrop",
    Frame "BACKDROP" "PlayerSlotPopupMenuPushedBackdrop" {
        BackdropTileBackground,
        BackdropBackground  "UI\Widgets\Glues\GlueScreen-Button1-BackdropBackground.blp",
        BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
        BackdropCornerSize  0.016,
        BackdropBackgroundSize  0.032,
        BackdropBackgroundInsets 0.004 0.004 0.004 0.004,
        BackdropEdgeFile  "UI\Widgets\Glues\GlueScreen-Button1-BorderedBackdropBorder-Down.blp",
    }

    PopupTitleFrame "PlayerSlotPopupMenuTitle",
    Frame "GLUETEXTBUTTON" "PlayerSlotPopupMenuTitle" INHERITS WITHCHILDREN "StandardPopupMenuTitleTemplate" {
    }

    PopupArrowFrame "PlayerSlotPopupMenuArrow",
    Frame "BUTTON" "PlayerSlotPopupMenuArrow" INHERITS WITHCHILDREN "StandardPopupMenuArrowTemplate" { 
    }
}

// -- FRAMES ----------------------------------------------------

Frame "CONTROL" "PlayerSlot" {
    Height 0.025,

    Frame "TEXT" "DownloadValue" INHERITS "StandardLabelTextTemplate" {
        Width 0.01,
        UseActiveContext,
        SetPoint LEFT, "PlayerSlot", LEFT, 0.0, 0.0,
    }

    Frame "POPUPMENU" "NameMenu" INHERITS WITHCHILDREN "PlayerSlotPopupMenu" {
        Width 0.153,
        UseActiveContext,
        SetPoint LEFT, "DownloadValue", RIGHT, -0.01, 0.0,

        PopupMenuFrame "NamePopupMenuMenu",
        Frame "MENU" "NamePopupMenuMenu" INHERITS WITHCHILDREN "StandardPopupMenuMenuTemplate" {
            UseActiveContext,
        }
    }

    Frame "POPUPMENU" "RaceMenu" INHERITS WITHCHILDREN "PlayerSlotPopupMenu" {
        Width 0.114,
        UseActiveContext,
        SetPoint LEFT, "NameMenu", RIGHT, 0.0, 0.0,

        PopupMenuFrame "RacePopupMenuMenu",
        Frame "MENU" "RacePopupMenuMenu" INHERITS WITHCHILDREN "StandardPopupMenuMenuTemplate" {
            UseActiveContext,

            MenuItem "RANDOM",     -2,
            MenuItem "HUMAN",      -2,
            MenuItem "ORC",        -2,
            MenuItem "UNDEAD",     -2,
            MenuItem "NIGHT_ELF",  -2,
        }
    }

    Frame "BUTTON" "TeamButton" {
        Height 0.025,
        Width 0.087,
        UseActiveContext,
        SetPoint LEFT, "RaceMenu", RIGHT, 0.0, 0.0,

        ControlBackdrop "TeamButtonBackdrop",
        Frame "BACKDROP" "TeamButtonBackdrop" {
            UseActiveContext,
            BackdropTileBackground,
            BackdropBackground  "UI\Widgets\Glues\GlueScreen-Button1-BackdropBackground.blp",
            BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
            BackdropCornerSize  0.016,
            BackdropBackgroundSize  0.032,
            BackdropBackgroundInsets 0.004 0.004 0.004 0.004,
            BackdropEdgeFile  "UI\Widgets\Glues\GlueScreen-Button1-BorderedBackdropBorder.blp",
        }

        ControlDisabledBackdrop "TeamButtonDisabledBackdrop",
        Frame "BACKDROP" "TeamButtonDisabledBackdrop" {
            UseActiveContext,
            BackdropTileBackground,
            BackdropBackground  "UI\Widgets\Glues\GlueScreen-Button1-BackdropBackground-Disabled.blp",
            BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
            BackdropCornerSize  0.016,
            BackdropBackgroundSize  0.032,
            BackdropBackgroundInsets 0.004 0.004 0.004 0.004,
            BackdropEdgeFile  "UI\Widgets\Glues\GlueScreen-Button1-BorderedBackdropBorder-Disabled.blp",
        }

        Frame "TEXT" "TeamButtonTitle" {
            UseActiveContext,
            SetPoint LEFT, "TeamButton", LEFT, 0.01, 0.0,
            DecorateFileNames,
            FrameFont "MasterFont",0.011,"",
            FontFlags "FIXEDSIZE",
        }

        Frame "BACKDROP" "TeamButtonArrow" { 
            UseActiveContext,
            Height 0.011,
            Width 0.011,
            SetPoint RIGHT, "TeamButton", RIGHT, -0.008, 0.0,
            BackdropBlendAll,
            BackdropBackground "UI\Widgets\Glues\GlueScreen-Pulldown-Arrow.blp",
        }

    }

    Frame "BUTTON" "ColorButton" {
        Height 0.025,
        Width 0.04,
        UseActiveContext,
        SetPoint LEFT, "TeamButton", RIGHT, 0.0, 0.0,

        ControlBackdrop "ColorButtonBackdrop",
        Frame "BACKDROP" "ColorButtonBackdrop" {
            UseActiveContext,
            BackdropTileBackground,
            BackdropBackground  "UI\Widgets\Glues\GlueScreen-Button1-BackdropBackground.blp",
            BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
            BackdropCornerSize  0.016,
            BackdropBackgroundSize  0.032,
            BackdropBackgroundInsets 0.004 0.004 0.004 0.004,
            BackdropEdgeFile  "UI\Widgets\Glues\GlueScreen-Button1-BorderedBackdropBorder.blp",
        }

        ControlDisabledBackdrop "ColorButtonDisabledBackdrop",
        Frame "BACKDROP" "ColorButtonDisabledBackdrop" {
            UseActiveContext,
            BackdropTileBackground,
            BackdropBackground  "UI\Widgets\Glues\GlueScreen-Button1-BackdropBackground-Disabled.blp",
            BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
            BackdropCornerSize  0.016,
            BackdropBackgroundSize  0.032,
            BackdropBackgroundInsets 0.004 0.004 0.004 0.004,
            BackdropEdgeFile  "UI\Widgets\Glues\GlueScreen-Button1-BorderedBackdropBorder-Disabled.blp",
        }

        Frame "BACKDROP" "ColorButtonValue" {
            UseActiveContext,
            Height 0.0125,
            Width 0.0125,
            SetPoint LEFT, "ColorButton", LEFT, 0.007, 0.0,
        }

        Frame "BACKDROP" "ColorButtonArrow" { 
            UseActiveContext,
            Height 0.011,
            Width 0.011,
            SetPoint RIGHT, "ColorButton", RIGHT, -0.008, 0.0,
            BackdropBlendAll,
            BackdropBackground "UI\Widgets\Glues\GlueScreen-Pulldown-Arrow.blp",
        }

    }

    Frame "GLUEPOPUPMENU" "HandicapMenu" INHERITS WITHCHILDREN "PlayerSlotPopupMenu" {
        Width 0.054,
        UseActiveContext,
        SetPoint LEFT, "ColorButton", RIGHT, 0.0, 0.0,

        PopupMenuFrame "HandicapPopupMenuMenu",
        Frame "MENU" "HandicapPopupMenuMenu" INHERITS WITHCHILDREN "StandardPopupMenuMenuTemplate" {
            UseActiveContext,

            MenuItem "PERCENT_100",    -2,
            MenuItem "PERCENT_90",     -2,
            MenuItem "PERCENT_80",     -2,
            MenuItem "PERCENT_70",     -2,
            MenuItem "PERCENT_60",     -2,
            MenuItem "PERCENT_50",     -2,
        }
    }

    Frame "TEXT" "PingValue" INHERITS "StandardLabelTextTemplate" {
        Width 0.0225,
        Height 0.0125,
        
        FrameFont "MasterFont",0.011,"",
        FontFlags "FIXEDSIZE",
            
        UseActiveContext,
        SetPoint LEFT, "HandicapMenu", RIGHT, 0.0, 0.0,
    }
}

// -- TEAMCOLORMENU ----------------------------------------------------

Frame "CONTROL" "TeamColorMenu" {
    Width 0.18,
    Height 0.2,
    UseActiveContext,

    ControlBackdrop "TeamColorMenuBackdrop",
    Frame "BACKDROP" "TeamColorMenuBackdrop" INHERITS "StandardBorderedButtonBackdropTemplate" {
        UseActiveContext,
    }

    Frame "SCROLLBAR" "TeamColorMenuScrollBar" INHERITS WITHCHILDREN "StandardScrollBarTemplate" {
        SetPoint TOPRIGHT, "TeamColorMenu", TOPRIGHT, 0.0, 0.0,
        UseActiveContext,
    }
}
Где здесь id фрейма?((
prog:
люди обычно включают мозг и смотрят по содержимому похож ли фрейм на то что они ищут, если похож, то проверяют уже на практике, если нет, то ищут дальше.
Мне б сократить диапазон поиска. К примеру - 2 папки внутри framedef: "ui" и "glue". Как-то отсортированы фреймы по этим папкам или просто в две кучи всё намешано?
А ещё в framedef.toc есть такие 4 строки:
UI\FrameDef\GlobalStrings.fdf
UI\FrameDef\InfoPanelStrings.fdf
UI\FrameDef\NetworkStrings.fdf
UI\FrameDef\DateStrings.fdf
Этих файлов нет ни в одной из двух вышеперечисленных папок. А где они тогда?
24
Frame <тип фрейма> <айди фрейма> [наследование] {
[параметры фрейма и вложенные фреймы]
},

А где они тогда?
Поскольку это файлы строк судя по названию, то, очевидно, где-то в локалях.
11
В общем, я щас пробую свой фрейм отобразить. У меня вот так пока код написан. Это верно?
function Trig_Frames_Actions takes nothing returns nothing
	call BlzLoadTOCFile("war3mapimported\\myframe.toc")
endfunction

//===========================================================================
function InitTrig_Frames takes nothing returns nothing
    set gg_trg_Frames = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Frames, function Trig_Frames_Actions )
endfunction
Вопрос в том, какая команда позволит отобразить фрейм из этого ток файла. У меня и ток, и фдф импортированы в карту.
Загруженные файлы
11
И вот, что содержит ток файл:
war3mapImported\GlobalHeroMy.fdf
prog, эти глобалы сидит внутри движка =)
Взломать можете?:D
24
эти глобалы сидит внутри движка =)
А вот и нет

DopaMine, теперь ищи нативку создающую фрейм по айдишнику. Я не подскажу т.к. не помню уже какая именно нативка для этого используется, а заново искать по статьям здесь и на хайве мне лениво.
11
А дальше создаешь фрейм функцией создания фрейма.
Не нашёл функцию нигде, которая позволяет создать фрейм( Помогите плес
prog:
DopaMine, теперь ищи нативку создающую фрейм по айдишнику. Я не подскажу т.к. не помню уже какая именно нативка для этого используется, а заново искать по статьям здесь и на хайве мне лениво.
Эх. Ну хоть как её гуглить?(
Чтобы оставить комментарий, пожалуйста, войдите на сайт.