Fixes GCD when 1 sec or shorter.

Support aura reducing GCD (SPELLMOD_GLOBAL_COOLDOWN) (e.g. Backdraft, Unholy presence).
Fixes issue #1666.
Fixes issue #1616.

--HG--
branch : trunk
This commit is contained in:
Trazom62
2010-04-22 21:28:04 +02:00
parent 7eac04b5ad
commit b142ae155e
3 changed files with 7 additions and 5 deletions
+5 -3
View File
@@ -22124,19 +22124,21 @@ void Player::UpdateCharmedAI()
} }
} }
void Player::AddGlobalCooldown(SpellEntry const *spellInfo, Spell const *spell) void Player::AddGlobalCooldown(SpellEntry const *spellInfo, Spell *spell)
{ {
if (!spellInfo || !spellInfo->StartRecoveryTime) if (!spellInfo || !spellInfo->StartRecoveryTime)
return; return;
uint32 cdTime = spellInfo->StartRecoveryTime; float cdTime = float(spellInfo->StartRecoveryTime);
if (!(spellInfo->Attributes & (SPELL_ATTR_UNK4|SPELL_ATTR_PASSIVE))) if (!(spellInfo->Attributes & (SPELL_ATTR_UNK4|SPELL_ATTR_PASSIVE)))
cdTime *= GetFloatValue(UNIT_MOD_CAST_SPEED); cdTime *= GetFloatValue(UNIT_MOD_CAST_SPEED);
else if (IsRangedWeaponSpell(spellInfo) && !spell->IsAutoRepeat()) else if (IsRangedWeaponSpell(spellInfo) && !spell->IsAutoRepeat())
cdTime *= m_modAttackSpeedPct[RANGED_ATTACK]; cdTime *= m_modAttackSpeedPct[RANGED_ATTACK];
m_globalCooldowns[spellInfo->StartRecoveryCategory] = ((cdTime < 1000 || cdTime > 2000) ? 1000 : cdTime); ApplySpellMod(spellInfo->Id, SPELLMOD_GLOBAL_COOLDOWN, cdTime, spell);
if (cdTime > 0)
m_globalCooldowns[spellInfo->StartRecoveryCategory] = uint32(cdTime);
} }
bool Player::HasGlobalCooldown(SpellEntry const *spellInfo) const bool Player::HasGlobalCooldown(SpellEntry const *spellInfo) const
+1 -1
View File
@@ -1637,7 +1637,7 @@ class Player : public Unit, public GridObject<Player>
void UpdatePotionCooldown(Spell* spell = NULL); void UpdatePotionCooldown(Spell* spell = NULL);
// global cooldown // global cooldown
void AddGlobalCooldown(SpellEntry const *spellInfo, Spell const *spell); void AddGlobalCooldown(SpellEntry const *spellInfo, Spell *spell);
bool HasGlobalCooldown(SpellEntry const *spellInfo) const; bool HasGlobalCooldown(SpellEntry const *spellInfo) const;
void RemoveGlobalCooldown(SpellEntry const *spellInfo); void RemoveGlobalCooldown(SpellEntry const *spellInfo);
+1 -1
View File
@@ -109,7 +109,7 @@ enum SpellModOp
SPELLMOD_CHANCE_OF_SUCCESS = 18, SPELLMOD_CHANCE_OF_SUCCESS = 18,
SPELLMOD_ACTIVATION_TIME = 19, SPELLMOD_ACTIVATION_TIME = 19,
SPELLMOD_EFFECT_PAST_FIRST = 20, SPELLMOD_EFFECT_PAST_FIRST = 20,
SPELLMOD_GLOBAL_COOLDOWN = 21, //TODO: GCD is not checked by server currently SPELLMOD_GLOBAL_COOLDOWN = 21,
SPELLMOD_DOT = 22, SPELLMOD_DOT = 22,
SPELLMOD_EFFECT3 = 23, SPELLMOD_EFFECT3 = 23,
SPELLMOD_SPELL_BONUS_DAMAGE = 24, SPELLMOD_SPELL_BONUS_DAMAGE = 24,