vanilla-wow-addons – Rev 1
?pathlinks?
--------------------------------------------------
-- This is a cut version on BonusScanner
-- Healbot only cares about heals and although BonusScanner is a great addon, it lags when everts are fired.
--
-- Original BonusScanner here:
-- http://www.curse-gaming.com/mod.php?addid=2384
--------------------------------------------------
HB_BONUSSCANNER_PATTERN_SETNAME = "^(.*) %(%d/%d%)$";
HB_BONUSSCANNER_PATTERN_GENERIC_PREFIX = "^%+(%d+)%%?(.*)$";
HB_BONUSSCANNER_PATTERN_GENERIC_SUFFIX = "^(.*)%+(%d+)%%?$";
HealBot_BonusScanner = {
bonuses = 0;
IsUpdating = false;
ShowDebug = false; -- tells when the equipment is scanned
active = nil;
temp = {
sets = {},
set = "",
slot = "",
bonuses = 0,
details = {}
};
types = {
"HEAL", -- healing
};
slots = {
"Head",
"Neck",
"Shoulder",
"Shirt",
"Chest",
"Waist",
"Legs",
"Feet",
"Wrist",
"Hands",
"Finger0",
"Finger1",
"Trinket0",
"Trinket1",
"Back",
"MainHand",
"SecondaryHand",
"Ranged",
"Tabard",
};
}
function HealBot_BonusScanner:GetBonus()
if(HealBot_BonusScanner.bonuses) then
return HealBot_BonusScanner.bonuses;
end;
return 0;
end
function HealBot_BonusScanner_Update()
if (HealBot_BonusScanner.IsUpdating) then
return;
else
HealBot_BonusScanner.IsUpdating = true;
HealBot_BonusScanner:ScanEquipment();
end
HealBot_BonusScanner.IsUpdating = false;
end
function HealBot_BonusScanner:ScanEquipment()
local slotid, slotname, hasItem, i;
HealBot_BonusTooltip:SetOwner(HealBot_BonusTooltip, "ANCHOR_NONE");
HealBot_BonusScanner.temp.bonuses = 0;
HealBot_BonusScanner.temp.sets = {};
HealBot_BonusScanner.temp.set = "";
for i, slotname in HealBot_BonusScanner.slots do
slotid, _ = GetInventorySlotInfo(slotname.. "Slot");
hasItem = HealBot_BonusTooltip:SetInventoryItem("player", slotid);
if ( hasItem ) then
HealBot_BonusScanner.temp.slot = slotname;
HealBot_BonusScanner:ScanTooltip();
if(HealBot_BonusScanner.temp.set ~= "") then
HealBot_BonusScanner.temp.sets[HealBot_BonusScanner.temp.set] = 1;
end;
end
end
HealBot_BonusScanner.bonuses = HealBot_BonusScanner.temp.bonuses;
end
function HealBot_BonusScanner:ScanTooltip()
local tmpTxt, line;
local lines = HealBot_BonusTooltip:NumLines();
for i=2, lines, 1 do
tmpText = getglobal("HealBot_BonusTooltipTextLeft"..i);
val = nil;
if (tmpText:GetText()) then
line = tmpText:GetText();
HealBot_BonusScanner:ScanLine(line);
end
end
end
function HealBot_BonusScanner:AddValue(effect, value)
local i,e;
if(type(effect) == "string") then
if effect=="HEAL" then
if(HealBot_BonusScanner.temp.bonuses) then
HealBot_BonusScanner.temp.bonuses = HealBot_BonusScanner.temp.bonuses + value;
else
HealBot_BonusScanner.temp.bonuses = value;
end
end
else
if(type(value) == "table") then
for i,e in effect do
HealBot_BonusScanner:AddValue(e, value[i]);
end
else
for i,e in effect do
HealBot_BonusScanner:AddValue(e, value);
end
end
end
end;
function HealBot_BonusScanner:ScanLine(line)
local tmpStr, found;
if(string.sub(line,0,string.len(HB_BONUSSCANNER_PREFIX_EQUIP)) == HB_BONUSSCANNER_PREFIX_EQUIP) then
tmpStr = string.sub(line,string.len(HB_BONUSSCANNER_PREFIX_EQUIP)+1);
HealBot_BonusScanner:CheckPassive(tmpStr);
elseif(string.sub(line,0,string.len(HB_BONUSSCANNER_PREFIX_SET)) == HB_BONUSSCANNER_PREFIX_SET
and HealBot_BonusScanner.temp.set ~= ""
and not HealBot_BonusScanner.temp.sets[HealBot_BonusScanner.temp.set]) then
tmpStr = string.sub(line,string.len(HB_BONUSSCANNER_PREFIX_SET)+1);
HealBot_BonusScanner.temp.slot = "Set";
HealBot_BonusScanner:CheckPassive(tmpStr);
else
_, _, tmpStr = string.find(line, HB_BONUSSCANNER_PATTERN_SETNAME);
if(tmpStr) then
HealBot_BonusScanner.temp.set = tmpStr;
else
found = HealBot_BonusScanner:CheckGeneric(line);
if(not found) then
HealBot_BonusScanner:CheckOther(line);
end;
end
end
end;
function HealBot_BonusScanner:CheckPassive(line)
local i, p, value, found;
found = nil;
for i,p in HB_BONUSSCANNER_PATTERNS_PASSIVE do
_, _, value = string.find(line, "^" .. p.pattern);
if(value) then
HealBot_BonusScanner:AddValue(p.effect, value)
found = 1;
end
end
if(not found) then
HealBot_BonusScanner:CheckGeneric(line);
end
end
function HealBot_BonusScanner:CheckGeneric(line)
local value, token, pos, tmpStr, found;
found = false;
while(string.len(line) > 0) do
pos = string.find(line, "/", 1, true);
if(pos) then
tmpStr = string.sub(line,1,pos-1);
line = string.sub(line,pos+1);
else
tmpStr = line;
line = "";
end
tmpStr = string.gsub( tmpStr, "^%s+", "" );
tmpStr = string.gsub( tmpStr, "%s+$", "" );
tmpStr = string.gsub( tmpStr, "%.$", "" );
_, _, value, token = string.find(tmpStr, HB_BONUSSCANNER_PATTERN_GENERIC_PREFIX);
if(not value) then
_, _, token, value = string.find(tmpStr, HB_BONUSSCANNER_PATTERN_GENERIC_SUFFIX);
end
if(token and value) then
token = string.gsub( token, "^%s+", "" );
token = string.gsub( token, "%s+$", "" );
token = string.gsub( token, "%.$", "" );
if(HealBot_BonusScanner:CheckToken(token,value)) then
found = true;
end
end
end
return found;
end
function HealBot_BonusScanner:CheckToken(token, value)
local i, p, s1, s2;
if(HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token]) then
HealBot_BonusScanner:AddValue(HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token], value);
return true;
end
return false;
end
function HealBot_BonusScanner:CheckOther(line)
local i, p, value, start, found;
for i,p in HB_BONUSSCANNER_PATTERNS_OTHER do
start, _, value = string.find(line, "^" .. p.pattern);
if(start) then
if(p.value) then
HealBot_BonusScanner:AddValue(p.effect, p.value)
elseif(value) then
HealBot_BonusScanner:AddValue(p.effect, value)
end
return true;
end
end
return false;
end