mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-27 15:46:24 +00:00
feat(Core/Instances): Implement SummonData (#20582)
This commit is contained in:
@@ -59,6 +59,9 @@ void InstanceScript::OnCreatureCreate(Creature* creature)
|
||||
{
|
||||
AddObject(creature);
|
||||
AddMinion(creature);
|
||||
|
||||
if (creature->IsSummon())
|
||||
SetSummoner(creature);
|
||||
}
|
||||
|
||||
void InstanceScript::OnCreatureRemove(Creature* creature)
|
||||
@@ -194,6 +197,15 @@ void InstanceScript::LoadObjectData(ObjectData const* data, ObjectInfoMap& objec
|
||||
}
|
||||
}
|
||||
|
||||
void InstanceScript::LoadSummonData(ObjectData const* data)
|
||||
{
|
||||
while (data->entry)
|
||||
{
|
||||
_summonInfo[data->entry] = data->type;
|
||||
++data;
|
||||
}
|
||||
}
|
||||
|
||||
void InstanceScript::UpdateMinionState(Creature* minion, EncounterState state)
|
||||
{
|
||||
switch (state)
|
||||
@@ -348,6 +360,16 @@ void InstanceScript::RemoveMinion(Creature* minion)
|
||||
AddMinion(minion, false);
|
||||
}
|
||||
|
||||
void InstanceScript::SetSummoner(Creature* creature)
|
||||
{
|
||||
auto const& summonData = _summonInfo.find(creature->GetEntry());
|
||||
|
||||
if (summonData != _summonInfo.end())
|
||||
if (Creature* summoner = GetCreature(summonData->second))
|
||||
if (summoner->IsAIEnabled)
|
||||
summoner->AI()->JustSummoned(creature);
|
||||
}
|
||||
|
||||
bool InstanceScript::SetBossState(uint32 id, EncounterState state)
|
||||
{
|
||||
if (id < bosses.size())
|
||||
|
||||
@@ -288,6 +288,11 @@ protected:
|
||||
void LoadDoorData(DoorData const* data);
|
||||
void LoadMinionData(MinionData const* data);
|
||||
void LoadObjectData(ObjectData const* creatureData, ObjectData const* gameObjectData);
|
||||
// Allows setting another creature as summoner for a creature.
|
||||
// This is used to handle summons that are not directly controlled by the summoner.
|
||||
// Summoner creature must be loaded in the instance data (LoadObjectData).
|
||||
void LoadSummonData(ObjectData const* data);
|
||||
void SetSummoner(Creature* creature);
|
||||
|
||||
void AddObject(Creature* obj, bool add = true);
|
||||
void RemoveObject(Creature* obj);
|
||||
@@ -324,6 +329,7 @@ private:
|
||||
MinionInfoMap minions;
|
||||
ObjectInfoMap _creatureInfo;
|
||||
ObjectInfoMap _gameObjectInfo;
|
||||
ObjectInfoMap _summonInfo;
|
||||
ObjectGuidMap _objectGuids;
|
||||
ObjectStateMap _objectStateMap;
|
||||
uint32 completedEncounters; // completed encounter mask, bit indexes are DungeonEncounter.dbc boss numbers, used for packets
|
||||
|
||||
Reference in New Issue
Block a user