diff options
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 10 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 6 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 1 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 6 |
5 files changed, 23 insertions, 2 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 25067e6c0f1..a0afd620c77 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -592,6 +592,11 @@ void SmartAI::JustSummoned(Creature* creature) GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT, creature); } +void SmartAI::SummonedCreatureDies(Creature* summon, Unit* /*killer*/) +{ + GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT_DIES, summon); +} + void SmartAI::AttackStart(Unit* who) { // dont allow charmed npcs to act on their own @@ -1102,6 +1107,11 @@ void SmartGameObjectAI::JustSummoned(Creature* creature) GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT, creature); } +void SmartGameObjectAI::SummonedCreatureDies(Creature* summon, Unit* /*killer*/) +{ + GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT_DIES, summon); +} + void SmartGameObjectAI::SummonedCreatureDespawn(Creature* unit) { GetScript()->ProcessEventsFor(SMART_EVENT_SUMMON_DESPAWNED, unit, unit->GetEntry()); diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 9ecf7703def..c40fe78d179 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -92,6 +92,9 @@ class TC_GAME_API SmartAI : public CreatureAI // Called when the creature summon successfully other creature void JustSummoned(Creature* creature) override; + // Called when a summoned unit dies + void SummonedCreatureDies(Creature* summon, Unit* killer) override; + // Tell creature to attack and follow the victim void AttackStart(Unit* who) override; @@ -275,6 +278,9 @@ class TC_GAME_API SmartGameObjectAI : public GameObjectAI // Called when the gameobject summon successfully other creature void JustSummoned(Creature* creature) override; + // Called when a summoned unit dies + void SummonedCreatureDies(Creature* summon, Unit* killer) override; + // Called when a summoned creature dissapears (UnSommoned) void SummonedCreatureDespawn(Creature* unit) override; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 768d055a6fd..515c71b6a30 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -3417,6 +3417,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui break; } case SMART_EVENT_SUMMONED_UNIT: + case SMART_EVENT_SUMMONED_UNIT_DIES: { if (!IsCreature(unit)) return; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 9383b67adb0..d393b412958 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -461,6 +461,7 @@ SmartScriptHolder& SmartAIMgr::FindLinkedEvent(SmartAIEventList& list, uint32 li case SMART_EVENT_DEATH: case SMART_EVENT_KILL: case SMART_EVENT_SUMMONED_UNIT: + case SMART_EVENT_SUMMONED_UNIT_DIES: case SMART_EVENT_SPELLHIT: case SMART_EVENT_SPELLHIT_TARGET: case SMART_EVENT_DAMAGED: @@ -883,6 +884,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) break; case SMART_EVENT_SUMMON_DESPAWNED: case SMART_EVENT_SUMMONED_UNIT: + case SMART_EVENT_SUMMONED_UNIT_DIES: if (e.event.summoned.creature && !IsCreatureValid(e, e.event.summoned.creature)) return false; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 2fbeb3436a6..0473febc762 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -178,8 +178,9 @@ enum SMART_EVENT SMART_EVENT_SCENE_TRIGGER = 79, // param_string : triggerName SMART_EVENT_SCENE_CANCEL = 80, // none SMART_EVENT_SCENE_COMPLETE = 81, // none + SMART_EVENT_SUMMONED_UNIT_DIES = 82, // CreatureId(0 all), CooldownMin, CooldownMax - SMART_EVENT_END = 82 + SMART_EVENT_END = 83 }; struct SmartEvent @@ -1579,7 +1580,8 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] = {SMART_EVENT_SCENE_START, SMART_SCRIPT_TYPE_MASK_SCENE }, {SMART_EVENT_SCENE_TRIGGER, SMART_SCRIPT_TYPE_MASK_SCENE }, {SMART_EVENT_SCENE_CANCEL, SMART_SCRIPT_TYPE_MASK_SCENE }, - {SMART_EVENT_SCENE_COMPLETE, SMART_SCRIPT_TYPE_MASK_SCENE } + {SMART_EVENT_SCENE_COMPLETE, SMART_SCRIPT_TYPE_MASK_SCENE }, + {SMART_EVENT_SUMMONED_UNIT_DIES, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, }; enum SmartEventFlags |