OmniCC в 3 макроса и прочие штуки  
Автор Сообщение

0
Сообщение OmniCC в 3 макроса
Fernir писал(а):

Упростил насколько мог и спрессовал 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()


21 дек 2011, 21:02
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение OmniCC в 3 макроса
дома потестил - оказалось что не все так просто, с 4.3 патча изменили систему интерфейса кд, так что в три макроса точно не получится (нужны хуки) - попробую все же дальше.

Hexus, от ActionButton1Cooldown берется хук на метод "SetCooldown" для всех фреймов


21 дек 2011, 21:04
Профиль

0
Сообщение OmniCC в 3 макроса
может лучше пробовать так ab=ActionButton1.Cooldown раз уж это метод


21 дек 2011, 21:13
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение OmniCC в 3 макроса
ActionButton1Cooldown это именно обьект фрейма, а то что ты написал - такого нет, это похоже на какой-то метод, но его не существует на самом деле. вот ActionButton1Cooldown.SetCooldown - этот метод существует. Посмотри http://wowprogramming.com/utils/xmlbrow ... mplate.xml, и поищи там $parentCooldown.


22 дек 2011, 06:22
Профиль

0
Сообщение OmniCC в 3 макроса
Я немного недопонял определение области видимости переменных для так называемых "chunk" луа кода. Из того, что читал в офф мануале я так понял, что каждый "chunk" кода является анонимной функцией и имеет свою область видимости переменных. Но как эти "chunk" разделяются? Оператором ";"? А весь мой аддон является одним большим "chunk" кода, если только в нем не встречаются ";"?
Вообще какой смысл использования ";"? Когда-то читал, что если ты вводишь весь свой код одной строкой без переносов строки (энтеров), то там, где по логике должен стоять энтер (типа выполнение какого-то следующего действия), то там нужно ставить ";", но на практике все работает и без них.

Ну и при запуске кода через /run, каждый новый /run это отдельный "chunk" имеющий свою область видимости переменных, и если в одном /run у тебя local zxc = 1, то в следующем /run она уже не существует.

Или ";" вообще что-то левое и устаревшее, а разделение кода на "chunk" происходит при запуске функций аналогичных dofile (ну а /run это ее близовский аналог).

Пока писал ^, понял, что надо просто пойти почитать еще раз офф мануал, но все-же оставлю это здесь.


22 дек 2011, 10:54
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение OmniCC в 3 макроса
Правильней конечно же разделять через ";"
Если объявить local param - оно видно только для следующего после обьявления кода, а если просто param - уже глобальная переменная, и она должна быть видна в других участках кода, включая процедуры (если что-то ее по дороге не переопределит)

/run /script - обычный RunScript


22 дек 2011, 11:17
Профиль

0
Сообщение OmniCC в 3 макроса
Угу, а все глобальные переменные хранятся в таблице _G, из чего следует забавный способ самоубийства интерфейса, прописать _G = nil
А для того, что-бы не захламлять среду глобальных переменных в начале аддона не плохо делать что-то в таком роде:

MyAddonName = {}
setmetatable(MyAddonName, {__index = _G})
setfenv(1, MyAddonName)

Таким образом, внутри нашего аддона нам будут доступны все стандартные функции (как метаметоды из метаталлицы _G), и в то-же время, если мы объявляем глобальную переменную, то она в таблице _G окажется вложенной внутри таблицы с названием нашего аддона, то есть единственное что мы "выставляем" в общую _G это переменную с именем аддона.


22 дек 2011, 18:41
Профиль

0
Сообщение OmniCC в 3 макроса
Фернир,если свободное времичко будет,на триню по арена фреймам подскажи


22 дек 2011, 20:57
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
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


23 дек 2011, 15:59
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение OmniCC в 3 макроса
оставлю это тут, не тестировал - 3 макроса (добавление тринкетов к стандартным арена фреймам)
в оригинале их 5 или 6
Код:
/run CF=CreateFrame AEF="ArenaEnemyFrame" BRD="BORDER" TTX="Interface\\Icons\\inv_jewelry_trinketpvp_01" USCS="UNIT_SPELLCAST_SUCCEEDED" FR="Frame" CLD="Cooldown"

/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
Профиль

0
Сообщение OmniCC в 3 макроса и прочие штуки
Не работает на OmniCC. На тринкеты работает? А то, что были на AJ перестали работать (двигал стандартные фреймы скриптами)


28 дек 2011, 20:46
Профиль Skype WWW



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение OmniCC в 3 макроса и прочие штуки
fuss писал(а):

Не работает на OmniCC. На тринкеты работает? А то, что были на AJ перестали работать (двигал стандартные фреймы скриптами)
те, что на AJ работают только на евро, т.к. названия тринок и вотфа на ру другие


29 дек 2011, 11:10
Профиль

0
Сообщение OmniCC в 3 макроса и прочие штуки
Fernir писал(а):

fuss писал(а):

Не работает на OmniCC. На тринкеты работает? А то, что были на AJ перестали работать (двигал стандартные фреймы скриптами)
те, что на AJ работают только на евро, т.к. названия тринок и вотфа на ру другие

Я далек от всего этого, но разве отображение спелов\тринкетов и прочего на AJ не по ID было?

Но вопрос еще актуален, работает или нет? А то не работает и тот, что скидывали адоном в теме про UI (до патча он точно работал)

И еще вопрос, если аренафреймы подвинуть не скриптом (а то у меня периодически, особенно после стелса, начинает с ними херня творится), с адоном MoveAnything, отображение тринкетов так же будет привязано к фрейму, или останутся на месте где стандартно должны быть расположены фреймы?

P.S. Надо отдельную прикрепленную тему, в которой будут собраны все скрипты (от тринкетов и фреймов, до простых на скалинг и убирание панелек), но только 100% рабочие и без обсуждения (просто такой себе мини-гайд))


29 дек 2011, 19:52
Профиль Skype WWW
Начать новую тему Ответить на тему


Перейти:  

На сайте использованы материалы, принадлежащие Blizzard Entertainment. Копирование материалов возможно только c разрешения портала. В противном случае это будет называться уже другим словом.
Рейтинг@Mail.ru