feat(Core/SmartScripts): SMART_EVENT_SUMMONED_UNIT_DIES (#9979)

This commit is contained in:
IntelligentQuantum
2022-01-03 14:54:13 +03:30
committed by GitHub
parent 9c63257283
commit 002e62d689
6 changed files with 24 additions and 1 deletions

View File

@@ -65,6 +65,8 @@ public:
virtual void EventInform(uint32 /*eventId*/) {}
virtual void SpellHit(Unit* /*unit*/, const SpellInfo* /*spellInfo*/) {}
virtual bool CanBeSeen(Player const* /*seer*/) { return true; }
virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { }
};
class NullGameObjectAI : public GameObjectAI

View File

@@ -794,6 +794,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)
{
// xinef: dont allow charmed npcs to act on their own
@@ -1084,6 +1089,11 @@ void SmartAI::OnSpellClick(Unit* clicker, bool& /*result*/)
GetScript()->ProcessEventsFor(SMART_EVENT_ON_SPELLCLICK, clicker);
}
void SmartGameObjectAI::SummonedCreatureDies(Creature* summon, Unit* /*killer*/)
{
GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT_DIES, summon);
}
int SmartGameObjectAI::Permissible(const GameObject* g)
{
if (g->GetAIName() == "SmartGameObjectAI")

View File

@@ -91,6 +91,9 @@ public:
// 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;
@@ -270,6 +273,9 @@ public:
void EventInform(uint32 eventId) override;
void SpellHit(Unit* unit, const SpellInfo* spellInfo) override;
// Called when a summoned unit dies
void SummonedCreatureDies(Creature* summon, Unit* killer) override;
protected:
SmartScript mScript;
};

View File

@@ -4194,6 +4194,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

@@ -362,6 +362,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e)
case SMART_TARGET_RANDOM_POINT:
case SMART_TARGET_ROLE_SELECTION:
case SMART_TARGET_LOOT_RECIPIENTS:
case SMART_EVENT_SUMMONED_UNIT_DIES:
break;
default:
LOG_ERROR("sql.sql", "SmartAIMgr: Not handled target_type(%u), Entry %d SourceType %u Event %u Action %u, skipped.", e.GetTargetType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
@@ -553,6 +554,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

@@ -183,6 +183,8 @@ enum SMART_EVENT
SMART_EVENT_TC_END = 78,
SMART_EVENT_SUMMONED_UNIT_DIES = 82, // CreatureId(0 all), CooldownMin, CooldownMax
/* AC Custom Events */
SMART_EVENT_AC_START = 100,
@@ -1658,7 +1660,7 @@ const uint32 SmartAIEventMask[SMART_EVENT_AC_END][2] =
{ 0, 0 }, // 79
{ 0, 0 }, // 80
{ 0, 0 }, // 81
{ 0, 0 }, // 82
{SMART_EVENT_SUMMONED_UNIT_DIES, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT },
{ 0, 0 }, // 83
{ 0, 0 }, // 84
{ 0, 0 }, // 85