feat(Core/SmartScripts): SMART_EVENT_SUMMONED_UNIT_DIES (#9979)
This commit is contained in:
committed by
GitHub
parent
9c63257283
commit
002e62d689
@@ -65,6 +65,8 @@ public:
|
|||||||
virtual void EventInform(uint32 /*eventId*/) {}
|
virtual void EventInform(uint32 /*eventId*/) {}
|
||||||
virtual void SpellHit(Unit* /*unit*/, const SpellInfo* /*spellInfo*/) {}
|
virtual void SpellHit(Unit* /*unit*/, const SpellInfo* /*spellInfo*/) {}
|
||||||
virtual bool CanBeSeen(Player const* /*seer*/) { return true; }
|
virtual bool CanBeSeen(Player const* /*seer*/) { return true; }
|
||||||
|
|
||||||
|
virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
class NullGameObjectAI : public GameObjectAI
|
class NullGameObjectAI : public GameObjectAI
|
||||||
|
|||||||
@@ -794,6 +794,11 @@ void SmartAI::JustSummoned(Creature* creature)
|
|||||||
GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT, 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)
|
void SmartAI::AttackStart(Unit* who)
|
||||||
{
|
{
|
||||||
// xinef: dont allow charmed npcs to act on their own
|
// 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);
|
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)
|
int SmartGameObjectAI::Permissible(const GameObject* g)
|
||||||
{
|
{
|
||||||
if (g->GetAIName() == "SmartGameObjectAI")
|
if (g->GetAIName() == "SmartGameObjectAI")
|
||||||
|
|||||||
@@ -91,6 +91,9 @@ public:
|
|||||||
// Called when the creature summon successfully other creature
|
// Called when the creature summon successfully other creature
|
||||||
void JustSummoned(Creature* creature) override;
|
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
|
// Tell creature to attack and follow the victim
|
||||||
void AttackStart(Unit* who) override;
|
void AttackStart(Unit* who) override;
|
||||||
|
|
||||||
@@ -270,6 +273,9 @@ public:
|
|||||||
void EventInform(uint32 eventId) override;
|
void EventInform(uint32 eventId) override;
|
||||||
void SpellHit(Unit* unit, const SpellInfo* spellInfo) override;
|
void SpellHit(Unit* unit, const SpellInfo* spellInfo) override;
|
||||||
|
|
||||||
|
// Called when a summoned unit dies
|
||||||
|
void SummonedCreatureDies(Creature* summon, Unit* killer) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SmartScript mScript;
|
SmartScript mScript;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4194,6 +4194,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SMART_EVENT_SUMMONED_UNIT:
|
case SMART_EVENT_SUMMONED_UNIT:
|
||||||
|
case SMART_EVENT_SUMMONED_UNIT_DIES:
|
||||||
{
|
{
|
||||||
if (!IsCreature(unit))
|
if (!IsCreature(unit))
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -362,6 +362,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e)
|
|||||||
case SMART_TARGET_RANDOM_POINT:
|
case SMART_TARGET_RANDOM_POINT:
|
||||||
case SMART_TARGET_ROLE_SELECTION:
|
case SMART_TARGET_ROLE_SELECTION:
|
||||||
case SMART_TARGET_LOOT_RECIPIENTS:
|
case SMART_TARGET_LOOT_RECIPIENTS:
|
||||||
|
case SMART_EVENT_SUMMONED_UNIT_DIES:
|
||||||
break;
|
break;
|
||||||
default:
|
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());
|
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;
|
break;
|
||||||
case SMART_EVENT_SUMMON_DESPAWNED:
|
case SMART_EVENT_SUMMON_DESPAWNED:
|
||||||
case SMART_EVENT_SUMMONED_UNIT:
|
case SMART_EVENT_SUMMONED_UNIT:
|
||||||
|
case SMART_EVENT_SUMMONED_UNIT_DIES:
|
||||||
if (e.event.summoned.creature && !IsCreatureValid(e, e.event.summoned.creature))
|
if (e.event.summoned.creature && !IsCreatureValid(e, e.event.summoned.creature))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|||||||
@@ -183,6 +183,8 @@ enum SMART_EVENT
|
|||||||
|
|
||||||
SMART_EVENT_TC_END = 78,
|
SMART_EVENT_TC_END = 78,
|
||||||
|
|
||||||
|
SMART_EVENT_SUMMONED_UNIT_DIES = 82, // CreatureId(0 all), CooldownMin, CooldownMax
|
||||||
|
|
||||||
/* AC Custom Events */
|
/* AC Custom Events */
|
||||||
SMART_EVENT_AC_START = 100,
|
SMART_EVENT_AC_START = 100,
|
||||||
|
|
||||||
@@ -1658,7 +1660,7 @@ const uint32 SmartAIEventMask[SMART_EVENT_AC_END][2] =
|
|||||||
{ 0, 0 }, // 79
|
{ 0, 0 }, // 79
|
||||||
{ 0, 0 }, // 80
|
{ 0, 0 }, // 80
|
||||||
{ 0, 0 }, // 81
|
{ 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 }, // 83
|
||||||
{ 0, 0 }, // 84
|
{ 0, 0 }, // 84
|
||||||
{ 0, 0 }, // 85
|
{ 0, 0 }, // 85
|
||||||
|
|||||||
Reference in New Issue
Block a user