Добавлен , опубликован

FDF

Ниже будет изложено именно это
раскрыть
Импортная FDF, это единственное, что нужно импортировать, содержимое её вот такое
раскрыть
// -- INCLUDE FILES ---------------------------------------------

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

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

Frame "TEXT" "DemoButtonTextTemplate" {
    DecorateFileNames,
    FrameFont "MasterFont", 0.013, "",
    FontJustificationH JUSTIFYCENTER,
    FontJustificationV JUSTIFYMIDDLE,
    FontFlags "FIXEDSIZE",
    FontColor 1.0 1.0 1.0 1.0,
    //FontHighlightColor 1.0 1.0 1.0 1.0,
    //FontDisabledColor 0.5 0.5 0.5 1.0,
	FontShadowColor 0.0 0.0 0.0 0.9,
    FontShadowOffset 0.001 -0.001,
}
// -- FRAMES ----------------------------------------------------
Frame "GLUETEXTBUTTON" "GlueWText" {	
    // текстура
    ControlBackdrop "DemoButtonBackdropTemplate",
    Frame "BACKDROP" "DemoButtonBackdropTemplate" {
    }

    // Текст в центре фрейма
    ButtonText "DemoButtonText",
    Frame "TEXT" "DemoButtonText" INHERITS "DemoButtonTextTemplate" {
    }
}
Кастомная FDF является кнопкой расширенного типа GLUETEXTBUTTON в дефолте это просто кнопки меню, и она обладает 1 странным багом
Нельзя добавить текст во внутрь, а если текст и наложить, но кнопка будет некликабельной в области текста. Эта FDF и решает этот баг.

Для примера

Демокод

do --Инициализация
	TimerStart(CreateTimer(), 1, false, function()
		--создаёт триггер отлова клавишь
		if not BlzLoadTOCFile("Main.toc") then
			print("errloadtoc")
		end
		TimerStart(CreateTimer(), 1, false, function()
			CreateAbilityFrame(0.4,0.3,nil,9999,Player(0))
		end)
	end)
end
--

function CreateAbilityFrame(posX,PosY,texture,chargesCount,player) -- позиция 1 - 12
	local NextPoint=0.039
	if not texture then
		texture="ReplaceableTextures\\CommandButtons\\BTNSelectHeroOn"
	end
	local SelfFrame = BlzCreateFrame("GlueWText", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)

	BlzFrameSetVisible(SelfFrame,false)
	BlzFrameSetVisible(SelfFrame,GetLocalPlayer()==player)
	BlzFrameSetTexture(BlzFrameGetChild(SelfFrame, 0), texture, 0, true)
	BlzFrameSetText(BlzFrameGetChild(SelfFrame, 1), "99")
	BlzFrameSetSize(SelfFrame,NextPoint,NextPoint)
	BlzFrameSetAbsPoint(SelfFrame,FRAMEPOINT_CENTER,posX,PosY)
	local ChargeContent=BlzCreateFrame("GlueWText", SelfFrame, 0, 0)
	local chargesBox=BlzFrameGetChild(ChargeContent, 0)-- рамка
	local chargesText=BlzFrameGetChild(ChargeContent, 1)-- текст заряда

	BlzFrameSetText(chargesText, chargesCount)
	BlzFrameSetTexture(chargesBox, "UI\\Widgets\\Console\\Human\\CommandButton\\human-button-lvls-overlay", 0, true)
	BlzFrameSetSize(ChargeContent,NextPoint/1.5,NextPoint/3)
	BlzFrameSetScale(chargesText,0.6)
	BlzFrameSetPoint(ChargeContent, FRAMEPOINT_BOTTOMRIGHT, SelfFrame, FRAMEPOINT_BOTTOMRIGHT, 0.001,0.)

	--print(BlzFrameGetChildrenCount(SelfFrame))

	if true then -- События кликов по кнопке
		print("создана ативная кнопка")
		local  ClickTrig = CreateTrigger()
		BlzFrameSetEnable(BlzGetTriggerFrame(), false)
		BlzFrameSetEnable(BlzGetTriggerFrame(), true)
		BlzTriggerRegisterFrameEvent(ClickTrig, SelfFrame, FRAMEEVENT_CONTROL_CLICK)
		BlzTriggerRegisterFrameEvent(ClickTrig, ChargeContent, FRAMEEVENT_CONTROL_CLICK)
		TriggerAddAction(ClickTrig, function ()
			print("Нажата кнопка ")
			BlzFrameSetEnable(BlzGetTriggerFrame(), false)
			BlzFrameSetEnable(BlzGetTriggerFrame(), true)
		end)
	end
	local  TrigMOUSE_ENTER = CreateTrigger()
	BlzTriggerRegisterFrameEvent( TrigMOUSE_ENTER, SelfFrame, FRAMEEVENT_MOUSE_ENTER)
	BlzTriggerRegisterFrameEvent( TrigMOUSE_ENTER, ChargeContent, FRAMEEVENT_MOUSE_ENTER)
	TriggerAddAction( TrigMOUSE_ENTER, function ()
		print("показать подсказку")
	end)
	local  TrigMOUSE_LEAVE = CreateTrigger()
	BlzTriggerRegisterFrameEvent( TrigMOUSE_LEAVE, SelfFrame, FRAMEEVENT_MOUSE_LEAVE)
	BlzTriggerRegisterFrameEvent( TrigMOUSE_LEAVE, ChargeContent, FRAMEEVENT_MOUSE_LEAVE)
	TriggerAddAction( TrigMOUSE_LEAVE, function ()
		print("убрать подсказку")
	end)
	return SelfFrame
