Упростил насколько мог и спрессовал OmniCC в 3 макроса. Еще не тестил, макросы надо запускать по очереди (каждый раз после входа в игру)
Код:
/run qft=function(s) if s<3600 and s>=60 then return format("%dm",floor(s/60+1)) elseif s<1 then return format("%.1f",s) elseif s<60 then return floor(s+1) else return format("%dh",floor(s/3600+1)) end end
/run ou="OnUpdate" sc="SetCooldown" gh=GameFontHighlight ab=ActionButton1Cooldown fna=function(s,elapsed) s.r=s.et-GetTime() if s.r>0 and s.t:IsShown() then s.t:SetText(qft(s.r)) else s.t:SetText("") s.t:Hide() s:SetScript(ou,nil) end end
/run hooksecurefunc(getmetatable(ab).__index,sc,function(s,st,d) if st>0 then s.et=st+d s.t=s.t or s:CreateFontString(nil,"OVERLAY",gh) s.t:SetPoint("BOTTOM",0,2) s:SetScript(ou,fna) s.t:Show() elseif s.t then s.t:Hide() s:SetScript(ou,nil) end end)
я конечно могу ошибаться. первая строка всего лишь преобразование секунд в минуты, красиво но не жизненно необходимо а вот переменная ab=ActionButton1Cooldown разве это не определение первой кнопки ? и весь этот скрипт будет обрабатывать кд только для 1й кнопки.
для ликвидации данного скрипта можно использовать команду /script ReloadUI()
дома потестил - оказалось что не все так просто, с 4.3 патча изменили систему интерфейса кд, так что в три макроса точно не получится (нужны хуки) - попробую все же дальше.
Hexus, от ActionButton1Cooldown берется хук на метод "SetCooldown" для всех фреймов
21 дек 2011, 21:04
Hexus
0
OmniCC в 3 макроса
может лучше пробовать так ab=ActionButton1.Cooldown раз уж это метод
ActionButton1Cooldown это именно обьект фрейма, а то что ты написал - такого нет, это похоже на какой-то метод, но его не существует на самом деле. вот ActionButton1Cooldown.SetCooldown - этот метод существует. Посмотри , и поищи там $parentCooldown.
22 дек 2011, 06:22
Отрицание
[1.8]
0
OmniCC в 3 макроса
Скрытый текст
Я немного недопонял определение области видимости переменных для так называемых "chunk" луа кода. Из того, что читал в офф мануале я так понял, что каждый "chunk" кода является анонимной функцией и имеет свою область видимости переменных. Но как эти "chunk" разделяются? Оператором ";"? А весь мой аддон является одним большим "chunk" кода, если только в нем не встречаются ";"? Вообще какой смысл использования ";"? Когда-то читал, что если ты вводишь весь свой код одной строкой без переносов строки (энтеров), то там, где по логике должен стоять энтер (типа выполнение какого-то следующего действия), то там нужно ставить ";", но на практике все работает и без них.
Ну и при запуске кода через /run, каждый новый /run это отдельный "chunk" имеющий свою область видимости переменных, и если в одном /run у тебя local zxc = 1, то в следующем /run она уже не существует.
Или ";" вообще что-то левое и устаревшее, а разделение кода на "chunk" происходит при запуске функций аналогичных dofile (ну а /run это ее близовский аналог).
Пока писал ^, понял, что надо просто пойти почитать еще раз офф мануал, но все-же оставлю это здесь.
Правильней конечно же разделять через ";" Если объявить local param - оно видно только для следующего после обьявления кода, а если просто param - уже глобальная переменная, и она должна быть видна в других участках кода, включая процедуры (если что-то ее по дороге не переопределит)
/run /script - обычный RunScript
22 дек 2011, 11:17
Отрицание
[1.8]
0
OmniCC в 3 макроса
Угу, а все глобальные переменные хранятся в таблице _G, из чего следует забавный способ самоубийства интерфейса, прописать _G = nil А для того, что-бы не захламлять среду глобальных переменных в начале аддона не плохо делать что-то в таком роде:
Таким образом, внутри нашего аддона нам будут доступны все стандартные функции (как метаметоды из метаталлицы _G), и в то-же время, если мы объявляем глобальную переменную, то она в таблице _G окажется вложенной внутри таблицы с названием нашего аддона, то есть единственное что мы "выставляем" в общую _G это переменную с именем аддона.
22 дек 2011, 18:41
Марантиди
0
OmniCC в 3 макроса
Фернир,если свободное времичко будет,на триню по арена фреймам подскажи
макрос на приоритет отображения анстейбла и вампирика для диспелеров на стандартных рейд фреймах
Код:
/run local d,o={[30108]=1,[87100]=1},CompactUnitFrame_UtilIsPriorityDebuff CompactUnitFrame_UtilIsPriorityDebuff=function(...) local u,i,f=... if d[select(11,UnitDebuff(u,i,f))]==1 then return true end return o(...) end
/run MTF=function(i) f=CF(FR,nil,_G[AEF..i]) f:SetPoint("TOPLEFT") f:SetSize(20,20) f.c=CF(CLD,nil,f) f.c:SetAllPoints(f) f.t=f:CreateTexture(nil,BRD) f.t:SetAllPoints() f.t:SetTexture(TTX) f:Hide() f:RegisterEvent(USCS) f.u="arena"..i return f end
/run TFU=function(s,e,u,n,r,l,si) if(s.u==u)then if(si==59752 or si==42292)then s:Show() s.c:SetCooldown(GetTime(),120) elseif si==7744 then s:Show() s.c:SetCooldown(GetTime(),45) end end end for i=1,3 do f=MTF(i) f:SetScript("OnEvent",TFU) end
28 дек 2011, 15:05
fuss
[0.1]
0
OmniCC в 3 макроса и прочие штуки
Не работает на OmniCC. На тринкеты работает? А то, что были на AJ перестали работать (двигал стандартные фреймы скриптами)
Не работает на OmniCC. На тринкеты работает? А то, что были на AJ перестали работать (двигал стандартные фреймы скриптами)
те, что на AJ работают только на евро, т.к. названия тринок и вотфа на ру другие
29 дек 2011, 11:10
fuss
[0.1]
0
OmniCC в 3 макроса и прочие штуки
Fernir писал(а):
fuss писал(а):
Не работает на OmniCC. На тринкеты работает? А то, что были на AJ перестали работать (двигал стандартные фреймы скриптами)
те, что на AJ работают только на евро, т.к. названия тринок и вотфа на ру другие
Я далек от всего этого, но разве отображение спелов\тринкетов и прочего на AJ не по ID было?
Но вопрос еще актуален, работает или нет? А то не работает и тот, что скидывали адоном в теме про UI (до патча он точно работал)
И еще вопрос, если аренафреймы подвинуть не скриптом (а то у меня периодически, особенно после стелса, начинает с ними херня творится), с адоном MoveAnything, отображение тринкетов так же будет привязано к фрейму, или останутся на месте где стандартно должны быть расположены фреймы?
P.S. Надо отдельную прикрепленную тему, в которой будут собраны все скрипты (от тринкетов и фреймов, до простых на скалинг и убирание панелек), но только 100% рабочие и без обсуждения (просто такой себе мини-гайд))
На сайте использованы материалы, принадлежащие Blizzard Entertainment. Копирование материалов возможно только c разрешения портала. В противном случае это будет называться уже другим словом.