vanilla-wow-addons – Rev 1
?pathlinks?
function GB_ActionButton_Initialize(bar, button)
if (button > GB_UNITS_ARRAY[bar].buttons) then
return;
end
local settings = GB_Get(bar, button);
local count;
if (settings.idType == "item") then
if (GB_ITEMS[settings.name]) then
if (GB_Get_ItemCount(settings.name) == 0) then
GB_Settings[GB_INDEX][bar].Button[button] = GB_Get_DefaultButtonSettings();
settings = GB_Get(bar, button);
end
else
GB_Settings[GB_INDEX][bar].Button[button] = GB_Get_DefaultButtonSettings();
settings = GB_Get(bar, button);
end
elseif (settings.idType == "inv") then
if (GB_INVENTORY[settings.name]) then
if (GB_INVENTORY[settings.name].count == 0) then
GB_Settings[GB_INDEX][bar].Button[button] = GB_Get_DefaultButtonSettings();
settings = GB_Get(bar, button);
end
else
GB_Settings[GB_INDEX][bar].Button[button] = GB_Get_DefaultButtonSettings();
settings = GB_Get(bar, button);
end
end
local texture = GB_Get_Texture(bar, button);
for _, unitBar in GB_UNITS_ARRAY[bar].frames do
local actionButton = unitBar.."_Button_"..button;
getglobal(actionButton.."_Icon"):SetTexture(texture);
getglobal(actionButton.."TextFrame_Name"):SetText("");
if (settings.name) then
GB_ActionButton_SetCount(bar, button);
if (settings.idType == "macro") then
getglobal(actionButton.."TextFrame_Name"):SetText(settings.name);
end
end
actionButton = getglobal(actionButton);
actionButton.InContext = {};
if (not settings.name) then
if (not GB_Get("showEmpty")) then
actionButton.InContext.empty = -1;
actionButton:Hide();
else
actionButton.InContext.empty = nil;
actionButton:Show();
end
else
actionButton.InContext.empty = nil;
if (settings.hide) then
actionButton.InContext.userhidden = -1;
actionButton:Hide();
else
actionButton.InContext.userhidden = nil;
actionButton:Show();
end
end
if (GB_Options:IsVisible()) then
actionButton:Show();
end
actionButton:UnregisterEvent("PARTY_MEMBERS_CHANGED");
actionButton:UnregisterEvent("PLAYER_ENTER_COMBAT");
actionButton:UnregisterEvent("PLAYER_LEAVE_COMBAT");
actionButton:UnregisterEvent("PLAYER_REGEN_DISABLED");
actionButton:UnregisterEvent("PLAYER_REGEN_ENABLED");
actionButton:UnregisterEvent("PLAYER_TARGET_CHANGED");
actionButton:UnregisterEvent("RAID_ROSTER_UPDATE");
actionButton:UnregisterEvent("UNIT_AURA");
actionButton:UnregisterEvent("UNIT_HEALTH");
actionButton:UnregisterEvent("UNIT_MANA");
actionButton:UnregisterEvent("UPDATE_BONUS_ACTIONBAR");
actionButton:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN");
if (bar == "party" or bar == "lowesthealth") then
actionButton:RegisterEvent("PARTY_MEMBERS_CHANGED");
elseif (string.find(bar, "target")) then
actionButton:RegisterEvent("PLAYER_TARGET_CHANGED");
elseif (bar == "raid") then
actionButton:RegisterEvent("RAID_ROSTER_UPDATE");
end
actionButton.contextType = "";
if (settings.name and settings.context ~= "Always") then
if (settings.context == "Mana") then
actionButton.contextType = "mana";
actionButton:RegisterEvent("UNIT_MANA");
actionButton:RegisterEvent("UNIT_MAXMANA");
elseif (settings.context == "Health1" or settings.context == "Health2" or settings.context == "Health3" or settings.context == "Health4" or settings.context == "Area" or settings.context == "Dead" or settings.context == "DmgGTHeal") then
actionButton.contextType = "health";
actionButton:RegisterEvent("UNIT_HEALTH");
actionButton:RegisterEvent("UNIT_MAXHEALTH");
elseif (settings.context == "Diseased" or settings.context == "Poisoned" or settings.context == "Cursed" or settings.context == "MagicDebuffed" or settings.context == "NotBuffed" or settings.context == "NotDebuffed") then
actionButton.contextType = "buffs";
if (bar == "player") then
actionButton:RegisterEvent("PLAYER_AURAS_CHANGED");
end
actionButton:RegisterEvent("UNIT_AURA");
end
end
if (settings.name and bar == "lowesthealth") then
if (actionButton.contextType == "") then
if (settings.idType=="spell") then
if (GB_SPELLS[settings.name][settings.rank].type == "cure" or GB_SPELLS[settings.name][settings.rank].type == "buff") then
actionButton:RegisterEvent("UNIT_AURA");
end
else
actionButton:RegisterEvent("UNIT_HEALTH");
actionButton:RegisterEvent("UNIT_MAXHEALTH");
end
end
end
if (settings.name == GB_MINLVL_SPELLS.PWShield and settings.validTarget) then
actionButton:RegisterEvent("UNIT_AURA");
end
if (settings.inCombat or settings.notInCombat) then
actionButton:RegisterEvent("PLAYER_LEAVE_COMBAT");
actionButton:RegisterEvent("PLAYER_ENTER_COMBAT");
actionButton:RegisterEvent("PLAYER_REGEN_DISABLED");
actionButton:RegisterEvent("PLAYER_REGEN_ENABLED");
end
if (settings.form) then
actionButton:RegisterEvent("UPDATE_BONUS_ACTIONBAR");
end
-- if (settings.outdoors) then
-- actionButton:RegisterEvent("ZONE_CHANGED");
-- actionButton:RegisterEvent("ZONE_CHANGED_INDOORS");
-- end
GB_ActionButton_CheckAllContexts(actionButton);
end
end
function GB_ActionButton_CheckAllContexts(actionbutton)
if (not GB_INITIALIZED) then return; end
if (GB_Options:IsVisible()) then
actionbutton:Show();
return;
end
if (not actionbutton:GetParent():IsVisible()) then return; end
local bar = actionbutton:GetParent().index;
local button = actionbutton:GetID();
local target = actionbutton:GetParent().unit;
if (actionbutton:GetParent().index == "lowesthealth") then
local spellname = GB_Settings[GB_INDEX][bar].Button[button].name;
local spellrank = GB_Settings[GB_INDEX][bar].Button[button].rank;
if (GB_SPELLS[spellname] and GB_SPELLS[spellname][spellrank].type == "cure") then
target = GB_Get_CureTarget(spellname);
elseif (GB_SPELLS[spellname] and GB_SPELLS[spellname][spellrank].type == "buff") then
target = GB_Get_BuffTarget(spellname);
else
target = actionbutton:GetParent().unit();
end
if (target) then
getglobal(actionbutton:GetName().."TextFrame_Name"):SetText(UnitName(target));
else
getglobal(actionbutton:GetName().."TextFrame_Name"):SetText("");
target = "player";
end
end
local origContext = GB_Get_InContext(actionbutton);
actionbutton.InContext.class = GB_ActionButton_CheckClassContext(
target,
GB_Settings[GB_INDEX][bar].Button[button].classes);
if (GB_Settings[GB_INDEX][bar].Button[button].playerOnly) then
if (not UnitIsPlayer(target)) then
actionbutton.InContext.playerOnly = -1;
else
actionbutton.InContext.playerOnly = nil;
end
else
actionbutton.InContext.playerOnly = nil;
end
actionbutton.InContext.combat = GB_ActionButton_CheckCombatContext(
GB_Settings[GB_INDEX][bar].Button[button].inCombat,
GB_Settings[GB_INDEX][bar].Button[button].notInCombat);
if (actionbutton.contextType == "buffs") then
actionbutton.InContext.main = GB_ActionButton_CheckBuffContexts(
GB_Settings[GB_INDEX][bar].Button[button].context,
target,
GB_Settings[GB_INDEX][bar].Button[button].name);
elseif (actionbutton.contextType == "health") then
actionbutton.InContext.main = GB_ActionButton_CheckHealthContexts(
GB_Settings[GB_INDEX][bar].Button[button].context,
target,
GB_Settings[GB_INDEX][bar].Button[button].name,
GB_Settings[GB_INDEX][bar].Button[button].rank);
elseif (actionbutton.contextType == "mana") then
actionbutton.InContext.main = GB_ActionButton_CheckManaContexts(
GB_Settings[GB_INDEX][bar].Button[button].context, target);
end
actionbutton.InContext.form = GB_ActionButton_CheckFormContext(GB_Settings[GB_INDEX][bar].Button[button].form);
actionbutton.InContext.validTarget = GB_ActionButton_CheckValidTargetContext(
GB_Settings[GB_INDEX][bar].Button[button].validTarget,
target,
GB_Settings[GB_INDEX][bar].Button[button].name);
GB_ActionButton_ShowInContext(actionbutton, origContext, GB_Settings[GB_INDEX][bar].Button[button].OOCoption, GB_Settings[GB_INDEX][bar].Button[button].flashInContext);
end
function GB_ActionButton_CheckBuffContexts(context, target, name)
if (not UnitIsPlayer(target)) then
if (UnitHealth(target) <= 0) then return 0; end
end
if (context == "NotBuffed") then
if (GB_Get_BuffMatch(name, target)) then
return -1;
elseif (name == GB_MINLVL_SPELLS.PWShield) then
if (GB_Get_DebuffMatch(GB_TEXT.WeakenedSoul, target)) then return -1; end
elseif (GB_AREA_BUFFS[name]) then
if (GB_Get_BuffMatch(GB_AREA_BUFFS[name], target)) then return -1; end
elseif (GB_Get("hideAllBlessings") and string.find(name, GB_TEXT.Blessing)) then
if (GB_Get_BuffMatch(GB_TEXT.Blessing, target)) then return -1; end
end
elseif (context == "NotDebuffed") then
if (GB_Get_DebuffMatch(name, target)) then return -1; end
elseif (context == "MagicDebuffed") then
if (not GB_Get_DebuffMatch(GB_FILTERS.Magic, target, 1)) then return -1; end
elseif (context == "Cursed") then
if (not GB_Get_DebuffMatch(GB_FILTERS.Curse, target, 1)) then return -1; end
elseif (context == "Diseased") then
if (name ~= GB_TEXT.Purify) then
if (not GB_Get_DebuffMatch(GB_FILTERS.Disease, target, 1)) then return -1; end
else
if ((not GB_Get_DebuffMatch(GB_FILTERS.Disease, target, 1)) and (not GB_Get_DebuffMatch(GB_FILTERS.Poison, target, 1))) then
return -1;
end
end
elseif (context == "Poisoned") then
if (name ~= GB_TEXT.Purify) then
if (not GB_Get_DebuffMatch(GB_FILTERS.Poison, target, 1)) then return -1; end
else
if ((not GB_Get_DebuffMatch(GB_FILTERS.Disease, target, 1)) and (not GB_Get_DebuffMatch(GB_FILTERS.Poison, target, 1))) then
return -1;
end
end
end
return 0;
end
function GB_ActionButton_CheckClassContext(target, classes)
if (UnitIsPlayer(target)) then
if (not classes[UnitClass(target)]) then return -1; end
end
return 0;
end
function GB_ActionButton_CheckCombatContext(inCombat, notInCombat)
if (inCombat and (not GB_INCOMBAT)) then
return -1;
end
if (notInCombat and GB_INCOMBAT) then
return -1;
end
return 0;
end
function GB_ActionButton_CheckFormContext(context)
if (context and GB_Get_CurrentForm() ~= context) then
return -1;
else
return 0;
end
end
function GB_ActionButton_CheckHealthContexts(context, target, name, rank)
if (not UnitIsPlayer(target)) then
if (UnitHealth(target) <= 0) then return; end
end
local threshold;
if (context == "Health1") then
threshold = 1;
elseif (context == "Health2") then
threshold = 2;
elseif (context == "Health3") then
threshold = 3;
elseif (context == "Health4") then
threshold = 4;
end
if (threshold) then
if (not GB_Get_PastThreshold("healthThresholds", target, threshold)) then return -1; end
elseif (context == "Dead") then
if (UnitHealth(target) > 0 and (not UnitIsDeadOrGhost(target))) then
return -1;
end
if (not UnitIsVisible(target)) then
return -1;
end
elseif (context == "DmgGTHeal") then
if (rank and UnitHealthMax(target) and UnitHealthMax(target) ~= 100) then
if (GB_SPELLS[name][rank].avg > (UnitHealthMax(target) - UnitHealth(target))) then
return -1;
end
end
elseif (context == "Area") then
local numPast = 0;
if (GB_Get_PastThreshold("aeThreshold", "player")) then
numPast = numPast + 1;
end
for i = 1,GetNumPartyMembers() do
if (UnitHealth("party"..i) and UnitHealth("party"..i) > 0 and UnitIsVisible("party"..i) and (not GB_Get("limitaerange") or CheckInteractDistance("party"..i, 4))) then
if (GB_Get_PastThreshold("aeThreshold", "party"..i)) then
numPast = numPast + 1;
end
end
end
if (numPast < GB_Settings[GB_INDEX].numPastAEThreshold) then
return -1;
end
end
return 0;
end
function GB_ActionButton_CheckOutdoorsContext(context)
if (not context) then return 0; end
local outdoors = GetMapInfo();
if (not outdoors) then
return -1;
else
return 0;
end
end
function GB_ActionButton_CheckManaContexts(context, target)
if (not UnitIsPlayer(target)) then
if (UnitHealth(target) <= 0) then return; end
end
local threshold = GB_Get("manaThreshold");
local damage;
if (string.find(threshold, "%%")) then
_,_,threshold = string.find(threshold, "(%d*)%%");
damage = 100 - UnitMana(target) / UnitManaMax(target) * 100;
else
if (UnitManaMax(target) == 100) then return 0; end
damage = UnitManaMax(target) - UnitMana(target);
end
threshold = tonumber(threshold);
if (not threshold) then return 0; end
if (damage < threshold) then
return -1;
end
return 0;
end
function GB_ActionButton_CheckValidTargetContext(validTarget, target, name)
if (not validTarget) then return 0; end
if (not UnitIsPlayer(target)) then
if (UnitHealth(target) <= 0) then return; end
end
local creatureType = UnitCreatureType(target);
if (not creatureType) then creatureType = GB_TEXT.Humanoid; end
if (name == GB_TEXT.ManaBurn or name == GB_TEXT.ViperSting or name == GB_TEXT.Silence or name == GB_TEXT.Counterspell) then
if (UnitPowerType(target) ~= 0 or UnitManaMax(target) == 0) then
return -1;
end
elseif (name == GB_TEXT.CurseOfDoom) then
if (UnitIsPlayer(target)) then
return -1;
end
elseif (name == GB_MINLVL_SPELLS.PWShield) then
if (not UnitInParty(target)) then
if (not GB_UnitInRaid(target)) then
return -1;
end
end
if (GB_Get_DebuffMatch(GB_TEXT.WeakenedSoul, target)) then return -1; end
elseif (not GB_TARGET_SPELLS[name]) then
return 0;
elseif (not GB_TARGET_SPELLS[name][creatureType]) then
return -1;
end
return 0;
end
function GB_ActionButton_OnClick(unitBar, button, clickcasttoggle, unitoverride)
if (unitBar == "target") then
unitBar = GB_Get_UnitBar(unitBar);
end
if (not unitBar) then return; end
unitBar = getglobal(unitBar);
local retarget = false;
local hadTarget, targetName;
local idType = GB_Settings[GB_INDEX][unitBar.index].Button[button].idType;
local name = GB_Settings[GB_INDEX][unitBar.index].Button[button].name;
local rank = GB_Settings[GB_INDEX][unitBar.index].Button[button].rank;
local target = unitBar.unit;
if (unitBar:GetName() == "GB_LowestHealthBar") then
if (GB_SPELLS[name][rank].type == "cure") then
target = GB_Get_CureTarget(name);
elseif (GB_SPELLS[name][rank].type == "buff" and name ~= GB_MINLVL_SPELLS.PWShield) then
target = GB_Get_BuffTarget(name);
else
target = unitBar.unit();
end
if (not target) then
local text = string.gsub(GB_TEXT.TargetNotFound, '$n', name);
GB_Feedback(text);
return;
end
end
if (unitoverride) then
target = unitoverride;
end
GB_LAST_UNIT = target;
local overridePO;
if (UnitName("target")) then
hadTarget = true;
if (not UnitCanAttack("player", "target")) then
if (UnitIsPlayer("target")) then
targetName = UnitName("target");
else
targetName = "NPC";
end
TargetUnit(target);
retarget = true;
elseif (UnitFactionGroup("target") == UnitFactionGroup("player") and UnitIsPlayer("target")) then
targetName = UnitName("target");
TargetUnit(target);
retarget = true;
end
end
if (not clickcasttoggle) then
if (IsShiftKeyDown() and (not GB_Get("dontTargetPet")) and target ~= "target") then
local unitnum;
if (target == "player") then
target = "pet";
elseif (string.find(target, "party")) then
_,_,unitnum = string.find(target, "party(%d*)");
target = "partypet"..unitnum;
elseif (string.find(target, "raid")) then
_,_,unitnum = string.find(target, "raid(%d*)");
target = "raidpet"..unitnum;
end
TargetUnit(target);
target = "target";
retarget = true;
end
if (IsControlKeyDown()) then
if (not GB_Settings[GB_INDEX].applyPOonCtrl) then
overridePO = true;
end
elseif (GB_Settings[GB_INDEX].applyPOonCtrl) then
overridePO = true;
end
end
if (idtype == "macro") then
TargetUnit(target);
retarget = true;
end
if (name == GB_TEXT.DispelMagic and UnitCanAttack("player", "target")) then
TargetUnit(target);
retarget = true;
end
if (GB_Settings[GB_INDEX].changeTarget) then
TargetUnit(target);
retarget = false;
end
if (target == "target") then
retarget = false;
end
if (GB_Settings[GB_INDEX][unitBar.index].Button[button].assist) then
retarget = false;
AssistUnit(target);
target = "target";
end
if (name ~= GB_TEXT.Attack) then
GB_AttackTarget();
end
GB_LAST_SPELL = nil;
GB_LAST_SPELLNUM = GB_LAST_SPELLNUM + 1;
GB_ANNOUNCEFAILURE = nil;
GB_ANNOUNCEINTERRUPTED = nil;
GB_ISCASTING = nil;
GB_INSTANTCASTING = nil;
if (idType == "spell") then
local spellName, spellRank = GB_Get_CorrectSpell(unitBar.index, button, target, overridePO);
if (spellName) then
if (GB_Get_ActionUsuable(spellName, spellRank, getglobal(unitBar:GetName().."_Button_"..button))) then
local castit = true;
if (GB_Settings[GB_INDEX][unitBar.index].Button[button].cancelHeal) then
if (not GB_Get_PastThreshold("cancelHealThreshold", target, threshold)) then
castit = false;
end
end
if (castit) then
if (GB_Settings[GB_INDEX].autoleaveform and GB_SPELLS[spellName][spellRank].type == "heal") then
if (GB_PLAYER_CLASS == "PRIEST" and GB_SHADOWFORM_INDEX) then
CancelPlayerBuff(GB_SHADOWFORM_INDEX);
elseif (GB_PLAYER_CLASS == "DRUID") then
local f = GB_Get_CurrentForm()
if (f > 0) then
CastShapeshiftForm(f)
end
end
end
CastSpell( GB_SPELLS[spellName][spellRank].id, "BOOKTYPE_SPELL" );
if (GB_Settings[GB_INDEX][unitBar.index].Button[button].announce) then
GB_ANNOUNCEFAILURE = nil;
GB_ANNOUNCEINTERRUPTED = nil;
GB_ISCASTING = true;
GB_INSTANTCASTING = nil;
GB_ANNOUNCETEXT = GB_Get_AnnounceText(spellName, spellRank, target, GB_Settings[GB_INDEX][unitBar.index].Button[button].announceText);
GB_WHISPERTARGET = UnitName(target);
if (GB_SPELLS[spellName][spellRank].castingTime == 0) then
GB_INSTANTCASTING = true;
end
end
elseif (not GB_Settings[GB_INDEX][unitBar.index].Button[button].preventOverhealing) then
GB_Feedback(GB_TEXT.NotPastCancelHeal);
end
if (GB_Settings[GB_INDEX][unitBar.index].Button[button].cancelHeal and castit) then
GB_CURRENT_HEAL = {spellName, spellRank, target};
end
end
end
elseif (idType == "item") then
UseContainerItem(GB_ITEMS[name].bag, GB_ITEMS[name].slot);
elseif (idType == "inv") then
UseInventoryItem(GB_INVENTORY[name].id);
elseif (idType == "macro") then
GB_RunMacro(name);
end
if (SpellIsTargeting()) then
if ( unitBar.index == "hostiletarget") then
SpellTargetUnit("player");
else
SpellTargetUnit(target);
end
end
if (retarget) then
if (not hadTarget) then
ClearTarget();
elseif (targetName) then
if (targetName == "NPC") then
TargetLastTarget();
else
TargetByName(targetName);
end
else
TargetLastEnemy();
end
end
GB_LAST_UNIT = nil;
end
function GB_ActionButton_OnEvent(event)
if (not GB_INITIALIZED) then return; end
if (event == "UNIT_AURA" and arg1 == "target" and (not GroupButtonsFrame.targetauras)) then return; end
if (event == "ACTIONBAR_UPDATE_COOLDOWN") then
GB_ActionButton_UpdateCooldown();
return;
end
if (GB_Options:IsVisible()) then
this:Show();
return;
end
if (event == "PARTY_MEMBERS_CHANGED" or event == "RAID_ROSTER_UPDATE") then
GB_ActionButton_CheckAllContexts(this);
return;
elseif (event == "PLAYER_TARGET_CHANGED") then
if (UnitCanAttack("player", "target") and this:GetParent():GetName() == "GB_HostileTargetBar") then
GB_ActionButton_CheckAllContexts(this);
return;
end
if ((not UnitCanAttack("player", "target")) and this:GetParent():GetName() == "GB_FriendlyTargetBar") then
GB_ActionButton_CheckAllContexts(this);
return;
end
end
local origContext = GB_Get_InContext(this);
local target = this:GetParent().unit;
local lhbar;
if (this:GetParent().index == "lowesthealth") then
lhbar = true;
if (GB_SPELLS[GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].name] and GB_SPELLS[GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].name][GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].rank].type == "cure") then
target = GB_Get_CureTarget(GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].name);
elseif (GB_SPELLS[GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].name] and GB_SPELLS[GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].name][GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].rank].type == "buff" and GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].name ~= GB_MINLVL_SPELLS.PWShield) then
target = GB_Get_BuffTarget(GB_Settings[GB_INDEX]["lowesthealth"].Button[this:GetID()].name);
else
target = this:GetParent().unit();
end
if (target) then
getglobal(this:GetName().."TextFrame_Name"):SetText(UnitName(target));
else
getglobal(this:GetName().."TextFrame_Name"):SetText("");
target = "player";
end
end
if (GB_Settings[GB_INDEX][this:GetParent().index].Button[this:GetID()].assist) then
target = target.."target";
end
if (not UnitExists(target)) then return; end
local bar = this:GetParent().index;
local buttNum = this:GetID();
if (event == "UPDATE_BONUS_ACTIONBAR") then
this.InContext.form = GB_ActionButton_CheckFormContext(GB_Settings[GB_INDEX][bar].Button[buttNum].form);
elseif (event == "PLAYER_ENTER_COMBAT" or event == "PLAYER_LEAVE_COMBAT" or event == "PLAYER_REGEN_DISABLED" or event == "PLAYER_REGEN_ENABLED") then
this.InContext.combat = GB_ActionButton_CheckCombatContext(
GB_Settings[GB_INDEX][bar].Button[buttNum].inCombat,
GB_Settings[GB_INDEX][bar].Button[buttNum].notInCombat);
elseif (event == "UNIT_AURA") then
if (arg1 == target or lhbar) then
this.InContext.main = GB_ActionButton_CheckBuffContexts(GB_Settings[GB_INDEX][bar].Button[buttNum].context, target, GB_Settings[GB_INDEX][bar].Button[buttNum].name);
if (GB_Settings[GB_INDEX][bar].Button[buttNum].name == GB_MINLVL_SPELLS.PWShield and GB_Settings[GB_INDEX][bar].Button[buttNum].validTarget) then
this.InContext.validTarget = GB_ActionButton_CheckValidTargetContext(
GB_Settings[GB_INDEX][bar].Button[buttNum].validTarget,
target,
GB_Settings[GB_INDEX][bar].Button[buttNum].name);
end
end
elseif (event == "UNIT_HEALTH" or event == "UNIT_MAXHEALTH" ) then
if (arg1 == target or lhbar or GB_Settings[GB_INDEX][bar].Button[buttNum].context == "Area") then
this.InContext.main = GB_ActionButton_CheckHealthContexts( GB_Settings[GB_INDEX][bar].Button[buttNum].context, target, GB_Settings[GB_INDEX][bar].Button[buttNum].name, GB_Settings[GB_INDEX][bar].Button[buttNum].rank);
end
elseif (event == "UNIT_MANA" or event == "UNIT_MAXMANA") then
if (arg1 == target) then
this.InContext.main = GB_ActionButton_CheckManaContexts(GB_Settings[GB_INDEX][bar].Button[buttNum].context, target);
end
-- elseif (event == "ZONE_CHANGED" or event == "ZONE_CHANGED_INDOORS") then
-- this.InContext.outdoors = GB_ActionButton_CheckOutdoorsContext(settings.outdoors);
end
GB_ActionButton_ShowInContext(this, origContext, GB_Settings[GB_INDEX][bar].Button[buttNum].OOCoption, GB_Settings[GB_INDEX][bar].Button[buttNum].flashInContext);
end
function GB_ActionButton_OnUpdate(elapsed)
if (not GB_INITIALIZED) then return; end
if (this.timer) then
this.timer = this.timer - elapsed;
if (this.timer > 0) then
return;
else
this.timer = TOOLTIP_UPDATE_TIME;
end
end
if (this.flashing) then
this.flashtimer = this.flashtimer - arg1;
if (this.flashtimer < 0) then
this.flashtimer = .5;
if (this.Direction) then
this.Direction = nil;
else
this.Direction = 1;
end
else
if (this.Direction) then
local a = this.flashtimer * 2;
this:SetAlpha(a);
else
local a = 1 - this.flashtimer * 2;
this:SetAlpha(a);
end
end
end
if (this.cooldowncount) then
this.cooldowncount = this.cooldowncount - elapsed;
if (this.cooldowncount <= 0) then
this.cooldowncount = nil;
getglobal(this:GetName().."TextFrame_CooldownCount"):SetText("");
else
local count = math.ceil(this.cooldowncount);
if (count < 60) then
getglobal(this:GetName().."TextFrame_CooldownCount"):SetText(count.."s");
else
count = math.ceil(count / 60);
getglobal(this:GetName().."TextFrame_CooldownCount"):SetText(count.."m");
end
end
end
local idType = GB_Settings[GB_INDEX][this:GetParent().index].Button[this:GetID()].idType;
local name = GB_Settings[GB_INDEX][this:GetParent().index].Button[this:GetID()].name;
local rank = GB_Settings[GB_INDEX][this:GetParent().index].Button[this:GetID()].rank;
local textscale = getglobal(this:GetName().."TextFrame").textscale;
if (textscale) then
if (getglobal(this:GetName().."TextFrame"):GetScale() ~= textscale) then
getglobal(this:GetName().."TextFrame"):SetScale(textscale);
end
end
if (idType == "spell") then
local inRange, enoughMana = true, true;
local texture = getglobal(this:GetName().."_Icon");
local range = GB_SPELLS[name][rank].range;
local unit = this:GetParent().unit;
if (this:GetParent().index == "lowesthealth") then
unit = this:GetParent().unit();
end
if (unit ~= "target") then
range = tonumber(GB_SPELLS[name][rank].rangeinyds);
end
local mana = GB_SPELLS[name][rank].mana;
if (range) then
if (unit == "target") then
if (IsActionInRange(range) == 0) then
inRange = false;
elseif ((not UnitIsVisible("target")) and UnitExists("target")) then
inRange = false;
end
-- elseif (unit == "player") then
-- elseif (MapLibrary_Updater and (not GB_Settings[GB_INDEX].disablePartyRange)) then
-- local inInstance = MapLibrary.InInstance();
-- if (MapLibrary.Ready and (not inInstance)) then
-- local dist = MapLibrary.UnitDistance(unit, "player", 1);
-- if (dist and dist > range) then inRange = false; end
-- end
end
end
if (mana) then
if (UnitMana("player") < mana and (not GB_Get_BuffMatch(GB_TEXT.InnerFocus, "player"))) then
enoughMana = false;
end
end
if (not inRange) then
texture:SetVertexColor(GB_Settings[GB_INDEX].OORcolor.r, GB_Settings[GB_INDEX].OORcolor.g, GB_Settings[GB_INDEX].OORcolor.b);
elseif (not enoughMana) then
texture:SetVertexColor(GB_Settings[GB_INDEX].OOMcolor.r, GB_Settings[GB_INDEX].OOMcolor.g, GB_Settings[GB_INDEX].OOMcolor.b);
elseif (this.grey) then
texture:SetVertexColor(GB_Settings[GB_INDEX].greycolor.r, GB_Settings[GB_INDEX].greycolor.g, GB_Settings[GB_INDEX].greycolor.b);
else
texture:SetVertexColor(1, 1, 1);
end
end
end
function GB_ActionButton_SetCount(bar, button)
if (not GB_INITIALIZED) then return; end
if (bar == "raid" or bar == "partypet") then return; end
local name = GB_Settings[GB_INDEX][bar].Button[button].name;
local idType = GB_Settings[GB_INDEX][bar].Button[button].idType;
local count;
if (not name) then
GB_ActionButton_Initialize(bar, button);
GB_Set_Appearance(bar);
return;
end
if (idType == "item") then
count = GB_Get_ItemCount(name);
elseif (idType == "inv") then
count = GB_INVENTORY[name].count;
else
for _, unitBar in GB_UNITS_ARRAY[bar].frames do
getglobal(unitBar.."_Button_"..button.."TextFrame_Count"):SetText("");
end
return;
end
for _, unitBar in GB_UNITS_ARRAY[bar].frames do
if (count > 1) then
getglobal(unitBar.."_Button_"..button.."TextFrame_Count"):SetText(count);
else
getglobal(unitBar.."_Button_"..button.."TextFrame_Count"):SetText("");
end
end
if (count == 0) then
GB_ActionButton_Initialize(bar, button);
GB_Set_Appearance(bar);
end
end
function GB_ActionButton_ShowInContext(button, origContext, OOCoption, FlashInContext)
local currentContext = GB_Get_InContext(button);
if (currentContext) then
button:Show();
if (FlashInContext) then
button.flashtimer = .5;
button.flashing = true;
else
button.flashing = nil;
button.flashtimer = nil;
end
button.grey = nil;
getglobal(button:GetName().."_Icon"):SetVertexColor(1, 1, 1);
button:SetAlpha(GB_Settings[GB_INDEX][button:GetParent().index].alpha);
else
if (OOCoption == "hide") then
button:Hide();
elseif (OOCoption == "grey") then
button.grey = true;
getglobal(button:GetName().."_Icon"):SetVertexColor(.4, .4, .4);
button.flashing = nil;
button.flashtimer = nil;
button:SetAlpha(GB_Settings[GB_INDEX][button:GetParent().index].alpha);
elseif (OOCoption == "flash") then
button.flashtimer = .5;
button.flashing = true;
end
end
if (currentContext ~= origContext) then
local unitBar;
if (button:GetParent().index == "party" or button:GetParent().index == "pet" or button:GetParent().index == "partypet" or button:GetParent().index == "raid") then
unitBar = GB_Get_UnitBar(button:GetParent().unit);
else
unitBar = GB_Get_UnitBar(button:GetParent().index);
end
GB_Set_Layout(button:GetParent().index, unitBar);
end
end
function GB_ActionButton_UpdateCooldown()
if (not GB_INITIALIZED) then return; end
local start, duration, enable;
local idType = GB_Settings[GB_INDEX][this:GetParent().index].Button[this:GetID()].idType;
local name = GB_Settings[GB_INDEX][this:GetParent().index].Button[this:GetID()].name;
local rank = GB_Settings[GB_INDEX][this:GetParent().index].Button[this:GetID()].rank;
if (idType == "spell") then
start, duration, enable = GetSpellCooldown(GB_SPELLS[name][rank].id, BOOKTYPE_SPELL);
elseif (idType == "item") then
start, duration, enable = GetContainerItemCooldown(GB_ITEMS[name].bag, GB_ITEMS[name].slot);
elseif (idType == "inv") then
start, duration, enable = GetInventoryItemCooldown("player", GB_INVENTORY[name].id);
end
if (start and start > 0) then
if (GB_Settings[GB_INDEX].showCooldown) then
if (this.cooldowncount) then
this.cooldowncount = duration - (GetTime() - start);
else
this.cooldowncount = duration;
end
end
CooldownFrame_SetTimer(getglobal(this:GetName().."_Cooldown"), start, duration, enable);
else
if (GB_Settings[GB_INDEX].showCooldown) then
this.cooldowncount = 0;
end
end
end
Generated by GNU Enscript 1.6.5.90.