feat(Core/Scripts): implemented a guid map in InstanceScript, this wa… (#8781)

Co-authored-by: joschiwald <joschiwald.trinity@gmail.com>
This commit is contained in:
Skjalf
2021-11-02 15:55:50 -03:00
committed by GitHub
parent aeafd1f376
commit d35c6b6022
3 changed files with 146 additions and 12 deletions

View File

@@ -46,6 +46,57 @@ void InstanceScript::SaveToDB()
CharacterDatabase.Execute(stmt);
}
void InstanceScript::OnCreatureCreate(Creature* creature)
{
AddObject(creature, true);
AddMinion(creature, true);
}
void InstanceScript::OnCreatureRemove(Creature* creature)
{
AddObject(creature, false);
AddMinion(creature, false);
}
void InstanceScript::OnGameObjectCreate(GameObject* go)
{
AddObject(go, true);
AddDoor(go, true);
}
void InstanceScript::OnGameObjectRemove(GameObject* go)
{
AddObject(go, false);
AddDoor(go, false);
}
ObjectGuid InstanceScript::GetObjectGuid(uint32 type) const
{
ObjectGuidMap::const_iterator i = _objectGuids.find(type);
if (i != _objectGuids.end())
{
return i->second;
}
return ObjectGuid::Empty;
}
ObjectGuid InstanceScript::GetGuidData(uint32 type) const
{
return GetObjectGuid(type);
}
Creature* InstanceScript::GetCreature(uint32 type)
{
return instance->GetCreature(GetObjectGuid(type));
}
GameObject* InstanceScript::GetGameObject(uint32 type)
{
return instance->GetGameObject(GetObjectGuid(type));
}
void InstanceScript::HandleGameObject(ObjectGuid GUID, bool open, GameObject* go)
{
if (!go)
@@ -91,6 +142,30 @@ void InstanceScript::LoadDoorData(const DoorData* data)
LOG_DEBUG("scripts.ai", "InstanceScript::LoadDoorData: " UI64FMTD " doors loaded.", uint64(doors.size()));
}
void InstanceScript::LoadObjectData(ObjectData const* creatureData, ObjectData const* gameObjectData)
{
if (creatureData)
{
LoadObjectData(creatureData, _creatureInfo);
}
if (gameObjectData)
{
LoadObjectData(gameObjectData, _gameObjectInfo);
}
LOG_ERROR("scripts", "InstanceScript::LoadObjectData: " SZFMTD " objects loaded.", _creatureInfo.size() + _gameObjectInfo.size());
}
void InstanceScript::LoadObjectData(ObjectData const* data, ObjectInfoMap& objectInfo)
{
while (data->entry)
{
objectInfo[data->entry] = data->type;
++data;
}
}
void InstanceScript::UpdateMinionState(Creature* minion, EncounterState state)
{
switch (state)
@@ -142,6 +217,40 @@ void InstanceScript::UpdateDoorState(GameObject* door)
door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);
}
void InstanceScript::AddObject(Creature* obj, bool add)
{
ObjectInfoMap::const_iterator j = _creatureInfo.find(obj->GetEntry());
if (j != _creatureInfo.end())
{
AddObject(obj, j->second, add);
}
}
void InstanceScript::AddObject(GameObject* obj, bool add)
{
ObjectInfoMap::const_iterator j = _gameObjectInfo.find(obj->GetEntry());
if (j != _gameObjectInfo.end())
{
AddObject(obj, j->second, add);
}
}
void InstanceScript::AddObject(WorldObject* obj, uint32 type, bool add)
{
if (add)
{
_objectGuids[type] = obj->GetGUID();
}
else
{
ObjectGuidMap::iterator i = _objectGuids.find(type);
if (i != _objectGuids.end() && i->second == obj->GetGUID())
{
_objectGuids.erase(i);
}
}
}
void InstanceScript::AddDoor(GameObject* door, bool add)
{
DoorInfoMapBounds range = doors.equal_range(door->GetEntry());