diff options
7 files changed, 20 insertions, 12 deletions
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 9d61ec0a214..3d71abb47a9 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -169,7 +169,7 @@ class CreatureAI : public UnitAI virtual void PassengerBoarded(Unit* /*passenger*/, int8 /*seatId*/, bool /*apply*/) {} - virtual void OnSpellClick(Unit* /*clicker*/) { } + virtual void OnSpellClick(Unit* /*clicker*/, bool& /*result*/) { } virtual bool CanSeeAlways(WorldObject const* /*obj*/) { return false; } protected: diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 96979cf2c49..a2612df2f89 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -828,8 +828,11 @@ void SmartAI::sOnGameEvent(bool start, uint16 eventId) GetScript()->ProcessEventsFor(start ? SMART_EVENT_GAME_EVENT_START : SMART_EVENT_GAME_EVENT_END, NULL, eventId); } -void SmartAI::OnSpellClick(Unit* clicker) +void SmartAI::OnSpellClick(Unit* clicker, bool& result) { + if (!result) + return; + GetScript()->ProcessEventsFor(SMART_EVENT_ON_SPELLCLICK, clicker); } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index dee6bec905c..4b4909e9c6c 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -197,7 +197,7 @@ class SmartAI : public CreatureAI void RemoveAuras(); - void OnSpellClick(Unit* clicker); + void OnSpellClick(Unit* clicker, bool& result); private: uint32 mFollowCreditType; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index d8137864ded..4ad2a06a61e 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -16801,12 +16801,9 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) result = true; } - if (result) - { - Creature* creature = ToCreature(); - if (creature && creature->IsAIEnabled) - creature->AI()->OnSpellClick(clicker); - } + Creature* creature = ToCreature(); + if (creature && creature->IsAIEnabled) + creature->AI()->OnSpellClick(clicker, result); return result; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 97a70f43c27..259f2c28300 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -1013,8 +1013,11 @@ class npc_dream_portal : public CreatureScript { } - void OnSpellClick(Unit* /*clicker*/) + void OnSpellClick(Unit* /*clicker*/, bool& result) { + if (!result) + return; + _used = true; me->DespawnOrUnsummon(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index f89112e3d67..37ecf7874b8 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -709,8 +709,11 @@ class boss_flame_leviathan_overload_device : public CreatureScript { } - void OnSpellClick(Unit* /*clicker*/) + void OnSpellClick(Unit* /*clicker*/, bool& result) { + if (!result) + return; + if (me->GetVehicle()) { me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 105b4757066..97554a63217 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -1421,8 +1421,10 @@ class npc_descend_into_madness : public CreatureScript { npc_descend_into_madnessAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()) { } - void OnSpellClick(Unit* clicker) + void OnSpellClick(Unit* clicker, bool& result) { + if (!result) + return; clicker->RemoveAurasDueToSpell(SPELL_BRAIN_LINK); me->DespawnOrUnsummon(); } |