end
Разумеется не забудьте импортировать fdf и создать toc файл
`
ОЖИДАНИЕ РЕКЛАМЫ...
38
Что он даёт так и не понял, есть скрины?
33

Без потери кликабельности

Если работать на дефолте то зоны с 99 и 9999 будут игнорировать все эвенты мыши
8
Именно фрейм-наработок я ждал все это время. Спасибо!
22
Почему меня не позвал =) Спс за ссылку дискорд.
33
Почему меня не позвал =)
Так это же было месяц назад уже, ты был не актив недели 3
27
кстати я никак не могу disabledBackdrop запустить с изображением, вернее вставить. да и не работает эта штука во время паузы. только кажись если триггерно отключить фрейм работает. не подключить никак в игру (во время паузы мой кастомный фрейм должен поменять на неактивное изобр, а он не меняется). и если это не работает, то нужно тогда будет отслеживать таймером паузу, и вставлять disabled. Нужно ли делать вторую неактивное изображение ?
код fdf
    ControlDisabledBackdrop "MyButtonDisabledBackdropTemplate",
    Frame "BACKDROP" "MyButtonDisabledBackdropTemplate" {
        DecorateFileNames,
        BackdropTileBackground,
        BackdropBackground  "ReplaceableTextures\CommandButtonsDisabled\DISBTNSelectHeroOn.blp",
        BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
        BackdropCornerSize  0.0125,
        BackdropBackgroundSize  0.256,
        BackdropBackgroundInsets 0.005 0.005 0.005 0.005,
        BackdropEdgeFile  "EscMenuButtonDisabledBorder",
    }
33
(во время паузы мой кастомный фрейм должен поменять на неактивное изобр, а он не меняется)
Не нужно ничего делать, радуйтесь что ничего не зеленеет при паузе, можно смело забить вообще, для неактивности нет смысла вообще делать это у фреймов, а темболее в кастом фдф, когда у дефолтных омжно менять на лету текстуру
BlzFrameSetTexture(Frame, "ReplaceableTextures\\CommandButtons\\BTNCryptFiendBurrow", 0, true)
Так же есть вот такая вот штука
function GetPassiveIco(s)
    return string.gsub(s, "CommandButtons\\BTN", "CommandButtonsDisabled\\DISBTN")
end
Позволяет получить пассивный путь у любой дефолтной активной иконки

BlzFrameSetTexture(Frame, GetPassiveIco("ReplaceableTextures\\CommandButtons\\BTNCryptFiendBurrow"), 0, true)
27
Bergi_Bear, у меня есть триггер, который ежесекудно чекает выделен у игрока локально ли раб. Кнопки-фреймы же для раба сделаны. В нее же с таким же успехом можно и чекать паузу. Или юзать импорт, но он не работает. Не смог че то disabled texture запускать без триггеров, текстуру можно заменить.
Пауза бывает: сингл-плеерная и мультиплеерная. У сингл-игрока все запаузено, в мультиплеере, только интерфейс вроде. Легче какие то кнопки или элементы интерфейса проверить, выключены ли фреймы. Вот как проверить то?

ладно паузу наверн не отследить. то ли дебаг не работает или триггеры во время паузы. короче все. будем без этого
33
Мне кажется это отключение-затемнение вообще не стоит делать
27
Нельзя добавить текст во внутрь, а если текст и наложить, но кнопка будет некликабельной в области текста.
А если уровни менять, то текст с остальными должен на задний план уйти? и кнопка должна быть выше
33
Смена уровней не помогает, даже если сделать наоборот, Создать текст первым и на него наложить глюбаттон, который даже видимость его перекроет, всё равно область будет некликабельной тут правильней свой алфавит на бекдропах подгрузить, но лучше просто использовать fdf
11
Подскажите плз подробно, куда и что вставлять на пустой карте! Какие именно файлы создавать и где? Куда вставлять куски кода?

DopaMine:
Подскажите плз подробно, куда и что вставлять на пустой карте! Какие именно файлы создавать и где? Куда вставлять куски кода?
Чтоб просто появилась возможность создавать панель с кнопками, а так же удалять стандартную панель
Чтобы оставить комментарий, пожалуйста, войдите на сайт.