diff --git a/Interface/AddOns/SVUI/SVUI.lua b/Interface/AddOns/SVUI/SVUI.lua index 03df2c0..d00ca9e 100644 --- a/Interface/AddOns/SVUI/SVUI.lua +++ b/Interface/AddOns/SVUI/SVUI.lua @@ -430,32 +430,6 @@ do end end - local Registry_PreLoad = function(self) - if not PackageQueue then return end - for i=1,#PackageQueue do - local name = PackageQueue[i] - local obj = self.__owner[name] - if(obj and obj.PriorityLoad and (not obj.initialized)) then - if self.__owner.db[name] then - obj.db = self.__owner.db[name] - end - - local halt = false - if(obj.db.incompatible) then - for addon,_ in pairs(obj.db.incompatible) do - if IsAddOnLoaded(addon) then halt = true end - end - end - if(not halt) then - obj:PriorityLoad() - obj.PriorityLoad = nil - end - - obj.initialized = true; - end - end - end - local Registry_Load = function(self) if not PackageQueue then return end for i=1,#PackageQueue do @@ -567,7 +541,6 @@ do RunCallbacks = Registry_RunCallbacks, Update = Registry_Update, UpdateAll = Registry_UpdateAll, - PreLoadPackages = Registry_PreLoad, LoadPackages = Registry_Load, } } diff --git a/Interface/AddOns/SVUI/assets/artwork/Doodads/GENERIC-ARROW.blp b/Interface/AddOns/SVUI/assets/artwork/Doodads/GENERIC-ARROW.blp new file mode 100644 index 0000000..327b5a3 Binary files /dev/null and b/Interface/AddOns/SVUI/assets/artwork/Doodads/GENERIC-ARROW.blp differ diff --git a/Interface/AddOns/SVUI/assets/artwork/Doodads/GPS-ARROW.blp b/Interface/AddOns/SVUI/assets/artwork/Doodads/GPS-ARROW.blp index 327b5a3..4c51507 100644 Binary files a/Interface/AddOns/SVUI/assets/artwork/Doodads/GPS-ARROW.blp and b/Interface/AddOns/SVUI/assets/artwork/Doodads/GPS-ARROW.blp differ diff --git a/Interface/AddOns/SVUI/libs/oUF/elements/castbar.lua b/Interface/AddOns/SVUI/libs/oUF/elements/castbar.lua index 7de23e6..c6b3a85 100644 --- a/Interface/AddOns/SVUI/libs/oUF/elements/castbar.lua +++ b/Interface/AddOns/SVUI/libs/oUF/elements/castbar.lua @@ -1,8 +1,8 @@ ---[[ - Original codebase: - oUF_Castbar by starlon. - http://svn.wowace.com/wowace/trunk/oUF_Castbar/ ---]] +--[[ Element: Cast Bar + + THIS FILE HEAVILY MODIFIED FOR USE WITH SUPERVILLAIN UI + +]] local parent, ns = ... local oUF = ns.oUF @@ -41,17 +41,31 @@ local UNIT_SPELLCAST_START = function(self, event, unit, spell) endTime = endTime / 1e3 startTime = startTime / 1e3 - local max = endTime - startTime + local repeatCount = GetTradeskillRepeatCount() or 1 + local start = GetTime() - startTime - -- if(tradeskill) then - -- local repeatCount = GetTradeskillRepeatCount() - -- max = (endTime * repeatCount) - startTime - -- else - -- max = endTime - startTime - -- end + if(tradeskill) then + if(castbar.previous ~= name) then + castbar.recipecount = 1 + castbar.maxrecipe = GetTradeskillRepeatCount() + castbar.duration = start + else + castbar.recipecount = castbar.recipecount or 1 + castbar.maxrecipe = castbar.maxrecipe or 1 + castbar.duration = castbar.duration or start + end + else + castbar.recipecount = nil + castbar.maxrecipe = 1 + castbar.duration = start + end + castbar.previous = name + castbar.tradeskill = tradeskill castbar.castid = castid - castbar.duration = GetTime() - startTime + + local max = (endTime - startTime) * castbar.maxrecipe + castbar.max = max castbar.delay = 0 castbar.casting = true @@ -62,7 +76,7 @@ local UNIT_SPELLCAST_START = function(self, event, unit, spell) if(castbar.Text) then castbar.Text:SetText(text) end if(castbar.Icon) then castbar.Icon:SetTexture(texture) end - if(castbar.Time) then castbar.Time:SetText() end + if(castbar.Time) then castbar.Time:SetText(repeatCount) end local shield = castbar.Shield if(shield and interrupt) then @@ -93,7 +107,11 @@ local UNIT_SPELLCAST_FAILED = function(self, event, unit, spellname, _, castid) local castbar = self.Castbar if (castbar.castid ~= castid) then return end + castbar.previous = nil castbar.casting = nil + castbar.tradeskill = nil + castbar.recipecount = nil + castbar.maxrecipe = nil castbar.interrupt = nil castbar:SetValue(0) castbar:Hide() @@ -109,7 +127,11 @@ local UNIT_SPELLCAST_INTERRUPTED = function(self, event, unit, spellname, _, cas local castbar = self.Castbar if (castbar.castid ~= castid) then return end + castbar.previous = nil castbar.casting = nil + castbar.tradeskill = nil + castbar.recipecount = nil + castbar.maxrecipe = nil castbar.channeling = nil castbar:SetValue(0) @@ -174,10 +196,28 @@ local UNIT_SPELLCAST_STOP = function(self, event, unit, spellname, _, castid) local castbar = self.Castbar if (castbar.castid ~= castid) then return end - castbar.casting = nil - castbar.interrupt = nil - castbar:SetValue(0) - castbar:Hide() + if(castbar.tradeskill and castbar.recipecount and castbar.recipecount >= 0) then + castbar.recipecount = castbar.recipecount + 1 + if(castbar.recipecount > castbar.maxrecipe) then + castbar.previous = nil + castbar.casting = nil + castbar.interrupt = nil + castbar.tradeskill = nil + castbar.recipecount = nil + castbar.maxrecipe = nil + castbar:SetValue(0) + castbar:Hide() + end + else + castbar.previous = nil + castbar.casting = nil + castbar.interrupt = nil + castbar.tradeskill = nil + castbar.recipecount = nil + castbar.maxrecipe = nil + castbar:SetValue(0) + castbar:Hide() + end if(castbar.PostCastStop) then return castbar:PostCastStop(unit, spellname, castid) @@ -209,6 +249,9 @@ local UNIT_SPELLCAST_CHANNEL_START = function(self, event, unit, spellname) -- executed or be fully completed by the OnUpdate handler before CHANNEL_START -- is called. castbar.casting = nil + castbar.tradeskill = nil + castbar.recipecount = nil + castbar.maxrecipe = nil castbar.castid = nil castbar:SetMinMaxValues(0, max) @@ -289,6 +332,8 @@ local UpdateCastingTimeInfo = function(self, duration) else self.Time:SetFormattedText("%.1f|cffff0000-%.1f|r", duration, self.delay) end + elseif(self.recipecount and self.recipecount > 0) then + self.Time:SetText(self.recipecount .. "/" .. self.maxrecipe) else if(self.CustomTimeText) then self:CustomTimeText(duration) @@ -307,7 +352,11 @@ local onUpdate = function(self, elapsed) if not (self.casting or self.channeling) then self.unitName = nil + self.previous = nil self.casting = nil + self.tradeskill = nil + self.recipecount = nil + self.maxrecipe = nil self.castid = nil self.channeling = nil @@ -318,9 +367,12 @@ local onUpdate = function(self, elapsed) if(self.casting) then local duration = self.duration + self.lastUpdate - if(duration >= self.max) then + self.previous = nil self.casting = nil + self.tradeskill = nil + self.recipecount = nil + self.maxrecipe = nil self:Hide() if(self.PostCastStop) then self:PostCastStop(self.__owner.unit) end @@ -379,6 +431,7 @@ local Enable = function(object, unit) object:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START", UNIT_SPELLCAST_CHANNEL_START) object:RegisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE", UNIT_SPELLCAST_CHANNEL_UPDATE) object:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP", UNIT_SPELLCAST_CHANNEL_STOP) + --object:RegisterEvent("UPDATE_TRADESKILL_RECAST", UPDATE_TRADESKILL_RECAST) end castbar:SetScript("OnUpdate", castbar.OnUpdate or onUpdate) @@ -433,6 +486,7 @@ local Disable = function(object, unit) object:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_START", UNIT_SPELLCAST_CHANNEL_START) object:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE", UNIT_SPELLCAST_CHANNEL_UPDATE) object:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_STOP", UNIT_SPELLCAST_CHANNEL_STOP) + --object:UnregisterEvent("UPDATE_TRADESKILL_RECAST", UPDATE_TRADESKILL_RECAST) castbar:SetScript("OnUpdate", nil) end diff --git a/Interface/AddOns/SVUI/libs/oUF/elements/health.lua b/Interface/AddOns/SVUI/libs/oUF/elements/health.lua index b885e78..ecec3b5 100644 --- a/Interface/AddOns/SVUI/libs/oUF/elements/health.lua +++ b/Interface/AddOns/SVUI/libs/oUF/elements/health.lua @@ -16,6 +16,8 @@ local Update = function(self, event, unit) local min, max = UnitHealth(unit), UnitHealthMax(unit) local disconnected = not UnitIsConnected(unit) + local invisible = ((min == max) or UnitIsDeadOrGhost(unit) or disconnected) + if health.fillInverted then health:SetReverseFill(true) end @@ -24,10 +26,14 @@ local Update = function(self, event, unit) if(disconnected) then health:SetValue(max) + health.percent = 100 else health:SetValue(min) + health.percent = (min / max) * 100 end + health.percent = invisible and 100 or ((min / max) * 100) + health.disconnected = disconnected if health.frequentUpdates ~= health.__frequentUpdates then @@ -91,6 +97,10 @@ local Update = function(self, event, unit) if(db and db.gridMode) then health:SetOrientation("VERTICAL") end + + if(health.PostUpdate) then + return health.PostUpdate(self, health.percent) + end end local CustomUpdate = function(self, event, unit) @@ -108,6 +118,8 @@ local CustomUpdate = function(self, event, unit) health:SetMinMaxValues(-max, 0) health:SetValue(-min) + + health.percent = invisible and 100 or ((min / max) * 100) health.disconnected = disconnected @@ -161,6 +173,10 @@ local CustomUpdate = function(self, event, unit) local current = random(1,max) health:SetValue(-current) end + + if(health.PostUpdate) then + return health.PostUpdate(self, health.percent) + end end local Path = function(self, ...) diff --git a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_GPS/oUF_GPS.lua b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_GPS/oUF_GPS.lua index 4ae34f1..892aec5 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_GPS/oUF_GPS.lua +++ b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_GPS/oUF_GPS.lua @@ -4,63 +4,52 @@ assert(oUF, 'oUF not loaded') local cos, sin, sqrt2, max, atan2, floor = math.cos, math.sin, math.sqrt(2), math.max, math.atan2, math.floor; local tinsert, tremove = table.insert, table.remove; -local _FRAME, _GPS, _TRACKER, _SWITCH, _ARROW, _SPINNER, _TEXT, _HANDLER; -local spin, unit; local SuperVillain; +local playerGUID = UnitGUID("player") -do - local function _calc(radius) - return 0.5 + cos(radius) / sqrt2, 0.5 + sin(radius) / sqrt2; - end +local function _calc(radius) + return 0.5 + cos(radius) / sqrt2, 0.5 + sin(radius) / sqrt2; +end - function spin(texture, angle) - local LRx, LRy = _calc(angle + 0.785398163); - local LLx, LLy = _calc(angle + 2.35619449); - local ULx, ULy = _calc(angle + 3.92699082); - local URx, URy = _calc(angle - 0.785398163); - - texture:SetTexCoord(ULx, ULy, LLx, LLy, URx, URy, LRx, LRy); - end +local function spin(texture, angle) + local LRx, LRy = _calc(angle + 0.785398163); + local LLx, LLy = _calc(angle + 2.35619449); + local ULx, ULy = _calc(angle + 3.92699082); + local URx, URy = _calc(angle - 0.785398163); + + texture:SetTexCoord(ULx, ULy, LLx, LLy, URx, URy, LRx, LRy); end local Update = function(self, elapsed) if self.elapsed and self.elapsed > (self.throttle or 0.02) then - unit = _FRAME.unit + local unit = self.__owner.unit + if((UnitInParty(unit) or UnitInRaid(unit)) and not UnitIsUnit(unit, "player")) then - _SWITCH.Trackable = true - else - _SWITCH.Trackable = false - end - if(_SWITCH.Trackable) then - if(_TRACKER:IsShown()) then - _SWITCH:Hide() - if(not SuperVillain) then SuperVillain = SVUI[1] end - local distance, angle = SuperVillain:Triangulate("player", unit, true) - if((not distance) or (not angle)) then - _TRACKER:Hide() - _SWITCH:Show() - else - local out = floor(tonumber(distance)) - spin(_ARROW, angle) + if(not SuperVillain) then SuperVillain = SVUI[1] end + + local distance, angle = SuperVillain:Triangulate("player", unit, true) + + if((not distance) or (not angle)) then + self:Hide() + else + local out = floor(tonumber(distance)) + if(out > 5) then if(out > 100) then - _ARROW:SetVertexColor(1,0.1,0.1) - _SPINNER:SetVertexColor(0.8,0.1,0.1,0.5) + self.Arrow:SetVertexColor(1,0.1,0.1) elseif(out > 40) then - _ARROW:SetVertexColor(1,0.8,0.1) - _SPINNER:SetVertexColor(0.8,0.8,0.1,0.5) - elseif(out > 5) then - _ARROW:SetVertexColor(0.1,1,0.8) - _SPINNER:SetVertexColor(0.1,0.8,0.8,0.5) + self.Arrow:SetVertexColor(1,0.8,0.1) else - _TRACKER:Hide() - _SWITCH:Show() + self.Arrow:SetVertexColor(0.1,1,0.8) end - _TEXT:SetText(out) + spin(self.Arrow, angle) + else + self:Hide() + out = "" end + if(self.Text) then self.Text:SetText(out) end end else - _TRACKER:Hide() - _SWITCH:Show() + self:Hide() end self.elapsed = 0 self.throttle = 0.02 @@ -70,48 +59,36 @@ local Update = function(self, elapsed) end local function Path(self, ...) - return (self.GPS.Override or Update) (self, ...) + return (self.Override or Update) (self, ...) end -local function ForceUpdate(element) - return Path(element.__owner, 'ForceUpdate') +local OnEnterFunc = function(self) + local unit = self.unit + if(not unit or ((UnitInParty(unit) or UnitInRaid(unit)) and not UnitIsUnit(unit, "player"))) then + self.GPS:Show() + end end -local Enable = function(self) - if(self.GPS) then - _FRAME = self - _GPS = self.GPS - _TRACKER = self.GPS.Tracker - _SWITCH = self.GPS.Switch - _ARROW = self.GPS.Tracker.Arrow - _SPINNER = self.GPS.Tracker.Spinner - _TEXT = self.GPS.Tracker.Text - _GPS.__owner = self - _GPS.ForceUpdate = ForceUpdate - - --self:RegisterEvent('PLAYER_TARGET_CHANGED', Path) +local NOOP = function() return end - if not _HANDLER then - _HANDLER = CreateFrame("Frame") - _HANDLER:SetScript("OnUpdate", Update) - end - _GPS:Show() +local Enable = function(self, unit) + local gps = self.GPS + if(gps) then + self.GPSHook = OnEnterFunc + self:HookScript("OnEnter", self.GPSHook) + self.GPS.__owner = self + self.GPS:SetScript("OnUpdate", Path) + self.GPS:Show() return true end end local Disable = function(self) - if self.GPS then - self.GPS.LoopEnabled = nil - self.GPS:Hide() - --self:UnregisterEvent('PLAYER_TARGET_CHANGED', Path) - _FRAME = nil - _GPS = nil - _TRACKER = nil - _SWITCH = nil - _ARROW = nil - _SPINNER = nil - _TEXT = nil + local gps = self.GPS + if(gps) then + self.GPSHook = NOOP + gps:SetScript("OnUpdate", nil) + gps:Hide() end end diff --git a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_HyperCombo/oUF_HyperCombo.lua b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_HyperCombo/oUF_HyperCombo.lua index f7a0bb8..81ca75b 100644 --- a/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_HyperCombo/oUF_HyperCombo.lua +++ b/Interface/AddOns/SVUI/libs/oUF_Plugins/oUF_HyperCombo/oUF_HyperCombo.lua @@ -32,6 +32,12 @@ local function UpdateGuile() end end +local function FivePointsAlarm() + HeadsUpAlarm(msg, CombatText_StandardScroll, e.colors.r, e.colors.g, e.colors.b, "sticky"); + if not CombatText_AddMessage then return end + CombatText_AddMessage("5 Points", CombatText_StandardScroll, 0.1, 0.8, 1, "sticky") +end + local Update = function(self, event, unit) if(unit == 'pet') then return end local bar = self.HyperCombo; @@ -70,6 +76,9 @@ local Update = function(self, event, unit) if(current > 0) then tracker.Text:SetText(current) tracker.Text:SetTextColor(unpack(TextColors[current])) + if(current == 5) then + FivePointsAlarm() + end elseif(bar.LAST_COMBO_POINTS > 0) then tracker.Text:SetText(bar.LAST_COMBO_POINTS) tracker.Text:SetTextColor(0.5,0.5,1) diff --git a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua index 139d55f..e4ddda8 100644 --- a/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua +++ b/Interface/AddOns/SVUI/packages/actionbar/SVBar.lua @@ -764,7 +764,7 @@ do local barVisibility = db.customVisibility; local totalButtons = db.buttons; local max = (isStance and GetNumShapeshiftForms()) or (isPet and 10) or NUM_ACTIONBAR_BUTTONS; - local rows = ceil(max / cols); + local rows = ceil(totalButtons / cols); if max < cols then cols = max end if rows < 1 then rows = 1 end diff --git a/Interface/AddOns/SVUI/packages/chat/SVChat.lua b/Interface/AddOns/SVUI/packages/chat/SVChat.lua index 5605359..972a295 100644 --- a/Interface/AddOns/SVUI/packages/chat/SVChat.lua +++ b/Interface/AddOns/SVUI/packages/chat/SVChat.lua @@ -918,6 +918,7 @@ function MOD:UpdateLocals() end function MOD:ReLoad() + if(not SuperVillain.db.SVChat.enable) then return end self:RefreshChatFrames(true) end diff --git a/Interface/AddOns/SVUI/packages/stats/SVStats.lua b/Interface/AddOns/SVUI/packages/stats/SVStats.lua index 8bdca1e..4727f5d 100644 --- a/Interface/AddOns/SVUI/packages/stats/SVStats.lua +++ b/Interface/AddOns/SVUI/packages/stats/SVStats.lua @@ -247,14 +247,9 @@ end do local dataLayout, dataStrings = {}, {"None",KILLING_BLOWS,HONORABLE_KILLS,DEATHS,HONOR,"None","None","None","None",DAMAGE,SHOW_COMBAT_HEALING}; - dataLayout["TopLeftDataPanel"] = {true,true,true}; - dataLayout["TopLeftDataPanel"]['left'] = 10; - dataLayout["TopLeftDataPanel"]['middle'] = 5; - dataLayout["TopLeftDataPanel"]['right'] = 2; - dataLayout["TopRightDataPanel"] = {true,true,true}; - dataLayout["TopRightDataPanel"]['left'] = 4; - dataLayout["TopRightDataPanel"]['middle'] = 3; - dataLayout["TopRightDataPanel"]['right'] = 11; + dataLayout["TopLeftDataPanel"] = {['left'] = 10, ['middle'] = 5, ['right'] = 2}; + dataLayout["TopRightDataPanel"] = {['left'] = 4, ['middle'] = 3, ['right'] = 11}; + local Stat_OnLeave = function() MOD.tooltip:Hide() end diff --git a/Interface/AddOns/SVUI/packages/unit/SVUnit.lua b/Interface/AddOns/SVUI/packages/unit/SVUnit.lua index 302d168..4f4b304 100644 --- a/Interface/AddOns/SVUI/packages/unit/SVUnit.lua +++ b/Interface/AddOns/SVUI/packages/unit/SVUnit.lua @@ -1063,7 +1063,20 @@ function MOD:RefreshUnitLayout(frame, template) frame:DisableElement('Range') end end - end + end + + if(frame.GPS) then + if(self.db.gpsLowHealth) then + frame.Health.PostUpdate = frame.GPS.LowHealthUpdate + else + frame.Health.PostUpdate = nil + end + if(db.gps and not frame:IsElementEnabled("GPS")) then + frame:EnableElement("GPS") + elseif(not db.gps and frame:IsElementEnabled("GPS")) then + frame:DisableElement("GPS") + end + end end --[[ ########################################################## diff --git a/Interface/AddOns/SVUI/packages/unit/config.lua b/Interface/AddOns/SVUI/packages/unit/config.lua index 3224079..91888ee 100644 --- a/Interface/AddOns/SVUI/packages/unit/config.lua +++ b/Interface/AddOns/SVUI/packages/unit/config.lua @@ -68,7 +68,8 @@ CONFIGS["SVUnit"] = { ["auraBarByType"] = true, ["auraBarShield"] = true, ["castClassColor"] = false, - ["xrayFocus"] = true, + ["xrayFocus"] = true, + ["gpsLowHealth"] = false, ["player"] = { ["enable"] = true, ["width"] = 215, @@ -268,7 +269,8 @@ CONFIGS["SVUnit"] = { ["rangeCheck"] = true, ["predict"] = false, ["smartAuraDisplay"] = "DISABLED", - ["middleClickFocus"] = true, + ["middleClickFocus"] = true, + ["gps"] = true, ["formatting"] = { ["power_colored"] = true, ["power_type"] = "none", @@ -1586,7 +1588,8 @@ CONFIGS["SVUnit"] = { ["colorOverride"] = "USE_DEFAULT", ["gridMode"] = false, ["width"] = 70, - ["height"] = 70, + ["height"] = 70, + ["gps"] = true, ["formatting"] = { ["power_colored"] = true, ["power_type"] = "none", @@ -1761,7 +1764,8 @@ CONFIGS["SVUnit"] = { ["colorOverride"] = "USE_DEFAULT", ["gridMode"] = false, ["width"] = 75, - ["height"] = 34, + ["height"] = 34, + ["gps"] = false, ["formatting"] = { ["power_colored"] = true, ["power_type"] = "none", @@ -1911,7 +1915,8 @@ CONFIGS["SVUnit"] = { ["colorOverride"] = "USE_DEFAULT", ["gridMode"] = false, ["width"] = 50, - ["height"] = 30, + ["height"] = 30, + ["gps"] = false, ["formatting"] = { ["power_colored"] = true, ["power_type"] = "none", @@ -2060,7 +2065,8 @@ CONFIGS["SVUnit"] = { ["colorOverride"] = "USE_DEFAULT", ["gridMode"] = false, ["width"] = 50, - ["height"] = 30, + ["height"] = 30, + ["gps"] = false, ["formatting"] = { ["power_colored"] = true, ["power_type"] = "none", diff --git a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua index d9b78a1..abbd830 100644 --- a/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua +++ b/Interface/AddOns/SVUI/packages/unit/elements/castbar.lua @@ -280,7 +280,9 @@ local CustomTimeText = function(self, value) end local CustomCastTimeUpdate = function(self, duration) - if(self.Time) then + if(self.recipecount and self.maxrecipe and self.maxrecipe > 0) then + self.Time:SetText(self.recipecount .. "/" .. self.maxrecipe) + elseif(self.Time) then if(self.delay ~= 0) then if(self.CustomDelayText) then self:CustomDelayText(duration) @@ -315,10 +317,13 @@ local CustomCastBarUpdate = function(self, elapsed) if not (self.casting or self.channeling) then self.unitName = nil + self.previous = nil self.casting = nil self.castid = nil self.channeling = nil - + self.tradeskill = nil + self.recipecount = nil + self.maxrecipe = nil self:SetValue(1) self:Hide() return @@ -343,7 +348,11 @@ local CustomCastBarUpdate = function(self, elapsed) local duration = self.duration + self.lastUpdate if(duration >= self.max) then + self.previous = nil self.casting = nil + self.tradeskill = nil + self.recipecount = nil + self.maxrecipe = nil self:Hide() if(self.PostCastStop) then self:PostCastStop(self.__owner.unit) end diff --git a/Interface/AddOns/SVUI/packages/unit/elements/misc.lua b/Interface/AddOns/SVUI/packages/unit/elements/misc.lua index d99e8ef..8916759 100644 --- a/Interface/AddOns/SVUI/packages/unit/elements/misc.lua +++ b/Interface/AddOns/SVUI/packages/unit/elements/misc.lua @@ -264,6 +264,48 @@ function MOD:RaidRoleUpdate() end end end + +local LowHealthFunc = function(self, percent) + if(percent <= 50) then + self.GPS:Show() + else + self.GPS:Hide() + end +end + +function MOD:CreateGPS(frame, centered) + if not frame then return end + local size = centered and 16 or 32 + local gps = CreateFrame("Frame", nil, frame) + gps:Size(size, size) + + if(centered) then + gps:Point("CENTER", frame, "CENTER", 0, 0) + else + gps:Point("TOPRIGHT", frame, "TOPRIGHT", 0, 0) + gps.Text = gps:CreateFontString(nil, "OVERLAY") + gps.Text:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, 0) + gps.Text:SetPoint("BOTTOMRIGHT", gps, "BOTTOMLEFT", -4, 0) + gps.Text:SetFont(SuperVillain.Media.font.roboto, 14, "OUTLINE") + gps.Text:SetJustifyH("RIGHT") + gps.Text:SetJustifyV("MIDDLE") + gps.Text:SetTextColor(1, 1, 1, 0.75) + end + + gps.Arrow = gps:CreateTexture(nil, "OVERLAY", nil, -2) + gps.Arrow:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Doodads\GPS-ARROW]]) + gps.Arrow:Size(size, size) + gps.Arrow:SetPoint("CENTER", gps, "CENTER", 0, 0) + gps.Arrow:SetVertexColor(0.1, 0.8, 0.8) + gps.Arrow:SetAlpha(0.7) + + gps.OnlyLowHealth = false + gps.LowHealthUpdate = LowHealthFunc + + gps:Hide() + + return gps +end --[[ ########################################################## PLAYER ONLY COMPONENTS @@ -362,105 +404,6 @@ end TARGET ONLY COMPONENTS ########################################################## ]]-- -local function GPS_OnEnter(self) - self:SetAlpha(1) - GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) - if(not self.Trackable) then - self.Icon:SetVertexColor(1, 0.5, 0) - GameTooltip:ClearLines() - GameTooltip:AddLine("Can not track this unit", 1, 1, 1) - else - self.Icon:SetVertexColor(0.1, 1, 0.5) - GameTooltip:ClearLines() - GameTooltip:AddLine("Start tracking your target", 1, 1, 1) - end - GameTooltip:Show() -end - -local function GPS_OnLeave(self) - self:SetAlpha(0.25) - self.Icon:SetVertexColor(0.1, 0.1, 0.1) - GameTooltip:Hide() -end - -local function GPS_OnMouseDown(self) - if(not self.Trackable) then - self.Icon:SetVertexColor(1, 0, 0) - end -end - -local function GPS_OnMouseUp(self) - if(not self.Trackable) then - self.Icon:SetVertexColor(1, 0.5, 0) - else - self.Icon:SetVertexColor(0.1, 1, 0.5) - self:GetParent().Tracker:Show() - end -end - -function MOD:CreateGPS(frame) - if not frame then return end - - local gps = CreateFrame("Frame", nil, frame) - gps:Size(50, 50) - gps:Point("BOTTOMLEFT", frame, "BOTTOMRIGHT", 6, 0) - gps:EnableMouse(false) - - local tracker = CreateFrame("Frame", nil, gps) - tracker:SetAllPoints(gps) - tracker:SetFrameLevel(gps:GetFrameLevel() + 2) - - local border = tracker:CreateTexture(nil, "BORDER") - border:SetAllPoints(tracker) - border:SetTexture([[Interface\Addons\SVUI\assets\artwork\Doodads\GPS-BORDER]]) - border:SetGradient(unpack(SuperVillain.Media.gradient.dark)) - - tracker.Arrow = tracker:CreateTexture(nil, "OVERLAY", nil, -2) - tracker.Arrow:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Doodads\GPS-ARROW]]) - tracker.Arrow:Size(50, 50) - tracker.Arrow:SetPoint("CENTER", tracker, "CENTER", 0, 0) - tracker.Arrow:SetVertexColor(0.1, 0.8, 0.8) - - tracker.Text = tracker:CreateFontString(nil, "OVERLAY") - tracker.Text:SetAllPoints(tracker) - tracker.Text:SetFont(SuperVillain.Media.font.roboto, 14, "OUTLINE") - tracker.Text:SetTextColor(1, 1, 1, 0.75) - - tracker.Spinner = tracker:CreateTexture(nil, "ARTWORK", nil, 2) - tracker.Spinner:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Doodads\GPS-ANIMATION]]) - tracker.Spinner:Size(50, 50) - tracker.Spinner:SetPoint("CENTER", tracker, "CENTER", 0, 0) - - SuperVillain.Animate:Orbit(tracker.Spinner, 8, true) - - local switch = CreateFrame("Frame", nil, gps) - switch:SetAllPoints(gps) - switch:EnableMouse(true) - - switch.Icon = switch:CreateTexture(nil, "BACKGROUND") - switch.Icon:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Doodads\GPS-OPEN]]) - switch.Icon:Size(32, 32) - switch.Icon:SetPoint("BOTTOMLEFT", switch, "BOTTOMLEFT", 0, 0) - switch.Icon:SetVertexColor(0.1, 0.1, 0.1) - - switch.Trackable = false; - - switch:SetScript("OnEnter", GPS_OnEnter) - switch:SetScript("OnLeave", GPS_OnLeave) - switch:SetScript("OnMouseDown", GPS_OnMouseDown) - switch:SetScript("OnMouseUp", GPS_OnMouseUp) - - switch:SetAlpha(0.25) - - gps.Tracker = tracker - gps.Switch = switch - - gps.Tracker:Hide() - gps:Hide() - - return gps -end - function MOD:CreateXRay(frame) local xray=CreateFrame("BUTTON","XRayFocus",frame,"SecureActionButtonTemplate") xray:EnableMouse(true) @@ -591,7 +534,7 @@ local OverrideUpdate = function(self, event, unit) end if(hp.absorbBar) then - hp.absorbBar:SetMinMaxValues(barMin, barMax * 0.5) + hp.absorbBar:SetMinMaxValues(barMin, barMax) hp.absorbBar:SetValue(totalAbsorb) hp.absorbBar:SetAllPoints(hbar) hp.absorbBar:SetReverseFill(not reversed) diff --git a/Interface/AddOns/SVUI/packages/unit/frames.lua b/Interface/AddOns/SVUI/packages/unit/frames.lua index 705da63..68c1d42 100644 --- a/Interface/AddOns/SVUI/packages/unit/frames.lua +++ b/Interface/AddOns/SVUI/packages/unit/frames.lua @@ -391,12 +391,6 @@ local UpdateTargetFrame = function(self) end end - do - local gps = self.GPS; - if not self:IsElementEnabled("GPS") then - self:EnableElement("GPS") - end - end self:UpdateAllElements() end UPDATERS["target"] = UpdateTargetFrame @@ -1355,6 +1349,7 @@ CONSTRUCTORS["raid10"] = function(self, unit) self.Buffs = MOD:CreateBuffs(self, key) self.Debuffs = MOD:CreateDebuffs(self, key) self.AuraWatch = MOD:CreateAuraWatch(self, key) + self.GPS = MOD:CreateGPS(self, true) return SetRaidFrame(self) end @@ -1369,6 +1364,7 @@ CONSTRUCTORS["raid25"] = function(self, unit) self.Buffs = MOD:CreateBuffs(self, key) self.Debuffs = MOD:CreateDebuffs(self, key) self.AuraWatch = MOD:CreateAuraWatch(self, key) + self.GPS = MOD:CreateGPS(self, true) return SetRaidFrame(self) end @@ -1383,6 +1379,7 @@ CONSTRUCTORS["raid40"] = function(self, unit) self.Buffs = MOD:CreateBuffs(self, key) self.Debuffs = MOD:CreateDebuffs(self, key) self.AuraWatch = MOD:CreateAuraWatch(self, key) + self.GPS = MOD:CreateGPS(self, true) return SetRaidFrame(self) end --[[ @@ -1607,6 +1604,7 @@ CONSTRUCTORS["party"] = function(self, unit) self.RaidIcon = MOD:CreateRaidIcon(self) self.ReadyCheck = MOD:CreateReadyCheckIcon(self) self.HealPrediction = MOD:CreateHealPrediction(self) + self.GPS = MOD:CreateGPS(self, true) local shadow = CreateFrame("Frame", nil, self) shadow:SetFrameLevel(1) diff --git a/Interface/AddOns/SVUI/system/installer.lua b/Interface/AddOns/SVUI/system/installer.lua index 8cc9918..3122f2d 100644 --- a/Interface/AddOns/SVUI/system/installer.lua +++ b/Interface/AddOns/SVUI/system/installer.lua @@ -261,6 +261,7 @@ local function initChat(mungs) ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_XP_GAIN") ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_HONOR_GAIN") ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_GUILD_XP_GAIN") + ChatFrame_RemoveAllMessageGroups(ChatFrame3) ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_FACTION_CHANGE") ChatFrame_AddMessageGroup(ChatFrame3, "SKILL") @@ -269,7 +270,9 @@ local function initChat(mungs) ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_XP_GAIN") ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_HONOR_GAIN") ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_GUILD_XP_GAIN") + ChatFrame_AddChannel(ChatFrame1, GENERAL) + ToggleChatColorNamesByClassGroup(true, "SAY") ToggleChatColorNamesByClassGroup(true, "EMOTE") ToggleChatColorNamesByClassGroup(true, "YELL") @@ -298,9 +301,11 @@ local function initChat(mungs) ToggleChatColorNamesByClassGroup(true, "CHANNEL9") ToggleChatColorNamesByClassGroup(true, "CHANNEL10") ToggleChatColorNamesByClassGroup(true, "CHANNEL11") + ChangeChatColor("CHANNEL1", 195 / 255, 230 / 255, 232 / 255) ChangeChatColor("CHANNEL2", 232 / 255, 158 / 255, 121 / 255) ChangeChatColor("CHANNEL3", 232 / 255, 228 / 255, 121 / 255) + if not mungs then if SuperVillain.Chat then SuperVillain.Chat:ReLoad(true) diff --git a/Interface/AddOns/SVUI/system/system.lua b/Interface/AddOns/SVUI/system/system.lua index b046d07..bb98d27 100644 --- a/Interface/AddOns/SVUI/system/system.lua +++ b/Interface/AddOns/SVUI/system/system.lua @@ -746,7 +746,6 @@ function SuperVillain:Load() self:UIScale(); self:RefreshSystemFonts(); self:LoadSystemAlerts(); - self.Registry:PreLoadPackages(); self.UIParent:RegisterEvent('PLAYER_REGEN_DISABLED'); self.AddonLoaded = true diff --git a/Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua b/Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua index a808366..094a800 100644 --- a/Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua +++ b/Interface/AddOns/SVUI_ArtOfWar/SVUI_ArtOfWar.lua @@ -259,6 +259,7 @@ function PLUGIN:ResetLogs() self.SummaryWindow:Clear(); self.LogWindow:Clear(); self.TitleWindow:AddMessage(("Scanning %s"):format(ACTIVE_ZONE), 1, 1, 0); + SVUI_AoWLogsClear:Show() local stored = SVAOW_Cache; local amount = 0 for _,data in pairs(stored) do @@ -270,6 +271,47 @@ function PLUGIN:ResetLogs() collectgarbage("collect") end +function PLUGIN:SwitchToLogs() + if(not AoWLogs:IsShown()) then AoWLogs:Show() end + self.TitleWindow:Clear(); + self.SummaryWindow:Clear(); + self.LogWindow:Clear(); + self.TitleWindow:AddMessage(("Scanning %s"):format(ACTIVE_ZONE), 1, 1, 0); + SVUI_AoWLogsClear:Show() + local stored = SVAOW_Cache; + local amount = 0 + for _,data in pairs(stored) do + if type(data) == "table" and data.name and data.class then + amount = amount + 1; + end + end + self.SummaryWindow:AddMessage(("You Have |cffff5500%s|r Mortal Enemies"):format(amount), 0.8, 0.8, 0.8); + for _,data in pairs(EnemyCache) do + if type(data) == "table" and data.name and data.class and data.race then + local hex = ("%s - %s %s"):format(data.name, data.race, data.class) + self.LogWindow:AddMessage(hex, data.colors.r, data.colors.g, data.colors.b); + end + end +end + +function PLUGIN:SwitchToBG() + if(self.InPVP) then + if(AoWLogs:IsShown()) then AoWLogs:Hide() end + else + if(not AoWLogs:IsShown()) then AoWLogs:Show() end + self.TitleWindow:Clear(); + self.SummaryWindow:Clear(); + self.LogWindow:Clear(); + self.TitleWindow:AddMessage("Scanning Paused", 1, 0.1, 0); + self.SummaryWindow:AddMessage(ACTIVE_ZONE, 1, 0.75, 0); + SVUI_AoWLogsClear:Hide() + self.LogWindow:AddMessage(" ", 1, 1, 1); + self.LogWindow:AddMessage(" ", 1, 1, 1); + self.LogWindow:AddMessage("The Enenmy Scanner Will Resume", 0.8, 0.8, 0.8); + self.LogWindow:AddMessage("When You Leave This BattleGround", 0.8, 0.8, 0.8); + end +end + function PLUGIN:ScannerLog(enemy) if(not enemy.name or not enemy.race or not enemy.class) then return end local hex = ("%s - %s %s"):format(enemy.name, enemy.race, enemy.class) @@ -307,7 +349,6 @@ function PLUGIN:UpdateCommunicator() self.DockButton:SaveColors("yellow", "yellow", true) self.DockButton.icon:SetTexture(ICON_FILE) self.DockButton.Scanner:Hide() - AoWLogs:Hide() self.Scanning = false end end @@ -327,8 +368,9 @@ function PLUGIN:UpdateCommunicator() self.DockButton:SaveColors("special", "icon", false) self.DockButton.icon:SetTexture(0,0,0,0) self.DockButton.Scanner:Show() - AoWLogs:Show() self.Scanning = true + + self:SwitchToLogs() end end @@ -354,8 +396,12 @@ function PLUGIN:UpdateZoneStatus() PLUGIN.Scanning = false elseif (not zonePvP or (zonePvP == "friendly") or (not UnitIsPVP("player"))) then PLUGIN.Scanning = false - elseif(instanceType == "pvp" and not PLUGIN.InPVP and PLUGIN.Scanning == true) then - PLUGIN:UpdateCommunicator() + elseif(instanceType == "pvp") then + PLUGIN:SwitchToBG() + PLUGIN.Scanning = false + if(not PLUGIN.InPVP) then + PLUGIN:UpdateCommunicator() + end end end end @@ -458,18 +504,29 @@ function PLUGIN:TheyGotMe() end local Registry_OnEvent = function(self, event, ...) - if(event == "PLAYER_TARGET_CHANGED") then - PLUGIN:TargetChanged() + if(event == "PLAYER_REGEN_ENABLED") then + PLUGIN.HitBy = false; elseif(event == "COMBAT_LOG_EVENT_UNFILTERED") then PLUGIN:CombatLogScanner(...) - elseif(event == "PLAYER_ENTERING_WORLD" or event == "UPDATE_BATTLEFIELD_SCORE") then - PLUGIN:UpdateCommunicator() - elseif(event == "PLAYER_DEAD") then - PLUGIN:TheyGotMe() - elseif(event == "PLAYER_REGEN_ENABLED") then - PLUGIN.HitBy = false; else - PLUGIN:UpdateZoneStatus() + local inInstance, instanceType = IsInInstance() + if(instanceType == "pvp") then + PLUGIN.Scanning = false + end + + if(event == "PLAYER_ENTERING_WORLD" or event == "UPDATE_BATTLEFIELD_SCORE") then + PLUGIN:UpdateCommunicator() + elseif(event == "PLAYER_TARGET_CHANGED") then + if(instanceType ~= "pvp") then + PLUGIN:TargetChanged() + end + elseif(event == "PLAYER_DEAD") then + if(instanceType ~= "pvp") then + PLUGIN:TheyGotMe() + end + else + PLUGIN:UpdateZoneStatus() + end end end @@ -527,7 +584,7 @@ local function MakeLogWindow() title.divider:SetPoint("BOTTOMRIGHT") title.divider:SetHeight(1) - local clearcount = CreateFrame("Button", nil, AoWLogs) + local clearcount = CreateFrame("Button", "SVUI_AoWLogsClear", AoWLogs) clearcount:SetPoint("TOPLEFT", title, "BOTTOMLEFT",0,0) clearcount:SetPoint("BOTTOMRIGHT", title, "BOTTOMRIGHT",0,-20) clearcount:SetButtonTemplate(true) @@ -535,11 +592,12 @@ local function MakeLogWindow() clearcount:SetScript("OnLeave", LogClear_OnLeave) clearcount:SetScript("OnClick", LogClear_OnClick) - local summary = CreateFrame("ScrollingMessageFrame", nil, clearcount) + local summary = CreateFrame("ScrollingMessageFrame", nil, AoWLogs) summary:SetSpacing(4) summary:SetClampedToScreen(false) summary:SetFrameStrata("MEDIUM") - summary:SetAllPoints(clearcount) + summary:SetPoint("TOPLEFT", title, "BOTTOMLEFT",0,0) + summary:SetPoint("BOTTOMRIGHT", title, "BOTTOMRIGHT",0,-20) summary:SetFontTemplate(SuperVillain.Media.font.system, 16, "OUTLINE", "CENTER", "MIDDLE") summary:SetMaxLines(1) summary:EnableMouse(false) diff --git a/Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua b/Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua index e26a53f..d9fda7e 100644 --- a/Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua +++ b/Interface/AddOns/SVUI_ConfigOMatic/modules/dock.lua @@ -129,7 +129,7 @@ SuperVillain.Options.args.SVDock.args["leftDockGroup"] = { max = 1200, step = 1, width = "full", - get = function()return SuperVillain.db.SVDock.dockStatWidth;end, + get = function()return SuperVillain.db.SVDock.dockStatWidth end, set = function(key,value) MOD:ChangeDBVar(value,key[#key]); MOD:UpdateSuperDock(true)