-- Create the addon object ArcHUD = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceHook-2.0", "AceConsole-2.0", "AceDB-2.0", "AceModuleCore-2.0", "AceDebug-2.0", "Metrognome-2.0") -- Locale object local L = AceLibrary("AceLocale-2.0"):new("ArcHUD_Core") -- Debugging levels -- 1 Warning -- 2 Info -- 3 Notice -- 4 Off local debugLevels = {"warn", "info", "notice", "off"} -- Set up Dewdrop and core addon options menu local dewdrop = AceLibrary:GetInstance("Dewdrop-2.0") local ddframe -- Set up database ArcHUD:RegisterDB("ArcHUDDB") ArcHUD:RegisterDefaults("profile", { Debug = nil, TargetFrame = true, PlayerModel = true, MobModel = false, ShowGuild = true, ShowClass = false, Width = 30, YLoc = 0, FadeFull = 0.1, FadeOOC = 0.5, FadeIC = 0.75, RingVisibility = 3, PartyLock = true, TargetTarget = true, TargetTargetTarget = true, NamePlates = true, Scale = 1.0, AttachTop = false, ShowBuffs = true, HoverMsg = true, HoverDelay = 3, BlizzPlayer = true, BlizzTarget = true, }) -- Set up chat commands ArcHUD:RegisterChatCommand({"/archud", "/ah"}, { type = "group", name = "ArcHUD", args = { reset = { type = "group", name = "reset", desc = L"CMD_RESET", args = { confirm = { type = "execute", name = "CONFIRM", desc = L"CMD_RESET_CONFIRM", func = "ResetOptionsConfirm", } } }, config = { type = "execute", name = "config", desc = L"CMD_OPTS_FRAME", func = function() if not ddframe then ddframe = CreateFrame("Frame", nil, UIParent) ddframe:SetWidth(2) ddframe:SetHeight(2) ddframe:SetPoint("BOTTOMLEFT", GetCursorPosition()) ddframe:SetClampedToScreen(true) dewdrop:Register(ddframe, 'dontHook', true, 'children', ArcHUD.createDDMenu) end local x,y = GetCursorPosition() ddframe:SetPoint("BOTTOMLEFT", x / UIParent:GetScale(), y / UIParent:GetScale()) dewdrop:Open(ddframe) end, }, debug = { type = "text", name = "debug", desc = L"CMD_OPTS_DEBUG", get = function() return debugLevels[ArcHUD:GetDebugLevel() or 4] end, set = function(v) if(v == "notice") then ArcHUD:SetDebugLevel(3) ArcHUD.db.profile.Debug = 3 elseif(v == "info") then ArcHUD:SetDebugLevel(2) ArcHUD.db.profile.Debug = 2 elseif(v == "warn") then ArcHUD:SetDebugLevel(1) ArcHUD.db.profile.Debug = 1 elseif(v == "off") then ArcHUD:SetDebugLevel(nil) ArcHUD.db.profile.Debug = nil end end, validate = {"off", "warn", "info", "notice"}, order = -2, }, }, }, "ARCHUD") function ArcHUD.modDB(action, key, namespace, value) if(not action or not key) then return end if(namespace and not value and not ArcHUD:HasModule(namespace)) then value = namespace namespace = nil end if(action == "toggle") then ArcHUD:LevelDebug(3, "Toggling key '%s'", key) if(namespace) then ArcHUD:AcquireDBNamespace(namespace).profile[key] = not ArcHUD:AcquireDBNamespace(namespace).profile[key] else ArcHUD.db.profile[key] = not ArcHUD.db.profile[key] end elseif(action == "set") then ArcHUD:LevelDebug(3, "Setting new value for key '%s' = '%s'", key, value) if(namespace) then ArcHUD:AcquireDBNamespace(namespace).profile[key] = tonumber(value) else ArcHUD.db.profile[key] = tonumber(value) end end if(namespace) then ArcHUD:TriggerEvent("ARCHUD_MODULE_UPDATE", namespace) else ArcHUD:OnProfileDisable() ArcHUD:OnProfileEnable() end end function ArcHUD.createDDMenu(level, menu) if(level == 1) then for _,v in ipairs(ArcHUD.dewdrop_menu["L1"]) do if(type(v) == "table") then ArcHUD:LevelDebug(3, "Creating button on level %s", level) dewdrop:AddLine(unpack(v)) else ArcHUD:LevelDebug(1, "Error in createDDMenu in level %d (table expected, got %s)", level, type(v)) end end else if(ArcHUD.dewdrop_menu[menu]) then local id local val local arg3 local arg4 local isradio for _,v in ipairs(ArcHUD.dewdrop_menu[menu]) do if(type(v) == "table") then ArcHUD:LevelDebug(3, "Creating button on level %s in menu %s", level, menu) id, val, arg3, arg4, isradio = nil, nil, nil, nil, nil for a,b in ipairs(v) do --ArcHUD:LevelDebug(3, " ID: %d, Value: %s", a, (type(b) == "function" and "function" or b)) if(b == "checked" or b == "sliderValue") then id = a+1 elseif(b == "isRadio" and v[a+1]) then isradio = true elseif(b == "arg2" or b == "sliderArg2") then val = v[a+1] elseif(b == "arg3" or b == "sliderArg3") then arg3 = v[a+1] elseif(b == "arg4" or b == "sliderArg4") then arg4 = v[a+1] end end if(id) then ArcHUD:LevelDebug(3, " Found value on '%d', setting name '%s'", id, val) if(isradio) then if(arg4) then ArcHUD:LevelDebug(3, " Using namespace '%s'", arg3) v[id] = (ArcHUD:AcquireDBNamespace(arg3).profile[val] == arg4 and true or false) ArcHUD:LevelDebug(3, " Value set to '%s'", v[id]) else v[id] = (ArcHUD.db.profile[val] == arg3 and true or false) ArcHUD:LevelDebug(3, " Value set to '%s'", v[id]) end else if(arg3) then ArcHUD:LevelDebug(3, " Using namespace '%s'", arg3) v[id] = ArcHUD:AcquireDBNamespace(arg3).profile[val] ArcHUD:LevelDebug(3, " Value set to '%s'", v[id]) else v[id] = ArcHUD.db.profile[val] ArcHUD:LevelDebug(3, " Value set to '%s'", v[id]) end end end dewdrop:AddLine(unpack(v)) else ArcHUD:LevelDebug(1, "Error in createDDMenu in level %d (table expected, got %s)", level, type(v)) end end end end end function ArcHUD:OnInitialize() -- Set debug level self:SetDebugLevel(self.db.profile.Debug) self.ClassColor = { ["MAGE"] = "00FFFF", ["WARLOCK"] = "8D54FB", ["PRIEST"] = "FFFFFF", ["DRUID"] = "FF8A00", ["SHAMAN"] = "FF71A8", ["PALADIN"] = "FF71A8", ["ROGUE"] = "FFFF00", ["HUNTER"] = "00FF00", ["WARRIOR"] = "B39442", } self:LevelDebug(3, "Creating core addon Dewdrop menu") self.dewdrop_menu = { ["L1"] = { {"text", L("TEXT","TITLE"), "isTitle", true}, {"text", L("Version: ")..self.version, "notClickable", true}, {"text", L("Author: ")..self.author, "notClickable", true}, {}, {"text", L("TEXT","DISPLAY"), "hasArrow", true, "value", "L2_display"}, {"text", L("TEXT","FADE"), "hasArrow", true, "value", "L2_fade"}, {"text", L("TEXT","MISC"), "hasArrow", true, "value", "L2_misc"}, {}, {"text", L("TEXT","RINGS"), "isTitle", true}, }, ["L2_display"] = { { "text", L("TEXT","TARGETFRAME"), "tooltipTitle", L("TEXT","TARGETFRAME"), "tooltipText", L("TOOLTIP","TARGETFRAME"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "TargetFrame" }, { "text", L("TEXT","BLIZZPLAYER"), "tooltipTitle", L("TEXT","BLIZZPLAYER"), "tooltipText", L("TOOLTIP","BLIZZPLAYER"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "BlizzPlayer" }, { "text", L("TEXT","BLIZZTARGET"), "tooltipTitle", L("TEXT","BLIZZTARGET"), "tooltipText", L("TOOLTIP","BLIZZTARGET"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "BlizzTarget" }, { "text", L("TEXT","PLAYERMODEL"), "tooltipTitle", L("TEXT","PLAYERMODEL"), "tooltipText", L("TOOLTIP","PLAYERMODEL"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "PlayerModel" }, { "text", L("TEXT","MOBMODEL"), "tooltipTitle", L("TEXT","MOBMODEL"), "tooltipText", L("TOOLTIP","MOBMODEL"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "MobModel" }, { "text", L("TEXT","SHOWGUILD"), "tooltipTitle", L("TEXT","SHOWGUILD"), "tooltipText", L("TOOLTIP","SHOWGUILD"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "ShowGuild" }, { "text", L("TEXT","SHOWCLASS"), "tooltipTitle", L("TEXT","SHOWCLASS"), "tooltipText", L("TOOLTIP","SHOWCLASS"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "ShowClass" }, { "text", L("TEXT","NAMEPLATES"), "tooltipTitle", L("TEXT","NAMEPLATES"), "tooltipText", L("TOOLTIP","NAMEPLATES"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "NamePlates" }, { "text", L("TEXT","ATTACHTOP"), "tooltipTitle", L("TEXT","ATTACHTOP"), "tooltipText", L("TOOLTIP","ATTACHTOP"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "AttachTop" }, { "text", L("TEXT","TOT"), "tooltipTitle", L("TEXT","TOT"), "tooltipText", L("TOOLTIP","TOT"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "TargetTarget" }, { "text", L("TEXT","TOTOT"), "tooltipTitle", L("TEXT","TOTOT"), "tooltipText", L("TOOLTIP","TOTOT"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "TargetTargetTarget" }, { "text", L("TEXT","HOVERMSG"), "tooltipTitle", L("TEXT","HOVERMSG"), "tooltipText", L("TOOLTIP","HOVERMSG"), "checked", false, "func", ArcHUD.modDB, "arg1", "toggle", "arg2", "HoverMsg" }, { "text", L("TEXT","HOVERDELAY"), "tooltipTitle", L("TEXT","HOVERDELAY"), "tooltipText", L("TOOLTIP","HOVERDELAY"), "hasArrow", true, "hasSlider", true, "sliderMin", 0, "sliderMax", 5, "sliderMinText", "Instant", "sliderMaxText", "5s", "sliderStep", 0.5, "sliderValue", 0, "sliderFunc", ArcHUD.modDB, "sliderArg1", "set", "sliderArg2", "HoverDelay" }, }, ["L2_fade"] = { { "text", L("TEXT","FADE_FULL"), "tooltipTitle", L("TEXT","FADE_FULL"), "tooltipText", L("TOOLTIP","FADE_FULL"), "hasArrow", true, "hasSlider", true, "sliderStep", 0.01, "sliderIsPercent", true, "sliderValue", 0, "sliderFunc", ArcHUD.modDB, "sliderArg1", "set", "sliderArg2", "FadeFull" }, { "text", L("TEXT","FADE_OOC"), "tooltipTitle", L("TEXT","FADE_OOC"), "tooltipText", L("TOOLTIP","FADE_OOC"), "hasArrow", true, "hasSlider", true, "sliderStep", 0.01, "sliderIsPercent", true, "sliderValue", 0, "sliderFunc", ArcHUD.modDB, "sliderArg1", "set", "sliderArg2", "FadeOOC" }, { "text", L("TEXT","FADE_IC"), "tooltipTitle", L("TEXT","FADE_IC"), "tooltipText", L("TOOLTIP","FADE_IC"), "hasArrow", true, "hasSlider", true, "sliderStep", 0.01, "sliderIsPercent", true, "sliderValue", 0, "sliderFunc", ArcHUD.modDB, "sliderArg1", "set", "sliderArg2", "FadeIC" }, }, ["L2_misc"] = { { "text", L("TEXT","WIDTH"), "tooltipTitle", L("TEXT","WIDTH"), "tooltipText", L("TOOLTIP","WIDTH"), "hasArrow", true, "hasSlider", true, "sliderMin", 30, "sliderMax", 100, "sliderStep", 1, "sliderValue", 0, "sliderFunc", ArcHUD.modDB, "sliderArg1", "set", "sliderArg2", "Width" }, { "text", L("TEXT","YLOC"), "tooltipTitle", L("TEXT","YLOC"), "tooltipText", L("TOOLTIP","YLOC"), "hasArrow", true, "hasSlider", true, "sliderMin", -50, "sliderMax", 200, "sliderStep", 1, "sliderValue", 0, "sliderFunc", ArcHUD.modDB, "sliderArg1", "set", "sliderArg2", "YLoc" }, { "text", L("TEXT","SCALE"), "tooltipTitle", L("TEXT","SCALE"), "tooltipText", L("TOOLTIP","SCALE"), "hasArrow", true, "hasSlider", true, "sliderStep", 0.01, "sliderMax", 2, "sliderIsPercent", true, "sliderValue", 0, "sliderFunc", ArcHUD.modDB, "sliderArg1", "set", "sliderArg2", "Scale" }, { "text", L("TEXT","RINGVIS"), "tooltipTitle", L("TEXT","RINGVIS"), "tooltipText", L("TOOLTIP","RINGVIS"), "hasArrow", true, "value", "L3_ringvis" }, }, ["L3_ringvis"] = { { "text", L("TEXT","RINGVIS_1"), "tooltipTitle", L("TEXT","RINGVIS_1"), "tooltipText", L("TOOLTIP","RINGVIS_1"), "isRadio", true, "checked", true, "func", ArcHUD.modDB, "arg1", "set", "arg2", "RingVisibility", "arg3", 1 }, { "text", L("TEXT","RINGVIS_2"), "tooltipTitle", L("TEXT","RINGVIS_2"), "tooltipText", L("TOOLTIP","RINGVIS_2"), "isRadio", true, "checked", false, "func", ArcHUD.modDB, "arg1", "set", "arg2", "RingVisibility", "arg3", 2 }, { "text", L("TEXT","RINGVIS_3"), "tooltipTitle", L("TEXT","RINGVIS_3"), "tooltipText", L("TOOLTIP","RINGVIS_3"), "isRadio", true, "checked", false, "func", ArcHUD.modDB, "arg1", "set", "arg2", "RingVisibility", "arg3", 3 }, }, } -- Taken from Moog_Hud self.RepColor = { "FF4444", "DD4444", "DD7744", "BB9944", "44DD44", "55EE44", "66FF44"} self:LevelDebug(3, "Registering Metrognome timers") self:RegisterMetro("UpdatePetNamePlate", self.UpdatePetNamePlate, 2, self) self:RegisterMetro("UpdateTargetTarget", self.UpdateTargetTarget, 1, self) self:RegisterMetro("CheckNamePlateMouseOver", self.CheckNamePlateMouseOver, 0.1, self) self:LevelDebug(3, "Setting up TargetHUD globals") self.TargetHUD = getglobal("ArcTargetHUD") self.TargetHUD.frame = "ArcTargetHUD" self.TargetHUD.Name = getglobal(self.TargetHUD.frame.."Name") self.TargetHUD.Level = getglobal(self.TargetHUD.frame.."Level") self.TargetHUD.HPText = getglobal(self.TargetHUD.frame.."HPText") self.TargetHUD.MPText = getglobal(self.TargetHUD.frame.."MPText") self.TargetHUD.PVPIcon = getglobal(self.TargetHUD.frame.."PVPIcon") self.TargetHUD.MLIcon = getglobal(self.TargetHUD.frame.."MLIcon") self.TargetHUD.LeaderIcon = getglobal(self.TargetHUD.frame.."LeaderIcon") self.TargetHUD.RaidTargetIcon = getglobal(self.TargetHUD.frame.."RaidTargetIcon") self.TargetHUD.Combo = getglobal("ArcHUDFrameCombo") self.TargetHUD.Model = getglobal("ArcPlayerModelFrame") self.TargetHUD.Target = getglobal(self.TargetHUD.frame.."Target") self.TargetHUD.Target.frame = self.TargetHUD.frame.."Target" self.TargetHUD.Target.Name = getglobal(self.TargetHUD.Target.frame.."Name") self.TargetHUD.Target.HPText = getglobal(self.TargetHUD.Target.frame.."HPText") self.TargetHUD.Target.MPText = getglobal(self.TargetHUD.Target.frame.."MPText") self.TargetHUD.TargetTarget = getglobal(self.TargetHUD.frame.."TargetTarget") self.TargetHUD.TargetTarget.frame = self.TargetHUD.frame.."TargetTarget" self.TargetHUD.TargetTarget.Name = getglobal(self.TargetHUD.TargetTarget.frame.."Name") self.TargetHUD.TargetTarget.HPText = getglobal(self.TargetHUD.TargetTarget.frame.."HPText") self.TargetHUD.TargetTarget.MPText = getglobal(self.TargetHUD.TargetTarget.frame.."MPText") self:LevelDebug(3, "Setting up NamePlate globals") self.NamePlates = {} -- Player clickable nameplate self.NamePlates.Player = getglobal("ArcHUDFramePlayerNamePlate") self.NamePlates.Player.frame = "ArcHUDFramePlayerNamePlate" self.NamePlates.Player.unit = "player" self.NamePlates.Player.Text = getglobal(self.NamePlates.Player.frame.."Text") -- Pet clickable nameplate self.NamePlates.Pet = getglobal("ArcHUDFramePetNamePlate") self.NamePlates.Pet.frame = "ArcHUDFramePetNamePlate" self.NamePlates.Pet.unit = "pet" self.NamePlates.Pet.Text = getglobal(self.NamePlates.Pet.frame.."Text") -- Target clickable nameplate self.NamePlates.Target = getglobal(self.TargetHUD.frame.."NamePlate") self.NamePlates.Target.frame = self.TargetHUD.frame.."NamePlate" self.NamePlates.Target.unit = "target" -- Targettarget clickable nameplate self.NamePlates.TargetTarget = getglobal(self.TargetHUD.frame.."TargetNamePlate") self.NamePlates.TargetTarget.frame = self.TargetHUD.frame.."TargetNamePlate" self.NamePlates.TargetTarget.unit = "targettarget" -- Targettargettarget clickable nameplate self.NamePlates.TargetTargetTarget = getglobal(self.TargetHUD.frame.."TargetTargetNamePlate") self.NamePlates.TargetTargetTarget.frame = self.TargetHUD.frame.."TargetTargetNamePlate" self.NamePlates.TargetTargetTarget.unit = "targettargettarget" self:LevelDebug(3, "Initializing nameplates") -- Initialize nameplate dropdowns self:InitNamePlate("Target") self:InitNamePlate("TargetTarget") self:InitNamePlate("TargetTargetTarget") self:InitNamePlate("Player") self:InitNamePlate("Pet") -- Update fonts for locale self:LevelDebug(3, "Updating fonts for locale") self:UpdateFonts(self.TargetHUD) self:UpdateFonts(self.NamePlates) self.TargetHUD.PVPIcon:GetParent():SetScale(0.6) self.TargetHUD.RaidTargetIcon:GetParent():SetScale(0.75) self:TriggerEvent("ARCHUD_LOADED") self:LevelDebug(2, "ArcHUD has been initialized.") end function ArcHUD:OnEnable() self:LevelDebug(3, "Registering events") self:RegisterEvent("PLAYER_COMBO_POINTS", "EventHandler") self:RegisterEvent("PLAYER_ENTERING_WORLD", "EventHandler") self:RegisterEvent("PLAYER_ENTER_COMBAT", "CombatStatus") self:RegisterEvent("PLAYER_LEAVE_COMBAT", "CombatStatus") self:RegisterEvent("PLAYER_REGEN_ENABLED", "CombatStatus") self:RegisterEvent("PLAYER_REGEN_DISABLED", "CombatStatus") self:RegisterEvent("PET_ATTACK_START", "CombatStatus") self:RegisterEvent("PET_ATTACK_STOP", "CombatStatus") self:RegisterEvent("UNIT_FACTION", "UpdateFaction") self:RegisterEvent("PARTY_MEMBERS_CHANGED", "UpdateFaction") self:RegisterEvent("RAID_TARGET_UPDATE", "UpdateRaidTargetIcon") self:RegisterEvent("PLAYER_FLAGS_CHANGED") self:OnProfileEnable() self.Enabled = true ArcHUDFrame:Show() self:LevelDebug(3, "Triggering ring enable event") self:TriggerEvent("ARCHUD_MODULE_ENABLE") self:LevelDebug(2, "ArcHUD is now enabled") end function ArcHUD:OnDisable() self:LevelDebug(3, "Triggering ring disable event") self:TriggerEvent("ARCHUD_MODULE_DISABLE") -- Hide frame ArcHUDFrame:Hide() self.Enabled = false self:LevelDebug(2, "ArcHUD is now disabled") end function ArcHUD:OnProfileEnable() if(self.db.profile.BlizzPlayer and self.BlizzPlayerHidden or not self.db.profile.BlizzPlayer and not self.BlizzPlayerHidden) then self:HideBlizzardPlayer(self.db.profile.BlizzPlayer) end if(self.db.profile.BlizzTarget and self.BlizzTargetHidden or not self.db.profile.BlizzTarget and not self.BlizzTargetHidden) then self:HideBlizzardTarget(self.db.profile.BlizzTarget) end if(self.db.profile.TargetFrame) then self:LevelDebug(3, "Targetframe enabled. Registering unit events") self:RegisterEvent("UNIT_HEALTH", "EventHandler") self:RegisterEvent("UNIT_MAXHEALTH", "EventHandler") self:RegisterEvent("UNIT_MANA", "EventHandler") self:RegisterEvent("UNIT_RAGE", "EventHandler") self:RegisterEvent("UNIT_FOCUS", "EventHandler") self:RegisterEvent("UNIT_ENERGY", "EventHandler") self:RegisterEvent("UNIT_MAXMANA", "EventHandler") self:RegisterEvent("UNIT_MAXRAGE", "EventHandler") self:RegisterEvent("UNIT_MAXFOCUS", "EventHandler") self:RegisterEvent("UNIT_MAXENERGY", "EventHandler") self:RegisterEvent("UNIT_DISPLAYPOWER", "EventHandler") if(self.db.profile.ShowBuffs) then self:RegisterEvent("UNIT_AURA", "TargetAuras") else for i=1,16 do getglobal(self.TargetHUD.frame.."Buff"..i):Hide() getglobal(self.TargetHUD.frame.."DeBuff"..i):Hide() end end self:RegisterEvent("PLAYER_TARGET_CHANGED", "TargetUpdate") -- Show target frame if we have a target if(UnitExists("target")) then self:TargetUpdate() end self:LevelDebug(3, "Enabling TargetTarget updates") -- Enable Target's Target('s Target) updates self:StartMetro("UpdateTargetTarget") if(self.db.profile.AttachTop) then self:LevelDebug(3, "Attaching targetframe to top") self.TargetHUD:ClearAllPoints() self.TargetHUD:SetPoint("BOTTOM", self.TargetHUD:GetParent(), "TOP", 0, -100) else self:LevelDebug(3, "Attaching targetframe to bottom") self.TargetHUD:ClearAllPoints() self.TargetHUD:SetPoint("TOP", self.TargetHUD:GetParent(), "BOTTOM", 0, -50) end else self:StopMetro("UpdateTargetTarget") self.TargetHUD:Hide() end self:LevelDebug(3, "Positioning ring anchors. Width: "..self.db.profile.Width) -- Position the HUD according to user settings if(self:HasModule("Anchors")) then self:GetModule("Anchors").Left:ClearAllPoints() self:GetModule("Anchors").Left:SetPoint("TOPLEFT", ArcHUDFrame, "TOPLEFT", 0-self.db.profile.Width, 0) self:GetModule("Anchors").Right:ClearAllPoints() self:GetModule("Anchors").Right:SetPoint("TOPLEFT", ArcHUDFrame, "TOPRIGHT", self.db.profile.Width, 0) end self:LevelDebug(3, "Position frame. YLoc: "..self.db.profile.YLoc) ArcHUDFrame:ClearAllPoints() ArcHUDFrame:SetPoint("CENTER", WorldFrame, "CENTER", 0, self.db.profile.YLoc) self:LevelDebug(3, "Setting scale. Scale: "..self.db.profile.Scale) -- Scale the HUD according to user settings. ArcHUDFrame:SetScale(self.db.profile.Scale) -- Set initial combat flags self.PlayerIsInCombat = false self.PlayerIsRegenOn = true self.PetIsInCombat = false self:LevelDebug(3, "Setting player name to nameplate") -- Set playername self:UpdateFaction() -- Enable nameplate updates if(self.db.profile.NamePlates) then self:LevelDebug(3, "Nameplates enabled. Showing frames and starting update timers") self:UnregisterMetro("Enable_player") self:UnregisterMetro("Enable_pet") self:RegisterMetro("Enable_player", self.EnableDisableNameplate, self.db.profile.HoverDelay, self, "Player") self:RegisterMetro("Enable_pet", self.EnableDisableNameplate, self.db.profile.HoverDelay, self, "Pet") self.NamePlates.Player:Show() self.NamePlates.Pet:Show() self:StartMetro("UpdatePetNamePlate") self:StartMetro("CheckNamePlateMouseOver") else self:LevelDebug(3, "Nameplates not enabled.") self:UnregisterMetro("Enable_player") self:UnregisterMetro("Enable_pet") self.NamePlates.Player:Hide() self.NamePlates.Pet:Hide() end end function ArcHUD:OnProfileDisable() self:LevelDebug(3, "Unregistering events") if(self:IsEventRegistered("UNIT_HEALTH")) then self:UnregisterEvent("UNIT_HEALTH") self:UnregisterEvent("UNIT_MAXHEALTH") self:UnregisterEvent("UNIT_MANA") self:UnregisterEvent("UNIT_RAGE") self:UnregisterEvent("UNIT_FOCUS") self:UnregisterEvent("UNIT_ENERGY") self:UnregisterEvent("UNIT_MAXMANA") self:UnregisterEvent("UNIT_MAXRAGE") self:UnregisterEvent("UNIT_MAXFOCUS") self:UnregisterEvent("UNIT_MAXENERGY") self:UnregisterEvent("UNIT_DISPLAYPOWER") end if(self:IsEventRegistered("UNIT_AURA")) then self:UnregisterEvent("UNIT_AURA") end if(self:IsEventRegistered("UNIT_FACTION")) then self:UnregisterEvent("UNIT_FACTION") end if(self:IsEventRegistered("PLAYER_TARGET_CHANGED")) then self:UnregisterEvent("PLAYER_TARGET_CHANGED") end self:LevelDebug(3, "Disabling timers") self:StopMetro("UpdateTargetTarget") self:StopMetro("UpdatePetNamePlate") self:StopMetro("CheckNamePlateMouseOver") self:UnregisterMetro("Enable_player") self:UnregisterMetro("Enable_pet") self:LevelDebug(3, "Hiding frames") for i=1,16 do getglobal(self.TargetHUD.frame.."Buff"..i):Hide() getglobal(self.TargetHUD.frame.."DeBuff"..i):Hide() end self.TargetHUD:Hide() self.NamePlates.Player:Hide() self.NamePlates.Pet:Hide() end function ArcHUD:ResetOptionsConfirm() self:ResetDB("profile") self:OnProfileDisable() self:OnProfileEnable() self:TriggerEvent("ARCHUD_MODULE_UPDATE") self:Print(L"TEXT_RESET_CONFIRM") end function ArcHUD:InitNamePlate(frame) local this = self.NamePlates[frame] this:RegisterForClicks("LeftButtonUp", "RightButtonUp", "MiddleButtonUp", "Button4Up", "Button5Up") this.OnClick = function(self) if(ArcHUD_CustomClick) then ArcHUD_CustomClick(arg1, self.unit) else if(SpellIsTargeting()) then SpellStopTargeting() return end if(arg1 == "LeftButton") then TargetUnit(self.unit) elseif(arg1 == "RightButton") then ToggleDropDownMenu(1, nil, getglobal(ArcHUD:strcap(self.unit).."FrameDropDown"), "cursor", 0, 0) end end end this.OnEnter = function(self) if(SpellIsTargeting()) then if (SpellCanTargetUnit(self.unit)) then SetCursor("CAST_CURSOR") else SetCursor("CAST_ERROR_CURSOR") end end GameTooltip:SetOwner(self, ANCHOR_BOTTOMRIGHT) GameTooltip:SetUnit(self.unit) GameTooltip:Show() end this.OnLeave = function(self) if(SpellIsTargeting()) then SetCursor("CAST_ERROR_CURSOR") end if(GameTooltip:IsOwned(self)) then GameTooltip:Hide() end end if(frame ~= "Target" and frame ~= "TargetTarget" and frame ~= "TargetTargetTarget") then self:RegisterMetro(frame.."Alpha", ArcHUDRingTemplate.AlphaUpdate, 0.01, this) self:StartMetro(frame.."Alpha") this.fadeIn = 0.25 this.fadeOut = 0.25 ArcHUDRingTemplate.SetRingAlpha(this, self.db.profile.FadeFull) else this.Enabled = TRUE end end function ArcHUD:CheckNamePlateMouseOver() if(MouseIsOver(self.NamePlates.Player)) then if(not self.NamePlates.Player.Started) then ArcHUDRingTemplate.SetRingAlpha(self.NamePlates.Player, 1.0) self.NamePlates.Player.Started = true self:StartMetro("Enable_player") end else if(self.NamePlates.Player.Started) then ArcHUDRingTemplate.SetRingAlpha(self.NamePlates.Player, self.db.profile.FadeFull) self:StopMetro("Enable_player") self.NamePlates.Player.Started = false self.NamePlates.Player:EnableMouse(false) self.NamePlates.Player:SetToplevel(false) end end -- Check pet nameplate if(not UnitExists("pet")) then return end if(MouseIsOver(self.NamePlates.Pet)) then if(not self.NamePlates.Pet.Started) then ArcHUDRingTemplate.SetRingAlpha(self.NamePlates.Pet, 1.0) self.NamePlates.Pet.Started = true self:StartMetro("Enable_pet") end else if(self.NamePlates.Pet.Started) then ArcHUDRingTemplate.SetRingAlpha(self.NamePlates.Pet, self.db.profile.FadeFull) self:StopMetro("Enable_pet") self.NamePlates.Pet.Started = false self.NamePlates.Pet:EnableMouse(false) self.NamePlates.Pet:SetToplevel(false) end end end function ArcHUD:EnableDisableNameplate(unit) self.NamePlates[unit]:EnableMouse(true) self.NamePlates[unit]:SetToplevel(true) self:StopMetro("Enable_"..string.lower(unit)) if(self.db.profile.HoverMsg) then self:Print("Enabling mouse input for "..unit) end end function ArcHUD:TargetUpdate() -- Make sure we are targeting someone and that ArcHUD is enabled if (UnitExists("target") and self.db.profile.TargetFrame) then -- 3D target model if((self.db.profile.PlayerModel and UnitIsPlayer("target")) or (self.db.profile.MobModel and not UnitIsPlayer("target"))) then self.TargetHUD.Model:Show() self.TargetHUD.Model:SetUnit("target") else self.TargetHUD.Model:Hide() end self.TargetHUD:Show() if(UnitIsDead("target") or UnitIsGhost("target")) then self.TargetHUD.HPText:SetText("Dead") else -- Support for MobHealth3 if(MobHealth3) then local cur, max, found = MobHealth3:GetUnitHealth("target", UnitHealth("target"), UnitHealthMax("target")) self.TargetHUD.HPText:SetText(cur.."/"..max) -- Support for MobHealth2 / MobInfo-2 elseif(self:MobHealth_GetTargetCurHP()) then self.TargetHUD.HPText:SetText(self:MobHealth_GetTargetCurHP().."/"..self:MobHealth_GetTargetMaxHP()) else self.TargetHUD.HPText:SetText(UnitHealth("target").."/"..UnitHealthMax("target")) end end -- Does the unit have mana? If so we want to show it if (UnitManaMax("target") > 0) then self.TargetHUD.MPText:SetText(UnitMana("target").."/"..UnitManaMax("target")) else self.TargetHUD.MPText:SetText(" ") end local addtolevel = "" if(self.db.profile.ShowClass) then addtolevel = " " .. (UnitIsPlayer("target") and UnitClass("target") or UnitCreatureFamily("target") or UnitCreatureType("target")) self.TargetHUD.Level:SetJustifyH("CENTER") else self.TargetHUD.Level:SetJustifyH("LEFT") end -- What kind of target is it? If UnitLevel returns negative we have a target whose -- level are too high to show or a boss if (UnitLevel("target") < 0) then if ( UnitClassification("target") == "worldboss" ) then self.TargetHUD.Level:SetText("Boss" .. addtolevel) else self.TargetHUD.Level:SetText("L??" .. addtolevel) end else -- Make sure we mark elites with a + after the level if(not string.find(UnitClassification("target"), "elite")) then self.TargetHUD.Level:SetText("L" .. UnitLevel("target") .. addtolevel) else self.TargetHUD.Level:SetText("L" .. UnitLevel("target") .. "+" .. addtolevel) end end -- Check if the target is friendly to the player targetfriend = UnitIsFriend("player","target") -- Color the level display based on the targets level in relation -- to player level if (targetfriend) then self.TargetHUD.Level:SetTextColor(1, 0.9, 0) elseif (UnitIsTrivial("target")) then self.TargetHUD.Level:SetTextColor(0.7, 0.7, 0.7) elseif (UnitLevel("target") == -1) then self.TargetHUD.Level:SetTextColor(1, 0, 0) elseif (UnitLevel("target") <= (UnitLevel("player")-3)) then self.TargetHUD.Level:SetTextColor(0, 0.9, 0) elseif (UnitLevel("target") >= (UnitLevel("player")+5)) then self.TargetHUD.Level:SetTextColor(1, 0, 0) elseif (UnitLevel("target") >= (UnitLevel("player")+3)) then self.TargetHUD.Level:SetTextColor(1, 0.5, 0) else self.TargetHUD.Level:SetTextColor(1, 0.9, 0) end -- Color the targets hp and mana text correctly local info = {} if (UnitPowerType("target") == 0) then info = { r = 0.00, g = 1.00, b = 1.00 } else info = ManaBarColor[UnitPowerType("target")] end self.TargetHUD.MPText:SetTextColor(info.r, info.g, info.b) if(targetfriend) then self.TargetHUD.HPText:SetTextColor(0, 1, 0) else self.TargetHUD.HPText:SetTextColor(1, 0, 0) end -- The name of the target should be colored differently if it's a player or if -- it's a mob local _, class = UnitClass("target") local color = self.ClassColor[class] if (color and UnitIsPlayer("target")) then -- Is target in a guild? local guild, _, _ = GetGuildInfo("target") -- Color the target name based on class since we have a player targeted if(guild and ArcHUD.db.profile.ShowGuild) then self.TargetHUD.Name:SetText("|cff"..color..UnitName("target").." <"..guild..">".."|r") else self.TargetHUD.Name:SetText("|cff"..color..UnitName("target").."|r") end else -- Color the target name based on reaction (red to green) since we have a -- mob targeted local reaction = self.RepColor[UnitReaction("target","player")] if(reaction) then self.TargetHUD.Name:SetText("|cff"..reaction..UnitName("target").."|r") else self.TargetHUD.Name:SetText(UnitName("target")) end end -- Show clickable nameplate only if the target is a friendly player and not self --[[if(UnitIsPlayer("target") and targetfriend and not UnitIsUnit("player", "target")) then self.NamePlates.Target:Show() else self.NamePlates.Target:Hide() end]] if(self.db.profile.ShowBuffs) then -- Update buffs and debuffs for the target self:TargetAuras() end self:UpdateFaction("target") self:UpdateRaidTargetIcon() self:PLAYER_FLAGS_CHANGED("target") if(self.BlizzTargetHidden) then if(UnitIsEnemy("target", "player")) then PlaySound("igCreatureAggroSelect") elseif(UnitIsFriend("player", "target")) then PlaySound("igCharacterNPCSelect") else PlaySound("igCreatureNeutralSelect") end end else -- We didn't have anything targeted or ArcHUD is disabled so lets hide the -- target frame again if(self.BlizzTargetHidden) then PlaySound("INTERFACESOUND_LOSTTARGETUNIT") end self.TargetHUD:Hide() end end function ArcHUD:UpdateFaction(unit) self:LevelDebug(2, "UpdateFaction: arg1 = %s, unit = %s", arg1 or "nil", unit or "nil") if(not unit and arg1 and arg1 ~= "player") then return end if(arg1 and not unit) then unit = arg1 end if(unit and unit == "target") then local factionGroup = UnitFactionGroup("target") if(UnitIsPVPFreeForAll("target")) then self.TargetHUD.PVPIcon:SetTexture("Interface\\TargetingFrame\\UI-PVP-FFA") self.TargetHUD.PVPIcon:Show() elseif(factionGroup and UnitIsPVP("target")) then self.TargetHUD.PVPIcon:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..factionGroup) self.TargetHUD.PVPIcon:Show() else self.TargetHUD.PVPIcon:Hide() end else local factionGroup, factionName = UnitFactionGroup("player"); local _, class = UnitClass("player") local color = self.ClassColor[class] if(UnitIsPVPFreeForAll("player")) then self.NamePlates.Player.Text:SetText("|cffffff00[FFA] |cff"..(color or "ffffff")..(UnitName("player") or "Unknown Entity").."|r") elseif(factionGroup and UnitIsPVP("player")) then self.NamePlates.Player.Text:SetText("|cffff0000[PVP] |cff"..(color or "ffffff")..(UnitName("player") or "Unknown Entity").."|r") else self.NamePlates.Player.Text:SetText("|cff"..(color or "ffffff")..(UnitName("player") or "Unknown Entity").."|r") end end end function ArcHUD:UpdateRaidTargetIcon() if(not UnitExists("target")) then self.TargetHUD.RaidTargetIcon:Hide() return end local index = GetRaidTargetIndex("target") if(index) then SetRaidTargetIconTexture(self.TargetHUD.RaidTargetIcon, index) self.TargetHUD.RaidTargetIcon:Show() else self.TargetHUD.RaidTargetIcon:Hide() end end function ArcHUD:PLAYER_FLAGS_CHANGED(unit) if(arg1 and not unit) then unit = arg1 end if(not UnitExists("target")) then self.TargetHUD.LeaderIcon:Hide() return end if(unit == "target") then if(UnitIsPartyLeader("target")) then self.TargetHUD.LeaderIcon:Show() else self.TargetHUD.LeaderIcon:Hide() end end end function ArcHUD:TargetAuras() if(not arg1 == "target") then return end local frame = self.TargetHUD.frame local unit = "target" local i, icon, buff, debuff, debuffborder, debuffcount, debuffType, color for i = 1, 16 do buff = UnitBuff(unit, i) button = getglobal(frame.."Buff"..i) if (buff) then icon = getglobal(button:GetName().."Icon") icon:SetTexture(buff) button:Show() button.unit = unit else button:Hide() end end for i = 1, 16 do debuff, debuffApplications, debuffType = UnitDebuff(unit, i) button = getglobal(frame.."DeBuff"..i) if (debuff) then icon = getglobal(button:GetName().."Icon") debuffborder = getglobal(button:GetName().."Border") debuffcount = getglobal(button:GetName().."Count") icon:SetTexture(debuff) button:Show() debuffborder:Show() button.isdebuff = 1 button.unit = unit if ( debuffType ) then color = DebuffTypeColor[debuffType] else color = DebuffTypeColor["none"] end debuffborder:SetVertexColor(color.r, color.g, color.b) if (debuffApplications > 1) then debuffcount:SetText(debuffApplications) debuffcount:Show() else debuffcount:Hide() end else button:Hide() end end end function ArcHUD:SetAuraTooltip(this) if (not this:IsVisible()) then return end GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") local unit = this.unit if (this.isdebuff == 1) then GameTooltip:SetUnitDebuff(unit, this:GetID()) else GameTooltip:SetUnitBuff(unit, this:GetID()) end end function ArcHUD:EventHandler() if (event == "UNIT_DISPLAYPOWER") then local info = {} if (arg1 == "target") then if (UnitPowerType(arg1) == 0) then info = { r = 0.00, g = 1.00, b = 1.00 } else info = ManaBarColor[UnitPowerType(arg1)] end self.TargetHUD.MPText:SetTextColor(info.r, info.g, info.b) end elseif (event == "PLAYER_COMBO_POINTS") then local points = GetComboPoints() if (points > 0) then self.TargetHUD.Combo:SetText(points) else self.TargetHUD.Combo:SetText("") end elseif (event == "UNIT_HEALTH" or event == "UNIT_MAXHEALTH") then if (arg1 == "target") then -- Support for MobHealth3 if(MobHealth3) then local cur, max, found = MobHealth3:GetUnitHealth(arg1, UnitHealth(arg1), UnitHealthMax(arg1)) self.TargetHUD.HPText:SetText(cur.."/"..max) -- Support for MobHealth2 / MobInfo-2 elseif(self:MobHealth_GetTargetCurHP()) then self.TargetHUD.HPText:SetText(self:MobHealth_GetTargetCurHP().."/"..self:MobHealth_GetTargetMaxHP()) else self.TargetHUD.HPText:SetText(UnitHealth(arg1).."/"..UnitHealthMax(arg1)) end end elseif(event == "PLAYER_ENTERING_WORLD") then self.PlayerIsInCombat = false self.PlayerIsRegenOn = true else if (arg1 == "target") then self.TargetHUD.MPText:SetText(UnitMana(arg1).."/"..UnitManaMax(arg1)) end end end function ArcHUD:CombatStatus() self:LevelDebug(2, "CombatStatus: event = " .. event) if(event == "PLAYER_ENTER_COMBAT" or event == "PLAYER_REGEN_DISABLED") then self.PlayerIsInCombat = true if(event == "PLAYER_REGEN_DISABLED") then self.PlayerIsRegenOn = false end elseif(event == "PLAYER_LEAVE_COMBAT" or event == "PLAYER_REGEN_ENABLED") then if(event == "PLAYER_LEAVE_COMBAT" and self.PlayerIsRegenOn) then self.PlayerIsInCombat = false elseif(event == "PLAYER_REGEN_ENABLED") then self.PlayerIsInCombat = false self.PlayerIsRegenOn = true end elseif(event == "PET_ATTACK_START") then self.PetIsInCombat = true elseif(event == "PET_ATTACK_STOP") then self.PetIsInCombat = false end end function ArcHUD:UpdatePetNamePlate() if(UnitExists("pet")) then local happiness, _, _ = GetPetHappiness() local color if(happiness) then if(happiness == 1) then color = "ff0000" happiness = " :(" elseif(happiness == 2) then color = "ffff00" happiness = " :||" elseif(happiness == 3) then color = "00ff00" happiness = " :)" end else color = "ffffff" happiness = "" end self.NamePlates.Pet.Text:SetText("|cff"..color..UnitName("pet").." "..happiness.."|r") self.NamePlates.Pet:Show() else self.NamePlates.Pet:Hide() end end function ArcHUD:UpdateTargetTarget() -- Handle Target's Target if(UnitExists("targettarget") and self.db.profile.TargetTarget) then local _, class = UnitClass("targettarget") local color = self.ClassColor[class] if (color and UnitIsPlayer("targettarget")) then self.TargetHUD.Target.Name:SetText("|cff"..color..UnitName("targettarget").."|r") else local reaction = self.RepColor[UnitReaction("targettarget","player")] if(reaction) then self.TargetHUD.Target.Name:SetText("|cff"..reaction..UnitName("targettarget").."|r") else self.TargetHUD.Target.Name:SetText(UnitName("targettarget")) end end local info = {} if (UnitPowerType("targettarget") == 0) then info = { r = 0.00, g = 1.00, b = 1.00 } else info = ManaBarColor[UnitPowerType("targettarget")] end self.TargetHUD.Target.MPText:SetTextColor(info.r, info.g, info.b) if(UnitIsFriend("player","targettarget")) then self.TargetHUD.Target.HPText:SetTextColor(0, 1, 0) else self.TargetHUD.Target.HPText:SetTextColor(1, 0, 0) end if(UnitIsDead("targettarget") or UnitIsGhost("targettarget")) then self.TargetHUD.Target.HPText:SetText("Dead") else self.TargetHUD.Target.HPText:SetText(math.floor(UnitHealth("targettarget")/UnitHealthMax("targettarget")*100).."%") end if (UnitManaMax("targettarget") > 0) then self.TargetHUD.Target.MPText:SetText(math.floor(UnitMana("targettarget")/UnitManaMax("targettarget")*100).."%") else self.TargetHUD.Target.MPText:SetText(" ") end self.TargetHUD.Target:Show() else self.TargetHUD.Target:Hide() end -- Handle Target's Target's Target if(UnitExists("targettargettarget") and self.db.profile.TargetTargetTarget) then local _, class = UnitClass("targettargettarget") local color = self.ClassColor[class] if (color and UnitIsPlayer("targettargettarget")) then self.TargetHUD.TargetTarget.Name:SetText("|cff"..color..UnitName("targettargettarget").."|r") else local reaction = self.RepColor[UnitReaction("targettargettarget","player")] if(reaction) then self.TargetHUD.TargetTarget.Name:SetText("|cff"..reaction..UnitName("targettargettarget").."|r") else self.TargetHUD.TargetTarget.Name:SetText(UnitName("targettargettarget")) end end local info = {} if (UnitPowerType("targettargettarget") == 0) then info = { r = 0.00, g = 1.00, b = 1.00 } else info = ManaBarColor[UnitPowerType("targettargettarget")] end self.TargetHUD.TargetTarget.MPText:SetTextColor(info.r, info.g, info.b) if(UnitIsFriend("player","targettargettarget")) then self.TargetHUD.TargetTarget.HPText:SetTextColor(0, 1, 0) else self.TargetHUD.TargetTarget.HPText:SetTextColor(1, 0, 0) end if(UnitIsDead("targettargettarget") or UnitIsGhost("targettargettarget")) then self.TargetHUD.TargetTarget.HPText:SetText("Dead") else self.TargetHUD.TargetTarget.HPText:SetText(math.floor(UnitHealth("targettargettarget")/UnitHealthMax("targettargettarget")*100).."%") end if (UnitManaMax("targettargettarget") > 0) then self.TargetHUD.TargetTarget.MPText:SetText(math.floor(UnitMana("targettargettarget")/UnitManaMax("targettargettarget")*100).."%") else self.TargetHUD.TargetTarget.MPText:SetText(" ") end self.TargetHUD.TargetTarget:Show() else self.TargetHUD.TargetTarget:Hide() end end function ArcHUD:UpdateFonts(tbl) local update = false for k,v in pairs(tbl) do if(type(v) == "table") then if(v.GetFont) then local fontName, fontSize, fontFlags = v:GetFont() if(fontName) then self:LevelDebug(2, "UpdateFonts: fontName = %s, localeFont = %s", fontName, L"FONT") end if(fontName and not string.find(fontName, L"FONT")) then v:SetFont("Fonts\\"..L"FONT", fontSize, fontFlags) update = true end end self:UpdateFonts(v) end end if(update) then self:LevelDebug(3, "Fonts updated") end end -- MobInfo-2 mob health code -------------------------------- function ArcHUD:MobHealth_PPP(index) if(MobHealth_PPP) then return MobHealth_PPP( index ); else if( index and MobHealthDB[index] ) then local s, e, pts, pct = string.find(MobHealthDB[index], "^(%d+)/(%d+)$"); if( pts and pct ) then pts = pts + 0; pct = pct + 0; if( pct ~= 0 ) then return pts / pct; end end end return 0; end end -- of My_MobHealth_PPP function ArcHUD:MobHealth_GetTargetCurHP() if(MobHealthFrame) then if(MobHealth_GetTargetCurHP) then return MobHealth_GetTargetCurHP(); else local name = UnitName("target"); local level = UnitLevel("target"); local healthPercent = UnitHealth("target"); if name and level and healthPercent then local index = name..":"..level; local ppp = self:MobHealth_PPP( index ); return math.floor( healthPercent * ppp + 0.5); end end end return nil; end -- of MobHealth_GetTargetCurHP() function ArcHUD:MobHealth_GetTargetMaxHP() if(MobHealthFrame) then if(MobHealth_GetTargetMaxHP) then return MobHealth_GetTargetMaxHP(); else local name = UnitName("target"); local level = UnitLevel("target"); if name and level then local index = name..":"..level; local ppp = self:MobHealth_PPP( index ); return math.floor( 100 * ppp + 0.5); end end end return nil; end -- of MobHealth_GetTargetMaxHP() -- Blizzard Frame functions -- Taken from AceUnitFrames function ArcHUD:HideBlizzardPlayer(hide) self.BlizzPlayerHidden = not hide if not hide then PlayerFrame:UnregisterAllEvents() PlayerFrameHealthBar:UnregisterAllEvents() PlayerFrameManaBar:UnregisterAllEvents() PlayerFrame:Hide() PetFrame:UnregisterAllEvents() PetFrameHealthBar:UnregisterAllEvents() PetFrameManaBar:UnregisterAllEvents() PetFrame:Hide() else PlayerFrame:RegisterEvent("UNIT_LEVEL") PlayerFrame:RegisterEvent("UNIT_COMBAT") PlayerFrame:RegisterEvent("UNIT_PVP_UPDATE") PlayerFrame:RegisterEvent("UNIT_MAXMANA") PlayerFrame:RegisterEvent("PLAYER_ENTERING_WORLD") PlayerFrame:RegisterEvent("PLAYER_ENTER_COMBAT") PlayerFrame:RegisterEvent("PLAYER_LEAVE_COMBAT") PlayerFrame:RegisterEvent("PLAYER_REGEN_DISABLED") PlayerFrame:RegisterEvent("PLAYER_REGEN_ENABLED") PlayerFrame:RegisterEvent("PLAYER_UPDATE_RESTING") PlayerFrame:RegisterEvent("PARTY_MEMBERS_CHANGED") PlayerFrame:RegisterEvent("PARTY_LEADER_CHANGED") PlayerFrame:RegisterEvent("PARTY_LOOT_METHOD_CHANGED") PlayerFrame:RegisterEvent("PLAYER_ENTERING_WORLD") PlayerFrame:RegisterEvent("RAID_ROSTER_UPDATE") PlayerFrame:RegisterEvent("PLAYTIME_CHANGED") PlayerFrame:RegisterEvent("UNIT_NAME_UPDATE") PlayerFrame:RegisterEvent("UNIT_PORTRAIT_UPDATE") PlayerFrame:RegisterEvent("UNIT_DISPLAYPOWER") PlayerFrameHealthBar:RegisterEvent("CVAR_UPDATE") PlayerFrameHealthBar:RegisterEvent("UNIT_HEALTH") PlayerFrameHealthBar:RegisterEvent("UNIT_MAXHEALTH") PlayerFrameManaBar:RegisterEvent("CVAR_UPDATE") PlayerFrameManaBar:RegisterEvent("UNIT_MANA") PlayerFrameManaBar:RegisterEvent("UNIT_RAGE") PlayerFrameManaBar:RegisterEvent("UNIT_FOCUS") PlayerFrameManaBar:RegisterEvent("UNIT_ENERGY") PlayerFrameManaBar:RegisterEvent("UNIT_HAPPINESS") PlayerFrameManaBar:RegisterEvent("UNIT_MAXMANA") PlayerFrameManaBar:RegisterEvent("UNIT_MAXRAGE") PlayerFrameManaBar:RegisterEvent("UNIT_MAXFOCUS") PlayerFrameManaBar:RegisterEvent("UNIT_MAXENERGY") PlayerFrameManaBar:RegisterEvent("UNIT_MAXHAPPINESS") PlayerFrameManaBar:RegisterEvent("UNIT_DISPLAYPOWER") PlayerFrame:Show() PetFrame:RegisterEvent("UNIT_PET") PetFrame:RegisterEvent("UNIT_COMBAT") PetFrame:RegisterEvent("UNIT_AURA") PetFrame:RegisterEvent("PET_ATTACK_START") PetFrame:RegisterEvent("PET_ATTACK_STOP") PetFrame:RegisterEvent("UNIT_HAPPINESS") PetFrame:RegisterEvent("UNIT_NAME_UPDATE") PetFrame:RegisterEvent("UNIT_PORTRAIT_UPDATE") PetFrame:RegisterEvent("UNIT_DISPLAYPOWER") PetFrameHealthBar:RegisterEvent("CVAR_UPDATE") PetFrameHealthBar:RegisterEvent("UNIT_HEALTH") PetFrameHealthBar:RegisterEvent("UNIT_MAXHEALTH") PetFrameManaBar:RegisterEvent("CVAR_UPDATE") PetFrameManaBar:RegisterEvent("UNIT_MANA") PetFrameManaBar:RegisterEvent("UNIT_RAGE") PetFrameManaBar:RegisterEvent("UNIT_FOCUS") PetFrameManaBar:RegisterEvent("UNIT_ENERGY") PetFrameManaBar:RegisterEvent("UNIT_HAPPINESS") PetFrameManaBar:RegisterEvent("UNIT_MAXMANA") PetFrameManaBar:RegisterEvent("UNIT_MAXRAGE") PetFrameManaBar:RegisterEvent("UNIT_MAXFOCUS") PetFrameManaBar:RegisterEvent("UNIT_MAXENERGY") PetFrameManaBar:RegisterEvent("UNIT_MAXHAPPINESS") PetFrameManaBar:RegisterEvent("UNIT_DISPLAYPOWER") end end function ArcHUD:HideBlizzardTarget(hide) self.BlizzTargetHidden = not hide if not hide then TargetFrame:UnregisterAllEvents() TargetFrameHealthBar:UnregisterAllEvents() TargetFrameManaBar:UnregisterAllEvents() TargetFrame:Hide() ComboFrame:UnregisterAllEvents() else TargetFrame:RegisterEvent("PLAYER_TARGET_CHANGED") TargetFrame:RegisterEvent("UNIT_HEALTH") TargetFrame:RegisterEvent("UNIT_LEVEL") TargetFrame:RegisterEvent("UNIT_FACTION") TargetFrame:RegisterEvent("UNIT_CLASSIFICATION_CHANGED") TargetFrame:RegisterEvent("UNIT_AURA") TargetFrame:RegisterEvent("PLAYER_FLAGS_CHANGED") TargetFrame:RegisterEvent("PARTY_MEMBERS_CHANGED") TargetFrame:RegisterEvent("UNIT_NAME_UPDATE") TargetFrame:RegisterEvent("UNIT_PORTRAIT_UPDATE") TargetFrame:RegisterEvent("UNIT_DISPLAYPOWER") TargetFrameHealthBar:RegisterEvent("CVAR_UPDATE") TargetFrameHealthBar:RegisterEvent("UNIT_HEALTH") TargetFrameHealthBar:RegisterEvent("UNIT_MAXHEALTH") TargetFrameManaBar:RegisterEvent("CVAR_UPDATE") TargetFrameManaBar:RegisterEvent("UNIT_MANA") TargetFrameManaBar:RegisterEvent("UNIT_RAGE") TargetFrameManaBar:RegisterEvent("UNIT_FOCUS") TargetFrameManaBar:RegisterEvent("UNIT_ENERGY") TargetFrameManaBar:RegisterEvent("UNIT_HAPPINESS") TargetFrameManaBar:RegisterEvent("UNIT_MAXMANA") TargetFrameManaBar:RegisterEvent("UNIT_MAXRAGE") TargetFrameManaBar:RegisterEvent("UNIT_MAXFOCUS") TargetFrameManaBar:RegisterEvent("UNIT_MAXENERGY") TargetFrameManaBar:RegisterEvent("UNIT_MAXHAPPINESS") TargetFrameManaBar:RegisterEvent("UNIT_DISPLAYPOWER") --if(UnitExists("target")) then --TargetFrame:Show() --end this = TargetFrame TargetFrame_Update() ComboFrame:RegisterEvent("PLAYER_TARGET_CHANGED") ComboFrame:RegisterEvent("PLAYER_COMBO_POINTS") end end