Вложений: 2
GCDCheck - аддон для слежения за подозрительными ГКД
Всем привет,
Однажды я устал терзать себя подозрениями о том использует тот или иной гладиатор сторонний софт по автоматизации своей ротации и написа аддон, который трекает глобальный кулдаун абилок.
На данный момент он весьма прост и умеет трекать только основные абилки варриура (так как они у нас самые большие любители всяческих так называемых подрубов) и писать в окошко чата о применяемых способностях и времени между их применением. Это разница во времени и принимается за глобальный кулдаун.
Если GCD кажется подозрительным (например идеально равен 1.5 секунде), то сообщение выдается красным цветом.
Скачать аддон можно по вот этой ссылке: https://drive.google.com/open?id=1lE...URXEMqqm_nTf67 или в приложении к посту Вложение 708568.
Если со скачиванием возникли проблемы - дайте мне знать.
Так же, расшарю его нехитрый исходный код:
Скрытый текст
Код:
local spellIds = {
[7384] = 1, -- Overpower
[47486] = 1.5, -- Mortal Strike
[20647] = 1.5, -- Execute
[47465] = 1.5, -- Rend
[1715] = 1.5, -- Hamstring
[57755] = 1.5 -- Heroic Throw
};
local deviation = 0.02;
local COMBAT_LOG_EVENT_UNFILTERED = 'COMBAT_LOG_EVENT_UNFILTERED';
local PLAYER_ENTERING_WORLD = 'PLAYER_ENTERING_WORLD';
local SPELL_CAST_SUCCESS = 'SPELL_CAST_SUCCESS';
local sourceNameMap;
local GCDCheck = CreateFrame('Frame', nil, UIParent);
GCDCheck:RegisterEvent(PLAYER_ENTERING_WORLD);
GCDCheck:RegisterEvent(COMBAT_LOG_EVENT_UNFILTERED);
GCDCheck:SetScript('OnEvent', function(self, event, ...)
local eventType = select(2, ...);
local sourceName = select(4, ...);
local spellId = select(9, ...);
if (event == PLAYER_ENTERING_WORLD) then
sourceNameMap = {};
end
if (event == COMBAT_LOG_EVENT_UNFILTERED and eventType == SPELL_CAST_SUCCESS) then
for sid, cd in pairs(spellIds) do
if (spellId == sid) then
-- get current time
local currentTime = GetTime();
-- check if we already track this unit
if (sourceNameMap[sourceName] == nil) then
sourceNameMap[sourceName] = {sid, currentTime, cd};
else
local spellName = GetSpellInfo(sourceNameMap[sourceName][1]);
local cooldown = currentTime - sourceNameMap[sourceName][2];
local msg = sourceName .. ' - ' .. spellName .. ' - ' .. cooldown;
if (cooldown <= (sourceNameMap[sourceName][3] + deviation)) then
ChatFrame1:AddMessage(msg, 1.0, 0.2, 0.2);
else
ChatFrame1:AddMessage(msg, 0.2, 0.2, 1.0);
end
-- update current unit's data
sourceNameMap[sourceName][1] = sid;
sourceNameMap[sourceName][2] = currentTime;
sourceNameMap[sourceName][3] = cd;
end
end
end
end
end);
[свернуть]
Скачиваем аддон, распаковываем во всем известную папку, заходим в wow, идем на, например, дуэль поляну, находим дерущегося ворриура и созерцаем.
Хочу предостеречь от криков о том, что тот или иной игрок применяет читы, потому что, во-первых, это личное дело каждого (забудем пока и правилах проекта wowcircle), а, во-вторых, аддон не застрахован от ложных срабатываний.
Лучше скидывайте скриншот сообщений аддона прямо в этот тред и мы вместе посмотрим что к чему.
Если у кого-то есть желание, то накидайте мне id спеллов (и их GCD) других классов, таких как ДК или разбойник.
Хочу обратить внимание на то, что аддон создавался исключительно в образовательных целях, и что я снимаю с себя всю ответственность за использование этого аддон кем бы то ни было.
- - - Updated - - -
Например, вот так выглядит подозрительный мортал с не менее подозрительным овером:
Вложение 705980