diff options
Diffstat (limited to 'src/server/game/AI')
| -rwxr-xr-x | src/server/game/AI/CoreAI/CombatAI.cpp | 5 | ||||
| -rwxr-xr-x | src/server/game/AI/CoreAI/CombatAI.h | 1 | ||||
| -rwxr-xr-x | src/server/game/AI/CoreAI/UnitAI.h | 4 | ||||
| -rwxr-xr-x | src/server/game/AI/EventAI/CreatureEventAI.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 2 |
5 files changed, 15 insertions, 1 deletions
diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp index 7d7a27fce13..5ab5f99310a 100755 --- a/src/server/game/AI/CoreAI/CombatAI.cpp +++ b/src/server/game/AI/CoreAI/CombatAI.cpp @@ -111,6 +111,11 @@ void CombatAI::UpdateAI(const uint32 diff) DoMeleeAttackIfReady(); } +void CombatAI::SpellInterrupted(uint32 spellId, uint32 unTimeMs) +{ + events.RescheduleEvent(spellId, unTimeMs); +} + ///////////////// //CasterAI ///////////////// diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h index ad98cec0779..fa31e57d780 100755 --- a/src/server/game/AI/CoreAI/CombatAI.h +++ b/src/server/game/AI/CoreAI/CombatAI.h @@ -46,6 +46,7 @@ class CombatAI : public CreatureAI void EnterCombat(Unit* who); void JustDied(Unit* killer); void UpdateAI(const uint32 diff); + void SpellInterrupted(uint32 spellId, uint32 unTimeMs); static int Permissible(const Creature*); protected: EventMap events; diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 593f0d15e18..e824ac0e76b 100755 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -242,6 +242,10 @@ class UnitAI // Called when the unit heals virtual void HealDone(Unit* /*done_to*/, uint32& /*addhealth*/) {} + /// Called when a spell is interrupted by Spell::EffectInterruptCast + /// Use to reschedule next planned cast of spell. + virtual void SpellInterrupted(uint32 /*spellId*/, uint32 /*unTimeMs*/) {} + void AttackStartCaster(Unit* victim, float dist); void DoAddAuraToAllHostilePlayers(uint32 spellid); diff --git a/src/server/game/AI/EventAI/CreatureEventAI.cpp b/src/server/game/AI/EventAI/CreatureEventAI.cpp index aa14bc1b56e..951a035628a 100755 --- a/src/server/game/AI/EventAI/CreatureEventAI.cpp +++ b/src/server/game/AI/EventAI/CreatureEventAI.cpp @@ -1317,6 +1317,10 @@ bool CreatureEventAI::CanCast(Unit* target, SpellInfo const* spell, bool trigger if (!me->IsInRange(target, spell->GetMinRange(false), spell->GetMaxRange(false))) return false; + //Spell is on cooldown + if (me->HasSpellCooldown(spell->Id)) + return false; + return true; } diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index a7660a0a44b..7dd4053b82f 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -634,7 +634,7 @@ void SmartAI::SpellHitTarget(Unit* target, const SpellInfo* spellInfo) void SmartAI::DamageTaken(Unit* doneBy, uint32& damage) { GetScript()->ProcessEventsFor(SMART_EVENT_DAMAGED, doneBy, damage); - if ((damage >= me->GetHealth() - mInvincibilityHpLevel) && (mInvincibilityHpLevel > 0)) + if (mInvincibilityHpLevel && (damage >= me->GetHealth() - mInvincibilityHpLevel)) { damage = 0; me->SetHealth(mInvincibilityHpLevel); |
