mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-06-22 22:54:21 +00:00
Compare commits
38 Commits
cdclient-r
...
grim-lu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
89339d3003 | ||
|
|
2097dbfff1 | ||
|
|
b33e9935f5 | ||
|
|
258ee5c1ee | ||
|
|
a8820c14f2 | ||
|
|
1ec8da8bf7 | ||
|
|
b24775f472 | ||
|
|
bd65fc6e33 | ||
|
|
44f466ac72 | ||
|
|
51540568fb | ||
|
|
08020cd86d | ||
|
|
ca78a166d9 | ||
|
|
2e386d29df | ||
|
|
d893ecddeb | ||
|
|
f4f13e081a | ||
|
|
c26086aff5 | ||
|
|
0337449aa7 | ||
|
|
598f4e1663 | ||
|
|
5eca25e42a | ||
|
|
d233c7e2aa | ||
|
|
beaceb947b | ||
|
|
2cc13c6499 | ||
|
|
ad81e341da | ||
|
|
fe6be21008 | ||
|
|
cefdfc696a | ||
|
|
7e2747a2d2 | ||
|
|
a29253d2f0 | ||
|
|
e5b69745aa | ||
|
|
040a78c386 | ||
|
|
d8a5fd49a4 | ||
|
|
208ed02158 | ||
|
|
952786c166 | ||
|
|
9a07020a51 | ||
|
|
a22ecf385f | ||
|
|
c2b4aa4026 | ||
|
|
0d48cfe8c0 | ||
|
|
e299bf9b62 | ||
|
|
5973430720 |
@@ -203,6 +203,7 @@ set(INCLUDED_DIRECTORIES
|
|||||||
"dGame/dInventory"
|
"dGame/dInventory"
|
||||||
"dGame/dMission"
|
"dGame/dMission"
|
||||||
"dGame/dEntity"
|
"dGame/dEntity"
|
||||||
|
"dGame/dGrim"
|
||||||
"dGame/dPropertyBehaviors"
|
"dGame/dPropertyBehaviors"
|
||||||
"dGame/dPropertyBehaviors/ControlBehaviorMessages"
|
"dGame/dPropertyBehaviors/ControlBehaviorMessages"
|
||||||
"dGame/dUtilities"
|
"dGame/dUtilities"
|
||||||
@@ -322,15 +323,6 @@ link_directories(${PROJECT_BINARY_DIR})
|
|||||||
# Load all of our third party directories
|
# Load all of our third party directories
|
||||||
add_subdirectory(thirdparty)
|
add_subdirectory(thirdparty)
|
||||||
|
|
||||||
# Include Boost
|
|
||||||
find_package(Boost COMPONENTS interprocess)
|
|
||||||
|
|
||||||
if(Boost_FOUND)
|
|
||||||
include_directories(${Boost_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
target_link_libraries(dGame ${Boost_LIBRARIES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Glob together all headers that need to be precompiled
|
# Glob together all headers that need to be precompiled
|
||||||
file(
|
file(
|
||||||
GLOB HEADERS_DDATABASE
|
GLOB HEADERS_DDATABASE
|
||||||
@@ -362,13 +354,13 @@ file(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Add our library subdirectories for creation of the library object
|
# Add our library subdirectories for creation of the library object
|
||||||
|
add_subdirectory(dZoneManager)
|
||||||
add_subdirectory(dCommon)
|
add_subdirectory(dCommon)
|
||||||
add_subdirectory(dDatabase)
|
add_subdirectory(dDatabase)
|
||||||
add_subdirectory(dChatFilter)
|
add_subdirectory(dChatFilter)
|
||||||
add_subdirectory(dNet)
|
add_subdirectory(dNet)
|
||||||
add_subdirectory(dScripts) # Add for dGame to use
|
add_subdirectory(dScripts) # Add for dGame to use
|
||||||
add_subdirectory(dGame)
|
add_subdirectory(dGame)
|
||||||
add_subdirectory(dZoneManager)
|
|
||||||
add_subdirectory(dNavigation)
|
add_subdirectory(dNavigation)
|
||||||
add_subdirectory(dPhysics)
|
add_subdirectory(dPhysics)
|
||||||
|
|
||||||
@@ -396,10 +388,10 @@ target_precompile_headers(
|
|||||||
${HEADERS_DGAME}
|
${HEADERS_DGAME}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_precompile_headers(
|
#target_precompile_headers(
|
||||||
dZoneManager PRIVATE
|
# dZoneManager PRIVATE
|
||||||
${HEADERS_DZONEMANAGER}
|
# ${HEADERS_DZONEMANAGER}
|
||||||
)
|
#)
|
||||||
|
|
||||||
# Need to specify to use the CXX compiler language here or else we get errors including <string>.
|
# Need to specify to use the CXX compiler language here or else we get errors including <string>.
|
||||||
target_precompile_headers(
|
target_precompile_headers(
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
PROJECT_VERSION_MAJOR=1
|
PROJECT_VERSION_MAJOR=1
|
||||||
PROJECT_VERSION_MINOR=1
|
PROJECT_VERSION_MINOR=1
|
||||||
PROJECT_VERSION_PATCH=0
|
PROJECT_VERSION_PATCH=1
|
||||||
# LICENSE
|
# LICENSE
|
||||||
LICENSE=AGPL-3.0
|
LICENSE=AGPL-3.0
|
||||||
# The network version.
|
|
||||||
# 171023 - Darkflame Universe client
|
|
||||||
# 171022 - Unmodded client
|
|
||||||
NET_VERSION=171022
|
|
||||||
# Debugging
|
# Debugging
|
||||||
# Set __dynamic to 1 to enable the -rdynamic flag for the linker, yielding some symbols in crashlogs.
|
# Set __dynamic to 1 to enable the -rdynamic flag for the linker, yielding some symbols in crashlogs.
|
||||||
__dynamic=1
|
__dynamic=1
|
||||||
@@ -22,3 +18,5 @@ __maria_db_connector_compile_jobs__=1
|
|||||||
__enable_testing__=1
|
__enable_testing__=1
|
||||||
# The path to OpenSSL. Change this if your OpenSSL install path is different than the default.
|
# The path to OpenSSL. Change this if your OpenSSL install path is different than the default.
|
||||||
OPENSSL_ROOT_DIR=/usr/local/opt/openssl@3/
|
OPENSSL_ROOT_DIR=/usr/local/opt/openssl@3/
|
||||||
|
# Uncomment the below line to cache the entire CDClient into memory
|
||||||
|
# CDCLIENT_CACHE_ALL=1
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ If you would like to build the server faster, append `-j<number>` where number i
|
|||||||
### Notes
|
### Notes
|
||||||
Depending on your operating system, you may need to adjust some pre-processor defines in [CMakeVariables.txt](./CMakeVariables.txt) before building:
|
Depending on your operating system, you may need to adjust some pre-processor defines in [CMakeVariables.txt](./CMakeVariables.txt) before building:
|
||||||
* If you are on MacOS, ensure OPENSSL_ROOT_DIR is pointing to the openssl root directory.
|
* If you are on MacOS, ensure OPENSSL_ROOT_DIR is pointing to the openssl root directory.
|
||||||
* If you are using a Darkflame Universe client, ensure NET_VERSION is changed to 171023.
|
* If you are using a Darkflame Universe client, ensure `client_net_version` in `build/sharedconfig.ini` is changed to 171023.
|
||||||
|
|
||||||
## Configuring your server
|
## Configuring your server
|
||||||
This server has a few steps that need to be taken to configure the server for your use case.
|
This server has a few steps that need to be taken to configure the server for your use case.
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "Database.h"
|
#include "Database.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "PacketUtils.h"
|
#include "PacketUtils.h"
|
||||||
|
#include "BitStreamUtils.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "dServer.h"
|
#include "dServer.h"
|
||||||
#include "GeneralUtils.h"
|
#include "GeneralUtils.h"
|
||||||
@@ -75,11 +76,11 @@ void ChatPacketHandler::HandleFriendlistRequest(Packet* packet) {
|
|||||||
|
|
||||||
//Now, we need to send the friendlist to the server they came from:
|
//Now, we need to send the friendlist to the server they came from:
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(playerID);
|
bitStream.Write(playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::GET_FRIENDS_LIST_RESPONSE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::GET_FRIENDS_LIST_RESPONSE);
|
||||||
bitStream.Write<uint8_t>(0);
|
bitStream.Write<uint8_t>(0);
|
||||||
bitStream.Write<uint16_t>(1); //Length of packet -- just writing one as it doesn't matter, client skips it.
|
bitStream.Write<uint16_t>(1); //Length of packet -- just writing one as it doesn't matter, client skips it.
|
||||||
bitStream.Write((uint16_t)friends.size());
|
bitStream.Write((uint16_t)friends.size());
|
||||||
@@ -412,21 +413,21 @@ void ChatPacketHandler::HandleChatMessage(Packet* packet) {
|
|||||||
const auto otherName = std::string(otherMember->playerName.c_str());
|
const auto otherName = std::string(otherMember->playerName.c_str());
|
||||||
|
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(otherMember->playerID);
|
bitStream.Write(otherMember->playerID);
|
||||||
|
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
|
||||||
bitStream.Write(otherMember->playerID);
|
bitStream.Write(otherMember->playerID);
|
||||||
bitStream.Write<uint8_t>(8);
|
bitStream.Write<uint8_t>(8);
|
||||||
bitStream.Write<unsigned int>(69);
|
bitStream.Write<unsigned int>(69);
|
||||||
PacketUtils::WritePacketWString(senderName, 33, &bitStream);
|
bitStream.Write(LUWString(senderName));
|
||||||
bitStream.Write(sender->playerID);
|
bitStream.Write(sender->playerID);
|
||||||
bitStream.Write<uint16_t>(0);
|
bitStream.Write<uint16_t>(0);
|
||||||
bitStream.Write<uint8_t>(0); //not mythran nametag
|
bitStream.Write<uint8_t>(0); //not mythran nametag
|
||||||
PacketUtils::WritePacketWString(otherName, 33, &bitStream);
|
bitStream.Write(LUWString(otherName));
|
||||||
bitStream.Write<uint8_t>(0); //not mythran for receiver
|
bitStream.Write<uint8_t>(0); //not mythran for receiver
|
||||||
bitStream.Write<uint8_t>(0); //teams?
|
bitStream.Write<uint8_t>(0); //teams?
|
||||||
PacketUtils::WritePacketWString(message, 512, &bitStream);
|
bitStream.Write(LUWString(message, 512));
|
||||||
|
|
||||||
SystemAddress sysAddr = otherMember->sysAddr;
|
SystemAddress sysAddr = otherMember->sysAddr;
|
||||||
SEND_PACKET;
|
SEND_PACKET;
|
||||||
@@ -434,7 +435,7 @@ void ChatPacketHandler::HandleChatMessage(Packet* packet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ChatPacketHandler::HandlePrivateChatMessage(Packet* packet) {
|
void ChatPacketHandler::HandlePrivateChatMessage(Packet* packet) {
|
||||||
LWOOBJID senderID = PacketUtils::ReadPacketS64(0x08, packet);
|
LWOOBJID senderID = PacketUtils::ReadS64(0x08, packet);
|
||||||
std::string receiverName = PacketUtils::ReadString(0x66, packet, true);
|
std::string receiverName = PacketUtils::ReadString(0x66, packet, true);
|
||||||
std::string message = PacketUtils::ReadString(0xAA, packet, true, 512);
|
std::string message = PacketUtils::ReadString(0xAA, packet, true, 512);
|
||||||
|
|
||||||
@@ -451,21 +452,21 @@ void ChatPacketHandler::HandlePrivateChatMessage(Packet* packet) {
|
|||||||
//To the sender:
|
//To the sender:
|
||||||
{
|
{
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(goonA->playerID);
|
bitStream.Write(goonA->playerID);
|
||||||
|
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
|
||||||
bitStream.Write(goonA->playerID);
|
bitStream.Write(goonA->playerID);
|
||||||
bitStream.Write<uint8_t>(7);
|
bitStream.Write<uint8_t>(7);
|
||||||
bitStream.Write<unsigned int>(69);
|
bitStream.Write<unsigned int>(69);
|
||||||
PacketUtils::WritePacketWString(goonAName, 33, &bitStream);
|
bitStream.Write(LUWString(goonAName));
|
||||||
bitStream.Write(goonA->playerID);
|
bitStream.Write(goonA->playerID);
|
||||||
bitStream.Write<uint16_t>(0);
|
bitStream.Write<uint16_t>(0);
|
||||||
bitStream.Write<uint8_t>(0); //not mythran nametag
|
bitStream.Write<uint8_t>(0); //not mythran nametag
|
||||||
PacketUtils::WritePacketWString(goonBName, 33, &bitStream);
|
bitStream.Write(LUWString(goonBName));
|
||||||
bitStream.Write<uint8_t>(0); //not mythran for receiver
|
bitStream.Write<uint8_t>(0); //not mythran for receiver
|
||||||
bitStream.Write<uint8_t>(0); //success
|
bitStream.Write<uint8_t>(0); //success
|
||||||
PacketUtils::WritePacketWString(message, 512, &bitStream);
|
bitStream.Write(LUWString(message, 512));
|
||||||
|
|
||||||
SystemAddress sysAddr = goonA->sysAddr;
|
SystemAddress sysAddr = goonA->sysAddr;
|
||||||
SEND_PACKET;
|
SEND_PACKET;
|
||||||
@@ -474,21 +475,21 @@ void ChatPacketHandler::HandlePrivateChatMessage(Packet* packet) {
|
|||||||
//To the receiver:
|
//To the receiver:
|
||||||
{
|
{
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(goonB->playerID);
|
bitStream.Write(goonB->playerID);
|
||||||
|
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
|
||||||
bitStream.Write(goonA->playerID);
|
bitStream.Write(goonA->playerID);
|
||||||
bitStream.Write<uint8_t>(7);
|
bitStream.Write<uint8_t>(7);
|
||||||
bitStream.Write<unsigned int>(69);
|
bitStream.Write<unsigned int>(69);
|
||||||
PacketUtils::WritePacketWString(goonAName, 33, &bitStream);
|
bitStream.Write(LUWString(goonAName));
|
||||||
bitStream.Write(goonA->playerID);
|
bitStream.Write(goonA->playerID);
|
||||||
bitStream.Write<uint16_t>(0);
|
bitStream.Write<uint16_t>(0);
|
||||||
bitStream.Write<uint8_t>(0); //not mythran nametag
|
bitStream.Write<uint8_t>(0); //not mythran nametag
|
||||||
PacketUtils::WritePacketWString(goonBName, 33, &bitStream);
|
bitStream.Write(LUWString(goonBName));
|
||||||
bitStream.Write<uint8_t>(0); //not mythran for receiver
|
bitStream.Write<uint8_t>(0); //not mythran for receiver
|
||||||
bitStream.Write<uint8_t>(3); //new whisper
|
bitStream.Write<uint8_t>(3); //new whisper
|
||||||
PacketUtils::WritePacketWString(message, 512, &bitStream);
|
bitStream.Write(LUWString(message, 512));
|
||||||
|
|
||||||
SystemAddress sysAddr = goonB->sysAddr;
|
SystemAddress sysAddr = goonB->sysAddr;
|
||||||
SEND_PACKET;
|
SEND_PACKET;
|
||||||
@@ -709,13 +710,13 @@ void ChatPacketHandler::HandleTeamStatusRequest(Packet* packet) {
|
|||||||
|
|
||||||
void ChatPacketHandler::SendTeamInvite(PlayerData* receiver, PlayerData* sender) {
|
void ChatPacketHandler::SendTeamInvite(PlayerData* receiver, PlayerData* sender) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::TEAM_INVITE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::TEAM_INVITE);
|
||||||
|
|
||||||
PacketUtils::WritePacketWString(sender->playerName.c_str(), 33, &bitStream);
|
bitStream.Write(LUWString(sender->playerName.c_str()));
|
||||||
bitStream.Write(sender->playerID);
|
bitStream.Write(sender->playerID);
|
||||||
|
|
||||||
SystemAddress sysAddr = receiver->sysAddr;
|
SystemAddress sysAddr = receiver->sysAddr;
|
||||||
@@ -724,7 +725,7 @@ void ChatPacketHandler::SendTeamInvite(PlayerData* receiver, PlayerData* sender)
|
|||||||
|
|
||||||
void ChatPacketHandler::SendTeamInviteConfirm(PlayerData* receiver, bool bLeaderIsFreeTrial, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, uint8_t ucResponseCode, std::u16string wsLeaderName) {
|
void ChatPacketHandler::SendTeamInviteConfirm(PlayerData* receiver, bool bLeaderIsFreeTrial, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, uint8_t ucResponseCode, std::u16string wsLeaderName) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
@@ -751,7 +752,7 @@ void ChatPacketHandler::SendTeamInviteConfirm(PlayerData* receiver, bool bLeader
|
|||||||
|
|
||||||
void ChatPacketHandler::SendTeamStatus(PlayerData* receiver, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, std::u16string wsLeaderName) {
|
void ChatPacketHandler::SendTeamStatus(PlayerData* receiver, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, std::u16string wsLeaderName) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
@@ -776,7 +777,7 @@ void ChatPacketHandler::SendTeamStatus(PlayerData* receiver, LWOOBJID i64LeaderI
|
|||||||
|
|
||||||
void ChatPacketHandler::SendTeamSetLeader(PlayerData* receiver, LWOOBJID i64PlayerID) {
|
void ChatPacketHandler::SendTeamSetLeader(PlayerData* receiver, LWOOBJID i64PlayerID) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
@@ -793,7 +794,7 @@ void ChatPacketHandler::SendTeamSetLeader(PlayerData* receiver, LWOOBJID i64Play
|
|||||||
|
|
||||||
void ChatPacketHandler::SendTeamAddPlayer(PlayerData* receiver, bool bIsFreeTrial, bool bLocal, bool bNoLootOnDeath, LWOOBJID i64PlayerID, std::u16string wsPlayerName, LWOZONEID zoneID) {
|
void ChatPacketHandler::SendTeamAddPlayer(PlayerData* receiver, bool bIsFreeTrial, bool bLocal, bool bNoLootOnDeath, LWOOBJID i64PlayerID, std::u16string wsPlayerName, LWOZONEID zoneID) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
@@ -822,7 +823,7 @@ void ChatPacketHandler::SendTeamAddPlayer(PlayerData* receiver, bool bIsFreeTria
|
|||||||
|
|
||||||
void ChatPacketHandler::SendTeamRemovePlayer(PlayerData* receiver, bool bDisband, bool bIsKicked, bool bIsLeaving, bool bLocal, LWOOBJID i64LeaderID, LWOOBJID i64PlayerID, std::u16string wsPlayerName) {
|
void ChatPacketHandler::SendTeamRemovePlayer(PlayerData* receiver, bool bDisband, bool bIsKicked, bool bIsLeaving, bool bLocal, LWOOBJID i64LeaderID, LWOOBJID i64PlayerID, std::u16string wsPlayerName) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
@@ -848,7 +849,7 @@ void ChatPacketHandler::SendTeamRemovePlayer(PlayerData* receiver, bool bDisband
|
|||||||
|
|
||||||
void ChatPacketHandler::SendTeamSetOffWorldFlag(PlayerData* receiver, LWOOBJID i64PlayerID, LWOZONEID zoneID) {
|
void ChatPacketHandler::SendTeamSetOffWorldFlag(PlayerData* receiver, LWOOBJID i64PlayerID, LWOZONEID zoneID) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
@@ -882,16 +883,16 @@ void ChatPacketHandler::SendFriendUpdate(PlayerData* friendData, PlayerData* pla
|
|||||||
[bool] - is FTP*/
|
[bool] - is FTP*/
|
||||||
|
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(friendData->playerID);
|
bitStream.Write(friendData->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::UPDATE_FRIEND_NOTIFY);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::UPDATE_FRIEND_NOTIFY);
|
||||||
bitStream.Write<uint8_t>(notifyType);
|
bitStream.Write<uint8_t>(notifyType);
|
||||||
|
|
||||||
std::string playerName = playerData->playerName.c_str();
|
std::string playerName = playerData->playerName.c_str();
|
||||||
|
|
||||||
PacketUtils::WritePacketWString(playerName, 33, &bitStream);
|
bitStream.Write(LUWString(playerName));
|
||||||
|
|
||||||
bitStream.Write(playerData->zoneID.GetMapID());
|
bitStream.Write(playerData->zoneID.GetMapID());
|
||||||
bitStream.Write(playerData->zoneID.GetInstanceID());
|
bitStream.Write(playerData->zoneID.GetInstanceID());
|
||||||
@@ -921,12 +922,12 @@ void ChatPacketHandler::SendFriendRequest(PlayerData* receiver, PlayerData* send
|
|||||||
}
|
}
|
||||||
|
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::ADD_FRIEND_REQUEST);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::ADD_FRIEND_REQUEST);
|
||||||
PacketUtils::WritePacketWString(sender->playerName.c_str(), 33, &bitStream);
|
bitStream.Write(LUWString(sender->playerName.c_str()));
|
||||||
bitStream.Write<uint8_t>(0); // This is a BFF flag however this is unused in live and does not have an implementation client side.
|
bitStream.Write<uint8_t>(0); // This is a BFF flag however this is unused in live and does not have an implementation client side.
|
||||||
|
|
||||||
SystemAddress sysAddr = receiver->sysAddr;
|
SystemAddress sysAddr = receiver->sysAddr;
|
||||||
@@ -937,16 +938,16 @@ void ChatPacketHandler::SendFriendResponse(PlayerData* receiver, PlayerData* sen
|
|||||||
if (!receiver || !sender) return;
|
if (!receiver || !sender) return;
|
||||||
|
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
// Portion that will get routed:
|
// Portion that will get routed:
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::ADD_FRIEND_RESPONSE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::ADD_FRIEND_RESPONSE);
|
||||||
bitStream.Write(responseCode);
|
bitStream.Write(responseCode);
|
||||||
// For all requests besides accepted, write a flag that says whether or not we are already best friends with the receiver.
|
// For all requests besides accepted, write a flag that says whether or not we are already best friends with the receiver.
|
||||||
bitStream.Write<uint8_t>(responseCode != eAddFriendResponseType::ACCEPTED ? isBestFriendsAlready : sender->sysAddr != UNASSIGNED_SYSTEM_ADDRESS);
|
bitStream.Write<uint8_t>(responseCode != eAddFriendResponseType::ACCEPTED ? isBestFriendsAlready : sender->sysAddr != UNASSIGNED_SYSTEM_ADDRESS);
|
||||||
// Then write the player name
|
// Then write the player name
|
||||||
PacketUtils::WritePacketWString(sender->playerName.c_str(), 33, &bitStream);
|
bitStream.Write(LUWString(sender->playerName.c_str()));
|
||||||
// Then if this is an acceptance code, write the following extra info.
|
// Then if this is an acceptance code, write the following extra info.
|
||||||
if (responseCode == eAddFriendResponseType::ACCEPTED) {
|
if (responseCode == eAddFriendResponseType::ACCEPTED) {
|
||||||
bitStream.Write(sender->playerID);
|
bitStream.Write(sender->playerID);
|
||||||
@@ -962,13 +963,13 @@ void ChatPacketHandler::SendRemoveFriend(PlayerData* receiver, std::string& pers
|
|||||||
if (!receiver) return;
|
if (!receiver) return;
|
||||||
|
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
|
||||||
bitStream.Write(receiver->playerID);
|
bitStream.Write(receiver->playerID);
|
||||||
|
|
||||||
//portion that will get routed:
|
//portion that will get routed:
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::REMOVE_FRIEND_RESPONSE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::REMOVE_FRIEND_RESPONSE);
|
||||||
bitStream.Write<uint8_t>(isSuccessful); //isOnline
|
bitStream.Write<uint8_t>(isSuccessful); //isOnline
|
||||||
PacketUtils::WritePacketWString(personToRemove, 33, &bitStream);
|
bitStream.Write(LUWString(personToRemove));
|
||||||
|
|
||||||
SystemAddress sysAddr = receiver->sysAddr;
|
SystemAddress sysAddr = receiver->sysAddr;
|
||||||
SEND_PACKET;
|
SEND_PACKET;
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ namespace Game {
|
|||||||
dChatFilter* chatFilter = nullptr;
|
dChatFilter* chatFilter = nullptr;
|
||||||
AssetManager* assetManager = nullptr;
|
AssetManager* assetManager = nullptr;
|
||||||
bool shouldShutdown = false;
|
bool shouldShutdown = false;
|
||||||
|
std::mt19937 randomEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -115,6 +116,8 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
Game::chatFilter = new dChatFilter(Game::assetManager->GetResPath().string() + "/chatplus_en_us", bool(std::stoi(Game::config->GetValue("dont_generate_dcf"))));
|
Game::chatFilter = new dChatFilter(Game::assetManager->GetResPath().string() + "/chatplus_en_us", bool(std::stoi(Game::config->GetValue("dont_generate_dcf"))));
|
||||||
|
|
||||||
|
Game::randomEngine = std::mt19937(time(0));
|
||||||
|
|
||||||
//Run it until server gets a kill message from Master:
|
//Run it until server gets a kill message from Master:
|
||||||
auto t = std::chrono::high_resolution_clock::now();
|
auto t = std::chrono::high_resolution_clock::now();
|
||||||
Packet* packet = nullptr;
|
Packet* packet = nullptr;
|
||||||
|
|||||||
@@ -6,10 +6,11 @@
|
|||||||
#include "dLogger.h"
|
#include "dLogger.h"
|
||||||
#include "ChatPacketHandler.h"
|
#include "ChatPacketHandler.h"
|
||||||
#include "GeneralUtils.h"
|
#include "GeneralUtils.h"
|
||||||
#include "PacketUtils.h"
|
#include "BitStreamUtils.h"
|
||||||
#include "Database.h"
|
#include "Database.h"
|
||||||
#include "eConnectionType.h"
|
#include "eConnectionType.h"
|
||||||
#include "eChatInternalMessageType.h"
|
#include "eChatInternalMessageType.h"
|
||||||
|
#include "ChatPackets.h"
|
||||||
|
|
||||||
PlayerContainer::PlayerContainer() {
|
PlayerContainer::PlayerContainer() {
|
||||||
}
|
}
|
||||||
@@ -146,7 +147,7 @@ void PlayerContainer::CreateTeamServer(Packet* packet) {
|
|||||||
|
|
||||||
void PlayerContainer::BroadcastMuteUpdate(LWOOBJID player, time_t time) {
|
void PlayerContainer::BroadcastMuteUpdate(LWOOBJID player, time_t time) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::MUTE_UPDATE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::MUTE_UPDATE);
|
||||||
|
|
||||||
bitStream.Write(player);
|
bitStream.Write(player);
|
||||||
bitStream.Write(time);
|
bitStream.Write(time);
|
||||||
@@ -207,6 +208,14 @@ TeamData* PlayerContainer::GetTeam(LWOOBJID playerID) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PlayerContainer::AddMember(TeamData* team, LWOOBJID playerID) {
|
void PlayerContainer::AddMember(TeamData* team, LWOOBJID playerID) {
|
||||||
|
if (team->memberIDs.size() >= 4){
|
||||||
|
Game::logger->Log("PlayerContainer", "Tried to add player to team that already had 4 players");
|
||||||
|
auto* player = GetPlayerData(playerID);
|
||||||
|
if (!player) return;
|
||||||
|
ChatPackets::SendSystemMessage(player->sysAddr, u"The teams is full! You have not been added to a team!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const auto index = std::find(team->memberIDs.begin(), team->memberIDs.end(), playerID);
|
const auto index = std::find(team->memberIDs.begin(), team->memberIDs.end(), playerID);
|
||||||
|
|
||||||
if (index != team->memberIDs.end()) return;
|
if (index != team->memberIDs.end()) return;
|
||||||
@@ -345,7 +354,7 @@ void PlayerContainer::TeamStatusUpdate(TeamData* team) {
|
|||||||
|
|
||||||
void PlayerContainer::UpdateTeamsOnWorld(TeamData* team, bool deleteTeam) {
|
void PlayerContainer::UpdateTeamsOnWorld(TeamData* team, bool deleteTeam) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::TEAM_UPDATE);
|
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::TEAM_UPDATE);
|
||||||
|
|
||||||
bitStream.Write(team->teamID);
|
bitStream.Write(team->teamID);
|
||||||
bitStream.Write(deleteTeam);
|
bitStream.Write(deleteTeam);
|
||||||
|
|||||||
@@ -129,10 +129,19 @@ NiPoint3 NiPoint3::operator+(const NiPoint3& point) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Operator for addition of vectors
|
//! Operator for addition of vectors
|
||||||
NiPoint3 NiPoint3::operator+=(const NiPoint3& point) const {
|
NiPoint3& NiPoint3::operator+=(const NiPoint3& point) {
|
||||||
return NiPoint3(this->x + point.x, this->y + point.y, this->z + point.z);
|
this->x += point.x;
|
||||||
|
this->y += point.y;
|
||||||
|
this->z += point.z;
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NiPoint3& NiPoint3::operator*=(const float scalar) {
|
||||||
|
this->x *= scalar;
|
||||||
|
this->y *= scalar;
|
||||||
|
this->z *= scalar;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
//! Operator for subtraction of vectors
|
//! Operator for subtraction of vectors
|
||||||
NiPoint3 NiPoint3::operator-(const NiPoint3& point) const {
|
NiPoint3 NiPoint3::operator-(const NiPoint3& point) const {
|
||||||
|
|||||||
@@ -136,7 +136,9 @@ public:
|
|||||||
NiPoint3 operator+(const NiPoint3& point) const;
|
NiPoint3 operator+(const NiPoint3& point) const;
|
||||||
|
|
||||||
//! Operator for addition of vectors
|
//! Operator for addition of vectors
|
||||||
NiPoint3 operator+=(const NiPoint3& point) const;
|
NiPoint3& operator+=(const NiPoint3& point);
|
||||||
|
|
||||||
|
NiPoint3& operator*=(const float scalar);
|
||||||
|
|
||||||
//! Operator for subtraction of vectors
|
//! Operator for subtraction of vectors
|
||||||
NiPoint3 operator-(const NiPoint3& point) const;
|
NiPoint3 operator-(const NiPoint3& point) const;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ struct AssetMemoryBuffer : std::streambuf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void close() {
|
void close() {
|
||||||
delete m_Base;
|
free(m_Base);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "BitStream.h"
|
#include "BitStream.h"
|
||||||
#include "eConnectionType.h"
|
#include "eConnectionType.h"
|
||||||
#include "eClientMessageType.h"
|
#include "eClientMessageType.h"
|
||||||
|
#include "BitStreamUtils.h"
|
||||||
|
|
||||||
#pragma warning (disable:4251) //Disables SQL warnings
|
#pragma warning (disable:4251) //Disables SQL warnings
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@ constexpr uint32_t lowFrameDelta = FRAMES_TO_MS(lowFramerate);
|
|||||||
#define CBITSTREAM RakNet::BitStream bitStream;
|
#define CBITSTREAM RakNet::BitStream bitStream;
|
||||||
#define CINSTREAM RakNet::BitStream inStream(packet->data, packet->length, false);
|
#define CINSTREAM RakNet::BitStream inStream(packet->data, packet->length, false);
|
||||||
#define CINSTREAM_SKIP_HEADER CINSTREAM if (inStream.GetNumberOfUnreadBits() >= BYTES_TO_BITS(HEADER_SIZE)) inStream.IgnoreBytes(HEADER_SIZE); else inStream.IgnoreBits(inStream.GetNumberOfUnreadBits());
|
#define CINSTREAM_SKIP_HEADER CINSTREAM if (inStream.GetNumberOfUnreadBits() >= BYTES_TO_BITS(HEADER_SIZE)) inStream.IgnoreBytes(HEADER_SIZE); else inStream.IgnoreBits(inStream.GetNumberOfUnreadBits());
|
||||||
#define CMSGHEADER PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::GAME_MSG);
|
#define CMSGHEADER BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::GAME_MSG);
|
||||||
#define SEND_PACKET Game::server->Send(&bitStream, sysAddr, false);
|
#define SEND_PACKET Game::server->Send(&bitStream, sysAddr, false);
|
||||||
#define SEND_PACKET_BROADCAST Game::server->Send(&bitStream, UNASSIGNED_SYSTEM_ADDRESS, true);
|
#define SEND_PACKET_BROADCAST Game::server->Send(&bitStream, UNASSIGNED_SYSTEM_ADDRESS, true);
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -101,7 +101,7 @@ enum class eReplicaComponentType : uint32_t {
|
|||||||
TRADE,
|
TRADE,
|
||||||
USER_CONTROL,
|
USER_CONTROL,
|
||||||
IGNORE_LIST,
|
IGNORE_LIST,
|
||||||
ROCKET_LAUNCH_LUP,
|
MULTI_ZONE_ENTRANCE,
|
||||||
BUFF_REAL, // the real buff component, should just be name BUFF
|
BUFF_REAL, // the real buff component, should just be name BUFF
|
||||||
INTERACTION_MANAGER,
|
INTERACTION_MANAGER,
|
||||||
DONATION_VENDOR,
|
DONATION_VENDOR,
|
||||||
|
|||||||
16
dCommon/dEnums/eSkillBar.h
Normal file
16
dCommon/dEnums/eSkillBar.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __ESKILLBAR_H__
|
||||||
|
#define __ESKILLBAR_H__
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
enum class eSkillBar : int32_t {
|
||||||
|
Primary,
|
||||||
|
Gear,
|
||||||
|
ClassPrimary,
|
||||||
|
ClassSecondary,
|
||||||
|
Consumable
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __ESKILLBAR_H__
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "GeneralUtils.h"
|
|
||||||
|
|
||||||
#include "Game.h"
|
|
||||||
#include "dLogger.h"
|
|
||||||
#include "dServer.h"
|
|
||||||
|
|
||||||
#include "CDTable.h"
|
|
||||||
|
|
||||||
template <
|
|
||||||
typename KeyType,
|
|
||||||
typename MappedType
|
|
||||||
>
|
|
||||||
class CDAbstractProvider
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual void LoadClient() = 0;
|
|
||||||
virtual void LoadHost() = 0;
|
|
||||||
|
|
||||||
virtual const MappedType& GetEntry(const KeyType& key, const MappedType& defaultValue) = 0;
|
|
||||||
};
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "GeneralUtils.h"
|
|
||||||
|
|
||||||
#include "Game.h"
|
|
||||||
#include "dLogger.h"
|
|
||||||
#include "dServer.h"
|
|
||||||
|
|
||||||
#include "CDTable.h"
|
|
||||||
|
|
||||||
#include "CDAbstractProvider.h"
|
|
||||||
|
|
||||||
#include <boost/interprocess/managed_shared_memory.hpp>
|
|
||||||
#include <boost/interprocess/containers/map.hpp>
|
|
||||||
#include <boost/interprocess/allocators/allocator.hpp>
|
|
||||||
#include <boost/interprocess/containers/string.hpp>
|
|
||||||
#include <functional>
|
|
||||||
#include <utility>
|
|
||||||
#include <chrono>
|
|
||||||
|
|
||||||
template <
|
|
||||||
typename KeyType,
|
|
||||||
typename MappedType
|
|
||||||
>
|
|
||||||
class CDAbstractSharedMemoryMap : public CDAbstractProvider<KeyType, MappedType>
|
|
||||||
{
|
|
||||||
typedef std::pair<const KeyType, MappedType> ValueType;
|
|
||||||
|
|
||||||
typedef boost::interprocess::allocator<ValueType, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator;
|
|
||||||
|
|
||||||
typedef boost::interprocess::map<KeyType, MappedType, std::less<KeyType>, ShmemAllocator> Map;
|
|
||||||
|
|
||||||
public:
|
|
||||||
std::map<KeyType, MappedType> m_CacheMap;
|
|
||||||
|
|
||||||
std::string m_Name;
|
|
||||||
|
|
||||||
size_t m_Size;
|
|
||||||
|
|
||||||
bool m_Host;
|
|
||||||
Map* m_HostEntries;
|
|
||||||
|
|
||||||
boost::interprocess::managed_shared_memory m_ClientSegment;
|
|
||||||
ShmemAllocator* m_ClientAllocInst;
|
|
||||||
boost::interprocess::offset_ptr<Map> m_ClientEntires;
|
|
||||||
|
|
||||||
CDAbstractSharedMemoryMap(std::string name, size_t size)
|
|
||||||
{
|
|
||||||
m_Name = name;
|
|
||||||
m_Size = size;
|
|
||||||
m_Host = false;
|
|
||||||
m_HostEntries = nullptr;
|
|
||||||
m_ClientAllocInst = nullptr;
|
|
||||||
m_ClientEntires = nullptr;
|
|
||||||
|
|
||||||
LoadClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
const MappedType& GetEntry(const KeyType& key, const MappedType& defaultValue) override {
|
|
||||||
const auto& cacheIt = m_CacheMap.find(key);
|
|
||||||
if (cacheIt != m_CacheMap.end()) {
|
|
||||||
return cacheIt->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto& it = m_ClientEntires->find(key);
|
|
||||||
if (it == m_ClientEntires->end()) {
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
const void SetEntry(const KeyType& key, const MappedType& value) {
|
|
||||||
if (m_Host) {
|
|
||||||
// If we are already hosting, we cannot add to the map, throw an error
|
|
||||||
throw std::runtime_error("Can not add to a map that is already being hosted");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_CacheMap.emplace(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadClient() override {
|
|
||||||
try {
|
|
||||||
m_ClientSegment = boost::interprocess::managed_shared_memory(boost::interprocess::open_read_only, m_Name.c_str());
|
|
||||||
|
|
||||||
m_ClientAllocInst = new ShmemAllocator(m_ClientSegment.get_segment_manager());
|
|
||||||
|
|
||||||
m_ClientEntires = m_ClientSegment.find<Map>(m_Name.c_str()).first;
|
|
||||||
|
|
||||||
if (m_ClientEntires == nullptr) {
|
|
||||||
throw std::runtime_error("Could not find shared memory segment " + m_Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (std::exception &e) {
|
|
||||||
// Not open
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadHost() override {
|
|
||||||
try {
|
|
||||||
boost::interprocess::shared_memory_object::remove(m_Name.c_str());
|
|
||||||
|
|
||||||
boost::interprocess::managed_shared_memory segment(boost::interprocess::create_only, m_Name.c_str(), m_Size);
|
|
||||||
|
|
||||||
ShmemAllocator alloc(segment.get_segment_manager());
|
|
||||||
|
|
||||||
m_HostEntries = segment.construct<Map>(m_Name.c_str()) (std::less<KeyType>(), alloc);
|
|
||||||
|
|
||||||
// Copy cache
|
|
||||||
for (const auto& pair : m_CacheMap) {
|
|
||||||
m_HostEntries->insert(std::make_pair(pair.first, pair.second));
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Host = true;
|
|
||||||
|
|
||||||
LoadClient();
|
|
||||||
} catch (std::exception &e) {
|
|
||||||
// Make sure the smemory is removed
|
|
||||||
boost::interprocess::shared_memory_object::remove(m_Name.c_str());
|
|
||||||
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "CDAbstractProvider.h"
|
|
||||||
|
|
||||||
#include <boost/interprocess/managed_shared_memory.hpp>
|
|
||||||
#include <boost/interprocess/containers/map.hpp>
|
|
||||||
#include <boost/interprocess/allocators/allocator.hpp>
|
|
||||||
#include <boost/interprocess/containers/string.hpp>
|
|
||||||
#include <functional>
|
|
||||||
#include <utility>
|
|
||||||
#include <chrono>
|
|
||||||
#include <mutex>
|
|
||||||
|
|
||||||
template <
|
|
||||||
typename KeyType,
|
|
||||||
typename MappedType
|
|
||||||
>
|
|
||||||
class CDAbstractSharedMemoryProvider : public CDAbstractProvider<KeyType, MappedType>
|
|
||||||
{
|
|
||||||
typedef std::pair<const KeyType, MappedType> ValueType;
|
|
||||||
|
|
||||||
typedef boost::interprocess::allocator<ValueType, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator;
|
|
||||||
|
|
||||||
typedef boost::interprocess::map<KeyType, MappedType, std::less<KeyType>, ShmemAllocator> Map;
|
|
||||||
|
|
||||||
public:
|
|
||||||
std::string m_Name;
|
|
||||||
std::string m_MapName;
|
|
||||||
std::function <ValueType(CppSQLite3Query&)> m_ParseEntry;
|
|
||||||
std::function <int32_t(int32_t)> m_CalculateSize;
|
|
||||||
|
|
||||||
bool m_Cache;
|
|
||||||
|
|
||||||
std::unordered_map<KeyType, MappedType> m_CacheMap;
|
|
||||||
|
|
||||||
bool m_Host;
|
|
||||||
Map* m_HostEntries;
|
|
||||||
|
|
||||||
boost::interprocess::managed_shared_memory m_ClientSegment;
|
|
||||||
ShmemAllocator* m_ClientAllocInst;
|
|
||||||
boost::interprocess::offset_ptr<Map> m_ClientEntires;
|
|
||||||
|
|
||||||
CDAbstractSharedMemoryProvider(std::string name, std::function <ValueType(CppSQLite3Query&)> parseEntry, std::function <int32_t(int32_t)> calculateSize, bool cache)
|
|
||||||
{
|
|
||||||
m_Name = name;
|
|
||||||
m_MapName = name + "Map";
|
|
||||||
m_ParseEntry = parseEntry;
|
|
||||||
m_CalculateSize = calculateSize;
|
|
||||||
m_Cache = cache;
|
|
||||||
m_Host = false;
|
|
||||||
m_HostEntries = nullptr;
|
|
||||||
|
|
||||||
LoadClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
const MappedType& GetEntry(const KeyType& key, const MappedType& defaultValue) override {
|
|
||||||
if (m_Host) {
|
|
||||||
auto it = m_HostEntries->find(key);
|
|
||||||
if (it == m_HostEntries->end())
|
|
||||||
{
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_Cache) {
|
|
||||||
auto it = m_CacheMap.find(key);
|
|
||||||
if (it != m_CacheMap.end()) {
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto& it = m_ClientEntires->find(key);
|
|
||||||
if (it == m_ClientEntires->end())
|
|
||||||
{
|
|
||||||
if (m_Cache) {
|
|
||||||
m_CacheMap.emplace(key, defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_Cache) {
|
|
||||||
m_CacheMap.emplace(key, it->second);
|
|
||||||
}
|
|
||||||
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadClient() override {
|
|
||||||
try {
|
|
||||||
m_ClientSegment = boost::interprocess::managed_shared_memory(boost::interprocess::open_read_only, m_MapName.c_str());
|
|
||||||
|
|
||||||
m_ClientAllocInst = new ShmemAllocator(m_ClientSegment.get_segment_manager());
|
|
||||||
|
|
||||||
m_ClientEntires = m_ClientSegment.find<Map>(m_Name.c_str()).first;
|
|
||||||
|
|
||||||
if (m_ClientEntires == nullptr) {
|
|
||||||
throw std::runtime_error("Could not find shared memory segment " + m_Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (boost::interprocess::interprocess_exception& e) {
|
|
||||||
// Not open
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadHost() override {
|
|
||||||
try {
|
|
||||||
boost::interprocess::shared_memory_object::remove(m_MapName.c_str());
|
|
||||||
|
|
||||||
auto sizeQuery = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM " + m_Name);
|
|
||||||
|
|
||||||
if (sizeQuery.eof()) {
|
|
||||||
throw std::runtime_error("Could not get size of table " + m_Name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t size = sizeQuery.getIntField(0);
|
|
||||||
|
|
||||||
size = m_CalculateSize(size);
|
|
||||||
|
|
||||||
boost::interprocess::managed_shared_memory segment(boost::interprocess::create_only, m_MapName.c_str(), size);
|
|
||||||
|
|
||||||
ShmemAllocator alloc_inst (segment.get_segment_manager());
|
|
||||||
|
|
||||||
m_HostEntries = segment.construct<Map>(m_Name.c_str()) (std::less<KeyType>(), alloc_inst);
|
|
||||||
|
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM " + m_Name);
|
|
||||||
|
|
||||||
while (!tableData.eof()) {
|
|
||||||
ValueType entry = m_ParseEntry(tableData);
|
|
||||||
|
|
||||||
m_HostEntries->insert(entry);
|
|
||||||
|
|
||||||
tableData.nextRow();
|
|
||||||
}
|
|
||||||
|
|
||||||
tableData.finalize();
|
|
||||||
|
|
||||||
m_Host = true;
|
|
||||||
|
|
||||||
LoadClient();
|
|
||||||
} catch (std::exception &e) {
|
|
||||||
// Make sure the smemory is removed
|
|
||||||
boost::interprocess::shared_memory_object::remove(m_MapName.c_str());
|
|
||||||
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "GeneralUtils.h"
|
|
||||||
|
|
||||||
#include "Game.h"
|
|
||||||
#include "dLogger.h"
|
|
||||||
#include "dServer.h"
|
|
||||||
|
|
||||||
#include "CDTable.h"
|
|
||||||
|
|
||||||
#include "CDAbstractProvider.h"
|
|
||||||
|
|
||||||
template <
|
|
||||||
typename KeyType,
|
|
||||||
typename MappedType
|
|
||||||
>
|
|
||||||
class CDAbstractSqliteProvider : public CDAbstractProvider<KeyType, MappedType>
|
|
||||||
{
|
|
||||||
typedef std::pair<const KeyType, MappedType> ValueType;
|
|
||||||
|
|
||||||
public:
|
|
||||||
std::string m_Name;
|
|
||||||
std::function <ValueType(CppSQLite3Query&)> m_ParseEntry;
|
|
||||||
|
|
||||||
std::unordered_map<KeyType, MappedType> m_Entries;
|
|
||||||
|
|
||||||
CDAbstractSqliteProvider(std::string name, std::function <ValueType(CppSQLite3Query&)> parseEntry, bool cache)
|
|
||||||
{
|
|
||||||
m_Name = name;
|
|
||||||
m_ParseEntry = parseEntry;
|
|
||||||
|
|
||||||
LoadClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadClient() override {
|
|
||||||
// First, get the size of the table
|
|
||||||
uint32_t size = 0;
|
|
||||||
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM " + m_Name);
|
|
||||||
while (!tableSize.eof()) {
|
|
||||||
size = tableSize.getIntField(0, 0);
|
|
||||||
|
|
||||||
tableSize.nextRow();
|
|
||||||
}
|
|
||||||
|
|
||||||
tableSize.finalize();
|
|
||||||
|
|
||||||
// Reserve the size
|
|
||||||
m_Entries.reserve(size);
|
|
||||||
|
|
||||||
// Now get the data
|
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM " + m_Name);
|
|
||||||
while (!tableData.eof()) {
|
|
||||||
auto entry = m_ParseEntry(tableData);
|
|
||||||
|
|
||||||
m_Entries.insert(entry);
|
|
||||||
|
|
||||||
tableData.nextRow();
|
|
||||||
}
|
|
||||||
|
|
||||||
tableData.finalize();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoadHost() override {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const MappedType& GetEntry(const KeyType& key, const MappedType& defaultValue) override {
|
|
||||||
auto it = m_Entries.find(key);
|
|
||||||
if (it != m_Entries.end()) {
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -13,14 +13,6 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
// 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 {
|
namespace CDClientDatabase {
|
||||||
|
|
||||||
|
|||||||
@@ -38,51 +38,53 @@
|
|||||||
#include "CDFeatureGatingTable.h"
|
#include "CDFeatureGatingTable.h"
|
||||||
#include "CDRailActivatorComponent.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() {
|
CDClientManager::CDClientManager() {
|
||||||
CDActivityRewardsTable::Instance();
|
CDActivityRewardsTable::Instance().LoadValuesFromDatabase();
|
||||||
CDAnimationsTable::Instance();
|
CDActivitiesTable::Instance().LoadValuesFromDatabase();
|
||||||
CDBehaviorParameterTable::Instance();
|
CDCLIENT_DONT_CACHE_TABLE(CDAnimationsTable::Instance().LoadValuesFromDatabase());
|
||||||
CDBehaviorTemplateTable::Instance();
|
CDBehaviorParameterTable::Instance().LoadValuesFromDatabase();
|
||||||
CDComponentsRegistryTable::Instance();
|
CDBehaviorTemplateTable::Instance().LoadValuesFromDatabase();
|
||||||
CDCurrencyTableTable::Instance();
|
CDBrickIDTableTable::Instance().LoadValuesFromDatabase();
|
||||||
CDDestructibleComponentTable::Instance();
|
CDComponentsRegistryTable::Instance().LoadValuesFromDatabase();
|
||||||
CDEmoteTableTable::Instance();
|
CDCurrencyTableTable::Instance().LoadValuesFromDatabase();
|
||||||
CDInventoryComponentTable::Instance();
|
CDDestructibleComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDItemComponentTable::Instance();
|
CDEmoteTableTable::Instance().LoadValuesFromDatabase();
|
||||||
CDItemSetsTable::Instance();
|
CDFeatureGatingTable::Instance().LoadValuesFromDatabase();
|
||||||
CDItemSetSkillsTable::Instance();
|
CDInventoryComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDLevelProgressionLookupTable::Instance();
|
CDCLIENT_DONT_CACHE_TABLE(CDItemComponentTable::Instance().LoadValuesFromDatabase());
|
||||||
CDLootMatrixTable::Instance();
|
CDItemSetSkillsTable::Instance().LoadValuesFromDatabase();
|
||||||
CDLootTableTable::Instance();
|
CDItemSetsTable::Instance().LoadValuesFromDatabase();
|
||||||
CDMissionNPCComponentTable::Instance();
|
CDLevelProgressionLookupTable::Instance().LoadValuesFromDatabase();
|
||||||
CDMissionTasksTable::Instance();
|
CDLootMatrixTable::Instance().LoadValuesFromDatabase();
|
||||||
CDMissionsTable::Instance();
|
CDLootTableTable::Instance().LoadValuesFromDatabase();
|
||||||
CDObjectSkillsTable::Instance();
|
CDMissionEmailTable::Instance().LoadValuesFromDatabase();
|
||||||
CDObjectsTable::Instance();
|
CDMissionNPCComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDPhysicsComponentTable::Instance();
|
CDMissionTasksTable::Instance().LoadValuesFromDatabase();
|
||||||
CDRebuildComponentTable::Instance();
|
CDMissionsTable::Instance().LoadValuesFromDatabase();
|
||||||
CDScriptComponentTable::Instance();
|
CDMovementAIComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDSkillBehaviorTable::Instance();
|
CDObjectSkillsTable::Instance().LoadValuesFromDatabase();
|
||||||
CDZoneTableTable::Instance();
|
CDCLIENT_DONT_CACHE_TABLE(CDObjectsTable::Instance().LoadValuesFromDatabase());
|
||||||
CDVendorComponentTable::Instance();
|
CDPhysicsComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDActivitiesTable::Instance();
|
CDPackageComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDPackageComponentTable::Instance();
|
CDProximityMonitorComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDProximityMonitorComponentTable::Instance();
|
CDPropertyEntranceComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDMovementAIComponentTable::Instance();
|
CDPropertyTemplateTable::Instance().LoadValuesFromDatabase();
|
||||||
CDBrickIDTableTable::Instance();
|
CDRailActivatorComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDRarityTableTable::Instance();
|
CDRarityTableTable::Instance().LoadValuesFromDatabase();
|
||||||
CDMissionEmailTable::Instance();
|
CDRebuildComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDRewardsTable::Instance();
|
CDRewardsTable::Instance().LoadValuesFromDatabase();
|
||||||
CDPropertyEntranceComponentTable::Instance();
|
CDScriptComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDPropertyTemplateTable::Instance();
|
CDSkillBehaviorTable::Instance().LoadValuesFromDatabase();
|
||||||
CDFeatureGatingTable::Instance();
|
CDVendorComponentTable::Instance().LoadValuesFromDatabase();
|
||||||
CDRailActivatorComponentTable::Instance();
|
CDZoneTableTable::Instance().LoadValuesFromDatabase();
|
||||||
}
|
|
||||||
|
|
||||||
void CDClientManager::LoadHost() {
|
|
||||||
for (auto itr = this->tables.begin(); itr != this->tables.end(); ++itr) {
|
|
||||||
itr->second->LoadHost();
|
|
||||||
}
|
|
||||||
|
|
||||||
CDTable::InitalizeHost();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "CDAbstractProvider.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Shared memory provider with CDAbstractSharedMemoryProvider<key, value>
|
|
||||||
*
|
|
||||||
* Depends on the boost::interprocess library — header only
|
|
||||||
*
|
|
||||||
* Requires that CD_PROVIDER_MEMORY is defined and CD_PROVIDER_SQLITE is not defined
|
|
||||||
*/
|
|
||||||
#if defined(CD_PROVIDER_MEMORY) && !defined(CD_PROVIDER_SQLITE)
|
|
||||||
|
|
||||||
#include "CDAbstractSharedMemoryProvider.h"
|
|
||||||
|
|
||||||
#define CD_PROVIDER(provider, key, value) CDAbstractSharedMemoryProvider<key, value>* provider; typedef key CD_KEY; typedef value CD_VALUE
|
|
||||||
#define NEW_CD_PROVIDER(provider, name, parser, size_calculator, cache) provider = new CDAbstractSharedMemoryProvider<CD_KEY, CD_VALUE>(name, parser, size_calculator, cache)
|
|
||||||
|
|
||||||
template<typename KeyType, typename MappedType>
|
|
||||||
using CDProvider = CDAbstractSharedMemoryProvider<KeyType, MappedType>;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SQLite provider with CDAbstractSqliteProvider<key, value>
|
|
||||||
*
|
|
||||||
* No extra dependencies
|
|
||||||
*
|
|
||||||
* Requires that CD_PROVIDER_SQLITE or CD_PROVIDER_MEMORY is not defined — the default option
|
|
||||||
*/
|
|
||||||
#if defined(CD_PROVIDER_SQLITE) || !defined(CD_PROVIDER_MEMORY)
|
|
||||||
|
|
||||||
#include "CDAbstractSqliteProvider.h"
|
|
||||||
|
|
||||||
#define CD_PROVIDER(provider, key, value) CDAbstractSqliteProvider<key, value>* provider; typedef key CD_KEY; typedef value CD_VALUE
|
|
||||||
#define NEW_CD_PROVIDER(provider, name, parser, size_calculator, cache) provider = new CDAbstractSqliteProvider<CD_KEY, CD_VALUE>(name, parser, cache)
|
|
||||||
|
|
||||||
template<typename KeyType, typename MappedType>
|
|
||||||
using CDProvider = CDAbstractSqliteProvider<KeyType, MappedType>;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDActivitiesTable.h"
|
#include "CDActivitiesTable.h"
|
||||||
|
|
||||||
CDActivitiesTable::CDActivitiesTable(void) {
|
void CDActivitiesTable::LoadValuesFromDatabase() {
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM Activities");
|
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM Activities");
|
||||||
@@ -55,8 +54,3 @@ std::vector<CDActivities> CDActivitiesTable::Query(std::function<bool(CDActiviti
|
|||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDActivities> CDActivitiesTable::GetEntries(void) const {
|
|
||||||
return this->entries;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,9 +30,10 @@ private:
|
|||||||
std::vector<CDActivities> entries;
|
std::vector<CDActivities> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDActivitiesTable();
|
void LoadValuesFromDatabase();
|
||||||
|
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDActivities> Query(std::function<bool(CDActivities)> predicate);
|
std::vector<CDActivities> Query(std::function<bool(CDActivities)> predicate);
|
||||||
|
|
||||||
std::vector<CDActivities> GetEntries(void) const;
|
const std::vector<CDActivities>& GetEntries() const { return this->entries; }
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "CDActivityRewardsTable.h"
|
#include "CDActivityRewardsTable.h"
|
||||||
|
|
||||||
CDActivityRewardsTable::CDActivityRewardsTable(void) {
|
void CDActivityRewardsTable::LoadValuesFromDatabase() {
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -43,8 +43,3 @@ std::vector<CDActivityRewards> CDActivityRewardsTable::Query(std::function<bool(
|
|||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDActivityRewards> CDActivityRewardsTable::GetEntries(void) const {
|
|
||||||
return this->entries;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ private:
|
|||||||
std::vector<CDActivityRewards> entries;
|
std::vector<CDActivityRewards> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDActivityRewardsTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDActivityRewards> Query(std::function<bool(CDActivityRewards)> predicate);
|
std::vector<CDActivityRewards> Query(std::function<bool(CDActivityRewards)> predicate);
|
||||||
|
|
||||||
std::vector<CDActivityRewards> GetEntries(void) const;
|
std::vector<CDActivityRewards> GetEntries() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,6 +2,35 @@
|
|||||||
#include "GeneralUtils.h"
|
#include "GeneralUtils.h"
|
||||||
#include "Game.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) {
|
bool CDAnimationsTable::CacheData(CppSQLite3Statement& queryToCache) {
|
||||||
auto tableData = queryToCache.execQuery();
|
auto tableData = queryToCache.execQuery();
|
||||||
// If we received a bad lookup, cache it anyways so we do not run the query again.
|
// If we received a bad lookup, cache it anyways so we do not run the query again.
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ class CDAnimationsTable : public CDTable<CDAnimationsTable> {
|
|||||||
typedef std::string AnimationID;
|
typedef std::string AnimationID;
|
||||||
typedef std::pair<std::string, AnimationGroupID> CDAnimationKey;
|
typedef std::pair<std::string, AnimationGroupID> CDAnimationKey;
|
||||||
public:
|
public:
|
||||||
|
void LoadValuesFromDatabase();
|
||||||
/**
|
/**
|
||||||
* Given an animationType and the previousAnimationName played, return the next animationType to play.
|
* 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
|
* If there are more than 1 animationTypes that can be played, one is selected at random but also does not allow
|
||||||
|
|||||||
@@ -1,53 +1,55 @@
|
|||||||
#include "CDBehaviorParameterTable.h"
|
#include "CDBehaviorParameterTable.h"
|
||||||
#include "GeneralUtils.h"
|
#include "GeneralUtils.h"
|
||||||
|
|
||||||
CDBehaviorParameterTable::CDBehaviorParameterTable(void) {
|
uint64_t GetKey(const uint32_t behaviorID, const uint32_t parameterID) {
|
||||||
|
uint64_t key = behaviorID;
|
||||||
|
key <<= 31U;
|
||||||
|
key |= parameterID;
|
||||||
|
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDBehaviorParameterTable::LoadValuesFromDatabase() {
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM BehaviorParameter");
|
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM BehaviorParameter");
|
||||||
uint32_t uniqueParameterId = 0;
|
|
||||||
uint64_t hash = 0;
|
|
||||||
while (!tableData.eof()) {
|
while (!tableData.eof()) {
|
||||||
CDBehaviorParameter entry;
|
uint32_t behaviorID = tableData.getIntField("behaviorID", -1);
|
||||||
entry.behaviorID = tableData.getIntField("behaviorID", -1);
|
|
||||||
auto candidateStringToAdd = std::string(tableData.getStringField("parameterID", ""));
|
auto candidateStringToAdd = std::string(tableData.getStringField("parameterID", ""));
|
||||||
auto parameter = m_ParametersList.find(candidateStringToAdd);
|
auto parameter = m_ParametersList.find(candidateStringToAdd);
|
||||||
|
uint32_t parameterId;
|
||||||
if (parameter != m_ParametersList.end()) {
|
if (parameter != m_ParametersList.end()) {
|
||||||
entry.parameterID = parameter;
|
parameterId = parameter->second;
|
||||||
} else {
|
} else {
|
||||||
entry.parameterID = m_ParametersList.insert(std::make_pair(candidateStringToAdd, uniqueParameterId)).first;
|
parameterId = m_ParametersList.insert(std::make_pair(candidateStringToAdd, m_ParametersList.size())).first->second;
|
||||||
uniqueParameterId++;
|
|
||||||
}
|
}
|
||||||
hash = entry.behaviorID;
|
uint64_t hash = GetKey(behaviorID, parameterId);
|
||||||
hash = (hash << 31U) | entry.parameterID->second;
|
float value = tableData.getFloatField("value", -1.0f);
|
||||||
entry.value = tableData.getFloatField("value", -1.0f);
|
|
||||||
|
|
||||||
m_Entries.insert(std::make_pair(hash, entry));
|
m_Entries.insert(std::make_pair(hash, value));
|
||||||
|
|
||||||
|
tableData.nextRow();
|
||||||
}
|
}
|
||||||
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
float CDBehaviorParameterTable::GetValue(const uint32_t behaviorID, const std::string& name, const float defaultValue) {
|
float CDBehaviorParameterTable::GetValue(const uint32_t behaviorID, const std::string& name, const float defaultValue) {
|
||||||
auto parameterID = this->m_ParametersList.find(name);
|
auto parameterID = this->m_ParametersList.find(name);
|
||||||
if (parameterID == this->m_ParametersList.end()) return defaultValue;
|
if (parameterID == this->m_ParametersList.end()) return defaultValue;
|
||||||
|
auto hash = GetKey(behaviorID, parameterID->second);
|
||||||
uint64_t hash = behaviorID;
|
|
||||||
|
|
||||||
hash = (hash << 31U) | parameterID->second;
|
|
||||||
|
|
||||||
// Search for specific parameter
|
// Search for specific parameter
|
||||||
const auto& it = m_Entries.find(hash);
|
auto it = m_Entries.find(hash);
|
||||||
return it != m_Entries.end() ? it->second.value : defaultValue;
|
return it != m_Entries.end() ? it->second : defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<std::string, float> CDBehaviorParameterTable::GetParametersByBehaviorID(uint32_t behaviorID) {
|
std::map<std::string, float> CDBehaviorParameterTable::GetParametersByBehaviorID(uint32_t behaviorID) {
|
||||||
uint64_t hashBase = behaviorID;
|
uint64_t hashBase = behaviorID;
|
||||||
std::map<std::string, float> returnInfo;
|
std::map<std::string, float> returnInfo;
|
||||||
uint64_t hash;
|
for (auto& [parameterString, parameterId] : m_ParametersList) {
|
||||||
for (auto& parameterCandidate : m_ParametersList) {
|
uint64_t hash = GetKey(hashBase, parameterId);
|
||||||
hash = (hashBase << 31U) | parameterCandidate.second;
|
|
||||||
auto infoCandidate = m_Entries.find(hash);
|
auto infoCandidate = m_Entries.find(hash);
|
||||||
if (infoCandidate != m_Entries.end()) {
|
if (infoCandidate != m_Entries.end()) {
|
||||||
returnInfo.insert(std::make_pair(infoCandidate->second.parameterID->first, infoCandidate->second.value));
|
returnInfo.insert(std::make_pair(parameterString, infoCandidate->second));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return returnInfo;
|
return returnInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,18 +5,15 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
struct CDBehaviorParameter {
|
|
||||||
unsigned int behaviorID; //!< The Behavior ID
|
|
||||||
std::unordered_map<std::string, uint32_t>::iterator parameterID; //!< The Parameter ID
|
|
||||||
float value; //!< The value of the behavior template
|
|
||||||
};
|
|
||||||
|
|
||||||
class CDBehaviorParameterTable : public CDTable<CDBehaviorParameterTable> {
|
class CDBehaviorParameterTable : public CDTable<CDBehaviorParameterTable> {
|
||||||
private:
|
private:
|
||||||
std::unordered_map<uint64_t, CDBehaviorParameter> m_Entries;
|
typedef uint64_t BehaviorParameterHash;
|
||||||
|
typedef float BehaviorParameterValue;
|
||||||
|
std::unordered_map<BehaviorParameterHash, BehaviorParameterValue> m_Entries;
|
||||||
std::unordered_map<std::string, uint32_t> m_ParametersList;
|
std::unordered_map<std::string, uint32_t> m_ParametersList;
|
||||||
public:
|
public:
|
||||||
CDBehaviorParameterTable();
|
void LoadValuesFromDatabase();
|
||||||
|
|
||||||
float GetValue(const uint32_t behaviorID, const std::string& name, const float defaultValue = 0);
|
float GetValue(const uint32_t behaviorID, const std::string& name, const float defaultValue = 0);
|
||||||
|
|
||||||
std::map<std::string, float> GetParametersByBehaviorID(uint32_t behaviorID);
|
std::map<std::string, float> GetParametersByBehaviorID(uint32_t behaviorID);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "CDBehaviorTemplateTable.h"
|
#include "CDBehaviorTemplateTable.h"
|
||||||
|
|
||||||
CDBehaviorTemplateTable::CDBehaviorTemplateTable(void) {
|
void CDBehaviorTemplateTable::LoadValuesFromDatabase() {
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -48,7 +48,7 @@ std::vector<CDBehaviorTemplate> CDBehaviorTemplateTable::Query(std::function<boo
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDBehaviorTemplate> CDBehaviorTemplateTable::GetEntries(void) const {
|
const std::vector<CDBehaviorTemplate>& CDBehaviorTemplateTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,4 +64,3 @@ const CDBehaviorTemplate CDBehaviorTemplateTable::GetByBehaviorID(uint32_t behav
|
|||||||
return entry->second;
|
return entry->second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ struct CDBehaviorTemplate {
|
|||||||
unsigned int behaviorID; //!< The Behavior ID
|
unsigned int behaviorID; //!< The Behavior ID
|
||||||
unsigned int templateID; //!< The Template ID (LOT)
|
unsigned int templateID; //!< The Template ID (LOT)
|
||||||
unsigned int effectID; //!< The Effect ID attached
|
unsigned int effectID; //!< The Effect ID attached
|
||||||
size_t effectHandle; //!< The effect handle
|
std::unordered_set<std::string>::iterator effectHandle; //!< The effect handle
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -19,11 +19,12 @@ private:
|
|||||||
std::unordered_map<uint32_t, CDBehaviorTemplate> entriesMappedByBehaviorID;
|
std::unordered_map<uint32_t, CDBehaviorTemplate> entriesMappedByBehaviorID;
|
||||||
std::unordered_set<std::string> m_EffectHandles;
|
std::unordered_set<std::string> m_EffectHandles;
|
||||||
public:
|
public:
|
||||||
CDBehaviorTemplateTable();
|
void LoadValuesFromDatabase();
|
||||||
|
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDBehaviorTemplate> Query(std::function<bool(CDBehaviorTemplate)> predicate);
|
std::vector<CDBehaviorTemplate> Query(std::function<bool(CDBehaviorTemplate)> predicate);
|
||||||
|
|
||||||
std::vector<CDBehaviorTemplate> GetEntries(void) const;
|
const std::vector<CDBehaviorTemplate>& GetEntries(void) const;
|
||||||
|
|
||||||
const CDBehaviorTemplate GetByBehaviorID(uint32_t behaviorID);
|
const CDBehaviorTemplate GetByBehaviorID(uint32_t behaviorID);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "CDBrickIDTableTable.h"
|
#include "CDBrickIDTableTable.h"
|
||||||
|
|
||||||
CDBrickIDTableTable::CDBrickIDTableTable(void) {
|
void CDBrickIDTableTable::LoadValuesFromDatabase() {
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -39,7 +39,7 @@ std::vector<CDBrickIDTable> CDBrickIDTableTable::Query(std::function<bool(CDBric
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDBrickIDTable> CDBrickIDTableTable::GetEntries(void) const {
|
const std::vector<CDBrickIDTable>& CDBrickIDTableTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ private:
|
|||||||
std::vector<CDBrickIDTable> entries;
|
std::vector<CDBrickIDTable> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDBrickIDTableTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDBrickIDTable> Query(std::function<bool(CDBrickIDTable)> predicate);
|
std::vector<CDBrickIDTable> Query(std::function<bool(CDBrickIDTable)> predicate);
|
||||||
|
|
||||||
std::vector<CDBrickIDTable> GetEntries(void) const;
|
const std::vector<CDBrickIDTable>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,28 +1,37 @@
|
|||||||
|
|
||||||
#include "CDComponentsRegistryTable.h"
|
#include "CDComponentsRegistryTable.h"
|
||||||
#include "eReplicaComponentType.h"
|
#include "eReplicaComponentType.h"
|
||||||
|
|
||||||
#define CDCLIENT_CACHE_ALL
|
void CDComponentsRegistryTable::LoadValuesFromDatabase() {
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
// Now get the data
|
// Now get the data
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM ComponentsRegistry");
|
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM ComponentsRegistry");
|
||||||
|
while (!tableData.eof()) {
|
||||||
|
CDComponentsRegistry entry;
|
||||||
|
entry.id = tableData.getIntField("id", -1);
|
||||||
|
entry.component_type = static_cast<eReplicaComponentType>(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<int32_t>(id));
|
||||||
|
|
||||||
|
auto tableData = query.execQuery();
|
||||||
|
|
||||||
while (!tableData.eof()) {
|
while (!tableData.eof()) {
|
||||||
CDComponentsRegistry entry;
|
CDComponentsRegistry entry;
|
||||||
entry.id = tableData.getIntField("id", -1);
|
entry.id = tableData.getIntField("id", -1);
|
||||||
@@ -34,61 +43,10 @@ CDComponentsRegistryTable::CDComponentsRegistryTable(void) {
|
|||||||
tableData.nextRow();
|
tableData.nextRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
tableData.finalize();
|
mappedEntries.insert_or_assign(id, 0);
|
||||||
#endif
|
|
||||||
}
|
auto iter = this->mappedEntries.find(((uint64_t)componentType) << 32 | ((uint64_t)id));
|
||||||
|
|
||||||
int32_t CDComponentsRegistryTable::GetByIDAndType(uint32_t id, eReplicaComponentType componentType, int32_t defaultValue) {
|
return iter == this->mappedEntries.end() ? defaultValue : iter->second;
|
||||||
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<unsigned int, unsigned int> 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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ struct CDComponentsRegistry {
|
|||||||
|
|
||||||
class CDComponentsRegistryTable : public CDTable<CDComponentsRegistryTable> {
|
class CDComponentsRegistryTable : public CDTable<CDComponentsRegistryTable> {
|
||||||
private:
|
private:
|
||||||
std::map<uint64_t, uint32_t> mappedEntries; //id, component_type, component_id
|
std::unordered_map<uint64_t, uint32_t> mappedEntries; //id, component_type, component_id
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDComponentsRegistryTable();
|
void LoadValuesFromDatabase();
|
||||||
int32_t GetByIDAndType(uint32_t id, eReplicaComponentType componentType, int32_t defaultValue = 0);
|
int32_t GetByIDAndType(uint32_t id, eReplicaComponentType componentType, int32_t defaultValue = 0);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#include "CDCurrencyTableTable.h"
|
#include "CDCurrencyTableTable.h"
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CDCurrencyTableTable::CDCurrencyTableTable(void) {
|
void CDCurrencyTableTable::LoadValuesFromDatabase() {
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -43,7 +43,7 @@ std::vector<CDCurrencyTable> CDCurrencyTableTable::Query(std::function<bool(CDCu
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDCurrencyTable> CDCurrencyTableTable::GetEntries(void) const {
|
const std::vector<CDCurrencyTable>& CDCurrencyTableTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ private:
|
|||||||
std::vector<CDCurrencyTable> entries;
|
std::vector<CDCurrencyTable> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDCurrencyTableTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDCurrencyTable> Query(std::function<bool(CDCurrencyTable)> predicate);
|
std::vector<CDCurrencyTable> Query(std::function<bool(CDCurrencyTable)> predicate);
|
||||||
|
|
||||||
std::vector<CDCurrencyTable> GetEntries(void) const;
|
const std::vector<CDCurrencyTable>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#include "CDDestructibleComponentTable.h"
|
#include "CDDestructibleComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDDestructibleComponentTable::LoadValuesFromDatabase() {
|
||||||
CDDestructibleComponentTable::CDDestructibleComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM DestructibleComponent");
|
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM DestructibleComponent");
|
||||||
@@ -52,7 +50,7 @@ std::vector<CDDestructibleComponent> CDDestructibleComponentTable::Query(std::fu
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDDestructibleComponent> CDDestructibleComponentTable::GetEntries(void) const {
|
const std::vector<CDDestructibleComponent>& CDDestructibleComponentTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ private:
|
|||||||
std::vector<CDDestructibleComponent> entries;
|
std::vector<CDDestructibleComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDDestructibleComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDDestructibleComponent> Query(std::function<bool(CDDestructibleComponent)> predicate);
|
std::vector<CDDestructibleComponent> Query(std::function<bool(CDDestructibleComponent)> predicate);
|
||||||
|
|
||||||
std::vector<CDDestructibleComponent> GetEntries(void) const;
|
const std::vector<CDDestructibleComponent>& GetEntries(void) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,40 +1,26 @@
|
|||||||
#include "CDEmoteTable.h"
|
#include "CDEmoteTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDEmoteTableTable::LoadValuesFromDatabase() {
|
||||||
CDEmoteTableTable::CDEmoteTableTable(void) {
|
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM Emotes");
|
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM Emotes");
|
||||||
while (!tableData.eof()) {
|
while (!tableData.eof()) {
|
||||||
CDEmoteTable* entry = new CDEmoteTable();
|
CDEmoteTable entry;
|
||||||
entry->ID = tableData.getIntField("id", -1);
|
entry.ID = tableData.getIntField("id", -1);
|
||||||
entry->animationName = tableData.getStringField("animationName", "");
|
entry.animationName = tableData.getStringField("animationName", "");
|
||||||
entry->iconFilename = tableData.getStringField("iconFilename", "");
|
entry.iconFilename = tableData.getStringField("iconFilename", "");
|
||||||
entry->channel = tableData.getIntField("channel", -1);
|
entry.channel = tableData.getIntField("channel", -1);
|
||||||
entry->locked = tableData.getIntField("locked", -1) != 0;
|
entry.locked = tableData.getIntField("locked", -1) != 0;
|
||||||
entry->localize = tableData.getIntField("localize", -1) != 0;
|
entry.localize = tableData.getIntField("localize", -1) != 0;
|
||||||
entry->locState = tableData.getIntField("locStatus", -1);
|
entry.locState = tableData.getIntField("locStatus", -1);
|
||||||
entry->gateVersion = tableData.getStringField("gate_version", "");
|
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.nextRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Destructor
|
|
||||||
CDEmoteTableTable::~CDEmoteTableTable(void) {
|
|
||||||
for (auto e : entries) {
|
|
||||||
if (e.second) delete e.second;
|
|
||||||
}
|
|
||||||
|
|
||||||
entries.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
CDEmoteTable* CDEmoteTableTable::GetEmote(int id) {
|
CDEmoteTable* CDEmoteTableTable::GetEmote(int id) {
|
||||||
for (auto e : entries) {
|
auto itr = entries.find(id);
|
||||||
if (e.first == id) return e.second;
|
return itr != entries.end() ? &itr->second : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -28,11 +28,10 @@ struct CDEmoteTable {
|
|||||||
|
|
||||||
class CDEmoteTableTable : public CDTable<CDEmoteTableTable> {
|
class CDEmoteTableTable : public CDTable<CDEmoteTableTable> {
|
||||||
private:
|
private:
|
||||||
std::map<int, CDEmoteTable*> entries;
|
std::map<int, CDEmoteTable> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDEmoteTableTable();
|
void LoadValuesFromDatabase();
|
||||||
~CDEmoteTableTable();
|
|
||||||
// Returns an emote by ID
|
// Returns an emote by ID
|
||||||
CDEmoteTable* GetEmote(int id);
|
CDEmoteTable* GetEmote(int id);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDFeatureGatingTable.h"
|
#include "CDFeatureGatingTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDFeatureGatingTable::LoadValuesFromDatabase() {
|
||||||
CDFeatureGatingTable::CDFeatureGatingTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -53,7 +52,7 @@ bool CDFeatureGatingTable::FeatureUnlocked(const std::string& feature) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDFeatureGating> CDFeatureGatingTable::GetEntries(void) const {
|
const std::vector<CDFeatureGating>& CDFeatureGatingTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ private:
|
|||||||
std::vector<CDFeatureGating> entries;
|
std::vector<CDFeatureGating> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDFeatureGatingTable();
|
void LoadValuesFromDatabase();
|
||||||
|
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDFeatureGating> Query(std::function<bool(CDFeatureGating)> predicate);
|
std::vector<CDFeatureGating> Query(std::function<bool(CDFeatureGating)> predicate);
|
||||||
|
|
||||||
bool FeatureUnlocked(const std::string& feature) const;
|
bool FeatureUnlocked(const std::string& feature) const;
|
||||||
|
|
||||||
std::vector<CDFeatureGating> GetEntries(void) const;
|
const std::vector<CDFeatureGating>& GetEntries(void) const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDInventoryComponentTable.h"
|
#include "CDInventoryComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDInventoryComponentTable::LoadValuesFromDatabase() {
|
||||||
CDInventoryComponentTable::CDInventoryComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -42,7 +41,7 @@ std::vector<CDInventoryComponent> CDInventoryComponentTable::Query(std::function
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDInventoryComponent> CDInventoryComponentTable::GetEntries(void) const {
|
const std::vector<CDInventoryComponent>& CDInventoryComponentTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ private:
|
|||||||
std::vector<CDInventoryComponent> entries;
|
std::vector<CDInventoryComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDInventoryComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDInventoryComponent> Query(std::function<bool(CDInventoryComponent)> predicate);
|
std::vector<CDInventoryComponent> Query(std::function<bool(CDInventoryComponent)> predicate);
|
||||||
|
|
||||||
std::vector<CDInventoryComponent> GetEntries(void) const;
|
const std::vector<CDInventoryComponent>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,11 +3,7 @@
|
|||||||
|
|
||||||
CDItemComponent CDItemComponentTable::Default = {};
|
CDItemComponent CDItemComponentTable::Default = {};
|
||||||
|
|
||||||
//! Constructor
|
void CDItemComponentTable::LoadValuesFromDatabase() {
|
||||||
CDItemComponentTable::CDItemComponentTable(void) {
|
|
||||||
Default = CDItemComponent();
|
|
||||||
|
|
||||||
#ifdef CDCLIENT_CACHE_ALL
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM ItemComponent");
|
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM ItemComponent");
|
||||||
@@ -55,13 +51,13 @@ CDItemComponentTable::CDItemComponentTable(void) {
|
|||||||
entry.currencyLOT = tableData.getIntField("currencyLOT", -1);
|
entry.currencyLOT = tableData.getIntField("currencyLOT", -1);
|
||||||
entry.altCurrencyCost = tableData.getIntField("altCurrencyCost", -1);
|
entry.altCurrencyCost = tableData.getIntField("altCurrencyCost", -1);
|
||||||
entry.subItems = tableData.getStringField("subItems", "");
|
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.noEquipAnimation = tableData.getIntField("noEquipAnimation", -1) == 1 ? true : false;
|
||||||
entry.commendationLOT = tableData.getIntField("commendationLOT", -1);
|
entry.commendationLOT = tableData.getIntField("commendationLOT", -1);
|
||||||
entry.commendationCost = tableData.getIntField("commendationCost", -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.currencyCosts = tableData.getStringField("currencyCosts", "");
|
||||||
entry.ingredientInfo = tableData.getStringField("ingredientInfo", "");
|
UNUSED_COLUMN(entry.ingredientInfo = tableData.getStringField("ingredientInfo", ""));
|
||||||
entry.locStatus = tableData.getIntField("locStatus", -1);
|
entry.locStatus = tableData.getIntField("locStatus", -1);
|
||||||
entry.forgeType = tableData.getIntField("forgeType", -1);
|
entry.forgeType = tableData.getIntField("forgeType", -1);
|
||||||
entry.SellMultiplier = tableData.getFloatField("SellMultiplier", -1.0f);
|
entry.SellMultiplier = tableData.getFloatField("SellMultiplier", -1.0f);
|
||||||
@@ -71,7 +67,6 @@ CDItemComponentTable::CDItemComponentTable(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const CDItemComponent& CDItemComponentTable::GetItemComponentByID(unsigned int skillID) {
|
const CDItemComponent& CDItemComponentTable::GetItemComponentByID(unsigned int skillID) {
|
||||||
@@ -80,12 +75,10 @@ const CDItemComponent& CDItemComponentTable::GetItemComponentByID(unsigned int s
|
|||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CDCLIENT_CACHE_ALL
|
auto query = CDClientDatabase::CreatePreppedStmt("SELECT * FROM ItemComponent WHERE id = ?;");
|
||||||
std::stringstream query;
|
query.bind(1, static_cast<int32_t>(skillID));
|
||||||
|
|
||||||
query << "SELECT * FROM ItemComponent WHERE id = " << std::to_string(skillID);
|
auto tableData = query.execQuery();
|
||||||
|
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery(query.str());
|
|
||||||
if (tableData.eof()) {
|
if (tableData.eof()) {
|
||||||
entries.insert(std::make_pair(skillID, Default));
|
entries.insert(std::make_pair(skillID, Default));
|
||||||
return Default;
|
return Default;
|
||||||
@@ -144,7 +137,6 @@ const CDItemComponent& CDItemComponentTable::GetItemComponentByID(unsigned int s
|
|||||||
if (it2 != this->entries.end()) {
|
if (it2 != this->entries.end()) {
|
||||||
return it2->second;
|
return it2->second;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return Default;
|
return Default;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ private:
|
|||||||
std::map<unsigned int, CDItemComponent> entries;
|
std::map<unsigned int, CDItemComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDItemComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
static std::map<LOT, uint32_t> ParseCraftingCurrencies(const CDItemComponent& itemComponent);
|
static std::map<LOT, uint32_t> ParseCraftingCurrencies(const CDItemComponent& itemComponent);
|
||||||
|
|
||||||
// Gets an entry by ID
|
// Gets an entry by ID
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDItemSetSkillsTable.h"
|
#include "CDItemSetSkillsTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDItemSetSkillsTable::LoadValuesFromDatabase() {
|
||||||
CDItemSetSkillsTable::CDItemSetSkillsTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -41,7 +40,7 @@ std::vector<CDItemSetSkills> CDItemSetSkillsTable::Query(std::function<bool(CDIt
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDItemSetSkills> CDItemSetSkillsTable::GetEntries(void) const {
|
const std::vector<CDItemSetSkills>& CDItemSetSkillsTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ private:
|
|||||||
std::vector<CDItemSetSkills> entries;
|
std::vector<CDItemSetSkills> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDItemSetSkillsTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDItemSetSkills> Query(std::function<bool(CDItemSetSkills)> predicate);
|
std::vector<CDItemSetSkills> Query(std::function<bool(CDItemSetSkills)> predicate);
|
||||||
|
|
||||||
std::vector<CDItemSetSkills> GetEntries(void) const;
|
const std::vector<CDItemSetSkills>& GetEntries() const;
|
||||||
|
|
||||||
std::vector<CDItemSetSkills> GetBySkillID(unsigned int SkillSetID);
|
std::vector<CDItemSetSkills> GetBySkillID(unsigned int SkillSetID);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDItemSetsTable.h"
|
#include "CDItemSetsTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDItemSetsTable::LoadValuesFromDatabase() {
|
||||||
CDItemSetsTable::CDItemSetsTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -53,7 +52,7 @@ std::vector<CDItemSets> CDItemSetsTable::Query(std::function<bool(CDItemSets)> p
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDItemSets> CDItemSetsTable::GetEntries(void) const {
|
const std::vector<CDItemSets>& CDItemSetsTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,10 +26,10 @@ private:
|
|||||||
std::vector<CDItemSets> entries;
|
std::vector<CDItemSets> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDItemSetsTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDItemSets> Query(std::function<bool(CDItemSets)> predicate);
|
std::vector<CDItemSets> Query(std::function<bool(CDItemSets)> predicate);
|
||||||
|
|
||||||
std::vector<CDItemSets> GetEntries(void) const;
|
const std::vector<CDItemSets>& GetEntries(void) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDLevelProgressionLookupTable.h"
|
#include "CDLevelProgressionLookupTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDLevelProgressionLookupTable::LoadValuesFromDatabase() {
|
||||||
CDLevelProgressionLookupTable::CDLevelProgressionLookupTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -32,7 +31,6 @@ CDLevelProgressionLookupTable::CDLevelProgressionLookupTable(void) {
|
|||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Queries the table with a custom "where" clause
|
|
||||||
std::vector<CDLevelProgressionLookup> CDLevelProgressionLookupTable::Query(std::function<bool(CDLevelProgressionLookup)> predicate) {
|
std::vector<CDLevelProgressionLookup> CDLevelProgressionLookupTable::Query(std::function<bool(CDLevelProgressionLookup)> predicate) {
|
||||||
|
|
||||||
std::vector<CDLevelProgressionLookup> data = cpplinq::from(this->entries)
|
std::vector<CDLevelProgressionLookup> data = cpplinq::from(this->entries)
|
||||||
@@ -42,8 +40,7 @@ std::vector<CDLevelProgressionLookup> CDLevelProgressionLookupTable::Query(std::
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
const std::vector<CDLevelProgressionLookup>& CDLevelProgressionLookupTable::GetEntries() const {
|
||||||
std::vector<CDLevelProgressionLookup> CDLevelProgressionLookupTable::GetEntries(void) const {
|
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ private:
|
|||||||
std::vector<CDLevelProgressionLookup> entries;
|
std::vector<CDLevelProgressionLookup> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDLevelProgressionLookupTable();
|
void LoadValuesFromDatabase();
|
||||||
|
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDLevelProgressionLookup> Query(std::function<bool(CDLevelProgressionLookup)> predicate);
|
std::vector<CDLevelProgressionLookup> Query(std::function<bool(CDLevelProgressionLookup)> predicate);
|
||||||
|
|
||||||
// Gets all the entries in the table
|
const std::vector<CDLevelProgressionLookup>& GetEntries() const;
|
||||||
std::vector<CDLevelProgressionLookup> GetEntries(void) const;
|
|
||||||
};
|
};
|
||||||
|
|||||||
61
dDatabase/Tables/CDLookupTable.cpp
Normal file
61
dDatabase/Tables/CDLookupTable.cpp
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
#include "CDLookupTable.h"
|
||||||
|
|
||||||
|
CDLookupTable::CDLookupTable(void) {
|
||||||
|
|
||||||
|
// First, get the size of the table
|
||||||
|
uint32_t size = 0;
|
||||||
|
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM lookupTable");
|
||||||
|
while (!tableSize.eof()) {
|
||||||
|
size = tableSize.getIntField(0, 0);
|
||||||
|
|
||||||
|
tableSize.nextRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
tableSize.finalize();
|
||||||
|
|
||||||
|
// Reserve the size
|
||||||
|
this->entries.reserve(size);
|
||||||
|
|
||||||
|
// Now get the data
|
||||||
|
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM lookupTable");
|
||||||
|
while (!tableData.eof()) {
|
||||||
|
std::string key = tableData.getStringField("id", "");
|
||||||
|
int32_t value = tableData.getIntField("value", -1);
|
||||||
|
|
||||||
|
this->entries.emplace(key, value);
|
||||||
|
this->reverseEntries.emplace(value, key);
|
||||||
|
|
||||||
|
tableData.nextRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
tableData.finalize();
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t CDLookupTable::Lookup(const std::string& key) const {
|
||||||
|
// If the key starts with 'lego-universe:', parse what comes
|
||||||
|
// after the ':' as an integer and return that.
|
||||||
|
if (key.find("lego-universe:") == 0) {
|
||||||
|
return std::stoi(key.substr(14));
|
||||||
|
}
|
||||||
|
|
||||||
|
auto it = this->entries.find(key);
|
||||||
|
if (it != this->entries.end()) {
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> CDLookupTable::ReverseLookup(int32_t value) const {
|
||||||
|
auto range = this->reverseEntries.equal_range(value);
|
||||||
|
std::vector<std::string> keys;
|
||||||
|
for (auto it = range.first; it != range.second; ++it) {
|
||||||
|
keys.push_back(it->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t rose::id(const std::string& key) {
|
||||||
|
return CDLookupTable::Instance().Lookup(key);
|
||||||
|
}
|
||||||
23
dDatabase/Tables/CDLookupTable.h
Normal file
23
dDatabase/Tables/CDLookupTable.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Custom Classes
|
||||||
|
#include "CDTable.h"
|
||||||
|
|
||||||
|
class CDLookupTable : public CDTable<CDLookupTable> {
|
||||||
|
private:
|
||||||
|
std::unordered_map<std::string, int32_t> entries;
|
||||||
|
std::unordered_multimap<int32_t, std::string> reverseEntries;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CDLookupTable();
|
||||||
|
|
||||||
|
// Lookup
|
||||||
|
int32_t Lookup(const std::string& key) const;
|
||||||
|
|
||||||
|
// Reverse Lookup
|
||||||
|
std::vector<std::string> ReverseLookup(int32_t value) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace rose {
|
||||||
|
int32_t id(const std::string& key);
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDLootMatrixTable.h"
|
#include "CDLootMatrixTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDLootMatrixTable::LoadValuesFromDatabase() {
|
||||||
CDLootMatrixTable::CDLootMatrixTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -47,7 +46,7 @@ std::vector<CDLootMatrix> CDLootMatrixTable::Query(std::function<bool(CDLootMatr
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<CDLootMatrix>& CDLootMatrixTable::GetEntries(void) const {
|
const std::vector<CDLootMatrix>& CDLootMatrixTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ private:
|
|||||||
std::vector<CDLootMatrix> entries;
|
std::vector<CDLootMatrix> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDLootMatrixTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDLootMatrix> Query(std::function<bool(CDLootMatrix)> predicate);
|
std::vector<CDLootMatrix> Query(std::function<bool(CDLootMatrix)> predicate);
|
||||||
|
|
||||||
const std::vector<CDLootMatrix>& GetEntries(void) const;
|
const std::vector<CDLootMatrix>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDLootTableTable.h"
|
#include "CDLootTableTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDLootTableTable::LoadValuesFromDatabase() {
|
||||||
CDLootTableTable::CDLootTableTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -46,7 +45,7 @@ std::vector<CDLootTable> CDLootTableTable::Query(std::function<bool(CDLootTable)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
//! Gets all the entries in the table
|
||||||
const std::vector<CDLootTable>& CDLootTableTable::GetEntries(void) const {
|
const std::vector<CDLootTable>& CDLootTableTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ private:
|
|||||||
std::vector<CDLootTable> entries;
|
std::vector<CDLootTable> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDLootTableTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDLootTable> Query(std::function<bool(CDLootTable)> predicate);
|
std::vector<CDLootTable> Query(std::function<bool(CDLootTable)> predicate);
|
||||||
|
|
||||||
const std::vector<CDLootTable>& GetEntries(void) const;
|
const std::vector<CDLootTable>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDMissionEmailTable.h"
|
#include "CDMissionEmailTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDMissionEmailTable::LoadValuesFromDatabase() {
|
||||||
CDMissionEmailTable::CDMissionEmailTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -48,7 +47,7 @@ std::vector<CDMissionEmail> CDMissionEmailTable::Query(std::function<bool(CDMiss
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
//! Gets all the entries in the table
|
||||||
std::vector<CDMissionEmail> CDMissionEmailTable::GetEntries(void) const {
|
const std::vector<CDMissionEmail>& CDMissionEmailTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ private:
|
|||||||
std::vector<CDMissionEmail> entries;
|
std::vector<CDMissionEmail> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDMissionEmailTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDMissionEmail> Query(std::function<bool(CDMissionEmail)> predicate);
|
std::vector<CDMissionEmail> Query(std::function<bool(CDMissionEmail)> predicate);
|
||||||
|
|
||||||
std::vector<CDMissionEmail> GetEntries(void) const;
|
const std::vector<CDMissionEmail>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDMissionNPCComponentTable.h"
|
#include "CDMissionNPCComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDMissionNPCComponentTable::LoadValuesFromDatabase() {
|
||||||
CDMissionNPCComponentTable::CDMissionNPCComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -45,7 +44,7 @@ std::vector<CDMissionNPCComponent> CDMissionNPCComponentTable::Query(std::functi
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
//! Gets all the entries in the table
|
||||||
std::vector<CDMissionNPCComponent> CDMissionNPCComponentTable::GetEntries(void) const {
|
const std::vector<CDMissionNPCComponent>& CDMissionNPCComponentTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,12 +16,12 @@ private:
|
|||||||
std::vector<CDMissionNPCComponent> entries;
|
std::vector<CDMissionNPCComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDMissionNPCComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDMissionNPCComponent> Query(std::function<bool(CDMissionNPCComponent)> predicate);
|
std::vector<CDMissionNPCComponent> Query(std::function<bool(CDMissionNPCComponent)> predicate);
|
||||||
|
|
||||||
// Gets all the entries in the table
|
// Gets all the entries in the table
|
||||||
std::vector<CDMissionNPCComponent> GetEntries(void) const;
|
const std::vector<CDMissionNPCComponent>& GetEntries() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDMissionTasksTable.h"
|
#include "CDMissionTasksTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDMissionTasksTable::LoadValuesFromDatabase() {
|
||||||
CDMissionTasksTable::CDMissionTasksTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -56,16 +55,14 @@ std::vector<CDMissionTasks*> CDMissionTasksTable::GetByMissionID(uint32_t missio
|
|||||||
|
|
||||||
for (auto& entry : this->entries) {
|
for (auto& entry : this->entries) {
|
||||||
if (entry.id == missionID) {
|
if (entry.id == missionID) {
|
||||||
CDMissionTasks* task = const_cast<CDMissionTasks*>(&entry);
|
tasks.push_back(&entry);
|
||||||
|
|
||||||
tasks.push_back(task);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return tasks;
|
return tasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<CDMissionTasks>& CDMissionTasksTable::GetEntries(void) const {
|
const std::vector<CDMissionTasks>& CDMissionTasksTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,12 +24,12 @@ private:
|
|||||||
std::vector<CDMissionTasks> entries;
|
std::vector<CDMissionTasks> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDMissionTasksTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDMissionTasks> Query(std::function<bool(CDMissionTasks)> predicate);
|
std::vector<CDMissionTasks> Query(std::function<bool(CDMissionTasks)> predicate);
|
||||||
|
|
||||||
std::vector<CDMissionTasks*> GetByMissionID(uint32_t missionID);
|
std::vector<CDMissionTasks*> GetByMissionID(uint32_t missionID);
|
||||||
|
|
||||||
const std::vector<CDMissionTasks>& GetEntries(void) const;
|
const std::vector<CDMissionTasks>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
CDMissions CDMissionsTable::Default = {};
|
CDMissions CDMissionsTable::Default = {};
|
||||||
|
|
||||||
//! Constructor
|
void CDMissionsTable::LoadValuesFromDatabase() {
|
||||||
CDMissionsTable::CDMissionsTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
|
|||||||
@@ -65,12 +65,12 @@ private:
|
|||||||
std::vector<CDMissions> entries;
|
std::vector<CDMissions> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDMissionsTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDMissions> Query(std::function<bool(CDMissions)> predicate);
|
std::vector<CDMissions> Query(std::function<bool(CDMissions)> predicate);
|
||||||
|
|
||||||
// Gets all the entries in the table
|
// Gets all the entries in the table
|
||||||
const std::vector<CDMissions>& GetEntries(void) const;
|
const std::vector<CDMissions>& GetEntries() const;
|
||||||
|
|
||||||
const CDMissions* GetPtrByMissionID(uint32_t missionID) const;
|
const CDMissions* GetPtrByMissionID(uint32_t missionID) const;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDMovementAIComponentTable.h"
|
#include "CDMovementAIComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDMovementAIComponentTable::LoadValuesFromDatabase() {
|
||||||
CDMovementAIComponentTable::CDMovementAIComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -37,7 +36,6 @@ CDMovementAIComponentTable::CDMovementAIComponentTable(void) {
|
|||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Queries the table with a custom "where" clause
|
|
||||||
std::vector<CDMovementAIComponent> CDMovementAIComponentTable::Query(std::function<bool(CDMovementAIComponent)> predicate) {
|
std::vector<CDMovementAIComponent> CDMovementAIComponentTable::Query(std::function<bool(CDMovementAIComponent)> predicate) {
|
||||||
|
|
||||||
std::vector<CDMovementAIComponent> data = cpplinq::from(this->entries)
|
std::vector<CDMovementAIComponent> data = cpplinq::from(this->entries)
|
||||||
@@ -47,8 +45,7 @@ std::vector<CDMovementAIComponent> CDMovementAIComponentTable::Query(std::functi
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
const std::vector<CDMovementAIComponent>& CDMovementAIComponentTable::GetEntries(void) const {
|
||||||
std::vector<CDMovementAIComponent> CDMovementAIComponentTable::GetEntries(void) const {
|
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ private:
|
|||||||
std::vector<CDMovementAIComponent> entries;
|
std::vector<CDMovementAIComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDMovementAIComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDMovementAIComponent> Query(std::function<bool(CDMovementAIComponent)> predicate);
|
std::vector<CDMovementAIComponent> Query(std::function<bool(CDMovementAIComponent)> predicate);
|
||||||
|
|
||||||
// Gets all the entries in the table
|
// Gets all the entries in the table
|
||||||
std::vector<CDMovementAIComponent> GetEntries(void) const;
|
const std::vector<CDMovementAIComponent>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDObjectSkillsTable.h"
|
#include "CDObjectSkillsTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDObjectSkillsTable::LoadValuesFromDatabase() {
|
||||||
CDObjectSkillsTable::CDObjectSkillsTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -33,7 +32,6 @@ CDObjectSkillsTable::CDObjectSkillsTable(void) {
|
|||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Queries the table with a custom "where" clause
|
|
||||||
std::vector<CDObjectSkills> CDObjectSkillsTable::Query(std::function<bool(CDObjectSkills)> predicate) {
|
std::vector<CDObjectSkills> CDObjectSkillsTable::Query(std::function<bool(CDObjectSkills)> predicate) {
|
||||||
|
|
||||||
std::vector<CDObjectSkills> data = cpplinq::from(this->entries)
|
std::vector<CDObjectSkills> data = cpplinq::from(this->entries)
|
||||||
@@ -43,7 +41,6 @@ std::vector<CDObjectSkills> CDObjectSkillsTable::Query(std::function<bool(CDObje
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
const std::vector<CDObjectSkills>& CDObjectSkillsTable::GetEntries() const {
|
||||||
std::vector<CDObjectSkills> CDObjectSkillsTable::GetEntries(void) const {
|
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ private:
|
|||||||
std::vector<CDObjectSkills> entries;
|
std::vector<CDObjectSkills> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDObjectSkillsTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDObjectSkills> Query(std::function<bool(CDObjectSkills)> predicate);
|
std::vector<CDObjectSkills> Query(std::function<bool(CDObjectSkills)> predicate);
|
||||||
|
|
||||||
// Gets all the entries in the table
|
// Gets all the entries in the table
|
||||||
std::vector<CDObjectSkills> GetEntries(void) const;
|
const std::vector<CDObjectSkills>& GetEntries() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#include "CDObjectsTable.h"
|
#include "CDObjectsTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDObjectsTable::LoadValuesFromDatabase() {
|
||||||
CDObjectsTable::CDObjectsTable(void) {
|
|
||||||
#ifdef CDCLIENT_CACHE_ALL
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM Objects");
|
auto tableSize = CDClientDatabase::ExecuteQuery("SELECT COUNT(*) FROM Objects");
|
||||||
@@ -20,25 +18,24 @@ CDObjectsTable::CDObjectsTable(void) {
|
|||||||
CDObjects entry;
|
CDObjects entry;
|
||||||
entry.id = tableData.getIntField("id", -1);
|
entry.id = tableData.getIntField("id", -1);
|
||||||
entry.name = tableData.getStringField("name", "");
|
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.type = tableData.getStringField("type", "");
|
||||||
entry.description = tableData.getStringField("description", "");
|
UNUSED_COLUMN(entry.description = tableData.getStringField("description", "");)
|
||||||
entry.localize = tableData.getIntField("localize", -1);
|
UNUSED_COLUMN(entry.localize = tableData.getIntField("localize", -1);)
|
||||||
entry.npcTemplateID = tableData.getIntField("npcTemplateID", -1);
|
UNUSED_COLUMN(entry.npcTemplateID = tableData.getIntField("npcTemplateID", -1);)
|
||||||
entry.displayName = tableData.getStringField("displayName", "");
|
UNUSED_COLUMN(entry.displayName = tableData.getStringField("displayName", "");)
|
||||||
entry.interactionDistance = tableData.getFloatField("interactionDistance", -1.0f);
|
entry.interactionDistance = tableData.getFloatField("interactionDistance", -1.0f);
|
||||||
entry.nametag = tableData.getIntField("nametag", -1);
|
UNUSED_COLUMN(entry.nametag = tableData.getIntField("nametag", -1);)
|
||||||
entry._internalNotes = tableData.getStringField("_internalNotes", "");
|
UNUSED_COLUMN(entry._internalNotes = tableData.getStringField("_internalNotes", "");)
|
||||||
entry.locStatus = tableData.getIntField("locStatus", -1);
|
UNUSED_COLUMN(entry.locStatus = tableData.getIntField("locStatus", -1);)
|
||||||
entry.gate_version = tableData.getStringField("gate_version", "");
|
UNUSED_COLUMN(entry.gate_version = tableData.getStringField("gate_version", "");)
|
||||||
entry.HQ_valid = tableData.getIntField("HQ_valid", -1);
|
UNUSED_COLUMN(entry.HQ_valid = tableData.getIntField("HQ_valid", -1);)
|
||||||
|
|
||||||
this->entries.insert(std::make_pair(entry.id, entry));
|
this->entries.insert(std::make_pair(entry.id, entry));
|
||||||
tableData.nextRow();
|
tableData.nextRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
#endif
|
|
||||||
|
|
||||||
m_default.id = 0;
|
m_default.id = 0;
|
||||||
}
|
}
|
||||||
@@ -49,12 +46,10 @@ const CDObjects& CDObjectsTable::GetByID(unsigned int LOT) {
|
|||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CDCLIENT_CACHE_ALL
|
auto query = CDClientDatabase::CreatePreppedStmt("SELECT * FROM Objects WHERE id = ?;");
|
||||||
std::stringstream query;
|
query.bind(1, static_cast<int32_t>(LOT));
|
||||||
|
|
||||||
query << "SELECT * FROM Objects WHERE id = " << std::to_string(LOT);
|
auto tableData = query.execQuery();
|
||||||
|
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery(query.str());
|
|
||||||
if (tableData.eof()) {
|
if (tableData.eof()) {
|
||||||
this->entries.insert(std::make_pair(LOT, m_default));
|
this->entries.insert(std::make_pair(LOT, m_default));
|
||||||
return m_default;
|
return m_default;
|
||||||
@@ -88,7 +83,6 @@ const CDObjects& CDObjectsTable::GetByID(unsigned int LOT) {
|
|||||||
if (it2 != entries.end()) {
|
if (it2 != entries.end()) {
|
||||||
return it2->second;
|
return it2->second;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return m_default;
|
return m_default;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ private:
|
|||||||
CDObjects m_default;
|
CDObjects m_default;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDObjectsTable();
|
void LoadValuesFromDatabase();
|
||||||
// Gets an entry by ID
|
// Gets an entry by ID
|
||||||
const CDObjects& GetByID(unsigned int LOT);
|
const CDObjects& GetByID(unsigned int LOT);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDPackageComponentTable.h"
|
#include "CDPackageComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDPackageComponentTable::LoadValuesFromDatabase() {
|
||||||
CDPackageComponentTable::CDPackageComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -43,7 +42,7 @@ std::vector<CDPackageComponent> CDPackageComponentTable::Query(std::function<boo
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
//! Gets all the entries in the table
|
||||||
std::vector<CDPackageComponent> CDPackageComponentTable::GetEntries(void) const {
|
const std::vector<CDPackageComponent>& CDPackageComponentTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ private:
|
|||||||
std::vector<CDPackageComponent> entries;
|
std::vector<CDPackageComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDPackageComponentTable(void);
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDPackageComponent> Query(std::function<bool(CDPackageComponent)> predicate);
|
std::vector<CDPackageComponent> Query(std::function<bool(CDPackageComponent)> predicate);
|
||||||
|
|
||||||
std::vector<CDPackageComponent> GetEntries(void) const;
|
const std::vector<CDPackageComponent>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,46 +1,35 @@
|
|||||||
#include "CDPhysicsComponentTable.h"
|
#include "CDPhysicsComponentTable.h"
|
||||||
|
|
||||||
CDPhysicsComponentTable::CDPhysicsComponentTable(void) {
|
void CDPhysicsComponentTable::LoadValuesFromDatabase() {
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM PhysicsComponent");
|
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM PhysicsComponent");
|
||||||
while (!tableData.eof()) {
|
while (!tableData.eof()) {
|
||||||
CDPhysicsComponent* entry = new CDPhysicsComponent();
|
CDPhysicsComponent entry;
|
||||||
entry->id = tableData.getIntField("id", -1);
|
entry.id = tableData.getIntField("id", -1);
|
||||||
entry->bStatic = tableData.getIntField("static", -1) != 0;
|
entry.bStatic = tableData.getIntField("static", -1) != 0;
|
||||||
entry->physicsAsset = tableData.getStringField("physics_asset", "");
|
entry.physicsAsset = tableData.getStringField("physics_asset", "");
|
||||||
UNUSED(entry->jump = tableData.getIntField("jump", -1) != 0);
|
UNUSED(entry->jump = tableData.getIntField("jump", -1) != 0);
|
||||||
UNUSED(entry->doublejump = tableData.getIntField("doublejump", -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));
|
UNUSED(entry->rotSpeed = tableData.getFloatField("rotSpeed", -1));
|
||||||
entry->playerHeight = tableData.getFloatField("playerHeight");
|
entry.playerHeight = tableData.getFloatField("playerHeight");
|
||||||
entry->playerRadius = tableData.getFloatField("playerRadius");
|
entry.playerRadius = tableData.getFloatField("playerRadius");
|
||||||
entry->pcShapeType = tableData.getIntField("pcShapeType");
|
entry.pcShapeType = tableData.getIntField("pcShapeType");
|
||||||
entry->collisionGroup = tableData.getIntField("collisionGroup");
|
entry.collisionGroup = tableData.getIntField("collisionGroup");
|
||||||
UNUSED(entry->airSpeed = tableData.getFloatField("airSpeed"));
|
UNUSED(entry->airSpeed = tableData.getFloatField("airSpeed"));
|
||||||
UNUSED(entry->boundaryAsset = tableData.getStringField("boundaryAsset"));
|
UNUSED(entry->boundaryAsset = tableData.getStringField("boundaryAsset"));
|
||||||
UNUSED(entry->jumpAirSpeed = tableData.getFloatField("jumpAirSpeed"));
|
UNUSED(entry->jumpAirSpeed = tableData.getFloatField("jumpAirSpeed"));
|
||||||
UNUSED(entry->friction = tableData.getFloatField("friction"));
|
UNUSED(entry->friction = tableData.getFloatField("friction"));
|
||||||
UNUSED(entry->gravityVolumeAsset = tableData.getStringField("gravityVolumeAsset"));
|
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.nextRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
CDPhysicsComponentTable::~CDPhysicsComponentTable() {
|
|
||||||
for (auto e : m_entries) {
|
|
||||||
if (e.second) delete e.second;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_entries.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
CDPhysicsComponent* CDPhysicsComponentTable::GetByID(unsigned int componentID) {
|
CDPhysicsComponent* CDPhysicsComponentTable::GetByID(unsigned int componentID) {
|
||||||
for (auto e : m_entries) {
|
auto itr = m_entries.find(componentID);
|
||||||
if (e.first == componentID) return e.second;
|
return itr != m_entries.end() ? &itr->second : nullptr;
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,12 +23,11 @@ struct CDPhysicsComponent {
|
|||||||
|
|
||||||
class CDPhysicsComponentTable : public CDTable<CDPhysicsComponentTable> {
|
class CDPhysicsComponentTable : public CDTable<CDPhysicsComponentTable> {
|
||||||
public:
|
public:
|
||||||
CDPhysicsComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
~CDPhysicsComponentTable();
|
|
||||||
|
|
||||||
static const std::string GetTableName() { return "PhysicsComponent"; };
|
static const std::string GetTableName() { return "PhysicsComponent"; };
|
||||||
CDPhysicsComponent* GetByID(unsigned int componentID);
|
CDPhysicsComponent* GetByID(unsigned int componentID);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<unsigned int, CDPhysicsComponent*> m_entries;
|
std::map<unsigned int, CDPhysicsComponent> m_entries;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
|
|
||||||
#include "CDPropertyEntranceComponentTable.h"
|
#include "CDPropertyEntranceComponentTable.h"
|
||||||
|
|
||||||
CDPropertyEntranceComponentTable::CDPropertyEntranceComponentTable() {
|
void CDPropertyEntranceComponentTable::LoadValuesFromDatabase() {
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ struct CDPropertyEntranceComponent {
|
|||||||
|
|
||||||
class CDPropertyEntranceComponentTable : public CDTable<CDPropertyEntranceComponentTable> {
|
class CDPropertyEntranceComponentTable : public CDTable<CDPropertyEntranceComponentTable> {
|
||||||
public:
|
public:
|
||||||
CDPropertyEntranceComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
CDPropertyEntranceComponent GetByID(uint32_t id);
|
CDPropertyEntranceComponent GetByID(uint32_t id);
|
||||||
|
|
||||||
// Gets all the entries in the table
|
// Gets all the entries in the table
|
||||||
[[nodiscard]] std::vector<CDPropertyEntranceComponent> GetEntries() const { return entries; }
|
[[nodiscard]] const std::vector<CDPropertyEntranceComponent>& GetEntries() const { return entries; }
|
||||||
private:
|
private:
|
||||||
std::vector<CDPropertyEntranceComponent> entries{};
|
std::vector<CDPropertyEntranceComponent> entries{};
|
||||||
CDPropertyEntranceComponent defaultEntry{};
|
CDPropertyEntranceComponent defaultEntry{};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "CDPropertyTemplateTable.h"
|
#include "CDPropertyTemplateTable.h"
|
||||||
|
|
||||||
CDPropertyTemplateTable::CDPropertyTemplateTable() {
|
void CDPropertyTemplateTable::LoadValuesFromDatabase() {
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ struct CDPropertyTemplate {
|
|||||||
|
|
||||||
class CDPropertyTemplateTable : public CDTable<CDPropertyTemplateTable> {
|
class CDPropertyTemplateTable : public CDTable<CDPropertyTemplateTable> {
|
||||||
public:
|
public:
|
||||||
CDPropertyTemplateTable();
|
void LoadValuesFromDatabase();
|
||||||
|
|
||||||
static const std::string GetTableName() { return "PropertyTemplate"; };
|
static const std::string GetTableName() { return "PropertyTemplate"; };
|
||||||
CDPropertyTemplate GetByMapID(uint32_t mapID);
|
CDPropertyTemplate GetByMapID(uint32_t mapID);
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDProximityMonitorComponentTable.h"
|
#include "CDProximityMonitorComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDProximityMonitorComponentTable::LoadValuesFromDatabase() {
|
||||||
CDProximityMonitorComponentTable::CDProximityMonitorComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -33,7 +32,6 @@ CDProximityMonitorComponentTable::CDProximityMonitorComponentTable(void) {
|
|||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Queries the table with a custom "where" clause
|
|
||||||
std::vector<CDProximityMonitorComponent> CDProximityMonitorComponentTable::Query(std::function<bool(CDProximityMonitorComponent)> predicate) {
|
std::vector<CDProximityMonitorComponent> CDProximityMonitorComponentTable::Query(std::function<bool(CDProximityMonitorComponent)> predicate) {
|
||||||
|
|
||||||
std::vector<CDProximityMonitorComponent> data = cpplinq::from(this->entries)
|
std::vector<CDProximityMonitorComponent> data = cpplinq::from(this->entries)
|
||||||
@@ -43,8 +41,7 @@ std::vector<CDProximityMonitorComponent> CDProximityMonitorComponentTable::Query
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
const std::vector<CDProximityMonitorComponent>& CDProximityMonitorComponentTable::GetEntries() const {
|
||||||
std::vector<CDProximityMonitorComponent> CDProximityMonitorComponentTable::GetEntries(void) const {
|
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ private:
|
|||||||
std::vector<CDProximityMonitorComponent> entries;
|
std::vector<CDProximityMonitorComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDProximityMonitorComponentTable(void);
|
void LoadValuesFromDatabase();
|
||||||
//! Queries the table with a custom "where" clause
|
//! Queries the table with a custom "where" clause
|
||||||
std::vector<CDProximityMonitorComponent> Query(std::function<bool(CDProximityMonitorComponent)> predicate);
|
std::vector<CDProximityMonitorComponent> Query(std::function<bool(CDProximityMonitorComponent)> predicate);
|
||||||
|
|
||||||
std::vector<CDProximityMonitorComponent> GetEntries(void) const;
|
const std::vector<CDProximityMonitorComponent>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#include "CDRailActivatorComponent.h"
|
#include "CDRailActivatorComponent.h"
|
||||||
#include "GeneralUtils.h"
|
#include "GeneralUtils.h"
|
||||||
|
|
||||||
CDRailActivatorComponentTable::CDRailActivatorComponentTable() {
|
void CDRailActivatorComponentTable::LoadValuesFromDatabase() {
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM RailActivatorComponent;");
|
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM RailActivatorComponent;");
|
||||||
while (!tableData.eof()) {
|
while (!tableData.eof()) {
|
||||||
CDRailActivatorComponent entry;
|
CDRailActivatorComponent entry;
|
||||||
@@ -52,7 +52,7 @@ CDRailActivatorComponent CDRailActivatorComponentTable::GetEntryByID(int32_t id)
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CDRailActivatorComponent> CDRailActivatorComponentTable::GetEntries() const {
|
const std::vector<CDRailActivatorComponent>& CDRailActivatorComponentTable::GetEntries() const {
|
||||||
return m_Entries;
|
return m_Entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ struct CDRailActivatorComponent {
|
|||||||
|
|
||||||
class CDRailActivatorComponentTable : public CDTable<CDRailActivatorComponentTable> {
|
class CDRailActivatorComponentTable : public CDTable<CDRailActivatorComponentTable> {
|
||||||
public:
|
public:
|
||||||
CDRailActivatorComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
static const std::string GetTableName() { return "RailActivatorComponent"; };
|
static const std::string GetTableName() { return "RailActivatorComponent"; };
|
||||||
[[nodiscard]] CDRailActivatorComponent GetEntryByID(int32_t id) const;
|
[[nodiscard]] CDRailActivatorComponent GetEntryByID(int32_t id) const;
|
||||||
[[nodiscard]] std::vector<CDRailActivatorComponent> GetEntries() const;
|
[[nodiscard]] const std::vector<CDRailActivatorComponent>& GetEntries() const;
|
||||||
private:
|
private:
|
||||||
static std::pair<uint32_t, std::u16string> EffectPairFromString(std::string& str);
|
static std::pair<uint32_t, std::u16string> EffectPairFromString(std::string& str);
|
||||||
std::vector<CDRailActivatorComponent> m_Entries{};
|
std::vector<CDRailActivatorComponent> m_Entries{};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDRarityTableTable.h"
|
#include "CDRarityTableTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDRarityTableTable::LoadValuesFromDatabase() {
|
||||||
CDRarityTableTable::CDRarityTableTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -44,7 +43,7 @@ std::vector<CDRarityTable> CDRarityTableTable::Query(std::function<bool(CDRarity
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
//! Gets all the entries in the table
|
||||||
const std::vector<CDRarityTable>& CDRarityTableTable::GetEntries(void) const {
|
const std::vector<CDRarityTable>& CDRarityTableTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ private:
|
|||||||
std::vector<CDRarityTable> entries;
|
std::vector<CDRarityTable> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDRarityTableTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDRarityTable> Query(std::function<bool(CDRarityTable)> predicate);
|
std::vector<CDRarityTable> Query(std::function<bool(CDRarityTable)> predicate);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDRebuildComponentTable.h"
|
#include "CDRebuildComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDRebuildComponentTable::LoadValuesFromDatabase() {
|
||||||
CDRebuildComponentTable::CDRebuildComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -39,7 +38,6 @@ CDRebuildComponentTable::CDRebuildComponentTable(void) {
|
|||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Queries the table with a custom "where" clause
|
|
||||||
std::vector<CDRebuildComponent> CDRebuildComponentTable::Query(std::function<bool(CDRebuildComponent)> predicate) {
|
std::vector<CDRebuildComponent> CDRebuildComponentTable::Query(std::function<bool(CDRebuildComponent)> predicate) {
|
||||||
|
|
||||||
std::vector<CDRebuildComponent> data = cpplinq::from(this->entries)
|
std::vector<CDRebuildComponent> data = cpplinq::from(this->entries)
|
||||||
@@ -49,8 +47,7 @@ std::vector<CDRebuildComponent> CDRebuildComponentTable::Query(std::function<boo
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
const std::vector<CDRebuildComponent>& CDRebuildComponentTable::GetEntries() const {
|
||||||
std::vector<CDRebuildComponent> CDRebuildComponentTable::GetEntries(void) const {
|
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,10 +21,10 @@ private:
|
|||||||
std::vector<CDRebuildComponent> entries;
|
std::vector<CDRebuildComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDRebuildComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDRebuildComponent> Query(std::function<bool(CDRebuildComponent)> predicate);
|
std::vector<CDRebuildComponent> Query(std::function<bool(CDRebuildComponent)> predicate);
|
||||||
|
|
||||||
std::vector<CDRebuildComponent> GetEntries() const;
|
const std::vector<CDRebuildComponent>& GetEntries() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,35 +1,27 @@
|
|||||||
#include "CDRewardsTable.h"
|
#include "CDRewardsTable.h"
|
||||||
|
|
||||||
CDRewardsTable::CDRewardsTable(void) {
|
void CDRewardsTable::LoadValuesFromDatabase() {
|
||||||
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM Rewards");
|
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM Rewards");
|
||||||
while (!tableData.eof()) {
|
while (!tableData.eof()) {
|
||||||
CDRewards* entry = new CDRewards();
|
CDRewards entry;
|
||||||
entry->id = tableData.getIntField("id", -1);
|
entry.id = tableData.getIntField("id", -1);
|
||||||
entry->levelID = tableData.getIntField("LevelID", -1);
|
entry.levelID = tableData.getIntField("LevelID", -1);
|
||||||
entry->missionID = tableData.getIntField("MissionID", -1);
|
entry.missionID = tableData.getIntField("MissionID", -1);
|
||||||
entry->rewardType = tableData.getIntField("RewardType", -1);
|
entry.rewardType = tableData.getIntField("RewardType", -1);
|
||||||
entry->value = tableData.getIntField("value", -1);
|
entry.value = tableData.getIntField("value", -1);
|
||||||
entry->count = tableData.getIntField("count", -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.nextRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
CDRewardsTable::~CDRewardsTable(void) {
|
std::vector<CDRewards> CDRewardsTable::GetByLevelID(uint32_t levelID) {
|
||||||
for (auto e : m_entries) {
|
std::vector<CDRewards> result{};
|
||||||
if (e.second) delete e.second;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_entries.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<CDRewards*> CDRewardsTable::GetByLevelID(uint32_t levelID) {
|
|
||||||
std::vector<CDRewards*> result{};
|
|
||||||
for (const auto& e : m_entries) {
|
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;
|
return result;
|
||||||
|
|||||||
@@ -13,12 +13,11 @@ struct CDRewards {
|
|||||||
|
|
||||||
class CDRewardsTable : public CDTable<CDRewardsTable> {
|
class CDRewardsTable : public CDTable<CDRewardsTable> {
|
||||||
public:
|
public:
|
||||||
CDRewardsTable();
|
void LoadValuesFromDatabase();
|
||||||
~CDRewardsTable();
|
|
||||||
|
|
||||||
static const std::string GetTableName() { return "Rewards"; };
|
static const std::string GetTableName() { return "Rewards"; };
|
||||||
std::vector<CDRewards*> GetByLevelID(uint32_t levelID);
|
std::vector<CDRewards> GetByLevelID(uint32_t levelID);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<uint32_t, CDRewards*> m_entries;
|
std::map<uint32_t, CDRewards> m_entries;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDScriptComponentTable.h"
|
#include "CDScriptComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDScriptComponentTable::LoadValuesFromDatabase() {
|
||||||
CDScriptComponentTable::CDScriptComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ private:
|
|||||||
CDScriptComponent m_ToReturnWhenNoneFound;
|
CDScriptComponent m_ToReturnWhenNoneFound;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDScriptComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
// Gets an entry by scriptID
|
// Gets an entry by scriptID
|
||||||
const CDScriptComponent& GetByID(unsigned int id);
|
const CDScriptComponent& GetByID(unsigned int id);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#include "CDSkillBehaviorTable.h"
|
#include "CDSkillBehaviorTable.h"
|
||||||
//#include "Logger.hpp"
|
|
||||||
|
|
||||||
//! Constructor
|
void CDSkillBehaviorTable::LoadValuesFromDatabase() {
|
||||||
CDSkillBehaviorTable::CDSkillBehaviorTable(void) {
|
|
||||||
m_empty = CDSkillBehavior();
|
m_empty = CDSkillBehavior();
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
@@ -51,13 +49,6 @@ CDSkillBehaviorTable::CDSkillBehaviorTable(void) {
|
|||||||
tableData.finalize();
|
tableData.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Queries the table with a custom "where" clause
|
|
||||||
std::vector<CDSkillBehavior> CDSkillBehaviorTable::Query(std::function<bool(CDSkillBehavior)> predicate) {
|
|
||||||
std::vector<CDSkillBehavior> data; //So MSVC shuts up
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Gets an entry by ID
|
|
||||||
const CDSkillBehavior& CDSkillBehaviorTable::GetSkillByID(unsigned int skillID) {
|
const CDSkillBehavior& CDSkillBehaviorTable::GetSkillByID(unsigned int skillID) {
|
||||||
std::map<unsigned int, CDSkillBehavior>::iterator it = this->entries.find(skillID);
|
std::map<unsigned int, CDSkillBehavior>::iterator it = this->entries.find(skillID);
|
||||||
if (it != this->entries.end()) {
|
if (it != this->entries.end()) {
|
||||||
|
|||||||
@@ -31,9 +31,7 @@ private:
|
|||||||
CDSkillBehavior m_empty;
|
CDSkillBehavior m_empty;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDSkillBehaviorTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
|
||||||
std::vector<CDSkillBehavior> Query(std::function<bool(CDSkillBehavior)> predicate);
|
|
||||||
|
|
||||||
// Gets an entry by skillID
|
// Gets an entry by skillID
|
||||||
const CDSkillBehavior& GetSkillByID(unsigned int skillID);
|
const CDSkillBehavior& GetSkillByID(unsigned int skillID);
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
#include "CDTable.h"
|
|
||||||
|
|
||||||
#if defined(CD_PROVIDER_MEMORY)
|
|
||||||
|
|
||||||
#include "CDAbstractSharedMemoryMap.h"
|
|
||||||
|
|
||||||
typedef boost::interprocess::allocator<char, boost::interprocess::managed_shared_memory::segment_manager> CharAllocator;
|
|
||||||
typedef boost::interprocess::basic_string<char, std::char_traits<char>, CharAllocator> my_string;
|
|
||||||
|
|
||||||
CDAbstractSharedMemoryMap<size_t, boost::interprocess::string>* CDStringMap;
|
|
||||||
|
|
||||||
void CDTable::InitalizeHost()
|
|
||||||
{
|
|
||||||
CDStringMap->LoadHost();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CDTable::Initalize()
|
|
||||||
{
|
|
||||||
CDStringMap = new CDAbstractSharedMemoryMap<size_t, boost::interprocess::string>("CDStringMap", 10 * 1000 * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string CDTable::GetString(size_t handle)
|
|
||||||
{
|
|
||||||
std::string str = std::string(CDStringMap->GetEntry(handle, "").c_str());
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t CDTable::SetString(std::string value)
|
|
||||||
{
|
|
||||||
size_t hash = 0;
|
|
||||||
|
|
||||||
GeneralUtils::hash_combine(hash, value);
|
|
||||||
|
|
||||||
CDStringMap->SetEntry(hash, boost::interprocess::string(value.c_str()));
|
|
||||||
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
std::unordered_map<size_t, std::string> CDStringMap;
|
|
||||||
|
|
||||||
void CDTable::InitalizeHost()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CDTable::Initalize()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string CDTable::GetString(size_t handle)
|
|
||||||
{
|
|
||||||
return CDStringMap[handle];
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t CDTable::SetString(std::string value)
|
|
||||||
{
|
|
||||||
size_t hash = 0;
|
|
||||||
|
|
||||||
GeneralUtils::hash_combine(hash, value);
|
|
||||||
|
|
||||||
CDStringMap[hash] = value;
|
|
||||||
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -25,50 +25,8 @@
|
|||||||
#pragma warning (disable : 4244) //Disable double to float conversion warnings
|
#pragma warning (disable : 4244) //Disable double to float conversion warnings
|
||||||
#pragma warning (disable : 4715) //Disable "not all control paths return a value"
|
#pragma warning (disable : 4715) //Disable "not all control paths return a value"
|
||||||
|
|
||||||
#if defined(__unix) || defined(__APPLE__)
|
|
||||||
//For Linux:
|
|
||||||
typedef __int64_t __int64;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\file CDTable.hpp
|
|
||||||
\brief A virtual class for CDClient Tables
|
|
||||||
*/
|
|
||||||
|
|
||||||
//! The base class for all CD tables
|
|
||||||
template<class Table>
|
template<class Table>
|
||||||
class CDTable : public Singleton<Table> {
|
class CDTable : public Singleton<Table> {
|
||||||
public:
|
|
||||||
|
|
||||||
//! Returns the table's name
|
|
||||||
/*!
|
|
||||||
\return The table name
|
|
||||||
*/
|
|
||||||
virtual std::string GetName() const = 0;
|
|
||||||
|
|
||||||
//! Loads the table into shared memory
|
|
||||||
virtual void LoadHost() {};
|
|
||||||
|
|
||||||
//! Initalizes the table services
|
|
||||||
static void Initalize();
|
|
||||||
|
|
||||||
//! Initalizes the table services as host
|
|
||||||
static void InitalizeHost();
|
|
||||||
|
|
||||||
//! Get a string from a handle
|
|
||||||
/*!
|
|
||||||
\param handle The handle to get the string from
|
|
||||||
\return The string
|
|
||||||
*/
|
|
||||||
static std::string GetString(size_t handle);
|
|
||||||
|
|
||||||
//! Set a string
|
|
||||||
/*!
|
|
||||||
\param value The string to set
|
|
||||||
\return The handle to the string
|
|
||||||
*/
|
|
||||||
static size_t SetString(std::string value);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~CDTable() = default;
|
virtual ~CDTable() = default;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDVendorComponentTable.h"
|
#include "CDVendorComponentTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDVendorComponentTable::LoadValuesFromDatabase() {
|
||||||
CDVendorComponentTable::CDVendorComponentTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
@@ -22,7 +21,7 @@ CDVendorComponentTable::CDVendorComponentTable(void) {
|
|||||||
while (!tableData.eof()) {
|
while (!tableData.eof()) {
|
||||||
CDVendorComponent entry;
|
CDVendorComponent entry;
|
||||||
entry.id = tableData.getIntField("id", -1);
|
entry.id = tableData.getIntField("id", -1);
|
||||||
entry.buyScalar = tableData.getFloatField("buyScalar", -1.0f);
|
entry.buyScalar = tableData.getFloatField("buyScalar", 0.0f);
|
||||||
entry.sellScalar = tableData.getFloatField("sellScalar", -1.0f);
|
entry.sellScalar = tableData.getFloatField("sellScalar", -1.0f);
|
||||||
entry.refreshTimeSeconds = tableData.getFloatField("refreshTimeSeconds", -1.0f);
|
entry.refreshTimeSeconds = tableData.getFloatField("refreshTimeSeconds", -1.0f);
|
||||||
entry.LootMatrixIndex = tableData.getIntField("LootMatrixIndex", -1);
|
entry.LootMatrixIndex = tableData.getIntField("LootMatrixIndex", -1);
|
||||||
@@ -45,7 +44,7 @@ std::vector<CDVendorComponent> CDVendorComponentTable::Query(std::function<bool(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Gets all the entries in the table
|
//! Gets all the entries in the table
|
||||||
std::vector<CDVendorComponent> CDVendorComponentTable::GetEntries(void) const {
|
const std::vector<CDVendorComponent>& CDVendorComponentTable::GetEntries() const {
|
||||||
return this->entries;
|
return this->entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ private:
|
|||||||
std::vector<CDVendorComponent> entries;
|
std::vector<CDVendorComponent> entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDVendorComponentTable();
|
void LoadValuesFromDatabase();
|
||||||
// Queries the table with a custom "where" clause
|
// Queries the table with a custom "where" clause
|
||||||
std::vector<CDVendorComponent> Query(std::function<bool(CDVendorComponent)> predicate);
|
std::vector<CDVendorComponent> Query(std::function<bool(CDVendorComponent)> predicate);
|
||||||
|
|
||||||
std::vector<CDVendorComponent> GetEntries(void) const;
|
const std::vector<CDVendorComponent>& GetEntries(void) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "CDZoneTableTable.h"
|
#include "CDZoneTableTable.h"
|
||||||
|
|
||||||
//! Constructor
|
void CDZoneTableTable::LoadValuesFromDatabase() {
|
||||||
CDZoneTableTable::CDZoneTableTable(void) {
|
|
||||||
|
|
||||||
// First, get the size of the table
|
// First, get the size of the table
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ private:
|
|||||||
std::map<unsigned int, CDZoneTable> m_Entries;
|
std::map<unsigned int, CDZoneTable> m_Entries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDZoneTableTable();
|
void LoadValuesFromDatabase();
|
||||||
|
|
||||||
// Queries the table with a zoneID to find.
|
// Queries the table with a zoneID to find.
|
||||||
const CDZoneTable* Query(unsigned int zoneID);
|
const CDZoneTable* Query(unsigned int zoneID);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user