aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRothend <67004168+Rothend@users.noreply.github.com>2020-06-24 21:27:34 +0200
committerGitHub <noreply@github.com>2020-06-24 21:27:34 +0200
commit5339d1d3b835fcc8f635d34457ceb6e653e70a1c (patch)
tree04aa4efe1ed2979ac2788276bbe67d47b9b42b10 /src
parent5f35bf9e795ab0c8343d693062d3643dae2b7d8c (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.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.h14
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