Автор |
Сообщение |
Daniel
[11.7]
|
0
Вопросы по Lua, XML, WoW API.
|
01 апр 2012, 14:24 |
|
|
witcher
[14.3]
|
0
Вопросы по Lua, XML, WoW API.
ты не там ищешь проблему скобочка эта на 27 строке
вот что творится с фреймами:
|
01 апр 2012, 14:31 |
|
|
Отрицание
[1.8]
|
0
Вопросы по Lua, XML, WoW API.
Не совсем понимаю логику, зачем ты делаешь это:
local _, instanceType = IsInInstance() if instanceType == "arena" or "pvp" then
Выходит, что твой скрипт не будет включатся до тех пор пока ты не войдешь на бг или арену? Но после того как зашел он будет работать везде, и в данжах тоже. Какой в этом смысл?
|
01 апр 2012, 14:39 |
|
|
witcher
[14.3]
|
0
Вопросы по Lua, XML, WoW API.
Отрицание писал(а):
Не совсем понимаю логику, зачем ты делаешь это:
local _, instanceType = IsInInstance() if instanceType == "arena" or "pvp" then
Выходит, что твой скрипт не будет включатся до тех пор пока ты не войдешь на бг или арену? Но после того как зашел он будет работать везде, и в данжах тоже. Какой в этом смысл?
возможно, но если их убрать проблема останется
|
01 апр 2012, 14:44 |
|
|
Отрицание
[1.8]
|
0
Вопросы по Lua, XML, WoW API.
Вообще что этот скрипт должен делать?
Окрашивать по классу пати фреймы, убирать некоторый хлам с пати фреймов и менять положение петов для пати?
В теории должно работать так
Код: local f = CreateFrame("Frame") f:SetScript("OnEvent",function(self, event) for i=1,4 do local v,s,f,p,bar,color; if UnitExists("party"..i) then f=_G["PartyMemberFrame"..i]; s=_G["PartyMemberFrame"..i.."Speaker"]:SetAlpha(0); v=_G["PartyMemberFrame"..i.."PVPIcon"]:SetAlpha(0); bar = _G["PartyMemberFrame"..i.."HealthBar"] color = RAID_CLASS_COLORS[select(2,UnitClass(""..i))] bar:SetStatusBarColor(color.r,color.g,color.b) if UnitExists("partypet"..i) then p=_G["PartyMemberFrame"..i.."PetFrame"]; p:SetPoint("TOPLEFT", f, "TOPLEFT", 23, -43); end end end end) f:RegisterEvent("PLAYER_ENTERING_WORLD") f:RegisterEvent("PARTY_MEMBERS_CHANGED") f:RegisterEvent("UNIT_FACTION")
А все остальное там лишнее.
Но можешь еще заодно протестировать так:
Код: local f = CreateFrame("Frame") f:SetScript("OnUpdate",function(self, event) for i=1,4 do local v,s,f,p,bar,color; if UnitExists("party"..i) then f=_G["PartyMemberFrame"..i]; s=_G["PartyMemberFrame"..i.."Speaker"]:SetAlpha(0); v=_G["PartyMemberFrame"..i.."PVPIcon"]:SetAlpha(0); bar = _G["PartyMemberFrame"..i.."HealthBar"] color = RAID_CLASS_COLORS[select(2,UnitClass(""..i))] bar:SetStatusBarColor(color.r,color.g,color.b) if UnitExists("partypet"..i) then p=_G["PartyMemberFrame"..i.."PetFrame"]; p:SetPoint("TOPLEFT", f, "TOPLEFT", 23, -43); end end end end)
Но второй вариант это не подходящее для постоянной работы решение, это чисто потестить некоторую возможность, что-бы понять где проблема.
|
01 апр 2012, 15:04 |
|
|
witcher
[14.3]
|
0
Вопросы по Lua, XML, WoW API.
не работает
Скрытый текст
Message: Interface\AddOns\NeilyoScript\NeilyoScript.lua:513: attempt to index local 'color' (a nil value) Time: 04/01/12 16:21:52 Count: 408 Stack: Interface\AddOns\NeilyoScript\NeilyoScript.lua:513: in function <Interface\AddOns\NeilyoScript\NeilyoScript.lua:503>
Locals: self = <unnamed> { 0 = <userdata> } event = "PARTY_MEMBERS_CHANGED" (for index) = 1 (for limit) = 4 (for step) = 1 i = 1 v = nil s = nil f = PartyMemberFrame1 { 0 = <userdata> portrait = PartyMemberFrame1Portrait { } statusSign = -1 unit = "party1" debuffTotal = 0 statusCounter = 0 healthbar = PartyMemberFrame1HealthBar { } menu = <function> defined @Interface\FrameXML\PartyMemberFrame.lua:105 manabar = PartyMemberFrame1ManaBar { } phasingIcon = PartyMemberFrame1PhasingIcon { } unitHPPercent = 1 threatIndicator = PartyMemberFrame1Flash { } state = "player" myHealPredictionBar = PartyMemberFrame1MyHealPredictionBar { } noTextPrefix = true debuffCountdown = 30 OnEvent = <function> defined *:OnEvent:1 numDebuffs = 0 otherHealPredictionBar = PartyMemberFrame1OtherHealPredictionBar { } name = PartyMemberFrame1Name { } } p = nil bar = PartyMemberFrame1HealthBar { 0 = <userdata> currValue = 152073 frequentUpdates = true textLockable = 1 forceHideText = false cvarLabel = "STATUS_TEXT_PARTY" capNumericDisplay = true TextString = PartyMemberFrame1HealthBarText { } zeroText = "цель мертва" disconnected = false unit = "party1" lockShow = 0 cvar = "partyStatusText" } color = nil (*temporary) = <function> defined =[C]:-1 (*temporary) = PartyMemberFrame1HealthBar { 0 = <userdata> currValue = 152073 frequentUpdates = true textLockable = 1 forceHideText = false cvarLabel = "STATUS_TEXT_PARTY" capNumericDisplay = true TextString = PartyMemberFrame1HealthBarText { } zeroText = "цель мертва" disconnected = false unit = "party1" lockShow = 0 cvar = "partyStatusText" } (*temporary) = 2 (*temporary) = nil (*temporary) = nil (*temporary) = nil (*temporary) = nil (*temporary) = "attempt to index local 'color' (a nil value)"
Отрицание писал(а):
Вообще что этот скрипт должен делать?
Окрашивать по классу пати фреймы, убирать некоторый хлам с пати фреймов и менять положение петов для пати?
Показывает пати фреймы в рейде. Но проблема в том, что просто Show(); не работает как нужно,
фреймы могут пропадать, когда игрок садится на машину на острове завоеваний или еще что-нибудь подобное.
|
01 апр 2012, 15:22 |
|
|
Отрицание
[1.8]
|
0
Вопросы по Lua, XML, WoW API.
:Show() работает как нужно, просто фреймы пропадают потому-что где-то в коде близзов к ним применяется :Hide()
Можно заблокировать применение :Hide(), но тогда нужно писать свой код который будет скрывать фреймы когда ты не в пати и не в рейде, или-же читать код близзов и разбиратся когда и в связи с чем применяется :Hide() и перехватывать каждый отдельно.
|
01 апр 2012, 20:08 |
|
|
witcher
[14.3]
|
0
Вопросы по Lua, XML, WoW API.
Отрицание писал(а):
:Show() работает как нужно, просто фреймы пропадают потому-что где-то в коде близзов к ним применяется :Hide()
Можно заблокировать применение :Hide(), но тогда нужно писать свой код который будет скрывать фреймы когда ты не в пати и не в рейде, или-же читать код близзов и разбиратся когда и в связи с чем применяется :Hide() и перехватывать каждый отдельно.
Проблему со скрытием фреймов я решил более-менее, но вот с цветом большие проблемы.
Он постоянно меняеться на зеленый, иногда даже мелькает очень быстро.
|
01 апр 2012, 21:27 |
|
|
RDIFB0
|
0
Вопросы по Lua, XML, WoW API.
Код: color = RAID_CLASS_COLORS[select(2,UnitClass(""..i))]
А тут так и задумано, что в функцию передаются цифры, или не ?
|
01 апр 2012, 21:52 |
|
|
witcher
[14.3]
|
0
Вопросы по Lua, XML, WoW API.
Вобщем сделал скрипт, за несколько БГ багов не обнаружил, но скорее всего они будут вылезать иногда.
Код:
local f = CreateFrame("Frame") f:RegisterEvent("PLAYER_ENTERING_WORLD") f:RegisterEvent("PLAYER_TARGET_CHANGED") f:RegisterEvent("PLAYER_FOCUS_CHANGED") f:RegisterEvent("PLAYER_GAINS_VEHICLE_DATA") f:RegisterEvent("PLAYER_LOSES_VEHICLE_DATA") f:RegisterEvent("PLAYER_ENTERING_BATTLEGROUND") f:RegisterEvent("PARTY_MEMBERS_CHANGED") f:RegisterEvent("PARTY_LEADER_CHANGED") f:RegisterEvent("PARTY_LOOT_METHOD_CHANGED") f:RegisterEvent("MUTELIST_UPDATE") f:RegisterEvent("IGNORELIST_UPDATE") f:RegisterEvent("UNIT_FACTION") f:RegisterEvent("UNIT_AURA") f:RegisterEvent("UNIT_CONNECTION") f:RegisterEvent("UNIT_PET") f:RegisterEvent("VARIABLES_LOADED") f:RegisterEvent("READY_CHECK") f:RegisterEvent("READY_CHECK_CONFIRM") f:RegisterEvent("READY_CHECK_FINISHED") f:RegisterEvent("UNIT_ENTERED_VEHICLE") f:RegisterEvent("UNIT_MODEL_CHANGED") f:RegisterEvent("UNIT_EXITED_VEHICLE") f:RegisterEvent("UNIT_HEALTH") f:RegisterEvent("UNIT_MAXHEALTH") --f:RegisterEvent("PARTY_MEMBER_ENABLE") --f:RegisterEvent("PARTY_MEMBER_DISABLE") f:RegisterEvent("UNIT_PHASE"); f:SetScript("OnEvent",function() for i=1,4 do local v,f,p,s,d; f=_G["PartyMemberFrame"..i]; p=_G["PartyMemberFrame"..i.."PetFrame"]; v=_G["PartyMemberFrame"..i.."PVPIcon"]:SetAlpha(0); s=_G["PartyMemberFrame"..i.."Speaker"]:SetAlpha(0); d=_G["PartyMemberFrame"..i.."Disconnect"]:SetAlpha(0); if UnitExists("party"..i) then f:Show(); if UnitExists("partypet"..i) then p:SetPoint("TOPLEFT", f, "TOPLEFT", 23, -43); p:SetAlpha(0)end end end end)
local UnitIsPlayer,UnitPlayerOrPetInParty, UnitIsConnected, UnitClass, RAID_CLASS_COLORS = UnitIsPlayer, UnitPlayerOrPetInParty, UnitIsConnected, UnitClass, RAID_CLASS_COLORS local _, class, c local function colour(statusbar, unit) if UnitIsPlayer(unit) and UnitPlayerOrPetInParty(unit) and UnitIsConnected(unit) and unit == statusbar.unit and UnitClass(unit) then _, class = UnitClass(unit) c = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class] statusbar:SetStatusBarColor(c.r, c.g, c.b) end end hooksecurefunc("UnitFrameHealthBar_Update", colour) hooksecurefunc("HealthBar_OnValueChanged", function(self) colour(self, self.unit) end) local sb = _G.GameTooltipStatusBar local addon = CreateFrame("Frame", "StatusColour") addon:RegisterEvent("UPDATE_MOUSEOVER_UNIT") addon:SetScript("OnEvent", function() colour(sb, "mouseover") end)
|
01 апр 2012, 21:53 |
|
|
witcher
[14.3]
|
0
Вопросы по Lua, XML, WoW API.
Такой вопрос, как самым простым способом реализовать зависимость прозрачности иконки спелла от оставшегося кд.
Например есть код
Код: USD="UNIT_SPELLCAST_SUCCEEDED";
OT="OnEvent";
FR="Frame";
RF=CreateFrame;
RD="Border";
UE=UnitName
GR=RF(FR) GR.c=RF("Cooldown","GAR",GR.t) GR:RegisterEvent(USD) GR.c:SetAllPoints(GR)
GR:SetPoint("TOPRIGHT",FocusFrame,-1,1)
GR:SetSize(22,22)GR.t=GR:CreateTexture(nil,RD)
GR.t:SetAllPoints()GR.t:SetTexture("Interface\\Icons\\spell_frost_iceshock") GR:SetScript(OT,function(self,event,...)
if UE(select(1,...))==UE("player")and select(5,...)==703 then
GAR:SetCooldown(GetTime(),23)
end end)
Мне надо, чтобы например, когда кд не запущен прозрачность была 0.5, а когда кд запустился 1, затем снова 0.5.
|
10 апр 2012, 16:24 |
|
|
Neopriest
[2.9]
<Школа Хогвартс>
Сервер: Страж Смерти
Рейтинг поля боя: 2146
2х2: 1830
3х3: 1969
5х5: 1530
|
0
Вопросы по Lua, XML, WoW API.
напишите пожалуйста макрос на изменение размера баффов врага в таргете таргете
|
10 апр 2012, 22:52 |
|
|
Отрицание
[1.8]
|
1
Вопросы по Lua, XML, WoW API.
wit4er писал(а):
Такой вопрос, как самым простым способом реализовать зависимость прозрачности иконки спелла от оставшегося кд.
Мне надо, чтобы например, когда кд не запущен прозрачность была 0.5, а когда кд запустился 1, затем снова 0.5.
Вот такой вариант:
Код:
GR = CreateFrame("Frame") GR:SetAlpha(0.5)
GR.c = CreateFrame("Cooldown", "GAR", GR.t) GR.c:SetAllPoints(GR) GR:SetPoint("TOPRIGHT", FocusFrame, -1, 1) GR:SetSize(22, 22)
GR.t = GR:CreateTexture(nil, "Border") GR.t:SetAllPoints() GR.t:SetTexture("Interface\\Icons\\spell_frost_iceshock")
GR:SetScript("OnEvent",function(self, event, ...) if UnitName(select(1, ...)) == UnitName("player") and select(5, ...) == 703 then GAR:SetCooldown(GetTime(), 23) GR:SetAlpha(1) end end) GR:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
Будет делать это, но только 1 раз.
То есть вначале иконка будет полупрозрачно, после того, как запустилось кд она станет полностью не прозрачной, но по окончании первого кд она не станет снова полупрозрачной, и останется полностью видимой до следующего /reload
А вот что-бы она становилась прозрачной по окончанию кд тебе при старте кд нужно запускать таймер который будет длится столько-же сколько длится кд, и привязывать к этому таймеру соответствующий фрейм, и что-бы по окончанию таймера он сбрасывал альфу в 0.5
Поидее это так:
Код:
GR = CreateFrame("Frame") GR:SetAlpha(0.5)
GR.c = CreateFrame("Cooldown", "GAR", GR.t) GR.c:SetAllPoints(GR) GR:SetPoint("TOPRIGHT", FocusFrame, -1, 1) GR:SetSize(22, 22)
GR.t = GR:CreateTexture(nil, "Border") GR.t:SetAllPoints() GR.t:SetTexture("Interface\\Icons\\spell_frost_iceshock")
GR:SetScript("OnEvent", function(self, event, ...) if UnitName(select(1, ...)) == UnitName("player") and select(5, ...) == 703 then GAR:SetCooldown(GetTime(), 23)
GR:SetAlpha(1) GR.elapsed = 0 GR:SetScript('OnUpdate', function(self, elapsed) if self.elapsed > 23 then self:SetScript('OnUpdate', nil) self:SetAlpha(0.5) else self.elapsed = self.elapsed + elapsed end end)
end end) GR:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
Правда я не понял смысл твоего скрипта, он зачем-то показывает 23-секундное кд после того как ты поюзал гарроту, какой в этом смысл.
|
11 апр 2012, 00:22 |
|
|
witcher
[14.3]
|
0
Вопросы по Lua, XML, WoW API.
Отрицание писал(а):
Будет делать это, но только 1 раз.
То есть вначале иконка будет полупрозрачно, после того, как запустилось кд она станет полностью не прозрачной, но по окончании первого кд она не станет снова полупрозрачной, и останется полностью видимой до следующего /reload
А вот что-бы она становилась прозрачной по окончанию кд тебе при старте кд нужно запускать таймер который будет длится столько-же сколько длится кд, и привязывать к этому таймеру соответствующий фрейм, и что-бы по окончанию таймера он сбрасывал альфу в 0.5
Этот вариант у меня получался
Спасибо попробую
Отрицание писал(а):
Правда я не понял смысл твоего скрипта, он зачем-то показывает 23-секундное кд после того как ты поюзал гарроту, какой в этом смысл.
Просто диминишинг 18+5 секунд.
|
11 апр 2012, 00:30 |
|
|
Отрицание
[1.8]
|
0
Вопросы по Lua, XML, WoW API.
Диминишинг вроде 15-18 секунд, 18 это максимум.
|
11 апр 2012, 00:42 |
|
|
witcher
[14.3]
|
0
Вопросы по Lua, XML, WoW API.
Отрицание писал(а):
Диминишинг вроде 15-18 секунд, 18 это максимум.
да, но чтобы не подключать специальные библиотеки берут максимальный для простоты
|
11 апр 2012, 00:47 |
|
|
Отрицание
[1.8]
|
0
Вопросы по Lua, XML, WoW API.
А, понял, я просто забыл про длительность самой гарроты.
|
11 апр 2012, 00:49 |
|
|
xelly
[1.3]
Сервер: Outland
Рейтинг поля боя: 1859
2х2: 2438
3х3: 2441
|
0
Вопросы по Lua, XML, WoW API.
Возник вопрос, насколько сложно написать аддон, который отображает на абилке время её действия.
Допустим есть аддон/cкрипт BuffTracker
Lua
Код:
bl={57934,73651,5171,51713,5277,2983,74001,31224,13877} bs=21;xb=0;yb=55;br=6;bdr="BORDER"be="UNIT_AURA"cbf=CreateFrame;gi=GetSpellInfo;bm=math.ceil;fm=math.floor;st=STANDARD_TEXT_FONT;function cu(s) return UnitBuff("player",gi(s))end function Cb(i,s)local _,_,t3=gi(s)local f=cbf("Frame")f:SetSize(bs,bs)f.t=f:CreateTexture(nil,bdr)f.t:SetAllPoints(true)f.t:SetTexture(t3)f.f=f:CreateFontString(nil,bdr)f.f:SetFont(st,11,"OUTLINE")f.f:SetPoint("BOTTOMRIGHT",0,0)return f;end function vb(s,i,row)local b1,_,_,b4=cu(s)local f=_G["B"..i]if b1 then f:Show()f:SetPoint("TOP",PlayerFrame,xb+(bs+2)*bm((row-1)%br),yb-(bs+16)*bm(row/br))if(b4>1)then f.f:SetText(b4)end row=row+1;end return row;end function ub()for i,s in ipairs(bl)do local b,_,_,_,_,_,k=cu(s)if b then local vt=fm(k-GetTime())if (vt>=60)then vt=bm(vt/60)_G["B"..i].c:SetText(vt.."m")elseif vt >= 0 then _G["B"..i].c:SetText(vt.."")end end end end function Cc(f)f.c=f:CreateFontString(nil,bdr)f.c:SetFont(st,11,"OUTLINE")f.c:SetPoint("CENTER",0,-16)end function db()for i in ipairs(bl)do _G["B"..i]:Hide()end end for i,s in ipairs(bl)do _G["B"..i]=Cb(i,s)Cc(_G["B"..i])_G["B"..i]:Hide()end function bb()db()local bw=1;for i,s in ipairs(bl)do bw=vb(s,i,bw)end end bk=cbf("Frame")bk:SetScript("OnEvent",bb)bk:SetScript("OnUpdate",ub)bk:RegisterEvent(be)
/run
Код:
/run bl={52127,32734,324,61295,55277,8178,73685,96230}
/run bs=30;xb=-360;yb=-140;br=6;bdr="BORDER"be="UNIT_AURA"cbf=CreateFrame;gi=GetSpellInfo;bm=math.ceil;fm=math.floor;st=STANDARD_TEXT_FONT;function cu(s)returnUnitBuff("player",gi(s))end
/run functionCb(i,s)local _,_,t3=gi(s)local f=cbf("Frame")f:SetSize(bs,bs)f.t=f:CreateTexture(nil,bdr)f.t:SetAllPoints(true)f.t:SetTexture(t3)f.f=f:CreateFontString(nil,bdr)f.f:SetFont(st,12,"OUTLINE")f.f:SetPoint("BOTTOMRIGHT",0,0)return f;end
/run function vb(s,i,row)local b1,_,_,b4=cu(s)local f=_G["B"..i]if b1 then f:Show()f:SetPoint("CENTER",xb+(bs+5)*bm((row-1)%br),yb-(bs+10)*bm(row/br))if(b4>1)then f.f:SetText(b4)end row=row+1;endreturn row;end
/run function ub()for i,s in ipairs(bl)dolocal b,_,_,_,_,_,k=cu(s)if b thenlocal vt=fm(k-GetTime())if(vt>=60)then vt=bm(vt/60)_G["B"..i].c:SetText(vt.."m")elseif vt >=0then _G["B"..i].c:SetText(vt.."s")endendendend
/run functionCc(f)f.c=f:CreateFontString(nil,bdr)f.c:SetFont(st,12,"OUTLINE")f.c:SetPoint("CENTER",0,-20)endfunction db()for i in ipairs(bl)do _G["B"..i]:Hide()endend
/run for i,s in ipairs(bl)do _G["B"..i]=Cb(i,s)Cc(_G["B"..i])_G["B"..i]:Hide()endfunction bb()db()local bw=1;for i,s in ipairs(bl)do bw=vb(s,i,bw)endend bk=cbf("Frame")bk:SetScript("OnEvent",bb)bk:SetScript("OnUpdate",ub)bk:RegisterEvent(be)
Он создает новый фрейм и показывает на нем время действия баффа.
Нужен аддон наподобии Dominos_Bufftimes.Он ставит таймер "кд" на абилку(бафф), а OmniCC уже допиливает на неё кд в виде текста.Хотелось бы увидеть либо просто кд в виде цифр (без дефолтной анимации таймера), либо просто таймер, а OmniCC сделает кд в виде текста.Ну и реально ли отображать таким же способов время действия дебаффа на таргете.Желательно, чтобы спелы заносились по SpellId
Dominos_Bufftimes:
#511
|
17 апр 2012, 16:06 |
|
|
Отрицание
[1.8]
|
0
Вопросы по Lua, XML, WoW API.
Писать с нуля не очень хочеться, за 5 минут не выйдет, но можно как-то подправить что-то в Dominos_Bufftimes.
Но я немного не понял проблему, если ты будешь юзать доминос+Dominos_Bufftimes+омницц, то как будут отображаться эти кд?
Если так, как у тебя на картинке, то есть цифры "делает" омницц то спираль кдшки можно скрывать в его опциях.
А если кд в виде цифр показывает сам Dominos_Bufftimes без омницц, то что в таком случае будет если поставить омницц, они что будут цифры в 2 слоя показывать?
|
19 апр 2012, 19:30 |
|
|
Genrix
[4.7]
|
0
Вопросы по Lua, XML, WoW API.
Есть вот такой аддон:
Скрытый текст
Код:
border = 1 -- Aura Border spacing = 1 -- Buff Spacing
--buffs b_growthvertical = 1 -- Growth Direction. 1 = down, 2 = up b_growthhorizontal = 1 -- Growth Direction. 1 = left, 2 = right
buffsperrow = 4 -- Buffs Per Row buttonsize = 22 -- Buff Size
--debuffs d_growthvertical = 2 -- Growth Direction. 1 = down, 2 = up d_growthhorizontal = 1 -- Growth Direction. 1 = left, 2 = right
debuffsperrow = 5 -- DeBuffs Per Row debuffsize = 22 -- Debuff Size
b_stackfontsize = 12 b_durafontsize = 7
d_stackfontsize = 12 d_durafontsize = 7
font = "Fonts\\DORISPP.TTF"
-- Default Spawn Positions local positions = { [1] = { p = "TOPRIGHT", a = UIParent, x = 0, y = -10 }, -- Buff Anchor [2] = { p = "TOPRIGHT", a = UIParent, x = 0, y = -60 }, -- Debuff Anchor [3] = { p = "TOPRIGHT", a = UIParent, x = 0, y = -110 }, -- Enchant Anchor } --End Config
local function anchor(frame, r, g, b, pos, anchor, x, y) frame:SetBackdrop({bgFile = 'Interface\\Buttons\\WHITE8x8'}) frame:SetBackdropColor(r, g, b, 0.4) --------------- if r==1 then bsize = debuffsize else bsize = buttonsize end frame:SetHeight(bsize+20) frame:SetWidth(bsize+20) ------------- frame:SetPoint(pos, anchor, pos, x, y) frame:EnableMouse(true) frame:SetMovable(true) frame:SetUserPlaced(true) frame:SetFrameStrata("BACKGROUND") frame:SetClampedToScreen(true) frame:SetAlpha(0) end
local function MoveFunc(frame) if movebars==1 then frame:SetAlpha(1) frame:RegisterForDrag("LeftButton","RightButton") frame:SetScript("OnDragStart", function(self) self:StartMoving() end) frame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end) frame:SetFrameStrata("DIALOG") elseif movebars==0 then frame:SetAlpha(0) frame:SetScript("OnDragStart", function(self) self:StopMovingOrSizing() end) frame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end) frame:SetFrameStrata("BACKGROUND") end end
local buffholder = CreateFrame("Frame", "Buffs", UIParent) anchor(buffholder, 0, 1, 0, positions[1].p, positions[1].a, positions[1].x, positions[1].y) local debuffholder = CreateFrame("Frame", "Debuffs", UIParent) anchor(debuffholder, 1, 0, 0, positions[2].p, positions[2].a, positions[2].x, positions[2].y) local enchantholder = CreateFrame("Frame", "TempEnchants", UIParent) anchor(enchantholder, 0, 0, 1, positions[3].p, positions[3].a, positions[3].x, positions[3].y)
SlashCmdList["MOVEBUFFS"] = function() if movebars~=1 then movebars = 1 else movebars = 0 end MoveFunc(buffholder) MoveFunc(debuffholder) MoveFunc(enchantholder) end SLASH_MOVEBUFFS1 = "/movebuffs"
local function makeitgrow(button, index, anchor, framekind) for i = 1, BUFF_ACTUAL_DISPLAY do ------------------------------------------------------------ if framekind == 2 then bla = debuffsize row = debuffsperrow gverti = d_growthvertical ghori = d_growthhorizontal
else bla = buttonsize row = buffsperrow gverti = b_growthvertical ghori = b_growthhorizontal end if gverti == 1 then if ghori == 1 then if index == ((row*i)+1) then _G[button..index]:SetPoint("TOPRIGHT", anchor, "TOPRIGHT", 0, -(bla+spacing+4)*i) end else if index == ((row*i)+1) then _G[button..index]:SetPoint("TOPLEFT", anchor, "TOPLEFT", 0, -(bla+spacing+4)*i) end end else if ghori == 1 then if index == ((row*i)+1) then _G[button..index]:SetPoint("TOPRIGHT", anchor, "TOPRIGHT", 0, (bla+spacing+4)*i) end else if index == ((row*i)+1) then _G[button..index]:SetPoint("TOPLEFT", anchor, "TOPLEFT", 0, (bla+spacing+4)*i) end end end end -------------------------------------------------------------- if ghori == 1 then _G[button..index]:SetPoint("RIGHT", _G[button..(index-1)], "LEFT", -(spacing+4), 0) else _G[button..index]:SetPoint("LEFT", _G[button..(index-1)], "RIGHT", (spacing+4), 0) end end
local function StyleBuffs(button, index, framekind, anchor) local buff = button..index _G[buff.."Icon"]:SetTexCoord(.1, .9, .1, .9) _G[buff.."Icon"]:SetDrawLayer("OVERLAY") _G[buff]:ClearAllPoints() ------------------------------------------ if framekind == 2 then bsize = debuffsize stackfontsize = d_stackfontsize durafontsize = d_durafontsize else bsize = buttonsize stackfontsize = b_stackfontsize durafontsize = b_durafontsize end ------------------------------------------ _G[buff]:SetHeight(bsize) _G[buff]:SetWidth(bsize)
_G[buff]:SetBackdrop({bgFile = "Interface\\Buttons\\WHITE8x8", insets = { left = -border, right = -border, top = -border, bottom = -border}})
if framekind == 2 then _G[buff]:SetBackdropColor(.7,0,0,1) elseif framekind == 3 then _G[buff]:SetBackdropColor(0,0,.5,1) else _G[buff]:SetBackdropColor(0,0,0,1) end
_G[buff.."Count"]:SetFont(font, stackfontsize, "OUTLINE") _G[buff.."Duration"]:SetFont(font, durafontsize, "OUTLINE")
_G[buff.."Count"]:ClearAllPoints() _G[buff.."Count"]:SetPoint("TOPRIGHT", 2, 0) _G[buff.."Count"]:SetDrawLayer("OVERLAY")
_G[buff.."Duration"]:ClearAllPoints() _G[buff.."Duration"]:SetPoint("BOTTOM") _G[buff.."Duration"]:SetDrawLayer("OVERLAY") if _G[buff.."Border"] then _G[buff.."Border"]:Hide() end
if index == 1 then _G[buff]:SetPoint("TOPRIGHT", anchor, "TOPRIGHT", -10, -10) end if index ~= 1 then makeitgrow(button, index, _G[button..1], framekind) end end
local function UpdateBuff() for i = 1, BUFF_ACTUAL_DISPLAY do StyleBuffs("BuffButton", i, 1, buffholder) end for i = 1, BuffFrame.numEnchants do StyleBuffs("TempEnchant", i, 3, enchantholder) end end local function UpdateDebuff(buttonName, index) StyleBuffs(buttonName, index, 2, debuffholder) end
local function updateTime(button, timeLeft) local duration = _G[button:GetName().."Duration"] if SHOW_BUFF_DURATIONS == "1" and timeLeft then duration:SetTextColor(1, 1, 1) local d, h, m, s = ChatFrame_TimeBreakDown(timeLeft); if d > 0 then duration:SetFormattedText("%1dd", d) elseif h > 0 then duration:SetFormattedText("%1dh", h) elseif m > 0 then duration:SetFormattedText("%1dm", m) else duration:SetFormattedText("%1d", s) end end end
hooksecurefunc("BuffFrame_UpdateAllBuffAnchors", UpdateBuff) hooksecurefunc("DebuffButton_UpdateAnchors", UpdateDebuff) hooksecurefunc("AuraButton_UpdateDuration", updateTime) SetCVar("consolidateBuffs", 0)
Отрицание, сделай пожалуйста, чтобы якоря фреймов баффов не сбрасывались при отключении аддона.
|
19 апр 2012, 19:45 |
|