aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Instances/InstanceScript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Instances/InstanceScript.cpp')
-rw-r--r--src/server/game/Instances/InstanceScript.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index 932c55559ad..88ee153423f 100644
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -52,6 +52,43 @@ bool InstanceScript::IsEncounterInProgress() const
return false;
}
+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);
+}
+
void InstanceScript::SetHeaders(std::string const& dataHeaders)
{
for (char header : dataHeaders)
@@ -83,6 +120,27 @@ void InstanceScript::LoadDoorData(const DoorData* data)
TC_LOG_DEBUG("scripts", "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);
+
+ TC_LOG_ERROR("scripts", "InstanceScript::LoadObjectData: " SZFMTD " objects loaded.", _creatureInfo.size() + _gameObjectInfo.size());
+}
+
+void InstanceScript::LoadObjectData(ObjectData const* data, ObjectInfoMap& objectInfo)
+{
+ while (data->entry)
+ {
+ ASSERT(objectInfo.find(data->entry) == objectInfo.end());
+ objectInfo[data->entry] = data->type;
+ ++data;
+ }
+}
+
void InstanceScript::UpdateMinionState(Creature* minion, EncounterState state)
{
switch (state)
@@ -133,6 +191,32 @@ 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());