From 1d462bfd0f65826acc6b03cb3dd536840869b8de Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 25 Jan 2015 01:42:46 -0600 Subject: [PATCH] Revert some entity related CastTo changes --- common/CMakeLists.txt | 1 + common/database.cpp | 528 +----------------------------------------- zone/entity.cpp | 7 +- 3 files changed, 8 insertions(+), 528 deletions(-) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 95f032355..02119fd57 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -9,6 +9,7 @@ SET(common_sources crc32.cpp database.cpp database_conversions.cpp + database_instances.cpp dbcore.cpp emu_opcodes.cpp emu_tcp_connection.cpp diff --git a/common/database.cpp b/common/database.cpp index d9219714d..43a08f394 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -871,7 +871,8 @@ uint32 Database::LoadVariables_MQ(char** query) } // always returns true? not sure about this. -bool Database::LoadVariables_result(MySQLRequestResult results) { +bool Database::LoadVariables_result(MySQLRequestResult results) +{ uint32 i = 0; LockMutex lock(&Mvarcache); @@ -1080,9 +1081,7 @@ uint32 Database::GetZoneGraveyardID(uint32 zone_id, uint32 version) { auto results = QueryDatabase(query); if (!results.Success()) - { return 0; - } if (results.RowCount() == 0) return 0; @@ -2018,529 +2017,6 @@ void Database::ClearRaidLeader(uint32 gid, uint32 rid) QueryDatabase(query); } -bool Database::VerifyInstanceAlive(uint16 instance_id, uint32 char_id) -{ - //we are not saved to this instance so set our instance to 0 - if(!GlobalInstance(instance_id) && !CharacterInInstanceGroup(instance_id, char_id)) - return false; - - if(CheckInstanceExpired(instance_id)) - { - DeleteInstance(instance_id); - return false; - } - - return true; -} - -bool Database::VerifyZoneInstance(uint32 zone_id, uint16 instance_id) -{ - - std::string query = StringFormat("SELECT id FROM instance_list where id=%u AND zone=%u",instance_id, zone_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return false; - - if (results.RowCount() == 0) - return false; - - return true; -} - -bool Database::CharacterInInstanceGroup(uint16 instance_id, uint32 char_id) -{ - - std::string query = StringFormat("SELECT charid FROM instance_list_player where id=%u AND charid=%u",instance_id, char_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return false; - - if (results.RowCount() != 1) - return false; - - return true; -} - -void Database::DeleteInstance(uint16 instance_id) -{ - - std::string query = StringFormat("DELETE FROM instance_list WHERE id=%u", instance_id); - QueryDatabase(query); - - query = StringFormat("DELETE FROM instance_list_player WHERE id=%u", instance_id); - QueryDatabase(query); - - query = StringFormat("DELETE FROM respawn_times WHERE instance_id=%u", instance_id); - QueryDatabase(query); - - query = StringFormat("DELETE FROM spawn_condition_values WHERE instance_id=%u", instance_id); - QueryDatabase(query); - - BuryCorpsesInInstance(instance_id); -} - -bool Database::CheckInstanceExpired(uint16 instance_id) -{ - - int32 start_time = 0; - int32 duration = 0; - uint32 never_expires = 0; - - std::string query = StringFormat("SELECT start_time, duration, never_expires FROM instance_list WHERE id=%u", instance_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return true; - - if (results.RowCount() == 0) - return true; - - auto row = results.begin(); - - start_time = atoi(row[0]); - duration = atoi(row[1]); - never_expires = atoi(row[2]); - - if(never_expires == 1) - return false; - - timeval tv; - gettimeofday(&tv, nullptr); - - if((start_time + duration) <= tv.tv_sec) - return true; - - return false; -} - -uint32 Database::ZoneIDFromInstanceID(uint16 instance_id) -{ - - std::string query = StringFormat("SELECT zone FROM instance_list where id=%u", instance_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return 0; - - if (results.RowCount() == 0) - return 0; - - auto row = results.begin(); - - return atoi(row[0]); -} - -uint32 Database::VersionFromInstanceID(uint16 instance_id) -{ - - std::string query = StringFormat("SELECT version FROM instance_list where id=%u", instance_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return 0; - - if (results.RowCount() == 0) - return 0; - - auto row = results.begin(); - - return atoi(row[0]); -} - -uint32 Database::GetTimeRemainingInstance(uint16 instance_id, bool &is_perma) -{ - uint32 start_time = 0; - uint32 duration = 0; - uint32 never_expires = 0; - - std::string query = StringFormat("SELECT start_time, duration, never_expires FROM instance_list WHERE id=%u", instance_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - { - is_perma = false; - return 0; - } - - if (results.RowCount() == 0) - { - is_perma = false; - return 0; - } - - auto row = results.begin(); - - start_time = atoi(row[0]); - duration = atoi(row[1]); - never_expires = atoi(row[2]); - - if(never_expires == 1) - { - is_perma = true; - return 0; - } - - is_perma = false; - - timeval tv; - gettimeofday(&tv, nullptr); - return ((start_time + duration) - tv.tv_sec); -} - -bool Database::GetUnusedInstanceID(uint16 &instance_id) -{ - uint32 count = RuleI(Zone, ReservedInstances); - uint32 max = 65535; - - std::string query = StringFormat("SELECT IFNULL(MAX(id),%u)+1 FROM instance_list WHERE id > %u", count, count); - auto results = QueryDatabase(query); - - if (!results.Success()) - { - instance_id = 0; - return false; - } - - if (results.RowCount() == 0) - { - instance_id = 0; - return false; - } - - auto row = results.begin(); - - if (atoi(row[0]) <= max) - { - instance_id = atoi(row[0]); - return true; - } - - query = StringFormat("SELECT id FROM instance_list where id > %u ORDER BY id", count); - results = QueryDatabase(query); - - if (!results.Success()) - { - instance_id = 0; - return false; - } - - if (results.RowCount() == 0) - { - instance_id = 0; - return false; - } - - count++; - for (auto row = results.begin();row != results.end();++row) - { - if(count < atoi(row[0])) - { - instance_id = count; - return true; - } - - if(count > max) - { - instance_id = 0; - return false; - } - - count++; - } - - instance_id = count; - return true; -} - -//perhaps purge any expireds too -bool Database::CreateInstance(uint16 instance_id, uint32 zone_id, uint32 version, uint32 duration) -{ - std::string query = StringFormat("INSERT INTO instance_list (id, zone, version, start_time, duration)" - " values(%lu, %lu, %lu, UNIX_TIMESTAMP(), %lu)", - (unsigned long)instance_id, (unsigned long)zone_id, (unsigned long)version, (unsigned long)duration); - auto results = QueryDatabase(query); - - return results.Success(); -} - -void Database::PurgeExpiredInstances() -{ - std::string query("SELECT id FROM instance_list where (start_time+duration) <= UNIX_TIMESTAMP() and never_expires = 0"); - auto results = QueryDatabase(query); - - if (!results.Success()) - return; - - if (results.RowCount() == 0) - return; - - for (auto row = results.begin();row != results.end();++row) - DeleteInstance(atoi(row[0])); -} - -bool Database::AddClientToInstance(uint16 instance_id, uint32 char_id) -{ - std::string query = StringFormat( - "REPLACE INTO `instance_list_player` (id, charid) " - "VALUES " - "(%lu, %lu)", - (unsigned long)instance_id, - (unsigned long)char_id - ); - auto results = QueryDatabase(query); - return results.Success(); -} - -bool Database::RemoveClientFromInstance(uint16 instance_id, uint32 char_id) -{ - std::string query = StringFormat("DELETE FROM instance_list_player WHERE id=%lu AND charid=%lu", - (unsigned long)instance_id, (unsigned long)char_id); - auto results = QueryDatabase(query); - - return results.Success(); -} - -bool Database::RemoveClientsFromInstance(uint16 instance_id) -{ - std::string query = StringFormat("DELETE FROM instance_list_player WHERE id=%lu", (unsigned long)instance_id); - auto results = QueryDatabase(query); - - return results.Success(); -} - -bool Database::CheckInstanceExists(uint16 instance_id) { - std::string query = StringFormat( - "SELECT " - "`id` " - "FROM " - "`instance_list` " - "WHERE " - "`id` = %u", - instance_id - ); - auto results = QueryDatabase(query); - - if (!results.Success()) - return false; - - if (results.RowCount() == 0) - return false; - - return true; -} - -void Database::BuryCorpsesInInstance(uint16 instance_id) { - std::string query = StringFormat( - "UPDATE `character_corpses` " - "SET `is_buried` = 1, " - "`instance_id` = 0 " - "WHERE " - "`instance_id` = %u ", - instance_id - ); - auto results = QueryDatabase(query); -} - -uint16 Database::GetInstanceVersion(uint16 instance_id) { - if(instance_id == 0) - return 0; - - std::string query = StringFormat("SELECT version FROM instance_list where id=%u", instance_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return 0; - - if (results.RowCount() == 0) - return 0; - - auto row = results.begin(); - return atoi(row[0]); -} - -uint16 Database::GetInstanceID(const char* zone, uint32 character_id, int16 version) { - - std::string query = StringFormat( - "SELECT " - "instance_list.id " - "FROM " - "instance_list, " - "instance_list_player " - "WHERE " - "instance_list.zone = %u " - "AND instance_list.version = %u " - "AND instance_list.id = instance_list_player.id " - "AND instance_list_player.charid = %u " - "LIMIT 1 ", - GetZoneID(zone), - version, - character_id - ); - auto results = QueryDatabase(query); - - if (!results.Success()) - return 0; - - if (results.RowCount() == 0) - return 0; - - auto row = results.begin(); - return atoi(row[0]); -} - -uint16 Database::GetInstanceID(uint32 zone, uint32 character_id, int16 version) -{ - if(!zone) - return 0; - - std::string query = StringFormat( - "SELECT " - "instance_list.id " - "FROM " - "instance_list, " - "instance_list_player " - "WHERE " - "instance_list.zone = %u " - "AND instance_list.version = %u " - "AND instance_list.id = instance_list_player.id " - "AND instance_list_player.charid = %u " - "LIMIT 1; ", - zone, - version, - character_id - ); - auto results = QueryDatabase(query); - - if (!results.Success()) - return 0; - - if (results.RowCount() == 0) - return 0; - - auto row = results.begin(); - - return atoi(row[0]); -} - -void Database::GetCharactersInInstance(uint16 instance_id, std::list &charid_list) { - - std::string query = StringFormat("SELECT `charid` FROM `instance_list_playe`r WHERE `id` = %u", instance_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return; - - for (auto row = results.begin(); row != results.end(); ++row) - charid_list.push_back(atoi(row[0])); -} - -void Database::AssignGroupToInstance(uint32 group_id, uint32 instance_id) -{ - - uint32 zone_id = ZoneIDFromInstanceID(instance_id); - uint16 version = VersionFromInstanceID(instance_id); - - std::string query = StringFormat("SELECT `charid` FROM `group_id` WHERE `groupid` = %u", group_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return; - - for (auto row = results.begin(); row != results.end(); ++row) - { - uint32 charid = atoi(row[0]); - if (GetInstanceID(zone_id, charid, version) == 0) - AddClientToInstance(instance_id, charid); - } -} - -void Database::AssignRaidToInstance(uint32 raid_id, uint32 instance_id) -{ - - uint32 zone_id = ZoneIDFromInstanceID(instance_id); - uint16 version = VersionFromInstanceID(instance_id); - - std::string query = StringFormat("SELECT `charid` FROM `raid_members` WHERE `raidid` = %u", raid_id); - auto results = QueryDatabase(query); - - if (!results.Success()) - return; - - for (auto row = results.begin(); row != results.end(); ++row) - { - uint32 charid = atoi(row[0]); - if (GetInstanceID(zone_id, charid, version) == 0) - AddClientToInstance(instance_id, charid); - } -} - -void Database::FlagInstanceByGroupLeader(uint32 zone, int16 version, uint32 charid, uint32 gid) -{ - uint16 id = GetInstanceID(zone, charid, version); - if(id != 0) - return; - - char ln[128]; - memset(ln, 0, 128); - strcpy(ln, GetGroupLeadershipInfo(gid, ln)); - uint32 l_charid = GetCharacterID((const char*)ln); - uint16 l_id = GetInstanceID(zone, l_charid, version); - - if(l_id == 0) - return; - - AddClientToInstance(l_id, charid); -} - -void Database::FlagInstanceByRaidLeader(uint32 zone, int16 version, uint32 charid, uint32 rid) -{ - uint16 id = GetInstanceID(zone, charid, version); - if(id != 0) - return; - - uint32 l_charid = GetCharacterID(GetRaidLeaderName(rid)); - uint16 l_id = GetInstanceID(zone, l_charid, version); - - if(l_id == 0) - return; - - AddClientToInstance(l_id, charid); -} - -void Database::SetInstanceDuration(uint16 instance_id, uint32 new_duration) -{ - std::string query = StringFormat("UPDATE `instance_list` SET start_time=UNIX_TIMESTAMP(), " - "duration=%u WHERE id=%u", new_duration, instance_id); - auto results = QueryDatabase(query); -} - -bool Database::GlobalInstance(uint16 instance_id) -{ - std::string query = StringFormat( - "SELECT " - "is_global " - "FROM " - "instance_list " - "WHERE " - "id = %u " - "LIMIT 1 ", - instance_id - ); - auto results = QueryDatabase(query); - - if (!results.Success()) - return false; - - if (results.RowCount() == 0) - return false; - - auto row = results.begin(); - - return (atoi(row[0]) == 1) ? true : false; -} - void Database::UpdateAdventureStatsEntry(uint32 char_id, uint8 theme, bool win) { diff --git a/zone/entity.cpp b/zone/entity.cpp index 09a5b8be1..b1b139473 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -74,24 +74,27 @@ Entity::~Entity() Client *Entity::CastToClient() { if (this == 0x00) { - Log.Out(Logs::General, Logs::Error, "CastToClient error (not client)"); + Log.Out(Logs::General, Logs::Error, "CastToClient error (nullptr)"); return 0; } - +#ifdef _EQDEBUG if (!IsClient()) { Log.Out(Logs::General, Logs::Error, "CastToClient error (not client)"); return 0; } +#endif return static_cast(this); } NPC *Entity::CastToNPC() { +#ifdef _EQDEBUG if (!IsNPC()) { Log.Out(Logs::General, Logs::Error, "CastToNPC error (Not NPC)"); return 0; } +#endif return static_cast(this); }