
 Сообщение от 
decemberx
					
				 
				ну то что проверка на сервере я понял, ибо гкд запускается на величину пинга как раз.
с первыми двумя ладно, это больше пвпшные, пока не до них.
но с "Выполняется другое действие", полюбому чета сделать можно и нужно, ведь обычно как, не ждешь отката гкд, а тупо спамишь следующий спелл, как откатит - так ударит, всё просто, НО, если до конца каста, например, осталось 0,0001 и в этот момент запускается гкд, то можно смело прибалять величину пинга к времени каста предыдущего заклинания.
хотя математик я неочень, но попробую посчитать
у меня пинг ~200, при длительности заклинания в 1сек, это будет 1.2, то есть в худшем случае -20% хаста?
можно в макросах, непомню на каст, помню [nochanneling], но для каждого спелла пилить макрос не вариант.
надо сделать чета типа if UnitCastingInfo("player") or UnitChannelInfo("player") then блок на все акшнбары end
чтобы сбить свой спелл, можно с места сдвинутся или хоткей забиндить.
вобщем нехватает какого нибудь блока на нажатие, а условия и эвенты это не проблема.
			
		 
	 
 В любом из случаев нужен анлокер ... вызывать нужно либо RunAttribyte , либо StopCasting, либо RunMacroText и все они защищены. Даже сам факт получения верного пинга в текущий момент времени звучит бредово =)  То что ты видишь полоску каста это все фигня , можно смело сходить с места или начинать новый каст как только вылетит предыдущий.
UnitCastingInfo("player") or UnitChannelInfo("player") возвратит немного не те значения. Время каста всегда будет равное пинг + время каста 
PS хукнуть кд анимацию и поменять их внешний видно можно так , но вычитать пинг не сможешь даже с анлокером или каким нибудь другим софтом:
	PHP код:
	
local New = function(f)
    local tex = f:CreateTexture("$parentScrollingCooldownTexture", "OVERLAY")
    tex:SetTexture(0, 0, 0, 0.5)
    local cd = tex:CreateAnimationGroup("$parentCooldown")
 
    return cd
end
local cds = setmetatable({}, {
    __index = function(t, f)
    if type(f) ~= "table" or type(f[0]) ~= "userdata" then
        return
    end
    local cd = New(f)
    rawset(t, f, cd)
 end,
 __mode = "kv"
})
SCD_COOLDOWNS = cds
local OnSetTimer = function(self, start, duration, enable)
    self:Hide()
    local parent = self:GetParent()
    local cd = cds[parent]
    if not cd then return end
    
    
end
hooksecurefunc("CooldownFrame_SetTimer", OnSetTimer)