Знаю про такую проблему и так, вот в чем баг:
Когда игрок нажимает за 1 секунду или менее, больше, чем 1 раз, спелл багается, как буд то у него якобы 2 кд, исправляется 4мя строчками.
Spell.cpp Функция: SpellCastResult Spell::CheckCast(bool strict)
Код:
// check cooldowns to prevent cheating
if (m_caster->GetTypeId() == TYPEID_PLAYER && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE))
{
//can cast triggered (by aura only?) spells while have this flag
if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_AURASTATE) && m_caster->ToPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY))
return SPELL_FAILED_SPELL_IN_PROGRESS;
if (m_caster->ToPlayer()->HasSpellCooldown(m_spellInfo->Id))
{
if (m_triggeredByAuraSpell)
return SPELL_FAILED_DONT_REPORT;
else
{
if (m_spellInfo->Id == 46584)
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
return SPELL_FAILED_NOT_READY;
}
}
// check if we are using a potion in combat for the 2nd+ time. Cooldown is added only after caster gets out of combat
if (m_caster->ToPlayer()->GetLastPotionId() && m_CastItem && (m_CastItem->IsPotion() || (m_spellInfo->Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE)))
return SPELL_FAILED_NOT_READY;
}
Код:
// Check global cooldown
if (strict && !(_triggeredCastFlags & TRIGGERED_IGNORE_GCD) && HasGlobalCooldown()) {
if (m_spellInfo->Id == 46584)
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
return SPELL_FAILED_NOT_READY;
}
после данной правки залипаний спелла Вы не увидите.