aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRothend <67004168+Rothend@users.noreply.github.com>2020-06-24 21:27:34 +0200
committerShauren <shauren.trinity@gmail.com>2022-01-18 00:17:28 +0100
commitd4a1a7a040be0ca0d6428669135bcc64d92be1c2 (patch)
tree840723077cbad74589165d376b60e39553dfcaf3
parentf5967b8a8745bc8ccd512c876bf821968a4ba1b2 (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 (cherry picked from commit 5339d1d3b835fcc8f635d34457ceb6e653e70a1c)
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp10
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h6
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp1
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h6
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