bar = 5,
start = 49,
length = 12,
- columns = 3,
x = 1000,
y = 840,
},
};
local chars = {
+ ["Sylvanas"] = {
+ ["Vildana"] = {1, 2, 3, 4,},
+ },
["Stormreaver"] = {
["Vildan"] = {1, 2, 3, 4,},
["Gedren"] = {1, 2, 3, 4,},
end,
};
events["LOSS_OF_CONTROL_ADDED"] = events["ACTIONBAR_UPDATE_COOLDOWN"];
-events["LOSS_OF_CONTROL_UPDATE"] = events["ACTIONBAR_UPDATE_COOLDOWN"]; -- TODO might change once tooltips are in
+events["LOSS_OF_CONTROL_UPDATE"] = events["ACTIONBAR_UPDATE_COOLDOWN"];
events["PLAYER_MOUNT_DISPLAY_CHANGED"] = events["ACTIONBAR_UPDATE_USABLE"];
events["TRADE_SKILL_SHOW"] = events["ACTIONBAR_UPDATE_STATE"];
events["TRADE_SKILL_CLOSE"] = events["ACTIONBAR_UPDATE_STATE"];
-- ExpBar.lua
+if true then return end
local _;
local min = math.min;
local IsResting = IsResting;
local frame = CreateFrame("Frame", "OmaExpBar", UIParent);
local function expBar()
- frame:SetPoint("BOTTOM");
+ frame:SetPoint("CENTER");
frame:SetWidth(width);
frame:SetHeight(10);
frame.base = frame:CreateTexture(nil, "BACKGROUND");
frame:RegisterEvent("PLAYER_UPDATE_RESTING");
frame:RegisterEvent("PLAYER_ENTERING_WORLD");
-- from FrameXML/MainMenuBar.lua
- frame:SetScript("OnEnter", function(frame) frame.text:Show(); ExhaustionToolTipText(); end);
- frame:SetScript("OnLeave", function(frame) frame.text:Hide(); GameTooltip:Hide(); end);
+ frame:SetScript("OnEnter", function(frame) frame.text:Show(); end);
+ frame:SetScript("OnLeave", function(frame) frame.text:Hide(); end);
end
frame:RegisterEvent("PLAYER_LOGIN");
frame:SetScript("OnEvent", function(self, event)
if event == "PLAYER_LOGIN" then
GameTooltip = _G["GameTooltip"];
- if UnitLevel("player") < 110 and not IsXPUserDisabled() then
+ if UnitLevel("player") < 120 and not IsXPUserDisabled() then
return expBar();
end
end
-- HideBlizzardAB.lua
-local microbuttons = {
- CharacterMicroButton,
- SpellbookMicroButton,
- TalentMicroButton,
- AchievementMicroButton,
- QuestLogMicroButton,
- GuildMicroButton,
- LFDMicroButton,
- CollectionsMicroButton,
- EJMicroButton,
- StoreMicroButton,
- MainMenuMicroButton,
-};
-
-local micromenu = nil;
-local function moveMicroMenu()
- for i, button in ipairs(microbuttons) do
- -- TODO save original points to move back to override actionbar
- button:SetParent(micromenu);
- button:ClearAllPoints();
- if i == 1 then
- button:SetPoint("TOPRIGHT");
- else
- button:SetPoint("TOPRIGHT", microbuttons[i-1], "BOTTOMRIGHT", 0, 22);
- end
- end
-end
-- based on Bartender4
local function hide()
-- Hidden parent frame
local UIHider = CreateFrame("Frame");
UIHider:Hide();
+ local barHolder = CreateFrame("Frame", "OmaStatusBarHolder", UIParent);
+ barHolder:SetPoint("BOTTOM", UIParent, "BOTTOM", 0, 17);
+ barHolder:SetWidth(800);
+ barHolder:SetHeight(20);
+ function barHolder:OnStatusBarsUpdated() end;
+ local xpbars = _G["StatusTrackingBarManager"];
+ xpbars:SetParent(barHolder);
+
+ UpdateMicroButtonsParent(barHolder);
+ MoveMicroButtons("TOP", UIParent, "TOP", -120, 0);
+ MainMenuBar:HookScript("OnShow", function()
+ UpdateMicroButtonsParent(barHolder);
+ MoveMicroButtons("TOP", UIParent, "TOP", -120, 0);
+ end);
+
+ local bags = CreateFrame("Frame", "OmaBags", UIParent);
+ bags:SetPoint("RIGHT", UIParent, "RIGHT", 0, -100);
+ bags:SetWidth(1);
+ bags:SetHeight(1);
+ bags:Hide(); -- Unhide if bag bar needed
+ MainMenuBarBackpackButton:SetParent(bags);
+ MainMenuBarBackpackButton:ClearAllPoints();
+ MainMenuBarBackpackButton:SetPoint("RIGHT");
+ CharacterBag0Slot:SetParent(bags);
+ CharacterBag1Slot:SetParent(bags);
+ CharacterBag2Slot:SetParent(bags);
+ CharacterBag3Slot:SetParent(bags);
+ MicroButtonAndBagsBar:Hide();
+
MultiBarBottomLeft:SetParent(UIHider);
MultiBarBottomRight:SetParent(UIHider);
MultiBarLeft:SetParent(UIHider);
MultiBarRight:SetParent(UIHider);
-
-- Hide MultiBar Buttons, but keep the bars alive
for i=1,12 do
_G["ActionButton" .. i]:Hide();
_G["MultiBarLeftButton" .. i]:UnregisterAllEvents();
_G["MultiBarLeftButton" .. i]:SetAttribute("statehidden", true);
end
-
- micromenu = CreateFrame("Frame", "OmaMicroMenu", UIParent);
- micromenu:SetPoint("RIGHT");
- micromenu:SetWidth(1);
- micromenu:SetHeight(11*58);
- moveMicroMenu();
- hooksecurefunc("UpdateMicroButtons", moveMicroMenu);
- OverrideActionBar:HookScript("OnShow", moveMicroMenu); -- TODO have in orig position
- OverrideActionBar:HookScript("OnHide", moveMicroMenu);
- PetBattleFrame.BottomFrame.MicroButtonFrame:HookScript("OnShow", moveMicroMenu);
- PetBattleFrame.BottomFrame.MicroButtonFrame:HookScript("OnHide", moveMicroMenu);
- --UIPARENT_MANAGED_FRAME_POSITIONS["MultiBarRight"] = nil;
- --UIPARENT_MANAGED_FRAME_POSITIONS["MultiBarLeft"] = nil;
- --UIPARENT_MANAGED_FRAME_POSITIONS["MultiBarBottomLeft"] = nil;
- --UIPARENT_MANAGED_FRAME_POSITIONS["MultiBarBottomRight"] = nil;
UIPARENT_MANAGED_FRAME_POSITIONS["MainMenuBar"] = nil;
UIPARENT_MANAGED_FRAME_POSITIONS["StanceBarFrame"] = nil;
- UIPARENT_MANAGED_FRAME_POSITIONS["ZoneAbilityFrame"] = nil;
- UIPARENT_MANAGED_FRAME_POSITIONS["ExtraActionBarFrame"] = nil;
UIPARENT_MANAGED_FRAME_POSITIONS["PossessBarFrame"] = nil;
UIPARENT_MANAGED_FRAME_POSITIONS["PETACTIONBAR_YPOS"] = nil;
- --MainMenuBar:UnregisterAllEvents();
- --MainMenuBar:Hide();
- --MainMenuBar:SetParent(UIHider);
MainMenuBar:EnableMouse(false);
- -- TODO vehicle controller handled overridebar and mainmenubar in Bartender, needed?
- --local vehicleController = CreateFrame("Frame", nil, nil, "SecureHandlerStateTemplate");
-
+ MainMenuBar:UnregisterEvent("DISPLAY_SIZE_CHANGED");
+ MainMenuBar:UnregisterEvent("UI_SCALE_CHANGED");
local animations = {MainMenuBar.slideOut:GetAnimations()};
animations[1]:SetOffset(0,0);
-
animations = {OverrideActionBar.slideOut:GetAnimations()};
animations[1]:SetOffset(0,0);
- --MainMenuBarArtFrame:UnregisterEvent("PLAYER_ENTERING_WORLD");
- --MainMenuBarArtFrame:UnregisterEvent("BAG_UPDATE");
- --MainMenuBarArtFrame:UnregisterEvent("ACTIONBAR_PAGE_CHANGED");
- --MainMenuBarArtFrame:UnregisterEvent("KNOWN_CURRENCY_TYPES_UPDATE");
- --MainMenuBarArtFrame:UnregisterEvent("CURRENCY_DISPLAY_UPDATE");
- --MainMenuBarArtFrame:UnregisterEvent("ADDON_LOADED");
- --MainMenuBarArtFrame:UnregisterEvent("UNIT_ENTERING_VEHICLE");
- --MainMenuBarArtFrame:UnregisterEvent("UNIT_ENTERED_VEHICLE");
- --MainMenuBarArtFrame:UnregisterEvent("UNIT_EXITING_VEHICLE");
- --MainMenuBarArtFrame:UnregisterEvent("UNIT_EXITED_VEHICLE");
MainMenuBarArtFrame:Hide();
MainMenuBarArtFrame:SetParent(UIHider);
- MainMenuExpBar:UnregisterAllEvents();
- MainMenuExpBar:Hide();
- MainMenuExpBar:SetParent(UIHider);
- MainMenuExpBar:SetDeferAnimationCallback(nil);
-
- MainMenuBarMaxLevelBar:Hide();
- MainMenuBarMaxLevelBar:SetParent(UIHider);
-
- ReputationWatchBar:UnregisterAllEvents();
- ReputationWatchBar:Hide();
- ReputationWatchBar:SetParent(UIHider);
-
- -- TODO create artifact bar
- ArtifactWatchBar:SetParent(UIHider);
- ArtifactWatchBar.StatusBar:SetDeferAnimationCallback(nil);
-
- HonorWatchBar:SetParent(UIHider);
- HonorWatchBar.StatusBar:SetDeferAnimationCallback(nil);
-
- --PossessBarFrame:UnregisterAllEvents();
PossessBarFrame:Hide();
PossessBarFrame:SetParent(UIHider);
- ZoneAbilityFrame:ClearAllPoints();
- ZoneAbilityFrame:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -450, 150);
- ExtraActionBarFrame:ClearAllPoints();
- ExtraActionBarFrame:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -450, 120);
- MainMenuBarVehicleLeaveButton:SetParent(UIParent);
- MainMenuBarVehicleLeaveButton:ClearAllPoints();
- MainMenuBarVehicleLeaveButton:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -100, 5);
- hooksecurefunc("MainMenuBarVehicleLeaveButton_Update", function()
- if CanExitVehicle() then
- -- TODO check if needed
- --MainMenuBarVehicleLeaveButton:ClearAllPoints();
- --MainMenuBarVehicleLeaveButton:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -100, 5);
- MainMenuBarVehicleLeaveButton:Show();
- end
- end);
-
if PlayerTalentFrame then
PlayerTalentFrame:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED");
else
-## Interface: 70300
+## Interface: 80000
## Title: Oma Action Bar
## Version: 1.0
## Author: schyrio
[98008] = 180, -- Spirit Link Totem
},
[270] = { -- Mistweaver Monk
- [115310] = (180-40), -- Revival, already lowered by Artifact when lvl 75
+ [115310] = 180, -- Revival
},
};
-local monkRelics = { -- Tendrils of Revival
- ["151012"] = -10,
- ["151010"] = -10,
- ["147112"] = -10,
- ["152291"] = -10,
-};
local cds = {}; -- CD durations currently available modified by passive cdfixes
-- CD fixes active e.g. cdfixes[guid] = -60, no need for spellid as
local idToGuid = {};
local guidToId = {};
local guidToSpecid = {};
-local monks = {};
-local monksWithLegendary = {};
local dead = {};
local disconnected = {};
frames[frame.guid][frame.spellid] = nil;
if not next(frames[frame.guid]) then frames[frame.guid] = nil end
cds[frame.guid][frame.spellid] = nil;
- monks[frame.guid] = nil;
- monksWithLegendary[frame.guid] = nil;
dead[frame.guid] = nil;
disconnected[frame.guid] = nil;
if runningcds[frame.guid] then runningcds[frame.guid][frame.spellid] = nil end
end
end
-local function updateMonk(guid, _, _, weapon, wrist)
- local id = guidToId[guid];
- if id then
- local _, _, _, relic1, relic2, relic3 = strsplit(":", weapon);
- local cdfix = 0;
- if monkRelics[relic1] then cdfix = cdfix + monkRelics[relic1] end
- if monkRelics[relic2] then cdfix = cdfix + monkRelics[relic2] end
- if monkRelics[relic3] then cdfix = cdfix + monkRelics[relic3] end
- if cdfix ~= 0 then
- cdfixes[guid] = cdfix;
- else
- cdfixes[guid] = nil;
- end
-
- if wrist == 137096 then -- Petrichor Lagniappe
- monksWithLegendary[guid] = true;
- else
- monksWithLegendary[guid] = nil;
- end
- monks[guid] = true;
- updateUnitCD(guid);
- end
-end
-
--- a secondary tick for monks inventory check out of combat
-local function monkTick()
- if not InCombatLockdown() then
- for guid, _ in pairs(monks) do
- local id = guidToId[guid];
- if id then OmaInspect.Request(guid, id, updateMonk, true) end
- end
- end
- CTimerAfter(10, monkTick);
-end
-
local function updateDruid(guid, _, talent)
local id = guidToId[guid];
if id then
if trackedcds[specid] then
guidToId[guid] = "player";
guidToSpecid[guid] = specid;
- if specid == 270 then -- Monk
- local weapon = GetInventoryItemLink("player", INVSLOT_MAINHAND);
- local wrist = GetInventoryItemID("player", INVSLOT_WRIST);
- updateMonk(guid, nil, nil, weapon, wrist);
- elseif specid == 105 then -- Druid
+ if specid == 105 then -- Druid
local _, _, _, talent = GetTalentInfo(6, 2, 1);
updateDruid(guid, nil, talent);
else
end
updateUnitCD(guid);
OmaInspect.Request(guid, id, updatePriest);
- elseif specs[class] == 270 then
- -- Monk, have to check inventory for CD modifications
- -- updateUnitCD (without having fixes yet)
- updateUnitCD(guid);
- OmaInspect.Request(guid, id, updateMonk, true);
elseif specs[class] == 105 then
-- Druid, have to inspect to get talents
-- updateUnitCD (without having fixes yet)
local frame = frames[guid][spellid];
if frame then
CdDown(guid, spellid, GetTime());
- elseif monksWithLegendary[guid] and spellid == 115151 then
- -- Renewing Mist with legendary affects Revival
- if runningcds[guid] and runningcds[guid][115310] then
- runningcds[guid][115310] = runningcds[guid][115310] - 2;
- end
elseif guidToSpecid[guid] == 257 and spellid == 62618 then
-- assumed Holy priest cast Barrier, set to update to Disc
guidToSpecid[guid] = 256;
cdframe:RegisterEvent("PLAYER_ENTERING_WORLD");
-- initial tick
CTimerAfter(0.5, tick);
- CTimerAfter(10, monkTick);
end
-cdframe:RegisterEvent("PLAYER_LOGIN");
cdframe:SetScript("OnEvent", function(self, event)
- if event == "PLAYER_LOGIN" then
- return cdtracker();
- end
+ return cdtracker();
end);
+cdframe:RegisterEvent("PLAYER_LOGIN");
tick();
end
-frame:RegisterEvent("PLAYER_LOGIN");
frame:SetScript("OnEvent", function(self, event)
- if event == "PLAYER_LOGIN" then
- return create();
- end
+ return create();
end);
+frame:RegisterEvent("PLAYER_LOGIN");
-## Interface: 70300
+## Interface: 80000
## Title: Oma Cooldown Tracker
## Version: 1.0
## Author: schyrio
return nil;
end
+local function checkDebuff(id)
+ local i = 1;
+ while true do
+ local _, _, _, _, _, _, _, _, _, spell = UnitAura("player", i, "HARMFUL");
+ if not spell then
+ return false;
+ elseif spell == id then
+ return true;
+ end
+ i = i + 1;
+ end
+end
+
-- negatingIgnoreTime-like functionality not implemented
local events = {
["SPELL_DAMAGE"] = function(event, source, spellid, spellname, _, arg1, arg2)
local sound = spell.sound;
if spell.eventType and spell.eventType ~= event then return end
--if (event == "SPELL_MISSED" or event == "SPELL_PERIODIC_MISSED") and not spell.always then return end
- if spell.negatingDebuff and UnitDebuff("player", spell.negatingDebuff) then return end
+ if spell.negatingDebuff and checkDebuff(spell.negatingDebuff) then return end
--if spell.negatingBuff and UnitBuff("player", spell.negatingBuff) then return end
--if spell.affirmingDebuff and not UnitDebuff("player", spell.affirmingDebuff) then return end
--if spell.mobs and source and not spell.mobs[mobId(source)] then return end
end
local realEvents = {
- ["COMBAT_LOG_EVENT_UNFILTERED"] = clog,
+ ["COMBAT_LOG_EVENT_UNFILTERED"] = function()
+ return clog(CombatLogGetCurrentEventInfo());
+ end,
["GROUP_ROSTER_UPDATE"] = updateGuids,
["PLAYER_ROLES_ASSIGNED"] = updateRole,
["MIRROR_TIMER_START"] = function(timer, _, _, scale)
[199948] = { sound = 1 }, -- Tempest (Channeler Varisz)
[195473] = { sound = 1, applicationOnly = true }, -- Abrasive Slime (Gritslime Snail)
[191858] = { sound = 1 }, -- Toxic Puddle (Sepentrix)
- [193055] = { sound = 1, negatingDebuff = "Gaseous Bubbles" }, -- Call of the Seas
+ [193055] = { sound = 1, negatingDebuff = 193018 }, -- Call of the Seas
-- Neltharion's Lair
[202089] = { sound = 3 }, -- Scorch (Burning Geode)
[200338] = { sound = 3 }, -- Crystal Wall (Dargrul)
[198903] = { sound = 1 }, -- Crackling Storm (Storm Drake)
[193234] = { sound = 1 }, -- Dancing Blade (Hymdall)
[199818] = { sound = 1 }, -- Crackle (Valarjar Thundercaller)
- [200682] = { sound = 1, negatingDebuff = "Eye of the Storm" }, -- Eye of the Storm (Solsten)
+ [200682] = { sound = 1, negatingDebuff = 203963 }, -- Eye of the Storm (Solsten)
[193702] = { sound = 1 }, -- Infernal Flames (God-King Skovald)
[193827] = { sound = 1 }, -- Ragnarok (God-King Skovald)
-- The Arcway
[198781] = { sound = 3 }, -- Whirling Blade (Kur'talos Ravencrest)
[200914] = { sound = 3, tankMechanic = true }, -- Indigestion (Wyrmtongue Scavenger)
[200344] = { sound = 1 }, -- Arrow Barrage (Risen Archer)
- [221131] = { sound = 1, negatingDebuff = "Arcane Overcharge" }, -- Arcane Overcharge (Archmage Galeorn)
+ [221131] = { sound = 1, negatingDebuff = 221132 }, -- Arcane Overcharge (Archmage Galeorn)
[220922] = { sound = 1 }, -- Overwhelming Release (Archmage Galeorn)
[197521] = { sound = 1 }, -- Blazing Trail (Illysanna Ravencrest)
[197821] = { sound = 1 }, -- Felblazed Ground (Illysanna Ravencrest)
[229161] = { sound = 3 }, -- Explosive Shadows (Viz'aduum the Watcher)
[229151] = { sound = 3 }, -- Disintegrate (Viz'aduum the Watcher)
[227465] = { sound = 1 }, -- Power Discharge (Curator)
- [228808] = { sound = 1, negatingDebuff = "Ignite Soul" }, -- Charred Earth (Nightbane)
+ [228808] = { sound = 1, negatingDebuff = 228796 }, -- Charred Earth (Nightbane)
[228001] = { sound = 1 }, -- Pennies From Heaven (Ghostly Philathropist)
[227848] = { sound = 1, minStacks = 1, applicationOnly = true }, -- Sacred Ground (Maiden of Virtue)
[227473] = { sound = 1 }, -- Whirling Edge (Lord Robin Daris)
-## Interface: 70300
+## Interface: 80000
## Title: Oma GTFO
## Version: 1.0
## Author: schyrio
local frame = CreateFrame("Frame", "OmaLogger");
frame:Hide();
-local minRaidMapID = 1520;
+local raidIDs = {
+};
--local minDungMapID = 1456;
local function shouldLog()
local _, zoneType, difficulty, _, _, _, _, mapID = GetInstanceInfo();
- if zoneType == "raid" and mapID >= minRaidMapID then
+ if zoneType == "raid" then print(mapID) end
+ if zoneType == "raid" and raidIDs[mapID] then
if difficulty == 17 then -- LFR
return false;
elseif difficulty == 16 then -- Mythic
-## Interface: 70300
+## Interface: 80000
## Title: Oma Autolog
## Version: 1.0
## Author: schyrio
TalkingHeadFrame:SetUserPlaced(true);
end);
-UIPARENT_MANAGED_FRAME_POSITIONS["CONTAINER_OFFSET_X"] = nil;
+--[[UIPARENT_MANAGED_FRAME_POSITIONS["CONTAINER_OFFSET_X"] = nil;
UIPARENT_MANAGED_FRAME_POSITIONS["CONTAINER_OFFSET_Y"] = nil;
CONTAINER_OFFSET_X = 90;
-CONTAINER_OFFSET_Y = 15;
+CONTAINER_OFFSET_Y = 15;--]]
-## Interface: 70300
+## Interface: 80000
## Title: Oma Blizzard Frame Mover
## Version: 1.0
## Author: schyrio
if class == "PALADIN" then
if GetSpecialization() == 3 then -- ret
f:Show();
- f:RegisterUnitEvent("UNIT_POWER", "player");
+ f:RegisterUnitEvent("UNIT_POWER_UPDATE", "player");
updatehp[UnitPower("player", ptype)]();
else
- f:UnregisterEvent("UNIT_POWER");
+ f:UnregisterEvent("UNIT_POWER_UPDATE");
f:Hide();
end
elseif class == "WARLOCK" then
f:Show();
- f:RegisterUnitEvent("UNIT_POWER", "player");
+ f:RegisterUnitEvent("UNIT_POWER_UPDATE", "player");
updatehp[UnitPower("player", ptype)]();
end
end
f.PLAYER_ENTERING_WORLD = f.PLAYER_SPECIALIZATION_CHANGED;
-function f:UNIT_POWER(_, t)
+function f:UNIT_POWER_UPDATE(_, t)
if t == "HOLY_POWER" or t == "SOUL_SHARDS" then
return updatehp[UnitPower("player", ptype)]();
end
end
end
- f:RegisterUnitEvent("UNIT_POWER", "player");
+ f:RegisterUnitEvent("UNIT_POWER_UPDATE", "player");
f:RegisterEvent("PLAYER_ENTERING_WORLD");
f:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED");
end
-## Interface: 70300
+## Interface: 80000
## Title: Oma Power
## Version: 1.0
## Author: schyrio
local function updateAuras(frame, unit)
updateIndicatorAuras(frame, unit); -- this is throttled
- if updateMajorAuras(frame, unit) then
- if frame.overlay.color ~= overlayColorAlert then
+ local barColor = updateMajorAuras(frame, unit);
+ if barColor then
+ if barColor == true and frame.overlay.color ~= overlayColorAlert then
frame.overlay:SetVertexColor(unpack(overlayColorAlert));
frame.overlay.color = overlayColorAlert;
frame.overlay:Show();
+ elseif barColor ~= true and frame.overlay.color ~= barColor then
+ frame.overlay:SetVertexColor(unpack(barColor));
+ frame.overlay.color = barColor;
+ frame.overlay:Show();
end
elseif UnitDebuff(unit, 1, "RAID") ~= nil then
-- something dispellable
local showInds, needUpdate = false, false;
local i = 1;
while true do
- _, _, icon, count, _, _, expires, _, _, _, id = UnitAura(unit, i, "PLAYER HELPFUL");
+ _, icon, count, _, _, expires, _, _, _, id = UnitAura(unit, i, "PLAYER HELPFUL");
if not id then break end
local pos = watchedAuras[id];
if pos then
for _, ind in pairs(frame.majors) do
hideInd(ind);
end
- local icon, count, expires, id;
+ if UnitIsDeadOrGhost(unit) then return end
+ local name, icon, count, expires, id;
local showMajors, needUpdate = false, false;
local majorPos = 1;
local alert = false; -- color the whole bar
local current = GetTime();
local i = 1;
while true do
- _, _, icon, count, _, _, expires, _, _, _, id = UnitAura(unit, i, "HARMFUL");
+ name, icon, count, _, _, expires, _, _, _, id = UnitAura(unit, i, "HARMFUL");
if not id or majorPos > 3 then break end
- local major = majorAuras[id];
+ local major = majorAuras[id] or majorAuras[name];
if major then
- needUpdate = showInd(frame.majors[majorPos], expires, current, count, icon) or needUpdate;
- if major.bar then alert = true end
+ if not major.noicon then
+ needUpdate = showInd(frame.majors[majorPos], expires, current, count, icon) or needUpdate;
+ end
+ if major.bar then alert = major.bar end
showMajors = true;
majorPos = majorPos + 1;
end
-## Interface: 70300
+## Interface: 80000
## Title: Oma Raid Frame
## Version: 1.0
## Author: schyrio
Clickheal = {},
};
local chars = {
+ ["Sylvanas"] = {
+ ["Vildana"] = {
+ AnchorX = 0,
+ AnchorY = -330,
+ Clickheal = {
+ ["type1"] = "spell",
+ ["type2"] = "spell",
+ ["shift-type1"] = "spell",
+ ["shift-type2"] = "spell",
+ ["ctrl-type1"] = "spell",
+ ["alt-type2"] = "spell",
+ ["alt-shift-type1"] = "spell",
+ ["alt-shift-type2"] = "spell",
+ ["spell1"] = "Holy Light",
+ ["spell2"] = "Bestow Faith",
+ ["shift-spell1"] = "Flash of Light",
+ ["shift-spell2"] = "Light of the Martyr",
+ ["ctrl-spell1"] = "Cleanse",
+ ["alt-spell2"] = "Lay on Hands",
+ ["alt-shift-spell1"] = "Beacon of Light",
+ ["alt-shift-spell2"] = "Beacon of Faith",
+ },
+ },
+ },
["Stormreaver"] = {
["Vildan"] = {
AnchorX = 0,
OverlayColorCharm = {0.8, 0, 1, 0.5},
OverlayColorAlert = {1, 0, 0, 0.5},
MajorAuras = {
+ -- LEGION --
-- Antorus
["Psychic Assault"] = {bar=false},
["Everburning Flames"] = {bar=false},
[240559] = {bar=false}, -- Grievous Wound
--["Grievous Wound"] = {bar=false}, -- Grievous Wound
[240443] = {bar=false}, -- Burst
+ -- BATTLE FOR AZEROTH --
+ -- Uldir
+ ["Omega Vector"] = {bar={1, 0.5, 0.5, 0.5}, noicon=true},
+ ["Gestate"] = {bar=false},
+ ["Mutagenic Pathogen"] = {bar=false},
+ ["Lingering Infection"] = {bar=false},
+ ["Malodorous Miasma"] = {bar=false},
+ ["Deadly Disease"] = {bar=false},
},
};
OmaRFSettings = settings;
-## Interface: 70300
+## Interface: 80000
## Title: Oma TellMeWhen
## Version: 1.0
## Author: schyrio
local GetTotemInfo = GetTotemInfo;
-- character specific frames
+-- TODO try with auraFilter, remove characters, change to classes
+--[[local classes = {
+ ["PALADIN"] = {
+ ["PLAYER HELPFUL"] = {
+ {
+ unit = "player",
+ auras = {["Divine Shield"]=1, ""},
+ frames = {
+ [1] = {
+ x = 0,
+ y = 0,
+ width = 1,
+ height = 1,
+ },
+ },
+ },
+ },
+ },
+};
+local specs = {
+ [retSpecid] = {
+ ["PLAYER HELPFUL"] = {
+ {
+ unit = "player",
+ auras = {["Judgment"]=1},
+ frames = {
+ [1] = {
+ },
+ },
+ },
+ },
+ ["PLAYER HARMFUL"] = {
+ {
+ },
+ },
+ },
+};
+--]]
local chars = {
+ ["Sylvanas"] = {
+ ["Vildana"] = {
+ {
+ unit = "target",
+ spec = 3, -- Retribution
+ auras = {"Judgment"},
+ auraFilter = "PLAYER HARMFUL",
+ x = 570, -- placed over Innervate frame
+ y = 440,
+ width = 80,
+ height = 80,
+ },
+ {
+ unit = "player",
+ spec = 3, -- Retribution
+ auras = {"Divine Purpose"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 570,
+ y = 530,
+ width = 80,
+ height = 80,
+ },
+ {
+ unit = "player",
+ spec = 2, -- Protection
+ auras = {"Shield of the Righteous"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 570,
+ y = 440,
+ width = 80,
+ height = 80,
+ },
+ {
+ unit = "player",
+ auras = {"Divine Shield"},
+ auraFilter = "PLAYER HELPFUL",
+ x = 660,
+ y = 440,
+ width = 80,
+ height = 80,
+ },
+ },
+ },
["Stormreaver"] = {
["Vildan"] = {
{
-- unit = unitID where to check auras, not required for totem checkers
-- spec = player spec index to show frame, if nil show always
-- auras = list of auras to track, in priority order
--- iterateAuras = iterate over UnitAura() instead of auras list
-- auraFilter = filter for UnitAura
-- totems = list of totem slots to track, in priority order, only checked if auras is nil
-- x = x position relative to UIParent bottom left
"Blazing Eruption", "Shattering Scream", "Consuming Hunger", "Unstable Soul",
"Time Bomb", "Broken Shard", "Demolished", "Fetid Rot",
},
- iterateAuras = true, -- typically fewer debuffs on player than this list
auraFilter = "HARMFUL",
x = 660,
y = 530,
if UnitExists(unit) and (not frame.spec or frame.spec == currentSpec) then
local name, icon, count, duration, expires;
local auraFilter = frame.auraFilter;
- if frame.iterateAuras then
- local i = 1;
- while true do
- name, _, icon, count, _, duration, expires = UnitAura(unit, i, auraFilter);
- if not name then break end
- -- possible improvement to add spellID as an option
- if frame.auras[name] then
- if count > 0 then
- frame.stack:SetText(count);
- frame.stack:Show();
- else
- frame.stack:Hide();
- end
- if expires > 0 then
- frame.cd:SetCooldown(expires - duration, duration);
- frame.cd:Show();
- else
- frame.cd:Hide();
- end
- frame.icon:SetTexture(icon);
- frame:Show();
- return;
+ local i = 1;
+ while true do
+ name, icon, count, _, duration, expires = UnitAura(unit, i, auraFilter);
+ if not name then break end
+ -- possible improvement to add spellID as an option
+ if frame.auras[name] then
+ if count > 1 then
+ frame.stack:SetText(count);
+ frame.stack:Show();
+ else
+ frame.stack:Hide();
end
- i = i + 1;
- end
- else
- for _, aura in pairs(frame.auras) do
- name, _, icon, count, _, duration, expires = UnitAura(unit, aura, nil, auraFilter);
- if name then
- if count > 0 then
- frame.stack:SetText(count);
- frame.stack:Show();
- else
- frame.stack:Hide();
- end
- if expires > 0 then
- frame.cd:SetCooldown(expires - duration, duration);
- frame.cd:Show();
- else
- frame.cd:Hide();
- end
- frame.icon:SetTexture(icon);
- frame:Show();
- return;
+ if expires > 0 then
+ frame.cd:SetCooldown(expires - duration, duration);
+ frame.cd:Show();
+ else
+ frame.cd:Hide();
end
+ frame.icon:SetTexture(icon);
+ frame:Show();
+ return;
end
+ i = i + 1;
end
end
frame:Hide();
frame:SetPoint("BOTTOMRIGHT", parent, "BOTTOMLEFT", config.x+config.width, config.y);
frame.unit = config.unit;
frame.spec = config.spec;
- frame.iterateAuras = config.iterateAuras;
- if frame.iterateAuras then
+ if config.auras then
frame.auras = {};
for _, v in pairs(config.auras) do
frame.auras[v] = true;
end
- else
- frame.auras = config.auras;
end
frame.auraFilter = config.auraFilter;
frame.totems = config.totems;
for _, filter in ipairs(auraFilters) do
local i = 1;
while true do
- _, _, icon, count, _, duration, expires, caster, _, _, id = UnitAura(unit, i, filter);
+ _, icon, count, _, duration, expires, caster, _, _, id = UnitAura(unit, i, filter);
if not id or not auras[pos] then break end
local aura = auras[pos];
aura.icon:SetTexture(icon);
local function startCast(bar, unit, channeling)
local name, icon, startTime, endTime, noInterrupt, id;
if channeling then
- name, _, _, icon, startTime, endTime, _, noInterrupt = UnitChannelInfo(unit);
+ name, _, icon, startTime, endTime, _, noInterrupt = UnitChannelInfo(unit);
if not startTime or not endTime then return nil end
bar.channeling = true;
bar.cast.color = channelingColor;
else
- _, _, name, icon, startTime, endTime, _, _, noInterrupt, id = UnitCastingInfo(unit);
+ _, name, icon, startTime, endTime, _, _, noInterrupt, id = UnitCastingInfo(unit);
if not startTime or not endTime then return nil end
bar.channeling = nil;
bar.cast.color = castingColor;
frame:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_MAXHEALTH", frame.unit, displayed);
if frame.mana then
- frame:RegisterUnitEvent("UNIT_POWER", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_POWER_UPDATE", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", frame.unit, displayed);
updateHealthText(frame, frame.displayed);
if frame.shield then updateShield(frame, frame.displayed) end
end,
- ["UNIT_POWER"] = function(frame)
+ ["UNIT_POWER_UPDATE"] = function(frame)
updatePower(frame, frame.displayed);
updatePowerText(frame, frame.displayed);
end,
-## Interface: 70300
+## Interface: 80000
## Title: Oma Unit Frame
## Version: 1.0
## Author: schyrio
Clickheal = {},
};
local chars = {
+ ["Sylvanas"] = {
+ ["Vildana"] = {
+ Clickheal = {
+ ["type1"] = "spell",
+ ["type2"] = "spell",
+ ["shift-type1"] = "spell",
+ ["shift-type2"] = "spell",
+ ["ctrl-type1"] = "spell",
+ ["alt-type2"] = "spell",
+ ["alt-shift-type1"] = "spell",
+ ["alt-shift-type2"] = "spell",
+ ["spell1"] = "Holy Light",
+ ["spell2"] = "Bestow Faith",
+ ["shift-spell1"] = "Flash of Light",
+ ["shift-spell2"] = "Light of the Martyr",
+ ["ctrl-spell1"] = "Cleanse",
+ ["alt-spell2"] = "Lay on Hands",
+ ["alt-shift-spell1"] = "Beacon of Light",
+ ["alt-shift-spell2"] = "Beacon of Faith",
+ },
+ },
+ },
["Stormreaver"] = {
["Vildan"] = {
Clickheal = {