diff --git a/common/database.cpp b/common/database.cpp index 82a0ecae8..e62a33729 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -95,8 +95,6 @@ bool Database::Connect(const char* host, const char* user, const char* passwd, c void Database::DBInitVars() { - max_zonename = 0; - zonename_array = 0; varcache_array = 0; varcache_max = 0; varcache_lastupdate = 0; @@ -135,13 +133,6 @@ Close the connection to the database Database::~Database() { unsigned int x; - if (zonename_array) { - for (x=0; x<=max_zonename; x++) { - if (zonename_array[x]) - safe_delete_array(zonename_array[x]); - } - safe_delete_array(zonename_array); - } if (varcache_array) { for (x=0; x(zoneid,zonename)); } } else { @@ -1356,39 +1321,27 @@ bool Database::LoadZoneNames() { safe_delete_array(query); return false; } + mysql_free_result(result); + return true; } uint32 Database::GetZoneID(const char* zonename) { - if (zonename_array == 0) - return 0; if (zonename == 0) return 0; - for (unsigned int i=0; i<=max_zonename; i++) { - if (zonename_array[i] != 0 && strcasecmp(zonename_array[i], zonename) == 0) { - return i; + for (auto iter = zonename_array.begin(); iter != zonename_array.end(); ++iter) { + if (iter->second.compare(zonename) == 0) { + return iter->first; } } return 0; } const char* Database::GetZoneName(uint32 zoneID, bool ErrorUnknown) { - if (zonename_array == 0) { - if (ErrorUnknown) - return "UNKNOWN"; - else - return 0; - } + auto iter = zonename_array.find(zoneID); - if (zoneID <= max_zonename) { - if (zonename_array[zoneID]) - return zonename_array[zoneID]; - else { - if (ErrorUnknown) - return "UNKNOWN"; - else - return 0; - } + if (iter != zonename_array.end()) { + return iter->second.c_str(); } else { if (ErrorUnknown) diff --git a/common/database.h b/common/database.h index b194476b8..849f6f63d 100644 --- a/common/database.h +++ b/common/database.h @@ -255,8 +255,7 @@ protected: private: void DBInitVars(); - uint32 max_zonename; - char** zonename_array; + std::map zonename_array; Mutex Mvarcache; uint32 varcache_max; diff --git a/world/AdventureManager.cpp b/world/AdventureManager.cpp index 834b2b643..44ff5bf94 100644 --- a/world/AdventureManager.cpp +++ b/world/AdventureManager.cpp @@ -27,6 +27,10 @@ AdventureManager::~AdventureManager() safe_delete(process_timer); safe_delete(save_timer); safe_delete(leaderboard_info_timer); + + for (auto iter = adventure_templates.begin(); iter != adventure_templates.end(); ++iter) { + delete iter->second; + } } void AdventureManager::Process() diff --git a/zone/net.cpp b/zone/net.cpp index 4108894bc..11417ba4d 100644 --- a/zone/net.cpp +++ b/zone/net.cpp @@ -72,7 +72,7 @@ #undef new #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #endif - + #ifdef _WINDOWS #include #include @@ -475,6 +475,7 @@ int main(int argc, char** argv) { #endif safe_delete(ps); safe_delete(mmf); + safe_delete(Config); if (zone != 0) Zone::Shutdown(true);