5 - International Clients & Druid shapeshifting
Hi,
I did some changes to your code (New to LUA / WoW Scripting) to enable some features on my german client. Basically, you need to change
local class = UnitClass( "player" );
to
local lclass, class = UnitClass( "player" );
because in the first form, it will return the localized class name (e.g "Druide"). The content of the variable class is then "ROGUE" or "DRUID" or "MAGE" etc. in all caps, so all the compared strings need to be changed, too.
Additionally, cat form is 3, not 2, and the bars did not update correctly on shapeshift directly from cat to bear. I tried the event "UPDATE_SHAPESHIFT_FORM", that seems to work pretty good.
I do not have a diff tool at hand, so I hope it is okay to post the whole statusbars2.lua (adapted from version 1.11):
-- Settings
StatusBars2_Settings = { };
-- Bars
local bars = {};
-- Last flash time
local lastFlashTime = 0;
-- Bar group spacing
local kGroupSpacing = 18;
-- Bar types
local kHealth = 0
local kPower = 1;
local kAura = 2;
local kAuraStack = 3;
local kCombo = 4
local kRune = 5;
local kDruidMana = 6;
-- Power types
local kMana = 0;
local kRage = 1;
local kFocus = 2;
local kEnergy = 3;
local kRunicPower = 6;
-- Druid forms
local kCasterForm = 0;
local kBearForm = 1;
local kCatForm = 3;
-- Fade durations
local kFadeInTime = 0.2;
local kFadeOutTime = 1.0;
-- Flash duration
local kFlashDuration = 0.5;
-- Max flash alpha
local kFlashAlpha = 0.8;
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_OnLoad
--
-- Description: Main frame OnLoad handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_OnLoad( self )
-- Create bars
StatusBars2_CreateBars( );
-- Register for events
self:SetScript( "OnEvent", StatusBars2_OnEvent );
self:SetScript( "OnUpdate", StatusBars2_OnUpdate );
self:RegisterEvent( "PLAYER_ENTERING_WORLD" );
self:RegisterEvent( "UNIT_DISPLAYPOWER" );
-- Print a status message
StatusBars2_Trace( 'StatusBars 2 initialized' );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_OnEvent
--
-- Description: Main frame event handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_OnEvent( self, event, ... )
-- Player entering world, initialize the addon
if( event == "PLAYER_ENTERING_WORLD" ) then
-- Load settings
StatusBars2_LoadSettings( );
-- Update bar visibility and location
StatusBars2_UpdateBars( );
-- Initialize the option panel controls
StatusBars2_Options_DoDataExchange( false );
-- Druid change form
elseif( event == "UPDATE_SHAPESHIFT_FORM" and select( 1, ... ) == "player") then
local lclass, class = UnitClass( "player" );
if (class == "DRUID") then
StatusBars2_UpdateBars( );
end
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_OnUpdate
--
-- Description: Main frame update handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_OnUpdate( self )
-- Get the current time
local time = GetTime( );
-- Get the amount of time that has elapsed since the last update
local delta = time - lastFlashTime;
-- If just starting or rolling over start a new flash
if( delta < 0 or delta > kFlashDuration ) then
delta = 0;
lastFlashTime = time;
end
-- Determine how far we are along the flash
local level = 1 - abs( delta - kFlashDuration * 0.5) / ( kFlashDuration * 0.5 );
-- Update any flashing bars
for i, bar in ipairs( bars ) do
StatusBars2_UpdateFlash( bar, level );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateBars
--
-- Description: Create all the bars
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateBars( )
-- Player bars
StatusBars2_CreateHealthBar( "StatusBars2_HealthBar", "player", "Player Health", "playerHealth" );
StatusBars2_CreatePowerBar( "StatusBars2_PowerBar", "player", nil, "Player Power", "playerPower" );
StatusBars2_CreatePowerBar( "StatusBars2_DruidManaBar", "player", kMana, "Druid Mana", "druidMana", kDruidMana );
StatusBars2_CreateAuraBar( "StatusBars2_AuraBar", "player", "Player Auras", "playerAura" );
-- Target bars
StatusBars2_CreateHealthBar( "StatusBars2_TargetHealthBar", "target", "Target Health", "targetHealth" );
StatusBars2_CreatePowerBar( "StatusBars2_TargetPowerBar", "target", nil, "Target Power", "targetPower" );
StatusBars2_CreateAuraBar( "StatusBars2_TargetAuraBar", "target", "Target Auras", "targetAura" );
-- Pet bars
StatusBars2_CreateHealthBar( "StatusBars2_PetHealthBar", "pet", "Pet Health", "petHealth" );
StatusBars2_CreatePowerBar( "StatusBars2_PetPowerBar", "pet", nil, "Pet Power", "petPower" );
StatusBars2_CreateAuraBar( "StatusBars2_PetAuraBar", "pet", "Pet Auras", "petAura" );
-- Specialty bars
StatusBars2_CreateComboBar( "StatusBars2_ComboBar", "Combo Points", "combo" );
StatusBars2_CreateRuneBar( "StatusBars2_RuneBar", "Runes", "rune" );
StatusBars2_CreateAuraStackBar( "StatusBars2_SunderBar", "Sunder Armor", "debuff", "target", 5, 1, 0.5, 0, "Sunder Armor", "sunder" );
StatusBars2_CreateAuraStackBar( "StatusBars2_DeadlyPoisonBar", "Deadly Poison", "debuff", "target", 5, 0, 1, 0, "Deadly Poison", "deadlyPoison" );
StatusBars2_CreateAuraStackBar( "StatusBars2_MaelstromWeaponBar", "Maelstrom Weapon", "buff", "player", 5, 1, 0, 1, "Maelstrom Weapon", "maelstromWeapon" );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_UpdateBars
--
-- Description: Update bar visibility and location
--
-------------------------------------------------------------------------------
--
function StatusBars2_UpdateBars( )
-- Hide the bars
for i, bar in ipairs( bars ) do
StatusBars2_DisableBar( bar );
end
-- Get the current class and form
local lclass, class = UnitClass( "player" );
local form = GetShapeshiftForm( true );
-- Player health
StatusBars2_EnableBar( StatusBars2_HealthBar, 1, 1 );
-- Player power
if( class ~= "DRUID" or form == kBearForm or form == kCatForm ) then
StatusBars2_EnableBar( StatusBars2_PowerBar, 1, 2 );
end
-- Druid mana
if( class == "DRUID" and ( StatusBars2_Settings.bars.druidMana.showInAllForms == true or ( form ~= kBearForm and form ~= kCatForm ) ) ) then
StatusBars2_EnableBar( StatusBars2_DruidManaBar, 1, 3 );
end
-- Combo points
if( class == "ROGUE" or ( class == "DRUID" and form == kCatForm ) ) then
StatusBars2_EnableBar( StatusBars2_ComboBar, 1, 4 );
end
-- Runes
if( class == "DEATH KNIGHT" ) then
StatusBars2_EnableBar( StatusBars2_RuneBar, 1, 5 );
end
-- Maelstrom Weapon
if( class == "SHAMAN" ) then
StatusBars2_EnableBar( StatusBars2_MaelstromWeaponBar, 1, 6 );
end
-- Sunder armor
StatusBars2_EnableBar( StatusBars2_SunderBar, 1, 7 );
-- Deadly poison
StatusBars2_EnableBar( StatusBars2_DeadlyPoisonBar, 1, 8 );
-- Player araus
if( StatusBars2_Settings.bars.playerAura.showBuffs == true or StatusBars2_Settings.bars.playerAura.showDebuffs == true ) then
StatusBars2_EnableBar( StatusBars2_AuraBar, 1, 9 );
end
-- Target health
StatusBars2_EnableBar( StatusBars2_TargetHealthBar, 2, 1 );
-- Target power
StatusBars2_EnableBar( StatusBars2_TargetPowerBar, 2, 2, true );
-- Target auras
if( StatusBars2_Settings.bars.targetAura.showBuffs == true or StatusBars2_Settings.bars.targetAura.showDebuffs == true ) then
StatusBars2_EnableBar( StatusBars2_TargetAuraBar, 2, 3 );
end
-- Pet health
StatusBars2_EnableBar( StatusBars2_PetHealthBar, 3, 1 );
-- Pet power
StatusBars2_EnableBar( StatusBars2_PetPowerBar, 3, 2 );
-- Pet araus
if( StatusBars2_Settings.bars.petAura.showBuffs == true or StatusBars2_Settings.bars.petAura.showDebuffs == true ) then
StatusBars2_EnableBar( StatusBars2_PetAuraBar, 3, 3 );
end
-- If not locked drag on a left click
if( StatusBars2_Settings.locked ~= true ) then
StatusBars2:EnableMouse( true );
StatusBars2:RegisterForDrag( "LeftButton" );
else
StatusBars2:EnableMouse( false );
StatusBars2:RegisterForDrag( );
end
-- Set the global scale
StatusBars2:SetScale( StatusBars2_Settings.scale );
-- Update the layout
StatusBars2_UpdateLayout( );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_EnableBar
--
-- Description: Enable a status bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_EnableBar( bar, group, index, removeWhenHidden )
-- Check if the bar type is enabled
if( StatusBars2_Settings.bars[ bar.key ].enabled ~= "Never" ) then
-- Set the layout properties
bar.group = group;
bar.index = index;
bar.removeWhenHidden = removeWhenHidden;
-- Initialize the incombat flag
local inCombat = UnitAffectingCombat( "player" );
bar.inCombat = inCombat ~= nil;
-- Enable the event and update handlers
bar:SetScript( "OnEvent", bar.OnEvent );
bar:SetScript( "OnUpdate", bar.OnUpdate );
-- Set the scale
bar:SetBarScale( StatusBars2_Settings.bars[ bar.key ].scale );
-- Notify the bar is is enabled
bar:OnEnable( );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_DisableBar
--
-- Description: Disable a status bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_DisableBar( bar )
-- Remove the event and update handlers
bar:SetScript( "OnEvent", nil );
bar:SetScript( "OnUpdate", nil );
-- Clear the layout properties
bar.group = nil;
bar.index = nil;
bar.removeWhenHidden = nil;
-- Hide the bar
bar:Hide( );
bar.visible = false;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_HideBar
--
-- Description: Hide a status bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_HideBar( bar, immediate )
if( bar.visible == true ) then
if( immediate ~= true and StatusBars2_Settings.fade == true ) then
local fadeInfo = {};
fadeInfo.mode = "OUT";
fadeInfo.timeToFade = kFadeOutTime;
fadeInfo.startAlpha = 1,0;
fadeInfo.endAlpha = 0;
fadeInfo.finishedFunc = StatusBars2_FadeOutFinished;
fadeInfo.finishedArg1 = bar;
UIFrameFade( bar, fadeInfo );
else
bar:Hide( );
end
bar.visible = false;
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_FadeOutFinished
--
-- Description: Called when fading out finishes
--
-------------------------------------------------------------------------------
--
function StatusBars2_FadeOutFinished( bar )
bar:Hide( );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_ShowBar
--
-- Description: Show a status bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_ShowBar( bar )
if( bar.visible == false ) then
if( StatusBars2_Settings.fade == true ) then
UIFrameFadeIn( bar, kFadeInTime, 0, 1.0 );
else
bar:SetAlpha( 1.0 );
bar:Show( );
end
bar.visible = true;
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_UpdateLayout
--
-- Description: Update the layout of the bars
--
-------------------------------------------------------------------------------
--
function StatusBars2_UpdateLayout( )
local layoutBars = {}
-- Build a list of bars to layout
for i, bar in ipairs( bars ) do
-- If the bar has a group and index set include it in the layout
if( bar.group ~= nil and bar.index ~= nil and ( bar.removeWhenHidden == nil or bar.visible == true ) ) then
table.insert( layoutBars, bar );
end
end
-- Order the bars
table.sort( layoutBars, StatusBars2_BarCompareFunction );
-- Lay them out
local group = nil;
local offset = 0;
for i, bar in ipairs( layoutBars ) do
-- Add space between groups
if( group ~= nil and group ~= bar.group ) then
offset = offset - kGroupSpacing;
end
group = bar.group
-- Position the bar
bar:SetBarPosition( 0, offset );
-- Update the offset
offset = offset - ( bar:GetBarHeight( ) - 2 );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_BarCompareFunction
--
-- Description: Function for comparing two bars
--
-------------------------------------------------------------------------------
--
function StatusBars2_BarCompareFunction( bar1, bar2 )
return bar1.group < bar2.group or ( bar1.group == bar2.group and bar1.index < bar2.index );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateHealthBar
--
-- Description: Create a health bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateHealthBar( name, unit, displayName, key )
-- Create the bar
local bar = StatusBars2_CreateContinuousBar( name, unit, 1, 0, 0, displayName, key, kHealth );
-- Set the event handlers
bar.OnEvent = StatusBars2_HealthBar_OnEvent;
bar.OnEnable = StatusBars2_HealthBar_OnEnable;
bar.IsDefault = StatusBars2_HealthBar_IsDefault;
-- Register for events
bar:RegisterEvent( "UNIT_HEALTH" );
bar:RegisterEvent( "UNIT_MAXHEALTH" );
bar:RegisterEvent( "PLAYER_REGEN_DISABLED" );
bar:RegisterEvent( "PLAYER_REGEN_ENABLED" );
if( unit == "target" ) then
bar:RegisterEvent( "PLAYER_TARGET_CHANGED" );
elseif( unit == "pet" ) then
bar:RegisterEvent( "UNIT_PET" );
end
return bar;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreatePowerBar
--
-- Description: Create a power bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreatePowerBar( name, unit, powerType, displayName, key, barType )
-- Create the power bar
local bar = StatusBars2_CreateContinuousBar( name, unit, 1, 1, 0, displayName, key, barType or kPower );
-- If its a target power bar use a special options template
if( unit == "target" ) then
bar.optionsTemplate = "StatusBars2_TargetPowerBarOptionsTemplate";
end
-- If its the druid mana bar use a special options template
if( bar.type == kDruidMana ) then
bar.optionsTemplate = "StatusBars2_DruidManaBarOptionsTemplate";
end
-- Save the power type
bar.powerType = powerType;
-- Set the color
StatusBars2_SetPowerBarColor( bar );
-- Set the event handlers
bar.OnEvent = StatusBars2_PowerBar_OnEvent;
bar.OnUpdate = StatusBars2_PowerBar_OnUpdate;
bar.OnEnable = StatusBars2_PowerBar_OnEnable;
bar.BarIsVisible = StatusBars2_PowerBar_IsVisible;
bar.IsDefault = StatusBars2_PowerBar_IsDefault;
-- Register for events
bar:RegisterEvent( "PLAYER_REGEN_DISABLED" );
bar:RegisterEvent( "PLAYER_REGEN_ENABLED" );
if( powerType == kEnergy or powerType == nil ) then
bar:RegisterEvent( "UNIT_ENERGY" );
bar:RegisterEvent( "UNIT_MAXENERGY" );
end
if( powerType == kRage or powerType == nil ) then
bar:RegisterEvent( "UNIT_RAGE" );
bar:RegisterEvent( "UNIT_MAXRAGE" );
end
if( powerType == kMana or powerType == nil ) then
bar:RegisterEvent( "UNIT_MANA" );
bar:RegisterEvent( "UNIT_MAXMANA" );
end
if( powerType == kFocus or powerType == nil ) then
bar:RegisterEvent( "UNIT_FOCUS" );
bar:RegisterEvent( "UNIT_MAXFOCUS" );
end
if( powerType == kRunicPower or powerType == nil ) then
bar:RegisterEvent( "UNIT_RUNIC_POWER" );
bar:RegisterEvent( "UNIT_MAXRUNIC_POWER" );
end
if( unit == "target" ) then
bar:RegisterEvent( "PLAYER_TARGET_CHANGED" );
bar:RegisterEvent( "UNIT_SPELLCAST_START" );
bar:RegisterEvent( "UNIT_SPELLCAST_STOP" );
bar:RegisterEvent( "UNIT_SPELLCAST_FAILED" );
bar:RegisterEvent( "UNIT_SPELLCAST_INTERRUPTED" );
bar:RegisterEvent( "UNIT_SPELLCAST_DELAYED" );
bar:RegisterEvent( "UNIT_SPELLCAST_CHANNEL_START" );
bar:RegisterEvent( "UNIT_SPELLCAST_CHANNEL_UPDATE" );
bar:RegisterEvent( "UNIT_SPELLCAST_CHANNEL_STOP" );
elseif( unit == "pet" ) then
bar:RegisterEvent( "UNIT_PET" );
end
if( powerType == nil ) then
bar:RegisterEvent( "UNIT_DISPLAYPOWER" );
end
return bar;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateAuraStackBar
--
-- Description: Create bar to track the stack size of a buff or debuff
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateAuraStackBar( name, aura, auraType, unit, count, r, g, b, displayName, key )
-- Create the bar
local bar = StatusBars2_CreateDiscreteBar( name, unit, count, r, g, b, displayName, key, kAuraStack );
-- Save the aura name and unit
bar.aura = aura;
bar.auraType = auraType;
bar.unit = unit;
-- Set the event handlers
bar.OnEvent = StatusBars2_AuraStackBar_OnEvent;
bar.IsDefault = StatusBars2_AuraStackBar_IsDefault;
-- Default the bar to never visible
bar.defaultEnabled = "Never";
-- Register for events
bar:RegisterEvent( "PLAYER_TARGET_CHANGED" );
bar:RegisterEvent( "PLAYER_REGEN_ENABLED" );
bar:RegisterEvent( "PLAYER_REGEN_DISABLED" );
bar:RegisterEvent( "COMBAT_LOG_EVENT_UNFILTERED" );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateComboBar
--
-- Description: Create a combo point bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateComboBar( name, displayName, key )
-- Create the bar
local bar = StatusBars2_CreateDiscreteBar( name, "player", MAX_COMBO_POINTS, 1, 0, 0, displayName, key, kCombo );
-- Set the event handlers
bar.OnEvent = StatusBars2_ComboBar_OnEvent;
bar.OnEnable = StatusBars2_ComboBar_OnEnable;
bar.IsDefault = StatusBars2_ComboBar_IsDefault;
-- Register for events
bar:RegisterEvent( "PLAYER_TARGET_CHANGED" );
bar:RegisterEvent( "UNIT_COMBO_POINTS" );
bar:RegisterEvent( "PLAYER_REGEN_ENABLED" );
bar:RegisterEvent( "PLAYER_REGEN_DISABLED" );
return bar;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateRuneBar
--
-- Description: Create a rune bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateRuneBar( name, displayName, key )
-- Create the bar
local bar = StatusBars2_CreateBar( name, "player", "StatusBars2_RuneFrameTemplate", displayName, key, kRune );
-- Create the rune table
bar.runes = {};
-- Initialize the rune buttons
local i;
for i = 1, 6 do
local rune = getglobal( name .. '_RuneButton' .. i );
RuneFrame_AddRune( bar, rune );
rune.rune = getglobal( rune:GetName( ) .. "Rune" );
rune.fill = getglobal( rune:GetName( ) .. "Fill" );
rune.shine = getglobal( rune:GetName( ) .. "ShineTexture" );
RuneButton_Update( rune );
end
-- Swap frost and unholy runes
RuneFrame_FixRunes( bar );
-- Set the event handlers
bar.OnEvent = StatusBars2_RuneBar_OnEvent;
bar.OnEnable = StatusBars2_RuneBar_OnEnable;
bar.IsDefault = StatusBars2_RuneBar_IsDefault;
-- Register for events
bar:RegisterEvent( "RUNE_POWER_UPDATE" );
bar:RegisterEvent( "RUNE_TYPE_UPDATE" );
bar:RegisterEvent( "PLAYER_REGEN_ENABLED" );
bar:RegisterEvent( "PLAYER_REGEN_DISABLED" );
return bar;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateContinuousBar
--
-- Description: Create a bar to display a range of values
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateContinuousBar( name, unit, r, g, b, displayName, key, barType )
-- Create the bar
local bar = StatusBars2_CreateBar( name, unit, "StatusBars2_ContinuousBarTemplate", displayName, key, barType );
-- Set the options template
bar.optionsTemplate = "StatusBars2_ContinuousBarOptionsTemplate";
-- Set the background color
bar:SetBackdropColor( 0, 0, 0, 0.35 );
-- Get the status and text frames
bar.status = getglobal( name .. "_Status" );
bar.text = getglobal( name .. "_Text" );
bar.percentText = getglobal( name .. "_PercentText" );
bar.spark = getglobal( name .. "_Spark" );
bar.flash = getglobal( name .. "_FlashOverlay" );
-- Set the visible handler
bar.BarIsVisible = StatusBars2_ContinuousBar_IsVisible;
-- Set the status bar color
bar.status:SetStatusBarColor( r, g, b );
-- Set the text color
bar.text:SetTextColor( 1, 1, 1 );
return bar;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateDiscreteBar
--
-- Description: Create a bar to track a discrete number of values. Note
-- that the XML is currently hard coded to 5 boxes
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateDiscreteBar( name, unit, count, r, g, b, displayName, key, barType )
-- Create the bar
local bar = StatusBars2_CreateBar( name, unit, "StatusBars2_DiscreteBarTemplate", displayName, key, barType );
-- Save the box count
bar.boxCount = count;
-- Initialize the boxes
local i;
for i = 1, count do
local boxName = name .. '_Box' .. i;
local statusName = name .. '_Box' .. i .. '_Status';
local box = getglobal( boxName );
local status = getglobal( statusName );
box:SetBackdropColor( 0, 0, 0, 0.0 );
status:SetStatusBarColor( r, g, b );
status:SetValue( 0 );
end
return bar;
end;
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateAuraBar
--
-- Description: Create a bar to display the auras on a unit
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateAuraBar( name, unit, displayName, key )
-- Create the bar
local bar = StatusBars2_CreateBar( name, unit, "StatusBars2_AuraBarTemplate", displayName, key, kAura );
-- Set the options template
bar.optionsTemplate = "StatusBars2_AuraBarOptionsTemplate";
-- Initialize the button array
bar.buttons = {};
-- Set the event handlers
bar.OnEvent = StatusBars2_AuraBar_OnEvent;
bar.OnEnable = StatusBars2_AuraBar_OnEnable;
bar.BarIsVisible = StatusBars2_AuraBar_IsVisible;
bar.IsDefault = StatusBars2_AuraBar_IsDefault;
bar.SetBarScale = StatusBars2_AuraBar_SetScale;
bar.SetBarPosition = StatusBars2_AuraBar_SetPosition;
bar.GetBarHeight = StatusBars2_AuraBar_GetHeight;
-- Register for events
bar:RegisterEvent( "UNIT_AURA" );
bar:RegisterEvent( "PLAYER_REGEN_ENABLED" );
bar:RegisterEvent( "PLAYER_REGEN_DISABLED" );
if( unit == "target" ) then
bar:RegisterEvent( "PLAYER_TARGET_CHANGED" );
end
return bar;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_CreateBar
--
-- Description: Create a status bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_CreateBar( name, unit, template, displayName, key, barType )
-- Create the bar
local bar = CreateFrame( "Frame", name, StatusBars2, template );
bar:Hide( );
-- Set the default methods
bar.OnEnable = StatusBars2_StatusBar_OnEnable;
bar.BarIsVisible = StatusBars2_StatusBar_IsVisible;
bar.IsDefault = StatusBars2_StatusBar_IsDefault;
bar.SetBarScale = StatusBars2_StatusBar_SetScale;
bar.SetBarPosition = StatusBars2_StatusBar_SetPosition;
bar.GetBarHeight = StatusBars2_StatusBar_GetHeight;
-- Store bar settings
bar.unit = unit;
bar.displayName = displayName;
bar.key = key;
bar.type = barType;
-- Default the bar to Auto enabled
bar.defaultEnabled = "Auto";
-- Initialize flashing variables
bar.flashing = false;
-- Set the default options template
bar.optionsTemplate = "StatusBars2_BarOptionsTemplate";
-- Save it in the bar collection
table.insert( bars, bar );
return bar;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_HealthBar_OnEvent
--
-- Description: Health bar event handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_HealthBar_OnEvent( self, event, ... )
-- Target or Max health changed
if( event == "UNIT_MAXHEALTH" or event == "PLAYER_TARGET_CHANGED" ) then
if( self:BarIsVisible( ) == true ) then
self.status:SetMinMaxValues( 0, UnitHealthMax( self.unit ) );
end
-- Show when entering combat
elseif( event == "PLAYER_REGEN_DISABLED" ) then
self.inCombat = true;
-- Exiting combat
elseif( event == "PLAYER_REGEN_ENABLED" ) then
self.inCombat = false;
-- Pet changed
elseif( event == "UNIT_PET" ) then
self.status:SetMinMaxValues( 0, UnitHealthMax( self.unit ) );
end
-- Update
StatusBars2_UpdateHealthBar( self );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_HealthBar_OnEnable
--
-- Description: Health bar enable handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_HealthBar_OnEnable( self )
-- Set the initial minimum and maximumn values
self.status:SetMinMaxValues( 0, UnitHealthMax( self.unit ) );
-- Update
StatusBars2_UpdateHealthBar( self );
-- Call the base method
StatusBars2_StatusBar_OnEnable( self );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_UpdateHealthBar
--
-- Description: Update a health bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_UpdateHealthBar( self )
-- Get the current and max health
local health = UnitHealth( self.unit );
local maxHealth = UnitHealthMax( self.unit );
-- Update the bar
StatusBars2_UpdateContinuousBar( self, health, maxHealth );
-- If the bar is still visible update its color
if( self.visible == true ) then
-- Determine the percentage of health remaining
local percent = health / maxHealth;
-- Set the bar color based on the percentage of remaining health
if( percent >= 0.75 ) then
self.status:SetStatusBarColor( 0, 1, 0 );
elseif( percent >= 0.50 ) then
self.status:SetStatusBarColor( 1, 1, 0 );
elseif( percent >= 0.25 ) then
self.status:SetStatusBarColor( 1, 0.5, 0 );
else
self.status:SetStatusBarColor( 1, 0, 0 );
end
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_HealthBar_IsDefault
--
-- Description: Determine if a health bar is at its default level
--
-------------------------------------------------------------------------------
--
function StatusBars2_HealthBar_IsDefault( self )
-- Get the current and max health
local health = UnitHealth( self.unit );
local maxHealth = UnitHealthMax( self.unit );
return health == maxHealth;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_PowerBar_OnEvent
--
-- Description: Power bar event handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_PowerBar_OnEvent( self, event, ... )
-- Target changed
if( event == "PLAYER_TARGET_CHANGED" ) then
if( self:BarIsVisible( ) == true ) then
StatusBars2_SetPowerBarColor( self );
self.status:SetMinMaxValues( 0, UnitPowerMax( self.unit StatusBars2_GetPowerType( self ) ) );
StatusBars2_ShowBar( self );
StatusBars2_UpdateLayout( );
else
local unitExists = UnitExists( self.unit );
StatusBars2_HideBar( self, unitExists == 1 );
if( unitExists == 1 ) then
StatusBars2_UpdateLayout( );
end
end
-- Show the bar when power ticks
elseif( event == "UNIT_ENERGY" or event == "UNIT_RAGE" or event == "UNIT_MANA" or event == 'UNIT_FOCUS' or event == 'UNIT_RUNIC_POWER' ) then
if( self:BarIsVisible( ) == true ) then
StatusBars2_ShowBar( self );
end
-- Update max power
elseif( ( event == "UNIT_MAXENERGY" or event == "UNIT_MAXRAGE" or event == "UNIT_MAXMANA" or event == "UNIT_MAXFOCUS" or event == 'UNIT_MAXRUNIC_POWER' ) and self.casting ~= true and self.channeling ~= true ) then
self.status:SetMinMaxValues( 0, UnitPowerMax( self.unit StatusBars2_GetPowerType( self ) ) );
-- Show when entering combat
elseif( event == 'PLAYER_REGEN_DISABLED' ) then
self.inCombat = true;
if( self:BarIsVisible( ) == true ) then
StatusBars2_ShowBar( self );
end
-- Exiting combat
elseif( event == 'PLAYER_REGEN_ENABLED' ) then
self.inCombat = false;
-- Pet changed
elseif( event == "UNIT_PET" ) then
self.status:SetMinMaxValues( 0, UnitPowerMax( self.unit StatusBars2_GetPowerType( self ) ) );
-- Unit shapeshifted
elseif( event == "UNIT_DISPLAYPOWER" and select( 1, ... ) == self.unit ) then
self.status:SetMinMaxValues( 0, UnitPowerMax( self.unit StatusBars2_GetPowerType( self ) ) );
StatusBars2_SetPowerBarColor( self );
StatusBars2_UpdatePowerBar( self );
-- Casting started
elseif( select( 1, ... ) == self.unit and ( event == "UNIT_SPELLCAST_START" or event == "UNIT_SPELLCAST_CHANNEL_START" or event == "UNIT_SPELLCAST_CHANNEL_UPDATE" ) and StatusBars2_Settings.bars[ self.key ].showSpell == true ) then
-- Get spell info
local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill, castID;
if( event == "UNIT_SPELLCAST_START" ) then
name, nameSubtext, text, texture, startTime, endTime, isTradeSkill, castID = UnitCastingInfo( self.unit );
else
name, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo( self.unit );
end
if( name ~= nil ) then
-- Get the current and max values
if( event == "UNIT_SPELLCAST_START" ) then
self.value = GetTime( ) - ( startTime / 1000 );
self.maxValue = ( endTime - startTime ) / 1000;
self.castID = castID;
else
self.value = ( ( endTime / 1000 ) - GetTime( ) );
self.maxValue = ( endTime - startTime ) / 1000;
end
-- Set the bar min, max and current values
self.status:SetMinMaxValues( 0, self.maxValue );
self.status:SetValue( self.value );
-- Set the text
self.text:SetText( name );
-- Show the bar spark
self.spark:Show( );
-- Set the bar color
if( event == "UNIT_SPELLCAST_START" ) then
self.status:SetStatusBarColor( 1.0, 0.7, 0.0 );
else
self.status:SetStatusBarColor( 0.0, 1.0, 0.0 );
end
-- Enter channeling mode
self.casting = event == "UNIT_SPELLCAST_START";
self.channeling = event ~= "UNIT_SPELLCAST_START";
end
-- Casting ended
elseif( event == "UNIT_SPELLCAST_STOP" or event == "UNIT_SPELLCAST_FAILED" or event == "UNIT_SPELLCAST_INTERRUPTED" or event == "UNIT_SPELLCAST_CHANNEL_STOP" ) then
if( event ~= "UNIT_SPELLCAST_STOP" or select( 4, ... ) == self.castID ) then
StatusBars2_PowerBar_EndCasting( self );
end
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_PowerBar_OnUpdate
--
-- Description: Power bar update handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_PowerBar_OnUpdate( self, elapsed )
-- Casting mode
if( self.casting == true or self.channeling == true ) then
-- Update the current value
if( self.casting == true ) then
self.value = self.value + elapsed;
else
self.value = self.value - elapsed;
end
-- Casting finished
if( ( self.casting == true and self.value >= self.maxValue ) or ( self.value <= 0 ) ) then
StatusBars2_PowerBar_EndCasting( self );
-- Casting continuing
else
self.status:SetValue( self.value );
self.spark:SetPoint( "CENTER", self.status "LEFT", ( self.value / self.maxValue ) * self.status:GetWidth( ), 0 );
self.percentText:SetText( StatusBars2_Round( self.value / self.maxValue * 100 ) .. "%" );
end
-- Normal mode
else
StatusBars2_UpdatePowerBar( self );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_PowerBar_EndCasting
--
-- Description: End spell casting
--
-------------------------------------------------------------------------------
--
function StatusBars2_PowerBar_EndCasting( self )
-- Exit casting mode
self.casting = false;
self.channeling = false;
self.castID = nil;
-- Reset the min and max values
self.status:SetMinMaxValues( 0, UnitPowerMax( self.unit StatusBars2_GetPowerType( self ) ) );
-- Hide the bar spark
self.spark:Hide( );
-- Reset the color
StatusBars2_SetPowerBarColor( self );
-- Update the bar
StatusBars2_UpdatePowerBar( self );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_PowerBar_OnEnable
--
-- Description: Power bar enable handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_PowerBar_OnEnable( self )
-- Set the initial minimum and maximum values
self.status:SetMinMaxValues( 0, UnitPowerMax( self.unit StatusBars2_GetPowerType( self ) ) );
-- Set the color
StatusBars2_SetPowerBarColor( self );
-- Update
StatusBars2_UpdatePowerBar( self );
-- Call the base method
StatusBars2_StatusBar_OnEnable( self );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_PowerBar_IsVisible
--
-- Description: Determine if a power bar should be visible
--
-------------------------------------------------------------------------------
--
function StatusBars2_PowerBar_IsVisible( self )
return StatusBars2_ContinuousBar_IsVisible( self ) and UnitPowerMax( self.unit StatusBars2_GetPowerType( self ) ) > 0;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_PowerBar_IsDefault
--
-- Description: Determine if a power bar is at its default level
--
-------------------------------------------------------------------------------
--
function StatusBars2_PowerBar_IsDefault( self )
local isDefault = true;
-- Get the power type
local powerType = StatusBars2_GetPowerType( self );
-- Get the current power
local power = UnitPower( self.unit powerType );
-- Determine if power is at it's default state
if( powerType == kRage or powerType == kRunicPower ) then
isDefault = ( power == 0 );
else
local maxPower = UnitPowerMax( self.unit powerType );
isDefault = ( power == maxPower );
end
return isDefault;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_UpdatePowerBar
--
-- Description: Update a power bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_UpdatePowerBar( self )
-- Get the current and max power
local power = UnitPower( self.unit StatusBars2_GetPowerType( self ) );
local maxPower = UnitPowerMax( self.unit StatusBars2_GetPowerType( self ) );
-- Update the bar
StatusBars2_UpdateContinuousBar( self, power, maxPower );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_GetPowerType
--
-- Description: Get the power type that a power bar is displaying
--
-------------------------------------------------------------------------------
--
function StatusBars2_GetPowerType( self )
if( self.powerType ~= nil ) then
return self.powerType
else
return UnitPowerType( self.unit );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_SetPowerBarColor
--
-- Description: Set the color of a power bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_SetPowerBarColor( self )
-- Get the power type
local powerType = StatusBars2_GetPowerType( self );
-- Get the color based on the power type
local r, g, b;
if( powerType == kEnergy ) then
r, g, b = 1, 1, 0;
elseif( powerType == kRage ) then
r, g, b = 1, 0, 0;
elseif( powerType == kMana ) then
r, g, b = 0, 0, 1;
elseif( powerType == kFocus ) then
r, g, b = 1, 0.5, 0;
elseif( powerType == kRunicPower ) then
r, g, b = 0, 0.82, 1;
else
r, g, b = 1, 0, 0;
end
-- Set the bar color
self.status:SetStatusBarColor( r, g, b );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_ComboBar_OnEvent
--
-- Description: Combo bar event handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_ComboBar_OnEvent( self, event, ... )
-- Target changed
if( event == "PLAYER_TARGET_CHANGED" ) then
StatusBars2_UpdateDiscreteBar( self, StatusBars2_GetComboPoints( ) );
-- Combo points changed
elseif( event == "UNIT_COMBO_POINTS" ) then
local unit = ...;
if( unit == "player" ) then
StatusBars2_UpdateDiscreteBar( self, StatusBars2_GetComboPoints( ) );
end
-- Entering combat
elseif( event == "PLAYER_REGEN_DISABLED" ) then
self.inCombat = true;
-- Leaving combat
elseif( event == "PLAYER_REGEN_ENABLED" ) then
self.inCombat = false;
end
-- Update visibility
if( self:BarIsVisible( ) == true ) then
StatusBars2_ShowBar( self );
else
StatusBars2_HideBar( self );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_ComboBar_OnEnable
--
-- Description: Combo bar enable handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_ComboBar_OnEnable( self )
-- Update
StatusBars2_UpdateDiscreteBar( self, StatusBars2_GetComboPoints( ) );
-- Call the base method
StatusBars2_StatusBar_OnEnable( self );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_ComboBar_IsDefault
--
-- Description: Determine if a combo bar is at its default state
--
-------------------------------------------------------------------------------
--
function StatusBars2_ComboBar_IsDefault( self )
return StatusBars2_GetComboPoints( ) == 0;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_RuneBar_OnEvent
--
-- Description: Rune bar event handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_RuneBar_OnEvent( self, event, ... )
-- Entering combat
if( event == "PLAYER_REGEN_DISABLED" ) then
self.inCombat = true;
-- Leaving combat
elseif( event == "PLAYER_REGEN_ENABLED" ) then
self.inCombat = false;
end
-- Call the rune frame event handler
RuneFrame_OnEvent( self, event, ... );
-- Update the bar visibility
if( self:BarIsVisible( ) == true ) then
if( self.visible == false ) then
RuneFrame_OnEvent( self, "PLAYER_ENTERING_WORLD" );
end
StatusBars2_ShowBar( self );
else
StatusBars2_HideBar( self );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_RuneBar_OnEnable
--
-- Description: Rune bar enable handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_RuneBar_OnEnable( self )
-- Update the runes
RuneFrame_OnEvent( self, "PLAYER_ENTERING_WORLD" );
-- Call the base method
StatusBars2_StatusBar_OnEnable( self );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_RuneBar_IsDefault
--
-- Description: Determine if a rune bar is at its default state
--
-------------------------------------------------------------------------------
--
function StatusBars2_RuneBar_IsDefault( self )
local isDefault = true;
-- Look for a rune that is not ready
local i;
for i = 1, 6 do
local start, duration, runeReady = GetRuneCooldown( i );
if( runeReady ~= true ) then
isDefault = false;
break;
end
end
return isDefault;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraStackBar_OnEvent
--
-- Description: Aura stack bar event handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraStackBar_OnEvent( self, event, ... )
-- Target changed
if( event == "PLAYER_TARGET_CHANGED" and self.unit == "target" ) then
StatusBars2_UpdateDiscreteBar( self, StatusBars2_GetAuraStack( self.unit self.aura self.auraType ) );
-- Entering combat
elseif( event == "PLAYER_REGEN_DISABLED" ) then
self.inCombat = true;
-- Leaving combat
elseif( event == "PLAYER_REGEN_ENABLED" ) then
self.inCombat = false;
-- Combat log event
elseif( event == "COMBAT_LOG_EVENT_UNFILTERED" ) then
-- Get the event type and flags
local eventType = select( 2, ... );
local destName = select( 7, ... );
local flags = select( 8, ... );
-- Only care about events for the unit we are tracking
if( ( self.unit == "target" and bit.band( flags, COMBATLOG_OBJECT_TARGET ) == COMBATLOG_OBJECT_TARGET ) or ( self.unit == "player" and destName == UnitName( "player" ) ) ) then
-- Look for spell aura events
if( eventType == "SPELL_AURA_APPLIED" or eventType == "SPELL_AURA_REMOVED" or eventType == "SPELL_AURA_APPLIED_DOSE" or eventType == "SPELL_AURA_REMOVED_DOSE" ) then
-- Look for the aura
local spellName = select( 10, ... );
if( string.find( spellName, self.aura ) == 1 ) then
-- Applied
if( eventType == "SPELL_AURA_APPLIED" ) then
StatusBars2_UpdateDiscreteBar( self, 1 );
-- Removed
elseif( eventType == "SPELL_AURA_REMOVED" ) then
StatusBars2_UpdateDiscreteBar( self, 0 );
-- Dose changed
else
local amount = select( 13, ... );
StatusBars2_UpdateDiscreteBar( self, amount );
end
end
end
end
end
-- Update visibility
if( self:BarIsVisible( ) == true ) then
StatusBars2_ShowBar( self );
else
StatusBars2_HideBar( self );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraStackBar_IsDefault
--
-- Description: Determine if an aura stack bar is in its default state
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraStackBar_IsDefault( self )
return StatusBars2_GetAuraStack( self.unit self.aura self.auraType ) == 0;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraBar_OnEvent
--
-- Description: Aura bar event handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraBar_OnEvent( self, event, ... )
-- Aurea changed
if( event == "UNIT_AURA" ) then
local arg1 = ...;
if( arg1 == self.unit ) then
StatusBars2_UpdateAuraBar( self );
end
-- Target changed
elseif( event == "PLAYER_TARGET_CHANGED" ) then
if( self:BarIsVisible( ) == true ) then
StatusBars2_UpdateAuraBar( self );
end
-- Entering combat
elseif( event == 'PLAYER_REGEN_DISABLED' ) then
self.inCombat = true;
-- Exiting combat
elseif( event == 'PLAYER_REGEN_ENABLED' ) then
self.inCombat = false;
end;
-- Update visibility
if( self:BarIsVisible( ) == true ) then
StatusBars2_ShowBar( self );
else
StatusBars2_HideBar( self );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraBar_OnEnable
--
-- Description: Aura bar enable handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraBar_OnEnable( self )
StatusBars2_UpdateAuraBar( self );
StatusBars2_StatusBar_OnEnable( self );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraBar_IsVisible
--
-- Description: Determine if an aura bar is visible
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraBar_IsVisible( self )
return StatusBars2_StatusBar_IsVisible( self ) and UnitExists( self.unit ) == 1 and UnitIsDeadOrGhost( self.unit ) == nil;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraBar_IsDefault
--
-- Description: Determine if a bar is in its default state
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraBar_IsDefault( self )
-- No need to check, if there are no auras the bar will be empty anyway
return false;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraBar_SetScale
--
-- Description: Set the bar scale
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraBar_SetScale( self, scale )
self:SetHeight( StatusBars2_GetAuraSize( self ) );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraBar_SetPosition
--
-- Description: Set the bar position
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraBar_SetPosition( self, x, y )
self:SetPoint( "TOPLEFT", StatusBars2, "TOPLEFT", x, y );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_AuraBar_GetHeight
--
-- Description: Get the bar height
--
-------------------------------------------------------------------------------
--
function StatusBars2_AuraBar_GetHeight( self )
return self:GetHeight( );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_UpdateAuraBar
--
-- Description: Update an aura bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_UpdateAuraBar( self )
-- Button offset
local offset = 2;
-- Hide all the buttons
for name, button in pairs( self.buttons ) do
button:Hide( );
end
-- Buffs
if( StatusBars2_Settings.bars[ self.key ].showBuffs == true ) then
offset = StatusBars2_ShowAuraButtons( self, "Buff", UnitBuff, MAX_TARGET_BUFFS, StatusBars2_Settings.bars[ self.key ].onlyShowSelf, offset );
end
-- Add a space between the buffs and the debuffs
if( offset > 2 ) then
offset = offset + StatusBars2_GetAuraSize( self );
end
-- Debuffs
if( StatusBars2_Settings.bars[ self.key ].showDebuffs == true ) then
offset = StatusBars2_ShowAuraButtons( self, "Debuff", UnitDebuff, MAX_TARGET_DEBUFFS, StatusBars2_Settings.bars[ self.key ].onlyShowSelf, offset );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_ShowAuraButtons
--
-- Description: Show buff or debuff buttons
--
-------------------------------------------------------------------------------
--
function StatusBars2_ShowAuraButtons( self, auraType, getAuraFunction, maxAuras, mineOnly, offset )
-- Iterate over the unit auras
for i = 1, maxAuras do
-- Get the aura
local name, rank, icon, count, debuffType, duration, expirationTime, isMine = getAuraFunction( self.unit i );
-- If the aura exists show it
if( icon ~= nil ) then
-- Determine if the button should be shown
if( ( isMine == 1 or mineOnly == false ) and ( duration > 0 or StatusBars2_Settings.bars[ self.key ].onlyShowTimed == false ) ) then
-- Get the button
local buttonName = self:GetName( ) .. "_" .. auraType .. "Button" .. i;
local button = StatusBars2_GetAuraButton( self, i, buttonName, "Target" .. auraType .. "ButtonTemplate", name, rank, icon, count, debuffType, duration, expirationTime, offset );
-- Update the offset
offset = offset + button:GetWidth( );
-- Show the button
button:Show( );
end
else
break;
end
end
return offset;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_GetAuraButton
--
-- Description: Get an aura button for this bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_GetAuraButton( self, id, buttonName, template, auraName, auraRank, auraIcon, auraCount, debuffType, auraDuration, auraExpirationTime, offset )
-- If the button does not exist create it
if( self.buttons[ buttonName ] == nil ) then
self.buttons[ buttonName ] = CreateFrame( "Button", buttonName, self, template );
end
-- Get the button
local button = self.buttons[ buttonName ];
-- Set the ID
button:SetID( id );
-- Set the unit
button.unit = self.unit
-- Set the icon
local buttonIcon = getglobal( buttonName .. "Icon" );
buttonIcon:SetTexture( auraIcon );
-- Set the cooldown
local buttonCooldown = getglobal( buttonName .. "Cooldown" );
if( auraDuration > 0 ) then
buttonCooldown:Show( );
CooldownFrame_SetTimer( buttonCooldown, auraExpirationTime - auraDuration, auraDuration, 1 );
else
buttonCooldown:Hide( );
end
-- Set the count
buttonCount = getglobal( buttonName .."Count" );
if( auraCount > 1 ) then
buttonCount:SetText( auraCount );
buttonCount:Show( );
else
buttonCount:Hide( );
end
-- Set the position
button:SetPoint( "TOPLEFT", self, "TOPLEFT", offset, -2 );
-- Set the size
button:SetWidth( StatusBars2_GetAuraSize( self ) );
button:SetHeight( StatusBars2_GetAuraSize( self ) );
-- If its a debuff set the border size and color
if( template == "TargetDebuffButtonTemplate" ) then
-- Get debuff type color
local color = DebuffTypeColor[ "none" ];
if( debuffType ) then
color = DebuffTypeColor[ debuffType ];
end
-- Get the border
local border = getglobal( buttonName .. "Border" );
-- Set its size and color
border:SetWidth( 18 );
border:SetHeight( 18 );
border:SetVertexColor(color.r, color.g, color.b);
end
return button;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_GetAuraSize
--
-- Description: Get the size of an aura button
--
-------------------------------------------------------------------------------
--
function StatusBars2_GetAuraSize( self )
return 16 * StatusBars2_Settings.bars[ self.key ].scale;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_UpdateContinuousBar
--
-- Description: Update a continuous bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_UpdateContinuousBar( self, current, max )
-- If the should not be visible, hide it
if( self:BarIsVisible( ) == false ) then
StatusBars2_HideBar( self );
-- Otherwise update the bar
else
-- Show the bar
StatusBars2_ShowBar( self );
-- Set the bar value
self.status:SetValue( current );
-- Set the text
self.text:SetText( current .. ' / ' .. max );
-- Set the percent text
self.percentText:SetText( StatusBars2_Round( current / max * 100 ) .. "%" );
-- If below the flash threshold start the bar flashing, otherwise end flashing
if( StatusBars2_Settings.bars[ self.key ].flash == true and current / max <= StatusBars2_Settings.bars[ self.key ].flashThreshold ) then
StatusBars2_StartFlash( self );
else
StatusBars2_EndFlash( self );
end
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_ContinuousBar_IsVisible
--
-- Description: Determine if a continuous bar is visible
--
-------------------------------------------------------------------------------
--
function StatusBars2_ContinuousBar_IsVisible( self )
return StatusBars2_StatusBar_IsVisible( self ) and UnitExists( self.unit ) == 1 and UnitIsDeadOrGhost( self.unit ) == nil;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_UpdateDiscreteBar
--
-- Description: Update a discrete bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_UpdateDiscreteBar( self, current )
-- Show the frame if necessary
if( current > 0 ) then
StatusBars2_ShowBar( self );
end
-- Update the boxes
for i = 1, self.boxCount do
-- Get the status bar
local statusName = self:GetName( ) .. '_Box' .. i .. '_Status';
local status = getglobal( statusName );
-- If the point exists show it
if i <= current then
status:SetValue( 1 );
else
status:SetValue( 0 );
end
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_StatusBar_OnEnable
--
-- Description: Called when a status bar is enabled
--
-------------------------------------------------------------------------------
--
function StatusBars2_StatusBar_OnEnable( self )
if( self:BarIsVisible( ) == true ) then
StatusBars2_ShowBar( self );
end;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_StatusBar_IsVisible
--
-- Description: Determine if a status bar should be visible
--
-------------------------------------------------------------------------------
--
function StatusBars2_StatusBar_IsDefault( self )
return true;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_StatusBar_SetScale
--
-- Description: Set the bar scale
--
-------------------------------------------------------------------------------
--
function StatusBars2_StatusBar_SetScale( self, scale )
self:SetScale( scale );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_StatusBar_SetPosition
--
-- Description: Set the bar position
--
-------------------------------------------------------------------------------
--
function StatusBars2_StatusBar_SetPosition( self, x, y )
self:SetPoint( "TOPLEFT", StatusBars2, "TOPLEFT", x, y * ( 1 / StatusBars2_Settings.bars[ self.key ].scale ) );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_StatusBar_GetHeight
--
-- Description: Get the bar height
--
-------------------------------------------------------------------------------
--
function StatusBars2_StatusBar_GetHeight( self )
return self:GetHeight( ) * StatusBars2_Settings.bars[ self.key ].scale;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_StatusBar_IsVisible
--
-- Description: Determine if a status bar should be visible
--
-------------------------------------------------------------------------------
--
function StatusBars2_StatusBar_IsVisible( self )
-- Get the enable type
local enabled = StatusBars2_Settings.bars[ self.key ].enabled;
-- Auto
local visible = false;
if( enabled == "Auto" ) then
visible = self.inCombat or self:IsDefault( ) == false;
-- Combat
elseif( enabled == "Combat" ) then
visible = self.inCombat
-- Always
elseif( enabled == "Always" ) then
visible = true;
end
return visible;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_OnDragStart
--
-- Description: Called when dragging starts
--
-------------------------------------------------------------------------------
--
function StatusBars2_OnDragStart( )
StatusBars2:StartMoving( );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_OnDragStop
--
-- Description: Called when dragging stops
--
-------------------------------------------------------------------------------
--
function StatusBars2_OnDragStop( )
StatusBars2:StopMovingOrSizing( );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_UpdateFlash
--
-- Description: Update a flashing bar
--
-------------------------------------------------------------------------------
--
function StatusBars2_UpdateFlash( self, level )
-- Only update if the bar is flashing
if( self.flashing == true ) then
-- Set the bar backdrop level
self:SetBackdropColor( level, 0, 0, level * kFlashAlpha );
self.flash:SetVertexColor( level * kFlashAlpha, 0, 0 );
self.flash:Show( );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_StartFlash
--
-- Description: Start a bar flashing
--
-------------------------------------------------------------------------------
--
function StatusBars2_StartFlash( self )
if( self.flashing ~= true ) then
self.flashing = true;
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_EndFlash
--
-- Description: Stop a bar from flashing
--
-------------------------------------------------------------------------------
--
function StatusBars2_EndFlash( self )
if( self.flashing == true ) then
self.flashing = false;
self.flash:Hide( );
self:SetBackdropColor( 0, 0, 0, 0 );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_LoadSettings
--
-- Description: Load settings
--
-------------------------------------------------------------------------------
--
function StatusBars2_LoadSettings( )
-- Initialize the bar settings
StatusBars2_InitializeSettings( );
-- Import old settings
StatusBars2_ImportSettings( );
-- Set default settings
StatusBars2_SetDefaultSettings( );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_InitializeSettings
--
-- Description: Initialize the settings object
--
-------------------------------------------------------------------------------
--
function StatusBars2_InitializeSettings( )
-- If the bar array does not exist create it
if( StatusBars2_Settings.bars == nil ) then
StatusBars2_Settings.bars = {};
end
-- Create a structure for each bar type
for i, bar in ipairs( bars ) do
if( StatusBars2_Settings.bars[ bar.key ] == nil ) then
StatusBars2_Settings.bars[ bar.key ] = {};
end
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_ImportSettings
--
-- Description: Import old settings
--
-------------------------------------------------------------------------------
--
function StatusBars2_ImportSettings( )
-- Import old bar enable settings
StatusBars2_ImportEnableSetting( "ShowPlayerHealth", "playerHealth" );
StatusBars2_ImportEnableSetting( "ShowPlayerPower", "playerPower" );
StatusBars2_ImportEnableSetting( "ShowDruidMana", "druidMana" );
StatusBars2_ImportEnableSetting( "ShowTargetHealth", "targetHealth" );
StatusBars2_ImportEnableSetting( "ShowTargetPower", "targetPower" );
StatusBars2_ImportEnableSetting( "ShowPetHealth", "petHealth" );
StatusBars2_ImportEnableSetting( "ShowPetPower", "petPower" );
StatusBars2_ImportEnableSetting( "ShowComboPoints", "combo" );
StatusBars2_ImportEnableSetting( "ShowRunes", "rune" );
StatusBars2_ImportEnableSetting( "ShowDeadlyPoison", "deadlyPoison" );
StatusBars2_ImportEnableSetting( "ShowSunderArmor", "sunder" );
StatusBars2_ImportEnableSetting( "ShowMaelstromWeapon", "maelstromWeapon" );
-- Player buffs
if( StatusBars2_Settings.ShowPlayerBuffs ~= nil ) then
StatusBars2_Settings.bars.playerAura.showBuffs = StatusBars2_Settings.ShowPlayerBuffs
StatusBars2_Settings.ShowPlayerBuffs = nil;
end
-- Player debuffs
if( StatusBars2_Settings.ShowPlayerDebuffs ~= nil ) then
StatusBars2_Settings.bars.playerAura.showDebuffs = StatusBars2_Settings.ShowPlayerDebuffs
StatusBars2_Settings.ShowPlayerDebuffs = nil;
end
-- Target buffs
if( StatusBars2_Settings.ShowTargetBuffs ~= nil ) then
StatusBars2_Settings.bars.targetAura.showBuffs = StatusBars2_Settings.ShowTargetBuffs
StatusBars2_Settings.ShowTargetBuffs = nil
end
-- Target debuffs
if( StatusBars2_Settings.ShowTargetDebuffs ~= nil ) then
StatusBars2_Settings.bars.targetAura.showDebuffs = StatusBars2_Settings.ShowTargetDebuffs
StatusBars2_Settings.ShowTargetDebuffs = nil
end
-- Pet buffs
if( StatusBars2_Settings.ShowPetBuffs ~= nil ) then
StatusBars2_Settings.bars.petAura.showBuffs = StatusBars2_Settings.ShowPetBuffs
StatusBars2_Settings.ShowPetBuffs = nil;
end
-- Pet debuffs
if( StatusBars2_Settings.ShowPetDebuffs ~= nil ) then
StatusBars2_Settings.bars.petAura.showDebuffs = StatusBars2_Settings.ShowPetDebuffs
StatusBars2_Settings.ShowPetDebuffs = nil;
end
-- Only show self auras
if( StatusBars2_Settings.OnlyShowSelfAuras ~= nil ) then
StatusBars2_Settings.OnlyShowSelfAuras = nil;
end
-- Only show auras with a duration
if( StatusBars2_Settings.OnlyShowAurasWithDuration ~= nil ) then
StatusBars2_Settings.OnlyShowAurasWithDuration = nil;
end
-- Only show in combat
if( StatusBars2_Settings.OnlyShowInCombat ~= nil ) then
StatusBars2_Settings.OnlyShowInCombat = nil;
end
-- Always show target
if( StatusBars2_Settings.AlwaysShowTarget ~= nil ) then
StatusBars2_Settings.AlwaysShowTarget = nil;
end
-- Target spell
if( StatusBars2_Settings.ShowTargetSpell ~= nil ) then
StatusBars2_Settings.bars.playerPower.showSpell = StatusBars2_Settings.ShowTargetSpell
StatusBars2_Settings.ShowTargetSpell = nil;
end
-- Locked
if( StatusBars2_Settings.Locked ~= nil ) then
StatusBars2_Settings.locked = StatusBars2_Settings.Locked
StatusBars2_Settings.Locked = nil;
end
-- Scale
if( StatusBars2_Settings.Scale ~= nil ) then
StatusBars2_Settings.scale = StatusBars2_Settings.Scale
StatusBars2_Settings.Scale = nil;
end
-- Aura size
if( StatusBars2_Settings.AuraSize ~= nil ) then
StatusBars2_Settings.AuraSize = nil;
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_ImportEnableSetting
--
-- Description: Import an old enabled setting
--
-------------------------------------------------------------------------------
--
function StatusBars2_ImportEnableSetting( old, new )
if( StatusBars2_Settings[ old ] ~= nil ) then
if( StatusBars2_Settings[ old ] == true ) then
StatusBars2_Settings.bars[ new ].enabled = "Auto"
else
StatusBars2_Settings.bars[ new ].enabled = "Never"
end
StatusBars2_Settings[ old ] = nil;
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_SetDefaultSettings
--
-- Description: Set default settings
--
-------------------------------------------------------------------------------
--
function StatusBars2_SetDefaultSettings( )
-- Set defaults for the bars
for i, bar in ipairs( bars ) do
-- Enable all bars by default
if( StatusBars2_Settings.bars[ bar.key ].enabled == nil ) then
StatusBars2_Settings.bars[ bar.key ].enabled = bar.defaultEnabled
end
-- Flash player and pet health and mana bars
if( StatusBars2_Settings.bars[ bar.key ].flash == nil and bar.optionsTemplate == "StatusBars2_ContinuousBarOptionsTemplate" ) then
if( ( bar.unit == "player" or bar.unit == "pet" ) and bar.type == kHealth ) then
StatusBars2_Settings.bars[ bar.key ].flash = true;
elseif( ( bar.unit == "player" or bar.unit == "pet" ) and bar.type == kPower ) then
local lclass, class = UnitClass( "player" );
StatusBars2_Settings.bars[ bar.key ].flash = ( bar.unit == "player" and class ~= "ROGUE" and class ~= "WARRIOR" and class ~= "DEATH KNIGHT" and class ~= "DRUID" ) or ( bar.unit == "pet" and class == "WARLOCK" );
elseif( bar.type == kDruidMana ) then
StatusBars2_Settings.bars[ bar.key ].flash = true;
else
StatusBars2_Settings.bars[ bar.key ].flash = false;
end
end
-- Set flash threshold to 40%
if( StatusBars2_Settings.bars[ bar.key ].flashThreshold == nil ) then
StatusBars2_Settings.bars[ bar.key ].flashThreshold = 0.40;
end
-- Enable buffs
if( StatusBars2_Settings.bars[ bar.key ].showBuffs == nil and bar.type == kAura ) then
StatusBars2_Settings.bars[ bar.key ].showBuffs = true;
end
-- Enable debuffs
if( StatusBars2_Settings.bars[ bar.key ].showDebuffs == nil and bar.type == kAura ) then
StatusBars2_Settings.bars[ bar.key ].showDebuffs = true;
end
-- Show all auras
if( StatusBars2_Settings.bars[ bar.key ].onlyShowSelf == nil and bar.type == kAura ) then
StatusBars2_Settings.bars[ bar.key ].onlyShowSelf = false;
end
-- Show all auras
if( StatusBars2_Settings.bars[ bar.key ].onlyShowTimed == nil and bar.type == kAura ) then
StatusBars2_Settings.bars[ bar.key ].onlyShowTimed = false;
end
-- Set scale to 1.0
if( StatusBars2_Settings.bars[ bar.key ].scale == nil ) then
StatusBars2_Settings.bars[ bar.key ].scale = 1.0;
end
-- Show target spell
if( bar.type == kPower and bar.unit == "target" and StatusBars2_Settings.bars[ bar.key ].showSpell == nil ) then
StatusBars2_Settings.bars[ bar.key ].showSpell = true;
end
-- Show in all forms
if( bar.type == kDruidMana and StatusBars2_Settings.bars[ bar.key ].showInAllForms == nil ) then
StatusBars2_Settings.bars[ bar.key ].showInAllForms = true;
end
end
-- Fade
if( StatusBars2_Settings.fade == nil ) then
StatusBars2_Settings.fade = true;
end
-- Locked
if( StatusBars2_Settings.locked == nil ) then
StatusBars2_Settings.locked = false;
end
-- Scale
if( StatusBars2_Settings.scale == nil ) then
StatusBars2_Settings.scale = 1.0;
end
end;
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_Options_OnLoad
--
-- Description: Options frame OnLoad handler
--
-------------------------------------------------------------------------------
--
function StatusBars2_Options_OnLoad( self )
-- Setup the top level category
self.name = "StatusBars 2";
self.okay = StatusBars2_Options_OnOK;
self.cancel = StatusBars2_Options_OnCancel;
InterfaceOptions_AddCategory( self );
-- Add a category for each bar
for i, bar in ipairs( bars ) do
-- Create the option frame
local frame = CreateFrame( "Frame", bar:GetName( ) .. "_OptionFrame", self, bar.optionsTemplate );
-- Initialize the frame
frame.name = bar.displayName
frame.parent = "StatusBars 2";
frame.bar = bar;
-- Add it
InterfaceOptions_AddCategory( frame );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_Options_OnOK
--
-- Description: Called when the OK button is pressed in the options panel
--
-------------------------------------------------------------------------------
--
function StatusBars2_Options_OnOK( )
-- Update the settings
StatusBars2_Options_DoDataExchange( true );
-- Update the bar visibility and location
StatusBars2_UpdateBars( );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_Options_OnCancel
--
-- Description: Called when the Cancel button is pressed in the options panel
--
-------------------------------------------------------------------------------
--
function StatusBars2_Options_OnCancel( )
-- Revert changes
StatusBars2_Options_DoDataExchange( false );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_BarEnabledMenu_Initialize
--
-- Description: Initialize the enabled drop down menu
--
-------------------------------------------------------------------------------
--
function StatusBars2_BarEnabledMenu_Initialize( self )
-- Button info
local info = {};
info.func = StatusBars2_BarEnabledMenu_OnClick;
info.arg1 = self;
-- Auto
local auto = {};
auto.func = StatusBars2_BarEnabledMenu_OnClick;
auto.arg1 = self;
auto.text = "Auto";
UIDropDownMenu_AddButton( auto );
-- Combat
local combat = {};
combat.func = StatusBars2_BarEnabledMenu_OnClick;
combat.arg1 = self;
combat.text = "Combat";
UIDropDownMenu_AddButton( combat );
-- Always
local always = {};
always.func = StatusBars2_BarEnabledMenu_OnClick;
always.arg1 = self;
always.text = "Always";
UIDropDownMenu_AddButton( always );
-- Never
local never = {};
never.func = StatusBars2_BarEnabledMenu_OnClick;
never.arg1 = self;
never.text = "Never";
UIDropDownMenu_AddButton( never );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_BarEnabledMenu_OnClick
--
-- Description: Called when a menu item is clicked
--
-------------------------------------------------------------------------------
--
function StatusBars2_BarEnabledMenu_OnClick( self, menu )
UIDropDownMenu_SetSelectedName( menu, self:GetText( ) );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_BarOptions_DoDataExchange
--
-- Description: Exchange data between settings and controls
--
-------------------------------------------------------------------------------
--
function StatusBars2_BarOptions_DoDataExchange( save, frame )
-- Get controls
local enabledMenu = getglobal( frame:GetName( ) .. "_EnabledMenu" );
local scaleSlider = getglobal( frame:GetName( ) .. "_ScaleSlider" );
local flashButton = getglobal( frame:GetName( ) .. "_FlashButton" );
local flashThresholdSlider = getglobal( frame:GetName( ) .. "_FlashThresholdSlider" );
local showBuffsButton = getglobal( frame:GetName( ) .. "_ShowBuffsButton" );
local showDebuffsButton = getglobal( frame:GetName( ) .. "_ShowDebuffsButton" );
local onlyShowSelfAurasButton = getglobal( frame:GetName( ) .. "_OnlyShowSelfAurasButton" );
local onlyShowTimedAurasButton = getglobal( frame:GetName( ) .. "_OnlyShowTimedAurasButton" );
local showSpellButton = getglobal( frame:GetName( ) .. "_ShowSpellButton" );
local showInAllFormsButton = getglobal( frame:GetName( ) .. "_ShowInAllForms" );
-- Exchange data
if( save == true ) then
StatusBars2_Settings.bars[ frame.bar.key ].enabled = UIDropDownMenu_GetSelectedName( enabledMenu );
StatusBars2_Settings.bars[ frame.bar.key ].scale = StatusBars2_Round( scaleSlider:GetValue( ), 2 );
if( flashButton ~= nil ) then
StatusBars2_Settings.bars[ frame.bar.key ].flash = flashButton:GetChecked( ) == 1;
StatusBars2_Settings.bars[ frame.bar.key ].flashThreshold = StatusBars2_Round( flashThresholdSlider:GetValue( ), 2 );
end
if( showBuffsButton ~= nil ) then
StatusBars2_Settings.bars[ frame.bar.key ].showBuffs = showBuffsButton:GetChecked( ) == 1;
end
if( showDebuffsButton ~= nil ) then
StatusBars2_Settings.bars[ frame.bar.key ].showDebuffs = showDebuffsButton:GetChecked( ) == 1;
end
if( onlyShowSelfAurasButton ~= nil ) then
StatusBars2_Settings.bars[ frame.bar.key ].onlyShowSelf = onlyShowSelfAurasButton:GetChecked( ) == 1;
end
if( onlyShowTimedAurasButton ~= nil ) then
StatusBars2_Settings.bars[ frame.bar.key ].onlyShowTimed = onlyShowTimedAurasButton:GetChecked( ) == 1;
end
if( showSpellButton ~= nil ) then
StatusBars2_Settings.bars[ frame.bar.key ].showSpell = showSpellButton:GetChecked( ) == 1;
end
if( showInAllFormsButton ~= nil ) then
StatusBars2_Settings.bars[ frame.bar.key ].showInAllForms = showInAllFormsButton:GetChecked( ) == 1;
end
else
UIDropDownMenu_SetSelectedName( enabledMenu, StatusBars2_Settings.bars[ frame.bar.key ].enabled );
UIDropDownMenu_SetText( enabledMenu, StatusBars2_Settings.bars[ frame.bar.key ].enabled );
scaleSlider:SetValue( StatusBars2_Settings.bars[ frame.bar.key ].scale );
if( flashButton ~= nil ) then
flashButton:SetChecked( StatusBars2_Settings.bars[ frame.bar.key ].flash );
flashThresholdSlider:SetValue( StatusBars2_Settings.bars[ frame.bar.key ].flashThreshold );
end
if( showBuffsButton ~= nil ) then
showBuffsButton:SetChecked( StatusBars2_Settings.bars[ frame.bar.key ].showBuffs );
end
if( showDebuffsButton ~= nil ) then
showDebuffsButton:SetChecked( StatusBars2_Settings.bars[ frame.bar.key ].showDebuffs );
end
if( onlyShowSelfAurasButton ~= nil ) then
onlyShowSelfAurasButton:SetChecked( StatusBars2_Settings.bars[ frame.bar.key ].onlyShowSelf );
end
if( onlyShowTimedAurasButton ~= nil ) then
onlyShowTimedAurasButton:SetChecked( StatusBars2_Settings.bars[ frame.bar.key ].onlyShowTimed );
end
if( showSpellButton ~= nil ) then
showSpellButton:SetChecked( StatusBars2_Settings.bars[ frame.bar.key ].showSpell );
end
if( showInAllFormsButton ~= nil ) then
showInAllFormsButton:SetChecked( StatusBars2_Settings.bars[ frame.bar.key ].showInAllForms );
end
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_Options_DoDataExchange
--
-- Description: Exchange data between settings and controls
--
-------------------------------------------------------------------------------
--
function StatusBars2_Options_DoDataExchange( save )
-- Exchange bar data
for i, bar in ipairs( bars ) do
local frame = getglobal( bar:GetName( ) .. "_OptionFrame" );
StatusBars2_BarOptions_DoDataExchange( save, frame );
end
-- Exchange options data
if( save == true ) then
StatusBars2_Settings.fade = StatusBars2_Options_FadeButton:GetChecked( ) == 1;
StatusBars2_Settings.locked = StatusBars2_Options_LockedButton:GetChecked( ) == 1;
StatusBars2_Settings.scale = StatusBars2_Options_ScaleSlider:GetValue( );
else
StatusBars2_Options_FadeButton:SetChecked( StatusBars2_Settings.fade );
StatusBars2_Options_LockedButton:SetChecked( StatusBars2_Settings.locked );
StatusBars2_Options_ScaleSlider:SetValue( StatusBars2_Settings.scale );
end
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_GetComboPoints
--
-- Description: Get the number of combo points for the current player
--
-------------------------------------------------------------------------------
--
function StatusBars2_GetComboPoints( )
-- Check if the target is dead
if UnitIsDeadOrGhost( 'target' ) then
return 0;
else
return GetComboPoints( "player", "target" );
end;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_GetAuraStack
--
-- Description: Get the stack size of the specified aura
--
-------------------------------------------------------------------------------
--
function StatusBars2_GetAuraStack( unit, aura, auraType )
local stack = 0;
-- Iterate over the auras on the target
local i;
for i = 1, 40 do
-- Get the aura
local name, rank, texture, count;
if( auraType == "buff" ) then
name, rank, texture, count = UnitBuff( unit, i );
else
name, rank, texture, count = UnitDebuff( unit, i );
end
-- Check the name
if( name == aura ) then
stack = count;
break;
elseif( name == nil ) then
break;
end;
end
return stack;
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_Trace
--
-- Description: Trace a message to the console
--
-------------------------------------------------------------------------------
--
function StatusBars2_Trace( message )
DEFAULT_CHAT_FRAME:AddMessage( message );
end
-------------------------------------------------------------------------------
--
-- Name: StatusBars2_Round
--
-- Description: Round a numer
--
-------------------------------------------------------------------------------
--
function StatusBars2_Round( x, places )
local mult = 10 ^ ( places or 0 )
return floor( x * mult + 0.5 ) / mult
end
| User | When | Change |
|---|---|---|
| prionic6 | Tue, 25 Nov 2008 19:43:27 | Create |
Facts
- Reported on
- 25 Nov 2008
- Status
- New - Issue has not had initial review yet.
- Type
- Patch - Source code patch for review
- Priority
- Medium - Normal priority.