Автор | Сообщение |
---|---|
|
0
как в луа скрывается стандартный кастбар?
|
10 фев 2012, 23:13 |
|
|
0
CastingBarFrame:UnregisterAllEvents()
PetCastingBarFrame:UnregisterAllEvents() |
10 фев 2012, 23:33 |
|
|
0
спс
|
10 фев 2012, 23:42 |
|
|
0
Доброго времени суток всем!
Знает ли кто-нибудь, как реализовать следующее: что есть: когда идет инвайт на ТолБарад или ОЛО, то с заданной периодичностью (каждые несколько секунду) проигрывается мелодия в течение заданного кол-ва времени, т.е. мелодия проигрывается 4 раза в течение 20 сек что не так: если принять инвайт или закрыть окно инвайта в пределах 20 сек, то мелодия продолжает проигрываться что нужно: чтобы при принятии инвайта или при отклонении инвайта мелодия переставала проигрываться Думал, что можно решить вопрос каким-нибудь эвентом с помощью /etrace, но фигня в том, что когда принимаешь инвайт и попадаешь в рейд, то все эвенты игры, предшествующие этому самому попаданию, пропадают, т.е. /etrace начинает писать эвенты заново с момента попадания в рейд. |
16 фев 2012, 16:19 |
|
|
0
Было-бы не плохо увидеть код, но есть пара идей:
За принятие/отклонение инвайта отвечает функция AcceptBattlefieldPort(index, accept) Линк: http://www.wowwiki.com/API_AcceptBattlefieldPort
Ты перехватываешь в своем аддоне вызов этой функции, например так:
local OriginalAcceptBattlefieldPort=AcceptBattlefieldPort
AcceptBattlefieldPort=function(index, accept) --Тут ты вставляешь код который должен прекратить проигрывание музыки OriginalAcceptBattlefieldPort(index, accept) end
А по поводу эвентов, вот описание одного эвента. И вообще вот тут все эвенты, можно по категориям, можно весь список: http://www.wowpedia.org/Events_(API)
"PLAYER_ENTERING_WORLD" Category: System,Player,Instance Fired when the player enters the world, enters/leaves an instance, or respawns at a graveyard. Also fires any other time the player sees a loading screen. To check if the player is entering an instance, check GetPlayerMapPosition to see if both X and Y are zero. Correction on the above comment: When PLAYER_ENTERING_WORLD fires, you'll notice that WORLD_MAP_UPDATE fires just before it. My instincts tell that leaving an instance puts the player in void space momentarily. So for the case that you are entering AND leaving an instance, GetPlayerMapPosition always returns the coordinates [0,0] and hence there is no way to determine using the event PLAYER_ENTERING_WORLD if the player is entering an instance or not. When leaving an instance the following events fire (ignoring party/raid events). WORLD_MAP_UPDATEPLAYER_ENTERING_WORLDWORLD_MAP_UPDATE <--- Player coordinates are non-zero hereInstances do have coordinates for units once the second WORLD_MAP_UPDATE event has fired. For the case of entering a battleground such as WSG, WORLD_MAP_UPDATE won't fire until you leave Silverwing Hold or Warsong Lumber Mill and you are outside.
И вопрос от меня, хочу написать аддон, который модифицировал экшенбары. Для этого мне нужно написать код который будет "перебирать" все существующие кнопки экшенбаров получая от каждой из них информацию о том: Хватает-ли маны на абилку, Если есть цель, то в зоне-ли действия абилки эта цель, Кд абилки, Выполнены-ли специфические условия для использования этой абилки.
Как правило большинство аддонов для каждого из этих состояний окрашивает кнопку специальным образом, а для абилок на кд - показывается кд. А я хочу, что-бы если любое из этих условий выполнено (то есть мы не можем использовать абилку по той или иной причине), то кнопка затенялась всегда одним и тем-же цветом. А в частном случае когда абилка на кд, это затенение не затрагивало само отображение кд, а просто под него подкладывалась еще дополнительная заливка затенения.
Есть идеи о том, как это делается? |
18 фев 2012, 18:50 |
|
|
0
А так-же нужно как-то научится управлять "загорающимися" абилками, которые такой двигающейся желтой рамкой подсвечиваются под проки, то есть что-бы она загоралась и тухла по моим командам, а не сама по себе. |
19 фев 2012, 10:13 |
|
|
0
Отрицание писал(а): А так-же нужно как-то научится управлять "загорающимися" абилками, которые такой двигающейся желтой рамкой подсвечиваются под проки, то есть что-бы она загоралась и тухла по моим командам, а не сама по себе.
|
19 фев 2012, 12:41 |
|
|
0
Это относится к делу, но не управляет скрытием-показыванием, а запрашивает инфо о том играется-ли сейчас анимация.
Нашел в коде близзов функции запускающие и останавливающие анимацию для заданной кнопки:
function ActionButton_ShowOverlayGlow(self)
function ActionButton_HideOverlayGlow(self)
Если в чат ввести
/run ActionButton_ShowOverlayGlow(КнопкаНаКоторойЗажечьАнимашку)
То на этой кнопке зажжется эта рамка. Что-бы узнать это имя кнопки можно воспользоватся скриптом:
/run print( GetMouseFocus():GetName() );
Наведя на фрейм кнопки ввести это, и напишет в чат название кнопки.
Название в функцию включения анимации вводить без кавычек, то есть не строкой, а ссылкой на объект.
А что-бы например убить весь механизм этой анимации (правда довольно грубо) можно сделать так:
/run ActionButton_ShowOverlayGlow = function() end
После этого на кнопках никогда не должна загоратся эта анимация.
Оу, я тупица можно-же так:
/run ActionButton_ShowOverlayGlow(GetMouseFocus()) Это будет "зажигать" те кнопки, над которыми находится курсор, в момент отправления этого скрипта в чат.
|
19 фев 2012, 18:30 |
|
|
0
Отрицание писал(а): И вопрос от меня, хочу написать аддон, который модифицировал экшенбары. Для этого мне нужно написать код который будет "перебирать" все существующие кнопки экшенбаров получая от каждой из них информацию о том:
Хватает-ли маны на абилку, Если есть цель, то в зоне-ли действия абилки эта цель, Кд абилки, Выполнены-ли специфические условия для использования этой абилки.
Как правило большинство аддонов для каждого из этих состояний окрашивает кнопку специальным образом, а для абилок на кд - показывается кд. А я хочу, что-бы если любое из этих условий выполнено (то есть мы не можем использовать абилку по той или иной причине), то кнопка затенялась всегда одним и тем-же цветом. А в частном случае когда абилка на кд, это затенение не затрагивало само отображение кд, а просто под него подкладывалась еще дополнительная заливка затенения.
Есть идеи о том, как это делается? |
20 фев 2012, 16:48 |
|
|
0
Можно ли затавить появляться бафы с лево на право? |
20 фев 2012, 17:36 |
|
|
0
Сейчас смотрю Bartender4, он для создания кнопок использует библиотеку LibActionButton-1.0 (апи библиотеки дает такую функцию как "сделай мне кнопку", полностью решая все вопросы с различными secure\protected execution), думаю разобратся с структурой создаваемой кнопки и решить все без хуков, темболее, что требования расширились.
Хочу что-бы иконка спелла всегда затенялась одинаково (как затеняется в стандартном юи при невыполненных спец условиях, только чуть темнее): для спелла на кд, при нехватке маны, при невыполненных спец условиях, при аут оф реинж. Но, при этом, что-бы для аут оф реинж рамка вокруг кнопки дополнительно окрашивалась красным, а при нехватке маны - синим. На близовских кнопках эта рамка весьма широкая, а на создаваемых LibActionButton там похоже недостает еще одной текстурки, нужно ее допилить.
Кстати, прикол, с этим скриптом /run ActionButton_ShowOverlayGlow(GetMouseFocus()) Можно "зажигать" эту рамку анимации абилки вокруг вообще любого фрейма, даже WorldFrame, забавно.
P.S. Написал аддон для неймплеитов, оставляя стандартный дизайн убирает уровень, агро, дополнительные рамки элиты/босса, и сокращает длинну надписей. Ну и еще показывает тотемы иконками.
#746
#746
#746
#746
#746
iPew писал(а): Можно ли затавить появляться бафы с лево на право?
Думаю для стандартного юи слишком много кода перечитывать нужно что-бы разобратся где где-что перехватывать и переделывать. Может если кто-то писал аддон модифицирующий стандартные ауры, то он быстро сделать это сможет. |
20 фев 2012, 17:44 |
|
|
0
А выложить этот аддон можешь, если не трудно ? |
23 фев 2012, 13:07 |
|
|
0
Выложил (внутри архива 2 папки, обе положить в Addons):
Мой аддон просто немного меняет внешний вид стандартных неймплеитов, а что-бы над ними показавало всякие важные аурки как на скринах скачай еще аддон PlateBuffs |
24 фев 2012, 00:57 |
|
|
0
Хочется более глубоко понять работу всей системы в целом, для представления где и как в памяти распологаются данные.
1) Код: -- Localizes for functions that are frequently called or need to be -- assuredly un-replaceable or unhookable. local type = type; local error = error; local scrub = scrub; local issecure = issecure; local setfenv = setfenv; local loadstring = loadstring; local setmetatable = setmetatable; local getmetatable = getmetatable; local pcall = pcall; local tostring = tostring; local newproxy = newproxy; local select = select;
Код: for i=1,2 Результат: Цитата: first loop: 1 second loop: 2 second loop: 3 second loop: 4 first loop: 2 second loop: 2 second loop: 3 second loop: 4 nil Все работает так, как-будто это две разные переменные. Есть что-то по этому поводу в официальном мануале по луа?
3)
4) Код: local frame = CreateFrame("Frame", nil, UIParent) local FrameClass=getmetatable(frame) for k,v in pairs(FrameClass.__index) do print(k) print(v) end Хотелось-бы узнать, сами эти функции, они на чем написаны? Тоже на луа, или на С? Или часть на луа, а часть на С? И если есть что-то на луа, то где можно посмотреть на реализацию этих функций, этот код входит в тот пак кода близзов, что скачивается с оффсайта? И как вызываются С функции из луа? |
27 фев 2012, 17:30 |
|
|
0
1. кешируют скорее всего потому, что в дальнейшем те глобальные переменные могут измениться и чтобы аддоне не "поехал" делают кеш (имхо) 2. хочешь, чтобы работало правильно - делай уникальные 3. каждый аддон это кусок кода добавленный в некое _G 4. не уверен точно, но CreateFrame - поделка близзов не на LUA точно, помоему ее даже можно запустить путем обьявления делегата (через инжектинг), а вот getmetatable - родная LUA команда написанная скорее всего на C++, print - обертка для SendChatMessage, где лежит - не помню, помоему сделана на LUA |
29 фев 2012, 16:35 |
|
|
0
1. Кроме того, что глобальные переменные могут изменится, в начале говорится о "Localizes for functions that are frequently called", то есть кешируются часто вызываемые функции для ускорения доступа. Я почитал и нашел вот это: http://www.wowace.com/addons/findglobals/ Это утилита для поиска функций которые "выгодно" кешировать. Там в описании есть такой текст, как описание одного из методов реализации этого кеширования: Цитата: Put a "local _G=_G" at the top of the file, and then access them through _G.SomeFunc, etc. This is actually somewhat faster than accessing them directly, believe it or not. (Direct global access involves looking up the global variable table first!)
То есть, как я понял, профит от кеширования глобальных переменных в том, что если мы обращаемся к глобальной переменной, то осуществляется ее поиск в довольно большом массиве (_G), а если мы сохранили ссылки на части этой таблицы в отдельные переменные, то мы сможем, через эти переменные напрямую обращатся к данным, не вызывая индексации огромного массива.
2. Так дело в том, что оно работает абсолютно правильно даже если их не делать уникальными, и то, что после цикла переменная самоуничтожается, уже точно говорит о том, что луа сама как-то следит за ними.
3. _G это таблица, в ней значениями могут быть функции, тогда получается, что аддоны это функции? А если они функции, тогда найдя эту функцию в _G, можно ее запустить, и таким образом загрузить какой-то аддон без перезагрузки интерфейса? Но мне кажется они скорее реализованны как модули.
4. Да, getmetatable родная функция луа, через метатаблицы в луа реализуется ООП, вот классная статья: http://ilovelua.n a r o d.ru/about_lua.html (Тут какой-то парсер выедает домен народа, пришлось писать через пробелы.) Насчет print и SendChatMessage немного наоборот, SendChatMessage обертка для print, а принт родная функция луа. То есть скорее всего API вова это функции близзов написанные, например, на С++, которые как-то вызываются из луа кода. |
01 мар 2012, 00:43 |
|
|
0
Нашел в теме "Ищу аддон" вот такой код: Disality писал(а): Код: MainMenuBarTexture0:Hide()
MainMenuBarTexture1:Hide() MainMenuBarTexture2:Hide() MainMenuBarTexture3:Hide()
MainMenuBarLeftEndCap:Hide() MainMenuBarRightEndCap:Hide()
MainMenuMaxLevelBar0:Hide() MainMenuMaxLevelBar1:Hide() MainMenuMaxLevelBar2:Hide() MainMenuMaxLevelBar3:Hide()
BonusActionBarFrameTexture1:Hide() BonusActionBarFrameTexture2:Hide() BonusActionBarFrameTexture3:Hide() BonusActionBarFrameTexture4:Hide() Вопрос: Как скрыть еще и рамку кнопок?#94
#94 Нашел как называется текстура этой рамки, но не нашел как ее скрыть. |
09 мар 2012, 13:55 |
|
<Лига Тьмы> Сервер: Гордунни |
0
Зайти в настройки - интерфейс - панели - оттображать всегда |
09 мар 2012, 14:32 |
|
|
0
Это что они были видны, если на панели ничего нет. Мне нужно чтобы были НЕ видны вообще. |
09 мар 2012, 15:08 |
|
|
0
Что-бы все сразу скрыть это так:
/run local g = {['MultiBarBottomLeftButton']=true,['ActionButton']=true,['MultiBarBottomRightButton']=true,};for k,v in pairs(g) do for i=1,12 do select(10, _G[k..i]:GetRegions()):Hide() end end
Что-бы скрыть эту рамку на 1 кнопке, вставляешь в чат этот скрипт (но не жмешь энтер): /run select(10, GetMouseFocus():GetRegions()):Hide() Потом наводишь курсор на кнопку на которой хочешь его скрыть и тогда жмешь энтер отправляя скрипт на выполнение. Я, кстати, наоборот искал способ вернуть эту текстурку на место в бартендер, но все лень было найти название текстурки. Без них кнопки слишком жидко и уныло выглядят по моему. |
10 мар 2012, 01:50 |
|