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 5339d1d3b8)
This commit is contained in:
Rothend
2020-06-24 21:27:34 +02:00
committed by Shauren
parent f5967b8a87
commit d4a1a7a040
5 changed files with 23 additions and 2 deletions

View File

@@ -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());

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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