Добавлен , опубликован
Способ реализации:
Lua
Версия Warcraft:
В этой неверноятно маленькой статье я расскажу о очень важной функции которые нам дали близзард, по факту я её первое время считал бесполезной, ибо никак не мог найти её применения. Если что я о BlzFrameGetChildrenCount и её подруге BlzFrameGetChild
function BlzFrameGetChildrenCount (frame) return integer end --native
function BlzFrameGetChild  (frame, index) return frame2 end --native
BlzFrameGetChildrenCount возвращает число детей у любого заданного фрейма, ну а BlzFrameGetChild , возвращает фрейма-ребёнка по индексу.
Если кто не знает, то ранее можно было только создавать детей, указывая для них родительский фрейм, ну и просто узнавать родителя через GetParant.
И вот, благодаря совместным мучениям, но pro100master нашел на 10 минут раньше чем я, было найдено решение одного ужасно неприятного бага, благодаря новой функции, а именно:
Некликабельность области 12 элементов в панели приказов, даже если сами кнопки скрыты перемещены, удалены. И существовал лишь дикий костыль, при котором пришлось задирать всю консоль в облака (вверх) или за экран, а потом писать второй костыль на опускание чата, ибо тогда он задирался или же улетал в небытие.
Если кто ещё не понял, я о этой области
Любой фрейм в этой области может существовать, но на него не буду действовать никакие события, типа клика, наведения и всех остальных, для тех кто ещё не понял о чем я:
Если что это видео вот с этой замечательной наработки
www.hiveworkshop.com/threads/lua-ui-move-able-frame.319958/#post..., которая была сделана ещё до патча, и до того как мы это нашли, хз знает ли Tasyen.
Конечно, к его наработке в его тестовой карте это не слишком применимо, так как он не убирает саму панель приказов, но максимально акуально реализовано вот тут
Удаление треклятой рамки, позволило отрисовать заново кнопки на панели приказов и получить события наведения, клика, да и прокрутки мыши..
Если из новичков при попытке создания своего интерфейса столкнётся с этой проблемой то вот ответ.
Проблеме было больше года, и вот самое изящное решение, в 1 строчку
BlzFrameSetScale(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI",0),5), 0.001)
`
ОЖИДАНИЕ РЕКЛАМЫ...
21
Спасибо за статью. А как это вы нашли? Каждый фрейм перебирали?
33
ScopteRectuS:
Спасибо за статью. А как это вы нашли? Каждый фрейм перебирали?
Не поверишь да, просто методом научного и ненаучного тыка, есть разбор каждого фрейма, но инфа затерялась
22
ну изначально берги уверял что он неизвестный мертвая зона а я ему говорил что такого нет а есть только фрейм. И методом я перебирал каждый фрейм и переместил в центр экрана и увидел 5 номер фрейма мертвой зоной и развеял миф и берги его сделал уменшение и радует.
27
у вас работает эта строчка BlzFrameSetScale(BlzFrameGetChild(BlzGetFrameByName("ConsoleUI",0),5), 0.001)

короче с SimpleButton тоже была проблема, но если уровень поднять выше, то вообще нет никаких проблем с SimpleButton. но она такая ограниченная в возможностях и функционале. Там один клик и всё, а где MOUSE UP/MOUSE DOWN, MOUSE ENTER/MOUSE LEAVE. Нет динамичной смены текстур, и tooltip
Поэтому работают с обычными кнопками. Они вот не работают. ура заработало =(( короче там кнопки CommandButton родителей тоже надо выключить, иначе не дают кликнуть, наверн там какой нибудь невидимый родитель-SimpleFrame застолбил место, и поэтому никак не кликнуть в ячейку. Я уже догадываюсь как такого же родителя делать. Ну если вы хотите поставить кастомную кнопку:
отключаете родителя-ячейку <- ставите свой фрейм
код
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,0)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,1)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,2)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,3)), FALSE)    BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,4)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,5)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,6)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,7)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,8)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,9)), FALSE)
BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,10)), FALSE)              BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,11)), FALSE)

все строчка тоже работаеть
Чтобы оставить комментарий, пожалуйста, войдите на сайт.