vanilla-wow-addons – Rev 1
?pathlinks?
if (not Nurfed_CombatLog) then
local utility = Nurfed_Utility:New();
local unitlib = Nurfed_Units:New();
local options = Nurfed_Options:New();
Nurfed_CombatLog = {};
Nurfed_CombatLog.index = {
Heal = 2,
Hit = 3,
Spell = 4,
Dot = 5,
SpellMiss = 6,
Environment = 7,
PowerGain = 8,
Debuff = 9,
Buff = 10,
AuraFade = 11,
MeleeMiss = 12,
Resist = 13,
SpellFail = 14,
Cast = 15,
Perform = 16,
};
Nurfed_CombatLog.events = {
["AURA"] = { "Aura" },
["BUFF"] = { "Heal", "Hot", "Dot", "Aura", "Cast", "Perform", "SpellMiss", "SpellFail", "Resists" },
["HITS"] = { "Hit", "Env" },
["MISSES"] = { "Miss" },
["DAMAGE"] = { "Spell", "Dot", "Aura", "Resists", "SpellMiss", "SpellFail", "Cast", "Perform" },
["DEATH"] = { "Death" },
};
function Nurfed_CombatLog:New()
local object = {};
setmetatable(object, self);
self.__index = self;
return object;
end
function Nurfed_CombatLog:Init()
for _, event in Nurfed_CombatLog_Strings do
for _, v in event do
v.s = utility:FormatGS(v.s, true);
end
end
for _, v in Nurfed_CombatLog_Trailers do
v.s = utility:FormatGS(v.s);
end
end
function Nurfed_CombatLog:ParseEvent(event, arg1)
local eventtable, result, out, outtype;
for e, t in self.events do
if (string.find(event, e, 1, true)) then
eventtable = t;
break;
end
end
if (eventtable) then
local found;
for _, v in eventtable do
for _, text in Nurfed_CombatLog_Strings[v] do
if (string.find(arg1, text.s)) then
result = {string.find(arg1, text.s)};
out = text.o;
outtype = text.t;
found = true;
break;
end
end
if (found) then
break;
end
end
end
if (result and out) then
local args = {};
for k, v in out do
if (type(v) == "number") then
args[k] = string.gsub(result[v + 2], "^%l", string.upper);
else
args[k] = v;
end
end
self:Output(args, outtype, arg1);
end
end
function Nurfed_CombatLog:ParseTrailer(text, damage)
damage = tonumber(damage);
local totaldamage = damage;
local totalreduction = 0;
local i, start, value, reduced, trailer;
for i = 1, 3 do
start, _, value = string.find(text, Nurfed_CombatLog_Trailers[i].s);
if (start ~= nil) then
reduced = tonumber(value);
totaldamage = totaldamage + reduced;
totalreduction = totalreduction + reduced;
value = self:FormatRGB(MISS)..value.."|r";
if (trailer) then
trailer = trailer..", "..Nurfed_CombatLog_Trailers[i].o..value.."|r";
else
trailer = Nurfed_CombatLog_Trailers[i].o..value.."|r";
end
end
end
if (totalreduction > 0) then
totalreduction = self:FormatRGB(MISS)..tostring(totalreduction).."|r";
totaldamage = self:FormatRGB("damage")..tostring(totaldamage).."|r";
trailer = "("..trailer.."; "..totalreduction.."|r/"..totaldamage.."|r)";
end
if (string.find(text, CRUSHING_TRAILER, 1, true)) then
if (trailer) then
trailer = trailer.."|cffff0000"..CRUSHING_TRAILER.."|r";
else
trailer = "|cffff0000"..CRUSHING_TRAILER.."|r";
end
end
if (string.find(text, GLANCING_TRAILER, 1, true)) then
if (trailer) then
trailer = trailer.."|cffffff00"..GLANCING_TRAILER.."|r";
else
trailer = "|cffffff00"..GLANCING_TRAILER.."|r";
end
end
return trailer;
end
function Nurfed_CombatLog:FormatRGB(option, crit)
local info = options:GetOption("combatlog", option);
if (not info) then
return "|cffffffff";
end
local r, g, b;
if (crit) then
local overlay = options:GetOption("combatlog", "overlay");
r = (info[1]/2) + (overlay[1]/2);
g = (info[2]/2) + (overlay[2]/2);
b = (info[3]/2) + (overlay[3]/2);
else
r = info[1];
g = info[2];
b = info[3];
end
return string.format("|cff%02x%02x%02x", (r*255), (g*255), (b*255));
end
function Nurfed_CombatLog:FormatName(name, option, t, noformat)
if (not name) then
return nil;
end
local unit;
local out = {};
local format = options:GetOption("combatlog", option);
local watches = options:GetOption("combatlog", "watches");
if (name == YOU) then
unit = "You";
elseif (UnitExists("pet") and name == UnitName("pet")) then
unit = "Pet";
else
local info = unitlib:GetUnit(name);
if (info) then
unit = info.t;
else
unit = "Enemy";
end
end
local index = self.index[t];
if (t ~= "Death") then
if (watches[name] and watches[name][index] == 1) then
table.insert(out, watches[name][1]);
end
if (watches[unit] and watches[unit][index] == 1) then
table.insert(out, watches[unit][1]);
end
if (UnitExists("target") and name == UnitName("target") and watches["Target"] and watches["Target"][index] == 1) then
table.insert(out, watches["Target"][1]);
end
end
name = self:FormatRGB(unit)..name.."|r";
if (not noformat) then
name = string.gsub(format, "$n", name);
end
return name, out;
end
function Nurfed_CombatLog:Output(vars, t, text)
local source, spell, target, amount, damagetype, trailer, out1, out2, format;
local out = {};
local sent = {};
if (t == "Heal" or t == "Hit" or t == "Spell" or t == "Dot" or t == "SpellMiss") then
source, out1 = self:FormatName(vars[1], "source", t);
target, out2 = self:FormatName(vars[3], "target", t);
if (not out1 and not out2) then
return;
end
spell = self:FormatRGB(vars[5])..vars[2].."|r";
if (vars[5] == "Heal") then
amount = self:FormatRGB("Heal", vars[6]).."+"..vars[4].."|r";
else
amount = self:FormatRGB("damage", vars[6])..vars[4].."|r";
end
if (string.find(vars[4], "[1-9]") and t ~= "Heal") then
trailer = self:ParseTrailer(text, vars[4]);
end
if (vars[6]) then
format = options:GetOption("combatlog", "crit");
amount = string.gsub(format, "$d", amount);
spell = spell.." Crit";
end
table.insert(out, source);
table.insert(out, spell);
table.insert(out, target);
table.insert(out, amount);
if (trailer) then
table.insert(out, trailer);
end
elseif (t == "Environment") then
target, out1 = self:FormatName(vars[1], "target", t);
if (not out1) then
return;
end
spell = self:FormatRGB(vars[4])..vars[2].."|r";
amount = self:FormatRGB("damage")..vars[3].."|r";
if (string.find(vars[3], "[1-9]")) then
trailer = self:ParseTrailer(text, vars[3]);
end
table.insert(out, target);
table.insert(out, spell);
table.insert(out, amount);
if (trailer) then
table.insert(out, trailer);
end
elseif (t == "Death" or t == "Destroyed") then
local deathout = options:GetOption("combatlog", "deathout");
if (deathout == 0) then
return;
end
target = self:FormatName(vars[1], "target", t, true);
source = self:FormatName(vars[3], "source", t, true);
if (t == "Destroyed") then
local destroyed = options:GetOption("combatlog", "destroyed");
if (destroyed ~= 1) then
return;
end
end
out1 = { deathout };
spell = vars[2];
format = options:GetOption("combatlog", "death");
target = string.gsub(format, "$n", target);
table.insert(out, target);
table.insert(out, spell);
if (source) then
table.insert(out, "("..source..")");
end
elseif (t == "PowerGain") then
target, out1 = self:FormatName(vars[1], "target", t);
if (not out1) then
return;
end
local color = self:FormatRGB(vars[3]);
amount = color..vars[2].." "..vars[3].."|r".." ("..color..vars[4].."|r)";
table.insert(out, target);
table.insert(out, amount);
elseif (t == "Debuff") then
target, out1 = self:FormatName(vars[1], "target", t);
if (not out1) then
return;
end
spell = vars[2].." "..self:FormatRGB("debuff")..vars[3].."|r";
table.insert(out, target);
table.insert(out, spell);
elseif (t == "Buff") then
target, out1 = self:FormatName(vars[1], "target", t);
if (not out1) then
return;
end
spell = vars[2].." "..self:FormatRGB("buff")..vars[3].."|r";
table.insert(out, target);
table.insert(out, spell);
elseif (t == "AuraFade") then
target, out1 = self:FormatName(vars[1], "target", t);
if (not out1) then
return;
end
spell = self:FormatRGB("buff")..vars[2].."|r "..vars[3];
table.insert(out, target);
table.insert(out, spell);
elseif (t == "MeleeMiss") then
source, out1 = self:FormatName(vars[1], "source", t);
target, out2 = self:FormatName(vars[3], "target", t);
if (not out1 and not out2) then
return;
end
spell = self:FormatRGB(MISS)..vars[2].."|r";
table.insert(out, source);
table.insert(out, spell);
table.insert(out, target);
elseif (t == "Resist" or t == "SpellFail") then
source, out1 = self:FormatName(vars[1], "source", t);
target, out2 = self:FormatName(vars[3], "target", t);
if (not out1 and not out2) then
return;
end
spell = vars[2];
amount = self:FormatRGB(MISS)..vars[4].."|r";
table.insert(out, source);
table.insert(out, spell);
table.insert(out, target);
table.insert(out, amount);
elseif (t == "Cast" or t == "Perform") then
local casted;
if (t == "Cast") then
casted = true;
end
source, out1 = self:FormatName(vars[1], "source", t, casted);
target, out2 = self:FormatName(vars[3], "target", t, casted);
if (not out1 and not out2) then
return;
end
spell = self:FormatRGB("cast")..vars[2].."|r";
if (casted) then
format = options:GetOption("combatlog", "spellalert");
spell = string.gsub(format, "$s", spell);
end
table.insert(out, source);
table.insert(out, spell);
if (target) then
table.insert(out, target);
end
end
if (out1) then
for k, v in out1 do
if (not sent[v]) then
utility:Print(table.concat(out, " "), v);
sent[v] = true;
end
end
end
if (out2) then
for k, v in out2 do
if (not sent[v]) then
utility:Print(table.concat(out, " "), v);
sent[v] = true;
end
end
end
end
end
Generated by GNU Enscript 1.6.5.90.