diff options
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 71 |
1 files changed, 21 insertions, 50 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 699954c799d..462c75b933c 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3324,22 +3324,11 @@ void Map::DeleteRespawnInfo(RespawnInfo* info) void Map::RemoveRespawnTime(RespawnInfo* info, bool doRespawn, CharacterDatabaseTransaction dbTrans) { - CharacterDatabasePreparedStatement* stmt; - switch (info->type) - { - case SPAWN_TYPE_CREATURE: - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CREATURE_RESPAWN); - break; - case SPAWN_TYPE_GAMEOBJECT: - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GO_RESPAWN); - break; - default: - ASSERT(false, "Invalid respawninfo type %u for spawnid " UI64FMTD " map %u", uint32(info->type), info->spawnId, GetId()); - return; - } - stmt->setUInt64(0, info->spawnId); - stmt->setUInt16(1, GetId()); - stmt->setUInt32(2, GetInstanceId()); + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_RESPAWN); + stmt->setUInt16(0, info->type); + stmt->setUInt64(1, info->spawnId); + stmt->setUInt16(2, GetId()); + stmt->setUInt32(3, GetInstanceId()); CharacterDatabase.ExecuteOrAppend(dbTrans, stmt); if (doRespawn) @@ -4557,17 +4546,18 @@ void Map::SaveRespawnTime(SpawnObjectType type, ObjectGuid::LowType spawnId, uin void Map::SaveRespawnTimeDB(SpawnObjectType type, ObjectGuid::LowType spawnId, time_t respawnTime, CharacterDatabaseTransaction dbTrans) { // Just here for support of compatibility mode - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement((type == SPAWN_TYPE_GAMEOBJECT) ? CHAR_REP_GO_RESPAWN : CHAR_REP_CREATURE_RESPAWN); - stmt->setUInt64(0, spawnId); - stmt->setInt64(1, respawnTime); - stmt->setUInt16(2, GetId()); - stmt->setUInt32(3, GetInstanceId()); + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_RESPAWN); + stmt->setUInt16(0, type); + stmt->setUInt64(1, spawnId); + stmt->setInt64(2, respawnTime); + stmt->setUInt16(3, GetId()); + stmt->setUInt32(4, GetInstanceId()); CharacterDatabase.ExecuteOrAppend(dbTrans, stmt); } void Map::LoadRespawnTimes() { - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CREATURE_RESPAWNS); + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_RESPAWNS); stmt->setUInt16(0, GetId()); stmt->setUInt32(1, GetInstanceId()); if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) @@ -4575,41 +4565,22 @@ void Map::LoadRespawnTimes() do { Field* fields = result->Fetch(); - ObjectGuid::LowType loguid = fields[0].GetUInt64(); - time_t respawnTime = fields[1].GetInt64(); + SpawnObjectType type = SpawnObjectType(fields[0].GetUInt16()); + ObjectGuid::LowType spawnId = fields[1].GetUInt64(); + time_t respawnTime = fields[2].GetInt64(); - if (CreatureData const* cdata = sObjectMgr->GetCreatureData(loguid)) - SaveRespawnTime(SPAWN_TYPE_CREATURE, loguid, cdata->id, respawnTime, GetZoneId(PhasingHandler::GetEmptyPhaseShift(), cdata->spawnPoint), Trinity::ComputeGridCoord(cdata->spawnPoint.GetPositionX(), cdata->spawnPoint.GetPositionY()).GetId(), false); - - } while (result->NextRow()); - } - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GO_RESPAWNS); - stmt->setUInt16(0, GetId()); - stmt->setUInt32(1, GetInstanceId()); - if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) - { - do - { - Field* fields = result->Fetch(); - ObjectGuid::LowType loguid = fields[0].GetUInt64(); - time_t respawnTime = fields[1].GetInt64(); - - if (GameObjectData const* godata = sObjectMgr->GetGameObjectData(loguid)) - SaveRespawnTime(SPAWN_TYPE_GAMEOBJECT, loguid, godata->id, respawnTime, GetZoneId(PhasingHandler::GetEmptyPhaseShift(), godata->spawnPoint), Trinity::ComputeGridCoord(godata->spawnPoint.GetPositionX(), godata->spawnPoint.GetPositionY()).GetId(), false); + if (SpawnData const* data = sObjectMgr->GetSpawnData(type, spawnId)) + SaveRespawnTime(type, spawnId, data->id, time_t(respawnTime), GetZoneId(PhasingHandler::GetEmptyPhaseShift(), data->spawnPoint), Trinity::ComputeGridCoord(data->spawnPoint.GetPositionX(), data->spawnPoint.GetPositionY()).GetId(), false); + else + TC_LOG_ERROR("maps", "Loading saved respawn time of %" PRIu64 " for spawnid (%u," UI64FMTD ") - spawn does not exist, ignoring", respawnTime, uint32(type), spawnId); } while (result->NextRow()); } } -void Map::DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId) +/*static*/ void Map::DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId) { - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CREATURE_RESPAWN_BY_INSTANCE); - stmt->setUInt16(0, mapId); - stmt->setUInt32(1, instanceId); - CharacterDatabase.Execute(stmt); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GO_RESPAWN_BY_INSTANCE); + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ALL_RESPAWNS); stmt->setUInt16(0, mapId); stmt->setUInt32(1, instanceId); CharacterDatabase.Execute(stmt); |
