mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-12-25 23:13:35 +00:00
d2aeebcd46
* Move CDClientManager to be a namespace Tested that worlds still load data as expected. Had no use being a singleton anyways. * Move cdclient data storage to tu local containers Allows some data from these containers to be saved on object by reference instead of always needing to copy. iteration 2 - move all unnamed namespace containers to a singular spot - use macro for template specialization and variable declaration - use templates to allow for as little copy paste of types and functions as possible * remember to use typename! compiler believes T::StorageType is accessing a member, not a type. * Update CDClientManager.cpp * move to cpp?
164 lines
7.0 KiB
C++
164 lines
7.0 KiB
C++
#include "CDClientManager.h"
|
|
#include "CDActivityRewardsTable.h"
|
|
#include "CDAnimationsTable.h"
|
|
#include "CDBehaviorParameterTable.h"
|
|
#include "CDBehaviorTemplateTable.h"
|
|
#include "CDClientDatabase.h"
|
|
#include "CDComponentsRegistryTable.h"
|
|
#include "CDCurrencyTableTable.h"
|
|
#include "CDDestructibleComponentTable.h"
|
|
#include "CDEmoteTable.h"
|
|
#include "CDInventoryComponentTable.h"
|
|
#include "CDItemComponentTable.h"
|
|
#include "CDItemSetsTable.h"
|
|
#include "CDItemSetSkillsTable.h"
|
|
#include "CDLevelProgressionLookupTable.h"
|
|
#include "CDLootMatrixTable.h"
|
|
#include "CDLootTableTable.h"
|
|
#include "CDMissionNPCComponentTable.h"
|
|
#include "CDMissionTasksTable.h"
|
|
#include "CDMissionsTable.h"
|
|
#include "CDObjectSkillsTable.h"
|
|
#include "CDObjectsTable.h"
|
|
#include "CDPhysicsComponentTable.h"
|
|
#include "CDRebuildComponentTable.h"
|
|
#include "CDScriptComponentTable.h"
|
|
#include "CDSkillBehaviorTable.h"
|
|
#include "CDZoneTableTable.h"
|
|
#include "CDVendorComponentTable.h"
|
|
#include "CDActivitiesTable.h"
|
|
#include "CDPackageComponentTable.h"
|
|
#include "CDProximityMonitorComponentTable.h"
|
|
#include "CDMovementAIComponentTable.h"
|
|
#include "CDBrickIDTableTable.h"
|
|
#include "CDRarityTableTable.h"
|
|
#include "CDMissionEmailTable.h"
|
|
#include "CDRewardsTable.h"
|
|
#include "CDPropertyEntranceComponentTable.h"
|
|
#include "CDPropertyTemplateTable.h"
|
|
#include "CDFeatureGatingTable.h"
|
|
#include "CDRailActivatorComponent.h"
|
|
#include "CDRewardCodesTable.h"
|
|
#include "CDPetComponentTable.h"
|
|
|
|
#include <exception>
|
|
|
|
#ifndef CDCLIENT_CACHE_ALL
|
|
// 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
|
|
#endif // CDCLIENT_CACHE_ALL
|
|
|
|
#ifdef CDCLIENT_CACHE_ALL
|
|
#define CDCLIENT_DONT_CACHE_TABLE(x) x
|
|
#else
|
|
#define CDCLIENT_DONT_CACHE_TABLE(x)
|
|
#endif
|
|
|
|
class CDClientConnectionException : public std::exception {
|
|
public:
|
|
virtual const char* what() const throw() {
|
|
return "CDClientDatabase is not connected!";
|
|
}
|
|
};
|
|
|
|
// Using a macro to reduce repetitive code and issues from copy and paste.
|
|
// As a note, ## in a macro is used to concatenate two tokens together.
|
|
|
|
#define SPECIALIZE_TABLE_STORAGE(table) \
|
|
template<> typename table::StorageType& CDClientManager::GetEntriesMutable<table>() { return table##Entries; };
|
|
|
|
#define DEFINE_TABLE_STORAGE(table) namespace { table::StorageType table##Entries; }; SPECIALIZE_TABLE_STORAGE(table)
|
|
|
|
DEFINE_TABLE_STORAGE(CDActivityRewardsTable);
|
|
DEFINE_TABLE_STORAGE(CDActivitiesTable);
|
|
DEFINE_TABLE_STORAGE(CDAnimationsTable);
|
|
DEFINE_TABLE_STORAGE(CDBehaviorParameterTable);
|
|
DEFINE_TABLE_STORAGE(CDBehaviorTemplateTable);
|
|
DEFINE_TABLE_STORAGE(CDBrickIDTableTable);
|
|
DEFINE_TABLE_STORAGE(CDComponentsRegistryTable);
|
|
DEFINE_TABLE_STORAGE(CDCurrencyTableTable);
|
|
DEFINE_TABLE_STORAGE(CDDestructibleComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDEmoteTableTable);
|
|
DEFINE_TABLE_STORAGE(CDFeatureGatingTable);
|
|
DEFINE_TABLE_STORAGE(CDInventoryComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDItemComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDItemSetSkillsTable);
|
|
DEFINE_TABLE_STORAGE(CDItemSetsTable);
|
|
DEFINE_TABLE_STORAGE(CDLevelProgressionLookupTable);
|
|
DEFINE_TABLE_STORAGE(CDLootMatrixTable);
|
|
DEFINE_TABLE_STORAGE(CDLootTableTable);
|
|
DEFINE_TABLE_STORAGE(CDMissionEmailTable);
|
|
DEFINE_TABLE_STORAGE(CDMissionNPCComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDMissionTasksTable);
|
|
DEFINE_TABLE_STORAGE(CDMissionsTable);
|
|
DEFINE_TABLE_STORAGE(CDMovementAIComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDObjectSkillsTable);
|
|
DEFINE_TABLE_STORAGE(CDObjectsTable);
|
|
DEFINE_TABLE_STORAGE(CDPhysicsComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDPackageComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDPetComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDProximityMonitorComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDPropertyEntranceComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDPropertyTemplateTable);
|
|
DEFINE_TABLE_STORAGE(CDRailActivatorComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDRarityTableTable);
|
|
DEFINE_TABLE_STORAGE(CDRebuildComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDRewardCodesTable);
|
|
DEFINE_TABLE_STORAGE(CDRewardsTable);
|
|
DEFINE_TABLE_STORAGE(CDScriptComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDSkillBehaviorTable);
|
|
DEFINE_TABLE_STORAGE(CDVendorComponentTable);
|
|
DEFINE_TABLE_STORAGE(CDZoneTableTable);
|
|
|
|
void CDClientManager::LoadValuesFromDatabase() {
|
|
if (!CDClientDatabase::isConnected) throw CDClientConnectionException();
|
|
|
|
CDActivityRewardsTable::Instance().LoadValuesFromDatabase();
|
|
CDActivitiesTable::Instance().LoadValuesFromDatabase();
|
|
CDCLIENT_DONT_CACHE_TABLE(CDAnimationsTable::Instance().LoadValuesFromDatabase());
|
|
CDBehaviorParameterTable::Instance().LoadValuesFromDatabase();
|
|
CDBehaviorTemplateTable::Instance().LoadValuesFromDatabase();
|
|
CDBrickIDTableTable::Instance().LoadValuesFromDatabase();
|
|
CDCLIENT_DONT_CACHE_TABLE(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();
|
|
CDCLIENT_DONT_CACHE_TABLE(CDLootMatrixTable::Instance().LoadValuesFromDatabase());
|
|
CDCLIENT_DONT_CACHE_TABLE(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();
|
|
CDPetComponentTable::Instance().LoadValuesFromDatabase();
|
|
CDProximityMonitorComponentTable::Instance().LoadValuesFromDatabase();
|
|
CDPropertyEntranceComponentTable::Instance().LoadValuesFromDatabase();
|
|
CDPropertyTemplateTable::Instance().LoadValuesFromDatabase();
|
|
CDRailActivatorComponentTable::Instance().LoadValuesFromDatabase();
|
|
CDRarityTableTable::Instance().LoadValuesFromDatabase();
|
|
CDRebuildComponentTable::Instance().LoadValuesFromDatabase();
|
|
CDRewardCodesTable::Instance().LoadValuesFromDatabase();
|
|
CDRewardsTable::Instance().LoadValuesFromDatabase();
|
|
CDScriptComponentTable::Instance().LoadValuesFromDatabase();
|
|
CDSkillBehaviorTable::Instance().LoadValuesFromDatabase();
|
|
CDVendorComponentTable::Instance().LoadValuesFromDatabase();
|
|
CDZoneTableTable::Instance().LoadValuesFromDatabase();
|
|
}
|
|
|
|
void CDClientManager::LoadValuesFromDefaults() {
|
|
LOG("Loading default CDClient tables!");
|
|
|
|
CDPetComponentTable::Instance().LoadValuesFromDefaults();
|
|
}
|