PHP код:
local Core = CreateFrame("MessageFrame", nil, UIParent);
Core:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");
Core:SetScript("OnEvent", function(self, event, ...) return self[event](self, ...) end);
Core:SetPoint("CENTER", UIParent, 0, 0); -- Расположение фрейма относительно центра;
Core:SetSize(0, 0); -- Размер фрейма;
Core:SetTimeVisible(0); -- Длительность отображения текста (сек.);
Core:SetFadeDuration(0);
Core:SetFading(true);
Core:SetIndentedWordWrap(true);
Core:SetInsertMode("TOP");
Core:SetFrameStrata("DIALOG");
Core:SetFrameLevel(1);
Core:SetToplevel(true);
Core:SetFontObject("ErrorFont"); -- Шрифт;
local select, ipairs, pairs = select, ipairs, pairs;
local UnitGUID, GetSpellInfo = UnitGUID, GetSpellInfo;
local SpellIDs = {
12809, -- Concussion Blow;
46968, -- Shockwave;
676 -- Disarm;
};
local AvoidanceList = {
["BLOCK"] = "BLOCKED",
["DODGE"] = "DODGED",
["MISS"] = "MISSED",
["PARRY"] = "PARRIED"
};
local abilities = {}; -- localized names;
for i, v in ipairs(SpellIDs) do
local Name = GetSpellInfo(v);
if Name then abilities[i] = Name; end;
end;
function Core:IsMissed(GUID, missType, avoidance, spellName)
if missType ~= avoidance then return false; end;
if GUID ~= UnitGUID("player") then return false; end;
for i, v in ipairs(abilities) do
if not spellName or v == spellName then return true; end;
end;
return false;
end;
function Core:COMBAT_LOG_EVENT_UNFILTERED(...)
local _, eventType, sourceGUID, _, _, destGUID, _, _, spellId, spellName = select(1, ...);
if eventType == "SPELL_MISSED" then
local missType = select(12, ...);
if self:IsMissed(destGUID, missType, "REFLECT", nil) then
self:AddMessage("Reflected [|cff20B2AA" ..spellName.. "|r]");
SendChatMessage("Reflected "..GetSpellLink(spellId), "PARTY");
end;
for Key, Value in pairs(AvoidanceList) do
if self:IsMissed(sourceGUID, missType, Key, spellName) then
self:AddMessage("[|cff20B2AA" ..spellName.. "|r] "..Value);
SendChatMessage("My "..GetSpellLink(spellId)..Value, "PARTY");
end;
end;
end;
end;