Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Added manual fix (thx to ThreeNill) to get shaman blue again
- RAID_CLASS_COLORS = {
- ["HUNTER"] = { r = 0.67, g = 0.83, b = 0.45, colorStr = "ffabd473" },
- ["WARLOCK"] = { r = 0.58, g = 0.51, b = 0.79, colorStr = "ff9482c9" },
- ["PRIEST"] = { r = 1.0, g = 1.0, b = 1.0, colorStr = "ffffffff" },
- ["PALADIN"] = { r = 0.96, g = 0.55, b = 0.73, colorStr = "fff58cba" },
- ["MAGE"] = { r = 0.41, g = 0.8, b = 0.94, colorStr = "ff69ccf0" },
- ["ROGUE"] = { r = 1.0, g = 0.96, b = 0.41, colorStr = "fffff569" },
- ["DRUID"] = { r = 1.0, g = 0.49, b = 0.04, colorStr = "ffff7d0a" },
- ["SHAMAN"] = { r = 0.0, g = 0.44, b = 0.87, colorStr = "ff0070de" },
- ["WARRIOR"] = { r = 0.78, g = 0.61, b = 0.43, colorStr = "ffc79c6e" },
- };
- -- Colour tables now taken from WoW values (Since 1.6.4) - Well, we want to be ready when there's Paladin and Shaman in same raid
- -- and we can leave the colour choice up to Blizzard and it'll just all work.
- -- We craeted our string based colour table from Blizzard's raid colour table in
- local function MashXX(class)
- local c = RAID_CLASS_COLORS[class]
- XPerlColourTable[class] = string.format("|c00%02X%02X%02X", 255 * c.r, 255 * c.g, 255 * c.b)
- end
- XPerlColourTable = {}
- MashXX("HUNTER")
- MashXX("WARLOCK")
- MashXX("PRIEST")
- MashXX("PALADIN")
- MashXX("MAGE")
- MashXX("ROGUE")
- MashXX("DRUID")
- MashXX("SHAMAN")
- MashXX("WARRIOR")
- -- XPerl_GetClassColour
- function XPerl_GetClassColour(class)
- if (class) then
- local color = RAID_CLASS_COLORS[class]; -- Now using the WoW class color table
- if (color) then
- return color
- end
- end
- return {r = 0.5, g = 0.5, b = 1}
- end
- -- OtherClickHandlers
- local function OtherClickHandlers(button, unitid)
- if (XPerlConfig.CastPartyRaidOnly == 0 or string.sub(unitid, 1, 4) == "raid") then
- if (CastParty_OnClickByUnit and CastPartyConfig) then -- Cast Party
- local function CastParty_BuildActionKey(button)
- local action_key = ""
- if IsAltKeyDown() then
- action_key = action_key .. 'Alt'
- end
- if IsControlKeyDown() then
- action_key = action_key .. 'Ctrl'
- end
- if IsShiftKeyDown() then
- action_key = action_key .. 'Shift'
- end
- if action_key == "" then
- action_key = "None"
- end
- return action_key
- end
- local action_key = CastParty_BuildActionKey()
- local action = CastPartyConfig.key_bindings[button][action_key]
- if (action ~= "CastParty_WoWDefaultClick" and action ~= "CastParty_PartyDropDown" and action ~= CASTPARTY_KEYBINDINGS_NONE) then
- CastParty_OnClickByUnit(button, unitid)
- return true
- end
- elseif (Genesis_MouseHeal) then -- Genesis Clicks
- if (Genesis_MouseHeal(unitid, button)) then
- return true
- end
- elseif (JC_CatchKeyBinding) then -- JustClick
- if (JC_CatchKeyBinding(button, unit)) then
- return true
- end
- elseif (CH_Config and CH_Config.PCUFEnabled and CH_UnitClicked) then -- Click Heal
- local mb = CH_BuildMouseButton(button)
- actionType = CH_MouseSpells.Friend[mb]
- if (actionType ~= "MENU" and actionType ~= "TARGET" and actionType ~= "TOOLTIP") then
- CH_UnitClicked(unitid, button)
- return true
- end
- elseif (SmartHeal and SmartHeal.DefaultClick and SmartHeal.ClickHeal and SmartHeal.GetClickHealButton and SmartHeal.Loaded and SmartHeal.getConfig and SmartHeal:getConfig("enable") and SmartHeal:getConfig("enable", "clickmode")) then
- local KeyDownType = SmartHeal:GetClickHealButton() -- Smart Heal
- if(KeyDownType and KeyDownType ~= "undetermined") then
- SmartHeal:ClickHeal(KeyDownType..button, unitid)
- return true
- end
- end
- end
- end
- -- XPerl_Frame_FindID
- -- Compatibility function
- -- Same function used as Perl_Party_FindID, Perl_Party_Pet_FindID, Perl_Raid_FindID
- function XPerl_Frame_FindID(object)
- local _, _, num = strfind(object:GetName(), "(%d+)")
- return tonumber(num)
- end
- -- XPerl_OnClick_Handler
- function XPerl_OnClick_Handler(button, unitid)
- -- 1.8.3 - Moved these tests before click handlers for consistancy
- if (button == "LeftButton") then
- if (SpellIsTargeting()) then
- SpellTargetUnit(unitid)
- return true
- elseif (CursorHasItem()) then
- if (UnitIsUnit("player", unitid)) then
- AutoEquipCursorItem()
- else
- DropItemOnUnit(unitid)
- end
- return true
- end
- elseif (button == "RightButton") then
- if (SpellIsTargeting()) then
- SpellStopTargeting()
- return true
- end
- end
- if (type(Perl_Custom_ClickFunction) == "function") then
- if (Perl_Custom_ClickFunction(button, unitid)) then
- -- Perl_Custom_ClickFunction should return true if handled, then we do nothing more.
- -- no return and we'll continue with default X-Perl behaviour
- return true
- end
- end
- if (XPerlConfig.CastParty == 1) then
- local frame = getglobal(this:GetName().."_NameFrame")
- if (not frame or not MouseIsOver(frame)) then
- -- Name frame gives default behaviour
- if (OtherClickHandlers(button, unitid)) then
- return true
- end
- end
- end
- if (button == "LeftButton") then
- TargetUnit(unitid)
- return true
- end
- end
- ---------------------------------
- --Loading Function --
- ---------------------------------
- -- XPerl_DisallowClear
- --function XPerl_DisallowClear()
- -- return AceLibrary and AceLibrary:HasInstance("Jostle-2.0")
- --end
- -- XPerl_BlizzFramesDisable
- function XPerl_BlizzFramesDisable()
- local XPerl_DummyFrame
- local XPerl_DummyFunc
- --if (XPerl_DisallowClear()) then
- -- XPerlConfig.ClearBlizzardFrames = 0
- --end
- if (XPerlConfig.ClearBlizzardFrames == 1) then
- XPerl_DummyFrame = CreateFrame("Frame")
- XPerl_DummyFunc = function() end
- end
- if (XPerl_Player) then
- -- Blizz Player Frame Events
- PlayerFrame:UnregisterAllEvents()
- PlayerFrameHealthBar:UnregisterAllEvents()
- PlayerFrameManaBar:UnregisterAllEvents()
- PlayerFrame:Hide()
- -- Make it so it won't be visible, even if shown by another mod
- PlayerFrame:ClearAllPoints()
- PlayerFrame:SetPoint("BOTTOMLEFT", UIParent, "TOPLEFT", 0, 50)
- if (XPerlConfig.ClearBlizzardFrames == 1) then
- PlayerFrame = XPerl_DummyFrame
- PlayerFrame_OnLoad = nil
- PlayerFrame_Update = nil
- PlayerFrame_UpdatePartyLeader = nil
- PlayerFrame_UpdatePvPStatus = nil
- PlayerFrame_OnEvent = nil
- PlayerFrame_OnUpdate = nil
- PlayerFrame_OnClick = nil
- PlayerFrame_OnReceiveDrag = nil
- PlayerFrame_UpdateStatus = nil
- PlayerFrame_UpdateGroupIndicator = nil
- PlayerFrameDropDown_OnLoad = nil
- PlayerFrame_UpdatePlaytime = nil
- end
- end
- if (XPerl_Player_Pet) then
- -- Blizz Pet Frame Events
- PetFrame:UnregisterAllEvents()
- PetFrame:Hide()
- PetFrame:ClearAllPoints()
- PetFrame:SetPoint("BOTTOMLEFT", UIParent, "TOPLEFT", 0, 50)
- if (XPerlConfig.ClearBlizzardFrames == 1) then
- PetFrame = XPerl_DummyFrame
- PetFrame_OnLoad = nil
- PetFrame_Update = nil
- PetFrame_OnEvent = nil
- PetFrame_OnUpdate = nil
- PetFrame_OnClick = nil
- PetFrame_SetHappiness = nil
- PetFrameDropDown_OnLoad = nil
- end
- end
- if (XPerl_Target) then
- -- Blizz Target Frame Events
- TargetFrame:UnregisterAllEvents()
- TargetFrameHealthBar:UnregisterAllEvents()
- TargetFrameManaBar:UnregisterAllEvents()
- TargetFrame:Hide()
- TargetofTargetFrame:UnregisterAllEvents()
- TargetofTargetFrame:Hide()
- TargetFrame:ClearAllPoints()
- TargetFrame:SetPoint("BOTTOMLEFT", UIParent, "TOPLEFT", 0, 50)
- TargetofTargetFrame:ClearAllPoints()
- TargetofTargetFrame:SetPoint("BOTTOMLEFT", UIParent, "TOPLEFT", 0, 50)
- if (XPerlConfig.ClearBlizzardFrames == 1) then
- TargetFrame = XPerl_DummyFrame
- TargetofTargetFrame = XPerl_DummyFrame
- TargetFrame_OnLoad = nil
- TargetFrame_Update = nil
- TargetFrame_OnEvent = nil
- TargetFrame_OnShow = nil
- TargetFrame_OnHide = nil
- TargetFrame_CheckLevel = nil
- TargetFrame_CheckFaction = nil
- TargetFrame_CheckClassification = nil
- TargetFrame_CheckDead = nil
- TargetFrame_CheckDishonorableKill = nil
- TargetFrame_OnClick = nil
- TargetFrame_OnUpdate = nil
- TargetDebuffButton_Update = nil
- TargetFrame_HealthUpdate = nil
- TargetHealthCheck = nil
- TargetFrameDropDown_OnLoad = nil
- TargetFrame_UpdateRaidTargetIcon = nil
- TargetofTarget_OnUpdate = nil
- TargetofTarget_Update = nil
- TargetofTarget_OnClick = nil
- TargetofTarget_CheckDead = nil
- TargetofTargetHealthCheck = nil
- end
- end
- if (XPerl_party1) then
- -- Blizz Party Events
- ShowPartyFrame = function() end
- HidePartyFrame = ShowPartyFrame
- for num = 1, 4 do
- local f = getglobal("PartyMemberFrame"..num)
- f:Hide()
- f:UnregisterAllEvents()
- getglobal("PartyMemberFrame"..num.."HealthBar"):UnregisterAllEvents()
- getglobal("PartyMemberFrame"..num.."ManaBar"):UnregisterAllEvents()
- f:ClearAllPoints()
- f:SetPoint("BOTTOMLEFT", UIParent, "TOPLEFT", 0, 50)
- end
- if (XPerlConfig.ClearBlizzardFrames == 1) then
- for num = 1, 4 do
- setglobal("PartyMemberFrame"..num, XPerl_DummyFrame)
- end
- PartyMemberFrame_OnLoad = nil
- PartyMemberFrame_UpdateMember = nil
- PartyMemberFrame_UpdatePet = XPerl_DummyFunc -- Called when you press OK on interface options
- PartyMemberFrame_UpdateMemberHealth = nil
- PartyMemberFrame_UpdateLeader = nil
- PartyMemberFrame_UpdatePvPStatus = nil
- PartyMemberFrame_OnEvent = nil
- PartyMemberFrame_OnUpdate = nil
- PartyMemberFrame_OnClick = nil
- PartyMemberPetFrame_OnClick = nil
- PartyMemberFrame_RefreshPetBuffs = nil
- PartyMemberBuffTooltip_Update = nil
- PartyMemberHealthCheck = nil
- PartyFrameDropDown_OnLoad = nil
- UpdatePartyMemberBackground = nil
- PartyMemberBackground_ToggleOpacity = nil
- PartyMemberBackground_SetOpacity = nil
- PartyMemberBackground_SaveOpacity = nil
- end
- end
- XPerl_BlizzFramesDisable = nil
- end
- ---------------------------------
- --Smooth Health Bar Color --
- ---------------------------------
- function XPerl_SetSmoothBarColor (bar, percentage)
- if (bar) then
- --local barmin, barmax = bar:GetMinMaxValues()
- --if (barmin == barmax) then
- -- return false
- --end
- --local percentage = bar:GetValue()/(barmax-barmin)
- local r, g, b
- if (XPerlConfig.ClassicHealthBar == 1) then
- if (percentage < 0.5) then
- r = 1
- g = 2*percentage
- b = 0
- else
- g = 1
- r = 2*(1 - percentage)
- b = 0
- end
- else
- r = XPerlConfig.ColourHealthEmpty.r + ((XPerlConfig.ColourHealthFull.r - XPerlConfig.ColourHealthEmpty.r) * percentage)
- g = XPerlConfig.ColourHealthEmpty.g + ((XPerlConfig.ColourHealthFull.g - XPerlConfig.ColourHealthEmpty.g) * percentage)
- b = XPerlConfig.ColourHealthEmpty.b + ((XPerlConfig.ColourHealthFull.b - XPerlConfig.ColourHealthEmpty.b) * percentage)
- end
- if (r >= 0 and g >= 0 and b >= 0 and r <= 1 and g <= 1 and b <= 1) then
- bar:SetStatusBarColor(r, g, b)
- local backBar = getglobal(bar:GetName().."BG")
- if (backBar) then
- backBar:SetVertexColor(r, g, b, 0.25)
- end
- end
- end
- end
- -- XPerl_SetHealthBar
- function XPerl_SetHealthBar(bar, hp, max)
- bar:SetMinMaxValues(0, max)
- if (XPerlConfig.InverseBars == 1) then
- bar:SetValue(max - hp)
- else
- bar:SetValue(hp)
- end
- local percent = hp / max
- local healthPct = string.format("%3.0f", percent * 100)
- XPerl_SetSmoothBarColor(bar, percent)
- local barPct = getglobal(bar:GetName().."Percent")
- if (barPct) then
- barPct:SetText(healthPct.."%")
- end
- local barText = getglobal(bar:GetName().."Text")
- if (barText) then
- if (XPerlConfig.HealerMode == 1) then
- if (XPerlConfig.HealerModeType == 1) then
- barText:SetText(string.format("%d/%d", hp - max, max))
- else
- barText:SetText(hp - max)
- end
- else
- barText:SetText(hp.."/"..max)
- end
- end
- end
- ---------------------------------
- --Class Icon Location Functions--
- ---------------------------------
- function XPerl_ClassPos (class)
- if(class=="WARRIOR") then return 0, 0.25, 0, 0.25; end
- if(class=="MAGE") then return 0.25, 0.5, 0, 0.25; end
- if(class=="ROGUE") then return 0.5, 0.75, 0, 0.25; end
- if(class=="DRUID") then return 0.75, 1, 0, 0.25; end
- if(class=="HUNTER") then return 0, 0.25, 0.25, 0.5; end
- if(class=="SHAMAN") then return 0.25, 0.5, 0.25, 0.5; end
- if(class=="PRIEST") then return 0.5, 0.75, 0.25, 0.5; end
- if(class=="WARLOCK") then return 0.75, 1, 0.25, 0.5; end
- if(class=="PALADIN") then return 0, 0.25, 0.5, 0.75; end
- return 0.25, 0.5, 0.5, 0.75 -- Returns empty next one, so blank
- end
- -- XPerl_Toggle
- function XPerl_Toggle()
- if (XPerlLocked == 1) then
- XPerl_UnlockFrames()
- else
- XPerl_LockFrames()
- end
- end
- -- XPerl_UnlockFrames
- function XPerl_UnlockFrames()
- EnableAddOn("XPerl_Options")
- if (not IsAddOnLoaded("XPerl_Options")) then
- UIParentLoadAddOn("XPerl_Options")
- end
- XPerlLocked = 0
- if (XPerl_RaidShowAllTitles) then
- XPerl_RaidShowAllTitles()
- end
- if (XPerl_Options) then
- XPerl_Options:Show()
- XPerl_Options:SetAlpha(0)
- XPerl_Options.Fading = "in"
- end
- end
- -- XPerl_LockFrames
- function XPerl_LockFrames()
- XPerlLocked = 1
- if (XPerl_Options) then
- XPerl_Options.Fading = "out"
- end
- if (XPerl_RaidTitles) then
- XPerl_RaidTitles()
- end
- end
- -- Minimap Icon
- function XPerl_MinimapButton_OnClick()
- XPerl_Toggle()
- end
- -- XPerl_MinimapButton_Init
- function XPerl_MinimapButton_Init()
- if(XPerlConfig.MinimapButtonShown == 1) then
- XPerl_MinimapButton_Frame:Show()
- else
- XPerl_MinimapButton_Frame:Hide()
- end
- end
- -- XPerl_MinimapButton_UpdatePosition
- function XPerl_MinimapButton_UpdatePosition()
- XPerl_MinimapButton_Frame:SetPoint(
- "TOPLEFT",
- "Minimap",
- "TOPLEFT",
- 54 - (78 * cos(XPerlConfig.MinimapButtonPosition)),
- (78 * sin(XPerlConfig.MinimapButtonPosition)) - 55
- )
- XPerl_MinimapButton_Init()
- end
- -- XPerl_MinimapButton_Dragging
- function XPerl_MinimapButton_Dragging()
- local xpos,ypos = GetCursorPosition()
- local xmin,ymin = Minimap:GetLeft(), Minimap:GetBottom()
- xpos = xmin-xpos/UIParent:GetScale()+70
- ypos = ypos/UIParent:GetScale()-ymin-70
- XPerl_MinimapButton_SetPosition(math.deg(math.atan2(ypos,xpos)))
- end
- -- XPerl_MinimapButton_SetPosition
- function XPerl_MinimapButton_SetPosition(v)
- if (v < 0) then
- v = v + 360
- end
- XPerlConfig.MinimapButtonPosition = v
- XPerl_MinimapButton_UpdatePosition()
- end
- -- XPerl_MinimapButton_OnEnter
- function XPerl_MinimapButton_OnEnter()
- GameTooltip:SetOwner(this, "ANCHOR_LEFT")
- GameTooltip:SetText(XPerl_Version, 1, 1, 1)
- GameTooltip:AddLine(XPERL_MINIMAP_HELP1)
- GameTooltip:AddLine(XPERL_MINIMAP_HELP2)
- GameTooltip:Show()
- end
- -- XPerl_SetManaBarType
- local ManaColours = {"ColourMana", "ColourRage", "ColourFocus", "ColourEnergy"}
- function XPerl_SetManaBarType(argUnit, argFrame, argFrameBG)
- local power = UnitPowerType(argUnit)
- if (power) then
- local colour = XPerlConfig[ManaColours[power + 1]]
- argFrame:SetStatusBarColor(colour.r, colour.g, colour.b, 1)
- argFrameBG:SetVertexColor(colour.r, colour.g, colour.b, 0.25)
- end
- end
- -- XPerl_PlayerTip
- function XPerl_PlayerTip(unitid)
- if (SpellIsTargeting()) then
- if (SpellCanTargetUnit(unitid)) then
- SetCursor("CAST_CURSOR")
- else
- SetCursor("CAST_ERROR_CURSOR")
- end
- end
- GameTooltip_SetDefaultAnchor(GameTooltip, this)
- GameTooltip:SetUnit(unitid)
- if (XPerl_RaidTipExtra) then
- XPerl_RaidTipExtra(unitid)
- end
- if (XPerlConfig.XPerlTooltipInfo == 1 and XPerl_GetUsage) then
- local xpUsage = XPerl_GetUsage(UnitName(unitid))
- if (xpUsage) then
- local xp, any = "|cFFD00000X-Perl|r "
- if (xpUsage.version) then
- xp = xp..xpUsage.version
- any = true
- end
- if (xpUsage.mods and IsShiftKeyDown()) then
- local modList = XPerl_DecodeModuleList(xpUsage.mods)
- if (modList) then
- xp = xp.." : |c00909090"..modList
- end
- end
- if (any) then
- GameTooltip:AddLine(xp, 1, 1, 1, 1)
- GameTooltip:Show()
- end
- end
- end
- end
- -- XPerl_PlayerTipHide
- function XPerl_PlayerTipHide()
- if (XPerlConfig.FadingTooltip == 1) then
- GameTooltip:FadeOut()
- else
- GameTooltip:Hide()
- end
- end
- -- XPerl_ToolTip_AddBuffDuration
- function XPerl_ToolTip_AddBuffDuration(partyid, x)
- if (XPerl_Raid_AddBuffDuration) then
- XPerl_Raid_AddBuffDuration(partyid, x)
- end
- end
- -- XPerl_ColourFriendlyUnit
- function XPerl_ColourFriendlyUnit(frame, partyid)
- local color
- if (UnitCanAttack("player", partyid) and UnitIsEnemy("player", partyid)) then -- For dueling
- color = XPerlConfig.ColourReactionEnemy
- else
- if (XPerlConfig.ClassColouredNames == 1) then
- local _, engClass = UnitClass(partyid)
- color = XPerl_GetClassColour(engClass)
- else
- if (UnitIsPVP(partyid)) then
- color = XPerlConfig.ColourReactionFriend
- else
- color = XPerlConfig.ColourReactionNone
- end
- end
- end
- frame:SetTextColor(color.r, color.g, color.b)
- end
- -- XPerl_ReactionColour
- function XPerl_ReactionColour(argUnit)
- if (UnitPlayerControlled(argUnit) or not UnitIsVisible(argUnit)) then
- if (UnitFactionGroup("player") == UnitFactionGroup(argUnit)) then
- if (UnitIsEnemy("player", argUnit)) then
- -- Dueling
- return XPerlConfig.ColourReactionEnemy
- elseif (UnitIsPVP(argUnit)) then
- return XPerlConfig.ColourReactionFriend
- end
- else
- if (UnitIsPVP(argUnit)) then
- if (UnitIsPVP("player")) then
- return XPerlConfig.ColourReactionEnemy
- else
- return XPerlConfig.ColourReactionNeutral
- end
- end
- end
- else
- if (UnitIsTapped(argUnit) and not UnitIsTappedByPlayer(argUnit)) then
- color = XPerlConfig.ColourTapped
- else
- local reaction = UnitReaction(argUnit, "player")
- if (reaction) then
- if (reaction >= 5) then
- return XPerlConfig.ColourReactionFriend
- elseif (reaction <= 2) then
- return XPerlConfig.ColourReactionEnemy
- elseif (reaction == 3) then
- return XPerlConfig.ColourReactionUnfriendly
- else
- return XPerlConfig.ColourReactionNeutral
- end
- else
- if (UnitFactionGroup("player") == UnitFactionGroup(argUnit)) then
- return XPerlConfig.ColourReactionFriend
- elseif (UnitIsEnemy("player", argUnit)) then
- return XPerlConfig.ColourReactionEnemy
- else
- return XPerlConfig.ColourReactionNeutral
- end
- end
- end
- end
- return XPerlConfig.ColourReactionNone
- end
- -- XPerl_SetUnitNameColor
- function XPerl_SetUnitNameColor(argUnit,argFrame)
- if (UnitPlayerControlled(argUnit) or not UnitIsVisible(argUnit)) then
- -- 1.8.3 - Changed to override pvp name colours
- if (XPerlConfig.ClassColouredNames == 1) then
- local _, class = UnitClass(argUnit)
- color = XPerl_GetClassColour(class)
- else
- color = XPerl_ReactionColour(argUnit)
- end
- else
- if (UnitIsTapped(argUnit) and not UnitIsTappedByPlayer(argUnit)) then
- color = XPerlConfig.ColourTapped
- else
- color = XPerl_ReactionColour(argUnit)
- end
- end
- argFrame:SetTextColor(color.r, color.g, color.b, XPerlConfig.TextTransparency)
- end
- local BasicEvents = {"UNIT_RAGE", "UNIT_MAXRAGE", "UNIT_ENERGY", "UNIT_MAXENERGY",
- "UNIT_MANA", "UNIT_MAXMANA", "UNIT_HEALTH", "UNIT_MAXHEALTH",
- "UNIT_LEVEL", "UNIT_COMBAT", "UNIT_DISPLAYPOWER", "UNIT_NAME_UPDATE"}
- -- XPerl_RegisterBasics
- function XPerl_RegisterBasics(argFrame)
- if (argFrame == nil) then
- argFrame = this
- end
- for i,event in pairs(BasicEvents) do
- argFrame:RegisterEvent(event)
- end
- end
- -- XPerl_UnregisterBasics
- function XPerl_UnregisterBasics(argFrame)
- if (argFrame == nil) then
- argFrame = this
- end
- for i,event in pairs(BasicEvents) do
- argFrame:UnregisterEvent(event)
- end
- end
- -- PerlSetPortrait3D
- function XPerlSetPortrait3D(argFrame, argUnit)
- --[[ if (argUnit == "player") then
- -- If it's ourself, we can check if we're going to 'look' different, and update anyway
- -- Many updates requests are false though, and no real change is made
- local head, shoulders, chest
- head = GetInventoryItemTexture("player", 1)
- shoulders = GetInventoryItemTexture("player", 3)
- chest = GetInventoryItemTexture("player", 5)
- if (argFrame.lastHead ~= head or argFrame.lastShoulders ~= shoulders or argFrame.lastChest ~= chest) then
- argFrame.last3DTime = nil
- end
- argFrame.lastHead = head
- argFrame.lastShoulders = shoulders
- argFrame.lastChest = chest
- else
- -- If someone else, check their name and update if changed
- local name = UnitName(argUnit)
- if (argFrame.lastName ~= name) then
- argFrame.last3DTime = nil
- end
- argFrame.lastName = name
- end
- if (argFrame.last3DTime) then
- -- 1.8.5 change
- -- Don't update the portrait so often, at least 15 seconds must pass before each update now
- if (argFrame.last3DTime < GetTime() + 15) then
- argFrame:SetCamera(0)
- return
- end
- end
- ]]
- argFrame:ClearModel()
- argFrame:SetUnit(argUnit)
- argFrame:SetCamera(0)
- -- argFrame.last3DTime = GetTime()
- end
- -- XPerl_CombatFlashSet
- function XPerl_CombatFlashSet (elapsed, argFrame, argNew, argGreen)
- if (XPerlConfig.PerlCombatFlash == 0) then
- argFrame.PlayerFlash = nil
- return false
- end
- if (argFrame) then
- if (argNew) then
- argFrame.PlayerFlash = 1
- argFrame.PlayerFlashGreen = argGreen
- else
- if (argFrame.PlayerFlash and elapsed) then
- argFrame.PlayerFlash = argFrame.PlayerFlash - elapsed
- if (argFrame.PlayerFlash <= 0) then
- argFrame.PlayerFlash = 0
- argFrame.PlayerFlashTime = nil
- argFrame.PlayerFlashGreen = nil
- end
- else
- return false
- end
- end
- return true
- end
- end
- -- XPerl_CombatFlashSetFrames
- function XPerl_CombatFlashSetFrames(argFrame)
- if (argFrame.PlayerFlash) then
- local baseColour
- if (argFrame.forcedColour) then
- baseColour = argFrame.forcedColour
- else
- baseColour = XPerlConfig.BorderColour
- end
- local r, g, b, a
- if (argFrame.PlayerFlash > 0) then
- local flashOffsetColour = argFrame.PlayerFlash / 2
- if (argFrame.PlayerFlashGreen) then
- r = baseColour.r - flashOffsetColour
- g = baseColour.g + flashOffsetColour
- b = baseColour.b - flashOffsetColour
- else
- r = baseColour.r + flashOffsetColour
- g = baseColour.g - flashOffsetColour
- b = baseColour.b - flashOffsetColour
- end
- if (r < 0) then r = 0; elseif (r > 1) then r = 1; end
- if (g < 0) then g = 0; elseif (g > 1) then g = 1; end
- if (b < 0) then b = 0; elseif (b > 1) then b = 1; end
- else
- r, g, b = baseColour.r, baseColour.g, baseColour.b
- end
- a = XPerlConfig.BorderColour.a
- for i, frame in pairs(argFrame.FlashFrames) do
- frame:SetBackdropBorderColor(r, g, b, a)
- end
- if (argFrame.PlayerFlash == 0) then
- argFrame.PlayerFlash = nil
- end
- end
- end
- local bgDef = {bgFile = "Interface\\Addons\\XPerl\\Images\\XPerl_FrameBack",
- edgeFile = "",
- tile = true, tileSize = 32, edgeSize = 16,
- insets = { left = 5, right = 5, top = 5, bottom = 5 }
- }
- -- XPerl_CheckDebuffs
- function XPerl_CheckDebuffs(unit, frames)
- if (XPerlConfig.HighlightDebuffs == 0) then
- return
- end
- local show
- local Curses = {}
- local debuffCount = 0
- for i = 1, MAX_TARGET_DEBUFFS do
- local debuff, debuffStack, debuffType = UnitDebuff(unit, i)
- if (not debuff) then
- break
- end
- if (debuffType) then
- Curses[debuffType] = 1
- else
- Curses["none"] = 1
- end
- debuffCount = debuffCount + 1
- end
- if (debuffCount > 0) then
- if (Curses.Magic) then
- show = "Magic"
- elseif (Curses.Curse) then
- show = "Curse"
- elseif (Curses.Disease) then
- show = "Disease"
- elseif (Curses.Poison) then
- show = "Poison"
- end
- -- We also re-set the colours here so that we highlight best colour per class
- local _, class = UnitClass("player")
- if (class == "MAGE") then
- if (Curses["Curse"]) then
- show = "Curse"
- end
- elseif (class == "DRUID") then
- if (Curses["Curse"]) then
- show = "Curse"
- elseif (Curses["Poison"]) then
- show = "Poison"
- end
- elseif (class == "PRIEST" or class == "WARLOCK") then
- if (Curses["Magic"]) then
- show = "Magic"
- end
- elseif (class == "PALADIN") then
- if (Curses["Magic"]) then
- show = "Magic"
- elseif (Curses["Poison"]) then
- show = "Poison"
- elseif (Curses["Disease"]) then
- show = "Disease"
- end
- elseif (class == "SHAMAN") then
- if (Curses["Poison"]) then
- show = "Poison"
- elseif (Curses["Disease"]) then
- show = "Disease"
- end
- end
- end
- if (frames) then
- local colour, borderColour
- if (show) then
- colour = DebuffTypeColor[show]
- colour.a = 1
- if (XPerlConfig.HighlightDebuffsBorder == 1) then
- borderColour = colour
- else
- borderColour = XPerlConfig.BorderColour
- end
- else
- colour = XPerlConfig.BackColour
- borderColour = XPerlConfig.BorderColour
- end
- for i, f in frames do
- if (f:IsShown()) then
- if (show and XPerlConfig.HighlightDebuffsBorder == 1) then
- f:GetParent().forcedColour = borderColour
- bgDef.edgeFile = "Interface\\Addons\\XPerl\\Images\\XPerl_Curse"
- f:SetBackdrop(bgDef)
- else
- f:GetParent().forcedColour = nil
- bgDef.edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border"
- f:SetBackdrop(bgDef)
- end
- f:SetBackdropColor(colour.r, colour.g, colour.b, colour.a)
- f:SetBackdropBorderColor(borderColour.r, borderColour.g, borderColour.b, borderColour.a)
- end
- end
- end
- end
- -- XPerl_SavePosition(frame)
- function XPerl_SavePosition(frame)
- if (not XPerlConfig.SavedPositions) then
- XPerlConfig.SavedPositions = {}
- end
- XPerlConfig.SavedPositions[frame:GetName()] = {top = frame:GetTop(), left = frame:GetLeft()}
- end
- -- XPerl_RestorePosition(frame)
- function XPerl_RestorePosition(frame)
- if (XPerlConfig.SavedPositions) then
- local pos = XPerlConfig.SavedPositions[frame:GetName()]
- if (pos) then
- if (pos.left or pos.right) then
- frame:ClearAllPoints()
- frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", pos.left, pos.top)
- end
- end
- end
- end
- -- XPerl_GetRaidPosition
- function XPerl_GetRaidPosition(findName)
- for i = 1,GetNumRaidMembers() do
- if (UnitName("raid"..i) == findName) then
- return i
- end
- end
- end
- -- XPerl_SetBuffSize
- function XPerl_SetBuffSize(prefix, sizeBuff, sizeDebuff)
- for i = 1,20 do
- local buff = getglobal(prefix.."BuffFrame_Buff"..i)
- if (buff) then
- buff:SetHeight(sizeBuff)
- buff:SetWidth(sizeBuff)
- end
- local buff = getglobal(prefix.."BuffFrame_DeBuff"..i)
- if (buff) then
- buff:SetHeight(sizeDebuff)
- buff:SetWidth(sizeDebuff)
- end
- end
- end
- -- true indicates the buff is valid on anyone, otherwise a class string dictates we only count it if the player with the buff matches
- local BuffExceptions = {
- --ALL = {Spell_Misc_Food = true}, -- Enable this for food
- PRIEST = {Spell_Nature_ResistNature = true, Spell_Nature_Rejuvenation = true}, -- Druid regens
- DRUID = {Spell_Holy_Renew = true}, -- Priest regens
- WARLOCK = {Spell_Shadow_SoulGem = true}, -- Soulstone Resurrection
- HUNTER = {Spell_Nature_RavenForm = "HUNTER", Ability_Mount_JungleTiger = "HUNTER", Ability_Mount_WhiteTiger = true, Ability_Mount_PinkTiger = "HUNTER", Ability_Hunter_AspectOfTheMonkey = "HUNTER", Spell_Nature_ProtectionformNature = true, Ability_Rogue_FeignDeath = "HUNTER", Ability_Hunter_RunningShot = "HUNTER", Ability_TrueShot = true, Ability_Hunter_BeastTraining = "WARRIOR"},
- ROGUE = {Ability_Stealth = "ROGUE", Spell_Shadow_ShadowWard = "ROGUE", Ability_Vanish = "ROGUE", Ability_Rogue_Sprint = "ROGUE"}
- }
- local DebuffExceptions = {
- ALL = {INV_Misc_Bandage_08 = true}, -- Recently Bandaged
- PRIEST = {Spell_Holy_AshesToAshes = true} -- Weakened Soul
- }
- -- BuffException
- --local showInfo
- local function BuffException(unit, index, flag, func, exceptions)
- local buff, count, debuffType
- if (not flag or flag == 0 or flag == "0") then
- -- Not filtered, just return it
- buff, count, debuffType = func(unit, index)
- return buff, count, debuffType, index
- end
- buff, count, debuffType = func(unit, index, 1)
- if (buff) then
- -- We need the index of the buff unfiltered later for tooltips
- for i = 1,20 do
- local buff1, count1, debuffType1 = func(unit, index)
- if (buff == buff1 and count == count1) then
- index = i
- break
- end
- end
- return buff, count, debuffType, index
- end
- -- See how many filtered buffs WoW has returned by default
- local normalBuffFilterCount = 0
- for i = 1,20 do
- buff, count, debuffType = func(unit, i, 1)
- if (not buff) then
- normalBuffFilterCount = i - 1
- break
- end
- end
- -- Nothing found by default, so look for exceptions
- local _, class = UnitClass("player")
- local _, unitClass = UnitClass(unit)
- local foundValid = 0
- for i = 1,20 do
- buff, count, debuffType = func(unit, i)
- if (not buff) then
- break
- end
- if (strsub(buff, 1, 16) == "Interface\\Icons\\") then
- local test = strsub(buff, 17)
- local good
- if (exceptions[class]) then
- good = exceptions[class][test]
- elseif (exceptions.ALL) then
- good = exceptions.ALL[test]
- end
- -- Enable this for potions
- --if (not good) then
- -- if (exceptions == BuffExceptions and strsub(test, 1, 11) == "INV_Potion_") then
- -- good = true
- -- end
- --end
- if (good and type(good) == "string" and good ~= unitClass) then
- good = nil
- end
- if (good) then
- foundValid = foundValid + 1
- if (foundValid + normalBuffFilterCount == index) then
- --if (showInfo) then
- -- ChatFrame7:AddMessage("Found extra: "..buff..", requested index == "..index..", actual buff index == "..i)
- --end
- return buff, count, debuffType, i
- end
- end
- end
- end
- end
- -- XPerl_UnitBuff
- function XPerl_UnitBuff(unit, index, flag)
- return BuffException(unit, index, flag, UnitBuff, BuffExceptions)
- end
- -- XPerl_UnitBuff
- function XPerl_UnitDebuff(unit, index, flag)
- return BuffException(unit, index, flag, UnitDebuff, DebuffExceptions)
- end
- -- XPerl_TooltipSetUnitBuff
- -- Retreives the index of the actual unfiltered buff, and uses this on unfiltered tooltip call
- function XPerl_TooltipSetUnitBuff(tooltip, unit, ind, flag)
- --showInfo = true
- local buff, count, _, index = BuffException(unit, ind, flag, UnitBuff, BuffExceptions)
- --showInfo = nil
- tooltip:SetUnitBuff(unit, index)
- end
- -- XPerl_TooltipSetUnitDebuff
- -- Retreives the index of the actual unfiltered debuff, and uses this on unfiltered tooltip call
- function XPerl_TooltipSetUnitDebuff(tooltip, unit, ind, flag)
- local buff, count, debuffType, index = BuffException(unit, ind, flag, UnitDebuff, DebuffExceptions)
- tooltip:SetUnitDebuff(unit, index)
- end
Advertisement
Add Comment
Please, Sign In to add comment