diff --git a/CMakeVariables.txt b/CMakeVariables.txt index 67b78aac..732a615b 100644 --- a/CMakeVariables.txt +++ b/CMakeVariables.txt @@ -18,3 +18,5 @@ __maria_db_connector_compile_jobs__=1 __enable_testing__=1 # The path to OpenSSL. Change this if your OpenSSL install path is different than the default. OPENSSL_ROOT_DIR=/usr/local/opt/openssl@3/ +# Uncomment the below line to cache the entire CDClient into memory +# CDCLIENT_CACHE_ALL=1 diff --git a/dDatabase/CDClientDatabase.h b/dDatabase/CDClientDatabase.h index 59f69b7d..7f42918d 100644 --- a/dDatabase/CDClientDatabase.h +++ b/dDatabase/CDClientDatabase.h @@ -13,15 +13,7 @@ #include #include - // Enable this to cache all entries in each table for fast access, comes with more memory cost - //#define CDCLIENT_CACHE_ALL - -/*! - \file CDClientDatabase.hpp - \brief An interface between the CDClient.sqlite file and the server - */ - - //! The CDClient Database namespace +//! The CDClient Database namespace namespace CDClientDatabase { //! Opens a connection with the CDClient diff --git a/dDatabase/CDClientManager.cpp b/dDatabase/CDClientManager.cpp index 9df6ff31..32a6a5b1 100644 --- a/dDatabase/CDClientManager.cpp +++ b/dDatabase/CDClientManager.cpp @@ -38,43 +38,53 @@ #include "CDFeatureGatingTable.h" #include "CDRailActivatorComponent.h" +// Uncomment this to cache the full cdclient database into memory. This will make the server load faster, but will use more memory. +// A vanilla CDClient takes about 46MB of memory + the regular world data. +// #define CDCLIENT_CACHE_ALL + +#ifdef CDCLIENT_CACHE_ALL + #define CDCLIENT_DONT_CACHE_TABLE(x) x +#else + #define CDCLIENT_DONT_CACHE_TABLE(x) +#endif + CDClientManager::CDClientManager() { - CDActivityRewardsTable::Instance(); - CDAnimationsTable::Instance(); - CDBehaviorParameterTable::Instance(); - CDBehaviorTemplateTable::Instance(); - CDComponentsRegistryTable::Instance(); - CDCurrencyTableTable::Instance(); - CDDestructibleComponentTable::Instance(); - CDEmoteTableTable::Instance(); - CDInventoryComponentTable::Instance(); - CDItemComponentTable::Instance(); - CDItemSetsTable::Instance(); - CDItemSetSkillsTable::Instance(); - CDLevelProgressionLookupTable::Instance(); - CDLootMatrixTable::Instance(); - CDLootTableTable::Instance(); - CDMissionNPCComponentTable::Instance(); - CDMissionTasksTable::Instance(); - CDMissionsTable::Instance(); - CDObjectSkillsTable::Instance(); - CDObjectsTable::Instance(); - CDPhysicsComponentTable::Instance(); - CDRebuildComponentTable::Instance(); - CDScriptComponentTable::Instance(); - CDSkillBehaviorTable::Instance(); - CDZoneTableTable::Instance(); - CDVendorComponentTable::Instance(); - CDActivitiesTable::Instance(); - CDPackageComponentTable::Instance(); - CDProximityMonitorComponentTable::Instance(); - CDMovementAIComponentTable::Instance(); - CDBrickIDTableTable::Instance(); - CDRarityTableTable::Instance(); - CDMissionEmailTable::Instance(); - CDRewardsTable::Instance(); - CDPropertyEntranceComponentTable::Instance(); - CDPropertyTemplateTable::Instance(); - CDFeatureGatingTable::Instance(); - CDRailActivatorComponentTable::Instance(); + CDActivityRewardsTable::Instance().LoadValuesFromDatabase(); + CDActivitiesTable::Instance().LoadValuesFromDatabase(); + CDCLIENT_DONT_CACHE_TABLE(CDAnimationsTable::Instance().LoadValuesFromDatabase()); + CDBehaviorParameterTable::Instance().LoadValuesFromDatabase(); + CDBehaviorTemplateTable::Instance().LoadValuesFromDatabase(); + CDBrickIDTableTable::Instance().LoadValuesFromDatabase(); + CDComponentsRegistryTable::Instance().LoadValuesFromDatabase(); + CDCurrencyTableTable::Instance().LoadValuesFromDatabase(); + CDDestructibleComponentTable::Instance().LoadValuesFromDatabase(); + CDEmoteTableTable::Instance().LoadValuesFromDatabase(); + CDFeatureGatingTable::Instance().LoadValuesFromDatabase(); + CDInventoryComponentTable::Instance().LoadValuesFromDatabase(); + CDCLIENT_DONT_CACHE_TABLE(CDItemComponentTable::Instance().LoadValuesFromDatabase()); + CDItemSetSkillsTable::Instance().LoadValuesFromDatabase(); + CDItemSetsTable::Instance().LoadValuesFromDatabase(); + CDLevelProgressionLookupTable::Instance().LoadValuesFromDatabase(); + CDLootMatrixTable::Instance().LoadValuesFromDatabase(); + CDLootTableTable::Instance().LoadValuesFromDatabase(); + CDMissionEmailTable::Instance().LoadValuesFromDatabase(); + CDMissionNPCComponentTable::Instance().LoadValuesFromDatabase(); + CDMissionTasksTable::Instance().LoadValuesFromDatabase(); + CDMissionsTable::Instance().LoadValuesFromDatabase(); + CDMovementAIComponentTable::Instance().LoadValuesFromDatabase(); + CDObjectSkillsTable::Instance().LoadValuesFromDatabase(); + CDCLIENT_DONT_CACHE_TABLE(CDObjectsTable::Instance().LoadValuesFromDatabase()); + CDPhysicsComponentTable::Instance().LoadValuesFromDatabase(); + CDPackageComponentTable::Instance().LoadValuesFromDatabase(); + CDProximityMonitorComponentTable::Instance().LoadValuesFromDatabase(); + CDPropertyEntranceComponentTable::Instance().LoadValuesFromDatabase(); + CDPropertyTemplateTable::Instance().LoadValuesFromDatabase(); + CDRailActivatorComponentTable::Instance().LoadValuesFromDatabase(); + CDRarityTableTable::Instance().LoadValuesFromDatabase(); + CDRebuildComponentTable::Instance().LoadValuesFromDatabase(); + CDRewardsTable::Instance().LoadValuesFromDatabase(); + CDScriptComponentTable::Instance().LoadValuesFromDatabase(); + CDSkillBehaviorTable::Instance().LoadValuesFromDatabase(); + CDVendorComponentTable::Instance().LoadValuesFromDatabase(); + CDZoneTableTable::Instance().LoadValuesFromDatabase(); } diff --git a/dDatabase/Tables/CDActivitiesTable.cpp b/dDatabase/Tables/CDActivitiesTable.cpp index e1660d66..c967f724 100644 --- a/dDatabase/Tables/CDActivitiesTable.cpp +++ b/dDatabase/Tables/CDActivitiesTable.cpp @@ -1,7 +1,6 @@ #include "CDActivitiesTable.h" -CDActivitiesTable::CDActivitiesTable(void) { - +void CDActivitiesTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM Activities"); @@ -55,8 +54,3 @@ std::vector CDActivitiesTable::Query(std::function CDActivitiesTable::GetEntries(void) const { - return this->entries; -} - diff --git a/dDatabase/Tables/CDActivitiesTable.h b/dDatabase/Tables/CDActivitiesTable.h index 4b60afbd..2e39d595 100644 --- a/dDatabase/Tables/CDActivitiesTable.h +++ b/dDatabase/Tables/CDActivitiesTable.h @@ -30,9 +30,10 @@ private: std::vector entries; public: - CDActivitiesTable(); + void LoadValuesFromDatabase(); + // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries() const { return this->entries; } }; diff --git a/dDatabase/Tables/CDActivityRewardsTable.cpp b/dDatabase/Tables/CDActivityRewardsTable.cpp index 65ef1101..a2434d19 100644 --- a/dDatabase/Tables/CDActivityRewardsTable.cpp +++ b/dDatabase/Tables/CDActivityRewardsTable.cpp @@ -1,6 +1,6 @@ #include "CDActivityRewardsTable.h" -CDActivityRewardsTable::CDActivityRewardsTable(void) { +void CDActivityRewardsTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -43,8 +43,3 @@ std::vector CDActivityRewardsTable::Query(std::function CDActivityRewardsTable::GetEntries(void) const { - return this->entries; -} - diff --git a/dDatabase/Tables/CDActivityRewardsTable.h b/dDatabase/Tables/CDActivityRewardsTable.h index b5503fb6..a177a3c0 100644 --- a/dDatabase/Tables/CDActivityRewardsTable.h +++ b/dDatabase/Tables/CDActivityRewardsTable.h @@ -18,10 +18,10 @@ private: std::vector entries; public: - CDActivityRewardsTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + std::vector GetEntries() const; }; diff --git a/dDatabase/Tables/CDAnimationsTable.cpp b/dDatabase/Tables/CDAnimationsTable.cpp index 76ce0e5a..7244ddee 100644 --- a/dDatabase/Tables/CDAnimationsTable.cpp +++ b/dDatabase/Tables/CDAnimationsTable.cpp @@ -2,6 +2,35 @@ #include "GeneralUtils.h" #include "Game.h" + +void CDAnimationsTable::LoadValuesFromDatabase() { + auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM Animations"); + while (!tableData.eof()) { + std::string animation_type = tableData.getStringField("animation_type", ""); + DluAssert(!animation_type.empty()); + AnimationGroupID animationGroupID = tableData.getIntField("animationGroupID", -1); + DluAssert(animationGroupID != -1); + + CDAnimation entry; + entry.animation_name = tableData.getStringField("animation_name", ""); + entry.chance_to_play = tableData.getFloatField("chance_to_play", 1.0f); + UNUSED_COLUMN(entry.min_loops = tableData.getIntField("min_loops", 0);) + UNUSED_COLUMN(entry.max_loops = tableData.getIntField("max_loops", 0);) + entry.animation_length = tableData.getFloatField("animation_length", 0.0f); + UNUSED_COLUMN(entry.hideEquip = tableData.getIntField("hideEquip", 0) == 1;) + UNUSED_COLUMN(entry.ignoreUpperBody = tableData.getIntField("ignoreUpperBody", 0) == 1;) + UNUSED_COLUMN(entry.restartable = tableData.getIntField("restartable", 0) == 1;) + UNUSED_COLUMN(entry.face_animation_name = tableData.getStringField("face_animation_name", "");) + UNUSED_COLUMN(entry.priority = tableData.getFloatField("priority", 0.0f);) + UNUSED_COLUMN(entry.blendTime = tableData.getFloatField("blendTime", 0.0f);) + + this->animations[CDAnimationKey(animation_type, animationGroupID)].push_back(entry); + tableData.nextRow(); + } + + tableData.finalize(); +} + bool CDAnimationsTable::CacheData(CppSQLite3Statement& queryToCache) { auto tableData = queryToCache.execQuery(); // If we received a bad lookup, cache it anyways so we do not run the query again. diff --git a/dDatabase/Tables/CDAnimationsTable.h b/dDatabase/Tables/CDAnimationsTable.h index 65f54d98..494d5cde 100644 --- a/dDatabase/Tables/CDAnimationsTable.h +++ b/dDatabase/Tables/CDAnimationsTable.h @@ -27,6 +27,7 @@ class CDAnimationsTable : public CDTable { typedef std::string AnimationID; typedef std::pair CDAnimationKey; public: + void LoadValuesFromDatabase(); /** * Given an animationType and the previousAnimationName played, return the next animationType to play. * If there are more than 1 animationTypes that can be played, one is selected at random but also does not allow diff --git a/dDatabase/Tables/CDBehaviorParameterTable.cpp b/dDatabase/Tables/CDBehaviorParameterTable.cpp index 8181245b..708bec4c 100644 --- a/dDatabase/Tables/CDBehaviorParameterTable.cpp +++ b/dDatabase/Tables/CDBehaviorParameterTable.cpp @@ -1,15 +1,15 @@ #include "CDBehaviorParameterTable.h" #include "GeneralUtils.h" -uint64_t GetHash(const uint32_t behaviorID, const uint32_t parameterID) { - uint64_t hash = behaviorID; - hash <<= 31U; - hash |= parameterID; +uint64_t GetKey(const uint32_t behaviorID, const uint32_t parameterID) { + uint64_t key = behaviorID; + key <<= 31U; + key |= parameterID; - return hash; + return key; } -CDBehaviorParameterTable::CDBehaviorParameterTable() { +void CDBehaviorParameterTable::LoadValuesFromDatabase() { auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM BehaviorParameter"); while (!tableData.eof()) { uint32_t behaviorID = tableData.getIntField("behaviorID", -1); @@ -21,7 +21,7 @@ CDBehaviorParameterTable::CDBehaviorParameterTable() { } else { parameterId = m_ParametersList.insert(std::make_pair(candidateStringToAdd, m_ParametersList.size())).first->second; } - uint64_t hash = GetHash(behaviorID, parameterId); + uint64_t hash = GetKey(behaviorID, parameterId); float value = tableData.getFloatField("value", -1.0f); m_Entries.insert(std::make_pair(hash, value)); @@ -34,7 +34,7 @@ CDBehaviorParameterTable::CDBehaviorParameterTable() { float CDBehaviorParameterTable::GetValue(const uint32_t behaviorID, const std::string& name, const float defaultValue) { auto parameterID = this->m_ParametersList.find(name); if (parameterID == this->m_ParametersList.end()) return defaultValue; - auto hash = GetHash(behaviorID, parameterID->second); + auto hash = GetKey(behaviorID, parameterID->second); // Search for specific parameter auto it = m_Entries.find(hash); @@ -45,7 +45,7 @@ std::map CDBehaviorParameterTable::GetParametersByBehaviorID uint64_t hashBase = behaviorID; std::map returnInfo; for (auto& [parameterString, parameterId] : m_ParametersList) { - uint64_t hash = GetHash(hashBase, parameterId); + uint64_t hash = GetKey(hashBase, parameterId); auto infoCandidate = m_Entries.find(hash); if (infoCandidate != m_Entries.end()) { returnInfo.insert(std::make_pair(parameterString, infoCandidate->second)); diff --git a/dDatabase/Tables/CDBehaviorParameterTable.h b/dDatabase/Tables/CDBehaviorParameterTable.h index 249caacf..3daa3aa3 100644 --- a/dDatabase/Tables/CDBehaviorParameterTable.h +++ b/dDatabase/Tables/CDBehaviorParameterTable.h @@ -12,7 +12,7 @@ private: std::unordered_map m_Entries; std::unordered_map m_ParametersList; public: - CDBehaviorParameterTable(); + void LoadValuesFromDatabase(); float GetValue(const uint32_t behaviorID, const std::string& name, const float defaultValue = 0); diff --git a/dDatabase/Tables/CDBehaviorTemplateTable.cpp b/dDatabase/Tables/CDBehaviorTemplateTable.cpp index 08bc86d1..c343ef85 100644 --- a/dDatabase/Tables/CDBehaviorTemplateTable.cpp +++ b/dDatabase/Tables/CDBehaviorTemplateTable.cpp @@ -1,6 +1,6 @@ #include "CDBehaviorTemplateTable.h" -CDBehaviorTemplateTable::CDBehaviorTemplateTable(void) { +void CDBehaviorTemplateTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -48,7 +48,7 @@ std::vector CDBehaviorTemplateTable::Query(std::function CDBehaviorTemplateTable::GetEntries(void) const { +const std::vector& CDBehaviorTemplateTable::GetEntries() const { return this->entries; } @@ -64,4 +64,3 @@ const CDBehaviorTemplate CDBehaviorTemplateTable::GetByBehaviorID(uint32_t behav return entry->second; } } - diff --git a/dDatabase/Tables/CDBehaviorTemplateTable.h b/dDatabase/Tables/CDBehaviorTemplateTable.h index f9ac9a09..49ce11f2 100644 --- a/dDatabase/Tables/CDBehaviorTemplateTable.h +++ b/dDatabase/Tables/CDBehaviorTemplateTable.h @@ -19,11 +19,12 @@ private: std::unordered_map entriesMappedByBehaviorID; std::unordered_set m_EffectHandles; public: - CDBehaviorTemplateTable(); + void LoadValuesFromDatabase(); + // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries(void) const; const CDBehaviorTemplate GetByBehaviorID(uint32_t behaviorID); }; diff --git a/dDatabase/Tables/CDBrickIDTableTable.cpp b/dDatabase/Tables/CDBrickIDTableTable.cpp index 9ad24d39..9be75f0b 100644 --- a/dDatabase/Tables/CDBrickIDTableTable.cpp +++ b/dDatabase/Tables/CDBrickIDTableTable.cpp @@ -1,6 +1,6 @@ #include "CDBrickIDTableTable.h" -CDBrickIDTableTable::CDBrickIDTableTable(void) { +void CDBrickIDTableTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -39,7 +39,7 @@ std::vector CDBrickIDTableTable::Query(std::function CDBrickIDTableTable::GetEntries(void) const { +const std::vector& CDBrickIDTableTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDBrickIDTableTable.h b/dDatabase/Tables/CDBrickIDTableTable.h index e2084caf..68c0b1b6 100644 --- a/dDatabase/Tables/CDBrickIDTableTable.h +++ b/dDatabase/Tables/CDBrickIDTableTable.h @@ -21,9 +21,9 @@ private: std::vector entries; public: - CDBrickIDTableTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDComponentsRegistryTable.cpp b/dDatabase/Tables/CDComponentsRegistryTable.cpp index 32012f6c..ac547a24 100644 --- a/dDatabase/Tables/CDComponentsRegistryTable.cpp +++ b/dDatabase/Tables/CDComponentsRegistryTable.cpp @@ -1,27 +1,37 @@ #include "CDComponentsRegistryTable.h" #include "eReplicaComponentType.h" -#define CDCLIENT_CACHE_ALL - -CDComponentsRegistryTable::CDComponentsRegistryTable(void) { - -#ifdef CDCLIENT_CACHE_ALL - // First, get the size of the table - unsigned int size = 0; - auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM ComponentsRegistry"); - while (!tableSize.eof()) { - size = tableSize.getIntField(0, 0); - - tableSize.nextRow(); - } - - tableSize.finalize(); - - // Reserve the size - //this->entries.reserve(size); - +void CDComponentsRegistryTable::LoadValuesFromDatabase() { // Now get the data auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM ComponentsRegistry"); + while (!tableData.eof()) { + CDComponentsRegistry entry; + entry.id = tableData.getIntField("id", -1); + entry.component_type = static_cast(tableData.getIntField("component_type", 0)); + entry.component_id = tableData.getIntField("component_id", -1); + + this->mappedEntries.insert_or_assign(((uint64_t)entry.component_type) << 32 | ((uint64_t)entry.id), entry.component_id); + this->mappedEntries.insert_or_assign(entry.id, 0); + + tableData.nextRow(); + } + + tableData.finalize(); +} + +int32_t CDComponentsRegistryTable::GetByIDAndType(uint32_t id, eReplicaComponentType componentType, int32_t defaultValue) { + auto exists = mappedEntries.find(id); + if (exists != mappedEntries.end()) { + auto iter = mappedEntries.find(((uint64_t)componentType) << 32 | ((uint64_t)id)); + return iter == mappedEntries.end() ? defaultValue : iter->second; + } + + // Now get the data. Get all components of this entity so we dont do a query for each component + auto query = CDClientDatabase::CreatePreppedStmt("SELECT * FROM ComponentsRegistry WHERE id = ?;"); + query.bind(1, static_cast(id)); + + auto tableData = query.execQuery(); + while (!tableData.eof()) { CDComponentsRegistry entry; entry.id = tableData.getIntField("id", -1); @@ -33,61 +43,10 @@ CDComponentsRegistryTable::CDComponentsRegistryTable(void) { tableData.nextRow(); } - tableData.finalize(); -#endif -} - -int32_t CDComponentsRegistryTable::GetByIDAndType(uint32_t id, eReplicaComponentType componentType, int32_t defaultValue) { - const auto& iter = this->mappedEntries.find(((uint64_t)componentType) << 32 | ((uint64_t)id)); - - if (iter == this->mappedEntries.end()) { - return defaultValue; - } - - return iter->second; - -#ifndef CDCLIENT_CACHE_ALL - // Now get the data - std::stringstream query; - - query << "SELECT * FROM ComponentsRegistry WHERE id = " << std::to_string(id); - - auto tableData = CDClientDatabase::ExecuteQuery(query.str()); - while (!tableData.eof()) { - CDComponentsRegistry entry; - entry.id = tableData.getIntField("id", -1); - entry.component_type = tableData.getIntField("component_type", -1); - entry.component_id = tableData.getIntField("component_id", -1); - - //this->entries.push_back(entry); - - //Darwin's stuff: - const auto& it = this->mappedEntries.find(entry.id); - if (it != mappedEntries.end()) { - const auto& iter = it->second.find(entry.component_type); - if (iter == it->second.end()) { - it->second.insert(std::make_pair(entry.component_type, entry.component_id)); - } - } else { - std::map map; - map.insert(std::make_pair(entry.component_type, entry.component_id)); - this->mappedEntries.insert(std::make_pair(entry.id, map)); - } - - tableData.nextRow(); - } - - tableData.finalize(); - - const auto& it2 = this->mappedEntries.find(id); - if (it2 != mappedEntries.end()) { - const auto& iter = it2->second.find(componentType); - if (iter != it2->second.end()) { - return iter->second; - } - } - - return defaultValue; -#endif + mappedEntries.insert_or_assign(id, 0); + + auto iter = this->mappedEntries.find(((uint64_t)componentType) << 32 | ((uint64_t)id)); + + return iter == this->mappedEntries.end() ? defaultValue : iter->second; } diff --git a/dDatabase/Tables/CDComponentsRegistryTable.h b/dDatabase/Tables/CDComponentsRegistryTable.h index 990072c9..fc461989 100644 --- a/dDatabase/Tables/CDComponentsRegistryTable.h +++ b/dDatabase/Tables/CDComponentsRegistryTable.h @@ -13,9 +13,9 @@ struct CDComponentsRegistry { class CDComponentsRegistryTable : public CDTable { private: - std::map mappedEntries; //id, component_type, component_id + std::unordered_map mappedEntries; //id, component_type, component_id public: - CDComponentsRegistryTable(); + void LoadValuesFromDatabase(); int32_t GetByIDAndType(uint32_t id, eReplicaComponentType componentType, int32_t defaultValue = 0); }; diff --git a/dDatabase/Tables/CDCurrencyTableTable.cpp b/dDatabase/Tables/CDCurrencyTableTable.cpp index 78a716f9..58c517f2 100644 --- a/dDatabase/Tables/CDCurrencyTableTable.cpp +++ b/dDatabase/Tables/CDCurrencyTableTable.cpp @@ -1,7 +1,7 @@ #include "CDCurrencyTableTable.h" //! Constructor -CDCurrencyTableTable::CDCurrencyTableTable(void) { +void CDCurrencyTableTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -43,7 +43,7 @@ std::vector CDCurrencyTableTable::Query(std::function CDCurrencyTableTable::GetEntries(void) const { +const std::vector& CDCurrencyTableTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDCurrencyTableTable.h b/dDatabase/Tables/CDCurrencyTableTable.h index ec700320..fd70a968 100644 --- a/dDatabase/Tables/CDCurrencyTableTable.h +++ b/dDatabase/Tables/CDCurrencyTableTable.h @@ -23,9 +23,9 @@ private: std::vector entries; public: - CDCurrencyTableTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDDestructibleComponentTable.cpp b/dDatabase/Tables/CDDestructibleComponentTable.cpp index 4bbc8242..f92aec94 100644 --- a/dDatabase/Tables/CDDestructibleComponentTable.cpp +++ b/dDatabase/Tables/CDDestructibleComponentTable.cpp @@ -1,8 +1,6 @@ #include "CDDestructibleComponentTable.h" -//! Constructor -CDDestructibleComponentTable::CDDestructibleComponentTable(void) { - +void CDDestructibleComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM DestructibleComponent"); @@ -52,7 +50,7 @@ std::vector CDDestructibleComponentTable::Query(std::fu return data; } -std::vector CDDestructibleComponentTable::GetEntries(void) const { +const std::vector& CDDestructibleComponentTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDDestructibleComponentTable.h b/dDatabase/Tables/CDDestructibleComponentTable.h index e42cf486..fb6ee4cd 100644 --- a/dDatabase/Tables/CDDestructibleComponentTable.h +++ b/dDatabase/Tables/CDDestructibleComponentTable.h @@ -25,9 +25,9 @@ private: std::vector entries; public: - CDDestructibleComponentTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries(void) const; }; diff --git a/dDatabase/Tables/CDEmoteTable.cpp b/dDatabase/Tables/CDEmoteTable.cpp index aacbdd55..77aa226c 100644 --- a/dDatabase/Tables/CDEmoteTable.cpp +++ b/dDatabase/Tables/CDEmoteTable.cpp @@ -1,40 +1,26 @@ #include "CDEmoteTable.h" -//! Constructor -CDEmoteTableTable::CDEmoteTableTable(void) { +void CDEmoteTableTable::LoadValuesFromDatabase() { auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM Emotes"); while (!tableData.eof()) { - CDEmoteTable* entry = new CDEmoteTable(); - entry->ID = tableData.getIntField("id", -1); - entry->animationName = tableData.getStringField("animationName", ""); - entry->iconFilename = tableData.getStringField("iconFilename", ""); - entry->channel = tableData.getIntField("channel", -1); - entry->locked = tableData.getIntField("locked", -1) != 0; - entry->localize = tableData.getIntField("localize", -1) != 0; - entry->locState = tableData.getIntField("locStatus", -1); - entry->gateVersion = tableData.getStringField("gate_version", ""); + CDEmoteTable entry; + entry.ID = tableData.getIntField("id", -1); + entry.animationName = tableData.getStringField("animationName", ""); + entry.iconFilename = tableData.getStringField("iconFilename", ""); + entry.channel = tableData.getIntField("channel", -1); + entry.locked = tableData.getIntField("locked", -1) != 0; + entry.localize = tableData.getIntField("localize", -1) != 0; + entry.locState = tableData.getIntField("locStatus", -1); + entry.gateVersion = tableData.getStringField("gate_version", ""); - entries.insert(std::make_pair(entry->ID, entry)); + entries.insert(std::make_pair(entry.ID, entry)); tableData.nextRow(); } tableData.finalize(); } -//! Destructor -CDEmoteTableTable::~CDEmoteTableTable(void) { - for (auto e : entries) { - if (e.second) delete e.second; - } - - entries.clear(); -} - CDEmoteTable* CDEmoteTableTable::GetEmote(int id) { - for (auto e : entries) { - if (e.first == id) return e.second; - } - - return nullptr; + auto itr = entries.find(id); + return itr != entries.end() ? &itr->second : nullptr; } - diff --git a/dDatabase/Tables/CDEmoteTable.h b/dDatabase/Tables/CDEmoteTable.h index be40c86f..a49d1c45 100644 --- a/dDatabase/Tables/CDEmoteTable.h +++ b/dDatabase/Tables/CDEmoteTable.h @@ -28,11 +28,10 @@ struct CDEmoteTable { class CDEmoteTableTable : public CDTable { private: - std::map entries; + std::map entries; public: - CDEmoteTableTable(); - ~CDEmoteTableTable(); + void LoadValuesFromDatabase(); // Returns an emote by ID CDEmoteTable* GetEmote(int id); }; diff --git a/dDatabase/Tables/CDFeatureGatingTable.cpp b/dDatabase/Tables/CDFeatureGatingTable.cpp index 05fe69bf..5013dd13 100644 --- a/dDatabase/Tables/CDFeatureGatingTable.cpp +++ b/dDatabase/Tables/CDFeatureGatingTable.cpp @@ -1,7 +1,6 @@ #include "CDFeatureGatingTable.h" -//! Constructor -CDFeatureGatingTable::CDFeatureGatingTable(void) { +void CDFeatureGatingTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -53,7 +52,7 @@ bool CDFeatureGatingTable::FeatureUnlocked(const std::string& feature) const { return false; } -std::vector CDFeatureGatingTable::GetEntries(void) const { +const std::vector& CDFeatureGatingTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDFeatureGatingTable.h b/dDatabase/Tables/CDFeatureGatingTable.h index 7f536db5..9a978218 100644 --- a/dDatabase/Tables/CDFeatureGatingTable.h +++ b/dDatabase/Tables/CDFeatureGatingTable.h @@ -16,11 +16,12 @@ private: std::vector entries; public: - CDFeatureGatingTable(); + void LoadValuesFromDatabase(); + // Queries the table with a custom "where" clause std::vector Query(std::function predicate); bool FeatureUnlocked(const std::string& feature) const; - std::vector GetEntries(void) const; + const std::vector& GetEntries(void) const; }; diff --git a/dDatabase/Tables/CDInventoryComponentTable.cpp b/dDatabase/Tables/CDInventoryComponentTable.cpp index 2dc375ab..ffc8fee6 100644 --- a/dDatabase/Tables/CDInventoryComponentTable.cpp +++ b/dDatabase/Tables/CDInventoryComponentTable.cpp @@ -1,7 +1,6 @@ #include "CDInventoryComponentTable.h" -//! Constructor -CDInventoryComponentTable::CDInventoryComponentTable(void) { +void CDInventoryComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -42,7 +41,7 @@ std::vector CDInventoryComponentTable::Query(std::function return data; } -std::vector CDInventoryComponentTable::GetEntries(void) const { +const std::vector& CDInventoryComponentTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDInventoryComponentTable.h b/dDatabase/Tables/CDInventoryComponentTable.h index cbc04d99..26d47ffe 100644 --- a/dDatabase/Tables/CDInventoryComponentTable.h +++ b/dDatabase/Tables/CDInventoryComponentTable.h @@ -15,9 +15,9 @@ private: std::vector entries; public: - CDInventoryComponentTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDItemComponentTable.cpp b/dDatabase/Tables/CDItemComponentTable.cpp index 54afc417..5d6722f9 100644 --- a/dDatabase/Tables/CDItemComponentTable.cpp +++ b/dDatabase/Tables/CDItemComponentTable.cpp @@ -3,11 +3,7 @@ CDItemComponent CDItemComponentTable::Default = {}; -//! Constructor -CDItemComponentTable::CDItemComponentTable(void) { - Default = CDItemComponent(); - -#ifdef CDCLIENT_CACHE_ALL +void CDItemComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM ItemComponent"); @@ -55,13 +51,13 @@ CDItemComponentTable::CDItemComponentTable(void) { entry.currencyLOT = tableData.getIntField("currencyLOT", -1); entry.altCurrencyCost = tableData.getIntField("altCurrencyCost", -1); entry.subItems = tableData.getStringField("subItems", ""); - entry.audioEventUse = tableData.getStringField("audioEventUse", ""); + UNUSED_COLUMN(entry.audioEventUse = tableData.getStringField("audioEventUse", "")); entry.noEquipAnimation = tableData.getIntField("noEquipAnimation", -1) == 1 ? true : false; entry.commendationLOT = tableData.getIntField("commendationLOT", -1); entry.commendationCost = tableData.getIntField("commendationCost", -1); - entry.audioEquipMetaEventSet = tableData.getStringField("audioEquipMetaEventSet", ""); + UNUSED_COLUMN(entry.audioEquipMetaEventSet = tableData.getStringField("audioEquipMetaEventSet", "")); entry.currencyCosts = tableData.getStringField("currencyCosts", ""); - entry.ingredientInfo = tableData.getStringField("ingredientInfo", ""); + UNUSED_COLUMN(entry.ingredientInfo = tableData.getStringField("ingredientInfo", "")); entry.locStatus = tableData.getIntField("locStatus", -1); entry.forgeType = tableData.getIntField("forgeType", -1); entry.SellMultiplier = tableData.getFloatField("SellMultiplier", -1.0f); @@ -71,7 +67,6 @@ CDItemComponentTable::CDItemComponentTable(void) { } tableData.finalize(); -#endif } const CDItemComponent& CDItemComponentTable::GetItemComponentByID(unsigned int skillID) { @@ -80,12 +75,10 @@ const CDItemComponent& CDItemComponentTable::GetItemComponentByID(unsigned int s return it->second; } -#ifndef CDCLIENT_CACHE_ALL - std::stringstream query; + auto query = CDClientDatabase::CreatePreppedStmt("SELECT * FROM ItemComponent WHERE id = ?;"); + query.bind(1, static_cast(skillID)); - query << "SELECT * FROM ItemComponent WHERE id = " << std::to_string(skillID); - - auto tableData = CDClientDatabase::ExecuteQuery(query.str()); + auto tableData = query.execQuery(); if (tableData.eof()) { entries.insert(std::make_pair(skillID, Default)); return Default; @@ -144,7 +137,6 @@ const CDItemComponent& CDItemComponentTable::GetItemComponentByID(unsigned int s if (it2 != this->entries.end()) { return it2->second; } -#endif return Default; } diff --git a/dDatabase/Tables/CDItemComponentTable.h b/dDatabase/Tables/CDItemComponentTable.h index 11c34dd6..685e5acd 100644 --- a/dDatabase/Tables/CDItemComponentTable.h +++ b/dDatabase/Tables/CDItemComponentTable.h @@ -54,7 +54,7 @@ private: std::map entries; public: - CDItemComponentTable(); + void LoadValuesFromDatabase(); static std::map ParseCraftingCurrencies(const CDItemComponent& itemComponent); // Gets an entry by ID diff --git a/dDatabase/Tables/CDItemSetSkillsTable.cpp b/dDatabase/Tables/CDItemSetSkillsTable.cpp index f6b412ff..6fb1689e 100644 --- a/dDatabase/Tables/CDItemSetSkillsTable.cpp +++ b/dDatabase/Tables/CDItemSetSkillsTable.cpp @@ -1,7 +1,6 @@ #include "CDItemSetSkillsTable.h" -//! Constructor -CDItemSetSkillsTable::CDItemSetSkillsTable(void) { +void CDItemSetSkillsTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -41,7 +40,7 @@ std::vector CDItemSetSkillsTable::Query(std::function CDItemSetSkillsTable::GetEntries(void) const { +const std::vector& CDItemSetSkillsTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDItemSetSkillsTable.h b/dDatabase/Tables/CDItemSetSkillsTable.h index 8328c66b..07321a7f 100644 --- a/dDatabase/Tables/CDItemSetSkillsTable.h +++ b/dDatabase/Tables/CDItemSetSkillsTable.h @@ -14,11 +14,11 @@ private: std::vector entries; public: - CDItemSetSkillsTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; std::vector GetBySkillID(unsigned int SkillSetID); }; diff --git a/dDatabase/Tables/CDItemSetsTable.cpp b/dDatabase/Tables/CDItemSetsTable.cpp index 0632ef13..de70e180 100644 --- a/dDatabase/Tables/CDItemSetsTable.cpp +++ b/dDatabase/Tables/CDItemSetsTable.cpp @@ -1,7 +1,6 @@ #include "CDItemSetsTable.h" -//! Constructor -CDItemSetsTable::CDItemSetsTable(void) { +void CDItemSetsTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -53,7 +52,7 @@ std::vector CDItemSetsTable::Query(std::function p return data; } -std::vector CDItemSetsTable::GetEntries(void) const { +const std::vector& CDItemSetsTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDItemSetsTable.h b/dDatabase/Tables/CDItemSetsTable.h index 6756e7fa..a3a738b1 100644 --- a/dDatabase/Tables/CDItemSetsTable.h +++ b/dDatabase/Tables/CDItemSetsTable.h @@ -26,10 +26,10 @@ private: std::vector entries; public: - CDItemSetsTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries(void) const; }; diff --git a/dDatabase/Tables/CDLevelProgressionLookupTable.cpp b/dDatabase/Tables/CDLevelProgressionLookupTable.cpp index 47a8fc0e..d0a6ca93 100644 --- a/dDatabase/Tables/CDLevelProgressionLookupTable.cpp +++ b/dDatabase/Tables/CDLevelProgressionLookupTable.cpp @@ -1,7 +1,6 @@ #include "CDLevelProgressionLookupTable.h" -//! Constructor -CDLevelProgressionLookupTable::CDLevelProgressionLookupTable(void) { +void CDLevelProgressionLookupTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -32,7 +31,6 @@ CDLevelProgressionLookupTable::CDLevelProgressionLookupTable(void) { tableData.finalize(); } -//! Queries the table with a custom "where" clause std::vector CDLevelProgressionLookupTable::Query(std::function predicate) { std::vector data = cpplinq::from(this->entries) @@ -42,8 +40,7 @@ std::vector CDLevelProgressionLookupTable::Query(std:: return data; } -//! Gets all the entries in the table -std::vector CDLevelProgressionLookupTable::GetEntries(void) const { +const std::vector& CDLevelProgressionLookupTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDLevelProgressionLookupTable.h b/dDatabase/Tables/CDLevelProgressionLookupTable.h index 070b2e0c..6b68bd0d 100644 --- a/dDatabase/Tables/CDLevelProgressionLookupTable.h +++ b/dDatabase/Tables/CDLevelProgressionLookupTable.h @@ -14,10 +14,10 @@ private: std::vector entries; public: - CDLevelProgressionLookupTable(); + void LoadValuesFromDatabase(); + // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - // Gets all the entries in the table - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDLootMatrixTable.cpp b/dDatabase/Tables/CDLootMatrixTable.cpp index 8f25e8a3..27c01b30 100644 --- a/dDatabase/Tables/CDLootMatrixTable.cpp +++ b/dDatabase/Tables/CDLootMatrixTable.cpp @@ -1,7 +1,6 @@ #include "CDLootMatrixTable.h" -//! Constructor -CDLootMatrixTable::CDLootMatrixTable(void) { +void CDLootMatrixTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -47,7 +46,7 @@ std::vector CDLootMatrixTable::Query(std::function& CDLootMatrixTable::GetEntries(void) const { +const std::vector& CDLootMatrixTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDLootMatrixTable.h b/dDatabase/Tables/CDLootMatrixTable.h index c6035841..6ea012cb 100644 --- a/dDatabase/Tables/CDLootMatrixTable.h +++ b/dDatabase/Tables/CDLootMatrixTable.h @@ -20,10 +20,10 @@ private: std::vector entries; public: - CDLootMatrixTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - const std::vector& GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDLootTableTable.cpp b/dDatabase/Tables/CDLootTableTable.cpp index 0a46784a..17dfd641 100644 --- a/dDatabase/Tables/CDLootTableTable.cpp +++ b/dDatabase/Tables/CDLootTableTable.cpp @@ -1,7 +1,6 @@ #include "CDLootTableTable.h" -//! Constructor -CDLootTableTable::CDLootTableTable(void) { +void CDLootTableTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -46,7 +45,7 @@ std::vector CDLootTableTable::Query(std::function& CDLootTableTable::GetEntries(void) const { +const std::vector& CDLootTableTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDLootTableTable.h b/dDatabase/Tables/CDLootTableTable.h index ba6f207e..baa300b0 100644 --- a/dDatabase/Tables/CDLootTableTable.h +++ b/dDatabase/Tables/CDLootTableTable.h @@ -16,10 +16,10 @@ private: std::vector entries; public: - CDLootTableTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - const std::vector& GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDMissionEmailTable.cpp b/dDatabase/Tables/CDMissionEmailTable.cpp index ed855d8a..207d3815 100644 --- a/dDatabase/Tables/CDMissionEmailTable.cpp +++ b/dDatabase/Tables/CDMissionEmailTable.cpp @@ -1,7 +1,6 @@ #include "CDMissionEmailTable.h" -//! Constructor -CDMissionEmailTable::CDMissionEmailTable(void) { +void CDMissionEmailTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -48,7 +47,7 @@ std::vector CDMissionEmailTable::Query(std::function CDMissionEmailTable::GetEntries(void) const { +const std::vector& CDMissionEmailTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDMissionEmailTable.h b/dDatabase/Tables/CDMissionEmailTable.h index db2310d4..954da78e 100644 --- a/dDatabase/Tables/CDMissionEmailTable.h +++ b/dDatabase/Tables/CDMissionEmailTable.h @@ -20,9 +20,9 @@ private: std::vector entries; public: - CDMissionEmailTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDMissionNPCComponentTable.cpp b/dDatabase/Tables/CDMissionNPCComponentTable.cpp index 5672ed67..59ea40b7 100644 --- a/dDatabase/Tables/CDMissionNPCComponentTable.cpp +++ b/dDatabase/Tables/CDMissionNPCComponentTable.cpp @@ -1,7 +1,6 @@ #include "CDMissionNPCComponentTable.h" -//! Constructor -CDMissionNPCComponentTable::CDMissionNPCComponentTable(void) { +void CDMissionNPCComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -45,7 +44,7 @@ std::vector CDMissionNPCComponentTable::Query(std::functi } //! Gets all the entries in the table -std::vector CDMissionNPCComponentTable::GetEntries(void) const { +const std::vector& CDMissionNPCComponentTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDMissionNPCComponentTable.h b/dDatabase/Tables/CDMissionNPCComponentTable.h index a7aeb145..2b2b3303 100644 --- a/dDatabase/Tables/CDMissionNPCComponentTable.h +++ b/dDatabase/Tables/CDMissionNPCComponentTable.h @@ -16,12 +16,12 @@ private: std::vector entries; public: - CDMissionNPCComponentTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); // Gets all the entries in the table - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDMissionTasksTable.cpp b/dDatabase/Tables/CDMissionTasksTable.cpp index f32dca1b..9795ea8f 100644 --- a/dDatabase/Tables/CDMissionTasksTable.cpp +++ b/dDatabase/Tables/CDMissionTasksTable.cpp @@ -1,7 +1,6 @@ #include "CDMissionTasksTable.h" -//! Constructor -CDMissionTasksTable::CDMissionTasksTable(void) { +void CDMissionTasksTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -56,16 +55,14 @@ std::vector CDMissionTasksTable::GetByMissionID(uint32_t missio for (auto& entry : this->entries) { if (entry.id == missionID) { - CDMissionTasks* task = const_cast(&entry); - - tasks.push_back(task); + tasks.push_back(&entry); } } return tasks; } -const std::vector& CDMissionTasksTable::GetEntries(void) const { +const std::vector& CDMissionTasksTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDMissionTasksTable.h b/dDatabase/Tables/CDMissionTasksTable.h index fa213faf..0b169db8 100644 --- a/dDatabase/Tables/CDMissionTasksTable.h +++ b/dDatabase/Tables/CDMissionTasksTable.h @@ -24,12 +24,12 @@ private: std::vector entries; public: - CDMissionTasksTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); std::vector GetByMissionID(uint32_t missionID); - const std::vector& GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDMissionsTable.cpp b/dDatabase/Tables/CDMissionsTable.cpp index d4ee40ae..37f0c81c 100644 --- a/dDatabase/Tables/CDMissionsTable.cpp +++ b/dDatabase/Tables/CDMissionsTable.cpp @@ -2,8 +2,7 @@ CDMissions CDMissionsTable::Default = {}; -//! Constructor -CDMissionsTable::CDMissionsTable(void) { +void CDMissionsTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; diff --git a/dDatabase/Tables/CDMissionsTable.h b/dDatabase/Tables/CDMissionsTable.h index e6a44b02..c8ddc2a3 100644 --- a/dDatabase/Tables/CDMissionsTable.h +++ b/dDatabase/Tables/CDMissionsTable.h @@ -65,12 +65,12 @@ private: std::vector entries; public: - CDMissionsTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); // Gets all the entries in the table - const std::vector& GetEntries(void) const; + const std::vector& GetEntries() const; const CDMissions* GetPtrByMissionID(uint32_t missionID) const; diff --git a/dDatabase/Tables/CDMovementAIComponentTable.cpp b/dDatabase/Tables/CDMovementAIComponentTable.cpp index 3b9cc4f4..35b46416 100644 --- a/dDatabase/Tables/CDMovementAIComponentTable.cpp +++ b/dDatabase/Tables/CDMovementAIComponentTable.cpp @@ -1,7 +1,6 @@ #include "CDMovementAIComponentTable.h" -//! Constructor -CDMovementAIComponentTable::CDMovementAIComponentTable(void) { +void CDMovementAIComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -37,7 +36,6 @@ CDMovementAIComponentTable::CDMovementAIComponentTable(void) { tableData.finalize(); } -//! Queries the table with a custom "where" clause std::vector CDMovementAIComponentTable::Query(std::function predicate) { std::vector data = cpplinq::from(this->entries) @@ -47,8 +45,7 @@ std::vector CDMovementAIComponentTable::Query(std::functi return data; } -//! Gets all the entries in the table -std::vector CDMovementAIComponentTable::GetEntries(void) const { +const std::vector& CDMovementAIComponentTable::GetEntries(void) const { return this->entries; } diff --git a/dDatabase/Tables/CDMovementAIComponentTable.h b/dDatabase/Tables/CDMovementAIComponentTable.h index 84896e2c..b40694bd 100644 --- a/dDatabase/Tables/CDMovementAIComponentTable.h +++ b/dDatabase/Tables/CDMovementAIComponentTable.h @@ -19,10 +19,10 @@ private: std::vector entries; public: - CDMovementAIComponentTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); // Gets all the entries in the table - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDObjectSkillsTable.cpp b/dDatabase/Tables/CDObjectSkillsTable.cpp index 2e8b3fb2..2439622c 100644 --- a/dDatabase/Tables/CDObjectSkillsTable.cpp +++ b/dDatabase/Tables/CDObjectSkillsTable.cpp @@ -1,7 +1,6 @@ #include "CDObjectSkillsTable.h" -//! Constructor -CDObjectSkillsTable::CDObjectSkillsTable(void) { +void CDObjectSkillsTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -33,7 +32,6 @@ CDObjectSkillsTable::CDObjectSkillsTable(void) { tableData.finalize(); } -//! Queries the table with a custom "where" clause std::vector CDObjectSkillsTable::Query(std::function predicate) { std::vector data = cpplinq::from(this->entries) @@ -43,7 +41,6 @@ std::vector CDObjectSkillsTable::Query(std::function CDObjectSkillsTable::GetEntries(void) const { +const std::vector& CDObjectSkillsTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDObjectSkillsTable.h b/dDatabase/Tables/CDObjectSkillsTable.h index 4ceaa447..bd9929e2 100644 --- a/dDatabase/Tables/CDObjectSkillsTable.h +++ b/dDatabase/Tables/CDObjectSkillsTable.h @@ -15,12 +15,12 @@ private: std::vector entries; public: - CDObjectSkillsTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); // Gets all the entries in the table - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDObjectsTable.cpp b/dDatabase/Tables/CDObjectsTable.cpp index c68c3e6a..d3094b68 100644 --- a/dDatabase/Tables/CDObjectsTable.cpp +++ b/dDatabase/Tables/CDObjectsTable.cpp @@ -1,8 +1,6 @@ #include "CDObjectsTable.h" -//! Constructor -CDObjectsTable::CDObjectsTable(void) { -#ifdef CDCLIENT_CACHE_ALL +void CDObjectsTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM Objects"); @@ -20,25 +18,24 @@ CDObjectsTable::CDObjectsTable(void) { CDObjects entry; entry.id = tableData.getIntField("id", -1); entry.name = tableData.getStringField("name", ""); - entry.placeable = tableData.getIntField("placeable", -1); + UNUSED_COLUMN(entry.placeable = tableData.getIntField("placeable", -1);) entry.type = tableData.getStringField("type", ""); - entry.description = tableData.getStringField("description", ""); - entry.localize = tableData.getIntField("localize", -1); - entry.npcTemplateID = tableData.getIntField("npcTemplateID", -1); - entry.displayName = tableData.getStringField("displayName", ""); + UNUSED_COLUMN(entry.description = tableData.getStringField("description", "");) + UNUSED_COLUMN(entry.localize = tableData.getIntField("localize", -1);) + UNUSED_COLUMN(entry.npcTemplateID = tableData.getIntField("npcTemplateID", -1);) + UNUSED_COLUMN(entry.displayName = tableData.getStringField("displayName", "");) entry.interactionDistance = tableData.getFloatField("interactionDistance", -1.0f); - entry.nametag = tableData.getIntField("nametag", -1); - entry._internalNotes = tableData.getStringField("_internalNotes", ""); - entry.locStatus = tableData.getIntField("locStatus", -1); - entry.gate_version = tableData.getStringField("gate_version", ""); - entry.HQ_valid = tableData.getIntField("HQ_valid", -1); + UNUSED_COLUMN(entry.nametag = tableData.getIntField("nametag", -1);) + UNUSED_COLUMN(entry._internalNotes = tableData.getStringField("_internalNotes", "");) + UNUSED_COLUMN(entry.locStatus = tableData.getIntField("locStatus", -1);) + UNUSED_COLUMN(entry.gate_version = tableData.getStringField("gate_version", "");) + UNUSED_COLUMN(entry.HQ_valid = tableData.getIntField("HQ_valid", -1);) this->entries.insert(std::make_pair(entry.id, entry)); tableData.nextRow(); } tableData.finalize(); -#endif m_default.id = 0; } @@ -49,12 +46,10 @@ const CDObjects& CDObjectsTable::GetByID(unsigned int LOT) { return it->second; } -#ifndef CDCLIENT_CACHE_ALL - std::stringstream query; + auto query = CDClientDatabase::CreatePreppedStmt("SELECT * FROM Objects WHERE id = ?;"); + query.bind(1, static_cast(LOT)); - query << "SELECT * FROM Objects WHERE id = " << std::to_string(LOT); - - auto tableData = CDClientDatabase::ExecuteQuery(query.str()); + auto tableData = query.execQuery(); if (tableData.eof()) { this->entries.insert(std::make_pair(LOT, m_default)); return m_default; @@ -88,7 +83,6 @@ const CDObjects& CDObjectsTable::GetByID(unsigned int LOT) { if (it2 != entries.end()) { return it2->second; } -#endif return m_default; } diff --git a/dDatabase/Tables/CDObjectsTable.h b/dDatabase/Tables/CDObjectsTable.h index 171eddef..3a776684 100644 --- a/dDatabase/Tables/CDObjectsTable.h +++ b/dDatabase/Tables/CDObjectsTable.h @@ -26,7 +26,7 @@ private: CDObjects m_default; public: - CDObjectsTable(); + void LoadValuesFromDatabase(); // Gets an entry by ID const CDObjects& GetByID(unsigned int LOT); }; diff --git a/dDatabase/Tables/CDPackageComponentTable.cpp b/dDatabase/Tables/CDPackageComponentTable.cpp index efb85eeb..8b955162 100644 --- a/dDatabase/Tables/CDPackageComponentTable.cpp +++ b/dDatabase/Tables/CDPackageComponentTable.cpp @@ -1,7 +1,6 @@ #include "CDPackageComponentTable.h" -//! Constructor -CDPackageComponentTable::CDPackageComponentTable(void) { +void CDPackageComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -43,7 +42,7 @@ std::vector CDPackageComponentTable::Query(std::function CDPackageComponentTable::GetEntries(void) const { +const std::vector& CDPackageComponentTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDPackageComponentTable.h b/dDatabase/Tables/CDPackageComponentTable.h index 6c11ab39..7ee58761 100644 --- a/dDatabase/Tables/CDPackageComponentTable.h +++ b/dDatabase/Tables/CDPackageComponentTable.h @@ -14,9 +14,9 @@ private: std::vector entries; public: - CDPackageComponentTable(void); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDPhysicsComponentTable.cpp b/dDatabase/Tables/CDPhysicsComponentTable.cpp index bb21ed7f..e17be4df 100644 --- a/dDatabase/Tables/CDPhysicsComponentTable.cpp +++ b/dDatabase/Tables/CDPhysicsComponentTable.cpp @@ -1,46 +1,35 @@ #include "CDPhysicsComponentTable.h" -CDPhysicsComponentTable::CDPhysicsComponentTable(void) { +void CDPhysicsComponentTable::LoadValuesFromDatabase() { auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM PhysicsComponent"); while (!tableData.eof()) { - CDPhysicsComponent* entry = new CDPhysicsComponent(); - entry->id = tableData.getIntField("id", -1); - entry->bStatic = tableData.getIntField("static", -1) != 0; - entry->physicsAsset = tableData.getStringField("physics_asset", ""); + CDPhysicsComponent entry; + entry.id = tableData.getIntField("id", -1); + entry.bStatic = tableData.getIntField("static", -1) != 0; + entry.physicsAsset = tableData.getStringField("physics_asset", ""); UNUSED(entry->jump = tableData.getIntField("jump", -1) != 0); UNUSED(entry->doublejump = tableData.getIntField("doublejump", -1) != 0); - entry->speed = tableData.getFloatField("speed", -1); + entry.speed = tableData.getFloatField("speed", -1); UNUSED(entry->rotSpeed = tableData.getFloatField("rotSpeed", -1)); - entry->playerHeight = tableData.getFloatField("playerHeight"); - entry->playerRadius = tableData.getFloatField("playerRadius"); - entry->pcShapeType = tableData.getIntField("pcShapeType"); - entry->collisionGroup = tableData.getIntField("collisionGroup"); + entry.playerHeight = tableData.getFloatField("playerHeight"); + entry.playerRadius = tableData.getFloatField("playerRadius"); + entry.pcShapeType = tableData.getIntField("pcShapeType"); + entry.collisionGroup = tableData.getIntField("collisionGroup"); UNUSED(entry->airSpeed = tableData.getFloatField("airSpeed")); UNUSED(entry->boundaryAsset = tableData.getStringField("boundaryAsset")); UNUSED(entry->jumpAirSpeed = tableData.getFloatField("jumpAirSpeed")); UNUSED(entry->friction = tableData.getFloatField("friction")); UNUSED(entry->gravityVolumeAsset = tableData.getStringField("gravityVolumeAsset")); - m_entries.insert(std::make_pair(entry->id, entry)); + m_entries.insert(std::make_pair(entry.id, entry)); tableData.nextRow(); } tableData.finalize(); } -CDPhysicsComponentTable::~CDPhysicsComponentTable() { - for (auto e : m_entries) { - if (e.second) delete e.second; - } - - m_entries.clear(); -} - CDPhysicsComponent* CDPhysicsComponentTable::GetByID(unsigned int componentID) { - for (auto e : m_entries) { - if (e.first == componentID) return e.second; - } - - return nullptr; + auto itr = m_entries.find(componentID); + return itr != m_entries.end() ? &itr->second : nullptr; } diff --git a/dDatabase/Tables/CDPhysicsComponentTable.h b/dDatabase/Tables/CDPhysicsComponentTable.h index e63d337d..49f3b4c3 100644 --- a/dDatabase/Tables/CDPhysicsComponentTable.h +++ b/dDatabase/Tables/CDPhysicsComponentTable.h @@ -23,12 +23,11 @@ struct CDPhysicsComponent { class CDPhysicsComponentTable : public CDTable { public: - CDPhysicsComponentTable(); - ~CDPhysicsComponentTable(); + void LoadValuesFromDatabase(); static const std::string GetTableName() { return "PhysicsComponent"; }; CDPhysicsComponent* GetByID(unsigned int componentID); private: - std::map m_entries; + std::map m_entries; }; diff --git a/dDatabase/Tables/CDPropertyEntranceComponentTable.cpp b/dDatabase/Tables/CDPropertyEntranceComponentTable.cpp index 1fead45e..c1532c86 100644 --- a/dDatabase/Tables/CDPropertyEntranceComponentTable.cpp +++ b/dDatabase/Tables/CDPropertyEntranceComponentTable.cpp @@ -1,7 +1,6 @@ - #include "CDPropertyEntranceComponentTable.h" -CDPropertyEntranceComponentTable::CDPropertyEntranceComponentTable() { +void CDPropertyEntranceComponentTable::LoadValuesFromDatabase() { // First, get the size of the table size_t size = 0; diff --git a/dDatabase/Tables/CDPropertyEntranceComponentTable.h b/dDatabase/Tables/CDPropertyEntranceComponentTable.h index 925fd1be..5c7d0965 100644 --- a/dDatabase/Tables/CDPropertyEntranceComponentTable.h +++ b/dDatabase/Tables/CDPropertyEntranceComponentTable.h @@ -11,12 +11,12 @@ struct CDPropertyEntranceComponent { class CDPropertyEntranceComponentTable : public CDTable { public: - CDPropertyEntranceComponentTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause CDPropertyEntranceComponent GetByID(uint32_t id); // Gets all the entries in the table - [[nodiscard]] std::vector GetEntries() const { return entries; } + [[nodiscard]] const std::vector& GetEntries() const { return entries; } private: std::vector entries{}; CDPropertyEntranceComponent defaultEntry{}; diff --git a/dDatabase/Tables/CDPropertyTemplateTable.cpp b/dDatabase/Tables/CDPropertyTemplateTable.cpp index 4caa6dc5..4a1d666e 100644 --- a/dDatabase/Tables/CDPropertyTemplateTable.cpp +++ b/dDatabase/Tables/CDPropertyTemplateTable.cpp @@ -1,6 +1,6 @@ #include "CDPropertyTemplateTable.h" -CDPropertyTemplateTable::CDPropertyTemplateTable() { +void CDPropertyTemplateTable::LoadValuesFromDatabase() { // First, get the size of the table size_t size = 0; diff --git a/dDatabase/Tables/CDPropertyTemplateTable.h b/dDatabase/Tables/CDPropertyTemplateTable.h index cb075dbf..7261bdf9 100644 --- a/dDatabase/Tables/CDPropertyTemplateTable.h +++ b/dDatabase/Tables/CDPropertyTemplateTable.h @@ -10,7 +10,7 @@ struct CDPropertyTemplate { class CDPropertyTemplateTable : public CDTable { public: - CDPropertyTemplateTable(); + void LoadValuesFromDatabase(); static const std::string GetTableName() { return "PropertyTemplate"; }; CDPropertyTemplate GetByMapID(uint32_t mapID); diff --git a/dDatabase/Tables/CDProximityMonitorComponentTable.cpp b/dDatabase/Tables/CDProximityMonitorComponentTable.cpp index 688de056..ae0abac8 100644 --- a/dDatabase/Tables/CDProximityMonitorComponentTable.cpp +++ b/dDatabase/Tables/CDProximityMonitorComponentTable.cpp @@ -1,7 +1,6 @@ #include "CDProximityMonitorComponentTable.h" -//! Constructor -CDProximityMonitorComponentTable::CDProximityMonitorComponentTable(void) { +void CDProximityMonitorComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -33,7 +32,6 @@ CDProximityMonitorComponentTable::CDProximityMonitorComponentTable(void) { tableData.finalize(); } -//! Queries the table with a custom "where" clause std::vector CDProximityMonitorComponentTable::Query(std::function predicate) { std::vector data = cpplinq::from(this->entries) @@ -43,8 +41,7 @@ std::vector CDProximityMonitorComponentTable::Query return data; } -//! Gets all the entries in the table -std::vector CDProximityMonitorComponentTable::GetEntries(void) const { +const std::vector& CDProximityMonitorComponentTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDProximityMonitorComponentTable.h b/dDatabase/Tables/CDProximityMonitorComponentTable.h index 38b7d43b..a50dd37e 100644 --- a/dDatabase/Tables/CDProximityMonitorComponentTable.h +++ b/dDatabase/Tables/CDProximityMonitorComponentTable.h @@ -15,9 +15,9 @@ private: std::vector entries; public: - CDProximityMonitorComponentTable(void); + void LoadValuesFromDatabase(); //! Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDRailActivatorComponent.cpp b/dDatabase/Tables/CDRailActivatorComponent.cpp index 2ff8990d..34ec5826 100644 --- a/dDatabase/Tables/CDRailActivatorComponent.cpp +++ b/dDatabase/Tables/CDRailActivatorComponent.cpp @@ -1,7 +1,7 @@ #include "CDRailActivatorComponent.h" #include "GeneralUtils.h" -CDRailActivatorComponentTable::CDRailActivatorComponentTable() { +void CDRailActivatorComponentTable::LoadValuesFromDatabase() { auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM RailActivatorComponent;"); while (!tableData.eof()) { CDRailActivatorComponent entry; @@ -52,7 +52,7 @@ CDRailActivatorComponent CDRailActivatorComponentTable::GetEntryByID(int32_t id) return {}; } -std::vector CDRailActivatorComponentTable::GetEntries() const { +const std::vector& CDRailActivatorComponentTable::GetEntries() const { return m_Entries; } diff --git a/dDatabase/Tables/CDRailActivatorComponent.h b/dDatabase/Tables/CDRailActivatorComponent.h index 03dd0525..d06b2d36 100644 --- a/dDatabase/Tables/CDRailActivatorComponent.h +++ b/dDatabase/Tables/CDRailActivatorComponent.h @@ -22,10 +22,10 @@ struct CDRailActivatorComponent { class CDRailActivatorComponentTable : public CDTable { public: - CDRailActivatorComponentTable(); + void LoadValuesFromDatabase(); static const std::string GetTableName() { return "RailActivatorComponent"; }; [[nodiscard]] CDRailActivatorComponent GetEntryByID(int32_t id) const; - [[nodiscard]] std::vector GetEntries() const; + [[nodiscard]] const std::vector& GetEntries() const; private: static std::pair EffectPairFromString(std::string& str); std::vector m_Entries{}; diff --git a/dDatabase/Tables/CDRarityTableTable.cpp b/dDatabase/Tables/CDRarityTableTable.cpp index 0b1212c0..b0295a59 100644 --- a/dDatabase/Tables/CDRarityTableTable.cpp +++ b/dDatabase/Tables/CDRarityTableTable.cpp @@ -1,7 +1,6 @@ #include "CDRarityTableTable.h" -//! Constructor -CDRarityTableTable::CDRarityTableTable(void) { +void CDRarityTableTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -44,7 +43,7 @@ std::vector CDRarityTableTable::Query(std::function& CDRarityTableTable::GetEntries(void) const { +const std::vector& CDRarityTableTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDRarityTableTable.h b/dDatabase/Tables/CDRarityTableTable.h index 592346ed..2d28e4a5 100644 --- a/dDatabase/Tables/CDRarityTableTable.h +++ b/dDatabase/Tables/CDRarityTableTable.h @@ -31,7 +31,7 @@ private: std::vector entries; public: - CDRarityTableTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); diff --git a/dDatabase/Tables/CDRebuildComponentTable.cpp b/dDatabase/Tables/CDRebuildComponentTable.cpp index d5c386d1..f5706a28 100644 --- a/dDatabase/Tables/CDRebuildComponentTable.cpp +++ b/dDatabase/Tables/CDRebuildComponentTable.cpp @@ -1,7 +1,6 @@ #include "CDRebuildComponentTable.h" -//! Constructor -CDRebuildComponentTable::CDRebuildComponentTable(void) { +void CDRebuildComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -39,7 +38,6 @@ CDRebuildComponentTable::CDRebuildComponentTable(void) { tableData.finalize(); } -//! Queries the table with a custom "where" clause std::vector CDRebuildComponentTable::Query(std::function predicate) { std::vector data = cpplinq::from(this->entries) @@ -49,8 +47,7 @@ std::vector CDRebuildComponentTable::Query(std::function CDRebuildComponentTable::GetEntries(void) const { +const std::vector& CDRebuildComponentTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDRebuildComponentTable.h b/dDatabase/Tables/CDRebuildComponentTable.h index db70a47d..fc78e904 100644 --- a/dDatabase/Tables/CDRebuildComponentTable.h +++ b/dDatabase/Tables/CDRebuildComponentTable.h @@ -21,10 +21,10 @@ private: std::vector entries; public: - CDRebuildComponentTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries() const; + const std::vector& GetEntries() const; }; diff --git a/dDatabase/Tables/CDRewardsTable.cpp b/dDatabase/Tables/CDRewardsTable.cpp index 55672add..27c2344a 100644 --- a/dDatabase/Tables/CDRewardsTable.cpp +++ b/dDatabase/Tables/CDRewardsTable.cpp @@ -1,35 +1,27 @@ #include "CDRewardsTable.h" -CDRewardsTable::CDRewardsTable(void) { +void CDRewardsTable::LoadValuesFromDatabase() { auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM Rewards"); while (!tableData.eof()) { - CDRewards* entry = new CDRewards(); - entry->id = tableData.getIntField("id", -1); - entry->levelID = tableData.getIntField("LevelID", -1); - entry->missionID = tableData.getIntField("MissionID", -1); - entry->rewardType = tableData.getIntField("RewardType", -1); - entry->value = tableData.getIntField("value", -1); - entry->count = tableData.getIntField("count", -1); + CDRewards entry; + entry.id = tableData.getIntField("id", -1); + entry.levelID = tableData.getIntField("LevelID", -1); + entry.missionID = tableData.getIntField("MissionID", -1); + entry.rewardType = tableData.getIntField("RewardType", -1); + entry.value = tableData.getIntField("value", -1); + entry.count = tableData.getIntField("count", -1); - m_entries.insert(std::make_pair(entry->id, entry)); + m_entries.insert(std::make_pair(entry.id, entry)); tableData.nextRow(); } tableData.finalize(); } -CDRewardsTable::~CDRewardsTable(void) { - for (auto e : m_entries) { - if (e.second) delete e.second; - } - - m_entries.clear(); -} - -std::vector CDRewardsTable::GetByLevelID(uint32_t levelID) { - std::vector result{}; +std::vector CDRewardsTable::GetByLevelID(uint32_t levelID) { + std::vector result{}; for (const auto& e : m_entries) { - if (e.second->levelID == levelID) result.push_back(e.second); + if (e.second.levelID == levelID) result.push_back(e.second); } return result; diff --git a/dDatabase/Tables/CDRewardsTable.h b/dDatabase/Tables/CDRewardsTable.h index 2e079a83..9c24397b 100644 --- a/dDatabase/Tables/CDRewardsTable.h +++ b/dDatabase/Tables/CDRewardsTable.h @@ -13,12 +13,11 @@ struct CDRewards { class CDRewardsTable : public CDTable { public: - CDRewardsTable(); - ~CDRewardsTable(); + void LoadValuesFromDatabase(); static const std::string GetTableName() { return "Rewards"; }; - std::vector GetByLevelID(uint32_t levelID); + std::vector GetByLevelID(uint32_t levelID); private: - std::map m_entries; + std::map m_entries; }; diff --git a/dDatabase/Tables/CDScriptComponentTable.cpp b/dDatabase/Tables/CDScriptComponentTable.cpp index 8050c139..1a922199 100644 --- a/dDatabase/Tables/CDScriptComponentTable.cpp +++ b/dDatabase/Tables/CDScriptComponentTable.cpp @@ -1,7 +1,6 @@ #include "CDScriptComponentTable.h" -//! Constructor -CDScriptComponentTable::CDScriptComponentTable(void) { +void CDScriptComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; diff --git a/dDatabase/Tables/CDScriptComponentTable.h b/dDatabase/Tables/CDScriptComponentTable.h index 77453939..d2b7e7ae 100644 --- a/dDatabase/Tables/CDScriptComponentTable.h +++ b/dDatabase/Tables/CDScriptComponentTable.h @@ -15,7 +15,7 @@ private: CDScriptComponent m_ToReturnWhenNoneFound; public: - CDScriptComponentTable(); + void LoadValuesFromDatabase(); // Gets an entry by scriptID const CDScriptComponent& GetByID(unsigned int id); }; diff --git a/dDatabase/Tables/CDSkillBehaviorTable.cpp b/dDatabase/Tables/CDSkillBehaviorTable.cpp index c5df78ef..8ffbb5ce 100644 --- a/dDatabase/Tables/CDSkillBehaviorTable.cpp +++ b/dDatabase/Tables/CDSkillBehaviorTable.cpp @@ -1,8 +1,6 @@ #include "CDSkillBehaviorTable.h" -//#include "Logger.hpp" -//! Constructor -CDSkillBehaviorTable::CDSkillBehaviorTable(void) { +void CDSkillBehaviorTable::LoadValuesFromDatabase() { m_empty = CDSkillBehavior(); // First, get the size of the table @@ -51,13 +49,6 @@ CDSkillBehaviorTable::CDSkillBehaviorTable(void) { tableData.finalize(); } -//! Queries the table with a custom "where" clause -std::vector CDSkillBehaviorTable::Query(std::function predicate) { - std::vector data; //So MSVC shuts up - return data; -} - -//! Gets an entry by ID const CDSkillBehavior& CDSkillBehaviorTable::GetSkillByID(unsigned int skillID) { std::map::iterator it = this->entries.find(skillID); if (it != this->entries.end()) { diff --git a/dDatabase/Tables/CDSkillBehaviorTable.h b/dDatabase/Tables/CDSkillBehaviorTable.h index eb3094e0..5b1081cd 100644 --- a/dDatabase/Tables/CDSkillBehaviorTable.h +++ b/dDatabase/Tables/CDSkillBehaviorTable.h @@ -31,9 +31,7 @@ private: CDSkillBehavior m_empty; public: - CDSkillBehaviorTable(); - // Queries the table with a custom "where" clause - std::vector Query(std::function predicate); + void LoadValuesFromDatabase(); // Gets an entry by skillID const CDSkillBehavior& GetSkillByID(unsigned int skillID); diff --git a/dDatabase/Tables/CDVendorComponentTable.cpp b/dDatabase/Tables/CDVendorComponentTable.cpp index 17989dfb..0f963b04 100644 --- a/dDatabase/Tables/CDVendorComponentTable.cpp +++ b/dDatabase/Tables/CDVendorComponentTable.cpp @@ -1,7 +1,6 @@ #include "CDVendorComponentTable.h" -//! Constructor -CDVendorComponentTable::CDVendorComponentTable(void) { +void CDVendorComponentTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; @@ -45,7 +44,7 @@ std::vector CDVendorComponentTable::Query(std::function CDVendorComponentTable::GetEntries(void) const { +const std::vector& CDVendorComponentTable::GetEntries() const { return this->entries; } diff --git a/dDatabase/Tables/CDVendorComponentTable.h b/dDatabase/Tables/CDVendorComponentTable.h index f2666d7e..29854d49 100644 --- a/dDatabase/Tables/CDVendorComponentTable.h +++ b/dDatabase/Tables/CDVendorComponentTable.h @@ -16,10 +16,10 @@ private: std::vector entries; public: - CDVendorComponentTable(); + void LoadValuesFromDatabase(); // Queries the table with a custom "where" clause std::vector Query(std::function predicate); - std::vector GetEntries(void) const; + const std::vector& GetEntries(void) const; }; diff --git a/dDatabase/Tables/CDZoneTableTable.cpp b/dDatabase/Tables/CDZoneTableTable.cpp index bafbf8fe..1030593e 100644 --- a/dDatabase/Tables/CDZoneTableTable.cpp +++ b/dDatabase/Tables/CDZoneTableTable.cpp @@ -1,7 +1,6 @@ #include "CDZoneTableTable.h" -//! Constructor -CDZoneTableTable::CDZoneTableTable(void) { +void CDZoneTableTable::LoadValuesFromDatabase() { // First, get the size of the table unsigned int size = 0; diff --git a/dDatabase/Tables/CDZoneTableTable.h b/dDatabase/Tables/CDZoneTableTable.h index f844fd25..fef8096f 100644 --- a/dDatabase/Tables/CDZoneTableTable.h +++ b/dDatabase/Tables/CDZoneTableTable.h @@ -38,7 +38,7 @@ private: std::map m_Entries; public: - CDZoneTableTable(); + void LoadValuesFromDatabase(); // Queries the table with a zoneID to find. const CDZoneTable* Query(unsigned int zoneID); diff --git a/dGame/dComponents/LevelProgressionComponent.cpp b/dGame/dComponents/LevelProgressionComponent.cpp index 265dd8e6..9930bdef 100644 --- a/dGame/dComponents/LevelProgressionComponent.cpp +++ b/dGame/dComponents/LevelProgressionComponent.cpp @@ -56,19 +56,19 @@ void LevelProgressionComponent::HandleLevelUp() { // Tell the client we beginning to send level rewards. if (rewardingItem) GameMessages::NotifyLevelRewards(m_Parent->GetObjectID(), m_Parent->GetSystemAddress(), m_Level, rewardingItem); - for (auto* reward : rewards) { - switch (reward->rewardType) { + for (const auto& reward : rewards) { + switch (reward.rewardType) { case 0: - inventoryComponent->AddItem(reward->value, reward->count, eLootSourceType::LEVEL_REWARD); + inventoryComponent->AddItem(reward.value, reward.count, eLootSourceType::LEVEL_REWARD); break; case 4: { auto* items = inventoryComponent->GetInventory(eInventoryType::ITEMS); - items->SetSize(items->GetSize() + reward->value); + items->SetSize(items->GetSize() + reward.value); } break; case 9: - SetSpeedBase(static_cast(reward->value) ); + SetSpeedBase(static_cast(reward.value) ); controllablePhysicsComponent->SetSpeedMultiplier(GetSpeedBase() / 500.0f); break; case 11: