mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-22 05:06:24 +00:00
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 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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user