diff options
author | Rothend <67004168+Rothend@users.noreply.github.com> | 2020-06-24 21:27:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-24 21:27:34 +0200 |
commit | 5339d1d3b835fcc8f635d34457ceb6e653e70a1c (patch) | |
tree | 04aa4efe1ed2979ac2788276bbe67d47b9b42b10 /src | |
parent | 5f35bf9e795ab0c8343d693062d3643dae2b7d8c (diff) |
Core/SAI: implement SMART_EVENT_SUMMONED_UNIT_DIES (82), useable by creatures and gameobjects (#24874)
* Core/SAI: implement SMART_EVENT_SUMMONED_UNIT_DIES (82), useable by creatures and gameobjects.
Closes #24831
* Update SmartScriptMgr.h
Diffstat (limited to 'src')
-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 | 14 |
5 files changed, 31 insertions, 2 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 81567937ac4..01d97a5c130 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -590,6 +590,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 @@ -1100,6 +1105,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 8e6afd8eccf..6db2c080c32 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -91,6 +91,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; @@ -274,6 +277,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 c3372e1c208..1df7d601d21 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -3161,6 +3161,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 faf58a3d3be..0e4f4c7f06a 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -420,6 +420,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: @@ -813,6 +814,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 4ae4b7e2acb..7792fa3af69 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -174,8 +174,13 @@ enum SMART_EVENT SMART_EVENT_DISTANCE_CREATURE = 75, // guid, entry, distance, repeat SMART_EVENT_DISTANCE_GAMEOBJECT = 76, // guid, entry, distance, repeat SMART_EVENT_COUNTER_SET = 77, // id, value, cooldownMin, cooldownMax + SMART_EVENT_SCENE_START = 78, // don't use on 3.3.5a + SMART_EVENT_SCENE_TRIGGER = 79, // don't use on 3.3.5a + SMART_EVENT_SCENE_CANCEL = 80, // don't use on 3.3.5a + SMART_EVENT_SCENE_COMPLETE = 81, // don't use on 3.3.5a + SMART_EVENT_SUMMONED_UNIT_DIES = 82, // CreatureId(0 all), CooldownMin, CooldownMax - SMART_EVENT_END = 78 + SMART_EVENT_END = 83 }; struct SmartEvent @@ -1498,7 +1503,12 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] = {SMART_EVENT_FRIENDLY_HEALTH_PCT, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_DISTANCE_CREATURE, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_DISTANCE_GAMEOBJECT, SMART_SCRIPT_TYPE_MASK_CREATURE }, - {SMART_EVENT_COUNTER_SET, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT } + {SMART_EVENT_COUNTER_SET, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, + {SMART_EVENT_SCENE_START, 0 }, + {SMART_EVENT_SCENE_TRIGGER, 0 }, + {SMART_EVENT_SCENE_CANCEL, 0 }, + {SMART_EVENT_SCENE_COMPLETE, 0 }, + {SMART_EVENT_SUMMONED_UNIT_DIES, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, }; enum SmartEventFlags |