vanilla-wow-addons – Rev 1
?pathlinks?
--[[
AutoBuff -- Automatically casts self-buffs, weapon buffs, tracking abilites, and aspects.
Originally authored by Frosty @ http://www.curse-gaming.com/mod.php?addid=1400
ADOPTED 2005-08 by Dsanai, as Frosty is no longer playing World of Warcraft.
Please direct any suggestions, comments, or blame, to Dsanai. Frosty still deserves the praise, though. :-)
http://membersui.worldofwar.net/ui.php?id=1475
http://www.curse-gaming.com/mod.php?addid=2442
http://www.wowinterface.com/downloads/fileinfo.php?s=&id=4259
FEATURE REQUESTS (Not added yet)
-- Option to not cast while Resting (removed it a while back, add back in with default Off)
-- Option to not cast while in Battlegrounds (check MetaMap for method to test this state)
-- Figure out what changed to make the Expiration flag unknowable (won't cast until spell is gone).
-[ MOST RECENT HISTORY ]- (For older history, see ReadMe.txt)
v11200-3
-- Fixed error caused by not having Titan installed.
v11200-2
-- Fixed error caused by not having FuBar installed.
v11200-1
-- Updated TOC for Patch 1.12.
-- Added Warlock Life Tap scaling (code from ScaledLifeTap by Kimilly). Requires BonusScanner mod.
-- Added option to recast Priests' Inner Fire spell at a set number of charges or less (5/20 is default).
-- Added option to change Inner Fire recast charges to anything from 1 to 19 (/ab innercharges <integer>).
-- Removed check for weapons before casting Shaman weapon buffs (fixes tooltip bug). If you're working on your Unarmed skill, disable the selected weapon buff in /autobuff and all will be well.
-- Hid options on Titan and FuBar tooltips if they do not apply to the currently-played character class.
v11100-3b/c
-- Fixed bug introduced by Detect Traps removal.
v11100-3
-- Added FuBar 2+ support.
-- Priest: Will no longer cast while Spirit of Redemption is active (EN,DE,FR clients)
-- Fixed DE Windfury translation (courtesy Helaku@WorldOfWar)
-- Fixed DE Sense Undead translation (courtesy DelphiDie@WorldOfWar)
-- Fixed DE Ice Barrier translation (courtesy DelphiDie@WorldOfWar)
-- Removed Detect Traps (Blizzard passive spell now)
]]
-- Constants
--AUTOBUFF_USAGE_LIST = "/autobuff on|off|toggle|track|weapon|mana\n/autobuff trigger|rebuff|combat|enable|disable|list\n/autobuff hide|resetbutton";
AUTOBUFF_USAGE_LIST = "/autobuff on | off | toggle\n";
AUTOBUFF_USAGE_LIST = AUTOBUFF_USAGE_LIST.."/autobuff track | weapon\n";
AUTOBUFF_USAGE_LIST = AUTOBUFF_USAGE_LIST.."/autobuff mana | trigger | rebuff | combat | enable | disable | list\n";
AUTOBUFF_USAGE_LIST = AUTOBUFF_USAGE_LIST.."/autobuff reset\n";
AUTOBUFF_USAGE_LIST = AUTOBUFF_USAGE_LIST.."/autobuff water | tap | scaled | inner\n";
AUTOBUFF_USAGE_LIST = AUTOBUFF_USAGE_LIST.."/autobuff innercharges <num>\n";
AUTOBUFF_USAGE_LIST = AUTOBUFF_USAGE_LIST.."/autobuff hide | resetbutton\n";
AUTOBUFF_USAGE_LIST = AUTOBUFF_USAGE_LIST.."To Run Autobuff: /autobuff run\n";
BINDING_HEADER_AUTOBUFF = "AutoBuff";
local AUTOBUFF_GUI_ABILITY_TOTALROWS = 30;
local AUTOBUFF_GUI_ABILITY_OVERHEAD = 14;
local AUTOBUFF_GUI_ABILITY_INTERVAL = 18;
cSpellList = {
[AUTOBUFF_ABILITY_FORTITUDE] = { ["type"] = "friendly",
[0] = string.lower(AUTOBUFF_ABILITY_PRAYEROFFORTITUDE) },
[AUTOBUFF_ABILITY_PWSHIELD] = { ["type"] = "friendly",
[0] = string.lower(AUTOBUFF_ABILITY_WEAKENEDSOUL) },
[AUTOBUFF_ABILITY_INNER_FIRE] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_SHADOW_PROTECTION] = { ["type"] = "friendly",
[0] = string.lower(AUTOBUFF_ABILITY_PRAYEROFSHADOWPROTECTION) },
[AUTOBUFF_ABILITY_FEARWARD] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_DIVINESPIRIT] = { ["type"] = "friendly",
[0] = string.lower(AUTOBUFF_ABILITY_PRAYEROFSPIRIT) },
[AUTOBUFF_ABILITY_MOTW] = { ["type"] = "friendly",
[0] = string.lower(AUTOBUFF_ABILITY_GOTW) },
[AUTOBUFF_ABILITY_THORNS] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_ELUNESGRACE] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_LIGHTNING_SHIELD] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_INTELLECT] = { ["type"] = "friendly",
[0] = string.lower(AUTOBUFF_ABILITY_ARCANEBRILLIANCE) },
[AUTOBUFF_ABILITY_MAGE_ARMOR] = { ["type"] = "self",
[0] = string.lower(AUTOBUFF_ABILITY_ICE_ARMOR) },
[AUTOBUFF_ABILITY_ICE_ARMOR] = { ["type"] = "self",
[0] = string.lower(AUTOBUFF_ABILITY_MAGE_ARMOR) },
[AUTOBUFF_ABILITY_FROST_ARMOR] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_MANASHIELD] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_ICEBARRIER] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_FIREWARD] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_FROSTWARD] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_AMPLIFYMAGIC] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_DAMPENMAGIC] = { ["type"] = "friendly",
[0] = string.lower(AUTOBUFF_ABILITY_AMPLIFYMAGIC) },
[AUTOBUFF_ABILITY_DEMON_SKIN] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_DEMON_ARMOR] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_DETECT_LINVIS] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_DETECT_INVIS] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_DETECT_GINVIS] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_UNENDING_BREATH] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_SOULLINK] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_SHADOWWARD] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_TRUESHOTAURA] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_BATTLESHOUT] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_NATURES_GRASP] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_OMENOFCLARITY] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_BARKSKIN] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_FEINT] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_BLADE_FLURRY] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_SHADOWGUARD] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_TOUCHOFWEAKNESS] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_WATER_BREATHING] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_RIGHTFURY] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_LIFE_TAP] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_DARK_PACT] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_BERSERKING] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_FADE] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_COWER] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_PERCEPTION] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_BLOODFURY] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_REJUV] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_RENEW] = { ["type"] = "friendly" },
[AUTOBUFF_ABILITY_ICEBLOCK] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_BLOODRAGE] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_EVASION] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_SPRINT] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_STONEFORM] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_FOCUSEDCASTING] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_HOLYSHIELD] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_BERSERKERRAGE] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_DIVINEFAVOR] = { ["type"] = "self" },
[AUTOBUFF_ABILITY_COLDBLOOD] = { ["type"] = "self" },
};
local cBlessing = {
[0] = AUTOBUFF_ABILITY_BLESSING_MIGHT,
[1] = AUTOBUFF_ABILITY_BLESSING_WISDOM,
[2] = AUTOBUFF_ABILITY_BLESSING_SALVATION,
[3] = AUTOBUFF_ABILITY_BLESSING_KINGS,
[4] = AUTOBUFF_ABILITY_BLESSING_SANCTUARY,
[5] = AUTOBUFF_ABILITY_BLESSING_LIGHT,
}
local cBlessingOther = {
[0] = AUTOBUFF_ABILITY_BLESSING_FREEDOM,
[1] = AUTOBUFF_ABILITY_BLESSING_PROTECTION,
}
local cBlessingPoly = {
[AUTOBUFF_ABILITY_GREATBLESSING_MIGHT] = AUTOBUFF_ABILITY_BLESSING_MIGHT,
[AUTOBUFF_ABILITY_GREATBLESSING_WISDOM] = AUTOBUFF_ABILITY_BLESSING_WISDOM,
[AUTOBUFF_ABILITY_GREATBLESSING_SALVATION] = AUTOBUFF_ABILITY_BLESSING_SALVATION,
[AUTOBUFF_ABILITY_GREATBLESSING_KINGS] = AUTOBUFF_ABILITY_BLESSING_KINGS,
[AUTOBUFF_ABILITY_GREATBLESSING_SANCTUARY] = AUTOBUFF_ABILITY_BLESSING_SANCTUARY,
[AUTOBUFF_ABILITY_GREATBLESSING_LIGHT] = AUTOBUFF_ABILITY_BLESSING_LIGHT,
}
local cAura = {
[0] = AUTOBUFF_ABILITY_AURA_DEVOTION,
[1] = AUTOBUFF_ABILITY_AURA_RETRIBUTION,
[2] = AUTOBUFF_ABILITY_AURA_CONCENTRATION,
[3] = AUTOBUFF_ABILITY_AURA_SHADOWRESIST,
[4] = AUTOBUFF_ABILITY_AURA_FROSTRESIST,
[5] = AUTOBUFF_ABILITY_AURA_FIRERESIST,
[6] = AUTOBUFF_ABILITY_AURA_SANCTITY,
}
local cTrackList = {
[AUTOBUFF_ABILITY_FIND_MINERALS] = "Spell_Nature_Earthquake",
[AUTOBUFF_ABILITY_FIND_HERBS] = "Unknown",
[AUTOBUFF_ABILITY_SENSE_DEMONS] = "Spell_Shadow_Metamorphosis",
[AUTOBUFF_ABILITY_TRACK_BEASTS] = "Unknown",
[AUTOBUFF_ABILITY_TRACK_UNDEAD] = "Unknown",
[AUTOBUFF_ABILITY_TRACK_HIDDEN] = "Unknown",
[AUTOBUFF_ABILITY_TRACK_ELEMENTAL] = "Unknown",
[AUTOBUFF_ABILITY_TRACK_DEMONS] = "Unknown",
[AUTOBUFF_ABILITY_TRACK_GIANTS] = "Unknown",
[AUTOBUFF_ABILITY_TRACK_DRAGONKIN] = "Unknown",
[AUTOBUFF_ABILITY_FIND_TREASURE] = "Unknown",
[AUTOBUFF_ABILITY_SENSE_UNDEAD] = "Unknown",
}; -- [AUTOBUFF_ABILITY_TRACK_HUMANOIDS] = "Unknown",
-- Added dynamically now, based on if you're a Druid (goes to cSpellList) or a Hunter (goes to cTrackList).
local cAspectList = {
[AUTOBUFF_ASPECT_MONKEY] = "Unknown",
[AUTOBUFF_ASPECT_HAWK] = "Unknown",
[AUTOBUFF_ASPECT_CHEETAH] = "Unknown",
[AUTOBUFF_ASPECT_PACK] = "Unknown",
[AUTOBUFF_ASPECT_WILD] = "Unknown",
[AUTOBUFF_ASPECT_BEAST] = "Unknown",
};
local cSealList = {
[AUTOBUFF_ABILITY_SEAL_COMMAND] = { ["i"] = 1, ["type"] = "self" },
[AUTOBUFF_ABILITY_SEAL_FURY] = { ["i"] = 2, ["type"] = "self" },
[AUTOBUFF_ABILITY_SEAL_JUSTICE] = { ["i"] = 3, ["type"] = "self" },
[AUTOBUFF_ABILITY_SEAL_LIGHT] = { ["i"] = 4, ["type"] = "self" },
[AUTOBUFF_ABILITY_SEAL_RIGHT] = { ["i"] = 5, ["type"] = "self" },
[AUTOBUFF_ABILITY_SEAL_WISDOM] = { ["i"] = 6, ["type"] = "self" },
[AUTOBUFF_ABILITY_SEAL_CRUSADER] = { ["i"] = 7, ["type"] = "self" },
};
local cWarlockPet = { ["Lesser Invisibility"] = "Spell_Magic_LesserInvisibilty"; }; -- Beta function. /autobuff succubus
local cWeaponList = {
[AUTOBUFF_ABILITY_PRIEST_FEEDBACK] = 0,
[AUTOBUFF_ABILITY_SHAMAN_FLAMETONGUE] = 0,
[AUTOBUFF_ABILITY_SHAMAN_FROSTBRAND] = 0,
[AUTOBUFF_ABILITY_SHAMAN_ROCKBITER] = 0,
[AUTOBUFF_ABILITY_SHAMAN_WINDFURY] = 0,
};
local cPolyList = {
["all"] = {
[AUTOBUFF_POLY_ALL_INVISIBILITY] = true,
[AUTOBUFF_POLY_ALL_LESSERINVISIBILITY] = true,
[AUTOBUFF_POLY_ALL_SHADOWMELD] = true,
[AUTOBUFF_POLY_ALL_DRINK] = true,
[AUTOBUFF_POLY_ALL_FOOD] = true,
[AUTOBUFF_POLY_ALL_FIRSTAID] = true,
},
[string.lower(AUTOBUFF_CLASS_PRIEST)] = {
[AUTOBUFF_POLY_PRIEST_MINDCONTROL] = true,
[AUTOBUFF_POLY_PRIEST_SPIRITTAP] = true,
[AUTOBUFF_POLY_PRIEST_MINDVISION] = true,
[AUTOBUFF_POLY_PRIEST_INNERFOCUS] = true,
[AUTOBUFF_POLY_PRIEST_SPIRITOFREDEMPTION] = true,
},
[string.lower(AUTOBUFF_CLASS_ROGUE)] = {},
[string.lower(AUTOBUFF_CLASS_PALADIN)] = {},
[string.lower(AUTOBUFF_CLASS_WARLOCK)] = {
[AUTOBUFF_POLY_WARLOCK] = true,
[AUTOBUFF_POLY_WARLOCK_SOULSIPHON] = true,
},
[string.lower(AUTOBUFF_CLASS_WARRIOR)] = {},
[string.lower(AUTOBUFF_CLASS_HUNTER)] = {},
[string.lower(AUTOBUFF_CLASS_MAGE)] = {
[AUTOBUFF_POLY_MAGE] = true,
},
[string.lower(AUTOBUFF_CLASS_SHAMAN)] = {
[AUTOBUFF_POLY_SHAMAN] = true,
},
[string.lower(AUTOBUFF_CLASS_DRUID)] = {
[AUTOBUFF_POLY_DRUID_BEAR] = true,
[AUTOBUFF_POLY_DRUID_CAT] = true,
[AUTOBUFF_POLY_DRUID_AQUATIC] = true,
[AUTOBUFF_POLY_DRUID_TRAVEL] = true,
[AUTOBUFF_POLY_DRUID_DIREBEAR] = true,
[AUTOBUFF_POLY_DRUID_MOONKIN] = true,
}
};
local cDefault = { -- Default saved settings.
['e'] = 1, -- Enabled
['x'] = { -- Spell Settings
['d'] = { -- Default Settings
['c'] = 3, -- Combat
['h'] = 1, -- Health
['m'] = 40, -- Mana
['r'] = 10, -- Rebuff
['t'] = 126, -- Hook Trigger
['z'] = 1, -- Class Specific (Stealth/Breath) UNUSED
['p'] = 3, -- Party
},
[AUTOBUFF_ABILITY_PWSHIELD] = {
['d'] = 1,
},
[AUTOBUFF_ABILITY_ICEBARRIER] = {
['d'] = 1,
},
[AUTOBUFF_ABILITY_BATTLESHOUT] = {
['m'] = 10,
['r'] = 5,
},
[AUTOBUFF_ABILITY_FIREWARD] = {
['d'] = 1,
},
[AUTOBUFF_ABILITY_FROSTWARD] = {
['d'] = 1,
},
[AUTOBUFF_ABILITY_WATER_BREATHING] = {
['d'] = 1,
},
[AUTOBUFF_ABILITY_TRACK_HUMANOIDS] = {
['m'] = 1,
},
[AUTOBUFF_ABILITY_LIFE_TAP] = {
['m'] = -40, -- < 40% mana
['h'] = 80, -- > 80% health
},
[AUTOBUFF_ABILITY_BERSERKING] = {
['c'] = 1, -- IN Combat
['h'] = -70, -- < 70% health
},
[AUTOBUFF_ABILITY_FADE] = {
['c'] = 1, -- IN Combat
},
},
['z'] = 0,
['v'] = "11200-3", -- VERSION
['b'] = true, -- Button visibility
["water"] = true, -- Warlock/Shaman Underwater 30-second trap (ON by default)
["tap"] = true, -- Prevent casting while Spirit Tap / Soul Siphon are active (ON by default)
["scaled"] = true, -- Warlock Life Tap scaling based on Item Bonuses (ON by default)
["inner"] = true, -- Inner Fire casts at XX/20 charges (ON by default)
["innercharges"] = 5, -- Number of charges (between 1 and 19) (5 by default)
};
local cSheep = "Spell_Nature_Polymorph";
local cEnslave = "Spell_Shadow_EnslaveDemon";
local cBanish = "Spell_Shadow_Cripple";
local cTracking = "Ability_Tracking";
local cStealth = "Ability_Stealth";
local cPre = "Interface\\Icons\\";
local cTime = 1000;
local cIconOn = "Interface\\AddOns\\AutoBuff\\ABEnabled";
local cIconOff = "Interface\\AddOns\\AutoBuff\\ABDisabled";
local cIconInnerFire = "Interface\\Icons\\Spell_Holy_InnerFire";
-- Used for the table index finder function.
local bIndex = nil;
local bValue = nil;
-- Used for LifeTap Scaling
local overtapEnabled = true;
local AFFLICTION_TAB = 1;
local IMP_LIFETAP_ID = 5;
local RANK_MULTIPLIER = {0.38,0.68,0.8,0.8,0.8,0.8};
local BASE_DAMAGE = {30,75,140,220,310,424};
-- Temp variables.
local vSit = 0;
local vBreath = 0;
local vRestingAlertTimer = 0;
local vError = {};
local vGUI = {};
local vTime = 0;
local vRejuv = 0;
local vTrack = nil;
local vWeapon = nil;
local vAspect = nil;
local vSeal = nil;
local vClass = nil;
local vSpellList = { };
local sSpellList = { };
local vTrackList = { };
local vAspectList = { };
local vSealList = { };
local vWeaponList = { };
local vC = nil;
local vLoaded = nil;
local vLoaded = {
var = false;
player = false;
autobuff = false;
};
local vCombat = nil;
local AutoBuff_MFSx, AutoBuff_MBSx, AutoBuff_MLSx, AutoBuff_MRSx, AutoBuff_SRSx, AutoBuff_SLSx, AutoBuff_TARx, AutoBuff_TASx, AutoBuff_TAFx, AutoBuffCMSx, AutoBuff_CMFx, AutoBuff_WHEELUx, AutoBuff_WHEELDx, AutoBuff_TARGETx;
-- Titan Variables
TITAN_AUTOBUFF_ID = "AutoBuff";
TITAN_AUTOBUFF_DESC = "Auto-casts self-buffs, weapon buffs, tracking abilites, aspects, and seals.";
TITAN_AUTOBUFF_MENU_TEXT = "AutoBuff";
TITAN_AUTOBUFF_BUTTON_LABEL = "AutoBuff";
TITAN_AUTOBUFF_TOOLTIP = "AutoBuff v"..cDefault['v'];
TITAN_AUTOBUFF_ICON_ON = "Interface\\AddOns\\AutoBuff\\ABEnabled";
TITAN_AUTOBUFF_ICON_OFF = "Interface\\AddOns\\AutoBuff\\ABDisabled";
TITAN_AUTOBUFF_ENABLE = "Enable AutoBuff";
TITAN_AUTOBUFF_BUTTONSHOW = "Show UI Button";
TITAN_AUTOBUFF_BUTTONRESET = "Reset UI Button";
TITAN_AUTOBUFF_DEBUG = "Debug Mode";
TITAN_AUTOBUFF_WATER = "Wait 30s to cast WaterBreathing";
TITAN_AUTOBUFF_TAP = "Off while Spirit Tap or Soul Siphon active";
TITAN_AUTOBUFF_SCALED = "Warlock Life Tap scaling (w/BonusScanner)";
TITAN_AUTOBUFF_INNER = "Priest Inner Fire casts at XX charges left";
TitanAutoBuffStates = {};
TitanAutoBuffStates.Enabled = nil;
TitanAutoBuffStates.Button = nil;
TitanAutoBuffStates.Debug = nil;
TitanAutoBuffStates.Water = nil;
TitanAutoBuffStates.Tap = nil;
TitanAutoBuffStates.Scaled = nil;
TitanAutoBuffStates.Inner = nil;
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = "";
local u = {};
-- AutoBuffOptionsButton functions
local AutoBuffOptionsButton_BeingDragged = false;
function AutoBuffOptionsButton_OnLoad()
this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
this:RegisterForDrag("LeftButton");
end
function AutoBuffOptionsButton_OnClick(arg1)
if (arg1 == "LeftButton") then
-- Open Options Window
AutoBuffFrame_Toggle();
elseif (arg1 == "RightButton") then
-- Toggle on/off status
AutoBuffToggle();
end
end
function AutoBuffToggle()
if (AutoBuff_Data[vC]['e'] == 1) then
AutoBuff_Off();
else
AutoBuff_On();
end
end
function AutoBuffDebug()
if (AutoBuff_Data[vC]['d']) then
AutoBuff_Data[vC]['d'] = nil;
AutoBuff_Print("Debug is now off.");
TitanAutoBuffStates.Debug = nil;
else
AutoBuff_Data[vC]['d'] = 1;
AutoBuff_Print("Debug is now on.");
TitanAutoBuffStates.Debug = 1;
end
end
function AutoBuffWaterToggle()
if (AutoBuff_Data[vC]["water"]) then
AutoBuff_Data[vC]["water"] = false;
AutoBuff_Print("Underwater Breathing spells will ignore swim timers.");
TitanAutoBuffStates.Water = nil;
else
AutoBuff_Data[vC]["water"] = true;
AutoBuff_Print("Underwater Breathing spells will require 30 seconds underwater time before casting (Default Behavior).");
TitanAutoBuffStates.Water = 1;
end
end
function AutoBuffTapToggle()
if (AutoBuff_Data[vC]["tap"]) then
AutoBuff_Data[vC]["tap"] = false;
AutoBuff_Print("Will now cast spells while Spirit Tap or Soul Siphon are active.");
TitanAutoBuffStates.Tap = nil;
else
AutoBuff_Data[vC]["tap"] = true;
AutoBuff_Print("Will not cast spells while Spirit Tap or Soul Siphon are active (Default Behavior).");
TitanAutoBuffStates.Tap = 1;
end
end
function AutoBuffScaledToggle()
if (AutoBuff_Data[vC]["scaled"]) then
AutoBuff_Data[vC]["scaled"] = false;
AutoBuff_Print("Warlock Life Tap spell will ignore scaling routines.");
TitanAutoBuffStates.Scaled = nil;
else
AutoBuff_Data[vC]["scaled"] = true;
if (IsAddOnLoaded("BonusScanner")) then
AutoBuff_Print("Warlock Life Tap spell will be scaled for efficiency (Default Behavior).");
else
AutoBuff_Print("Warlock Life Tap scaling is dependent on BonusScanner. You must have that mod loaded before scaling will work.");
end
TitanAutoBuffStates.Scaled = 1;
end
end
function AutoBuffInnerToggle()
if (AutoBuff_Data[vC]["inner"]) then
AutoBuff_Data[vC]["inner"] = false;
AutoBuff_Print("Inner Fire will only cast when totally removed (or recast timer is up).");
TitanAutoBuffStates.Inner = nil;
else
AutoBuff_Data[vC]["inner"] = true;
AutoBuff_Print("Inner Fire will cast when "..AutoBuff_Data[vC]["innercharges"].." charges are left (Default Behavior).");
TitanAutoBuffStates.Inner = 1;
end
end
function AutoBuffOptionsButton_OnDragStart()
if (not AutoBuffOptionsButton_BeingDragged) then
this:StartMoving();
AutoBuffOptionsButton_BeingDragged = true;
end
end
function AutoBuffOptionsButton_OnDragStop()
if (AutoBuffOptionsButton_BeingDragged) then
this:StopMovingOrSizing()
AutoBuffOptionsButton_BeingDragged = false;
end
end
local function AutoBuff_ScaledLifeTap_GetLifeTapMultiplier()
local name,iconPath,tier,column,rank = GetTalentInfo(AFFLICTION_TAB, IMP_LIFETAP_ID);
local multiplier = 1;
if (name == AUTOBUFF_ABILITY_LIFE_TAP_TALENT) then
if rank == 1 then
multiplier = 1.1;
elseif rank == 2 then
multiplier = 1.2;
end
else
AutoBuff_Debug("Talent tree has changed. Cannot determine Improved Life Tap Rank. Assuming 0 ranks.");
end
return multiplier;
end
local function AutoBuff_ScaledLifeTap_GetMaxLifeTapRank()
local rank = 0;
local count = 1;
local foundSpell = false;
while true do
local spellName, spellRank = GetSpellName(count, BOOKTYPE_SPELL);
if spellName == AUTOBUFF_ABILITY_LIFE_TAP then
startPos,endPos,rank = string.find(spellRank, AUTOBUFF_SCALEDLIFETAP_RANKREGEXP);
foundSpell = true;
else
if foundSpell then
break;
end
end
count = count + 1;
end
AutoBuff_Debug("Highest rank of Life Tap is " .. rank);
return rank;
end
local function AutoBuff_ScaledLifeTap_GetDamageBonus()
local damageBonus = 0;
local sentDebug = false;
if IsAddOnLoaded("BonusScanner") then
damageBonus = BonusScanner:GetBonus("SHADOWDMG") + BonusScanner:GetBonus("DMG");
else
AutoBuff_Debug("BonusScanner is not loaded.");
sentDebug = true;
end
if (not sentDebug) then AutoBuff_Debug("BonusScanner reports total shadow damage bonus as: " .. damageBonus); end
return damageBonus;
end
function AutoBuff_ScaledLifeTap_CastLifeTap()
local damageModifier = AutoBuff_ScaledLifeTap_GetDamageBonus();
local lifetapMultiplier = AutoBuff_ScaledLifeTap_GetLifeTapMultiplier();
local maxRank = AutoBuff_ScaledLifeTap_GetMaxLifeTapRank();
local castSpell = false;
for i=maxRank,1,-1 do
if ((i == 1 and overtapEnabled and (UnitManaMax("player") ~= UnitMana("player")))) or ((UnitHealth("player")>=BASE_DAMAGE[i]+RANK_MULTIPLIER[i]*damageModifier and (UnitManaMax("player")-UnitMana("player")>=(BASE_DAMAGE[i]+RANK_MULTIPLIER[i]*damageModifier)*lifetapMultiplier))) then
CastSpellByName(AUTOBUFF_ABILITY_LIFE_TAP .. "(" .. AUTOBUFF_LIST_RANK .. " "..i..")");
AutoBuff_Debug("Casting Scaled Life Tap (Rank " .. i .. ")");
castSpell = true;
break;
end
end
if not castSpell then
AutoBuff_Debug("Canceling Life Tap (it isn't needed right now).");
end
end
-- myAddOns Support
AutoBuff_myAddOns = {
name = 'AutoBuff',
description = 'Auto-self buff',
version = cDefault['v'],
author = 'Dsanai',
category = MYADDONS_CATEGORY_CLASS,
frame = '_AutoBuff',
optionsframe = 'AutoBuffFrame'
};
UIPanelWindows["AutoBuffFrame"] = {area = "center", pushable = 0};
function AutoBuff_OnLoad()
this:RegisterEvent("UNIT_NAME_UPDATE");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("PLAYER_REGEN_ENABLED");
this:RegisterEvent("PLAYER_REGEN_DISABLED");
this:RegisterEvent("LEARNED_SPELL_IN_TAB");
this:RegisterEvent("UI_ERROR_MESSAGE");
this:RegisterEvent("MIRROR_TIMER_START");
this:RegisterEvent("MIRROR_TIMER_STOP");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
SlashCmdList["AUTOBUFF"] = AutoBuff_SlashHandler;
SLASH_AUTOBUFF1 = "/autobuff";
SLASH_AUTOBUFF2 = "/ab";
-- Fubar Includes
if (IsAddOnLoaded("FuBar")) then
FuBarAutoBuff_OnLoad();
end
-- AutoBuff_MFSx = MoveForwardStart; -- [Start] These hook the movement functions.
-- AutoBuff_MBSx = MoveBackwardStart;
-- AutoBuff_TLSx = TurnLeftStart;
-- AutoBuff_TRSx = TurnRightStart;
-- AutoBuff_SLSx = StrafeLeftStart;
-- AutoBuff_SRSx = StrafeRightStart;
-- AutoBuff_MFFx = MoveForwardStop; -- [Stop]
-- AutoBuff_MBFx = MoveBackwardStop;
-- AutoBuff_TLFx = TurnLeftStop;
-- AutoBuff_TRFx = TurnRightStop;
-- AutoBuff_SLFx = StrafeLeftStop;
-- AutoBuff_SRFx = StrafeRightStop;
-- AutoBuff_TARx = ToggleAutoRun; -- [ToggleAutorun]
-- AutoBuff_TASx = TurnOrActionStart;
-- AutoBuff_TAFx = TurnOrActionStop;
--AutoBuff_CMSx = CameraOrSelectOrMoveStart;
--AutoBuff_CMFx = CameraOrSelectOrMoveStop;
--AutoBuff_JMPx = Jump;
--Jump = AutoBuff_JMP;
-- MoveForwardStart = AutoBuff_MFS;
-- MoveBackwardStart = AutoBuff_MBS;
-- TurnLeftStart = AutoBuff_TLS;
-- TurnRightStart = AutoBuff_TRS;
-- StrafeLeftStart = AutoBuff_SLS;
-- StrafeRightStart = AutoBuff_SRS;
-- MoveForwardStop = AutoBuff_MFF;
-- MoveBackwardStop = AutoBuff_MBF;
-- TurnLeftStop = AutoBuff_TLF;
-- TurnRightStop = AutoBuff_TRF;
-- StrafeLeftStop = AutoBuff_SLF;
-- StrafeRightStop = AutoBuff_SRF;
-- ToggleAutoRun = AutoBuff_TAR;
-- TurnOrActionStart = AutoBuff_TAS;
-- TurnOrActionStop = AutoBuff_TAF;
--CameraOrSelectOrMoveStart = AutoBuff_CMS;
--CameraOrSelectOrMoveStop = AutoBuff_CMF;
AutoBuff_WHEELUx = CameraZoomIn;
AutoBuff_WHEELDx = CameraZoomOut;
CameraZoomIn = AutoBuff_WHEELU;
CameraZoomOut = AutoBuff_WHEELD;
AutoBuff_TableConfig();
AutoBuff_PaladinSetup();
-- Apply INDEX numbers to the cSpellList (add element to each, named ["i"] = #
local indexAssignment = 1;
for key, value in cSpellList do
cSpellList[key]["i"] = indexAssignment;
indexAssignment = indexAssignment + 1;
--AutoBuff_Print("cSpellList INDEXING: "..key.." to "..indexAssignment);
end
if ButtonHole then -- ButtonHole support (did it like author said, but don't think it works)
ButtonHole.application.RegisterMod({id='AutoBuffEmerald1800', name='AutoBuff',tooltip='Automatically casts self-buffs, weapon buffs, tracking abilites, and aspects.',buttonFrame='AutoBuffOptionsButton',updateFunction='AutoBuffOptionsButton_OnDragStart'});
end
u = Utility_Class:New();
end
function AutoBuff_ZMI(arg1)
AutoBuff_Check(0);
AutoBuff_ZMIx(arg1);
end
function AutoBuff_ZMO(arg1)
AutoBuff_Check(0);
AutoBuff_ZMOx(arg1);
end
function AutoBuff_OnEvent(event)
if (event == "UNIT_NAME_UPDATE" and arg1 == "player") or (event == "PLAYER_ENTERING_WORLD") then
if (vLoaded.autobuff ~= true) then
vLoaded.player = true;
end
elseif (event == "VARIABLES_LOADED") then
vLoaded.var = true;
if (myAddOnsFrame_Register) then
myAddOnsFrame_Register(AutoBuff_myAddOns);
elseif (myAddOnsFrame) then
myAddOnsList.AutoBuff = AutoBuff_myAddOns;
end
elseif (event == "PLAYER_TARGET_CHANGED") then
--AutoBuff_Check(0);
AutoBuff_TARGET();
elseif (event == "PLAYER_REGEN_ENABLED") then
vCombat = nil;
elseif (event == "PLAYER_REGEN_DISABLED") then
vCombat = true;
elseif (event == "LEARNED_SPELL_IN_TAB") then
AutoBuff_Reload();
elseif (event == "MIRROR_TIMER_START" and arg6=="Breath") then
--AutoBuff_Debug("---MirrorTimerStart with arg6="..arg6);
vBreath = time() +30;
elseif (event == "MIRROR_TIMER_STOP") then
--AutoBuff_Debug("---MirrorTimerStop");
vBreath = 0;
elseif (event == "UI_ERROR_MESSAGE") then
if (arg1 == SPELL_FAILED_AURA_BOUNCED) then
vTime = time() + 30; end -- A more powerful spell is already active
if (arg1 == SPELL_FAILED_ONLY_OUTDOORS) then
vTime = time() + 30; end -- Nature's Grasp trap
if (arg1 == SPELL_FAILED_SILENCED) then
vTime = time() + 5; end -- Silenced
if (arg1 == SPELL_FAILED_REAGENTS) then
vTime = time() + 30; end -- Out of regeant(s)
if (arg1 == SPELL_FAILED_MAINHAND_EMPTY) then
vTime = time() + 30; end -- No main-hand weapon
if (arg1 == SPELL_FAILED_NOT_STANDING) then
vSit = time() + 5; end
end
if (vLoaded.player) and (vLoaded.var) and (vLoaded.autobuff ~= true) then
-- Only load when Character + Vars are loaded
-- Expand Trigger text on GUI if using french locale.
if (GetLocale() == "frFR") then
AutoBuffFrameOptionsTrigger_Text:SetWidth(AutoBuffFrameOptionsTrigger_Text:GetWidth() +40);
end
local vServer = GetCVar("realmName");
local vPlayer = UnitName("player");
vClass = string.lower(UnitClass("player"));
vC = vPlayer.." of "..vServer; -- Used for character specific saved variables
if (vClass == string.lower(AUTOBUFF_CLASS_DRUID)) then -- fix Druid Track Humanoids setup
if not cSpellList[AUTOBUFF_ABILITY_TRACK_HUMANOIDS] then
cSpellList[AUTOBUFF_ABILITY_TRACK_HUMANOIDS] = { ["i"] = table.getn(cSpellList)+1, ["type"] = "self" };
end
elseif (vClass == string.lower(AUTOBUFF_CLASS_HUNTER)) then
--table.insert(cTrackList, AUTOBUFF_ABILITY_TRACK_HUMANOIDS);
if not cTrackList[AUTOBUFF_ABILITY_TRACK_HUMANOIDS] then
cTrackList[AUTOBUFF_ABILITY_TRACK_HUMANOIDS] = "Unknown";
end
end
AutoBuff_LoadDefaults(); -- Check SavedVariables against defaults,
-- if any missing entries, defaults for those entries are loaded
AutoBuff_TableConfig(); -- table.setn's the 3 constant tables, cSpellList, cTrackList and cWeaponList
-- Fix my ['w'] vs. ['water'] screw-up
if (AutoBuff_Data[vC]['w']==true or not AutoBuff_Data[vC]['w']) then
AutoBuff_Data[vC]['w'] = "off";
end
AutoBuff_Reload(); -- Next we run through the constant tables for list of spells,
-- and create temporary ones that have just those that are truly available
if (cPolyList[vClass] == nil) then
AutoBuff_Print("Your language is not supported!");
else
vLoaded.autobuff = true; -- Loading complete.
AutoBuff_Debug("AutoBuff Loaded.");
end
if (AutoBuff_Data[vC]['b']) then -- Set Button Visibility State
AutoBuffOptionsButton:Show();
TitanAutoBuffStates.Button = 1;
else
AutoBuffOptionsButton:Hide();
TitanAutoBuffStates.Button = nil;
end
if (AutoBuff_Data[vC]['d']) then -- Set Debug State
TitanAutoBuffStates.Debug = 1;
else
TitanAutoBuffStates.Debug = nil;
end
if (AutoBuff_Data[vC]["water"]) then -- Set Water State
TitanAutoBuffStates.Water = 1;
else
TitanAutoBuffStates.Water = nil;
end
if (AutoBuff_Data[vC]["tap"]) then -- Set Spirit Tap Block State
TitanAutoBuffStates.Tap = 1;
else
TitanAutoBuffStates.Tap = nil;
end
if (AutoBuff_Data[vC]["scaled"]) then -- Set Life Tap Scaling State
TitanAutoBuffStates.Scaled = 1;
else
TitanAutoBuffStates.Scaled = nil;
end
if (AutoBuff_Data[vC]["inner"]) then -- Set Inner Fire recast State
TitanAutoBuffStates.Inner = 1;
else
TitanAutoBuffStates.Inner = nil;
end
if (AutoBuff_Data[vC]["innercharges"]) then -- Set Inner Fire recast charges
TITAN_AUTOBUFF_INNER = "Priest Inner Fire casts at "..AutoBuff_Data[vC]["innercharges"].." charges left";
else
AutoBuff_Data[vC]["innercharges"] = cDefault["innercharges"];
TITAN_AUTOBUFF_INNER = "Priest Inner Fire casts at "..AutoBuff_Data[vC]["innercharges"].." charges left";
end
if (IsAddOnLoaded("FuBar")) then AutoBuffFu:Update(); end
if (AutoBuff_Data[vC]['e'] == 1) then -- Fix button texture based on On/Off state
AutoBuffOptionsButton:SetNormalTexture(cIconOn);
AutoBuffOptionsButton:SetPushedTexture(cIconOff);
if (AutoBuffFu) then
AutoBuffFu:SetIcon(TITAN_AUTOBUFF_ICON_ON..".tga");
end
if (IsAddOnLoaded("Titan")) then
local button = TitanUtils_GetButton(TITAN_AUTOBUFF_ID, true);
if (button) then
button.registry.icon = TITAN_AUTOBUFF_ICON_ON;
TitanPanelButton_UpdateButton(TITAN_AUTOBUFF_ID);
end
--TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TitanUtils_GetColoredText("Enabled", u.ColorList[string.lower("green")]).."\t"..TitanUtils_GetColoredText("", u.ColorList[string.lower("yellow")]).."\n";
end
TitanAutoBuffStates.Enabled = 1;
else
AutoBuffOptionsButton:SetNormalTexture(cIconOff);
AutoBuffOptionsButton:SetPushedTexture(cIconOn);
if (AutoBuffFu) then
AutoBuffFu:SetIcon(TITAN_AUTOBUFF_ICON_OFF..".tga");
end
if (IsAddOnLoaded("Titan")) then
local button = TitanUtils_GetButton(TITAN_AUTOBUFF_ID, true);
if (button) then
button.registry.icon = TITAN_AUTOBUFF_ICON_OFF;
TitanPanelButton_UpdateButton(TITAN_AUTOBUFF_ID);
end
--TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TitanUtils_GetColoredText("Disabled", u.ColorList[string.lower("red")]).."\t"..TitanUtils_GetColoredText("", u.ColorList[string.lower("yellow")]).."\n";
end
TitanAutoBuffStates.Enabled = nil;
end
end
--UpdateABClickyBox();
end
function AutoBuff_Trigger(spell)
local n = AutoBuff_Option(spell, 't');
if (n == nil) then n = AutoBuff_Option('d', 't'); end
local i,t; local z = { 0, 0, 0, 0, 0, 0 };
for i=6,1,-1 do
t = n - 2^i;
if (t >= 0) then
n = t; z[i] = 1;
end
if (n == 0) then
break; end
end
-- forward, strafe, turn, lmb, rmb
AutoBuff_Debug("["..z[1]..", "..z[2]..", "..z[3]..", "..z[4]..", "..z[5]..", "..z[6].."]");
return z;
end
function AutoBuff_On()
AutoBuff_Data[vC]['e'] = 1;
AutoBuff_Print(AUTOBUFF_ENABLED);
AutoBuffOptionsButton:SetNormalTexture(cIconOn);
AutoBuffOptionsButton:SetPushedTexture(cIconOff);
if (AutoBuffFu) then
AutoBuffFu:SetIcon(TITAN_AUTOBUFF_ICON_ON..".tga");
end
-- Change Titan icon, if applicable
if (IsAddOnLoaded("Titan")) then
local button = TitanUtils_GetButton(TITAN_AUTOBUFF_ID, true);
if (button) then
button.registry.icon = TITAN_AUTOBUFF_ICON_ON;
TitanPanelButton_UpdateButton(TITAN_AUTOBUFF_ID);
end
--TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TitanUtils_GetColoredText("Enabled", u.ColorList[string.lower("green")]).."\t"..TitanUtils_GetColoredText("", u.ColorList[string.lower("yellow")]).."\n";
end
TitanAutoBuffStates.Enabled = 1;
end
function AutoBuff_Off()
AutoBuff_Data[vC]['e'] = 0;
AutoBuff_Print(AUTOBUFF_DISABLED);
AutoBuffOptionsButton:SetNormalTexture(cIconOff);
AutoBuffOptionsButton:SetPushedTexture(cIconOn);
if (AutoBuffFu) then
AutoBuffFu:SetIcon(TITAN_AUTOBUFF_ICON_OFF..".tga");
end
-- Change Titan icon, if applicable
if (IsAddOnLoaded("Titan")) then
local button = TitanUtils_GetButton(TITAN_AUTOBUFF_ID, true);
if (button) then
button.registry.icon = TITAN_AUTOBUFF_ICON_OFF;
TitanPanelButton_UpdateButton(TITAN_AUTOBUFF_ID);
end
--TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TitanUtils_GetColoredText("Disabled", u.ColorList[string.lower("red")]).."\t"..TitanUtils_GetColoredText("", u.ColorList[string.lower("yellow")]).."\n";
end
TitanAutoBuffStates.Enabled = nil;
end
function AutoBuff_HideButton() -- toggle
if (AutoBuff_Data[vC]['b']) then
AutoBuff_Data[vC]['b'] = false;
AutoBuffOptionsButton:Hide();
AutoBuff_Print(AUTOBUFF_BUTTON_HIDDEN);
TitanAutoBuffStates.Button = nil;
else
AutoBuff_Data[vC]['b'] = true;
AutoBuffOptionsButton:Show();
AutoBuff_Print(AUTOBUFF_BUTTON_SHOWN);
TitanAutoBuffStates.Button = 1;
end
end
function AutoBuff_ResetButton() -- reset position
AutoBuffOptionsButton:ClearAllPoints();
AutoBuffOptionsButton:SetPoint("CENTER", "UIParent", "CENTER", 200, 200);
AutoBuff_Data[vC]['b'] = true;
AutoBuffOptionsButton:Show();
TitanAutoBuffStates.Button = 1;
end
function AutoBuff_SlashHandler(msg)
-- Thanks to AutoRepair for this wicked seperator :)
if (msg) then msg = string.lower(msg); end
local _,_,c,p = string.find(msg,"([%w%p]+)%s*(.*)$");
if (c == "on") then
AutoBuff_On();
elseif (c == "off") then
AutoBuff_Off();
elseif (c == "hide") then
AutoBuff_HideButton();
elseif (c == "resetbutton") then
AutoBuff_ResetButton();
elseif (c == "toggle") then
if (p) and (strlen(p) > 0) then
if (vSpellList[p]) then
local g = 1;
if (AutoBuff_Option(p, 'd') == 1) then g = "default"; end
AutoBuff_Option(p, 'd', g, 1);
if (AutoBuff_IsBlessing(p)) then AutoBuff_FixBlessing(p); end if (AutoBuff_IsAura(p)) then AutoBuff_FixAura(p); end
elseif (vWeaponList[p]) then
if (vWeapon == p) then p = "off"; end
AutoBuff_Data[vC]['w'] = p;
AutoBuff_WeaponLoad("show")
else AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, p)); end
else
if (AutoBuff_Data[vC]['e'] == 1) then
AutoBuff_Off();
else
AutoBuff_On();
end
end
elseif (c == "debug") then
AutoBuffDebug();
elseif (c == "water") then
AutoBuffWaterToggle();
elseif (c == "tap") then
AutoBuffTapToggle();
elseif (c == "scaled") then
AutoBuffScaledToggle();
elseif (c == "inner") then
AutoBuffInnerToggle();
elseif (c == "checkbuffs") or (c == "check") or (c == "run") then
AutoBuff_Check(0);
elseif (c == "reset") then
if (p == "confirm") then
AutoBuff_Data[vC] = nil;
AutoBuff_LoadDefaults();
AutoBuff_Reload();
AutoBuff_Print(AUTOBUFF_RESET);
else
AutoBuff_Print(AUTOBUFF_RESET_CONFIRM);
end
elseif (c == "rank") then
local _,_,v,a = string.find(p,"([%w%p]+)%s*(.*)$");
if (v) and (strlen(v) > 0) and ((v == "default") or ((tonumber(v)) and (tonumber(v) > 0) and (tonumber(v) < 20))) then
if (v ~= "default") then v = math.floor(tonumber(v)); end
if (not a) or (strlen(a) == 0) then a = "none"; end
if (not vSpellList[a]) and (not vWeaponList[a]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, a));
elseif (v == "default") or ((vSpellList[a]) and (vSpellList[a]['k']) and (v <= vSpellList[a]['k'])) or ((vWeaponList[a]) and (vWeaponList[a] ~= true) and (v <= vWeaponList[a])) or ((vSealList[a]) and (vSealList[a]['k']) and (v <= vSealList[a]['k'])) then
AutoBuff_Option(a, 'k', v, 1);
else
AutoBuff_Print(AUTOBUFF_NOSUCHRANK);
end
else AutoBuff_Print(AUTOBUFF_RANK_USAGE1.."\n"..AUTOBUFF_RANK_USAGE2.."\n"..AUTOBUFF_RANK_USAGE3.."\n"..AUTOBUFF_RANK_USAGE4); end
elseif (c == "rebuff") then
local _,_,v,a = string.find(p,"([%w%p]+)%s*(.*)$");
if (v) and (strlen(v) > 0) and ((v == "default") or ((tonumber(v)) and (tonumber(v) >= 0) and (tonumber(v) < 300))) then
if (v ~= "default") then v = math.floor(tonumber(v)); end
if (a) and (strlen(a) > 0) and (not vSpellList[a]) and (not vWeaponList[a]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, a));
else AutoBuff_Option(a, 'r', v, 1); end
else AutoBuff_Print(AUTOBUFF_REBUFF_USAGE1.."\n"..AUTOBUFF_REBUFF_USAGE2.."\n"..AUTOBUFF_REBUFF_USAGE3.."\n"..AUTOBUFF_REBUFF_USAGE4.."\n"
..AUTOBUFF_REBUFF_USAGE5); end
elseif (c == "trigger") then
local _,_,v,a = string.find(p,"([%w%p]+)%s*(.*)$");
if (v) and
(strlen(v) > 0) and ((v == "default") or ((tonumber(v)) and (tonumber(v) >= 0) and (tonumber(v) <= 126) and ((tonumber(v) /2) == floor(tonumber(v) /2)))) then
if (a) and (strlen(a) > 0) and (not vSpellList[a]) and (not vWeaponList[a]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, a));
else AutoBuff_Option(a, 't', v, 1); end
else AutoBuff_Print(AUTOBUFF_TRIGGER_USAGE1.."\n"..AUTOBUFF_TRIGGER_USAGE2.."\n"..AUTOBUFF_TRIGGER_USAGE3.."\n"..AUTOBUFF_TRIGGER_USAGE4.."\n"
..AUTOBUFF_TRIGGER_USAGE5); end
elseif (c == "reload") then
AutoBuff_Reload();
AutoBuff_Print(AUTOBUFF_RELOADED);
elseif (c == "combat") then
local _,_,v,a = string.find(p,"([%w%p]+)%s*(.*)$");
if (v) and (strlen(v) > 0) and ((v == "default") or (v == ">") or (v == "<") or (v == "<>")) then
if (v == "<") then v = 1; elseif (v == ">") then v = 2; elseif (v == "<>") then v = 3; end
if (a) and (strlen(a) > 0) and (not vSpellList[a]) and (not vWeaponList[a]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, a));
else AutoBuff_Option(a, 'c', v, 1); end
else AutoBuff_Print(AUTOBUFF_COMBAT_USAGE1.."\n"..AUTOBUFF_COMBAT_USAGE2.."\n"..AUTOBUFF_COMBAT_USAGE3.."\n"..AUTOBUFF_COMBAT_USAGE4
.."\n"..AUTOBUFF_COMBAT_USAGE5); end
elseif (c == "party") then
local _,_,v,a = string.find(p,"([%w%p]+)%s*(.*)$");
if (v) and (strlen(v) > 0) and ((v == "default") or (v == ">") or (v == "<") or (v == "<>")) then
if (v == "<") then v = 1; elseif (v == ">") then v = 2; elseif (v == "<>") then v = 3; end
if (a) and (strlen(a) > 0) and (not vSpellList[a]) and (not vWeaponList[a]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, a));
else AutoBuff_Option(a, 'p', v, 1); end
else AutoBuff_Print(AUTOBUFF_PARTY_USAGE1.."\n"..AUTOBUFF_PARTY_USAGE2.."\n"..AUTOBUFF_PARTY_USAGE3.."\n"..AUTOBUFF_PARTY_USAGE4
.."\n"..AUTOBUFF_PARTY_USAGE5); end
elseif (c == "track") then
if (p) and (strlen(p) > 0) then
if (p == "auto") then p = nil;
elseif (p ~= "off") and (not vTrackList[p]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, p)); end
AutoBuff_Data[vC]['t'] = p;
AutoBuff_TrackLoad("show")
else
AutoBuff_Print(AUTOBUFF_TRACK_USAGE1.."\n"..AUTOBUFF_TRACK_USAGE2);
end
elseif (c == "aspect") then
if (p) and (strlen(p) > 0) then
if (p == "auto") then p = nil;
elseif (p ~= "off") and (not vAspectList[p]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, p)); end
AutoBuff_Data[vC]['a'] = p;
AutoBuff_AspectLoad("show");
else
AutoBuff_Print(AUTOBUFF_ASPECT_USAGE1.."\n"..AUTOBUFF_ASPECT_USAGE2);
end
elseif (c == "seal") then
if (p) and (strlen(p) > 0) then
if (p == "auto") then p = nil;
elseif (p ~= "off") and (not vSealList[p]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, p)); end
AutoBuff_Data[vC]['seal'] = p;
AutoBuff_SealLoad("show");
else
AutoBuff_Print(AUTOBUFF_SEAL_USAGE1.."\n"..AUTOBUFF_SEAL_USAGE2);
end
elseif (c == "weapon") then
if (p) and (strlen(p) > 0) then
if (p == "auto") then p = nil;
elseif (p ~= "off") and (not vWeaponList[p]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, p)); end
AutoBuff_Data[vC]['w'] = p;
AutoBuff_WeaponLoad("show")
else
AutoBuff_Print(AUTOBUFF_WEAPON_USAGE1.."\n"..AUTOBUFF_WEAPON_USAGE2);
end
elseif (c == "mana") then
local _,_,v,a = string.find(p,"([%w%p]+)%s*(.*)$");
if (v) and (strlen(v) > 0) and ((v == "default") or ((tonumber(v)) and (tonumber(v) >= -100) and (tonumber(v) < 100))) then
if (v ~= "default") then v = math.floor(tonumber(v)); end
if (a) and (strlen(a) > 0) and (not vSpellList[a]) and (not vWeaponList[a]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, a));
else AutoBuff_Option(a, 'm', v, 1); end
else AutoBuff_Print(AUTOBUFF_MANA_USAGE1.."\n"..AUTOBUFF_MANA_USAGE2.."\n"..AUTOBUFF_MANA_USAGE3); end
elseif (c == "health") then
local _,_,v,a = string.find(p,"([%w%p]+)%s*(.*)$");
if (v) and (strlen(v) > 0) and ((v == "default") or ((tonumber(v)) and (tonumber(v) >= -100) and (tonumber(v) < 100))) then
if (v ~= "default") then v = math.floor(tonumber(v)); end
if (a) and (strlen(a) > 0) and (not vSpellList[a]) and (not vWeaponList[a]) then AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, a));
else AutoBuff_Option(a, 'h', v, 1); end
else AutoBuff_Print(AUTOBUFF_HEALTH_USAGE1.."\n"..AUTOBUFF_HEALTH_USAGE2.."\n"..AUTOBUFF_HEALTH_USAGE3); end
elseif (c == "innercharges") then
local _,_,v = string.find(p,"([%w%p]+)$");
if (v) and (strlen(v) > 0) and ((v == "default") or ((tonumber(v)) and (tonumber(v) > 0) and (tonumber(v) <= 19))) then
if (v ~= "default") then
AutoBuff_Data[vC]["innercharges"] = math.floor(tonumber(v));
else
AutoBuff_Data[vC]["innercharges"] = 5;
end
TITAN_AUTOBUFF_INNER = "Priest Inner Fire casts at "..AutoBuff_Data[vC]["innercharges"].." charges left";
AutoBuff_Print("Inner Fire will now be cast when there are "..AutoBuff_Data[vC]["innercharges"].." charges left");
if (IsAddOnLoaded("FuBar")) then AutoBuffFu:Update(); end
else AutoBuff_Print(AUTOBUFF_INNERCHARGES_USAGE1.."\n"..AUTOBUFF_INNERCHARGES_USAGE2.."\n"..AUTOBUFF_INNERCHARGES_USAGE3); AutoBuff_Print("It is currently set to "..AutoBuff_Data[vC]["innercharges"].."."); end
elseif (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) and (c == "succubus") then
if (AutoBuff_Data[vC]['s'] == nil) then
AutoBuff_Data[vC]['s'] = 1;
AutoBuff_Print("Succubus, |cffa0ffa0"..AUTOBUFF_ENABLED..FONT_COLOR_CODE_CLOSE);
else
AutoBuff_Data[vC]['s'] = nil;
AutoBuff_Print("Succubus, |cffffa0a0"..AUTOBUFF_DISABLED..FONT_COLOR_CODE_CLOSE);
end
elseif (c == "enable") then
if (p) and (strlen(p) > 0) then
if (vSpellList[p]) then AutoBuff_Option(p, 'd', "default", 1); if (AutoBuff_IsBlessing(p)) then AutoBuff_FixBlessing(p); end if (AutoBuff_IsAura(p)) then AutoBuff_FixAura(p); end
else AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, p)); end
else
AutoBuff_Print(AUTOBUFF_SETABILITY_ENABLE_USAGE1.."\n"..AUTOBUFF_SETABILITY_ENABLE_USAGE2.."\n"
..AUTOBUFF_SETABILITY_ENABLE_USAGE3.."\n"..AUTOBUFF_SETABILITY_ENABLE_USAGE4);
end
elseif (c == "disable") then
if (p) and (strlen(p) > 0) then
if (vSpellList[p]) then AutoBuff_Option(p, 'd', 1, 1);
else AutoBuff_Print(string.format(AUTOBUFF_NOTSUPPORTED, p)); end
else
AutoBuff_Print(AUTOBUFF_SETABILITY_DISABLE_USAGE1.."\n"..AUTOBUFF_SETABILITY_DISABLE_USAGE2.."\n"
..AUTOBUFF_SETABILITY_DISABLE_USAGE3.."\n"..AUTOBUFF_SETABILITY_DISABLE_USAGE4);
end
elseif (c == "list") then
local i,x,v,k,m;
AutoBuff_Seperator();
local default, spell, weapon, track, aspect, seal, text = "", "", "", "", "", "", "";
text = AUTOBUFF_LIST_START.."\n-\n";
i = 1;
while (i > -1) do
x = AutoBuff_SpellList(i);
if (not x) then break; end
x = string.lower(x);
if (vSpellList[x]) then spell = spell..AutoBuff_ListItem(x).."\n"; end
i=i+1;
end
for iName, xName in vWeaponList do
weapon = weapon..AutoBuff_ListItem(iName).."\n";
end
for iName, xName in vTrackList do
track = track..AutoBuff_ListItem(iName).."\n";
end
for iName, xName in vAspectList do
aspect = aspect..AutoBuff_ListItem(iName).."\n";
end
for iName, xName in vSealList do
seal = seal..AutoBuff_ListItem(iName).."\n";
end
default = AutoBuff_ListItem('d');
if (strlen(spell) >0) then text = text..spell.."-\n"; end
if (strlen(weapon) >0) then text = text..weapon.."-\n"; end
if (strlen(track) >0) then text = text..track.."-\n"; end
if (strlen(aspect) >0) then text = text..aspect.."-\n"; end
if (strlen(seal) >0) then text = text..seal.."-\n"; end
text = text..string.upper(AUTOBUFF_LIST_DEFAULT).." - "..default.."\n-";
AutoBuff_Print(text);
elseif (c == "help") then
AutoBuff_Print(AUTOBUFF_USAGE.."\n"..AUTOBUFF_USAGE_LIST);
else
AutoBuffFrame_Toggle();
end
end
function AutoBuff_ListItem(i)
local m = "";
if (i ~= 'd') then m = m.."|cffffffa0"..string.upper(i)..FONT_COLOR_CODE_CLOSE.." - "; end
if ((AutoBuff_Data[vC]['x'][i]) and (AutoBuff_Data[vC]['x'][i]['d'] == 1)) or ((vTrackList[i]) and (vTrack ~= i)) or ((vWeaponList[i]) and (vWeapon ~= i)) or ((vAspectList[i]) and (vAspect ~= i)) or ((vSealList[i]) and (vSeal ~= i)) then return m.."|cffff5050"..AUTOBUFF_LIST_DISABLED..FONT_COLOR_CODE_CLOSE;
-- EMERALD: I think this is where the "change aspect, AB disables" is happening. Why was this written?
elseif (vTrackList[i]) then return m..AUTOBUFF_ENABLED;
elseif (vAspectList[i]) then return m..AUTOBUFF_ENABLED;
elseif (vSealList[i]) then return m..AUTOBUFF_ENABLED; end
if (AutoBuff_Data[vC]['x'][i] == nil) then return m..AUTOBUFF_LIST_USINGDEFAULTS; end
local trigger, health, mana, rebuff, combat, rank = "","","","","","";
for v, k in AutoBuff_Data[vC]['x'][i] do
if (v == 'h') then
if (k < 0) then t = "<"; k = k * -1;
else t = ">"; end
health = "|cffffa0a0"..AUTOBUFF_LIST_HEALTH..", "..t..k.."%"..FONT_COLOR_CODE_CLOSE.." ";
elseif (v == 'm') then
if (k < 0) then t = "<"; k = k * -1;
else t = ">"; end
mana = "|cff5e9ae4"..AUTOBUFF_LIST_MANA..", "..t..k.."%"..FONT_COLOR_CODE_CLOSE.." ";
elseif (v == 'c') then
if (k == 1) then combat = AUTOBUFF_LIST_COMBAT_IN; end
if (k == 2) then combat = AUTOBUFF_LIST_COMBAT_OUT; end
if (k == 3) then combat = AUTOBUFF_LIST_COMBAT_ALWAYS; end
combat = "|cfff0802e"..combat..FONT_COLOR_CODE_CLOSE.." ";
--elseif (v == 'r') and (not AutoBuff_IsAura(i)) and (i ~= string.lower(AUTOBUFF_ABILITY_TRUESHOTAURA)) then
elseif (v == 'r') and (not AutoBuff_IsAura(i)) then
rebuff = "|cffa0a0a0"..string.format(AUTOBUFF_LIST_REBUFF,k)..FONT_COLOR_CODE_CLOSE.." ";
elseif (v == 't') then
trigger = "|cffe0e0e0"..AUTOBUFF_LIST_TRIGGER..", "..k..FONT_COLOR_CODE_CLOSE.." ";
elseif (v == 'k') then
rank = "|cffffa0ff"..AUTOBUFF_LIST_RANK..", "..k..FONT_COLOR_CODE_CLOSE.." ";
end
end
if (strlen(trigger..health..mana..rebuff..combat..rank) < 1) then rebuff = AUTOBUFF_LIST_USINGDEFAULTS; end
m = m..trigger..health..mana..rebuff..combat..rank;
return m;
end
function AutoBuff_IsBlessing(n)
local a,d;
n = string.lower(n);
for _, d in cBlessing do
a = string.lower(d);
if (n == a) then a = 1; break; end
end
if (a == 1) then return 1; end
end
function AutoBuff_IsAura(n)
local a,d;
n = string.lower(n);
for _, d in cAura do
a = string.lower(d);
if (n == a) then a = 1; break; end
end
if (a == 1) then return 1; end
end
function AutoBuff_FixBlessing(b)
b = string.lower(b);
local n,a;
for _, n in cBlessing do
a = string.lower(n);
if (a ~= b) and (vSpellList[a]) then AutoBuff_Option(a, 'd', 1); end
end
end
function AutoBuff_FixAura(b)
b = string.lower(b);
local n,a;
for _, n in cAura do
a = string.lower(n);
if (a ~= b) and (vSpellList[a]) then AutoBuff_Option(a, 'd', 1); end
end
end
function AutoBuff_PaladinSetup()
local i,n,d,o,x;
x = table.getn(cSpellList);
o = 0;
while (o > -1) do
n = cBlessing[o];
if (not n) then break; end
i=0;
cSpellList[n] = { ['type'] = "friendly", ['i'] = (x+o+1) };
for _, d in cBlessing do
if (n ~= d) then cSpellList[n][i] = string.lower(d); i=i+1; end
end
for _, d in cBlessingOther do
cSpellList[n][i] = string.lower(d); i=i+1
end
o=o+1;
end
x = x+o;
o = 0;
while (o > -1) do
n = cAura[o];
if (not n) then break; end
i=0;
cSpellList[n] = { ['type'] = "self", ['i'] = (x+o+1) };
for _, d in cAura do
if (n ~= d) then cSpellList[n][i] = string.lower(d); i=i+1; end
end
o=o+1;
end
end
function AutoBuff_BuffName(i, filter)
--AutoBuffTooltip:SetOwner(WorldFrame,"ANCHOR_NONE");
if (filter == nil) then filter = "HELPFUL|HARMFUL"; end
local iBuff,iBuffConc = GetPlayerBuff(i, filter);
if (iBuff >= 0) and (iBuff < 24) then
--local tooltip = AutoBuffTooltip;
--tooltip:Hide();
--tooltip:SetPlayerBuff(iBuff);
local tooltip = AutoBuffTooltip;
tooltip:SetOwner(tooltip,"ANCHOR_NONE");
tooltip:ClearLines();
tooltip:SetPlayerBuff(iBuff);
local toolTipText = getglobal("AutoBuffTooltipTextLeft1");
if (toolTipText) then
local name = toolTipText:GetText();
if ( name ~= nil ) then return iBuff, name, iBuffConc; end
end
end
end
function AutoBuff_IsBuffActive(buffname)
--AutoBuffTooltip:SetOwner("UIParent", "ANCHOR_NONE");
if (not buffname) then
return;
end;
unit="player";
local i = 1;
while UnitBuff(unit, i) do
AutoBuffTooltip:ClearLines();
AutoBuffTooltip:SetUnitBuff(unit,i);
if string.find(AutoBuffTooltipTextLeft1:GetText() or "", buffname) then
return true, i
end;
i = i + 1;
end;
end
function AutoBuff_IsDebuffActive(buffname)
--AutoBuffTooltip:SetOwner("UIParent", "ANCHOR_NONE");
if (not buffname) then
return;
end;
unit="player";
local i = 1;
while UnitDebuff(unit, i) do
AutoBuffTooltip:ClearLines();
AutoBuffTooltip:SetUnitDebuff(unit,i);
if string.find(AutoBuffTooltipTextLeft1:GetText() or "", buffname) then
return true, i
end;
i = i + 1;
end;
end
function AutoBuff_BuffLine(i, line, filter)
--AutoBuffTooltip:SetOwner(WorldFrame,"ANCHOR_NONE");
if (filter == nil) then filter = "HELPFUL|HARMFUL"; end
local iBuff,_ = GetPlayerBuff(i, filter);
if (iBuff >= 0) and (iBuff < 24) then
--local tooltip = AutoBuffTooltip;
--tooltip:SetPlayerBuff(iBuff);
--tooltip:Hide();
local tooltip = AutoBuffTooltip;
tooltip:SetOwner(tooltip,"ANCHOR_NONE");
tooltip:ClearLines();
tooltip:SetPlayerBuff(iBuff);
local toolTipText = getglobal("AutoBuffTooltipTextLeft"..line);
if (toolTipText) then
local name = toolTipText:GetText();
if ( name ~= nil ) then return iBuff, name; end
end
end
end
function AutoBuff_ShieldMod_SetCTShieldMod() -- EMERALD
--local highestRank = AutoBuff_GetHighestSpellRank("Power Word: Shield");
local highestRank = AutoBuff_Rank(AUTOBUFF_ABILITY_PWSHIELD);
highestRank = tonumber(highestRank);
AutoBuff_Debug("highestRank="..tostring(highestRank));
local dmg;
if (highestRank) then
if (highestRank==1) then
dmg = "48";
elseif (highestRank==2) then
dmg = "94";
elseif (highestRank==3) then
dmg = "166";
elseif (highestRank==4) then
dmg = "242";
elseif (highestRank==5) then
dmg = "301";
elseif (highestRank==6) then
dmg = "381";
elseif (highestRank==7) then
dmg = "484";
elseif (highestRank==8) then
dmg = "605";
elseif (highestRank==9) then
dmg = "763";
elseif (highestRank==10) then
dmg = "942";
end
if (dmg) then
CT_ShieldMod_ShieldDamageLeft = tonumber(dmg);
CT_ShieldFrame:Hide();
CT_ShieldFrame:Show();
end
end
end
function AutoBuff_CanCast(spell, trigger, ltime)
local translatedSpell = spell;
if (spell=="track") then translatedSpell = string.lower(vTrack);
elseif (spell=="aspect") then translatedSpell = string.lower(vAspect);
elseif (spell=="seal") then translatedSpell = string.lower(vSeal);
end
local t = AutoBuff_Trigger(translatedSpell);
AutoBuff_Debug("CanCast: trigger="..trigger..", translatedSpell="..translatedSpell);
if (AutoBuff_CheckCombat(translatedSpell)) then AutoBuff_Debug("AutoBuff_CheckCombat=true"); else AutoBuff_Debug("AutoBuff_CheckCombat=false"); end
if (AutoBuff_CheckParty(translatedSpell)) then AutoBuff_Debug("AutoBuff_CheckParty=true"); else AutoBuff_Debug("AutoBuff_CheckParty=false"); end
if (AutoBuff_Mana(translatedSpell)) then AutoBuff_Debug("AutoBuff_Mana=true"); else AutoBuff_Debug("AutoBuff_Mana=false"); end
if (AutoBuff_Health(translatedSpell)) then AutoBuff_Debug("AutoBuff_Health=true"); else AutoBuff_Debug("AutoBuff_Health=false"); end
if (AutoBuff_Option(translatedSpell,'d')) then AutoBuff_Debug("Enabled=false"); else AutoBuff_Debug("Enabled=true"); end
--if () then AutoBuff_Debug(""); else AutoBuff_Debug(""); end
--AutoBuff_Debug("");
if (translatedSpell == string.lower(AUTOBUFF_ABILITY_UNENDING_BREATH) or translatedSpell == string.lower(AUTOBUFF_ABILITY_WATER_BREATHING)) then
local ltimer = time();
if (AutoBuff_Data[vC]["water"]) then
if (vBreath > ltimer) or vBreath == 0 then
AutoBuff_Debug(" Cannot cast "..translatedSpell.." because you haven't been underwater for more than 30 seconds. Type \"/autobuff water\" to change this behavior.");
AutoBuff_Debug(" vBreath="..vBreath..", ltimer="..ltimer);
return nil;
end
end
end
if ((trigger == 0) or (t[trigger] == 1)) and
(not AutoBuff_Option(translatedSpell,'d')) and
(AutoBuff_CheckCombat(translatedSpell)) and
(AutoBuff_CheckParty(translatedSpell)) and
((not ltime) or ((ltime ~= -1) and (AutoBuff_Rebuff(translatedSpell, ltime)))) and
(((spell == "track") or (spell == "aspect")) or
(AutoBuff_Mana(translatedSpell)) and
(AutoBuff_Health(translatedSpell))) then
local spell_texture = GetSpellTexture(AutoBuff_Ability(translatedSpell), BOOKTYPE_SPELL);
if (spell=="track") then return 1; end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) then
if (spell == string.lower(AUTOBUFF_ABILITY_SOULLINK)) then
if (UnitHealth("pet") > 1) then -- Only cast Soul Link if the demon is out
-- Scan debuffs, don't cast if your pet is Banished or Enslaved
local i = 1;
while (UnitDebuff("pet", i)) do
if (UnitDebuff("pet", i)==cPre..cEnslave or UnitDebuff("pet", i)==cPre..cBanish) then
return nil;
end
i = i + 1;
end
return 1;
end
elseif (spell == string.lower(AUTOBUFF_ABILITY_DARK_PACT)) then
if (UnitMana("pet") > 1) then -- Only Dark Pact if demon is out and has mana
if ((UnitManaMax("player")-UnitMana("player")) >= 150) then -- Only if needed
return 1;
else
return nil;
end
else
return nil;
end
else
return 1;
end
elseif (vClass == string.lower(AUTOBUFF_CLASS_ROGUE)) then
-- Don't cast any spells when rogue is stealthed
local i = 1;
while (UnitBuff("player", i)) do
if (UnitBuff("player", i)==cPre..cStealth) then
AutoBuff_Debug("ROGUE: Can't cast spells in Stealth Mode!");
return nil;
end
i = i + 1;
end
return 1;
else
return 1;
end
end
end
function AutoBuff_Check(trigger) -- EMERALD: TriggerFire
-- Check for frames that, while visible, should block spellcasting
if (CastingBarFrame and CastingBarFrame:IsVisible()) then return; end
if (eCastingBar and eCastingBar:IsVisible()) then return; end
if (Perl_ArcaneBarFrame and Perl_ArcaneBarFrame:IsVisible()) then return; end
if (LootFrame and LootFrame:IsVisible()) then AutoBuff_Debug("Can't cast: LootFrame is visible!"); return; end
local ltime = time();
if (vTime > ltime) or (vSit > ltime) then return; end
if (AutoBuff_Data[vC]['e'] == 1) and
(not UnitOnTaxi("player")) and
(not CursorHasItem()) and
(not CursorHasSpell()) and
(not SpellIsTargeting()) and
(not UnitIsDeadOrGhost("player")) then
AutoBuff_Debug("----------------------------");
AutoBuff_Debug("### Beginning buff-check ###");
local buffline,mounted,poly,buffIndex,buffName,buffConc,i,done,iName,xName,iiName,xxName,id;
local polyShadowform = nil;
local polyMoon = nil;
local polyCat = nil;
local polyBlessing = nil;
local iBuff = {};
for i=0,23 do -- Cycle currently active buffs
buffIndex, buffName, buffConc = AutoBuff_BuffName(i, "HELPFUL|HARMFUL");
if (buffName) then
-- This is done outside of the Class Poly loop because we don't store Greater Blessings in Class Poly's
if (vClass == string.lower(AUTOBUFF_CLASS_PALADIN)) then
if (cBlessingPoly[buffName]) then -- A greater blessing was found on the player
polyBlessing = string.lower(buffName);
end
end
buffName = string.lower(buffName);
for iName, xName in cPolyList[vClass] do -- Cycle list of Class Poly's
-- Don't POLY for AUTOBUFF_POLY_PRIEST_SPIRITTAP if mana is currently full
if (vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
if (buffName == string.lower(AUTOBUFF_POLY_PRIEST_SPIRITTAP) and AutoBuff_Data[vC]["tap"]) then
AutoBuff_Debug(" Spirit Tap is currently active...");
if (UnitMana("player")==UnitManaMax("player")) then
-- Mana is full, we can go ahead and cast even though Spirit Tap is active.
AutoBuff_Debug(" Player's Mana is full, ignoring Spirit Tap.");
else
AutoBuff_Debug(" Player's Mana is regenerating -- blocking other spells from firing.");
poly = string.lower(iName);
do break end;
end
end
-- Prevent Holy spells from firing while in Shadowform
if (buffName == string.lower(AUTOBUFF_POLY_PRIEST_SHADOWFORM)) then
polyShadowform = true;
end
elseif (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) then
if (buffName == string.lower(AUTOBUFF_POLY_WARLOCK_SOULSIPHON) and AutoBuff_Data[vC]["tap"]) then
AutoBuff_Debug(" Soul Siphon is currently active...");
if (UnitMana("player")==UnitManaMax("player")) then
-- Mana is full, we can go ahead and cast even though Soul Siphon is active.
AutoBuff_Debug(" Player's Mana is full, ignoring Soul Siphon.");
else
AutoBuff_Debug(" Player's Mana is regenerating -- blocking other spells from firing.");
poly = string.lower(iName);
do break end;
end
end
elseif (vClass == string.lower(AUTOBUFF_CLASS_DRUID)) then
-- Don't POLY for AUTOBUFF_POLY_DRUID_CAT if casting Track Humanoids
if (buffName == string.lower(AUTOBUFF_POLY_DRUID_CAT)) then
polyCat = true;
-- Don't allow Mark of the Wild if you're a Moonkin
elseif (buffName == string.lower(AUTOBUFF_POLY_DRUID_MOONKIN)) then
polyMoon = true;
end
end
if (buffName == string.lower(iName)) then
if (string.lower(iName)~=string.lower(AUTOBUFF_POLY_DRUID_CAT) and string.lower(iName)~=string.lower(AUTOBUFF_POLY_DRUID_MOONKIN) and string.lower(iName)~=string.lower(AUTOBUFF_POLY_PRIEST_SHADOWFORM) and string.lower(iName)~=string.lower(AUTOBUFF_POLY_PRIEST_SPIRITTAP) and string.lower(iName)~=string.lower(AUTOBUFF_POLY_WARLOCK_SOULSIPHON)) then
-- Only break if this poly isn't polyCat, polyMoon, or polyShadowform (nor SpiritTap)
AutoBuff_Debug(" STOP -- Poly found: "..iName);
poly = string.lower(iName);
do break end;
end
end
-- PRIEST LOGIC:
-- SpiritTap+FullMana = GO
-- SpiritTap+FullMana+Shadowform = GO
-- SpiritTap+LowMana = STOP
-- SpiritTap+LowMana+Shadowmeld(ALL_POLY) = STOP
end -- for iName, xName in cPolyList[vClass] do
for iName, xName in cPolyList["all"] do -- Cycle list of All Poly's (invis, shadowmeld)
if (buffName == string.lower(iName)) then
AutoBuff_Debug(" STOP -- Poly found: "..iName);
poly = string.lower(iName);
do break end;
end
end
if (buffConc == 1) then
iBuff[buffName] = -1;
else
iBuff[buffName] = GetPlayerBuffTimeLeft(buffIndex);
end
-- MOUNT CHECK
_, buffline = AutoBuff_BuffLine(i, 2, "HELPFUL|HARMFUL");
if (buffline) then
buffline = string.lower(buffline);
if ((buffline == string.lower(AUTOBUFF_MOUNT_60)) or (buffline == string.lower(AUTOBUFF_MOUNT_100)) or (buffline == string.lower(AUTOBUFF_MOUNT_60_2)) or (buffline == string.lower(AUTOBUFF_MOUNT_100_2)) or (buffline == string.lower(AUTOBUFF_MOUNT_60_3)) or (buffline == string.lower(AUTOBUFF_MOUNT_100_3))) then
mounted = true;
end
end -- if (buffline) then
end -- if (buffName) then
end -- for i=0,23 do
for i=1,10 do buffName = UnitDebuff("player",i);
if (buffName and buffName == cPre..cSheep) then
poly = "Sheep";
end
end
if (poly == nil) then
if (not mounted or (mounted and vClass==string.lower(AUTOBUFF_CLASS_PALADIN))) then
for iName, xName in vSpellList do
local several = nil;
local polyCatCast = nil;
local polyMoonCast = nil;
local polyRogue = nil;
local polyPaladin = nil;
local polyRejuv = nil;
if (AutoBuff_CanCast(iName, trigger, iBuff[iName])) then
for iiName, xxName in vSpellList[iName] do
if (iiName ~= "type") and (iBuff[xxName]) then several = true; break; end
end
if (not several) then
id = AutoBuff_Ability(iName);
if (AutoBuff_Cooldown(id) == 0) then
if (vClass==string.lower(AUTOBUFF_CLASS_PRIEST) and polyShadowform) then
-- put Holy spells in if statements, below, to prevent casting those spells in Shadow form
if (iName == string.lower(AUTOBUFF_ABILITY_FEARWARD) or iName == string.lower(AUTOBUFF_ABILITY_RENEW)) then
AutoBuff_Debug(" Cannot cast "..iName.." - Shadowform is active.");
else
polyShadowform = nil;
end
elseif (vClass==string.lower(AUTOBUFF_CLASS_ROGUE)) then
if (iName == string.lower(AUTOBUFF_ABILITY_FEINT) or iName == string.lower(AUTOBUFF_ABILITY_BLADE_FLURRY)) then
if (UnitAffectingCombat("player") and UnitExists("target") and UnitReaction("target","player") <= 4 and CheckInteractDistance("target",1)) then
-- Only if (1) in combat, (2) has target, (3) target is attackable, (4) 5 yards or closer.
polyRogue = nil;
else
polyRogue = true;
AutoBuff_Debug(" Cannot cast "..iName.." - Combat conditions are not correct (in combat, target attackable, 5 yards or less)");
end
end
elseif (vClass==string.lower(AUTOBUFF_CLASS_DRUID) and polyMoon and iName ~= string.lower(AUTOBUFF_ABILITY_TRACK_HUMANOIDS) and iName ~= string.lower(AUTOBUFF_ABILITY_COWER)) then
-- put Balance spells in if statements, below, to prevent casting those spells in Moonkin form
if (iName == string.lower(AUTOBUFF_ABILITY_MOTW) or iName == string.lower(AUTOBUFF_ABILITY_REJUV)) then
AutoBuff_Debug(" Cannot cast "..iName.." - Moonkin form is active.");
polyMoonCast = true;
else
polyMoonCast = nil;
end
elseif (vClass==string.lower(AUTOBUFF_CLASS_DRUID)) then
if (iName == string.lower(AUTOBUFF_ABILITY_TRACK_HUMANOIDS) or iName == string.lower(AUTOBUFF_ABILITY_COWER)) then
if (polyCat) then
if (iName == string.lower(AUTOBUFF_ABILITY_TRACK_HUMANOIDS)) then
if (GetTrackingTexture()) then
local iconTrack = GetTrackingTexture();
AutoBuff_Debug(" Track already enabled: "..iconTrack);
if (iconTrack==cPre..cTracking) then
polyCatCast = true; -- don't recast if it's already on!
end
else
polyCatCast = nil; --polyCat = nil; -- Can cast, clear polyCatCast.
end
elseif (iName == string.lower(AUTOBUFF_ABILITY_COWER)) then
if (UnitAffectingCombat("player") and UnitExists("target") and UnitReaction("target","player") <= 4 and CheckInteractDistance("target",1)) then
-- Only if (1) in combat, (2) has target, (3) target is attackable, (4) 5 yards or closer.
polyCatCast = nil; -- Can cast, clear polyCatCast.
else
AutoBuff_Debug(" Cannot cast "..iName.." - Combat conditions are not correct (in combat, target attackable, 5 yards or less)");
polyCatCast = true;
end
end
elseif (polyMoon) then
AutoBuff_Debug(" Cannot cast "..iName.." - You're not in cat form.");
polyCatCast = true;
else -- not polyCat
AutoBuff_Debug(" Cannot cast "..iName.." - You're not in cat form.");
polyCatCast = true;
end
else
if (polyCat) then
AutoBuff_Debug(" Cannot cast "..iName.." - Only Track Humanoids or Cower can be cast in cat form.");
polyCatCast = true;
end
end
elseif (vClass == string.lower(AUTOBUFF_CLASS_PALADIN)) then
if (mounted) then
if (not AutoBuff_IsAura(iName)) then
polyPaladin = true; -- don't cast anything other than an Aura while mounted
end
elseif (polyBlessing and polyBlessing==iName) then
-- Lesser spell (same effect as the Greater Blessing on the player currently) attempting to be cast
AutoBuff_Debug(" Cannot cast "..iName.." - A Greater Blessing with the same effect is already active.");
polyPaladin = true;
end
--elseif (vClass==string.lower(AUTOBUFF_CLASS_)) then
end
if (iName==string.lower(AUTOBUFF_ABILITY_REJUV) or iName==string.lower(AUTOBUFF_ABILITY_RENEW)) then
local ltime = time();
if (vRejuv > ltime) then polyRejuv = true; end
end
-- CASTING ROUTINE
if (not polyShadowform and not polyCatCast and not polyMoonCast and not polyRogue and not polyPaladin and not polyRejuv) then
AutoBuff_Debug(" Casting Buff: "..iName);
done = true;
AutoBuff_UseAbility(iName,xName.type);
AutoBuff_Debug(" iName="..iName);
if (iName==string.lower(AUTOBUFF_ABILITY_PWSHIELD)) then
-- Set CT_ShieldMod's initial damage ounter
if (CT_ShieldFrame) then
AutoBuff_ShieldMod_SetCTShieldMod();
AutoBuff_Debug("Setting CT_Shield");
end
end
if (iName==string.lower(AUTOBUFF_ABILITY_REJUV) or iName==string.lower(AUTOBUFF_ABILITY_RENEW)) then
-- Set vRejuv, which allows the spell time to work before it can fire again
vRejuv = time() + 15; -- Rejuv is 12 sec, but Renew is 15 (and Improved Rejuv Duration is 15), so I'm going with the higher common number.
end
do break end;
end
end
end
end
end
if (not done) then
local m,o,_,_,_,_ = GetWeaponEnchantInfo();
if (o) then o = floor(o/1000); end
if (vWeapon) and AutoBuff_CanCast(vWeapon, trigger, o) then
--local mhHasItem,_,_=GameTooltip:SetInventoryItem("player",16);
--local ohHasItem,_,_=GameTooltip:SetInventoryItem("player",17);
--if (mhHasItem or ohHasItem) then
AutoBuff_Debug(" Weapon Buff: "..vWeapon);
AutoBuff_UseAbility(vWeapon,'self');
--else
--AutoBuff_Debug(" Weapon Buff cannot be cast. You have no melee weapon equipped.");
--end
end
local a, b, c, d, e;
if (vWeapon) then a = vWeapon; else a = "false"; end
if (m) then
b = m;
if (AutoBuff_Rebuff(vWeapon, floor(o/1000))) then c = "true"; else c = "false"; end
else b = "false"; c = "none";
end
if (AutoBuff_Mana(vWeapon)) then d = "true"; else d = "false"; end
if (AutoBuff_Health(vWeapon)) then e = "true"; else e = "false"; end
AutoBuff_Debug(" Weapon, "..a.."; m, "..b.."; rebuff, "..c.."; mana, "..d.."; health, "..e);
end
end
end
if (vSeal and not mounted and not poly) then
AutoBuff_Debug("Check Seal Setting...");
local buffline,mounted,poly,buffIndex,buffName,buffConc,i,done,iName,xName,iiName,xxName,id; local iBuff = {};
local hasSeal = false;
for i=0,23 do
buffIndex, buffName, buffConc = AutoBuff_BuffName(i, "HELPFUL|HARMFUL");
if (buffName) then
if (string.find(buffName,AUTOBUFF_SEAL)) then hasSeal = true; break; end
end
end
if (not hasSeal) then
if (AutoBuff_CanCast("seal", trigger, nil)) then
AutoBuff_UseAbility(vSeal,'self');
AutoBuff_Debug(" Seal not found. Casting "..vSeal);
else
AutoBuff_Debug(" Seal not found, but I can't cast right now.");
end
else
AutoBuff_Debug(" Seal found. Doing nothing.");
end
end
if (vAspect and not mounted and not poly) then
AutoBuff_Debug("Check Aspect Setting...");
local buffline,mounted,poly,buffIndex,buffName,buffConc,i,done,iName,xName,iiName,xxName,id; local iBuff = {};
local hasAspect = false;
for i=0,23 do
buffIndex, buffName, buffConc = AutoBuff_BuffName(i, "HELPFUL|HARMFUL");
if (buffName) then
--buffName = string.lower(buffName);
--buffCompare = string.lower(AUTOBUFF_ASPECT_OF);
--AutoBuff_Debug(" Comparing "..buffName.." to "..vAspect);
if (string.find(buffName,AUTOBUFF_ASPECT_OF)) then hasAspect = true; break; end
end
end
if (not hasAspect) then
if (AutoBuff_CanCast("aspect", trigger, nil)) then
AutoBuff_UseAbility(vAspect,'self');
AutoBuff_Debug(" Aspect not found. Casting "..vAspect);
else
AutoBuff_Debug(" Aspect not found, but I can't cast right now.");
end
else
AutoBuff_Debug(" Aspect found. Doing nothing.");
end
end
if (vClass == string.lower(AUTOBUFF_CLASS_DRUID) and polyCat and not AutoBuff_Option(string.lower(AUTOBUFF_ABILITY_TRACK_HUMANOIDS),'d')) then -- Druid + Cat + Track Humanoids (enabled)
done = true; -- Do NOT check normal tracking if Track Humanoids is being fired on the Cat form.
end
if ((not done or vClass == string.lower(AUTOBUFF_CLASS_ROGUE))) then
AutoBuff_Debug("Check Track Setting...");
if (vTrack) then
AutoBuff_Debug(" Found: "..vTrack);
if (not GetTrackingTexture()) then
if (AutoBuff_CanCast("track", trigger, nil)) then
AutoBuff_Debug(" Tracking Ability: "..vTrack);
AutoBuff_UseAbility(vTrack,'self');
else
AutoBuff_Debug(" Track failed 'CanCast'.");
end
else
AutoBuff_Debug(" Track already enabled: "..GetTrackingTexture());
end
end
else AutoBuff_Debug(" Already done, not checking track.");
end
if (done) and (vTime < ltime) then vTime = ltime; end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) and (vCombat == nil) and (AutoBuff_Data[vC]['s']) and not poly then
for iName, xName in cWarlockPet do
local petspell = AutoBuff_CheckPetAbility(iName);
local petbuff;
if (petspell) then
AutoBuff_Debug(" Petspell button: "..petspell);
for i=1,10 do if (UnitBuff("pet",i) == cPre..xName) then petbuff = true; end end
if (not petbuff) and AutoBuff_Mana_Pet() then CastPetAction(petspell); end
end
end
end
AutoBuff_Debug("### Finished buff-check ###");
end
end
function AutoBuff_CheckCombat(spell)
local s = string.lower(spell);
local x = AutoBuff_Option(s,'c');
if (not x) then x = AutoBuff_Option('d','c'); end
if (UnitAffectingCombat("player")) then -- Should prevent most false positives
vCombat = true;
else
vCombat = nil;
end
if (not x) or (x == 3) then return true;
elseif (vCombat) and (x == 1) then return true;
elseif (not vCombat) and (x == 2) then return true; end
end
function AutoBuff_CheckParty(spell)
local s = string.lower(spell);
local x = AutoBuff_Option(s,'p');
local p = nil;
if (GetNumPartyMembers() > 0) or (GetNumRaidMembers() > 0) then p = 1; end
if (not x) then x = AutoBuff_Option('d','p'); end
if (not x) or (x == 3) then return true;
elseif (p) and (x == 1) then return true;
elseif (not p) and (x == 2) then return true; end
end
function AutoBuff_Rebuff(name, ltime)
if (ltime) then ltime = floor(ltime); end
local r = AutoBuff_Option(name, 'r');
if (not r) then r = AutoBuff_Option('d', 'r'); end
local t = ltime;
if (not t) then t = "nil"; end
if (not name) then name = "[default]"; end
if (string.lower(name) == string.lower(AUTOBUFF_ABILITY_INNER_FIRE)) and (AutoBuff_Data[vC]["inner"]) then -- We want to fire this at XX/20 charges left, instead of removed totally
local i = 1;
while (UnitBuff("player", i)) do
buff, numbuff = UnitBuff("player", i);
-- Already buffed with Inner Fire
if (buff==cIconInnerFire) then
AutoBuff_Debug("Found InnerFire with "..numbuff.." out of "..AutoBuff_Data[vC]["innercharges"].." charges left.");
end
if (buff==cIconInnerFire) and (numbuff <= AutoBuff_Data[vC]["innercharges"]) then
return true; -- Recast, because we're at or under XX charges
end
i = i + 1;
end
end
AutoBuff_Debug("Rebuff, "..name.." r:"..r.." t:"..t);
if (not ltime) or (r > ltime) then
AutoBuff_Debug("Rebuff should fire!");
return true;
end
end
function AutoBuff_Mana(name)
local c = (UnitMana("player")/UnitManaMax("player"))*100;
AutoBuff_Debug("Player Mana is at "..c.."%.");
local n = AutoBuff_Option(name,'m');
if (n == nil) then n = AutoBuff_Option('d','m'); end
if (n > 0) and (c > n) then return true;
elseif (n < 0) and (c < (n*-1)) then return true; end
end
function AutoBuff_Mana_Pet()
local c = (UnitMana("pet")/UnitManaMax("pet"))*100;
local n = 35;
if (c > n) then return true; end
end
function AutoBuff_CheckPetAbility(spellName)
local name, i;
for i=1,10 do
name, _, _, _, _, _, _ = GetPetActionInfo(i)
if (name) and (string.lower(name) == string.lower(spellName)) then return i; end
end
end
function AutoBuff_Health(name)
local c = (UnitHealth("player")/UnitHealthMax("player"))*100;
local n = AutoBuff_Option(name,'h');
if (n == nil) then n = AutoBuff_Option('d','h'); end
if (n > 0) and (c > n) then return true;
elseif (n < 0) and (c < (n*-1)) then return true; end
end
function AutoBuff_GetHighestSpellRank(spell)
if (spell) then spell = string.lower(spell);
else return; end
local i=1
local id = nil;
while true do
local spellName, spellRank = GetSpellName(i, BOOKTYPE_SPELL);
if (not spellName) then break; end
if (string.lower(spellName) == spell) then id = spellRank; end
i = i+1;
end
local _,_,realRank = string.find(id, "([%d]+)$");
if (GetLocale() == "koKR") then -- Korean ranks are reversed.
local _,_,realRank = string.find(id, "(%d+%.?%d*)");
end
return tonumber(realRank);
end
function AutoBuff_Cooldown(id)
if (id) then return GetSpellCooldown(id, BOOKTYPE_SPELL); end
end
function AutoBuff_UseAbility(spell, type)
--local testScaled = "";
--if (AutoBuff_Data[vC]["scaled"]) then testScaled = "true"; else testScaled = "false"; end
--AutoBuff_Debug("spell: "..spell.." life tap: "..AUTOBUFF_ABILITY_LIFE_TAP.." BonusScanner: "..IsAddOnLoaded("BonusScanner").." scaled? "..testScaled);
if (spell==string.lower(AUTOBUFF_ABILITY_LIFE_TAP)) and IsAddOnLoaded("BonusScanner") and (AutoBuff_Data[vC]["scaled"]) then
AutoBuff_ScaledLifeTap_CastLifeTap();
AutoBuff_Debug("Going into Scaled Life Tap routine.");
else
local i=1; local name, d;
local id = AutoBuff_Ability(spell);
if id then
if (AutoBuff_Cooldown(id) == 0) then
if (type == "friendly") and (UnitIsFriend("player", "target")) and (not UnitIsUnit("player","target")) then
name = UnitName("target");
ClearTarget();
end
CastSpell(id,BOOKTYPE_SPELL);
if (SpellIsTargeting() and SpellCanTargetUnit("player")) then
SpellTargetUnit("player");
end
if (name) then TargetByName(name); end
end
end
end
end
function AutoBuff_Ability(spell, rank)
if (spell) then spell = string.lower(spell);
else return; end
local o = AutoBuff_Option(spell, 'k');
local i=1;
local id = nil;
while true do
local spellName, spellRank = GetSpellName(i, BOOKTYPE_SPELL);
if (not spellName) then break; end
if (string.lower(spellName) == spell) then
id = i;
if (o) then
local _,_,realRank = string.find(spellRank, "([%d]+)$");
if (tonumber(realRank) == o) then break; end
end
end
i = i+1;
end
if (id) then local a,b = "", ""; a,b = GetSpellName(id, BOOKTYPE_SPELL); AutoBuff_Debug("Got Spell ID for, "..a.." "..b); end
return id;
end
function AutoBuff_Rank(spell)
AutoBuff_Debug("AutoBuff_Rank: entering function");
if (spell) then spell = string.lower(spell);
else return; end
local o = AutoBuff_Option(spell, 'k');
local i=1;
while true do
local spellName, spellRank = GetSpellName(i, BOOKTYPE_SPELL);
if (not spellName) then break; end
if (string.lower(spellName) == spell) then
if (o) then
local _,_,realRank = string.find(spellRank, "([%d]+)$");
if (tonumber(realRank) == o) then break; end
end
end
i = i+1;
end
if (o) then return o;
elseif (realRank) then return realRank;
else
return AutoBuff_GetHighestSpellRank(spell);
end
end
function AutoBuff_Debug(text) -- Prints debug information only if switched on
if (AutoBuff_Data[vC]['d'] == 1) then DEFAULT_CHAT_FRAME:AddMessage("|cff5e9ae4AutoBuff"..FONT_COLOR_CODE_CLOSE.."/".."|cffffa0a0Debug"..FONT_COLOR_CODE_CLOSE..": "..text); end
end
function AutoBuff_TableIndex(tbl, index) -- This and the next function are used to get the table index name
bIndex = index; -- by giving the index as an integer.
bValue = 0;
return table.foreach(tbl, AutoBuff_foreach);
end
function AutoBuff_foreach(index, value)
if (bValue == bIndex) then return index; end
bValue = bValue +1;
end
function AutoBuff_TableConfig()
AutoBuff_setn(cSpellList);
AutoBuff_setn(cTrackList);
AutoBuff_setn(cWeaponList);
AutoBuff_setn(cAspectList);
AutoBuff_setn(cSealList);
end
function AutoBuff_setn(tbl)
bValue = 0;
table.foreach(tbl, AutoBuff_setn_foreach);
table.setn(tbl, bValue);
end
function AutoBuff_setn_foreach(index, value)
bValue = bValue +1;
end
function AutoBuff_Print(text)
if (text) then DEFAULT_CHAT_FRAME:AddMessage("|cff5e9ae4AutoBuff"..FONT_COLOR_CODE_CLOSE..": "..text); end
end
function AutoBuff_Seperator()
DEFAULT_CHAT_FRAME:AddMessage("-");
end
function AutoBuff_WHEELU() -- Hook for scrollwheel-up
AutoBuff_Check(1);
AutoBuff_WHEELUx();
end
function AutoBuff_WHEELD() -- Hook for scrollwheel-down
AutoBuff_Check(2);
AutoBuff_WHEELDx();
end
function AutoBuff_TARGET() -- Hook for target-switching
AutoBuff_Check(3);
end
function AutoBuff_JMP()
AutoBuff_Check(4);
AutoBuff_JMPx();
end
function AutoBuff_MFS() -- These are the hook functions for movement
vSit = 0;
AutoBuff_Check(1);
AutoBuff_MFSx();
end
function AutoBuff_MBS()
vSit = 0;
AutoBuff_Check(1);
AutoBuff_MBSx();
end
function AutoBuff_TLS()
vSit = 0;
AutoBuff_Check(3);
AutoBuff_TLSx();
end
function AutoBuff_TRS()
vSit = 0;
AutoBuff_Check(3);
AutoBuff_TRSx();
end
function AutoBuff_SLS()
vSit = 0;
AutoBuff_Check(2);
AutoBuff_SLSx();
end
function AutoBuff_SRS()
vSit = 0;
AutoBuff_Check(2);
AutoBuff_SRSx();
end
function AutoBuff_MFF()
AutoBuff_Check(1);
AutoBuff_MFFx();
end
function AutoBuff_MBF()
AutoBuff_Check(1);
AutoBuff_MBFx();
end
function AutoBuff_TLF()
AutoBuff_Check(3);
AutoBuff_TLFx();
end
function AutoBuff_TRF()
AutoBuff_Check(3);
AutoBuff_TRFx();
end
function AutoBuff_SLF()
AutoBuff_Check(2);
AutoBuff_SLFx();
end
function AutoBuff_SRF()
AutoBuff_Check(2);
AutoBuff_SRFx();
end
function AutoBuff_TAR()
AutoBuff_Check(1);
AutoBuff_TARx();
end
function AutoBuff_TAS(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
AutoBuff_Check(6);
AutoBuff_TASx(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
end
function AutoBuff_TAF(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
AutoBuff_Check(6);
AutoBuff_TAFx(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
end
function AutoBuff_CMS(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
AutoBuff_Check(5);
AutoBuff_CMSx(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
end
function AutoBuff_CMF(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
AutoBuff_Check(5);
AutoBuff_CMFx(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
end
function AutoBuff_Option(n, o, z, s)
if (s == nil) then s = ""; end
if (type(n) == "string") and (strlen(n) < 1) then n = nil; end
local a,b,c = "|cffffa0a0nil","|cffa0ffa0nil","|cffa0a0ffnil";
if (n) then a = "|cffffa0a0"..n; end
if (o) then b = "|cffa0ffa0"..o; end
if (z) then c = "|cffa0a0ff"..z; end
-- AutoBuff_Debug("Option -> "..a.." "..b.." "..c);
if (not o) then return; end
if (not n) then n = 'd'; end
if (not vSpellList[n]) and (not vWeaponList[n]) and (not vTrackList[n]) and (not vAspectList[n]) and (not vSealList[n]) and (n ~= 'd') then return; end
if (z == nil) then
if (AutoBuff_Data[vC]['x'][n] ~= nil) then
local r = AutoBuff_Data[vC]['x'][n][o];
if (r ~= nil) then
return r;
end
end
else
if (z == "default") then z = nil; end
if (AutoBuff_Data[vC]['x'][n] == nil) then AutoBuff_Data[vC]['x'][n] = {}; end
AutoBuff_Data[vC]['x'][n][o] = z;
-- Output
if (s == 1) then
if (n == 'd') then n = "default"; end
n = "'|cffffffa0"..n..FONT_COLOR_CODE_CLOSE.."'";
if (z == nil) then z = "default"; end
if (o == 'm') then s = "|cff5e9ae4mana";
elseif (o == 'h') then s = "|cffffa0a0health";
elseif (o == 'c') then s = "|cfff0802ecombat";
elseif (o == 'r') then s = "|cffa0a0a0rebuff";
elseif (o == 't') then s = "|cffc0c0c0trigger";
elseif (o == 'k') then s = "|cffffa0ffrank";
end
if (s ~= 1) then
s = s..FONT_COLOR_CODE_CLOSE;
z = "|cffa0ffa0"..z..FONT_COLOR_CODE_CLOSE;
AutoBuff_Print(string.format(AUTOBUFF_CHANGE,s,n,z));
elseif (o == 'd') then
if (z == 1) then o = "|cffffa0a0"..AUTOBUFF_DISABLED;
else o = "|cffa0ffa0"..AUTOBUFF_ENABLED; end
o = o..FONT_COLOR_CODE_CLOSE;
AutoBuff_Print(n..", "..o);
end
end
end
if (n ~= 'd') and (AutoBuff_Data[vC]['x'][n] ~= nil) then
local v,k,empty = nil,nil,1;
for v, k in AutoBuff_Data[vC]['x'][n] do empty = nil; break; end
if (empty) then AutoBuff_Data[vC]['x'][n] = nil; end
end
end
function AutoBuff_TrackLoad(s)
local x = AutoBuff_Data[vC]['t']; -- Get stored tracking ability
local d = AutoBuff_TableIndex(vTrackList,0);
local z;
if (d) then d = string.lower(d); end
if (x) then
x = string.lower(x);
if (x == "off") then
z = nil;
elseif (vTrackList[x]) and (AutoBuff_Ability(x)) then
z = x;
elseif (d) then
x = d;
z = d;
end
elseif (d) then
x = d;
z = d;
else
z = nil;
x = "off";
end
AutoBuff_Data[vC]['t'] = x;
vTrack = z;
if (z) then
z = "'|cffa0ffa0"..z..FONT_COLOR_CODE_CLOSE.."'";
else
z = "'|cffffa0a0".."off"..FONT_COLOR_CODE_CLOSE.."'";
end
if (s == "show") then AutoBuff_Print(AUTOBUFF_CHANGE_TRACK..", "..z); end
end
function AutoBuff_AspectLoad(s)
local x = AutoBuff_Data[vC]['a']; -- Get stored aspect ability
local d = AutoBuff_TableIndex(vAspectList,0);
local z;
if (d) then d = string.lower(d); end
if (x) then
x = string.lower(x);
if (x == "off") then
z = nil;
elseif (vAspectList[x]) and (AutoBuff_Ability(x)) then
z = x;
elseif (d) then
x = d;
z = d;
end
elseif (d) then
x = d;
z = d;
else
z = nil;
x = "off";
end
AutoBuff_Data[vC]['a'] = x;
vAspect = z;
if (z) then
z = "'|cffa0ffa0"..z..FONT_COLOR_CODE_CLOSE.."'";
else
z = "'|cffffa0a0".."off"..FONT_COLOR_CODE_CLOSE.."'";
end
if (s == "show") then AutoBuff_Print(AUTOBUFF_CHANGE_ASPECT..", "..z); end
end
function AutoBuff_SealLoad(s)
local x = AutoBuff_Data[vC]["seal"]; -- Get stored seal ability
local d = AutoBuff_TableIndex(vSealList,0);
local z;
if (d) then d = string.lower(d); end
if (x) then
x = string.lower(x);
if (x == "off") then
z = nil;
elseif (vSealList[x]) and (AutoBuff_Ability(x)) then
z = x;
elseif (d) then
x = d;
z = d;
end
elseif (d) then
x = d;
z = d;
else
z = nil;
x = "off";
end
AutoBuff_Data[vC]["seal"] = x;
vSeal = z;
if (z) then
z = "'|cffa0ffa0"..z..FONT_COLOR_CODE_CLOSE.."'";
else
z = "'|cffffa0a0".."off"..FONT_COLOR_CODE_CLOSE.."'";
end
if (s == "show") then AutoBuff_Print(AUTOBUFF_CHANGE_SEAL..", "..z); end
end
function AutoBuff_WeaponLoad(s)
local x = AutoBuff_Data[vC]['w']; -- Get stored weapon ability
local d = AutoBuff_TableIndex(vWeaponList,0);
local z;
if (d) then d = string.lower(d); end
if (x) then
x = string.lower(x);
if (x == "off") then
z = nil;
elseif (vWeaponList[x]) and (AutoBuff_Ability(x)) then
z = x;
elseif (d) then
z = d;
x = d;
end
elseif (d) then
z = d;
x = d;
else
z = nil;
x = "off";
end
AutoBuff_Data[vC]['w'] = x;
vWeapon = z;
if (z) then
z = "'|cffa0ffa0"..z..FONT_COLOR_CODE_CLOSE.."'";
else
z = "'|cffffa0a0".."off"..FONT_COLOR_CODE_CLOSE.."'";
end
if (s == "show") then AutoBuff_Print(AUTOBUFF_CHANGE_WEAPON..", "..z); end
end
function AutoBuff_LoadDefaults()
if (not AutoBuff_Data) then AutoBuff_Data = { }; end
if (AutoBuff_Data[vC] == nil) then AutoBuff_Data[vC] = { }; end
if (AutoBuff_Data[vC]['version']) then AutoBuff_Data = { [vC] = {} }; end
table.foreach(cDefault, AutoBuff_CheckDefaults);
if (AutoBuff_Data[vC]['x'] == nil) then AutoBuff_Data[vC]['x'] = {}; end
if (AutoBuff_Data[vC]['x']['d'] == nil) then AutoBuff_Data[vC]['x']['d'] = {}; end
table.foreach(cDefault['x']['d'], AutoBuff_CheckDefaults_Ability);
if (AutoBuff_Data[vC]['v'] ~= cDefault['v']) then AutoBuff_Upgrade(AutoBuff_Data[vC]['v']); end
end
function AutoBuff_Upgrade(ver)
local c = cDefault['v']
--if (ver < 31) then
--AutoBuff_Data[vC]['h'] = cDefault['h'];
--end
AutoBuff_Data[vC]['v'] = c;
end
function AutoBuff_CheckSpellList()
local iName, xName;
for iName, xName in AutoBuff_Data[vC]['x'] do
if (iName ~= "d") and (not vSpellList[iName]) and (not vWeaponList[iName]) and (not vTrackList[iName]) and (not vAspectList[iName]) and (not vSealList[iName]) then AutoBuff_Data[vC]['x'][iName] = nil; end
end
end
function AutoBuff_CheckDefaults(index, value)
if (AutoBuff_Data[vC][index] == nil) then AutoBuff_Data[vC][index] = cDefault[index]; end
end
function AutoBuff_CheckDefaults_Ability(index, value)
if (AutoBuff_Data[vC]['x']['d'][index] == nil) then AutoBuff_Data[vC]['x']['d'][index] = cDefault['x']['d'][index]; end
end
function AutoBuff_Reload()
AutoBuffFrame_Close();
vSpellList = { };
vTrackList = { };
vWeaponList = { };
vAspectList = { };
vSealList = { };
vTrack = nil;
vWeapon = nil;
vAspect = nil;
vSeal = nil;
AutoBuff_Debug("Total spells available -> "..table.getn(cSpellList));
local iName, xName;
for iName, xName in cSpellList do
if (AutoBuff_Ability(iName)) then
AutoBuff_Debug("Adding Ability -> "..iName);
vSpellList[string.lower(iName)] = xName;
local rank = AutoBuff_GetHighestSpellRank(iName);
if (rank) then vSpellList[string.lower(iName)]['k'] = rank; end
end
end
-- Same for tracking abilities..
AutoBuff_Debug("Total track available -> "..table.getn(cTrackList));
for iName, xName in cTrackList do
if (AutoBuff_Ability(iName)) then
AutoBuff_Debug("Adding Track -> "..iName);
vTrackList[string.lower(iName)] = xName;
end
end
-- EMERALD: aspect buffs
AutoBuff_Debug("Total aspect available -> "..table.getn(cAspectList));
for iName, xName in cAspectList do
if (AutoBuff_Ability(iName)) then
AutoBuff_Debug("Adding Aspect -> "..iName);
vAspectList[string.lower(iName)] = xName;
end
end
-- EMERALD: seal buffs
AutoBuff_Debug("Total seals available -> "..table.getn(cSealList));
for iName, xName in cSealList do
if (AutoBuff_Ability(iName)) then
AutoBuff_Debug("Adding Seal -> "..iName);
vSealList[string.lower(iName)] = xName;
local rank = AutoBuff_GetHighestSpellRank(iName);
if (rank) then vSealList[string.lower(iName)]['k'] = rank; end
end
end
-- And weapon buffs...
AutoBuff_Debug("Total weaponbuff available -> "..table.getn(cWeaponList));
for iName, xName in cWeaponList do
if (AutoBuff_Ability(iName)) then
AutoBuff_Debug("Adding WeaponBuff -> "..iName);
vWeaponList[string.lower(iName)] = xName;
local rank = AutoBuff_GetHighestSpellRank(iName);
if (rank) then vWeaponList[string.lower(iName)] = rank; end
end
end
AutoBuff_setn(vSpellList);
AutoBuff_setn(vWeaponList);
AutoBuff_setn(vTrackList);
AutoBuff_setn(vAspectList);
AutoBuff_setn(vSealList);
-- Some spells overwrite others, or are higher ranked
-- versions of another spell but with a different name.
-- So we make sure only the best version is in the table
if (vClass == string.lower(AUTOBUFF_CLASS_MAGE)) and (vSpellList[string.lower(AUTOBUFF_ABILITY_ICE_ARMOR)]) then vSpellList[string.lower(AUTOBUFF_ABILITY_FROST_ARMOR)] = nil; end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) then
if (vSpellList[string.lower(AUTOBUFF_ABILITY_DEMON_ARMOR)]) then vSpellList[string.lower(AUTOBUFF_ABILITY_DEMON_SKIN)] = nil; end
if (vSpellList[string.lower(AUTOBUFF_ABILITY_DETECT_GINVIS)]) then vSpellList[string.lower(AUTOBUFF_ABILITY_DETECT_INVIS)] = nil; vSpellList[string.lower(AUTOBUFF_ABILITY_DETECT_LINVIS)] = nil;
elseif (vSpellList[string.lower(AUTOBUFF_ABILITY_DETECT_INVIS)]) then vSpellList[string.lower(AUTOBUFF_ABILITY_DETECT_LINVIS)] = nil; end
end
AutoBuff_TrackLoad(); -- Checks for available Tracking Abilities
AutoBuff_WeaponLoad();
AutoBuff_AspectLoad();
AutoBuff_SealLoad();
AutoBuff_CheckSpellList(); -- Checks the disabled, mana, and combat tables for spells that this character can't use.
end
--[[ Dialog control functions ]]
function AutoBuffFrame_OnShow()
PlaySound("igMainMenuOpen");
AutoBuffFrameCheckButton:SetChecked(AutoBuff_Data[vC]['e']);
if (AutoBuff_Data[vC]['e']) then
AutoBuffFrameAbility:Show();
AutoBuff_Populate();
else
AutoBuffFrameAbility:Hide();
end
end
function AutoBuffFrame_OnHide()
PlaySound("igMainMenuClose");
end
function AutoBuffFrame_Toggle()
vGUI = {};
vGUI['m'] = { [1] = "default" }; -- EMERALD: Line 2205 bug (nil on field 'm')
AutoBuffFrame:StopMovingOrSizing();
if (not AutoBuffFrame:IsVisible()) then
AutoBuffFrame_Open();
else
AutoBuffFrame_Close();
end
end
function AutoBuffFrame_Open()
ShowUIPanel(AutoBuffFrame);
end
function AutoBuffFrame_Close()
AutoBuffFrame:StopMovingOrSizing();
HideUIPanel(AutoBuffFrame);
-- myAddOns window
if(MYADDONS_ACTIVE_OPTIONSFRAME == AutoBuffFrame) then ShowUIPanel(myAddOnsFrame); end
end
function AutoBuff_Populate()
local i,v,k,x,r,g,b = 1,nil,nil,nil,0.4,0.4,0.4;
for x=1,AUTOBUFF_GUI_ABILITY_TOTALROWS do
getglobal("AutoBuffName"..x):UnlockHighlight();
end
vGUI['m'] = { [1] = "default" };
AutoBuff_PopulateInsert(1, AUTOBUFF_GUI_DEFAULTABILITY, 0.6, 0.6, 1)
if (table.getn(vSpellList) > 0) then
i=i+1;
AutoBuff_PopulateInsert(2, "- "..AUTOBUFF_GUI_SPELLS, 1, 1, 1);
getglobal("AutoBuffName"..i):Disable();
--for v, k in vSpellList do
k = 1;
while (k > -1) do
v = AutoBuff_SpellList(k);
if (not v) then break; end
v = string.lower(v);
if (vSpellList[v]) then
i = i+1;
if (AutoBuff_Option(v, 'd')) then r,g,b = 1, 0.6, 0.6; else r,g,b = 0.6, 1, 0.6; end
AutoBuff_PopulateInsert(i, AutoBuff_CorrectName(v), r, g, b);
vGUI['m'][i] = "spell";
end
k = k+1;
end
end
if (table.getn(vWeaponList) > 0) then
i = i+1;
AutoBuff_PopulateInsert(i, "- "..AUTOBUFF_GUI_WEAPON, 1, 1, 1);
getglobal("AutoBuffName"..i):Disable();
for v, k in vWeaponList do
i = i+1;
if (v == vWeapon) then r,g,b = 0.6, 1, 0.6; else r,g,b = 1, 0.6, 0.6; end
AutoBuff_PopulateInsert(i, AutoBuff_CorrectName(v), r, g, b);
vGUI['m'][i] = "weapon";
end
end
if (table.getn(vTrackList) > 0) then
i = i+1;
AutoBuff_PopulateInsert(i, "- "..AUTOBUFF_GUI_TRACK, 1, 1, 1);
getglobal("AutoBuffName"..i):Disable();
for v, k in vTrackList do
i = i+1;
if (v == vTrack) then r,g,b = 0.6, 1, 0.6; else r,g,b = 1, 0.6, 0.6; end
AutoBuff_PopulateInsert(i, AutoBuff_CorrectName(v), r, g, b);
vGUI['m'][i] = "track";
end
end
if (table.getn(vAspectList) > 0) then
i = i+1;
AutoBuff_PopulateInsert(i, "- "..AUTOBUFF_GUI_ASPECT, 1, 1, 1);
getglobal("AutoBuffName"..i):Disable();
for v, k in vAspectList do
i = i+1;
if (v == vAspect) then r,g,b = 0.6, 1, 0.6; else r,g,b = 1, 0.6, 0.6; end
AutoBuff_PopulateInsert(i, AutoBuff_CorrectName(v), r, g, b);
vGUI['m'][i] = "aspect";
end
end
if (table.getn(vSealList) > 0) then
i = i+1;
AutoBuff_PopulateInsert(i, "- "..AUTOBUFF_GUI_SEAL, 1, 1, 1);
getglobal("AutoBuffName"..i):Disable();
for v, k in vSealList do
i = i+1;
if (v == vSeal) then r,g,b = 0.6, 1, 0.6; else r,g,b = 1, 0.6, 0.6; end
AutoBuff_PopulateInsert(i, AutoBuff_CorrectName(v), r, g, b);
vGUI['m'][i] = "seal";
end
end
AutoBuffFrameAbility:SetHeight(AUTOBUFF_GUI_ABILITY_OVERHEAD + (AUTOBUFF_GUI_ABILITY_INTERVAL*i));
AutoBuffFrameOptions:Hide();
end
function AutoBuff_PopulateInsert(n, t, r, g, b)
local itemButton = getglobal("AutoBuffName"..n);
local itemText = getglobal("AutoBuffName"..n.."_Text");
if (t) and (n <= AUTOBUFF_GUI_ABILITY_TOTALROWS) then
itemText:SetText(t);
itemText:SetTextColor(r, g, b, 1);
itemButton:Enable();
itemButton:Show();
end
end
function AutoBuffFrameCloseButton_OnClick()
AutoBuffFrame_Close();
end
function AutoBuffFrame_ResetAbility()
vGUI['r'] = 1;
local x,y;
AutoBuffFrameOptionsDefaultAbility:Hide();
AutoBuffFrameOptionsEnable_Text:Show();
AutoBuffFrameOptionsEnableButton:Show();
AutoBuffFrameOptionsEnableButton:SetChecked(0);
AutoBuffFrameOptionsDefaultTrigger_Text:Hide();
AutoBuffFrameOptionsTrigger_Text:Hide();
AutoBuffFrameOptionsTriggerDefaultButton:Hide();
AutoBuffFrameOptionsTriggerDefaultButton:SetChecked(0);
AutoBuffFrameOptionsTriggerWheelUp_Text:Hide();
AutoBuffFrameOptionsTriggerWheelUpButton:Hide();
AutoBuffFrameOptionsTriggerWheelUpButton:SetChecked(0);
AutoBuffFrameOptionsTriggerWheelDown_Text:Hide();
AutoBuffFrameOptionsTriggerWheelDownButton:Hide();
AutoBuffFrameOptionsTriggerWheelDownButton:SetChecked(0);
AutoBuffFrameOptionsTriggerTarget_Text:Hide();
AutoBuffFrameOptionsTriggerTargetButton:Hide();
AutoBuffFrameOptionsTriggerTargetButton:SetChecked(0);
AutoBuffFrameOptionsCombat_Text:ClearAllPoints();
--AutoBuffFrameOptionsCombat_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsTrigger_Text", "BOTTOMLEFT", 0, -110)
AutoBuffFrameOptionsCombat_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsTrigger_Text", "BOTTOMLEFT", 0, -55)
AutoBuffFrameOptionsCombatDefaultButton:Hide();
AutoBuffFrameOptionsCombatDefaultButton:SetChecked(0);
AutoBuffFrameOptionsCombat_Text:Hide();
AutoBuffFrameOptionsDefaultCombat_Text:Hide();
AutoBuffFrameOptionsCombatIn_Text:Hide();
AutoBuffFrameOptionsCombatInButton:Hide();
AutoBuffFrameOptionsCombatInButton:SetChecked(0);
AutoBuffFrameOptionsCombatOut_Text:Hide();
AutoBuffFrameOptionsCombatOutButton:Hide();
AutoBuffFrameOptionsCombatOutButton:SetChecked(0);
AutoBuffFrameOptionsCombatAlways_Text:Hide();
AutoBuffFrameOptionsCombatAlwaysButton:Hide();
AutoBuffFrameOptionsCombatAlwaysButton:SetChecked(0);
AutoBuffFrameOptionsParty_Text:ClearAllPoints();
AutoBuffFrameOptionsParty_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsCombat_Text", "BOTTOMLEFT", 0, -25)
AutoBuffFrameOptionsPartyDefaultButton:Hide();
AutoBuffFrameOptionsPartyDefaultButton:SetChecked(0);
AutoBuffFrameOptionsParty_Text:Hide();
AutoBuffFrameOptionsDefaultParty_Text:Hide();
AutoBuffFrameOptionsPartyIn_Text:Hide();
AutoBuffFrameOptionsPartyInButton:Hide();
AutoBuffFrameOptionsPartyInButton:SetChecked(0);
AutoBuffFrameOptionsPartyOut_Text:Hide();
AutoBuffFrameOptionsPartyOutButton:Hide();
AutoBuffFrameOptionsPartyOutButton:SetChecked(0);
AutoBuffFrameOptionsPartyAlways_Text:Hide();
AutoBuffFrameOptionsPartyAlwaysButton:Hide();
AutoBuffFrameOptionsPartyAlwaysButton:SetChecked(0);
AutoBuffFrameOptionsHealth_Text:ClearAllPoints();
AutoBuffFrameOptionsHealth_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsParty_Text", "BOTTOMLEFT", 0, -25)
AutoBuffFrameOptionsHealthDefaultButton:Hide();
AutoBuffFrameOptionsHealthDefaultButton:SetChecked(0);
AutoBuffFrameOptionsHealth_Text:Hide();
AutoBuffFrameOptionsDefaultHealth_Text:Hide();
AutoBuffFrameOptionsHealth:Hide();
x, y = AutoBuffFrameOptionsHealth:GetMinMaxValues();
AutoBuffFrameOptionsHealth:SetValue(x);
AutoBuffFrameOptionsHealth_ValueText:Hide();
AutoBuffFrameOptionsHealth_ValueText:SetText("#");
AutoBuffFrameOptionsHealthButton:Hide();
AutoBuffFrameOptionsHealthButton:SetChecked(0);
AutoBuffFrameOptionsManaDefaultButton:Hide();
AutoBuffFrameOptionsManaDefaultButton:SetChecked(0);
AutoBuffFrameOptionsMana_Text:Hide();
AutoBuffFrameOptionsDefaultMana_Text:Hide();
AutoBuffFrameOptionsMana:Hide();
x, y = AutoBuffFrameOptionsMana:GetMinMaxValues();
AutoBuffFrameOptionsMana_ValueText:Hide();
AutoBuffFrameOptionsMana_ValueText:SetText("#");
AutoBuffFrameOptionsManaButton:Hide();
AutoBuffFrameOptionsManaButton:SetChecked(0);
AutoBuffFrameOptionsRebuffDefaultButton:Hide();
AutoBuffFrameOptionsRebuffDefaultButton:SetChecked(0);
AutoBuffFrameOptionsRebuff:Hide();
x, y = AutoBuffFrameOptionsRebuff:GetMinMaxValues();
AutoBuffFrameOptionsRebuff:SetValue(x);
AutoBuffFrameOptionsDefaultRebuff_Text:Hide();
AutoBuffFrameOptionsRebuff_Text:Hide();
AutoBuffFrameOptionsRebuff_ValueText:Hide();
AutoBuffFrameOptionsRebuff_ValueText:SetText("#");
AutoBuffFrameOptionsRankDefaultButton:Hide();
AutoBuffFrameOptionsRankDefaultButton:SetChecked(0);
AutoBuffFrameOptionsRank:Hide();
x, y = AutoBuffFrameOptionsRank:GetMinMaxValues();
AutoBuffFrameOptionsRank:SetValue(x);
AutoBuffFrameOptionsDefaultRank_Text:Hide();
AutoBuffFrameOptionsRank_Text:Hide();
AutoBuffFrameOptionsRank_ValueText:Hide();
AutoBuffFrameOptionsRank_ValueText:SetText("#");
AutoBuffFrameOptionsRank_Text:ClearAllPoints();
AutoBuffFrameOptionsRank_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsRebuff_Text", "BOTTOMLEFT", 0, -9)
AutoBuffFrameOptions:Show();
AutoBuffFrameOptions:SetHeight(40);
vGUI['r'] = nil;
end
function AutoBuffNameButton_OnClick(s)
if (vGUI['r']) then return; end
local n = string.lower(getglobal("AutoBuffName"..s.."_Text"):GetText());
local t,x;
if (vGUI['s']) then getglobal("AutoBuffName"..vGUI['s']):UnlockHighlight(); end
vGUI['s'] = s;
getglobal("AutoBuffName"..s):LockHighlight();
AutoBuffFrame_ResetAbility();
if (s == 1) then n = nil; end
vGUI['n'] = n;
x = vGUI['m'][s];
if (x == "default") then
AutoBuffFrameOptionsEnable_Text:Hide();
AutoBuffFrameOptionsEnableButton:Hide();
AutoBuffFrameOptionsDefaultAbility:Show();
AutoBuffFrameOptions:SetHeight(295); -- JURYRIG
--AutoBuffFrameOptions:SetHeight(340);
AutoBuffFrameOptionsTrigger_Text:Show();
AutoBuffFrameOptionsTriggerWheelUp_Text:Show();
AutoBuffFrameOptionsTriggerWheelUpButton:Show();
AutoBuffFrameOptionsTriggerWheelDown_Text:Show();
AutoBuffFrameOptionsTriggerWheelDownButton:Show();
AutoBuffFrameOptionsTriggerTarget_Text:Show();
AutoBuffFrameOptionsTriggerTargetButton:Show();
AutoBuffFrameOptionsCombat_Text:Show();
AutoBuffFrameOptionsCombatIn_Text:Show();
AutoBuffFrameOptionsCombatInButton:Show();
AutoBuffFrameOptionsCombatOut_Text:Show();
AutoBuffFrameOptionsCombatOutButton:Show();
AutoBuffFrameOptionsCombatAlways_Text:Show();
AutoBuffFrameOptionsCombatAlwaysButton:Show();
AutoBuffFrameOptionsParty_Text:Show();
AutoBuffFrameOptionsPartyIn_Text:Show();
AutoBuffFrameOptionsPartyInButton:Show();
AutoBuffFrameOptionsPartyOut_Text:Show();
AutoBuffFrameOptionsPartyOutButton:Show();
AutoBuffFrameOptionsPartyAlways_Text:Show();
AutoBuffFrameOptionsPartyAlwaysButton:Show();
AutoBuffFrameOptionsHealth_Text:Show();
AutoBuffFrameOptionsHealth:Show();
AutoBuffFrameOptionsHealth_ValueText:Show();
AutoBuffFrameOptionsHealthButton:Show();
AutoBuffFrameOptionsMana_Text:Show();
AutoBuffFrameOptionsMana:Show();
AutoBuffFrameOptionsMana_ValueText:Show();
AutoBuffFrameOptionsManaButton:Show();
AutoBuffFrameOptionsRebuff:Show();
AutoBuffFrameOptionsRebuff_Text:Show();
AutoBuffFrameOptionsRebuff_ValueText:Show();
local trigger = AutoBuff_Trigger('d');
AutoBuffFrameOptionsTriggerWheelUpButton:SetChecked(trigger[1]);
AutoBuffFrameOptionsTriggerWheelDownButton:SetChecked(trigger[2]);
AutoBuffFrameOptionsTriggerTargetButton:SetChecked(trigger[3]);
if (AutoBuff_Option(n, 'c') == 1) then AutoBuffFrameOptionsCombatInButton:SetChecked(1); end
if (AutoBuff_Option(n, 'c') == 2) then AutoBuffFrameOptionsCombatOutButton:SetChecked(1); end
if (AutoBuff_Option(n, 'c') == 3) then AutoBuffFrameOptionsCombatAlwaysButton:SetChecked(1); end
if (AutoBuff_Option(n, 'p') == 1) then AutoBuffFrameOptionsPartyInButton:SetChecked(1); end
if (AutoBuff_Option(n, 'p') == 2) then AutoBuffFrameOptionsPartyOutButton:SetChecked(1); end
if (AutoBuff_Option(n, 'p') == 3) then AutoBuffFrameOptionsPartyAlwaysButton:SetChecked(1); end
t = AutoBuff_Option(n, 'h');
if (t > 0) then
AutoBuffFrameOptionsHealthButton:SetChecked(0);
AutoBuffFrameOptionsHealth_ValueText:SetText(">"..t.."%");
AutoBuffFrameOptionsHealth:SetValue(t);
else
t = t*-1;
AutoBuffFrameOptionsHealthButton:SetChecked(1);
AutoBuffFrameOptionsHealth_ValueText:SetText("<"..t.."%");
AutoBuffFrameOptionsHealth:SetValue(t);
end
t = AutoBuff_Option(n, 'm');
if (t > 0) then
AutoBuffFrameOptionsManaButton:SetChecked(0);
AutoBuffFrameOptionsMana:SetValue(t);
AutoBuffFrameOptionsMana_ValueText:SetText(">"..t.."%");
else
t = t*-1;
AutoBuffFrameOptionsManaButton:SetChecked(1);
AutoBuffFrameOptionsMana:SetValue(t);
AutoBuffFrameOptionsMana_ValueText:SetText("<"..t.."%");
end
t = AutoBuff_Option(n, 'r');
AutoBuffFrameOptionsRebuff:SetValue(t);
AutoBuffFrameOptionsRebuff_ValueText:SetText(AutoBuffFrame_RebuffValueText(t));
-- elseif (vGUI['m'][s] == "track") then
-- if (vTrack == n) then AutoBuffFrameOptionsEnableButton:SetChecked(1); end
-- elseif (vGUI['m'][s] == "aspect") then
-- if (vAspect == n) then AutoBuffFrameOptionsEnableButton:SetChecked(1); end
-- elseif (vGUI['m'][s] == "seal") then
-- if (vSeal == n) then AutoBuffFrameOptionsEnableButton:SetChecked(1); end
--elseif (x ~= "track" and x ~= "aspect" and x ~= "seal") then
else
--if ((x == "spell") and (not AutoBuff_Option(n, 'd'))) or ((x == "weapon") and (vWeapon == n)) then
if ((x == "spell") and (not AutoBuff_Option(n, 'd'))) or ((x == "weapon") and (vWeapon == n)) or ((x == "track") and (vTrack == n)) or ((x == "aspect") and (vAspect == n)) or ((x == "seal") and (vSeal == n)) then
AutoBuffFrameOptionsEnableButton:SetChecked(1);
local height = 370;
AutoBuffFrameOptionsCombatDefaultButton:Show();
AutoBuffFrameOptionsCombat_Text:Show();
AutoBuffFrameOptionsCombatIn_Text:Show();
AutoBuffFrameOptionsCombatInButton:Show();
AutoBuffFrameOptionsCombatOut_Text:Show();
AutoBuffFrameOptionsCombatOutButton:Show();
AutoBuffFrameOptionsCombatAlways_Text:Show();
AutoBuffFrameOptionsCombatAlwaysButton:Show();
AutoBuffFrameOptionsPartyDefaultButton:Show();
AutoBuffFrameOptionsParty_Text:Show();
AutoBuffFrameOptionsPartyIn_Text:Show();
AutoBuffFrameOptionsPartyInButton:Show();
AutoBuffFrameOptionsPartyOut_Text:Show();
AutoBuffFrameOptionsPartyOutButton:Show();
AutoBuffFrameOptionsPartyAlways_Text:Show();
AutoBuffFrameOptionsPartyAlwaysButton:Show();
AutoBuffFrameOptionsHealthDefaultButton:Show();
AutoBuffFrameOptionsHealth_Text:Show();
AutoBuffFrameOptionsHealth:Show();
AutoBuffFrameOptionsHealth_ValueText:Show();
AutoBuffFrameOptionsHealthButton:Show();
AutoBuffFrameOptionsManaDefaultButton:Show();
AutoBuffFrameOptionsMana_Text:Show();
AutoBuffFrameOptionsMana:Show();
AutoBuffFrameOptionsMana_ValueText:Show();
AutoBuffFrameOptionsManaButton:Show();
AutoBuffFrameOptionsRebuffDefaultButton:Show();
AutoBuffFrameOptionsRebuff:Show();
AutoBuffFrameOptionsRebuff_Text:Show();
AutoBuffFrameOptionsRebuff_ValueText:Show();
AutoBuffFrameOptionsRankDefaultButton:Show();
AutoBuffFrameOptionsRank:Show();
AutoBuffFrameOptionsRank_Text:Show();
AutoBuffFrameOptionsRank_ValueText:Show();
AutoBuffFrameOptionsTrigger_Text:Show();
AutoBuffFrameOptionsTriggerDefaultButton:Show();
AutoBuffFrameOptionsTriggerWheelUp_Text:Show();
AutoBuffFrameOptionsTriggerWheelUpButton:Show();
AutoBuffFrameOptionsTriggerWheelDown_Text:Show();
AutoBuffFrameOptionsTriggerWheelDownButton:Show();
AutoBuffFrameOptionsTriggerTarget_Text:Show();
AutoBuffFrameOptionsTriggerTargetButton:Show();
if (AutoBuff_Option(n, 't')) then
AutoBuffFrameOptionsTriggerDefaultButton:SetChecked(1);
local trigger = AutoBuff_Trigger(n);
AutoBuffFrameOptionsTriggerWheelUpButton:SetChecked(trigger[1]);
AutoBuffFrameOptionsTriggerWheelDownButton:SetChecked(trigger[2]);
AutoBuffFrameOptionsTriggerTargetButton:SetChecked(trigger[3]);
height = height - 55;
else
AutoBuffFrameOptionsDefaultTrigger_Text:Show();
AutoBuffFrameOptionsTriggerWheelUp_Text:Hide();
AutoBuffFrameOptionsTriggerWheelUpButton:Hide();
AutoBuffFrameOptionsTriggerWheelDown_Text:Hide();
AutoBuffFrameOptionsTriggerWheelDownButton:Hide();
AutoBuffFrameOptionsTriggerTarget_Text:Hide();
AutoBuffFrameOptionsTriggerTargetButton:Hide();
AutoBuffFrameOptionsCombat_Text:ClearAllPoints();
AutoBuffFrameOptionsCombat_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsTrigger_Text", "BOTTOMLEFT", 0, -9);
height = height - 105;
end
if (AutoBuff_Option(n, 'c')) then
AutoBuffFrameOptionsCombatDefaultButton:SetChecked(1);
if (AutoBuff_Option(n, 'c') == 1) then AutoBuffFrameOptionsCombatInButton:SetChecked(1); end
if (AutoBuff_Option(n, 'c') == 2) then AutoBuffFrameOptionsCombatOutButton:SetChecked(1); end
if (AutoBuff_Option(n, 'c') == 3) then AutoBuffFrameOptionsCombatAlwaysButton:SetChecked(1); end
else
AutoBuffFrameOptionsCombatIn_Text:Hide();
AutoBuffFrameOptionsCombatInButton:Hide();
AutoBuffFrameOptionsCombatOut_Text:Hide();
AutoBuffFrameOptionsCombatOutButton:Hide();
AutoBuffFrameOptionsCombatAlways_Text:Hide();
AutoBuffFrameOptionsCombatAlwaysButton:Hide();
AutoBuffFrameOptionsDefaultCombat_Text:Show();
AutoBuffFrameOptionsParty_Text:ClearAllPoints();
AutoBuffFrameOptionsParty_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsCombat_Text", "BOTTOMLEFT", 0, -9)
height = height - 15;
end
if (AutoBuff_Option(n, 'p')) then
AutoBuffFrameOptionsPartyDefaultButton:SetChecked(1);
if (AutoBuff_Option(n, 'p') == 1) then AutoBuffFrameOptionsPartyInButton:SetChecked(1); end
if (AutoBuff_Option(n, 'p') == 2) then AutoBuffFrameOptionsPartyOutButton:SetChecked(1); end
if (AutoBuff_Option(n, 'p') == 3) then AutoBuffFrameOptionsPartyAlwaysButton:SetChecked(1); end
else
AutoBuffFrameOptionsPartyIn_Text:Hide();
AutoBuffFrameOptionsPartyInButton:Hide();
AutoBuffFrameOptionsPartyOut_Text:Hide();
AutoBuffFrameOptionsPartyOutButton:Hide();
AutoBuffFrameOptionsPartyAlways_Text:Hide();
AutoBuffFrameOptionsPartyAlwaysButton:Hide();
AutoBuffFrameOptionsDefaultParty_Text:Show();
AutoBuffFrameOptionsHealth_Text:ClearAllPoints();
AutoBuffFrameOptionsHealth_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsParty_Text", "BOTTOMLEFT", 0, -9)
height = height -15;
end
t = AutoBuff_Option(n, 'h');
if (not t) then
AutoBuffFrameOptionsHealth:Hide();
AutoBuffFrameOptionsHealth_ValueText:Hide();
AutoBuffFrameOptionsHealthButton:Hide();
AutoBuffFrameOptionsDefaultHealth_Text:Show();
else
AutoBuffFrameOptionsHealthDefaultButton:SetChecked(1);
if (t > 0) then
AutoBuffFrameOptionsHealthButton:SetChecked(0);
AutoBuffFrameOptionsHealth_ValueText:SetText(">"..t.."%");
AutoBuffFrameOptionsHealth:SetValue(t);
else
t = t*-1;
AutoBuffFrameOptionsHealthButton:SetChecked(1);
AutoBuffFrameOptionsHealth_ValueText:SetText("<"..t.."%");
AutoBuffFrameOptionsHealth:SetValue(t);
end
end
t = AutoBuff_Option(n, 'm');
if (not t) then
AutoBuffFrameOptionsMana:Hide();
AutoBuffFrameOptionsMana_ValueText:Hide();
AutoBuffFrameOptionsManaButton:Hide();
AutoBuffFrameOptionsDefaultMana_Text:Show();
else
AutoBuffFrameOptionsManaDefaultButton:SetChecked(1);
if (t > 0) then
AutoBuffFrameOptionsManaButton:SetChecked(0);
AutoBuffFrameOptionsMana:SetValue(t);
AutoBuffFrameOptionsMana_ValueText:SetText(">"..t.."%");
else
t = t*-1;
AutoBuffFrameOptionsManaButton:SetChecked(1);
AutoBuffFrameOptionsMana:SetValue(t);
AutoBuffFrameOptionsMana_ValueText:SetText("<"..t.."%");
end
end
--if (not AutoBuff_IsAura(n)) and (n ~= string.lower(AUTOBUFF_ABILITY_TRUESHOTAURA)) then
if (not AutoBuff_IsAura(n)) then
t = AutoBuff_Option(n, 'r');
if (not t) then
AutoBuffFrameOptionsRebuff:Hide();
AutoBuffFrameOptionsRebuff_ValueText:Hide();
AutoBuffFrameOptionsDefaultRebuff_Text:Show();
else
AutoBuffFrameOptionsRebuffDefaultButton:SetChecked(1);
AutoBuffFrameOptionsRebuff:SetValue(t);
AutoBuffFrameOptionsRebuff_ValueText:SetText(AutoBuffFrame_RebuffValueText(t));
end
else
AutoBuffFrameOptionsRebuffDefaultButton:Hide();
AutoBuffFrameOptionsRebuff:Hide();
AutoBuffFrameOptionsRebuff_Text:Hide();
AutoBuffFrameOptionsRebuff_ValueText:Hide();
height = height - 28;
AutoBuffFrameOptionsRank_Text:ClearAllPoints();
AutoBuffFrameOptionsRank_Text:SetPoint("TOPLEFT", "AutoBuffFrameOptionsMana_Text", "BOTTOMLEFT", 0, -9)
end
local hr = 0;
if (x == "weapon") then hr = vWeaponList[n]; end
--if (x == "track") then hr = vTrackList[n]; end
--if (x == "aspect") then hr = vAspectList[n]; end
--if (x == "seal") then hr = vSealList[n]; end
if (x == "spell") and (vSpellList[n]['k']) then hr = vSpellList[n]['k']; end
--if (x == "track") and (vTrackList[n]['k']) then hr = vTrackList[n]['k']; end
--if (x == "aspect") and (vAspectList[n]['k']) then hr = vAspectList[n]['k']; end
if (x == "seal") and (vSealList[n]['k']) then hr = vSealList[n]['k']; end
if (hr and hr > 1) then
t = AutoBuff_Option(n, 'k');
AutoBuffFrameOptionsRank:SetMinMaxValues(1, hr);
if (not t) then
AutoBuffFrameOptionsRank:Hide();
AutoBuffFrameOptionsRank_ValueText:Hide();
AutoBuffFrameOptionsDefaultRank_Text:Show();
else
AutoBuffFrameOptionsRankDefaultButton:SetChecked(1);
AutoBuffFrameOptionsRank:SetValue(t);
AutoBuffFrameOptionsRank_ValueText:SetText(t);
end
else
AutoBuffFrameOptionsRankDefaultButton:Hide();
AutoBuffFrameOptionsRank:Hide();
AutoBuffFrameOptionsRank_Text:Hide();
AutoBuffFrameOptionsRank_ValueText:Hide();
height = height - 28;
end
AutoBuffFrameOptions:SetHeight(height);
end
end
end
function AutoBuffFrame_OnClick()
if (vGUI['r']) then return; end
local s = vGUI['s'];
local x = vGUI['m'][s];
local frame, n = this:GetName(), vGUI['n']
if (not frame) then return; end
local c = this:GetChecked();
if (frame == "AutoBuffFrameCheckButton") then
if (not c or c==0) then AutoBuff_Off(); end -- EMERALD: Persistant on/off checkbox
--else AutoBuff_On(); end
if (not c or c==0) then
AutoBuff_Off();
AutoBuffFrameAbility:Hide();
else
AutoBuff_On();
AutoBuffFrameAbility:Show();
AutoBuff_Populate();
end
elseif (frame == "AutoBuffFrameOptionsEnableButton") then
local t = vGUI['m'][(vGUI['s'])];
if (t == "spell") then
if (c == 1) then c = "default"; else c = 1; end
AutoBuff_Option(n, 'd', c);
if (AutoBuff_IsBlessing(n)) then AutoBuff_FixBlessing(n); end
if (AutoBuff_IsAura(n)) then AutoBuff_FixAura(n); end
elseif (t == "weapon") then
if (c == 1) then AutoBuff_Data[vC]['w'] = vGUI['n'];
else AutoBuff_Data[vC]['w'] = "off"; end
AutoBuff_WeaponLoad();
elseif (t == "track") then
if (c == 1) then AutoBuff_Data[vC]['t'] = vGUI['n'];
else AutoBuff_Data[vC]['t'] = "off"; end
AutoBuff_TrackLoad();
elseif (t == "aspect") then
if (c == 1) then AutoBuff_Data[vC]['a'] = vGUI['n'];
else AutoBuff_Data[vC]['a'] = "off"; end
AutoBuff_AspectLoad();
elseif (t == "seal") then
if (c == 1) then AutoBuff_Data[vC]["seal"] = vGUI['n'];
else AutoBuff_Data[vC]["seal"] = "off"; end
AutoBuff_SealLoad();
end
AutoBuff_Populate();
AutoBuffNameButton_OnClick(vGUI['s']);
elseif (frame == "AutoBuffFrameOptionsHealthButton") then
if (c == 1) then t = "<";
else t = ">"; end
AutoBuffFrameOptionsHealth_ValueText:SetText(t..AutoBuffFrameOptionsHealth:GetValue().."%");
AutoBuff_Option(n, 'h', (AutoBuff_Option(n, 'h')*-1));
elseif (frame == "AutoBuffFrameOptionsManaButton") then
if (c == 1) then t = "<";
else t = ">"; end
AutoBuffFrameOptionsMana_ValueText:SetText(t..AutoBuffFrameOptionsMana:GetValue().."%");
AutoBuff_Option(n, 'm', (AutoBuff_Option(n, 'm')*-1));
elseif (frame == "AutoBuffFrameOptionsCombatInButton") then
this:SetChecked(1);
AutoBuffFrameOptionsCombatOutButton:SetChecked(0);
AutoBuffFrameOptionsCombatAlwaysButton:SetChecked(0);
AutoBuff_Option(n, 'c', 1);
elseif (frame == "AutoBuffFrameOptionsCombatOutButton") then
this:SetChecked(1);
AutoBuffFrameOptionsCombatInButton:SetChecked(0);
AutoBuffFrameOptionsCombatAlwaysButton:SetChecked(0);
AutoBuff_Option(n, 'c', 2);
elseif (frame == "AutoBuffFrameOptionsCombatAlwaysButton") then
this:SetChecked(1);
AutoBuffFrameOptionsCombatInButton:SetChecked(0);
AutoBuffFrameOptionsCombatOutButton:SetChecked(0);
AutoBuff_Option(n, 'c', 3);
elseif (frame == "AutoBuffFrameOptionsCombatDefaultButton") then
if (c == 1) then
AutoBuff_Option(n, 'c', AutoBuff_Option('d', 'c'));
else
AutoBuff_Option(n, 'c', "default");
end
AutoBuffNameButton_OnClick(vGUI['s']);
elseif (frame == "AutoBuffFrameOptionsPartyInButton") then
this:SetChecked(1);
AutoBuffFrameOptionsPartyOutButton:SetChecked(0);
AutoBuffFrameOptionsPartyAlwaysButton:SetChecked(0);
AutoBuff_Option(n, 'p', 1);
elseif (frame == "AutoBuffFrameOptionsPartyOutButton") then
this:SetChecked(1);
AutoBuffFrameOptionsPartyInButton:SetChecked(0);
AutoBuffFrameOptionsPartyAlwaysButton:SetChecked(0);
AutoBuff_Option(n, 'p', 2);
elseif (frame == "AutoBuffFrameOptionsPartyAlwaysButton") then
this:SetChecked(1);
AutoBuffFrameOptionsPartyInButton:SetChecked(0);
AutoBuffFrameOptionsPartyOutButton:SetChecked(0);
AutoBuff_Option(n, 'p', 3);
elseif (frame == "AutoBuffFrameOptionsPartyDefaultButton") then
if (c == 1) then
AutoBuff_Option(n, 'p', AutoBuff_Option('d', 'p'));
else
AutoBuff_Option(n, 'p', "default");
end
AutoBuffNameButton_OnClick(vGUI['s']);
elseif (frame == "AutoBuffFrameOptionsTriggerWheelUpButton") or
(frame == "AutoBuffFrameOptionsTriggerWheelDownButton") or
(frame == "AutoBuffFrameOptionsTriggerTargetButton") then
local trigger = 0;
if (AutoBuffFrameOptionsTriggerWheelUpButton:GetChecked() == 1) then trigger = trigger + 2^1; end
if (AutoBuffFrameOptionsTriggerWheelDownButton:GetChecked() == 1) then trigger = trigger + 2^2; end
if (AutoBuffFrameOptionsTriggerTargetButton:GetChecked() == 1) then trigger = trigger + 2^3; end
AutoBuff_Option(n, 't', trigger);
elseif (frame == "AutoBuffFrameOptionsTriggerDefaultButton") then
if (c == 1) then
AutoBuff_Option(n, 't', AutoBuff_Option('d', 't'));
else
AutoBuff_Option(n, 't', "default");
end
AutoBuffNameButton_OnClick(vGUI['s']);
elseif (frame == "AutoBuffFrameOptionsHealthDefaultButton") then
if (c == 1) then
AutoBuff_Option(n, 'h', AutoBuff_Option('d', 'h'));
else
AutoBuff_Option(n, 'h', "default");
end
AutoBuffNameButton_OnClick(vGUI['s']);
elseif (frame == "AutoBuffFrameOptionsManaDefaultButton") then
if (c == 1) then
AutoBuff_Option(n, 'm', AutoBuff_Option('d', 'm'));
else
AutoBuff_Option(n, 'm', "default");
end
AutoBuffNameButton_OnClick(vGUI['s']);
elseif (frame == "AutoBuffFrameOptionsRebuffDefaultButton") then
if (c == 1) then
AutoBuff_Option(n, 'r', AutoBuff_Option('d', 'r'));
else
AutoBuff_Option(n, 'r', "default");
end
AutoBuffNameButton_OnClick(vGUI['s']);
elseif (frame == "AutoBuffFrameOptionsRankDefaultButton") then
if (c == 1) then
local a, b = AutoBuffFrameOptionsRank:GetMinMaxValues();
AutoBuff_Option(n, 'k', b);
else
AutoBuff_Option(n, 'k', "default");
end
AutoBuffNameButton_OnClick(vGUI['s']);
end
end
function AutoBuffFrame_OnValueChanged()
if (vGUI['r']) then return; end
local frame = this:GetName();
if (not frame) then return; end
local c = this:GetValue();
local t;
if (frame == "AutoBuffFrameOptionsHealth") then
if (AutoBuffFrameOptionsHealthButton:GetChecked() == 1) then t = "<"..c.."%"; c=c*-1;
else t = ">"..c.."%"; end
AutoBuffFrameOptionsHealth_ValueText:SetText(t);
AutoBuff_Option(vGUI['n'],'h',c);
elseif (frame == "AutoBuffFrameOptionsMana") then
if (AutoBuffFrameOptionsManaButton:GetChecked() == 1) then t = "<"..c.."%"; c=c*-1;
else t = ">"..c.."%"; end
AutoBuffFrameOptionsMana_ValueText:SetText(t);
AutoBuff_Option(vGUI['n'],'m',c);
elseif (frame == "AutoBuffFrameOptionsRebuff") then
AutoBuffFrameOptionsRebuff_ValueText:SetText(AutoBuffFrame_RebuffValueText(c));
AutoBuff_Option(vGUI['n'], 'r', c);
elseif (frame == "AutoBuffFrameOptionsRank") then
AutoBuffFrameOptionsRank_ValueText:SetText(c);
AutoBuff_Option(vGUI['n'], 'k', c);
end
end
function AutoBuffFrame_RebuffValueText(c)
c = tonumber(c);
if (c == nil) then return; end
local m = floor(c/60);
local s = c - (m*60);
local v = s.."s";
if (m>0) and (s == 0) then v = m.."m";
elseif (m>0) then v = m.."m"..v; end
return v;
end
function AutoBuffFrame_Tooltip(arg1,arg2,arg3)
if (not arg3) then arg3 = "ANCHOR_TOPLEFT"; end
GameTooltip:SetOwner(this, arg3);
GameTooltip:SetText(arg1);
GameTooltip:AddLine(arg2, .75, .75, .75, 1);
GameTooltip:Show();
end
function AutoBuffFrame_OnEnter()
local frame = this:GetName();
if (not frame) then return; end
if (frame == "AutoBuffFrameCheckButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_ENABLE_TOOLTIP_TITLE, AUTOBUFF_GUI_ENABLE_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsEnableButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_ENABLEABILITY_TOOLTIP_TITLE, AUTOBUFF_GUI_ENABLEABILITY_TOOLTIP, "ANCHOR_BOTTOMRIGHT");
elseif (frame == "AutoBuffFrameOptionsRebuff") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_REBUFF_TOOLTIP_TITLE, AUTOBUFF_GUI_REBUFF_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsHealth") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_HEALTH_TOOLTIP_TITLE, AUTOBUFF_GUI_HEALTH_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsMana") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_MANA_TOOLTIP_TITLE, AUTOBUFF_GUI_MANA_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsHealthButton") or (frame == "AutoBuffFrameOptionsManaButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_INVERT_TOOLTIP_TITLE, AUTOBUFF_GUI_INVERT_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsCombatInButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_COMBAT_IN_TOOLTIP_TITLE, AUTOBUFF_GUI_COMBAT_IN_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsCombatOutButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_COMBAT_OUT_TOOLTIP_TITLE, AUTOBUFF_GUI_COMBAT_OUT_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsCombatAlwaysButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_COMBAT_ALWAYS_TOOLTIP_TITLE, AUTOBUFF_GUI_COMBAT_ALWAYS_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsPartyInButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_PARTY_IN_TOOLTIP_TITLE, AUTOBUFF_GUI_PARTY_IN_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsPartyOutButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_PARTY_OUT_TOOLTIP_TITLE, AUTOBUFF_GUI_PARTY_OUT_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsPartyAlwaysButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_PARTY_ALWAYS_TOOLTIP_TITLE, AUTOBUFF_GUI_PARTY_ALWAYS_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsCombatDefaultButton") or (frame == "AutoBuffFrameOptionsHealthDefaultButton") or (frame == "AutoBuffFrameOptionsTriggerDefaultButton") or
(frame == "AutoBuffFrameOptionsManaDefaultButton") or (frame == "AutoBuffFrameOptionsRebuffDefaultButton") or (frame == "AutoBuffFrameOptionsPartyDefaultButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_DEFAULT_TOOLTIP_TITLE, AUTOBUFF_GUI_DEFAULT_TOOLTIP);
elseif (frame == "AutoBuffFrameOptionsTriggerWheelUpButton") or (frame == "AutoBuffFrameOptionsTriggerWheelDownButton") or (frame == "AutoBuffFrameOptionsTriggerTargetButton") then
AutoBuffFrame_Tooltip(AUTOBUFF_GUI_TRIGGER_TITLE, AUTOBUFF_GUI_TRIGGER_TOOLTIP);
end
end
function AutoBuffFrame_OnMouseDown(arg1) if arg1=="LeftButton" then AutoBuffFrame:StartMoving(); end end
function AutoBuffFrame_OnMouseUp(arg1) if arg1=="LeftButton" then AutoBuffFrame:StopMovingOrSizing(); end end
-- Had to make this function weird, as it was giving me an awful 'next' key is invalid error.
function AutoBuff_CorrectName(s)
s = string.lower(s);
local a,b,c,d;
for a, b in cSpellList do
c = string.lower(a);
if (c == s) then d = a; break; end
end
if (not d) then
for a, b in cWeaponList do
c = string.lower(a);
if (c == s) then d = a; break; end
end
end
if (not d) then
for a, b in cTrackList do
c = string.lower(a);
if (c == s) then d = a; break; end
end
end
if (not d) then
for a, b in cAspectList do
c = string.lower(a);
if (c == s) then d = a; break; end
end
end
if (not d) then
for a, b in cSealList do
c = string.lower(a);
if (c == s) then d = a; break; end
end
end
return d;
end
function AutoBuff_SpellList(n)
local a,b,r;
for a,b in cSpellList do
if (b['i'] == n) then r = a; break; end
end
return r;
end
-- ==================================================
function TitanPanelAutoBuffButton_OnLoad()
this.registry = {
id = TITAN_AUTOBUFF_ID,
menuText = TITAN_AUTOBUFF_MENU_TEXT,
buttonTextFunction = nil,
tooltipTitle = TITAN_AUTOBUFF_TOOLTIP,
tooltipTextFunction = "TitanPanelAutoBuffButton_GetTooltipText",
icon = TITAN_AUTOBUFF_ICON_ON,
iconWidth = 16,
frequency = 5,
};
end
function TitanPanelAutoBuffButton_OnClick()
if (arg1=="LeftButton") then
AutoBuffOptionsButton_OnClick(arg1);
end
end
function TitanPanelAutoBuffButton_GetTooltipText()
--if (IsAddOnLoaded("Titan")) then TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Testing", u.ColorList[string.lower("red")]).."\t"..TitanUtils_GetColoredText("Testing", u.ColorList[string.lower("yellow")]).."\n"; end
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TitanUtils_GetColoredText(TITAN_AUTOBUFF_ENABLE, u.ColorList[string.lower("yellow")]).."\t";
if (TitanAutoBuffStates.Enabled) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Enabled", u.ColorList[string.lower("green")]).."\n";
else
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Disabled", u.ColorList[string.lower("red")]).."\n";
end
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText(TITAN_AUTOBUFF_DEBUG, u.ColorList[string.lower("yellow")]).."\t";
if (TitanAutoBuffStates.Debug) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Enabled", u.ColorList[string.lower("green")]).."\n";
else
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Disabled", u.ColorList[string.lower("red")]).."\n";
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK) or vClass == string.lower(AUTOBUFF_CLASS_SHAMAN)) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText(TITAN_AUTOBUFF_WATER, u.ColorList[string.lower("yellow")]).."\t";
if (TitanAutoBuffStates.Water) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Enabled", u.ColorList[string.lower("green")]).."\n";
else
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Disabled", u.ColorList[string.lower("red")]).."\n";
end
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK) or vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText(TITAN_AUTOBUFF_TAP, u.ColorList[string.lower("yellow")]).."\t";
if (TitanAutoBuffStates.Tap) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Enabled", u.ColorList[string.lower("green")]).."\n";
else
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Disabled", u.ColorList[string.lower("red")]).."\n";
end
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText(TITAN_AUTOBUFF_SCALED, u.ColorList[string.lower("yellow")]).."\t";
if (TitanAutoBuffStates.Scaled) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Enabled", u.ColorList[string.lower("green")]).."\n";
else
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Disabled", u.ColorList[string.lower("red")]).."\n";
end
end
if (vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText(TITAN_AUTOBUFF_INNER, u.ColorList[string.lower("yellow")]).."\t";
if (TitanAutoBuffStates.Inner) then
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Enabled", u.ColorList[string.lower("green")]).."\n";
else
TITAN_AUTOBUFF_TOOLTIP_CONTENTS = TITAN_AUTOBUFF_TOOLTIP_CONTENTS..TitanUtils_GetColoredText("Disabled", u.ColorList[string.lower("red")]).."\n";
end
end
return TITAN_AUTOBUFF_TOOLTIP_CONTENTS;
end
function TitanPanelRightClickMenu_PrepareAutoBuffMenu()
local info;
TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_AUTOBUFF_ID].menuText);
info = {};
info.text = TITAN_AUTOBUFF_ENABLE;
info.func = AutoBuffToggle;
info.checked = TitanAutoBuffStates.Enabled;
UIDropDownMenu_AddButton(info);
TitanPanelRightClickMenu_AddSpacer();
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK) or vClass == string.lower(AUTOBUFF_CLASS_SHAMAN)) then
info = {};
info.text = TITAN_AUTOBUFF_WATER;
info.func = AutoBuffWaterToggle;
info.checked = TitanAutoBuffStates.Water;
UIDropDownMenu_AddButton(info);
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK) or vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
info = {};
info.text = TITAN_AUTOBUFF_TAP;
info.func = AutoBuffTapToggle;
info.checked = TitanAutoBuffStates.Tap;
UIDropDownMenu_AddButton(info);
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) then
info = {};
info.text = TITAN_AUTOBUFF_SCALED;
info.func = AutoBuffScaledToggle;
info.checked = TitanAutoBuffStates.Scaled;
UIDropDownMenu_AddButton(info);
end
if (vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
info = {};
info.text = TITAN_AUTOBUFF_INNER;
info.func = AutoBuffInnerToggle;
info.checked = TitanAutoBuffStates.Inner;
UIDropDownMenu_AddButton(info);
end
TitanPanelRightClickMenu_AddSpacer();
info = {};
info.text = TITAN_AUTOBUFF_BUTTONSHOW;
info.func = AutoBuff_HideButton;
info.checked = TitanAutoBuffStates.Button;
UIDropDownMenu_AddButton(info);
info = {};
info.text = TITAN_AUTOBUFF_BUTTONRESET;
info.func = AutoBuff_ResetButton;
info.checked = nil;
UIDropDownMenu_AddButton(info);
TitanPanelRightClickMenu_AddSpacer();
info = {};
info.text = TITAN_AUTOBUFF_DEBUG;
info.func = AutoBuffDebug;
info.checked = TitanAutoBuffStates.Debug;
UIDropDownMenu_AddButton(info);
TitanPanelRightClickMenu_AddSpacer();
TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_AUTOBUFF_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end
-- Fubar Functions
function FuBarAutoBuff_OnLoad()
AutoBuffFu = AceLibrary("AceAddon-2.0"):new("AceConsole-2.0", "AceDB-2.0", "FuBarPlugin-2.0");
local L = AceLibrary("AceLocale-2.0"):new("AutoBuffFu");
local Dewdrop = AceLibrary("Dewdrop-2.0");
local Tablet = AceLibrary("Tablet-2.0");
L:RegisterTranslations("enUS", function() return {
["enable"] = TITAN_AUTOBUFF_ENABLE,
["buttonshow"] = TITAN_AUTOBUFF_BUTTONSHOW,
["buttonreset"] = TITAN_AUTOBUFF_BUTTONRESET,
["debug"] = TITAN_AUTOBUFF_DEBUG,
["water"] = TITAN_AUTOBUFF_WATER,
["tap"] = TITAN_AUTOBUFF_TAP,
["scaled"] = TITAN_AUTOBUFF_SCALED,
["inner"] = TITAN_AUTOBUFF_INNER,
["tablethint"] = "Left-Click for AutoBuff UI",
} end);
AutoBuffFu:RegisterDB("AutoBuffFuDB");
AutoBuffFu.hasNoText = true;
AutoBuffFu.hasIcon = true;
AutoBuffFu.defaultPosition = "RIGHT";
--AutoBuffFu.title = TITAN_AUTOBUFF_ID;
AutoBuffFu.title = TITAN_AUTOBUFF_TOOLTIP; -- With Version number
AutoBuffFu:SetIcon(TITAN_AUTOBUFF_ICON_ON..".tga");
local optionsTable = {
handler = AutoBuffFu,
type = "Buffs",
args = {};
};
AutoBuffFu.OnMenuRequest = optionsTable;
function AutoBuffFu:OnTooltipUpdate()
-- Have been unable to get the tooltip to work, keeps erroring out with:
-- Count: 5
-- Error: ...rface\AddOns\AutoBuff\libs\Tablet-2.0\Tablet-2.0.lua:2265: attempt to index a nil value
local cat = Tablet:AddCategory(
'columns', 2
);
if (TitanAutoBuffStates.Enabled) then
cat:AddLine(
'text', L"enable",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Enabled",
'text2R', 0,
'text2G', 1,
'text2B', 0
);
else
cat:AddLine(
'text', L"enable",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Disabled",
'text2R', 1,
'text2G', 0,
'text2B', 0
);
end
if (TitanAutoBuffStates.Debug) then
cat:AddLine(
'text', L"debug",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Enabled",
'text2R', 0,
'text2G', 1,
'text2B', 0
);
else
cat:AddLine(
'text', L"debug",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Disabled",
'text2R', 1,
'text2G', 0,
'text2B', 0
);
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK) or vClass == string.lower(AUTOBUFF_CLASS_SHAMAN)) then
if (TitanAutoBuffStates.Water) then
cat:AddLine(
'text', L"water",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Enabled",
'text2R', 0,
'text2G', 1,
'text2B', 0
);
else
cat:AddLine(
'text', L"water",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Disabled",
'text2R', 1,
'text2G', 0,
'text2B', 0
);
end
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK) or vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
if (TitanAutoBuffStates.Tap) then
cat:AddLine(
'text', L"tap",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Enabled",
'text2R', 0,
'text2G', 1,
'text2B', 0
);
else
cat:AddLine(
'text', L"tap",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Disabled",
'text2R', 1,
'text2G', 0,
'text2B', 0
);
end
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) then
if (TitanAutoBuffStates.Scaled) then
cat:AddLine(
'text', L"scaled",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Enabled",
'text2R', 0,
'text2G', 1,
'text2B', 0
);
else
cat:AddLine(
'text', L"scaled",
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Disabled",
'text2R', 1,
'text2G', 0,
'text2B', 0
);
end
end
if (vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
if (TitanAutoBuffStates.Inner) then
cat:AddLine(
'text', TITAN_AUTOBUFF_INNER,
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Enabled",
'text2R', 0,
'text2G', 1,
'text2B', 0
);
else
cat:AddLine(
'text', TITAN_AUTOBUFF_INNER,
'textR', 1,
'textG', 1,
'textB', 0,
'text2', "Disabled",
'text2R', 1,
'text2G', 0,
'text2B', 0
);
end
end
cat:AddLine("text", "");
Tablet:SetHint(L"tablethint");
end
function AutoBuffFu:OnMenuRequest(value)
Dewdrop:AddLine(
"text", TITAN_AUTOBUFF_ENABLE,
"arg1", self,
"func", AutoBuffToggle,
"checked", TitanAutoBuffStates.Enabled
);
Dewdrop:AddLine(
"text", ""
);
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK) or vClass == string.lower(AUTOBUFF_CLASS_SHAMAN)) then
Dewdrop:AddLine(
"text", TITAN_AUTOBUFF_WATER,
"arg1", self,
"func", AutoBuffWaterToggle,
"checked", TitanAutoBuffStates.Water
);
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK) or vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
Dewdrop:AddLine(
"text", TITAN_AUTOBUFF_TAP,
"arg1", self,
"func", AutoBuffTapToggle,
"checked", TitanAutoBuffStates.Tap
);
end
if (vClass == string.lower(AUTOBUFF_CLASS_WARLOCK)) then
Dewdrop:AddLine(
"text", TITAN_AUTOBUFF_SCALED,
"arg1", self,
"func", AutoBuffScaledToggle,
"checked", TitanAutoBuffStates.Scaled
);
end
if (vClass == string.lower(AUTOBUFF_CLASS_PRIEST)) then
Dewdrop:AddLine(
"text", TITAN_AUTOBUFF_INNER,
"arg1", self,
"func", AutoBuffInnerToggle,
"checked", TitanAutoBuffStates.Inner
);
end
Dewdrop:AddLine(
"text", ""
);
Dewdrop:AddLine(
"text", TITAN_AUTOBUFF_BUTTONSHOW,
"arg1", self,
"func", AutoBuff_HideButton,
"checked", TitanAutoBuffStates.Button
);
Dewdrop:AddLine(
"text", TITAN_AUTOBUFF_BUTTONRESET,
"arg1", self,
"func", AutoBuff_ResetButton,
"checked", nil
);
Dewdrop:AddLine(
"text", ""
);
Dewdrop:AddLine(
"text", TITAN_AUTOBUFF_DEBUG,
"arg1", self,
"func", AutoBuffDebug,
"checked", TitanAutoBuffStates.Debug
);
Dewdrop:AddLine("text", "");
end
function AutoBuffFu:OnClick() -- Only reacts on "LeftButton"
AutoBuffOptionsButton_OnClick("LeftButton");
end
end -- End prevention code wrap
-- Class declarations
-- Utility class provides print (to the chat box) and echo (displays over your character's head).
-- Instantiate it and use the colon syntax.
-- Color is an optional argument. You can either use one of 7 named colors
-- "red", "green", "blue", "yellow", "cyan", "magenta", "white" or
-- a table with the r, g, b values.
-- IE foo:Print("some text", {r = 1.0, g=1.0, b=.5})
-- if there is an existing Utility Class version of equal or greater version, don't declare.
if not Utility_Class or (not Utility_Class.version) or (Utility_Class.version < 1.01) then
Utility_Class = {};
Utility_Class.version = 1.01
function Utility_Class:New ()
local o = {} -- create object
setmetatable(o, self)
self.__index = self
return o
end
function Utility_Class:Print(msg, color)
local text;
local r, g, b;
if msg == nil then return; end
if color == nil then color = "white"; end
r, g, b = self.GetColor(color);
if( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage(msg,r,g,b);
end
end
function Utility_Class:Echo(msg, color)
local text;
local r, g, b;
if msg == nil then return; end
if color == nil then color = "white"; end
r, g, b = self.GetColor(color);
UIErrorsFrame:AddMessage(msg, r, g, b, 1.0, UIERRORS_HOLD_TIME);
end
function Utility_Class:GetColor(color)
if color == nil then color = self; end
if color == nil then return 0, 0, 0 end
if type(color) == "string" then
color = Utility_Class.ColorList[string.lower(color)];
end
if type(color) == "table" then
if color.r == nil then color.r = 0.0 end
if color.g == nil then color.g = 0.0 end
if color.b == nil then color.g = 0.0 end
else
return 0, 0, 0
end
if color.r < 0 then color.r = 0.0 end
if color.g < 0 then color.g = 0.0 end
if color.b < 0 then color.g = 0.0 end
if color.r > 1 then color.r = 1.0 end
if color.g > 1 then color.g = 1.0 end
if color.b > 1 then color.g = 1.0 end
return color.r, color.g, color.b
end
Utility_Class.ColorList = {}
Utility_Class.ColorList["red"] = { r = 1.0, g = 0.0, b = 0.0 }
Utility_Class.ColorList["green"] = { r = 0.0, g = 1.0, b = 0.0 }
Utility_Class.ColorList["blue"] = { r = 0.0, g = 0.0, b = 1.0 }
Utility_Class.ColorList["white"] = { r = 1.0, g = 1.0, b = 1.0 }
Utility_Class.ColorList["magenta"] = { r = 1.0, g = 0.0, b = 1.0 }
Utility_Class.ColorList["yellow"] = { r = 1.0, g = 1.0, b = 0.0 }
Utility_Class.ColorList["cyan"] = { r = 0.0, g = 1.0, b = 1.0 }
Utility_Class.ColorList["orange"] = { r = 1.0, g = 0.6, b = 0.0 }
end