vanilla-wow-addons – Rev 1
?pathlinks?
function GB_Main_RegisterEvents()
this:RegisterEvent("ACTIONBAR_HIDEGRID");
this:RegisterEvent("BAG_UPDATE");
this:RegisterEvent("PLAYER_AURAS_CHANGED");
this:RegisterEvent("PLAYER_ENTER_COMBAT");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
--this:RegisterEvent("PLAYER_LEAVING_WORLD");
this:RegisterEvent("PLAYER_LEAVE_COMBAT");
this:RegisterEvent("PLAYER_REGEN_DISABLED");
this:RegisterEvent("PLAYER_REGEN_ENABLED");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
this:RegisterEvent("RAID_ROSTER_UPDATE");
this:RegisterEvent("SPELLCAST_FAILED");
this:RegisterEvent("SPELLCAST_INTERRUPTED");
this:RegisterEvent("SPELLCAST_START");
this:RegisterEvent("SPELLCAST_STOP");
this:RegisterEvent("SPELLS_CHANGED");
this:RegisterEvent("TRAINER_CLOSED");
this:RegisterEvent("UNIT_AURA");
this:RegisterEvent("UNIT_HEALTH");
this:RegisterEvent("UNIT_INVENTORY_CHANGED");
this:RegisterEvent("UNIT_LEVEL");
this:RegisterEvent("UPDATE_BINDINGS");
this:RegisterEvent("VARIABLES_LOADED");
end
function GB_Main_OnLoad()
GB_Main_RegisterEvents();
SlashCmdList["GB"] = GB_Slash_Handler;
SLASH_GB1 = "/gb";
SLASH_GB2 = "/groupbuttons";
end
function GB_Main_OnEvent()
if (event == "VARIABLES_LOADED") then
GB_VARIABLES_LOADED = true;
if ( GB_ENTERING_WORLD and GB_BAGS_LOADED) then
GB_Initialize();
end
elseif (event == "PLAYER_ENTERING_WORLD") then
--GB_Main_RegisterEvents();
GB_ENTERING_WORLD = true;
if ( GB_VARIABLES_LOADED and GB_BAGS_LOADED) then
GB_Initialize();
end
GB_REGEN = true;
GB_INCOMBAT = false;
elseif (event == "ACTIONBAR_HIDEGRID") then
GB_Clear_MouseAction();
elseif (event == "BAG_UPDATE") then
if (GB_INITIALIZED) then
GroupButtonsFrame.itemstimer = .5;
else
GB_BAGS_LOADED = nil;
GroupButtonsFrame.bagsloadedtimer = 1;
end
elseif (event == "PLAYER_ENTER_COMBAT") then
GB_ATTACKING = true;
GB_INCOMBAT = true;
elseif (event == "PLAYER_LEAVE_COMBAT") then
GB_ATTACKING = false;
if (GB_REGEN) then
GB_INCOMBAT = false;
end
elseif (event == "PLAYER_LEAVING_WORLD") then
this:UnregisterAllEvents();
this:RegisterEvent("PLAYER_ENTERING_WORLD");
elseif (event == "PLAYER_REGEN_DISABLED") then
GB_REGEN = false;
GB_INCOMBAT = true;
elseif (event == "PLAYER_REGEN_ENABLED") then
GB_REGEN = true;
if (not GB_ATTACKING) then
GB_INCOMBAT = false;
end
elseif (event == "PLAYER_TARGET_CHANGED") then
if (UnitName("target")) then
this.targetauras = true;
GB_Update_Auras("target");
else
this.targetauras = false;
end
elseif (event == "RAID_ROSTER_UPDATE") then
if (not GB_INITIALIZED) then return; end
for i=1,40 do
local unit = "raid"..i;
if (UnitExists(unit) and UnitName(unit) and (not GB_SKIP_NAMES[UnitName(unit)])) then
GB_RAID_MEMBERS[UnitName(unit)] = 1;
end
end
GB_Update_RaidMemberSelect();
if (not GB_Settings[GB_INDEX].raid.hide) then
GB_Initialize_Labels();
end
if (GetNumRaidMembers() > 0 and GB_SHUFFLE_RAID and (not GB_Settings[GB_INDEX].raid.hide)) then
GB_Set_Appearance("raid");
end
if (GB_Settings[GB_INDEX].hideInRaid and GetNumRaidMembers() > 0) then
local partyBar, petBar;
for i=1,4 do
partyBar = getglobal(GB_Get_UnitBar("party"..i));
petBar = getglobal(GB_Get_UnitBar("partypet"..i));
partyBar.noshow = true;
petBar.noshow = true;
partyBar:Hide();
petBar:Hide();
end
end
elseif (event == "SPELLCAST_FAILED") then
if (GB_ANNOUNCEFAILURE) then
GB_Announce_Failed(GB_Get("failedText"));
end
GB_ANNOUNCEFAILURE = nil;
GB_ANNOUNCEINTERRUPTED = nil;
GB_ISCASTING = nil;
GB_INSTANTCASTING = nil;
GB_CURRENT_HEAL = {nil};
GB_ANNOUNCED = {nil};
GB_SPELLISCASTING = nil;
elseif (event == "SPELLCAST_INTERRUPTED") then
if (GB_ANNOUNCEINTERRUPTED) then
GB_Announce_Failed(GB_Get("interruptedText"));
end
GB_ANNOUNCEFAILURE = nil;
GB_ANNOUNCEINTERRUPTED = nil;
GB_ISCASTING = nil;
GB_INSTANTCASTING = nil;
GB_CURRENT_HEAL = {nil};
GB_ANNOUNCED = {nil};
GB_SPELLISCASTING = nil;
elseif (event == "SPELLCAST_START") then
GB_ANNOUNCEFAILURE = nil;
GB_ANNOUNCEINTERRUPTED = nil;
GB_INSTANTCASTING = nil;
if (GB_ANNOUNCETEXT) then
GB_Announce_Spellcast(GB_ANNOUNCETEXT, GB_WHISPERTARGET);
end
GB_ISCASTING = nil;
GB_INSTANTCASTING = nil;
GB_ANNOUNCETEXT = nil;
GB_SPELLISCASTING = true;
elseif (event == "SPELLCAST_STOP") then
if (GB_INSTANTCASTING) then
GB_Announce_Spellcast(GB_ANNOUNCETEXT, GB_WHISPERTARGET);
GB_ANNOUNCEFAILURE = nil;
GB_ANNOUNCEINTERRUPTED = nil;
GB_ISCASTING = nil;
end
GB_INSTANTCASTING = nil;
GB_CURRENT_HEAL = {nil};
GB_SPELLISCASTING = nil;
elseif (event == "SPELLS_CHANGED") then
if (GB_CheckForNewSpells() and GB_INITIALIZED) then
if (ClassTrainerFrame and ClassTrainerFrame:IsVisible()) then return; end
GroupButtonsFrame.spellstimer = .1;
GB_Spellbook_Initialize();
end
elseif (event == "TRAINER_CLOSED") then
GB_Spellbook_Initialize();
if (GB_SPELLS_UPDATED) then
GB_SPELLS_UPDATED = nil;
else
GB_Update_SpellRanks();
end
elseif (event == "UNIT_AURA") then
if (arg1 == "target") then
if (this.targetauras) then
GB_Update_Auras(arg1);
end
else
GB_Update_Auras(arg1);
end
elseif (event == "PLAYER_AURAS_CHANGED") then
GB_Update_Auras("player");
elseif (event == "UNIT_HEALTH") then
if (GB_CURRENT_HEAL[1] and arg1 == GB_CURRENT_HEAL[3]) then
if (GB_Settings[GB_INDEX].cancelHealThreshold) then
if (not GB_Get_PastThreshold("cancelHealThreshold", GB_CURRENT_HEAL[3])) then
local text = GB_TEXT.HealCancelledMessage;
text = string.gsub(text, '$s', GB_CURRENT_HEAL[1]);
text = string.gsub(text, '$r', GB_CURRENT_HEAL[2]);
GB_Feedback(text);
GB_CURRENT_HEAL = {};
SpellStopCasting();
end
end
end
elseif (event == "UNIT_INVENTORY_CHANGED") then
if (GB_INITIALIZED) then
GroupButtonsFrame.itemstimer = .5;
end
elseif (event == "UNIT_LEVEL") then
if (GetNumRaidMembers() > 0 and string.find(arg1, "raid")) then
GB_Update_RaidMemberSelect();
end
elseif (event == "UNIT_NAME") then
if (GetNumRaidMembers() > 0 and string.find(arg1, "raid")) then
GB_Update_RaidMemberSelect();
end
elseif (event == "UPDATE_BINDINGS") then
GB_Update_Bindings();
end
end
function GB_Slash_Handler(msg)
local command, param;
local index = string.find(msg, " ");
if( index) then
command = string.sub(msg, 1, (index - 1));
param = string.sub(msg, (index + 1) );
else
command = msg;
end
if ( command == "" ) then
GB_Show_OptionsFrame("main");
elseif (command == "updateranges") then
GB_Update_SpellRanges(1)
elseif (command == "updatespells") then
GB_Update_Spells(1);
elseif (command == "toggle") then
if (param == "labels") then
GB_Toggle_Labels();
elseif (param == "empty") then
GB_Toggle_EmptyButtons();
elseif (param == "spellbook") then
GB_Toggle_MiniSpellbook();
elseif (param == "barlock") then
GB_Toggle_BarLock();
elseif (param == "buttonlock") then
GB_Toggle_ButtonsLock();
end
elseif (command == "hidebar") then
local unitBar = GB_Get_UnitBar(param);
if (unitBar) then
GB_Settings[GB_INDEX][getglobal(unitBar).index].hide = true;
GB_Set_Appearance(getglobal(unitBar).index);
end
elseif (command == "showbar") then
local unitBar = GB_Get_UnitBar(param);
if (unitBar) then
GB_Settings[GB_INDEX][getglobal(unitBar).index].hide = nil;
GB_Set_Appearance(getglobal(unitBar).index);
end
elseif (command == "setkeybar") then
local unitBar = GB_Get_UnitBar(param);
if (param == "target") then unitBar = "target"; end
if (unitBar) then
GB_Set_CurrentKeybindingBar(unitBar);
end
elseif (command == "useaction") then
local _, _, bar, button = string.find(param, "(.*) (.*)");
bar = GB_Get_UnitBar(bar);
if (bar) then
button = tonumber(button);
if (button) then
GB_ActionButton_OnClick(bar, button);
end
end
elseif (command == "contexts") then
local unitBar = GB_Get_UnitBar("target");
local button;
for i=1,20 do
button = getglobal(unitBar.."_Button_"..i);
for index,v in button.InContext do
if (v == -1) then
GB_Debug("button "..i.." "..index.." = "..v);
end
end
end
elseif (command == "spelldata") then
for name, ranks in GB_SPELLS do
for rank,data in ranks do
for i, v in data do
if (string.find(name, param)) then
GB_Feedback(name.." "..rank..": "..i.." = "..v);
end
end
end
end
elseif (command == "clearall") then
GB_Settings[GB_INDEX] = nil;
GB_Initialize_DefaultSettings();
GB_Initialize_NewSettings();
GB_UnitFrames_Initialize();
GB_Initialize_BarOptions("player");
GB_Initialize_Labels();
GB_Initialize_Toggles();
GB_Initialize_AllBars();
GB_Initialize_AnnounceOptions();
GB_Initialize_ThresholdsOptions();
GB_Initialize_MiscOptions();
elseif (command == "hidebar") then
if (GB_Settings[GB_INDEX][param]) then
GB_Settings[GB_INDEX][param].hide = true;
GB_Set_Appearance(param);
end
elseif (command == "showbar") then
if (GB_Settings[GB_INDEX][param]) then
GB_Settings[GB_INDEX][param].hide = nil;
GB_Set_Appearance(param);
end
else
for _, t in GB_HELP_TEXT do
GB_Feedback(t);
end
end
end
function GB_Debug(msg)
DEFAULT_CHAT_FRAME:AddMessage( msg, 1.0, 0.0, 0.0 );
end
function GB_Feedback(msg)
if (GB_Get("disableGBSpam")) then return; end
DEFAULT_CHAT_FRAME:AddMessage( msg, 1.0, 1.0, 0.0 );
end
function GB_StopMoving(frame)
if (frame) then
this = frame;
end
if (this.isMoving) then
this:StopMovingOrSizing();
this:SetUserPlaced(true);
GB_Settings[GB_INDEX].frameLocs[this:GetName()] = {x = this:GetLeft(), y = this:GetTop()};
this.isMoving = false;
end
end
function GB_StartMoving(frame)
if (frame) then
this = frame;
end
if (this:GetName() ~= "GB_Options" and this:GetName() ~= "GB_MiniSpellbook" ) then
if (not GB_Get("barsLocked")) then
GB_Feedback(GB_TEXT.BarsUnlockedWarning);
end
end
if (arg1 == "LeftButton") then
this:SetUserPlaced(true);
this:StartMoving();
this.isMoving = true;
end
end
function GB_Copy_Table(src, dest)
for index, value in src do
if (type(value) == "table") then
dest[index] = {};
GB_Copy_Table(value, dest[index]);
else
dest[index] = value;
end
end
end
function GB_MenuTimeout()
if (this.timer) then
this.timer = this.timer - arg1;
if (this.timer < 0) then
this:Hide();
this.timer = nil;
end
end
end
function GB_SpellChanged(text, name, rank)
text = string.gsub(text, "$name", name);
if (rank and rank ~= "") then
text = string.gsub(text, "$rank", "("..rank..")");
end
GB_Feedback(text);
end
function GB_Show_Tooltip(bar, button)
if (GB_Settings[GB_INDEX].Disable) then return; end
if (GB_Get("disableTooltip")) then return; end
local idType = GB_Settings[GB_INDEX][bar].Button[button].idType;
local name = GB_Settings[GB_INDEX][bar].Button[button].name;
if (not name) then
return;
end
GameTooltip_SetDefaultAnchor(GameTooltip, this);
if (idType == "spell") then
GameTooltip:SetSpell(GB_SPELLS[name][GB_Settings[GB_INDEX][bar].Button[button].rank].id, SpellBookFrame.bookType);
elseif (idType == "item") then
local hasCooldown = GameTooltip:SetBagItem(GB_ITEMS[name].bag,GB_ITEMS[name].slot);
if ( hasCooldown ) then
this.updateTooltip = TOOLTIP_UPDATE_TIME;
else
this.updateTooltip = nil;
end
elseif (idType == "inv") then
local _,hasCooldown = GameTooltip:SetInventoryItem("player", GB_INVENTORY[name].id);
if ( hasCooldown ) then
this.updateTooltip = TOOLTIP_UPDATE_TIME;
else
this.updateTooltip = nil;
end
elseif (idType == "macro") then
GameTooltip:SetText(name, 1, 1, 1);
end
end
function GB_AttackTarget()
if (UnitCanAttack("player","target") and UnitHealth("target") > 0) then
if (not GB_ATTACKING) then
if (not GB_Get("dontAttack")) then
AttackTarget();
end
end
end
end
function GB_Announce_Spellcast(text, target)
if (not GB_ISCASTING) then return; end
if (not text) then return; end
if (GB_Get("announceDisabled")) then return; end
if (GB_Get("doNotAnnounceSolo")) then
local numParty = GetNumPartyMembers() + GetNumRaidMembers();
if (numParty < 1) then return; end
end
local channel = "SAY";
local lang = ChatFrameEditBox.language;
if (GB_Get("doNotUseSay")) then channel="WHISPER"; end
if (not GB_Get("doNotUseParty")) then
if (GetNumPartyMembers() > 0) then channel = "PARTY"; end
end
if (not GB_Get("doNotUseRaid")) then
if (GetNumRaidMembers() > 0) then channel = "RAID"; end
end
if (GB_Settings[GB_INDEX].sendToChannel and GB_Settings[GB_INDEX].announceChannel and GB_Settings[GB_INDEX].announceChannel ~= "") then
channel = "CHANNEL";
target = GetChannelName(GB_Settings[GB_INDEX].announceChannel);
end
SendChatMessage(text, channel, lang, target);
if (GB_Get("announceFailed")) then
GB_ANNOUNCEFAILURE = true;
else
GB_ANNOUNCEFAILURE = nil;
end
if (GB_Get("announceInterrupted")) then
GB_ANNOUNCEINTERRUPTED = true;
else
GB_ANNOUNCEINTERRUPTED = nil;
end
end
function GB_KeyBindingFrame_GetLocalizedName(name, prefix)
if ( not name ) then
return "";
end
local tempName = name;
local i = strfind(name, "-");
local dashIndex = nil;
while ( i ) do
if ( not dashIndex ) then
dashIndex = i;
else
dashIndex = dashIndex + i;
end
tempName = strsub(tempName, i + 1);
i = strfind(tempName, "-");
end
local modKeys = '';
if ( not dashIndex ) then
dashIndex = 0;
else
modKeys = strsub(name, 1, dashIndex);
if ( GetLocale() == "deDE") then
modKeys = gsub(modKeys, "CTRL", "STRG");
end
end
local variablePrefix = prefix;
if ( not variablePrefix ) then
variablePrefix = "";
end
local localizedName = nil;
if ( IsMacClient() ) then
-- see if there is a mac specific name for the key
localizedName = getglobal(variablePrefix..tempName.."_MAC");
end
if ( not localizedName ) then
localizedName = getglobal(variablePrefix..tempName);
end
if ( not localizedName ) then
localizedName = tempName;
end
return modKeys..localizedName;
end
function GB_Update_Bindings()
for bar in GB_UNITS_ARRAY do
for _, unitBar in GB_UNITS_ARRAY[bar].frames do
for button = 1, GB_UNITS_ARRAY[bar].buttons do
local keytext = getglobal(unitBar.."_Button_"..button.."TextFrame_HotKey");
local keytext2 = getglobal(unitBar.."_Button_"..button.."TextFrame_DynamicHotKey");
local unit = getglobal(unitBar).unit;
if (bar == "lowesthealth") then
unit = bar;
end
if (unit == "hostiletarget") then unit = "target";
elseif (unit == "friendlytarget") then unit = "target";
end
local action = "GB_"..string.upper(unit)..button;
if (string.find(unit,"party")) then
action = "GB_"..string.upper(unit).."_"..button;
end
local action2 = "GB_DYNAMICKB"..button;
local kbtext = GB_KeyBindingFrame_GetLocalizedName(GetBindingKey(action), "KEY_");
local kbtext2 = GB_KeyBindingFrame_GetLocalizedName(GetBindingKey(action2), "KEY_");
kbtext = string.upper(kbtext);
kbtext2 = string.upper(kbtext2);
kbtext = string.gsub(kbtext, "SHIFT", "S");
kbtext = string.gsub(kbtext, "CTRL", "C");
kbtext = string.gsub(kbtext, "ALT", "A");
kbtext = string.gsub(kbtext, "MOUSE BUTTON", "MB");
kbtext = string.gsub(kbtext, "MIDDLE MOUSE", "MM");
kbtext = string.gsub(kbtext, "NUM PAD", "NP");
kbtext2 = string.gsub(kbtext2, "SHIFT", "S");
kbtext2 = string.gsub(kbtext2, "CTRL", "C");
kbtext2 = string.gsub(kbtext2, "ALT", "A");
kbtext2 = string.gsub(kbtext2, "MIDDLE MOUSE", "MM");
kbtext2 = string.gsub(kbtext2, "MOUSE BUTTON", "MB");
kbtext2 = string.gsub(kbtext2, "NUM PAD", "NP");
if (GB_Get("hideBaseBindings")) then kbtext = ""; end
if (GB_Get("hideDynamicBindings")) then kbtext2 = ""; end
keytext:SetText(kbtext);
if (GB_CURRENT_KB_BAR == unitBar or GB_CURRENT_KB_BAR == unit) then
keytext2:SetText(kbtext2);
else
keytext2:SetText("");
end
end
end
end
end
function GB_Set_CurrentKeybindingBar(unitBar)
GB_CURRENT_KB_BAR = unitBar;
GB_Update_Bindings();
end
function GB_Announce_Failed(text)
if ((not text) or text == "") then return; end
if (not GB_ANNOUNCED.spellName) then return; end
if (GB_ANNOUNCED.target) then
text = string.gsub(text, '$t', GB_ANNOUNCED.target);
end
if (GB_ANNOUNCED.spellRank) then
text = string.gsub(text, '$r', GB_ANNOUNCED.spellRank);
end
text = string.gsub(text, '$s', GB_ANNOUNCED.spellName);
local channel = "SAY";
local lang = ChatFrameEditBox.language;
if (GB_Get("doNotUseSay")) then channel="WHISPER"; end
if (not GB_Get("doNotUseParty")) then
if (GetNumPartyMembers() > 0) then channel = "PARTY"; end
end
if (not GB_Get("doNotUseRaid")) then
if (GetNumRaidMembers() > 0) then channel = "RAID"; end
end
if (GB_Settings[GB_INDEX].sendToChannel and GB_Settings[GB_INDEX].announceChannel and GB_Settings[GB_INDEX].announceChannel ~= "") then
channel = "CHANNEL";
GB_ANNOUNCED.target = GetChannelName(GB_Settings[GB_INDEX].announceChannel);
end
SendChatMessage(text, channel, lang, GB_ANNOUNCED.target);
end
function GB_Update_SpellRanks()
if (GB_Settings[GB_INDEX].Disable) then return; end
GB_SPELLS_UPDATED = true;
GB_CheckForNewSpells();
GB_Update_Spells();
local idType, spellrank, rank, autoUpdate, name
for bar in GB_UNITS_ARRAY do
for button = 1, 20 do
name = GB_Settings[GB_INDEX][bar].Button[button].name
idType = GB_Settings[GB_INDEX][bar].Button[button].idType;
spellrank = GB_Settings[GB_INDEX][bar].Button[button].rank;
autoUpdate = GB_Settings[GB_INDEX][bar].Button[button].autoUpdate;
if (idType == "spell" and autoUpdate) then
_,_,rank = string.find(spellrank, " (%d*)");
rank = tonumber(rank);
if (rank) then
rank = rank + 1;
if (GB_SPELLS[name][GB_TEXT.Rank..rank]) then
GB_Settings[GB_INDEX][bar].Button[button].rank = GB_TEXT.Rank..rank;
GB_ActionButton_Initialize(bar, button);
if (bar == GB_BAR) then
GB_Options_InitAction(bar, button);
end
end
end
end
end
end
end
function GB_CheckForNewSpells()
count = 0;
while true do
count = count + 1;
local spellName, spellRank = GetSpellName(count, BOOKTYPE_SPELL);
if not spellName then
do break end
end
end
if (GB_SPELLS_COUNT ~= (count - 1)) then
return true;
end
end
function GB_CheckTimeout(timeout, elapsed)
if (GroupButtonsFrame[timeout].time) then
GroupButtonsFrame[timeout].time = GroupButtonsFrame[timeout].time - elapsed;
if (GroupButtonsFrame[timeout].time < 0) then
GroupButtonsFrame[timeout].time = nil;
GroupButtonsFrame[timeout].func();
end
end
end
function GB_CheckBagsTimer(elapsed)
if (this.bagsloadedtimer) then
this.bagsloadedtimer = this.bagsloadedtimer - elapsed;
if (this.bagsloadedtimer < 0) then
this.bagsloadedtimer = nil;
GB_BAGS_LOADED = true;
if (GB_ENTERING_WORLD and GB_VARIABLES_LOADED) then
GB_Initialize();
end
end
end
end
function GB_CheckItemUpdateTimer(elapsed)
if (this.itemstimer) then
this.itemstimer = this.itemstimer - elapsed;
if (this.itemstimer < 0) then
this.itemstimer = nil;
GB_Update_InventoryItems();
GB_Update_ContainerItems();
end
end
end
function GB_CheckSpellsUpdateTimer(elapsed)
if (this.spellstimer) then
this.spellstimer = this.spellstimer - elapsed;
if (this.spellstimer < 0) then
this.spellstimer = nil;
GB_Update_Spells();
GB_Spellbook_Initialize();
end
end
end
function GB_UnitInRaid(unit)
local name = UnitName(unit);
for i=1, GetNumRaidMembers() do
if (UnitName("raid"..i) == name) then return true; end
end
end
function GB_CureAny(unit)
if (not unit) then
if (GB_LAST_UNIT) then
unit = GB_LAST_UNIT;
else
unit = "target";
end
end
if (not UnitName(unit)) then return; end
local disease, poison, curse, magic;
local debuff;
local spell, rank;
for i = 1, 8 do
debuff = UnitDebuff(unit, i);
if (not debuff) then break; end
GBTooltip:SetUnitDebuff(unit, i);
if (GBTooltipTextRight1:IsVisible()) then
debuff = GBTooltipTextRight1:GetText();
else
debuff = nil;
end
if (debuff) then
if (string.find(debuff, GB_FILTERS.Disease)) then
if (disease) then
disease = disease + 1;
else
disease = 1;
end
end
if (string.find(debuff, GB_FILTERS.Poison)) then
if (poison) then
poison = poison + 1;
else
poison = 1;
end
end
if (string.find(debuff, GB_FILTERS.Magic)) then
if (magic) then
magic = magic + 1;
else
magic = 1;
end
end
if (string.find(debuff, GB_FILTERS.Curse)) then
if (curse) then
curse = curse + 1;
else
curse = 1;
end
end
end
end
if (magic and (not spell)) then
if (GB_SPELLS[GB_CURES.DispelMagic.text]) then
spell = GB_CURES.DispelMagic.text;
rank = 1;
if (magic > 1) then
rank = 2;
end
elseif (GB_SPELLS[GB_CURES.Cleanse.text]) then
spell = GB_CURES.Cleanse.text;
end
end
if (disease and (not spell)) then
if (GB_SPELLS[GB_CURES.CureDisease.text]) then
spell = GB_CURES.CureDisease.text;
elseif (GB_SPELLS[GB_CURES.Purify.text]) then
spell = GB_CURES.Purify.text;
end
if (disease > 1 and GB_SPELLS[GB_CURES.AbolishDisease.text]) then
if (not GB_Get_BuffMatch(GB_CURES.AbolishDisease.text, target)) then
spell = GB_CURES.AbolishDisease.text;
else
spell = nil;
end
end
end
if (poison and (not spell)) then
if (GB_SPELLS[GB_CURES.CurePoison.text]) then
spell = GB_CURES.CurePoison.text;
elseif (GB_SPELLS[GB_CURES.Purify.text]) then
spell = GB_CURES.Purify.text;
end
if (poison > 1 and GB_SPELLS[GB_CURES.AbolishPoison.text]) then
if (not GB_Get_BuffMatch(GB_CURES.AbolishPoison.text, target)) then
spell = GB_CURES.AbolishPoison.text;
else
spell = nil;
end
end
end
if (curse and (not spell)) then
if (GB_SPELLS[GB_CURES.RemoveCurse.text]) then
spell = GB_CURES.RemoveCurse.text;
end
end
if (spell) then
if (rank) then
rank = GB_TEXT.Rank..rank;
else
rank = "";
end
CastSpell( GB_SPELLS[spell][rank].id, "BOOKTYPE_SPELL" );
else
GB_Feedback(GB_TEXT.NoEffectsFound);
end
end
--[[function GB_RunMacro(macroname)
local macroID = GetMacroIndexByName(macroname);
local _, _, body = GetMacroInfo(macroID);
if (string.find(body, "\n")) then
local line = "";
for i=1,string.len(body) do
local character = string.sub(body, i, i);
if (character == "\n") then
GB_MacroBox:SetText(line);
ChatEdit_SendText(GB_MacroBox);
line = "";
else
line = line..character;
end
end
else
GB_MacroBox:SetText(body);
ChatEdit_SendText(GB_MacroBox);
end
end --]]
function GB_RunMacro(macroname)
local name, texture, body, isLocal = GetMacroInfo(GetMacroIndexByName(macroname));
if ( not body ) then return; end
local length = string.len(body);
local text="";
for i = 1, length do
text=text..string.sub(body,i,i);
if ( string.sub(body,i,i) == "\n" or i == length ) then
if ( string.find(text,"/cast") ) then
local i, booktype = GB_GetSpell(gsub(text,"%s*/cast%s*(.*)%s;*.*","%1"));
if ( i ) then
RunScript("CastSpell("..i..",'"..booktype.."')");
end
else
while ( string.find(text, "CastSpellByName")) do
local spell = gsub(text,'.-CastSpellByName.-%(.-"(.-)".*','%1',1);
local i, booktype = GB_GetSpell(spell);
if ( i ) then
text = gsub(text,'CastSpellByName.-%(.-".-"','CastSpell('..i..','..'"'..booktype..'"',1);
else
text = gsub(text,'CastSpellByName.-%(.-".-"%)','',1);
end
end
if ( string.find(text,"/script")) then
RunScript(gsub(text,"%s*/script%s*(.*)","%1"));
else
GB_MacroBox:SetText(text);
ChatEdit_SendText(GB_MacroBox);
end
end
text="";
end
end
end
function GB_GetSpell(spell)
local s = gsub(spell, "%s-(.-)%s*%(.*","%1");
local r;
if ( string.find(spell, "%(%s*[Rr]acial")) then
r = "racial"
elseif ( string.find(spell, "%(%s*[Ss]ummon")) then
r = "summon"
elseif ( string.find(spell, "%(%s*[Aa]pprentice")) then
r = "apprentice"
elseif ( string.find(spell, "%(%s*[Jj]ourneyman")) then
r = "journeyman"
elseif ( string.find(spell, "%(%s*[Ee]xpert")) then
r = "expert"
elseif ( string.find(spell, "%(%s*[Aa]rtisan")) then
r = "artisan"
elseif ( string.find(spell, "%(%s*[Mm]aster")) then
r = "master"
elseif ( not string.find(spell, "%(")) then
r = ""
else
r = gsub(spell, ".*%(.*[Rr]ank%s*(%d+).*", "Rank %1");
end
return GB_FindSpell(s,r);
end
function GB_FindSpell(spell, rank)
local i = 1;
local booktype = "spell";
local s,r;
local ys, yr;
while true do
s, r = GetSpellName(i,"spell");
if ( not s ) then break; end
if ( string.lower(s) == string.lower(spell)) then ys=true; end
if ( (r == rank) or (r and rank and string.lower(r) == string.lower(rank))) then yr=true; end
if ( ys and yr ) then
return i,booktype;
end
i=i+1;
ys = nil;
yr = nil;
end
i = 1;
while true do
s, r = GetSpellName(i,"pet");
if ( not s) then break; end
if ( string.lower(s) == string.lower(spell)) then ys=true; end
if ( (r == rank) or (r and rank and string.lower(r) == string.lower(rank))) then yr=true; end
if ( ys and yr ) then
booktype = "pet";
return i,booktype;
end
i=i+1;
ys = nil;
yr = nil;
end
return nil, booktype;
end
function GB_Update_Auras(unit)
if (unit == "mouseover") then return; end
if (not UnitName(unit)) then return; end
GB_BUFFS[unit] = {nil};
GB_DEBUFFS[unit] = {nil};
GBAuraTooltip:SetOwner(WorldFrame, "ANCHOR_NONE");
if (unit == "player") then
GB_SHADOWFORM_INDEX = nil
end
for i = 1, 16 do
if (UnitBuff(unit, i)) then
GBAuraTooltip:SetUnitBuff(unit, i);
if (GBAuraTooltipTextLeft1:IsShown()) then
GB_BUFFS[unit][GBAuraTooltipTextLeft1:GetText()] = i;
if (unit == "player" and GBAuraTooltipTextLeft1:GetText() == GB_TEXT.Shadowform) then
for j = 0, 15 do
local bi = GetPlayerBuff(j, "HELPFUL")
if (GetPlayerBuffTexture(bi)) then
GBAuraTooltip:SetPlayerBuff(bi);
if (GBAuraTooltipTextLeft1:IsShown() and GBAuraTooltipTextLeft1:GetText() == GB_TEXT.Shadowform) then
GB_SHADOWFORM_INDEX = j
break
end
end
end
end
if (string.find(GBAuraTooltipTextLeft1:GetText(), "-", 1, true)) then
GB_BUFFS[unit][UnitBuff(unit, i)] = i;
end
end
end
end
for i = 1, 16 do
if (UnitDebuff(unit, i)) then
GBAuraTooltip:SetUnitDebuff(unit, i);
if (GBAuraTooltipTextLeft1:IsShown()) then
GB_DEBUFFS[unit][GBAuraTooltipTextLeft1:GetText()] = true;
end
if (GBAuraTooltipTextRight1:IsShown()) then
GB_DEBUFFS[unit][GBAuraTooltipTextRight1:GetText()] = true;
end
end
end
end
Generated by GNU Enscript 1.6.5.90.