diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
index ab3917c1..8a81def7 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -36,22 +36,16 @@ jobs:
testPreset: "ci-${{matrix.os}}"
- name: artifacts
uses: actions/upload-artifact@v3
- if: ${{ github.ref == 'ref/head/main' }}
with:
name: build-${{matrix.os}}
path: |
- build
- !build/tests
- !build/Testing
- !build/CMakeFiles
- !build/DartConfiguration.tcl
- !build/CTestTestfile.cmake
- !build/CMakeCache.txt
- !build/build.ninja
- !build/_deps
- !build/cmake_install.cmake
- !build/*.a
- !build/*.lib
- !build/*.dir
- !build/*.vcxproj
- !build/*.vcxproj.filters
+ build/*Server*
+ build/*.ini
+ build/*.so
+ build/*.dll
+ build/vanity/
+ build/navmeshes/
+ build/migrations/
+ build/*.dcf
+ !build/*.pdb
+ !build/d*/
diff --git a/README.md b/README.md
index df782a32..f51b5e2a 100644
--- a/README.md
+++ b/README.md
@@ -245,30 +245,11 @@ To connect to a server follow these steps:
* In the client directory, locate `boot.cfg`
* Open it in a text editor and locate where it says `AUTHSERVERIP=0:`
* Replace the contents after to `:` and the following `,` with what you configured as the server's public facing IP. For example `AUTHSERVERIP=0:localhost` for locally hosted servers
+* Next locate the line `UGCUSE3DSERVICES=7:`
+* Ensure the number after the 7 is a `0`
* Launch `legouniverse.exe`, through `wine` if on a Unix-like operating system
* Note that if you are on WSL2, you will need to configure the public IP in the server and client to be the IP of the WSL2 instance and not localhost, which can be found by running `ifconfig` in the terminal. Windows defaults to WSL1, so this will not apply to most users.
-## Brick-By-Brick building
-Should you choose to do any brick building, you will want to have some form of a http server that returns a 404 error since we are unable to emulate live User Generated Content at the moment. If you attempt to do any brick building without a 404 server running properly, you will be unable to load into your game. Python is the easiest way to do this, but any thing that returns a 404 should work fine.
-* Note: the client hard codes this request on port 80.
-
-**If you do not plan on doing any Brick Building, then you can skip this step.**
-
-The easiest way to do this is to install [python](https://www.python.org/downloads/).
-
-### Allowing a user to build in Brick-by-Brick mode
-Brick-By-Brick building requires `PATCHSERVERIP=0:` and `UGCSERVERIP=0:` in the `boot.cfg` to point to a HTTP server which always returns `HTTP 404 - Not Found` for all requests. This can be most easily achieved by pointing both of those variables to `localhost` while having running in the background.
-Each client must have their own 404 server running if they are using a locally hosted 404 server.
-```bash
-# If on linux run this command. Because this is run on a port below 1024, binary network permissions are needed.
-sudo python3 -m http.server 80
-
-# If on windows one of the following will work when run through Powershell or Command Prompt assuming python is installed
-python3 -m http.server 80
-python http.server 80
-py -m http.server 80
-```
-
## Updating your server
To update your server to the latest version navigate to your cloned directory
```bash
diff --git a/dAuthServer/AuthServer.cpp b/dAuthServer/AuthServer.cpp
index f5090495..262886d7 100644
--- a/dAuthServer/AuthServer.cpp
+++ b/dAuthServer/AuthServer.cpp
@@ -15,10 +15,13 @@
//RakNet includes:
#include "RakNetDefines.h"
+#include
//Auth includes:
#include "AuthPackets.h"
-#include "dMessageIdentifiers.h"
+#include "eConnectionType.h"
+#include "eServerMessageType.h"
+#include "eAuthMessageType.h"
#include "Game.h"
namespace Game {
@@ -168,13 +171,15 @@ dLogger* SetupLogger() {
}
void HandlePacket(Packet* packet) {
+ if (packet->length < 4) return;
+
if (packet->data[0] == ID_USER_PACKET_ENUM) {
- if (packet->data[1] == SERVER) {
- if (packet->data[3] == MSG_SERVER_VERSION_CONFIRM) {
+ if (static_cast(packet->data[1]) == eConnectionType::SERVER) {
+ if (static_cast(packet->data[3]) == eServerMessageType::VERSION_CONFIRM) {
AuthPackets::HandleHandshake(Game::server, packet);
}
- } else if (packet->data[1] == AUTH) {
- if (packet->data[3] == MSG_AUTH_LOGIN_REQUEST) {
+ } else if (static_cast(packet->data[1]) == eConnectionType::AUTH) {
+ if (static_cast(packet->data[3]) == eAuthMessageType::LOGIN_REQUEST) {
AuthPackets::HandleLoginRequest(Game::server, packet);
}
}
diff --git a/dChatServer/ChatPacketHandler.cpp b/dChatServer/ChatPacketHandler.cpp
index 592c3870..878cc71c 100644
--- a/dChatServer/ChatPacketHandler.cpp
+++ b/dChatServer/ChatPacketHandler.cpp
@@ -3,7 +3,6 @@
#include "Database.h"
#include
#include "PacketUtils.h"
-#include "dMessageIdentifiers.h"
#include "Game.h"
#include "dServer.h"
#include "GeneralUtils.h"
@@ -12,15 +11,20 @@
#include "eAddFriendResponseType.h"
#include "RakString.h"
#include "dConfig.h"
+#include "eObjectBits.h"
+#include "eConnectionType.h"
+#include "eChatMessageType.h"
+#include "eChatInternalMessageType.h"
+#include "eClientMessageType.h"
+#include "eGameMessageType.h"
extern PlayerContainer playerContainer;
void ChatPacketHandler::HandleFriendlistRequest(Packet* packet) {
//Get from the packet which player we want to do something with:
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = 0;
inStream.Read(playerID);
- inStream.Read(playerID);
auto player = playerContainer.GetPlayerData(playerID);
if (!player) return;
@@ -45,8 +49,8 @@ void ChatPacketHandler::HandleFriendlistRequest(Packet* packet) {
FriendData fd;
fd.isFTP = false; // not a thing in DLU
fd.friendID = res->getUInt(1);
- GeneralUtils::SetBit(fd.friendID, static_cast(eObjectBits::OBJECT_BIT_PERSISTENT));
- GeneralUtils::SetBit(fd.friendID, static_cast(eObjectBits::OBJECT_BIT_CHARACTER));
+ GeneralUtils::SetBit(fd.friendID, eObjectBits::PERSISTENT);
+ GeneralUtils::SetBit(fd.friendID, eObjectBits::CHARACTER);
fd.isBestFriend = res->getInt(2) == 3; //0 = friends, 1 = left_requested, 2 = right_requested, 3 = both_accepted - are now bffs
if (fd.isBestFriend) player->countOfBestFriends += 1;
@@ -71,11 +75,11 @@ void ChatPacketHandler::HandleFriendlistRequest(Packet* packet) {
//Now, we need to send the friendlist to the server they came from:
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(playerID);
//portion that will get routed:
- PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_GET_FRIENDS_LIST_RESPONSE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::GET_FRIENDS_LIST_RESPONSE);
bitStream.Write(0);
bitStream.Write(1); //Length of packet -- just writing one as it doesn't matter, client skips it.
bitStream.Write((uint16_t)friends.size());
@@ -94,10 +98,9 @@ void ChatPacketHandler::HandleFriendRequest(Packet* packet) {
auto maxNumberOfBestFriendsAsString = Game::config->GetValue("max_number_of_best_friends");
// If this config option doesn't exist, default to 5 which is what live used.
auto maxNumberOfBestFriends = maxNumberOfBestFriendsAsString != "" ? std::stoi(maxNumberOfBestFriendsAsString) : 5U;
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID requestorPlayerID;
inStream.Read(requestorPlayerID);
- inStream.Read(requestorPlayerID);
uint32_t spacing{};
inStream.Read(spacing);
std::string playerName = "";
@@ -178,10 +181,10 @@ void ChatPacketHandler::HandleFriendRequest(Packet* packet) {
bestFriendStatus = oldBestFriendStatus;
// Set the bits
- GeneralUtils::SetBit(queryPlayerID, static_cast(eObjectBits::OBJECT_BIT_CHARACTER));
- GeneralUtils::SetBit(queryPlayerID, static_cast(eObjectBits::OBJECT_BIT_PERSISTENT));
- GeneralUtils::SetBit(queryFriendID, static_cast(eObjectBits::OBJECT_BIT_CHARACTER));
- GeneralUtils::SetBit(queryFriendID, static_cast(eObjectBits::OBJECT_BIT_PERSISTENT));
+ GeneralUtils::SetBit(queryPlayerID, eObjectBits::CHARACTER);
+ GeneralUtils::SetBit(queryPlayerID, eObjectBits::PERSISTENT);
+ GeneralUtils::SetBit(queryFriendID, eObjectBits::CHARACTER);
+ GeneralUtils::SetBit(queryFriendID, eObjectBits::PERSISTENT);
// Since this player can either be the friend of someone else or be friends with someone else
// their column in the database determines what bit gets set. When the value hits 3, they
@@ -242,10 +245,9 @@ void ChatPacketHandler::HandleFriendRequest(Packet* packet) {
}
void ChatPacketHandler::HandleFriendResponse(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID;
inStream.Read(playerID);
- inStream.Read(playerID);
eAddFriendResponseCode clientResponseCode = static_cast(packet->data[0x14]);
std::string friendName = PacketUtils::ReadString(0x15, packet, true);
@@ -318,10 +320,9 @@ void ChatPacketHandler::HandleFriendResponse(Packet* packet) {
}
void ChatPacketHandler::HandleRemoveFriend(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID;
inStream.Read(playerID);
- inStream.Read(playerID);
std::string friendName = PacketUtils::ReadString(0x14, packet, true);
//we'll have to query the db here to find the user, since you can delete them while they're offline.
@@ -336,8 +337,8 @@ void ChatPacketHandler::HandleRemoveFriend(Packet* packet) {
}
// Convert friendID to LWOOBJID
- GeneralUtils::SetBit(friendID, static_cast(eObjectBits::OBJECT_BIT_PERSISTENT));
- GeneralUtils::SetBit(friendID, static_cast(eObjectBits::OBJECT_BIT_CHARACTER));
+ GeneralUtils::SetBit(friendID, eObjectBits::PERSISTENT);
+ GeneralUtils::SetBit(friendID, eObjectBits::CHARACTER);
std::unique_ptr deletestmt(Database::CreatePreppedStmt("DELETE FROM friends WHERE (player_id = ? AND friend_id = ?) OR (player_id = ? AND friend_id = ?) LIMIT 1;"));
deletestmt->setUInt(1, static_cast(playerID));
@@ -376,10 +377,9 @@ void ChatPacketHandler::HandleRemoveFriend(Packet* packet) {
}
void ChatPacketHandler::HandleChatMessage(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
- inStream.Read(playerID);
auto* sender = playerContainer.GetPlayerData(playerID);
@@ -412,10 +412,10 @@ void ChatPacketHandler::HandleChatMessage(Packet* packet) {
const auto otherName = std::string(otherMember->playerName.c_str());
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(otherMember->playerID);
- PacketUtils::WriteHeader(bitStream, CHAT, MSG_CHAT_PRIVATE_CHAT_MESSAGE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
bitStream.Write(otherMember->playerID);
bitStream.Write(8);
bitStream.Write(69);
@@ -451,10 +451,10 @@ void ChatPacketHandler::HandlePrivateChatMessage(Packet* packet) {
//To the sender:
{
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(goonA->playerID);
- PacketUtils::WriteHeader(bitStream, CHAT, MSG_CHAT_PRIVATE_CHAT_MESSAGE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
bitStream.Write(goonA->playerID);
bitStream.Write(7);
bitStream.Write(69);
@@ -474,10 +474,10 @@ void ChatPacketHandler::HandlePrivateChatMessage(Packet* packet) {
//To the receiver:
{
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(goonB->playerID);
- PacketUtils::WriteHeader(bitStream, CHAT, MSG_CHAT_PRIVATE_CHAT_MESSAGE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::PRIVATE_CHAT_MESSAGE);
bitStream.Write(goonA->playerID);
bitStream.Write(7);
bitStream.Write(69);
@@ -496,10 +496,9 @@ void ChatPacketHandler::HandlePrivateChatMessage(Packet* packet) {
}
void ChatPacketHandler::HandleTeamInvite(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID;
inStream.Read(playerID);
- inStream.Read(playerID);
std::string invitedPlayer = PacketUtils::ReadString(0x14, packet, true);
auto* player = playerContainer.GetPlayerData(playerID);
@@ -537,10 +536,9 @@ void ChatPacketHandler::HandleTeamInvite(Packet* packet) {
}
void ChatPacketHandler::HandleTeamInviteResponse(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
- inStream.Read(playerID);
uint32_t size = 0;
inStream.Read(size);
char declined = 0;
@@ -571,10 +569,9 @@ void ChatPacketHandler::HandleTeamInviteResponse(Packet* packet) {
}
void ChatPacketHandler::HandleTeamLeave(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
- inStream.Read(playerID);
uint32_t size = 0;
inStream.Read(size);
@@ -588,10 +585,9 @@ void ChatPacketHandler::HandleTeamLeave(Packet* packet) {
}
void ChatPacketHandler::HandleTeamKick(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
- inStream.Read(playerID);
std::string kickedPlayer = PacketUtils::ReadString(0x14, packet, true);
@@ -619,10 +615,9 @@ void ChatPacketHandler::HandleTeamKick(Packet* packet) {
}
void ChatPacketHandler::HandleTeamPromote(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
- inStream.Read(playerID);
std::string promotedPlayer = PacketUtils::ReadString(0x14, packet, true);
@@ -642,10 +637,9 @@ void ChatPacketHandler::HandleTeamPromote(Packet* packet) {
}
void ChatPacketHandler::HandleTeamLootOption(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
- inStream.Read(playerID);
uint32_t size = 0;
inStream.Read(size);
@@ -666,10 +660,9 @@ void ChatPacketHandler::HandleTeamLootOption(Packet* packet) {
}
void ChatPacketHandler::HandleTeamStatusRequest(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
- inStream.Read(playerID);
auto* team = playerContainer.GetTeam(playerID);
auto* data = playerContainer.GetPlayerData(playerID);
@@ -716,11 +709,11 @@ void ChatPacketHandler::HandleTeamStatusRequest(Packet* packet) {
void ChatPacketHandler::SendTeamInvite(PlayerData* receiver, PlayerData* sender) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
- PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_TEAM_INVITE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::TEAM_INVITE);
PacketUtils::WritePacketWString(sender->playerName.c_str(), 33, &bitStream);
bitStream.Write(sender->playerID);
@@ -731,14 +724,14 @@ 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) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
CMSGHEADER;
bitStream.Write(receiver->playerID);
- bitStream.Write(GAME_MSG::GAME_MSG_TEAM_INVITE_CONFIRM);
+ bitStream.Write(eGameMessageType::TEAM_INVITE_CONFIRM);
bitStream.Write(bLeaderIsFreeTrial);
bitStream.Write(i64LeaderID);
@@ -758,14 +751,14 @@ 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) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
CMSGHEADER;
bitStream.Write(receiver->playerID);
- bitStream.Write(GAME_MSG::GAME_MSG_TEAM_GET_STATUS_RESPONSE);
+ bitStream.Write(eGameMessageType::TEAM_GET_STATUS_RESPONSE);
bitStream.Write(i64LeaderID);
bitStream.Write(i64LeaderZoneID);
@@ -783,14 +776,14 @@ void ChatPacketHandler::SendTeamStatus(PlayerData* receiver, LWOOBJID i64LeaderI
void ChatPacketHandler::SendTeamSetLeader(PlayerData* receiver, LWOOBJID i64PlayerID) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
CMSGHEADER;
bitStream.Write(receiver->playerID);
- bitStream.Write(GAME_MSG::GAME_MSG_TEAM_SET_LEADER);
+ bitStream.Write(eGameMessageType::TEAM_SET_LEADER);
bitStream.Write(i64PlayerID);
@@ -800,14 +793,14 @@ 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) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
CMSGHEADER;
bitStream.Write(receiver->playerID);
- bitStream.Write(GAME_MSG::GAME_MSG_TEAM_ADD_PLAYER);
+ bitStream.Write(eGameMessageType::TEAM_ADD_PLAYER);
bitStream.Write(bIsFreeTrial);
bitStream.Write(bLocal);
@@ -829,14 +822,14 @@ 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) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
CMSGHEADER;
bitStream.Write(receiver->playerID);
- bitStream.Write(GAME_MSG::GAME_MSG_TEAM_REMOVE_PLAYER);
+ bitStream.Write(eGameMessageType::TEAM_REMOVE_PLAYER);
bitStream.Write(bDisband);
bitStream.Write(bIsKicked);
@@ -855,14 +848,14 @@ void ChatPacketHandler::SendTeamRemovePlayer(PlayerData* receiver, bool bDisband
void ChatPacketHandler::SendTeamSetOffWorldFlag(PlayerData* receiver, LWOOBJID i64PlayerID, LWOZONEID zoneID) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
CMSGHEADER;
bitStream.Write(receiver->playerID);
- bitStream.Write(GAME_MSG::GAME_MSG_TEAM_SET_OFF_WORLD_FLAG);
+ bitStream.Write(eGameMessageType::TEAM_SET_OFF_WORLD_FLAG);
bitStream.Write(i64PlayerID);
if (receiver->zoneID.GetCloneID() == zoneID.GetCloneID()) {
@@ -889,11 +882,11 @@ void ChatPacketHandler::SendFriendUpdate(PlayerData* friendData, PlayerData* pla
[bool] - is FTP*/
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(friendData->playerID);
//portion that will get routed:
- PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_UPDATE_FRIEND_NOTIFY);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::UPDATE_FRIEND_NOTIFY);
bitStream.Write(notifyType);
std::string playerName = playerData->playerName.c_str();
@@ -928,11 +921,11 @@ void ChatPacketHandler::SendFriendRequest(PlayerData* receiver, PlayerData* send
}
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
- PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_ADD_FRIEND_REQUEST);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::ADD_FRIEND_REQUEST);
PacketUtils::WritePacketWString(sender->playerName.c_str(), 33, &bitStream);
bitStream.Write(0); // This is a BFF flag however this is unused in live and does not have an implementation client side.
@@ -944,11 +937,11 @@ void ChatPacketHandler::SendFriendResponse(PlayerData* receiver, PlayerData* sen
if (!receiver || !sender) return;
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
// Portion that will get routed:
- PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_ADD_FRIEND_RESPONSE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::ADD_FRIEND_RESPONSE);
bitStream.Write(responseCode);
// For all requests besides accepted, write a flag that says whether or not we are already best friends with the receiver.
bitStream.Write(responseCode != eAddFriendResponseType::ACCEPTED ? isBestFriendsAlready : sender->sysAddr != UNASSIGNED_SYSTEM_ADDRESS);
@@ -969,11 +962,11 @@ void ChatPacketHandler::SendRemoveFriend(PlayerData* receiver, std::string& pers
if (!receiver) return;
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver->playerID);
//portion that will get routed:
- PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_REMOVE_FRIEND_RESPONSE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::REMOVE_FRIEND_RESPONSE);
bitStream.Write(isSuccessful); //isOnline
PacketUtils::WritePacketWString(personToRemove, 33, &bitStream);
diff --git a/dChatServer/ChatServer.cpp b/dChatServer/ChatServer.cpp
index a75c4d51..b9fb8556 100644
--- a/dChatServer/ChatServer.cpp
+++ b/dChatServer/ChatServer.cpp
@@ -9,19 +9,23 @@
#include "dLogger.h"
#include "Database.h"
#include "dConfig.h"
-#include "dMessageIdentifiers.h"
#include "dChatFilter.h"
#include "Diagnostics.h"
#include "AssetManager.h"
#include "BinaryPathFinder.h"
-
+#include "eConnectionType.h"
#include "PlayerContainer.h"
#include "ChatPacketHandler.h"
+#include "eChatMessageType.h"
+#include "eChatInternalMessageType.h"
+#include "eWorldMessageType.h"
#include "Game.h"
//RakNet includes:
#include "RakNetDefines.h"
+#include
+
namespace Game {
dLogger* logger = nullptr;
dServer* server = nullptr;
@@ -68,7 +72,7 @@ int main(int argc, char** argv) {
Game::assetManager = new AssetManager(clientPath);
} catch (std::runtime_error& ex) {
Game::logger->Log("ChatServer", "Got an error while setting up assets: %s", ex.what());
-
+
return EXIT_FAILURE;
}
@@ -199,25 +203,27 @@ void HandlePacket(Packet* packet) {
Game::logger->Log("ChatServer", "A server is connecting, awaiting user list.");
}
- if (packet->data[1] == CHAT_INTERNAL) {
- switch (packet->data[3]) {
- case MSG_CHAT_INTERNAL_PLAYER_ADDED_NOTIFICATION:
+ if (packet->length < 4) return; // Nothing left to process. Need 4 bytes to continue.
+
+ if (static_cast(packet->data[1]) == eConnectionType::CHAT_INTERNAL) {
+ switch (static_cast(packet->data[3])) {
+ case eChatInternalMessageType::PLAYER_ADDED_NOTIFICATION:
playerContainer.InsertPlayer(packet);
break;
- case MSG_CHAT_INTERNAL_PLAYER_REMOVED_NOTIFICATION:
+ case eChatInternalMessageType::PLAYER_REMOVED_NOTIFICATION:
playerContainer.RemovePlayer(packet);
break;
- case MSG_CHAT_INTERNAL_MUTE_UPDATE:
+ case eChatInternalMessageType::MUTE_UPDATE:
playerContainer.MuteUpdate(packet);
break;
- case MSG_CHAT_INTERNAL_CREATE_TEAM:
+ case eChatInternalMessageType::CREATE_TEAM:
playerContainer.CreateTeamServer(packet);
break;
- case MSG_CHAT_INTERNAL_ANNOUNCEMENT: {
+ case eChatInternalMessageType::ANNOUNCEMENT: {
//we just forward this packet to every connected server
CINSTREAM;
Game::server->Send(&inStream, packet->systemAddress, true); //send to everyone except origin
@@ -229,67 +235,67 @@ void HandlePacket(Packet* packet) {
}
}
- if (packet->data[1] == CHAT) {
- switch (packet->data[3]) {
- case MSG_CHAT_GET_FRIENDS_LIST:
+ if (static_cast(packet->data[1]) == eConnectionType::CHAT) {
+ switch (static_cast(packet->data[3])) {
+ case eChatMessageType::GET_FRIENDS_LIST:
ChatPacketHandler::HandleFriendlistRequest(packet);
break;
- case MSG_CHAT_GET_IGNORE_LIST:
+ case eChatMessageType::GET_IGNORE_LIST:
Game::logger->Log("ChatServer", "Asked for ignore list, but is unimplemented right now.");
break;
- case MSG_CHAT_TEAM_GET_STATUS:
+ case eChatMessageType::TEAM_GET_STATUS:
ChatPacketHandler::HandleTeamStatusRequest(packet);
break;
- case MSG_CHAT_ADD_FRIEND_REQUEST:
+ case eChatMessageType::ADD_FRIEND_REQUEST:
//this involves someone sending the initial request, the response is below, response as in from the other player.
//We basically just check to see if this player is online or not and route the packet.
ChatPacketHandler::HandleFriendRequest(packet);
break;
- case MSG_CHAT_ADD_FRIEND_RESPONSE:
+ case eChatMessageType::ADD_FRIEND_RESPONSE:
//This isn't the response a server sent, rather it is a player's response to a received request.
//Here, we'll actually have to add them to eachother's friend lists depending on the response code.
ChatPacketHandler::HandleFriendResponse(packet);
break;
- case MSG_CHAT_REMOVE_FRIEND:
+ case eChatMessageType::REMOVE_FRIEND:
ChatPacketHandler::HandleRemoveFriend(packet);
break;
- case MSG_CHAT_GENERAL_CHAT_MESSAGE:
+ case eChatMessageType::GENERAL_CHAT_MESSAGE:
ChatPacketHandler::HandleChatMessage(packet);
break;
- case MSG_CHAT_PRIVATE_CHAT_MESSAGE:
+ case eChatMessageType::PRIVATE_CHAT_MESSAGE:
//This message is supposed to be echo'd to both the sender and the receiver
//BUT: they have to have different responseCodes, so we'll do some of the ol hacky wacky to fix that right up.
ChatPacketHandler::HandlePrivateChatMessage(packet);
break;
- case MSG_CHAT_TEAM_INVITE:
+ case eChatMessageType::TEAM_INVITE:
ChatPacketHandler::HandleTeamInvite(packet);
break;
- case MSG_CHAT_TEAM_INVITE_RESPONSE:
+ case eChatMessageType::TEAM_INVITE_RESPONSE:
ChatPacketHandler::HandleTeamInviteResponse(packet);
break;
- case MSG_CHAT_TEAM_LEAVE:
+ case eChatMessageType::TEAM_LEAVE:
ChatPacketHandler::HandleTeamLeave(packet);
break;
- case MSG_CHAT_TEAM_SET_LEADER:
+ case eChatMessageType::TEAM_SET_LEADER:
ChatPacketHandler::HandleTeamPromote(packet);
break;
- case MSG_CHAT_TEAM_KICK:
+ case eChatMessageType::TEAM_KICK:
ChatPacketHandler::HandleTeamKick(packet);
break;
- case MSG_CHAT_TEAM_SET_LOOT:
+ case eChatMessageType::TEAM_SET_LOOT:
ChatPacketHandler::HandleTeamLootOption(packet);
break;
@@ -298,9 +304,9 @@ void HandlePacket(Packet* packet) {
}
}
- if (packet->data[1] == WORLD) {
- switch (packet->data[3]) {
- case MSG_WORLD_CLIENT_ROUTE_PACKET: {
+ if (static_cast(packet->data[1]) == eConnectionType::WORLD) {
+ switch (static_cast(packet->data[3])) {
+ case eWorldMessageType::ROUTE_PACKET: {
Game::logger->Log("ChatServer", "Routing packet from world");
break;
}
diff --git a/dChatServer/PlayerContainer.cpp b/dChatServer/PlayerContainer.cpp
index 6bf3ccd1..689ffd77 100644
--- a/dChatServer/PlayerContainer.cpp
+++ b/dChatServer/PlayerContainer.cpp
@@ -6,9 +6,10 @@
#include "dLogger.h"
#include "ChatPacketHandler.h"
#include "GeneralUtils.h"
-#include "dMessageIdentifiers.h"
#include "PacketUtils.h"
#include "Database.h"
+#include "eConnectionType.h"
+#include "eChatInternalMessageType.h"
PlayerContainer::PlayerContainer() {
}
@@ -18,9 +19,8 @@ PlayerContainer::~PlayerContainer() {
}
void PlayerContainer::InsertPlayer(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
PlayerData* data = new PlayerData();
- inStream.SetReadOffset(inStream.GetReadOffset() + 64);
inStream.Read(data->playerID);
uint32_t len;
@@ -51,9 +51,8 @@ void PlayerContainer::InsertPlayer(Packet* packet) {
}
void PlayerContainer::RemovePlayer(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID;
- inStream.Read(playerID); //skip header
inStream.Read(playerID);
//Before they get kicked, we need to also send a message to their friends saying that they disconnected.
@@ -96,9 +95,8 @@ void PlayerContainer::RemovePlayer(Packet* packet) {
}
void PlayerContainer::MuteUpdate(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID;
- inStream.Read(playerID); //skip header
inStream.Read(playerID);
time_t expire = 0;
inStream.Read(expire);
@@ -117,9 +115,8 @@ void PlayerContainer::MuteUpdate(Packet* packet) {
}
void PlayerContainer::CreateTeamServer(Packet* packet) {
- CINSTREAM;
+ CINSTREAM_SKIP_HEADER;
LWOOBJID playerID;
- inStream.Read(playerID); //skip header
inStream.Read(playerID);
size_t membersSize = 0;
inStream.Read(membersSize);
@@ -149,7 +146,7 @@ void PlayerContainer::CreateTeamServer(Packet* packet) {
void PlayerContainer::BroadcastMuteUpdate(LWOOBJID player, time_t time) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_MUTE_UPDATE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::MUTE_UPDATE);
bitStream.Write(player);
bitStream.Write(time);
@@ -348,7 +345,7 @@ void PlayerContainer::TeamStatusUpdate(TeamData* team) {
void PlayerContainer::UpdateTeamsOnWorld(TeamData* team, bool deleteTeam) {
CBITSTREAM;
- PacketUtils::WriteHeader(bitStream, CHAT_INTERNAL, MSG_CHAT_INTERNAL_TEAM_UPDATE);
+ PacketUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::TEAM_UPDATE);
bitStream.Write(team->teamID);
bitStream.Write(deleteTeam);
diff --git a/dCommon/AMFDeserialize.cpp b/dCommon/AMFDeserialize.cpp
index df4a7cb6..9eee1f12 100644
--- a/dCommon/AMFDeserialize.cpp
+++ b/dCommon/AMFDeserialize.cpp
@@ -1,77 +1,81 @@
#include "AMFDeserialize.h"
-#include "AMFFormat.h"
+#include
+
+#include "Amf3.h"
/**
* AMF3 Reference document https://rtmp.veriskope.com/pdf/amf3-file-format-spec.pdf
* AMF3 Deserializer written by EmosewaMC
*/
-AMFValue* AMFDeserialize::Read(RakNet::BitStream* inStream) {
+AMFBaseValue* AMFDeserialize::Read(RakNet::BitStream* inStream) {
if (!inStream) return nullptr;
- AMFValue* returnValue = nullptr;
+ AMFBaseValue* returnValue = nullptr;
// Read in the value type from the bitStream
- int8_t marker;
- inStream->Read(marker);
+ uint8_t i;
+ inStream->Read(i);
+ if (i > static_cast(eAmf::Dictionary)) return nullptr;
+ eAmf marker = static_cast(i);
// Based on the typing, create the value associated with that and return the base value class
switch (marker) {
- case AMFValueType::AMFUndefined: {
- returnValue = new AMFUndefinedValue();
+ case eAmf::Undefined: {
+ returnValue = new AMFBaseValue();
break;
}
- case AMFValueType::AMFNull: {
+ case eAmf::Null: {
returnValue = new AMFNullValue();
break;
}
- case AMFValueType::AMFFalse: {
- returnValue = new AMFFalseValue();
+ case eAmf::False: {
+ returnValue = new AMFBoolValue(false);
break;
}
- case AMFValueType::AMFTrue: {
- returnValue = new AMFTrueValue();
+ case eAmf::True: {
+ returnValue = new AMFBoolValue(true);
break;
}
- case AMFValueType::AMFInteger: {
+ case eAmf::Integer: {
returnValue = ReadAmfInteger(inStream);
break;
}
- case AMFValueType::AMFDouble: {
+ case eAmf::Double: {
returnValue = ReadAmfDouble(inStream);
break;
}
- case AMFValueType::AMFString: {
+ case eAmf::String: {
returnValue = ReadAmfString(inStream);
break;
}
- case AMFValueType::AMFArray: {
+ case eAmf::Array: {
returnValue = ReadAmfArray(inStream);
break;
}
- // TODO We do not need these values, but if someone wants to implement them
- // then please do so and add the corresponding unit tests.
- case AMFValueType::AMFXMLDoc:
- case AMFValueType::AMFDate:
- case AMFValueType::AMFObject:
- case AMFValueType::AMFXML:
- case AMFValueType::AMFByteArray:
- case AMFValueType::AMFVectorInt:
- case AMFValueType::AMFVectorUInt:
- case AMFValueType::AMFVectorDouble:
- case AMFValueType::AMFVectorObject:
- case AMFValueType::AMFDictionary: {
- throw static_cast(marker);
+ // These values are unimplemented in the live client and will remain unimplemented
+ // unless someone modifies the client to allow serializing of these values.
+ case eAmf::XMLDoc:
+ case eAmf::Date:
+ case eAmf::Object:
+ case eAmf::XML:
+ case eAmf::ByteArray:
+ case eAmf::VectorInt:
+ case eAmf::VectorUInt:
+ case eAmf::VectorDouble:
+ case eAmf::VectorObject:
+ case eAmf::Dictionary: {
+ throw marker;
break;
}
default:
- throw static_cast(marker);
+ throw std::invalid_argument("Invalid AMF3 marker" + std::to_string(static_cast(marker)));
break;
}
return returnValue;
@@ -99,7 +103,7 @@ uint32_t AMFDeserialize::ReadU29(RakNet::BitStream* inStream) {
return actualNumber;
}
-std::string AMFDeserialize::ReadString(RakNet::BitStream* inStream) {
+const std::string AMFDeserialize::ReadString(RakNet::BitStream* inStream) {
auto length = ReadU29(inStream);
// Check if this is a reference
bool isReference = length % 2 == 1;
@@ -113,48 +117,39 @@ std::string AMFDeserialize::ReadString(RakNet::BitStream* inStream) {
return value;
} else {
// Length is a reference to a previous index - use that as the read in value
- return accessedElements[length];
+ return accessedElements.at(length);
}
}
-AMFValue* AMFDeserialize::ReadAmfDouble(RakNet::BitStream* inStream) {
- auto doubleValue = new AMFDoubleValue();
+AMFBaseValue* AMFDeserialize::ReadAmfDouble(RakNet::BitStream* inStream) {
double value;
inStream->Read(value);
- doubleValue->SetDoubleValue(value);
- return doubleValue;
+ return new AMFDoubleValue(value);
}
-AMFValue* AMFDeserialize::ReadAmfArray(RakNet::BitStream* inStream) {
+AMFBaseValue* AMFDeserialize::ReadAmfArray(RakNet::BitStream* inStream) {
auto arrayValue = new AMFArrayValue();
// Read size of dense array
auto sizeOfDenseArray = (ReadU29(inStream) >> 1);
-
- // Then read Key'd portion
+ // Then read associative portion
while (true) {
auto key = ReadString(inStream);
- // No more values when we encounter an empty string
+ // No more associative values when we encounter an empty string key
if (key.size() == 0) break;
- arrayValue->InsertValue(key, Read(inStream));
+ arrayValue->Insert(key, Read(inStream));
}
-
// Finally read dense portion
for (uint32_t i = 0; i < sizeOfDenseArray; i++) {
- arrayValue->PushBackValue(Read(inStream));
+ arrayValue->Insert(i, Read(inStream));
}
-
return arrayValue;
}
-AMFValue* AMFDeserialize::ReadAmfString(RakNet::BitStream* inStream) {
- auto stringValue = new AMFStringValue();
- stringValue->SetStringValue(ReadString(inStream));
- return stringValue;
+AMFBaseValue* AMFDeserialize::ReadAmfString(RakNet::BitStream* inStream) {
+ return new AMFStringValue(ReadString(inStream));
}
-AMFValue* AMFDeserialize::ReadAmfInteger(RakNet::BitStream* inStream) {
- auto integerValue = new AMFIntegerValue();
- integerValue->SetIntegerValue(ReadU29(inStream));
- return integerValue;
+AMFBaseValue* AMFDeserialize::ReadAmfInteger(RakNet::BitStream* inStream) {
+ return new AMFIntValue(ReadU29(inStream));
}
diff --git a/dCommon/AMFDeserialize.h b/dCommon/AMFDeserialize.h
index a49cdcd2..5e2729eb 100644
--- a/dCommon/AMFDeserialize.h
+++ b/dCommon/AMFDeserialize.h
@@ -5,7 +5,8 @@
#include
#include
-class AMFValue;
+class AMFBaseValue;
+
class AMFDeserialize {
public:
/**
@@ -14,7 +15,7 @@ public:
* @param inStream inStream to read value from.
* @return Returns an AMFValue with all the information from the bitStream in it.
*/
- AMFValue* Read(RakNet::BitStream* inStream);
+ AMFBaseValue* Read(RakNet::BitStream* inStream);
private:
/**
* @brief Private method to read a U29 integer from a bitstream
@@ -30,7 +31,7 @@ private:
* @param inStream bitStream to read data from
* @return The read string
*/
- std::string ReadString(RakNet::BitStream* inStream);
+ const std::string ReadString(RakNet::BitStream* inStream);
/**
* @brief Read an AMFDouble value from a bitStream
@@ -38,7 +39,7 @@ private:
* @param inStream bitStream to read data from
* @return Double value represented as an AMFValue
*/
- AMFValue* ReadAmfDouble(RakNet::BitStream* inStream);
+ AMFBaseValue* ReadAmfDouble(RakNet::BitStream* inStream);
/**
* @brief Read an AMFArray from a bitStream
@@ -46,7 +47,7 @@ private:
* @param inStream bitStream to read data from
* @return Array value represented as an AMFValue
*/
- AMFValue* ReadAmfArray(RakNet::BitStream* inStream);
+ AMFBaseValue* ReadAmfArray(RakNet::BitStream* inStream);
/**
* @brief Read an AMFString from a bitStream
@@ -54,7 +55,7 @@ private:
* @param inStream bitStream to read data from
* @return String value represented as an AMFValue
*/
- AMFValue* ReadAmfString(RakNet::BitStream* inStream);
+ AMFBaseValue* ReadAmfString(RakNet::BitStream* inStream);
/**
* @brief Read an AMFInteger from a bitStream
@@ -62,7 +63,7 @@ private:
* @param inStream bitStream to read data from
* @return Integer value represented as an AMFValue
*/
- AMFValue* ReadAmfInteger(RakNet::BitStream* inStream);
+ AMFBaseValue* ReadAmfInteger(RakNet::BitStream* inStream);
/**
* List of strings read so far saved to be read by reference.
diff --git a/dCommon/AMFFormat.cpp b/dCommon/AMFFormat.cpp
deleted file mode 100644
index 4407b29c..00000000
--- a/dCommon/AMFFormat.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-#include "AMFFormat.h"
-
-// AMFInteger
-void AMFIntegerValue::SetIntegerValue(uint32_t value) {
- this->value = value;
-}
-
-uint32_t AMFIntegerValue::GetIntegerValue() {
- return this->value;
-}
-
-// AMFDouble
-void AMFDoubleValue::SetDoubleValue(double value) {
- this->value = value;
-}
-
-double AMFDoubleValue::GetDoubleValue() {
- return this->value;
-}
-
-// AMFString
-void AMFStringValue::SetStringValue(const std::string& value) {
- this->value = value;
-}
-
-std::string AMFStringValue::GetStringValue() {
- return this->value;
-}
-
-// AMFXMLDoc
-void AMFXMLDocValue::SetXMLDocValue(const std::string& value) {
- this->xmlData = value;
-}
-
-std::string AMFXMLDocValue::GetXMLDocValue() {
- return this->xmlData;
-}
-
-// AMFDate
-void AMFDateValue::SetDateValue(uint64_t value) {
- this->millisecondTimestamp = value;
-}
-
-uint64_t AMFDateValue::GetDateValue() {
- return this->millisecondTimestamp;
-}
-
-// AMFArray Insert Value
-void AMFArrayValue::InsertValue(const std::string& key, AMFValue* value) {
- this->associative.insert(std::make_pair(key, value));
-}
-
-// AMFArray Remove Value
-void AMFArrayValue::RemoveValue(const std::string& key) {
- _AMFArrayMap_::iterator it = this->associative.find(key);
- if (it != this->associative.end()) {
- this->associative.erase(it);
- }
-}
-
-// AMFArray Get Associative Iterator Begin
-_AMFArrayMap_::iterator AMFArrayValue::GetAssociativeIteratorValueBegin() {
- return this->associative.begin();
-}
-
-// AMFArray Get Associative Iterator End
-_AMFArrayMap_::iterator AMFArrayValue::GetAssociativeIteratorValueEnd() {
- return this->associative.end();
-}
-
-// AMFArray Push Back Value
-void AMFArrayValue::PushBackValue(AMFValue* value) {
- this->dense.push_back(value);
-}
-
-// AMFArray Pop Back Value
-void AMFArrayValue::PopBackValue() {
- this->dense.pop_back();
-}
-
-// AMFArray Get Dense List Size
-uint32_t AMFArrayValue::GetDenseValueSize() {
- return (uint32_t)this->dense.size();
-}
-
-// AMFArray Get Dense Iterator Begin
-_AMFArrayList_::iterator AMFArrayValue::GetDenseIteratorBegin() {
- return this->dense.begin();
-}
-
-// AMFArray Get Dense Iterator End
-_AMFArrayList_::iterator AMFArrayValue::GetDenseIteratorEnd() {
- return this->dense.end();
-}
-
-AMFArrayValue::~AMFArrayValue() {
- for (auto valueToDelete : GetDenseArray()) {
- if (valueToDelete) delete valueToDelete;
- }
- for (auto valueToDelete : GetAssociativeMap()) {
- if (valueToDelete.second) delete valueToDelete.second;
- }
-}
-
-// AMFObject Constructor
-AMFObjectValue::AMFObjectValue(std::vector> traits) {
- this->traits.reserve(traits.size());
- std::vector>::iterator it = traits.begin();
- while (it != traits.end()) {
- this->traits.insert(std::make_pair(it->first, std::make_pair(it->second, new AMFNullValue())));
- it++;
- }
-}
-
-// AMFObject Set Value
-void AMFObjectValue::SetTraitValue(const std::string& trait, AMFValue* value) {
- if (value) {
- _AMFObjectTraits_::iterator it = this->traits.find(trait);
- if (it != this->traits.end()) {
- if (it->second.first == value->GetValueType()) {
- it->second.second = value;
- }
- }
- }
-}
-
-// AMFObject Get Value
-AMFValue* AMFObjectValue::GetTraitValue(const std::string& trait) {
- _AMFObjectTraits_::iterator it = this->traits.find(trait);
- if (it != this->traits.end()) {
- return it->second.second;
- }
-
- return nullptr;
-}
-
-// AMFObject Get Trait Iterator Begin
-_AMFObjectTraits_::iterator AMFObjectValue::GetTraitsIteratorBegin() {
- return this->traits.begin();
-}
-
-// AMFObject Get Trait Iterator End
-_AMFObjectTraits_::iterator AMFObjectValue::GetTraitsIteratorEnd() {
- return this->traits.end();
-}
-
-// AMFObject Get Trait Size
-uint32_t AMFObjectValue::GetTraitArrayCount() {
- return (uint32_t)this->traits.size();
-}
-
-AMFObjectValue::~AMFObjectValue() {
- for (auto valueToDelete = GetTraitsIteratorBegin(); valueToDelete != GetTraitsIteratorEnd(); valueToDelete++) {
- if (valueToDelete->second.second) delete valueToDelete->second.second;
- }
-}
diff --git a/dCommon/AMFFormat.h b/dCommon/AMFFormat.h
deleted file mode 100644
index 6e479ef6..00000000
--- a/dCommon/AMFFormat.h
+++ /dev/null
@@ -1,413 +0,0 @@
-#pragma once
-
-// Custom Classes
-#include "dCommonVars.h"
-
-// C++
-#include
-#include
-
-/*!
- \file AMFFormat.hpp
- \brief A class for managing AMF values
- */
-
-class AMFValue; // Forward declaration
-
-// Definitions
-#define _AMFArrayMap_ std::unordered_map
-#define _AMFArrayList_ std::vector
-
-#define _AMFObjectTraits_ std::unordered_map>
-#define _AMFObjectDynamicTraits_ std::unordered_map
-
-//! An enum for each AMF value type
-enum AMFValueType : unsigned char {
- AMFUndefined = 0x00, //!< An undefined AMF Value
- AMFNull = 0x01, //!< A null AMF value
- AMFFalse = 0x02, //!< A false AMF value
- AMFTrue = 0x03, //!< A true AMF value
- AMFInteger = 0x04, //!< An integer AMF value
- AMFDouble = 0x05, //!< A double AMF value
- AMFString = 0x06, //!< A string AMF value
- AMFXMLDoc = 0x07, //!< An XML Doc AMF value
- AMFDate = 0x08, //!< A date AMF value
- AMFArray = 0x09, //!< An array AMF value
- AMFObject = 0x0A, //!< An object AMF value
- AMFXML = 0x0B, //!< An XML AMF value
- AMFByteArray = 0x0C, //!< A byte array AMF value
- AMFVectorInt = 0x0D, //!< An integer vector AMF value
- AMFVectorUInt = 0x0E, //!< An unsigned integer AMF value
- AMFVectorDouble = 0x0F, //!< A double vector AMF value
- AMFVectorObject = 0x10, //!< An object vector AMF value
- AMFDictionary = 0x11 //!< A dictionary AMF value
-};
-
-//! An enum for the object value types
-enum AMFObjectValueType : unsigned char {
- AMFObjectAnonymous = 0x01,
- AMFObjectTyped = 0x02,
- AMFObjectDynamic = 0x03,
- AMFObjectExternalizable = 0x04
-};
-
-//! The base AMF value class
-class AMFValue {
-public:
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- virtual AMFValueType GetValueType() = 0;
- virtual ~AMFValue() {};
-};
-
-//! A typedef for a pointer to an AMF value
-typedef AMFValue* NDGFxValue;
-
-
-// The various AMF value types
-
-//! The undefined value AMF type
-class AMFUndefinedValue : public AMFValue {
-private:
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-public:
- static const AMFValueType ValueType = AMFUndefined;
-};
-
-//! The null value AMF type
-class AMFNullValue : public AMFValue {
-private:
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-public:
- static const AMFValueType ValueType = AMFNull;
-};
-
-//! The false value AMF type
-class AMFFalseValue : public AMFValue {
-private:
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-public:
- static const AMFValueType ValueType = AMFFalse;
-};
-
-//! The true value AMF type
-class AMFTrueValue : public AMFValue {
-private:
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-public:
- static const AMFValueType ValueType = AMFTrue;
-};
-
-//! The integer value AMF type
-class AMFIntegerValue : public AMFValue {
-private:
- uint32_t value; //!< The value of the AMF type
-
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-
-public:
- static const AMFValueType ValueType = AMFInteger;
- //! Sets the integer value
- /*!
- \param value The value to set
- */
- void SetIntegerValue(uint32_t value);
-
- //! Gets the integer value
- /*!
- \return The integer value
- */
- uint32_t GetIntegerValue();
-};
-
-//! The double value AMF type
-class AMFDoubleValue : public AMFValue {
-private:
- double value; //!< The value of the AMF type
-
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-
-public:
- static const AMFValueType ValueType = AMFDouble;
- //! Sets the double value
- /*!
- \param value The value to set to
- */
- void SetDoubleValue(double value);
-
- //! Gets the double value
- /*!
- \return The double value
- */
- double GetDoubleValue();
-};
-
-//! The string value AMF type
-class AMFStringValue : public AMFValue {
-private:
- std::string value; //!< The value of the AMF type
-
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-
-public:
- static const AMFValueType ValueType = AMFString;
- //! Sets the string value
- /*!
- \param value The string value to set to
- */
- void SetStringValue(const std::string& value);
-
- //! Gets the string value
- /*!
- \return The string value
- */
- std::string GetStringValue();
-};
-
-//! The XML doc value AMF type
-class AMFXMLDocValue : public AMFValue {
-private:
- std::string xmlData; //!< The value of the AMF type
-
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-
-public:
- static const AMFValueType ValueType = AMFXMLDoc;
- //! Sets the XML Doc value
- /*!
- \param value The value to set to
- */
- void SetXMLDocValue(const std::string& value);
-
- //! Gets the XML Doc value
- /*!
- \return The XML Doc value
- */
- std::string GetXMLDocValue();
-};
-
-//! The date value AMF type
-class AMFDateValue : public AMFValue {
-private:
- uint64_t millisecondTimestamp; //!< The time in milliseconds since the ephoch
-
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() { return ValueType; }
-
-public:
- static const AMFValueType ValueType = AMFDate;
- //! Sets the date time
- /*!
- \param value The value to set to
- */
- void SetDateValue(uint64_t value);
-
- //! Gets the date value
- /*!
- \return The date value in milliseconds since the epoch
- */
- uint64_t GetDateValue();
-};
-
-//! The array value AMF type
-// This object will manage it's own memory map and list. Do not delete its values.
-class AMFArrayValue : public AMFValue {
-private:
- _AMFArrayMap_ associative; //!< The array map (associative part)
- _AMFArrayList_ dense; //!< The array list (dense part)
-
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() override { return ValueType; }
-
-public:
- static const AMFValueType ValueType = AMFArray;
-
- ~AMFArrayValue() override;
- //! Inserts an item into the array map for a specific key
- /*!
- \param key The key to set
- \param value The value to add
- */
- void InsertValue(const std::string& key, AMFValue* value);
-
- //! Removes an item for a specific key
- /*!
- \param key The key to remove
- */
- void RemoveValue(const std::string& key);
-
- //! Finds an AMF value
- /*!
- \return The AMF value if found, nullptr otherwise
- */
- template
- T* FindValue(const std::string& key) const {
- _AMFArrayMap_::const_iterator it = this->associative.find(key);
- if (it != this->associative.end() && T::ValueType == it->second->GetValueType()) {
- return dynamic_cast(it->second);
- }
-
- return nullptr;
- };
-
- //! Returns where the associative iterator begins
- /*!
- \return Where the array map iterator begins
- */
- _AMFArrayMap_::iterator GetAssociativeIteratorValueBegin();
-
- //! Returns where the associative iterator ends
- /*!
- \return Where the array map iterator ends
- */
- _AMFArrayMap_::iterator GetAssociativeIteratorValueEnd();
-
- //! Pushes back a value into the array list
- /*!
- \param value The value to push back
- */
- void PushBackValue(AMFValue* value);
-
- //! Pops back the last value in the array list
- void PopBackValue();
-
- //! Gets the count of the dense list
- /*!
- \return The dense list size
- */
- uint32_t GetDenseValueSize();
-
- //! Gets a specific value from the list for the specified index
- /*!
- \param index The index to get
- */
- template
- T* GetValueAt(uint32_t index) {
- if (index >= this->dense.size()) return nullptr;
- AMFValue* foundValue = this->dense.at(index);
- return T::ValueType == foundValue->GetValueType() ? dynamic_cast(foundValue) : nullptr;
- };
-
- //! Returns where the dense iterator begins
- /*!
- \return Where the iterator begins
- */
- _AMFArrayList_::iterator GetDenseIteratorBegin();
-
- //! Returns where the dense iterator ends
- /*!
- \return Where the iterator ends
- */
- _AMFArrayList_::iterator GetDenseIteratorEnd();
-
- //! Returns the associative map
- /*!
- \return The associative map
- */
- _AMFArrayMap_ GetAssociativeMap() { return this->associative; };
-
- //! Returns the dense array
- /*!
- \return The dense array
- */
- _AMFArrayList_ GetDenseArray() { return this->dense; };
-};
-
-//! The anonymous object value AMF type
-class AMFObjectValue : public AMFValue {
-private:
- _AMFObjectTraits_ traits; //!< The object traits
-
- //! Returns the AMF value type
- /*!
- \return The AMF value type
- */
- AMFValueType GetValueType() override { return ValueType; }
- ~AMFObjectValue() override;
-
-public:
- static const AMFValueType ValueType = AMFObject;
- //! Constructor
- /*!
- \param traits The traits to set
- */
- AMFObjectValue(std::vector> traits);
-
- //! Gets the object value type
- /*!
- \return The object value type
- */
- virtual AMFObjectValueType GetObjectValueType() { return AMFObjectAnonymous; }
-
- //! Sets the value of a trait
- /*!
- \param trait The trait to set the value for
- \param value The AMF value to set
- */
- void SetTraitValue(const std::string& trait, AMFValue* value);
-
- //! Gets a trait value
- /*!
- \param trait The trait to get the value for
- \return The trait value
- */
- AMFValue* GetTraitValue(const std::string& trait);
-
- //! Gets the beginning of the object traits iterator
- /*!
- \return The AMF trait array iterator begin
- */
- _AMFObjectTraits_::iterator GetTraitsIteratorBegin();
-
- //! Gets the end of the object traits iterator
- /*!
- \return The AMF trait array iterator begin
- */
- _AMFObjectTraits_::iterator GetTraitsIteratorEnd();
-
- //! Gets the amount of traits
- /*!
- \return The amount of traits
- */
- uint32_t GetTraitArrayCount();
-};
diff --git a/dCommon/AMFFormat_BitStream.cpp b/dCommon/AMFFormat_BitStream.cpp
deleted file mode 100644
index b603ba31..00000000
--- a/dCommon/AMFFormat_BitStream.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-#include "AMFFormat_BitStream.h"
-
-// Writes an AMFValue pointer to a RakNet::BitStream
-template<>
-void RakNet::BitStream::Write(AMFValue* value) {
- if (value != nullptr) {
- AMFValueType type = value->GetValueType();
-
- switch (type) {
- case AMFUndefined: {
- AMFUndefinedValue* v = (AMFUndefinedValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFNull: {
- AMFNullValue* v = (AMFNullValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFFalse: {
- AMFFalseValue* v = (AMFFalseValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFTrue: {
- AMFTrueValue* v = (AMFTrueValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFInteger: {
- AMFIntegerValue* v = (AMFIntegerValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFDouble: {
- AMFDoubleValue* v = (AMFDoubleValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFString: {
- AMFStringValue* v = (AMFStringValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFXMLDoc: {
- AMFXMLDocValue* v = (AMFXMLDocValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFDate: {
- AMFDateValue* v = (AMFDateValue*)value;
- this->Write(*v);
- break;
- }
-
- case AMFArray: {
- this->Write((AMFArrayValue*)value);
- break;
- }
- }
- }
-}
-
-/**
- * A private function to write an value to a RakNet::BitStream
- * RakNet writes in the correct byte order - do not reverse this.
- */
-void WriteUInt29(RakNet::BitStream* bs, uint32_t v) {
- unsigned char b4 = (unsigned char)v;
- if (v < 0x00200000) {
- b4 = b4 & 0x7F;
- if (v > 0x7F) {
- unsigned char b3;
- v = v >> 7;
- b3 = ((unsigned char)(v)) | 0x80;
- if (v > 0x7F) {
- unsigned char b2;
- v = v >> 7;
- b2 = ((unsigned char)(v)) | 0x80;
- bs->Write(b2);
- }
-
- bs->Write(b3);
- }
- } else {
- unsigned char b1;
- unsigned char b2;
- unsigned char b3;
-
- v = v >> 8;
- b3 = ((unsigned char)(v)) | 0x80;
- v = v >> 7;
- b2 = ((unsigned char)(v)) | 0x80;
- v = v >> 7;
- b1 = ((unsigned char)(v)) | 0x80;
-
- bs->Write(b1);
- bs->Write(b2);
- bs->Write(b3);
- }
-
- bs->Write(b4);
-}
-
-/**
- * Writes a flag number to a RakNet::BitStream
- * RakNet writes in the correct byte order - do not reverse this.
- */
-void WriteFlagNumber(RakNet::BitStream* bs, uint32_t v) {
- v = (v << 1) | 0x01;
- WriteUInt29(bs, v);
-}
-
-/**
- * Writes an AMFString to a RakNet::BitStream
- *
- * RakNet writes in the correct byte order - do not reverse this.
- */
-void WriteAMFString(RakNet::BitStream* bs, const std::string& str) {
- WriteFlagNumber(bs, (uint32_t)str.size());
- bs->Write(str.c_str(), (uint32_t)str.size());
-}
-
-/**
- * Writes an U16 to a bitstream
- *
- * RakNet writes in the correct byte order - do not reverse this.
- */
-void WriteAMFU16(RakNet::BitStream* bs, uint16_t value) {
- bs->Write(value);
-}
-
-/**
- * Writes an U32 to a bitstream
- *
- * RakNet writes in the correct byte order - do not reverse this.
- */
-void WriteAMFU32(RakNet::BitStream* bs, uint32_t value) {
- bs->Write(value);
-}
-
-/**
- * Writes an U64 to a bitstream
- *
- * RakNet writes in the correct byte order - do not reverse this.
- */
-void WriteAMFU64(RakNet::BitStream* bs, uint64_t value) {
- bs->Write(value);
-}
-
-
-// Writes an AMFUndefinedValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFUndefinedValue value) {
- this->Write(AMFUndefined);
-}
-
-// Writes an AMFNullValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFNullValue value) {
- this->Write(AMFNull);
-}
-
-// Writes an AMFFalseValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFFalseValue value) {
- this->Write(AMFFalse);
-}
-
-// Writes an AMFTrueValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFTrueValue value) {
- this->Write(AMFTrue);
-}
-
-// Writes an AMFIntegerValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFIntegerValue value) {
- this->Write(AMFInteger);
- WriteUInt29(this, value.GetIntegerValue());
-}
-
-// Writes an AMFDoubleValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFDoubleValue value) {
- this->Write(AMFDouble);
- double d = value.GetDoubleValue();
- WriteAMFU64(this, *((unsigned long long*) & d));
-}
-
-// Writes an AMFStringValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFStringValue value) {
- this->Write(AMFString);
- std::string v = value.GetStringValue();
- WriteAMFString(this, v);
-}
-
-// Writes an AMFXMLDocValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFXMLDocValue value) {
- this->Write(AMFXMLDoc);
- std::string v = value.GetXMLDocValue();
- WriteAMFString(this, v);
-}
-
-// Writes an AMFDateValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFDateValue value) {
- this->Write(AMFDate);
- uint64_t date = value.GetDateValue();
- WriteAMFU64(this, date);
-}
-
-// Writes an AMFArrayValue to BitStream
-template<>
-void RakNet::BitStream::Write(AMFArrayValue* value) {
- this->Write(AMFArray);
- uint32_t denseSize = value->GetDenseValueSize();
- WriteFlagNumber(this, denseSize);
-
- _AMFArrayMap_::iterator it = value->GetAssociativeIteratorValueBegin();
- _AMFArrayMap_::iterator end = value->GetAssociativeIteratorValueEnd();
-
- while (it != end) {
- WriteAMFString(this, it->first);
- this->Write(it->second);
- it++;
- }
-
- this->Write(AMFNull);
-
- if (denseSize > 0) {
- _AMFArrayList_::iterator it2 = value->GetDenseIteratorBegin();
- _AMFArrayList_::iterator end2 = value->GetDenseIteratorEnd();
-
- while (it2 != end2) {
- this->Write(*it2);
- it2++;
- }
- }
-}
diff --git a/dCommon/AMFFormat_BitStream.h b/dCommon/AMFFormat_BitStream.h
deleted file mode 100644
index caa49337..00000000
--- a/dCommon/AMFFormat_BitStream.h
+++ /dev/null
@@ -1,92 +0,0 @@
-#pragma once
-
-// Custom Classes
-#include "AMFFormat.h"
-
-// RakNet
-#include
-
-/*!
- \file AMFFormat_BitStream.h
- \brief A class that implements native writing of AMF values to RakNet::BitStream
- */
-
- // We are using the RakNet namespace
-namespace RakNet {
- //! Writes an AMFValue pointer to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFValue* value);
-
- //! Writes an AMFUndefinedValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFUndefinedValue value);
-
- //! Writes an AMFNullValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFNullValue value);
-
- //! Writes an AMFFalseValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFFalseValue value);
-
- //! Writes an AMFTrueValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFTrueValue value);
-
- //! Writes an AMFIntegerValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFIntegerValue value);
-
- //! Writes an AMFDoubleValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFDoubleValue value);
-
- //! Writes an AMFStringValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFStringValue value);
-
- //! Writes an AMFXMLDocValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFXMLDocValue value);
-
- //! Writes an AMFDateValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFDateValue value);
-
- //! Writes an AMFArrayValue to a RakNet::BitStream
- /*!
- \param value The value to write
- */
- template <>
- void RakNet::BitStream::Write(AMFArrayValue* value);
-} // namespace RakNet
diff --git a/dCommon/Amf3.h b/dCommon/Amf3.h
new file mode 100644
index 00000000..4dba039f
--- /dev/null
+++ b/dCommon/Amf3.h
@@ -0,0 +1,368 @@
+#ifndef __AMF3__H__
+#define __AMF3__H__
+
+#include "dCommonVars.h"
+#include "dLogger.h"
+#include "Game.h"
+
+#include
+#include
+
+enum class eAmf : uint8_t {
+ Undefined = 0x00, // An undefined AMF Value
+ Null = 0x01, // A null AMF value
+ False = 0x02, // A false AMF value
+ True = 0x03, // A true AMF value
+ Integer = 0x04, // An integer AMF value
+ Double = 0x05, // A double AMF value
+ String = 0x06, // A string AMF value
+ XMLDoc = 0x07, // Unused in the live client and cannot be serialized without modification. An XML Doc AMF value
+ Date = 0x08, // Unused in the live client and cannot be serialized without modification. A date AMF value
+ Array = 0x09, // An array AMF value
+ Object = 0x0A, // Unused in the live client and cannot be serialized without modification. An object AMF value
+ XML = 0x0B, // Unused in the live client and cannot be serialized without modification. An XML AMF value
+ ByteArray = 0x0C, // Unused in the live client and cannot be serialized without modification. A byte array AMF value
+ VectorInt = 0x0D, // Unused in the live client and cannot be serialized without modification. An integer vector AMF value
+ VectorUInt = 0x0E, // Unused in the live client and cannot be serialized without modification. An unsigned integer AMF value
+ VectorDouble = 0x0F, // Unused in the live client and cannot be serialized without modification. A double vector AMF value
+ VectorObject = 0x10, // Unused in the live client and cannot be serialized without modification. An object vector AMF value
+ Dictionary = 0x11 // Unused in the live client and cannot be serialized without modification. A dictionary AMF value
+};
+
+class AMFBaseValue {
+public:
+ virtual eAmf GetValueType() { return eAmf::Undefined; };
+ AMFBaseValue() {};
+ virtual ~AMFBaseValue() {};
+};
+
+template
+class AMFValue : public AMFBaseValue {
+public:
+ AMFValue() {};
+ AMFValue(ValueType value) { SetValue(value); };
+ virtual ~AMFValue() override {};
+
+ eAmf GetValueType() override { return eAmf::Undefined; };
+
+ const ValueType& GetValue() { return data; };
+ void SetValue(ValueType value) { data = value; };
+protected:
+ ValueType data;
+};
+
+// As a string this is much easier to write and read from a BitStream.
+template<>
+class AMFValue : public AMFBaseValue {
+public:
+ AMFValue() {};
+ AMFValue(const char* value) { SetValue(std::string(value)); };
+ virtual ~AMFValue() override {};
+
+ eAmf GetValueType() override { return eAmf::String; };
+
+ const std::string& GetValue() { return data; };
+ void SetValue(std::string value) { data = value; };
+protected:
+ std::string data;
+};
+
+typedef AMFValue AMFNullValue;
+typedef AMFValue AMFBoolValue;
+typedef AMFValue AMFIntValue;
+typedef AMFValue AMFStringValue;
+typedef AMFValue AMFDoubleValue;
+
+template<> inline eAmf AMFValue::GetValueType() { return eAmf::Null; };
+template<> inline eAmf AMFValue::GetValueType() { return this->data ? eAmf::True : eAmf::False; };
+template<> inline eAmf AMFValue::GetValueType() { return eAmf::Integer; };
+template<> inline eAmf AMFValue::GetValueType() { return eAmf::Integer; };
+template<> inline eAmf AMFValue::GetValueType() { return eAmf::String; };
+template<> inline eAmf AMFValue::GetValueType() { return eAmf::Double; };
+
+/**
+ * The AMFArrayValue object holds 2 types of lists:
+ * An associative list where a key maps to a value
+ * A Dense list where elements are stored back to back
+ *
+ * Objects that are Registered are owned by this object
+ * and are not to be deleted by a caller.
+ */
+class AMFArrayValue : public AMFBaseValue {
+
+ typedef std::unordered_map AMFAssociative;
+ typedef std::vector AMFDense;
+
+public:
+ eAmf GetValueType() override { return eAmf::Array; };
+
+ ~AMFArrayValue() override {
+ for (auto valueToDelete : GetDense()) {
+ if (valueToDelete) {
+ delete valueToDelete;
+ valueToDelete = nullptr;
+ }
+ }
+ for (auto valueToDelete : GetAssociative()) {
+ if (valueToDelete.second) {
+ delete valueToDelete.second;
+ valueToDelete.second = nullptr;
+ }
+ }
+ };
+
+ /**
+ * Returns the Associative portion of the object
+ */
+ inline AMFAssociative& GetAssociative() { return this->associative; };
+
+ /**
+ * Returns the dense portion of the object
+ */
+ inline AMFDense& GetDense() { return this->dense; };
+
+ /**
+ * Inserts an AMFValue into the associative portion with the given key.
+ * If a duplicate is attempted to be inserted, it is ignored and the
+ * first value with that key is kept in the map.
+ *
+ * These objects are not to be deleted by the caller as they are owned by
+ * the AMFArray object which manages its own memory.
+ *
+ * @param key The key to associate with the value
+ * @param value The value to insert
+ *
+ * @return The inserted element if the type matched,
+ * or nullptr if a key existed and was not the same type
+ */
+ template
+ std::pair*, bool> Insert(const std::string& key, ValueType value) {
+ auto element = associative.find(key);
+ AMFValue* val = nullptr;
+ bool found = true;
+ if (element == associative.end()) {
+ val = new AMFValue(value);
+ associative.insert(std::make_pair(key, val));
+ } else {
+ val = dynamic_cast*>(element->second);
+ found = false;
+ }
+ return std::make_pair(val, found);
+ };
+
+ // Associates an array with a string key
+ std::pair Insert(const std::string& key) {
+ auto element = associative.find(key);
+ AMFArrayValue* val = nullptr;
+ bool found = true;
+ if (element == associative.end()) {
+ val = new AMFArrayValue();
+ associative.insert(std::make_pair(key, val));
+ } else {
+ val = dynamic_cast(element->second);
+ found = false;
+ }
+ return std::make_pair(val, found);
+ };
+
+ // Associates an array with an integer key
+ std::pair Insert(const uint32_t& index) {
+ AMFArrayValue* val = nullptr;
+ bool inserted = false;
+ if (index >= dense.size()) {
+ dense.resize(index + 1);
+ val = new AMFArrayValue();
+ dense.at(index) = val;
+ inserted = true;
+ }
+ return std::make_pair(dynamic_cast(dense.at(index)), inserted);
+ };
+
+ /**
+ * @brief Inserts an AMFValue into the AMFArray key'd by index.
+ * Attempting to insert the same key to the same value twice overwrites
+ * the previous value with the new one.
+ *
+ * @param index The index to associate with the value
+ * @param value The value to insert
+ * @return The inserted element, or nullptr if the type did not match
+ * what was at the index.
+ */
+ template
+ std::pair*, bool> Insert(const uint32_t& index, ValueType value) {
+ AMFValue* val = nullptr;
+ bool inserted = false;
+ if (index >= this->dense.size()) {
+ this->dense.resize(index + 1);
+ val = new AMFValue(value);
+ this->dense.at(index) = val;
+ inserted = true;
+ }
+ return std::make_pair(dynamic_cast*>(this->dense.at(index)), inserted);
+ };
+
+ /**
+ * Inserts an AMFValue into the associative portion with the given key.
+ * If a duplicate is attempted to be inserted, it replaces the original
+ *
+ * The inserted element is now owned by this object and is not to be deleted
+ *
+ * @param key The key to associate with the value
+ * @param value The value to insert
+ */
+ void Insert(const std::string& key, AMFBaseValue* value) {
+ auto element = associative.find(key);
+ if (element != associative.end() && element->second) {
+ delete element->second;
+ element->second = value;
+ } else {
+ associative.insert(std::make_pair(key, value));
+ }
+ };
+
+ /**
+ * Inserts an AMFValue into the associative portion with the given index.
+ * If a duplicate is attempted to be inserted, it replaces the original
+ *
+ * The inserted element is now owned by this object and is not to be deleted
+ *
+ * @param key The key to associate with the value
+ * @param value The value to insert
+ */
+ void Insert(const uint32_t index, AMFBaseValue* value) {
+ if (index < dense.size()) {
+ AMFDense::iterator itr = dense.begin() + index;
+ if (*itr) delete dense.at(index);
+ } else {
+ dense.resize(index + 1);
+ }
+ dense.at(index) = value;
+ };
+
+ /**
+ * Pushes an AMFValue into the back of the dense portion.
+ *
+ * These objects are not to be deleted by the caller as they are owned by
+ * the AMFArray object which manages its own memory.
+ *
+ * @param value The value to insert
+ *
+ * @return The inserted pointer, or nullptr should the key already be in use.
+ */
+ template
+ inline AMFValue* Push(ValueType value) {
+ return Insert(this->dense.size(), value).first;
+ };
+
+ /**
+ * Removes the key from the associative portion
+ *
+ * The pointer removed is now no longer managed by this container
+ *
+ * @param key The key to remove from the associative portion
+ */
+ void Remove(const std::string& key, bool deleteValue = true) {
+ AMFAssociative::iterator it = this->associative.find(key);
+ if (it != this->associative.end()) {
+ if (deleteValue) delete it->second;
+ this->associative.erase(it);
+ }
+ }
+
+ /**
+ * Pops the last element in the dense portion, deleting it in the process.
+ */
+ void Remove(const uint32_t index) {
+ if (!this->dense.empty() && index < this->dense.size()) {
+ auto itr = this->dense.begin() + index;
+ if (*itr) delete (*itr);
+ this->dense.erase(itr);
+ }
+ }
+
+ void Pop() {
+ if (!this->dense.empty()) Remove(this->dense.size() - 1);
+ }
+
+ AMFArrayValue* GetArray(const std::string& key) {
+ AMFAssociative::const_iterator it = this->associative.find(key);
+ if (it != this->associative.end()) {
+ return dynamic_cast(it->second);
+ }
+ return nullptr;
+ };
+
+ AMFArrayValue* GetArray(const uint32_t index) {
+ return index >= this->dense.size() ? nullptr : dynamic_cast(this->dense.at(index));
+ };
+
+ inline AMFArrayValue* InsertArray(const std::string& key) {
+ return static_cast(Insert(key).first);
+ };
+
+ inline AMFArrayValue* InsertArray(const uint32_t index) {
+ return static_cast(Insert(index).first);
+ };
+
+ inline AMFArrayValue* PushArray() {
+ return static_cast(Insert(this->dense.size()).first);
+ };
+
+ /**
+ * Gets an AMFValue by the key from the associative portion and converts it
+ * to the AmfValue template type. If the key did not exist, it is inserted.
+ *
+ * @tparam The target object type
+ * @param key The key to lookup
+ *
+ * @return The AMFValue
+ */
+ template
+ AMFValue* Get(const std::string& key) const {
+ AMFAssociative::const_iterator it = this->associative.find(key);
+ return it != this->associative.end() ?
+ dynamic_cast*>(it->second) :
+ nullptr;
+ };
+
+ // Get from the array but dont cast it
+ AMFBaseValue* Get(const std::string& key) const {
+ AMFAssociative::const_iterator it = this->associative.find(key);
+ return it != this->associative.end() ? it->second : nullptr;
+ };
+
+ /**
+ * @brief Get an AMFValue object at a position in the dense portion.
+ * Gets an AMFValue by the index from the dense portion and converts it
+ * to the AmfValue template type. If the index did not exist, it is inserted.
+ *
+ * @tparam The target object type
+ * @param index The index to get
+ * @return The casted object, or nullptr.
+ */
+ template
+ AMFValue* Get(uint32_t index) const {
+ std::cout << (index < this->dense.size()) << std::endl;
+ return index < this->dense.size() ?
+ dynamic_cast*>(this->dense.at(index)) :
+ nullptr;
+ };
+
+ // Get from the dense but dont cast it
+ AMFBaseValue* Get(const uint32_t index) const {
+ return index < this->dense.size() ? this->dense.at(index) : nullptr;
+ };
+private:
+ /**
+ * The associative portion. These values are key'd with strings to an AMFValue.
+ */
+ AMFAssociative associative;
+
+ /**
+ * The dense portion. These AMFValue's are stored one after
+ * another with the most recent addition being at the back.
+ */
+ AMFDense dense;
+};
+
+#endif //!__AMF3__H__
diff --git a/dCommon/AmfSerialize.cpp b/dCommon/AmfSerialize.cpp
new file mode 100644
index 00000000..79ba5e2d
--- /dev/null
+++ b/dCommon/AmfSerialize.cpp
@@ -0,0 +1,184 @@
+#include "AmfSerialize.h"
+
+#include "Game.h"
+#include "dLogger.h"
+
+// Writes an AMFValue pointer to a RakNet::BitStream
+template<>
+void RakNet::BitStream::Write(AMFBaseValue& value) {
+ eAmf type = value.GetValueType();
+ this->Write(type);
+ switch (type) {
+ case eAmf::Integer: {
+ this->Write(*static_cast(&value));
+ break;
+ }
+
+ case eAmf::Double: {
+ this->Write(*static_cast(&value));
+ break;
+ }
+
+ case eAmf::String: {
+ this->Write(*static_cast(&value));
+ break;
+ }
+
+ case eAmf::Array: {
+ this->Write(*static_cast(&value));
+ break;
+ }
+ default: {
+ Game::logger->Log("AmfSerialize", "Encountered unwritable AMFType %i!", type);
+ }
+ case eAmf::Undefined:
+ case eAmf::Null:
+ case eAmf::False:
+ case eAmf::True:
+ case eAmf::Date:
+ case eAmf::Object:
+ case eAmf::XML:
+ case eAmf::XMLDoc:
+ case eAmf::ByteArray:
+ case eAmf::VectorInt:
+ case eAmf::VectorUInt:
+ case eAmf::VectorDouble:
+ case eAmf::VectorObject:
+ case eAmf::Dictionary:
+ break;
+ }
+}
+
+/**
+ * A private function to write an value to a RakNet::BitStream
+ * RakNet writes in the correct byte order - do not reverse this.
+ */
+void WriteUInt29(RakNet::BitStream* bs, uint32_t v) {
+ unsigned char b4 = (unsigned char)v;
+ if (v < 0x00200000) {
+ b4 = b4 & 0x7F;
+ if (v > 0x7F) {
+ unsigned char b3;
+ v = v >> 7;
+ b3 = ((unsigned char)(v)) | 0x80;
+ if (v > 0x7F) {
+ unsigned char b2;
+ v = v >> 7;
+ b2 = ((unsigned char)(v)) | 0x80;
+ bs->Write(b2);
+ }
+
+ bs->Write(b3);
+ }
+ } else {
+ unsigned char b1;
+ unsigned char b2;
+ unsigned char b3;
+
+ v = v >> 8;
+ b3 = ((unsigned char)(v)) | 0x80;
+ v = v >> 7;
+ b2 = ((unsigned char)(v)) | 0x80;
+ v = v >> 7;
+ b1 = ((unsigned char)(v)) | 0x80;
+
+ bs->Write(b1);
+ bs->Write(b2);
+ bs->Write(b3);
+ }
+
+ bs->Write(b4);
+}
+
+/**
+ * Writes a flag number to a RakNet::BitStream
+ * RakNet writes in the correct byte order - do not reverse this.
+ */
+void WriteFlagNumber(RakNet::BitStream* bs, uint32_t v) {
+ v = (v << 1) | 0x01;
+ WriteUInt29(bs, v);
+}
+
+/**
+ * Writes an AMFString to a RakNet::BitStream
+ *
+ * RakNet writes in the correct byte order - do not reverse this.
+ */
+void WriteAMFString(RakNet::BitStream* bs, const std::string& str) {
+ WriteFlagNumber(bs, (uint32_t)str.size());
+ bs->Write(str.c_str(), (uint32_t)str.size());
+}
+
+/**
+ * Writes an U16 to a bitstream
+ *
+ * RakNet writes in the correct byte order - do not reverse this.
+ */
+void WriteAMFU16(RakNet::BitStream* bs, uint16_t value) {
+ bs->Write(value);
+}
+
+/**
+ * Writes an U32 to a bitstream
+ *
+ * RakNet writes in the correct byte order - do not reverse this.
+ */
+void WriteAMFU32(RakNet::BitStream* bs, uint32_t value) {
+ bs->Write(value);
+}
+
+/**
+ * Writes an U64 to a bitstream
+ *
+ * RakNet writes in the correct byte order - do not reverse this.
+ */
+void WriteAMFU64(RakNet::BitStream* bs, uint64_t value) {
+ bs->Write(value);
+}
+
+// Writes an AMFIntegerValue to BitStream
+template<>
+void RakNet::BitStream::Write(AMFIntValue& value) {
+ WriteUInt29(this, value.GetValue());
+}
+
+// Writes an AMFDoubleValue to BitStream
+template<>
+void RakNet::BitStream::Write(AMFDoubleValue& value) {
+ double d = value.GetValue();
+ WriteAMFU64(this, *reinterpret_cast(&d));
+}
+
+// Writes an AMFStringValue to BitStream
+template<>
+void RakNet::BitStream::Write(AMFStringValue& value) {
+ WriteAMFString(this, value.GetValue());
+}
+
+// Writes an AMFArrayValue to BitStream
+template<>
+void RakNet::BitStream::Write(AMFArrayValue& value) {
+ uint32_t denseSize = value.GetDense().size();
+ WriteFlagNumber(this, denseSize);
+
+ auto it = value.GetAssociative().begin();
+ auto end = value.GetAssociative().end();
+
+ while (it != end) {
+ WriteAMFString(this, it->first);
+ this->Write(*it->second);
+ it++;
+ }
+
+ this->Write(eAmf::Null);
+
+ if (denseSize > 0) {
+ auto it2 = value.GetDense().begin();
+ auto end2 = value.GetDense().end();
+
+ while (it2 != end2) {
+ this->Write(**it2);
+ it2++;
+ }
+ }
+}
diff --git a/dCommon/AmfSerialize.h b/dCommon/AmfSerialize.h
new file mode 100644
index 00000000..9a6f56f2
--- /dev/null
+++ b/dCommon/AmfSerialize.h
@@ -0,0 +1,50 @@
+#pragma once
+
+// Custom Classes
+#include "Amf3.h"
+
+// RakNet
+#include
+
+/*!
+ \file AmfSerialize.h
+ \brief A class that implements native writing of AMF values to RakNet::BitStream
+ */
+
+ // We are using the RakNet namespace
+namespace RakNet {
+ //! Writes an AMFValue pointer to a RakNet::BitStream
+ /*!
+ \param value The value to write
+ */
+ template <>
+ void RakNet::BitStream::Write(AMFBaseValue& value);
+
+ //! Writes an AMFIntegerValue to a RakNet::BitStream
+ /*!
+ \param value The value to write
+ */
+ template <>
+ void RakNet::BitStream::Write(AMFIntValue& value);
+
+ //! Writes an AMFDoubleValue to a RakNet::BitStream
+ /*!
+ \param value The value to write
+ */
+ template <>
+ void RakNet::BitStream::Write(AMFDoubleValue& value);
+
+ //! Writes an AMFStringValue to a RakNet::BitStream
+ /*!
+ \param value The value to write
+ */
+ template <>
+ void RakNet::BitStream::Write(AMFStringValue& value);
+
+ //! Writes an AMFArrayValue to a RakNet::BitStream
+ /*!
+ \param value The value to write
+ */
+ template <>
+ void RakNet::BitStream::Write(AMFArrayValue& value);
+} // namespace RakNet
diff --git a/dCommon/Brick.h b/dCommon/Brick.h
new file mode 100644
index 00000000..e8bd747e
--- /dev/null
+++ b/dCommon/Brick.h
@@ -0,0 +1,11 @@
+#ifndef __BRICK__H__
+#define __BRICK__H__
+
+#include
+
+struct Brick {
+ uint32_t designerID;
+ uint32_t materialID;
+};
+
+#endif //!__BRICK__H__
diff --git a/dCommon/CMakeLists.txt b/dCommon/CMakeLists.txt
index 549acfb2..2517c048 100644
--- a/dCommon/CMakeLists.txt
+++ b/dCommon/CMakeLists.txt
@@ -1,6 +1,6 @@
-set(DCOMMON_SOURCES "AMFFormat.cpp"
+set(DCOMMON_SOURCES
"AMFDeserialize.cpp"
- "AMFFormat_BitStream.cpp"
+ "AmfSerialize.cpp"
"BinaryIO.cpp"
"dConfig.cpp"
"Diagnostics.cpp"
diff --git a/dCommon/Diagnostics.cpp b/dCommon/Diagnostics.cpp
index 3025f083..58d558de 100644
--- a/dCommon/Diagnostics.cpp
+++ b/dCommon/Diagnostics.cpp
@@ -111,7 +111,7 @@ static void ErrorCallback(void* data, const char* msg, int errnum) {
void GenerateDump() {
std::string cmd = "sudo gcore " + std::to_string(getpid());
- system(cmd.c_str());
+ int ret = system(cmd.c_str()); // Saving a return just to prevent warning
}
void CatchUnhandled(int sig) {
diff --git a/dCommon/GeneralUtils.cpp b/dCommon/GeneralUtils.cpp
index df641a1b..99ca687a 100644
--- a/dCommon/GeneralUtils.cpp
+++ b/dCommon/GeneralUtils.cpp
@@ -241,7 +241,7 @@ std::vector GeneralUtils::SplitString(std::wstring& str, wchar_t d
return vector;
}
-std::vector GeneralUtils::SplitString(std::u16string& str, char16_t delimiter) {
+std::vector GeneralUtils::SplitString(const std::u16string& str, char16_t delimiter) {
std::vector vector = std::vector();
std::u16string current;
diff --git a/dCommon/GeneralUtils.h b/dCommon/GeneralUtils.h
index 25aac783..0a8a0a16 100644
--- a/dCommon/GeneralUtils.h
+++ b/dCommon/GeneralUtils.h
@@ -16,6 +16,7 @@
#include "dLogger.h"
enum eInventoryType : uint32_t;
+enum class eObjectBits : size_t;
enum class eReplicaComponentType : uint32_t;
/*!
@@ -66,9 +67,9 @@ namespace GeneralUtils {
//! Sets a bit on a numerical value
template
- void SetBit(T& value, size_t index) {
+ inline void SetBit(T& value, eObjectBits bits) {
static_assert(std::is_arithmetic::value, "Not an arithmetic type");
-
+ auto index = static_cast(bits);
if (index > (sizeof(T) * 8) - 1) {
return;
}
@@ -78,9 +79,9 @@ namespace GeneralUtils {
//! Clears a bit on a numerical value
template
- void ClearBit(T& value, size_t index) {
+ inline void ClearBit(T& value, eObjectBits bits) {
static_assert(std::is_arithmetic::value, "Not an arithmetic type");
-
+ auto index = static_cast(bits);
if (index > (sizeof(T) * 8 - 1)) {
return;
}
@@ -139,7 +140,7 @@ namespace GeneralUtils {
std::vector SplitString(std::wstring& str, wchar_t delimiter);
- std::vector SplitString(std::u16string& str, char16_t delimiter);
+ std::vector SplitString(const std::u16string& str, char16_t delimiter);
std::vector SplitString(const std::string& str, char delimiter);
diff --git a/dCommon/LDFFormat.cpp b/dCommon/LDFFormat.cpp
index 767ec81a..cb921842 100644
--- a/dCommon/LDFFormat.cpp
+++ b/dCommon/LDFFormat.cpp
@@ -3,122 +3,174 @@
// Custom Classes
#include "GeneralUtils.h"
+#include "Game.h"
+#include "dLogger.h"
+
// C++
-#include
+#include
#include
+using LDFKey = std::string_view;
+using LDFTypeAndValue = std::string_view;
+
+using LDFType = std::string_view;
+using LDFValue = std::string_view;
+
//! Returns a pointer to a LDFData value based on string format
-LDFBaseData* LDFBaseData::DataFromString(const std::string& format) {
+LDFBaseData* LDFBaseData::DataFromString(const std::string_view& format) {
+ // A valid LDF must be at least 3 characters long (=0:) is the shortest valid LDF (empty UTF-16 key with no initial value)
+ if (format.empty() || format.length() <= 2) return nullptr;
+ auto equalsPosition = format.find('=');
+ // You can have an empty key, just make sure the type and value might exist
+ if (equalsPosition == std::string::npos || equalsPosition == (format.size() - 1)) return nullptr;
- // First, check the format
- std::istringstream ssFormat(format);
- std::string token;
+ std::pair keyValue;
+ keyValue.first = format.substr(0, equalsPosition);
+ keyValue.second = format.substr(equalsPosition + 1, format.size());
- std::vector keyValueArray;
- while (std::getline(ssFormat, token, '=')) {
- keyValueArray.push_back(token);
+ std::u16string key = GeneralUtils::ASCIIToUTF16(keyValue.first);
+
+ auto colonPosition = keyValue.second.find(':');
+
+ // If : is the first thing after an =, then this is an invalid LDF since
+ // we dont have a type to use.
+ if (colonPosition == std::string::npos || colonPosition == 0) return nullptr;
+
+ std::pair ldfTypeAndValue;
+ ldfTypeAndValue.first = keyValue.second.substr(0, colonPosition);
+ ldfTypeAndValue.second = keyValue.second.substr(colonPosition + 1, keyValue.second.size());
+
+ // Only allow empty values for string values.
+ if (ldfTypeAndValue.second.size() == 0 && !(ldfTypeAndValue.first == "0" || ldfTypeAndValue.first == "13")) return nullptr;
+
+ eLDFType type;
+ char* storage;
+ try {
+ type = static_cast(strtol(ldfTypeAndValue.first.data(), &storage, 10));
+ } catch (std::exception) {
+ Game::logger->Log("LDFFormat", "Attempted to process invalid ldf type (%s) from string (%s)", ldfTypeAndValue.first.data(), format.data());
+ return nullptr;
}
- if (keyValueArray.size() == 2) {
- std::u16string key = GeneralUtils::ASCIIToUTF16(keyValueArray[0]);
+ LDFBaseData* returnValue = nullptr;
+ switch (type) {
+ case LDF_TYPE_UTF_16: {
+ std::u16string data = GeneralUtils::UTF8ToUTF16(ldfTypeAndValue.second);
+ returnValue = new LDFData(key, data);
+ break;
+ }
- std::vector dataArray;
- std::istringstream ssData(keyValueArray[1]);
- while (std::getline(ssData, token, ':')) {
- dataArray.push_back(token);
+ case LDF_TYPE_S32: {
+ try {
+ int32_t data = static_cast(strtoul(ldfTypeAndValue.second.data(), &storage, 10));
+ returnValue = new LDFData(key, data);
+ } catch (std::exception) {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid int32 value (%s) from string (%s)", ldfTypeAndValue.second.data(), format.data());
+ return nullptr;
}
+ break;
+ }
- if (dataArray.size() > 2) { // hacky fix for strings with colons in them
- std::vector newDataArray;
- newDataArray.push_back(dataArray[0]);
- std::string value = "";
- for (size_t i = 1; i < dataArray.size(); ++i) {
- value += dataArray[i] + ':';
- }
- value.pop_back(); // remove last colon
- newDataArray.push_back(value);
- dataArray = newDataArray;
+ case LDF_TYPE_FLOAT: {
+ try {
+ float data = strtof(ldfTypeAndValue.second.data(), &storage);
+ returnValue = new LDFData(key, data);
+ } catch (std::exception) {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid float value (%s) from string (%s)", ldfTypeAndValue.second.data(), format.data());
+ return nullptr;
}
+ break;
+ }
- if ((dataArray[0] == "0" || dataArray[0] == "13") && dataArray.size() == 1) {
- dataArray.push_back("");
+ case LDF_TYPE_DOUBLE: {
+ try {
+ double data = strtod(ldfTypeAndValue.second.data(), &storage);
+ returnValue = new LDFData(key, data);
+ } catch (std::exception) {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid double value (%s) from string (%s)", ldfTypeAndValue.second.data(), format.data());
+ return nullptr;
}
+ break;
+ }
- if (dataArray.size() == 2) {
- eLDFType type = static_cast(stoi(dataArray[0]));
+ case LDF_TYPE_U32:
+ {
+ uint32_t data;
- switch (type) {
- case LDF_TYPE_UTF_16: {
- std::u16string data = GeneralUtils::UTF8ToUTF16(dataArray[1]);
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_S32: {
- int32_t data = static_cast(stoull(dataArray[1]));
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_FLOAT: {
- float data = static_cast(stof(dataArray[1]));
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_DOUBLE: {
- double data = static_cast(stod(dataArray[1]));
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_U32:
- {
- uint32_t data;
-
- if (dataArray[1] == "true") {
- data = 1;
- } else if (dataArray[1] == "false") {
- data = 0;
- } else {
- data = static_cast(stoul(dataArray[1]));
- }
-
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_BOOLEAN: {
- bool data;
-
- if (dataArray[1] == "true") {
- data = true;
- } else if (dataArray[1] == "false") {
- data = false;
- } else {
- data = static_cast(stoi(dataArray[1]));
- }
-
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_U64: {
- uint64_t data = static_cast(stoull(dataArray[1]));
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_OBJID: {
- LWOOBJID data = static_cast(stoll(dataArray[1]));
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_UTF_8: {
- std::string data = dataArray[1];
- return new LDFData(key, data);
- }
-
- case LDF_TYPE_UNKNOWN: {
+ if (ldfTypeAndValue.second == "true") {
+ data = 1;
+ } else if (ldfTypeAndValue.second == "false") {
+ data = 0;
+ } else {
+ try {
+ data = static_cast(strtoul(ldfTypeAndValue.second.data(), &storage, 10));
+ } catch (std::exception) {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid uint32 value (%s) from string (%s)", ldfTypeAndValue.second.data(), format.data());
return nullptr;
}
- }
}
+
+ returnValue = new LDFData(key, data);
+ break;
}
- return nullptr;
+ case LDF_TYPE_BOOLEAN: {
+ bool data;
+ if (ldfTypeAndValue.second == "true") {
+ data = true;
+ } else if (ldfTypeAndValue.second == "false") {
+ data = false;
+ } else {
+ try {
+ data = static_cast(strtol(ldfTypeAndValue.second.data(), &storage, 10));
+ } catch (std::exception) {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid bool value (%s) from string (%s)", ldfTypeAndValue.second.data(), format.data());
+ return nullptr;
+ }
+ }
+
+ returnValue = new LDFData(key, data);
+ break;
+ }
+
+ case LDF_TYPE_U64: {
+ try {
+ uint64_t data = static_cast(strtoull(ldfTypeAndValue.second.data(), &storage, 10));
+ returnValue = new LDFData(key, data);
+ } catch (std::exception) {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid uint64 value (%s) from string (%s)", ldfTypeAndValue.second.data(), format.data());
+ return nullptr;
+ }
+ break;
+ }
+
+ case LDF_TYPE_OBJID: {
+ try {
+ LWOOBJID data = static_cast(strtoll(ldfTypeAndValue.second.data(), &storage, 10));
+ returnValue = new LDFData(key, data);
+ } catch (std::exception) {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid LWOOBJID value (%s) from string (%s)", ldfTypeAndValue.second.data(), format.data());
+ return nullptr;
+ }
+ break;
+ }
+
+ case LDF_TYPE_UTF_8: {
+ std::string data = ldfTypeAndValue.second.data();
+ returnValue = new LDFData(key, data);
+ break;
+ }
+
+ case LDF_TYPE_UNKNOWN: {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid unknown value (%s) from string (%s)", ldfTypeAndValue.second.data(), format.data());
+ break;
+ }
+
+ default: {
+ Game::logger->Log("LDFFormat", "Warning: Attempted to process invalid LDF type (%d) from string (%s)", type, format.data());
+ break;
+ }
+ }
+ return returnValue;
}
diff --git a/dCommon/LDFFormat.h b/dCommon/LDFFormat.h
index 9b62efa7..0921d04c 100644
--- a/dCommon/LDFFormat.h
+++ b/dCommon/LDFFormat.h
@@ -1,4 +1,5 @@
-#pragma once
+#ifndef __LDFFORMAT__H__
+#define __LDFFORMAT__H__
// Custom Classes
#include "dCommonVars.h"
@@ -6,18 +7,12 @@
// C++
#include
+#include
#include
// RakNet
+#include "BitStream.h"
-#include "../thirdparty/raknet/Source/BitStream.h"
-
-/*!
- \file LDFFormat.hpp
- \brief A collection of LDF format classes
- */
-
- //! An enum for LDF Data Types
enum eLDFType {
LDF_TYPE_UNKNOWN = -1, //!< Unknown data type
LDF_TYPE_UTF_16 = 0, //!< UTF-16 wstring data type
@@ -31,36 +26,21 @@ enum eLDFType {
LDF_TYPE_UTF_8 = 13, //!< UTF-8 string data type
};
-//! A base class for the LDF data
class LDFBaseData {
public:
- //! Destructor
- virtual ~LDFBaseData(void) {}
+ virtual ~LDFBaseData() {}
- //! Writes the data to a packet
- /*!
- \param packet The packet
- */
virtual void WriteToPacket(RakNet::BitStream* packet) = 0;
- //! Gets the key
- /*!
- \return The key
- */
- virtual const std::u16string& GetKey(void) = 0;
+ virtual const std::u16string& GetKey() = 0;
- //! Gets the value type
- /*!
- \return The value type
- */
- virtual eLDFType GetValueType(void) = 0;
+ virtual eLDFType GetValueType() = 0;
- //! Gets a string from the key/value pair
- /*!
- \param includeKey Whether or not to include the key in the data
- \param includeTypeId Whether or not to include the type id in the data
- \return The string representation of the data
+ /** Gets a string from the key/value pair
+ * @param includeKey Whether or not to include the key in the data
+ * @param includeTypeId Whether or not to include the type id in the data
+ * @return The string representation of the data
*/
virtual std::string GetString(bool includeKey = true, bool includeTypeId = true) = 0;
@@ -68,19 +48,15 @@ public:
virtual LDFBaseData* Copy() = 0;
- // MARK: Functions
-
- //! Returns a pointer to a LDFData value based on string format
- /*!
- \param format The format
+ /**
+ * Given an input string, return the data as a LDF key.
*/
- static LDFBaseData* DataFromString(const std::string& format);
+ static LDFBaseData* DataFromString(const std::string_view& format);
};
-//! A structure for an LDF key-value pair
template
-class LDFData : public LDFBaseData {
+class LDFData: public LDFBaseData {
private:
std::u16string key;
T value;
@@ -164,15 +140,11 @@ public:
if (includeKey) {
const std::string& sKey = GeneralUtils::UTF16ToWTF8(this->key, this->key.size());
-
- stream << sKey << "=";
+ stream << sKey << '=';
}
if (includeTypeId) {
- const std::string& sType = std::to_string(this->GetValueType());
-
-
- stream << sType << ":";
+ stream << this->GetValueType() << ':';
}
const std::string& sData = this->GetValueString();
@@ -234,20 +206,18 @@ inline void LDFData::WriteValue(RakNet::BitStream* packet) {
}
}
-// MARK: String Data
-template<> inline std::string LDFData::GetValueString(void) {
- //std::string toReturn(this->value.begin(), this->value.end());
- //return toReturn;
-
+template<> inline std::string LDFData::GetValueString() {
return GeneralUtils::UTF16ToWTF8(this->value, this->value.size());
}
-template<> inline std::string LDFData::GetValueString(void) { return std::to_string(this->value); }
-template<> inline std::string LDFData::GetValueString(void) { return std::to_string(this->value); }
-template<> inline std::string LDFData::GetValueString(void) { return std::to_string(this->value); }
-template<> inline std::string LDFData::GetValueString(void) { return std::to_string(this->value); }
-template<> inline std::string LDFData::GetValueString(void) { return std::to_string(this->value); }
-template<> inline std::string LDFData::GetValueString(void) { return std::to_string(this->value); }
-template<> inline std::string LDFData::GetValueString(void) { return std::to_string(this->value); }
+template<> inline std::string LDFData::GetValueString() { return std::to_string(this->value); }
+template<> inline std::string LDFData::GetValueString() { return std::to_string(this->value); }
+template<> inline std::string LDFData::GetValueString() { return std::to_string(this->value); }
+template<> inline std::string LDFData::GetValueString() { return std::to_string(this->value); }
+template<> inline std::string LDFData::GetValueString() { return std::to_string(this->value); }
+template<> inline std::string LDFData::GetValueString() { return std::to_string(this->value); }
+template<> inline std::string LDFData::GetValueString() { return std::to_string(this->value); }
-template<> inline std::string LDFData::GetValueString(void) { return this->value; }
+template<> inline std::string LDFData::GetValueString() { return this->value; }
+
+#endif //!__LDFFORMAT__H__
diff --git a/dCommon/dClient/AssetManager.cpp b/dCommon/dClient/AssetManager.cpp
index ed86d719..00cedba9 100644
--- a/dCommon/dClient/AssetManager.cpp
+++ b/dCommon/dClient/AssetManager.cpp
@@ -47,6 +47,10 @@ AssetManager::AssetManager(const std::filesystem::path& path) {
this->LoadPackIndex();
break;
}
+ case eAssetBundleType::None:
+ case eAssetBundleType::Unpacked: {
+ break;
+ }
}
}
@@ -111,7 +115,7 @@ bool AssetManager::GetFile(const char* name, char** data, uint32_t* len) {
*len = ftell(file);
*data = (char*)malloc(*len);
fseek(file, 0, SEEK_SET);
- fread(*data, sizeof(uint8_t), *len, file);
+ int32_t readInData = fread(*data, sizeof(uint8_t), *len, file);
fclose(file);
return true;
diff --git a/dCommon/dClient/Pack.cpp b/dCommon/dClient/Pack.cpp
index 1c1a643a..11345fc9 100644
--- a/dCommon/dClient/Pack.cpp
+++ b/dCommon/dClient/Pack.cpp
@@ -77,7 +77,7 @@ bool Pack::ReadFileFromPack(uint32_t crc, char** data, uint32_t* len) {
if (!isCompressed) {
char* tempData = (char*)malloc(pkRecord.m_UncompressedSize);
- fread(tempData, sizeof(uint8_t), pkRecord.m_UncompressedSize, file);
+ int32_t readInData = fread(tempData, sizeof(uint8_t), pkRecord.m_UncompressedSize, file);
*data = tempData;
*len = pkRecord.m_UncompressedSize;
@@ -97,11 +97,11 @@ bool Pack::ReadFileFromPack(uint32_t crc, char** data, uint32_t* len) {
if (currentReadPos >= pkRecord.m_UncompressedSize) break;
uint32_t size;
- fread(&size, sizeof(uint32_t), 1, file);
+ int32_t readInData = fread(&size, sizeof(uint32_t), 1, file);
pos += 4; // Move pointer position 4 to the right
char* chunk = (char*)malloc(size);
- fread(chunk, sizeof(int8_t), size, file);
+ int32_t readInData2 = fread(chunk, sizeof(int8_t), size, file);
pos += size; // Move pointer position the amount of bytes read to the right
int32_t err;
diff --git a/dCommon/dEnums/dCommonVars.h b/dCommon/dEnums/dCommonVars.h
index 16cae3c9..f67145da 100644
--- a/dCommon/dEnums/dCommonVars.h
+++ b/dCommon/dEnums/dCommonVars.h
@@ -7,11 +7,11 @@
#include
#include
#include "BitStream.h"
+#include "eConnectionType.h"
+#include "eClientMessageType.h"
#pragma warning (disable:4251) //Disables SQL warnings
-typedef int RESTICKET;
-
// These are the same define, but they mean two different things in different contexts
// so a different define to distinguish what calculation is happening will help clarity.
#define FRAMES_TO_MS(x) 1000 / x
@@ -28,9 +28,11 @@ constexpr uint32_t lowFrameDelta = FRAMES_TO_MS(lowFramerate);
//========== MACROS ===========
+#define HEADER_SIZE 8
#define CBITSTREAM RakNet::BitStream bitStream;
#define CINSTREAM RakNet::BitStream inStream(packet->data, packet->length, false);
-#define CMSGHEADER PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_GAME_MSG);
+#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 SEND_PACKET Game::server->Send(&bitStream, sysAddr, false);
#define SEND_PACKET_BROADCAST Game::server->Send(&bitStream, UNASSIGNED_SYSTEM_ADDRESS, true);
@@ -45,23 +47,16 @@ typedef uint16_t LWOINSTANCEID; //!< Used for Instance IDs
typedef uint32_t PROPERTYCLONELIST; //!< Used for Property Clone IDs
typedef uint32_t StripId;
-typedef int32_t PetTamingPiece; //!< Pet Taming Pieces
-
const LWOOBJID LWOOBJID_EMPTY = 0; //!< An empty object ID
const LOT LOT_NULL = -1; //!< A null LOT
const int32_t LOOTTYPE_NONE = 0; //!< No loot type available
const float SECONDARY_PRIORITY = 1.0f; //!< Secondary Priority
-const uint32_t INVENTORY_INVALID = -1; //!< Invalid Inventory
-const uint32_t INVENTORY_DEFAULT = -1; //!< Default Inventory
-const uint32_t StatusChangeInfo = 0; //!< Status Change Info (???)
const uint32_t INVENTORY_MAX = 9999999; //!< The Maximum Inventory Size
const uint32_t LWOCLONEID_INVALID = -1; //!< Invalid LWOCLONEID
const uint16_t LWOINSTANCEID_INVALID = -1; //!< Invalid LWOINSTANCEID
const uint16_t LWOMAPID_INVALID = -1; //!< Invalid LWOMAPID
const uint64_t LWOZONEID_INVALID = 0; //!< Invalid LWOZONEID
-typedef std::set TSetObjID;
-
const float PI = 3.14159f;
//============ STRUCTS ==============
@@ -164,401 +159,4 @@ public:
}
};
-struct Brick {
- uint32_t designerID;
- uint32_t materialID;
-};
-
-//This union is used by the behavior system
-union suchar {
- unsigned char usigned;
- char svalue;
-};
-
-//=========== LU ENUMS ============
-
-//! An enum for object ID bits
-enum eObjectBits : int32_t {
- OBJECT_BIT_PERSISTENT = 32, //!< The 32 bit index
- OBJECT_BIT_CLIENT = 46, //!< The 46 bit index
- OBJECT_BIT_SPAWNED = 58, //!< The 58 bit index
- OBJECT_BIT_CHARACTER = 60 //!< The 60 bit index
-};
-
-//! An enum for MatchUpdate types
-enum eMatchUpdate : int {
- MATCH_UPDATE_PLAYER_JOINED = 0,
- MATCH_UPDATE_PLAYER_LEFT = 1,
- MATCH_UPDATE_TIME = 3,
- MATCH_UPDATE_TIME_START_DELAY = 4,
- MATCH_UPDATE_PLAYER_READY = 5,
- MATCH_UPDATE_PLAYER_UNREADY = 6
-};
-
-//! An enum for camera cycling modes
-enum eCyclingMode : uint32_t {
- ALLOW_CYCLE_TEAMMATES,
- DISALLOW_CYCLING
-};
-
-enum eCinematicEvent : uint32_t {
- STARTED,
- WAYPOINT,
- ENDED,
-};
-
-//! An enum for character creation responses
-enum eCreationResponse : uint8_t {
- CREATION_RESPONSE_SUCCESS = 0, //!< The creation was successful
- CREATION_RESPONSE_OBJECT_ID_UNAVAILABLE, //!< The Object ID can't be used
- CREATION_RESPONSE_NAME_NOT_ALLOWED, //!< The name is not allowed
- CREATION_RESPONSE_PREDEFINED_NAME_IN_USE, //!< The predefined name is already in use
- CREATION_RESPONSE_CUSTOM_NAME_IN_USE //!< The custom name is already in use
-};
-
-//! An enum for login responses
-enum eLoginResponse : uint8_t {
- LOGIN_RESPONSE_GENERAL_FAILED = 0,
- LOGIN_RESPONSE_SUCCESS = 1,
- LOGIN_RESPONSE_BANNED = 2,
- LOGIN_RESPONSE_PERMISSIONS_NOT_HIGH_ENOUGH = 5,
- LOGIN_RESPONSE_WRONG_PASS_OR_USER = 6,
- LOGIN_RESPONSE_ACCOUNT_LOCKED = 7
-};
-
-//! An enum for character rename responses
-enum eRenameResponse : uint8_t {
- RENAME_RESPONSE_SUCCESS = 0, //!< The renaming was successful
- RENAME_RESPONSE_UNKNOWN_ERROR, //!< There was an unknown error
- RENAME_RESPONSE_NAME_UNAVAILABLE, //!< The name is unavailable
- RENAME_RESPONSE_NAME_IN_USE //!< The name is already in use
-};
-
-//! A replica packet type
-enum eReplicaPacketType {
- PACKET_TYPE_CONSTRUCTION, //!< A construction packet
- PACKET_TYPE_SERIALIZATION, //!< A serialization packet
- PACKET_TYPE_DESTRUCTION //!< A destruction packet
-};
-
-//! The Behavior Types for use with the AI system
-enum eCombatBehaviorTypes : uint32_t {
- PASSIVE = 0, //!< The object is passive
- AGGRESSIVE = 1, //!< The object is aggressive
- PASSIVE_TURRET = 2, //!< The object is a passive turret
- AGGRESSIVE_TURRET = 3 //!< The object is an aggressive turret
-};
-
-//! The Combat Role Type for use with the AI system
-enum eCombatRoleType : uint32_t {
- MELEE = 0, //!< Used for melee attacks
- RANGED = 1, //!< Used for range attacks
- SUPPORT = 2 //!< Used for support
-};
-
-//! The kill types for the Die packet
-enum eKillType : uint32_t {
- VIOLENT,
- SILENT
-};
-
-//! The various world states used throughout the server
-enum eObjectWorldState {
- WORLDSTATE_INWORLD, //!< Probably used when the object is in the world
- WORLDSTATE_ATTACHED, //!< Probably used when the object is attached to another object
- WORLDSTATE_INVENTORY //!< Probably used when the object is in an inventory
-};
-
-//! The trigger stats (???)
-enum eTriggerStat {
- INVALID_STAT, //!< ???
- HEALTH, //!< Probably used for health
- ARMOR, //!< Probably used for armor
- IMAGINATION //!< Probably used for imagination
-};
-
-//! The trigger operations (???)
-enum eTriggerOperator {
- INVALID_OPER, //!< ???
- EQUAL, //!< ???
- NOT_EQUAL, //!< ???
- GREATER, //!< ???
- GREATER_EQUAL, //!< ???
- LESS, //!< ???
- LESS_EQUAL //!< ???
-};
-
-//! The various build types
-enum eBuildType {
- BUILD_NOWHERE, //!< Used if something can't be built anywhere
- BUILD_IN_WORLD, //!< Used if something can be built in the world
- BUILD_ON_PROPERTY //!< Used if something can be build on a property
-};
-
-//! Quickbuild fail reasons
-enum eFailReason : uint32_t {
- REASON_NOT_GIVEN,
- REASON_OUT_OF_IMAGINATION,
- REASON_CANCELED_EARLY,
- REASON_BUILD_ENDED
-};
-
-//! Terminate interaction type
-enum eTerminateType : uint32_t {
- RANGE,
- USER,
- FROM_INTERACTION
-};
-
-//! The combat state
-enum eCombatState {
- IDLE, //!< The AI is in an idle state
- AGGRO, //!< The AI is in an aggressive state
- TETHER, //!< The AI is being redrawn back to tether point
- SPAWN, //!< The AI is spawning
- DEAD //!< The AI is dead
-};
-
-enum eControlSceme {
- SCHEME_A,
- SCHEME_D,
- SCHEME_GAMEPAD,
- SCHEME_E,
- SCHEME_FPS,
- SCHEME_DRIVING,
- SCHEME_TAMING,
- SCHEME_MODULAR_BUILD,
- SCHEME_WEAR_A_ROBOT //== freecam?
-};
-
-enum class eStateChangeType : uint32_t {
- PUSH,
- POP
-};
-
-enum eNotifyType {
- NOTIFY_TYPE_SUCCESS,
- NOTIFY_TYPE_QUIT,
- NOTIFY_TYPE_FAILED,
- NOTIFY_TYPE_BEGIN,
- NOTIFY_TYPE_READY,
- NOTIFY_TYPE_NAMINGPET
-};
-
-
-enum class UseItemResponse : uint32_t {
- NoImaginationForPet = 1,
- FailedPrecondition,
- MountsNotAllowed
-};
-
-enum eRebuildState : uint32_t {
- REBUILD_OPEN,
- REBUILD_COMPLETED = 2,
- REBUILD_RESETTING = 4,
- REBUILD_BUILDING,
- REBUILD_INCOMPLETE
-};
-
-/**
- * The loot source's type.
- */
-enum eLootSourceType : int32_t {
- LOOT_SOURCE_NONE = 0,
- LOOT_SOURCE_CHEST,
- LOOT_SOURCE_MISSION,
- LOOT_SOURCE_MAIL,
- LOOT_SOURCE_CURRENCY,
- LOOT_SOURCE_ACHIEVEMENT,
- LOOT_SOURCE_TRADE,
- LOOT_SOURCE_QUICKBUILD,
- LOOT_SOURCE_DELETION,
- LOOT_SOURCE_VENDOR,
- LOOT_SOURCE_ACTIVITY,
- LOOT_SOURCE_PICKUP,
- LOOT_SOURCE_BRICK,
- LOOT_SOURCE_PROPERTY,
- LOOT_SOURCE_MODERATION,
- LOOT_SOURCE_EXHIBIT,
- LOOT_SOURCE_INVENTORY,
- LOOT_SOURCE_CLAIMCODE,
- LOOT_SOURCE_CONSUMPTION,
- LOOT_SOURCE_CRAFTING,
- LOOT_SOURCE_LEVEL_REWARD,
- LOOT_SOURCE_RELOCATE
-};
-
-enum eGameActivities : uint32_t {
- ACTIVITY_NONE,
- ACTIVITY_QUICKBUILDING,
- ACTIVITY_SHOOTING_GALLERY,
- ACTIVITY_RACING,
- ACTIVITY_PINBALL,
- ACTIVITY_PET_TAMING
-};
-
-enum ePlayerFlags {
- BTARR_TESTING = 0,
- PLAYER_HAS_ENTERED_PET_RANCH = 1,
- MINIMAP_UNLOCKED = 2,
- ACTIVITY_REBUILDING_FAIL_TIME = 3,
- ACTIVITY_REBUILDING_FAIL_RANGE = 4,
- ACTIVITY_SHOOTING_GALLERY_HELP = 5,
- HELP_WALKING_CONTROLS = 6,
- FIRST_SMASHABLE = 7,
- FIRST_IMAGINATION_PICKUP = 8,
- FIRST_DAMAGE = 9,
- FIRST_ITEM = 10,
- FIRST_BRICK = 11,
- FIRST_CONSUMABLE = 12,
- FIRST_EQUIPPABLE = 13,
- CHAT_HELP = 14,
- FIRST_PET_TAMING_MINIGAME = 15,
- FIRST_PET_ON_SWITCH = 16,
- FIRST_PET_JUMPED_ON_SWITCH = 17,
- FIRST_PET_FOUND_TREASURE = 18,
- FIRST_PET_DUG_TREASURE = 19,
- FIRST_PET_OWNER_ON_PET_BOUNCER = 20,
- FIRST_PET_DESPAWN_NO_IMAGINATION = 21,
- FIRST_PET_SELECTED_ENOUGH_BRICKS = 22,
- FIRST_EMOTE_UNLOCKED = 23,
- GF_PIRATE_REP = 24,
- AG_BOB_CINEMATIC_EVENT = 25,
- HELP_JUMPING_CONTROLS = 26,
- HELP_DOUBLE_JUMP_CONTROLS = 27,
- HELP_CAMERA_CONTROLS = 28,
- HELP_ROTATE_CONTROLS = 29,
- HELP_SMASH = 30,
- MONUMENT_INTRO_MUSIC_PLAYED = 31,
- BEGINNING_ZONE_SUMMARY_DISPLAYED = 32,
- AG_FINISH_LINE_BUILT = 33,
- AG_BOSS_AREA_FOUND = 34,
- AG_LANDED_IN_BATTLEFIELD = 35,
- GF_PLAYER_HAS_BEEN_TO_THE_RAVINE = 36,
- MODULAR_BUILD_STARTED = 37,
- MODULAR_BUILD_FINISHED_CLICK_BUTTON = 38,
- THINKING_HAT_RECEIVED_GO_TO_MODULAR_BUILD_AREA = 39,
- BUILD_AREA_ENTERED_MOD_NOT_ACTIVATED_PUT_ON_HAT = 40,
- HAT_ON_INSIDE_OF_MOD_BUILD_EQUIP_A_MODULE_FROM_LEG = 41,
- MODULE_EQUIPPED_PLACE_ON_GLOWING_BLUE_SPOT = 42,
- FIRST_MODULE_PLACED_CORRECTLY_NOW_DO_THE_REST = 43,
- ROCKET_COMPLETE_NOW_LAUNCH_FROM_PAD = 44,
- JOINED_A_FACTION = 45,
- VENTURE_FACTION = 46,
- ASSEMBLY_FACTION = 47,
- PARADOX_FACTION = 48,
- SENTINEL_FACTION = 49,
- LUP_WORLD_ACCESS = 50,
- AG_FIRST_FLAG_COLLECTED = 51,
- TOOLTIP_TALK_TO_SKYLAND_TO_GET_HAT = 52,
- MODULAR_BUILD_PLAYER_PLACES_FIRST_MODEL_IN_SCRATCH = 53,
- MODULAR_BUILD_FIRST_ARROW_DISPLAY_FOR_MODULE = 54,
- AG_BEACON_QB_SO_THE_PLAYER_CAN_ALWAYS_BUILD_THEM = 55,
- GF_PET_DIG_FLAG_1 = 56,
- GF_PET_DIG_FLAG_2 = 57,
- GF_PET_DIG_FLAG_3 = 58,
- SUPPRESS_SPACESHIP_CINEMATIC_FLYTHROUGH = 59,
- GF_PLAYER_FALL_DEATH = 60,
- GF_PLAYER_CAN_GET_FLAG_1 = 61,
- GF_PLAYER_CAN_GET_FLAG_2 = 62,
- GF_PLAYER_CAN_GET_FLAG_3 = 63,
- ENTER_BBB_FROM_PROPERTY_EDIT_CONFIRMATION_DIALOG = 64,
- AG_FIRST_COMBAT_COMPLETE = 65,
- AG_COMPLETE_BOB_MISSION = 66,
- IS_NEWS_SCREEN_VISIBLE = 114,
- NJ_GARMADON_CINEMATIC_SEEN = 125,
- ELEPHANT_PET_3050 = 801,
- CAT_PET_3054 = 802,
- TRICERATOPS_PET_3195 = 803,
- TERRIER_PET_3254 = 804,
- SKUNK_PET_3261 = 805,
- LION_PET_3520 = 806,
- BUNNY_PET_3672 = 807,
- CROCODILE_PET_3994 = 808,
- DOBERMAN_PET_5635 = 809,
- BUFFALO_PET_5636 = 810,
- ROBOT_DOG_PET_5637 = 811,
- EUROPEAN_DRAGON_PET_5639 = 812,
- TORTOISE_PET_5640 = 813,
- ASIAN_DRAGON_PET_5641 = 814,
- MANTIS_PET_5642 = 815,
- PANDA_PET_5643 = 816,
- WARTHOG_PET_6720 = 817,
- GOAT_PET_7638 = 818,
- CRAB_PET_7694 = 819,
- AG_SPACE_SHIP_BINOC_AT_LAUNCH = 1001,
- AG_SPACE_SHIP_BINOC_AT_LAUNCH_PLATFORM = 1002,
- AG_SPACE_SHIP_BINOC_ON_PLATFORM_TO_LEFT_OF_START = 1003,
- AG_SPACE_SHIP_BINOC_ON_PLATFORM_TO_RIGHT_OF_START = 1004,
- AG_SPACE_SHIP_BINOC_AT_BOB = 1005,
- AG_BATTLE_BINOC_FOR_TRICERETOPS = 1101,
- AG_BATTLE_BINOC_AT_PARADOX = 1102,
- AG_BATTLE_BINOC_AT_MISSION_GIVER = 1103,
- AG_BATTLE_BINOC_AT_BECK = 1104,
- AG_MONUMENT_BINOC_INTRO = 1105,
- AG_MONUMENT_BINOC_OUTRO = 1106,
- AG_LAUNCH_BINOC_INTRO = 1107,
- AG_LAUNCH_BINOC_BISON = 1108,
- AG_LAUNCH_BINOC_SHARK = 1109,
- NS_BINOC_CONCERT_TRANSITION = 1201,
- NS_BINOC_RACE_PLACE_TRANSITION = 1202,
- NS_BINOC_BRICK_ANNEX_TRANSITION = 1203,
- NS_BINOC_GF_LAUNCH = 1204,
- NS_BINOC_FV_LAUNCH = 1205,
- NS_BINOC_BRICK_ANNEX_WATER = 1206,
- NS_BINOC_AG_LAUNCH_AT_RACE_PLACE = 1207,
- NS_BINOC_AG_LAUNCH_AT_BRICK_ANNEX = 1208,
- NS_BINOC_AG_LAUNCH_AT_PLAZA = 1209,
- NS_BINOC_TBA = 1210,
- NS_FLAG_COLLECTABLE_1_BY_JONNY_THUNDER = 1211,
- NS_FLAG_COLLECTABLE_2_UNDER_CONCERT_BRIDGE = 1212,
- NS_FLAG_COLLECTABLE_3_BY_FV_LAUNCH = 1213,
- NS_FLAG_COLLECTABLE_4_IN_PLAZA_BEHIND_BUILDING = 1214,
- NS_FLAG_COLLECTABLE_5_BY_GF_LAUNCH = 1215,
- NS_FLAG_COLLECTABLE_6_BY_DUCK_SG = 1216,
- NS_FLAG_COLLECTABLE_7_BY_LUP_LAUNCH = 1217,
- NS_FLAG_COLLECTABLE_8_BY_NT_LUANCH = 1218,
- NS_FLAG_COLLECTABLE_9_BY_RACE_BUILD = 1219,
- NS_FLAG_COLLECTABLE_10_ON_AG_LAUNCH_PATH = 1220,
- PR_BINOC_AT_LAUNCH_PAD = 1251,
- PR_BINOC_AT_BEGINNING_OF_ISLAND_B = 1252,
- PR_BINOC_AT_FIRST_PET_BOUNCER = 1253,
- PR_BINOC_ON_BY_CROWS_NEST = 1254,
- PR_PET_DIG_AT_BEGINNING_OF_ISLAND_B = 1261,
- PR_PET_DIG_AT_THE_LOCATION_OF_OLD_BOUNCE_BACK = 1262,
- PR_PET_DIG_UNDER_QB_BRIDGE = 1263,
- PR_PET_DIG_BACK_SIDE_BY_PARTNER_BOUNCE = 1264,
- PR_PET_DIG_BY_LAUNCH_PAD = 1265,
- PR_PET_DIG_BY_FIRST_PET_BOUNCER = 1266,
- GF_BINOC_ON_LANDING_PAD = 1301,
- GF_BINOC_AT_RAVINE_START = 1302,
- GF_BINOC_ON_TOP_OF_RAVINE_HEAD = 1303,
- GF_BINOC_AT_TURTLE_AREA = 1304,
- GF_BINOC_IN_TUNNEL_TO_ELEPHANTS = 1305,
- GF_BINOC_IN_ELEPHANTS_AREA = 1306,
- GF_BINOC_IN_RACING_AREA = 1307,
- GF_BINOC_IN_CROC_AREA = 1308,
- GF_BINOC_IN_JAIL_AREA = 1309,
- GF_BINOC_TELESCOPE_NEXT_TO_CAPTAIN_JACK = 1310,
- NT_PLINTH_REBUILD = 1919,
- NT_FACTION_SPY_DUKE = 1974,
- NT_FACTION_SPY_OVERBUILD = 1976,
- NT_FACTION_SPY_HAEL = 1977,
- NJ_EARTH_SPINJITZU = 2030,
- NJ_LIGHTNING_SPINJITZU = 2031,
- NJ_ICE_SPINJITZU = 2032,
- NJ_FIRE_SPINJITZU = 2033,
- NJ_WU_SHOW_DAILY_CHEST = 2099
-};
-
-//======== FUNC ===========
-
-template
-inline T const& clamp(const T& val, const T& low, const T& high) {
- if (val < low) return low;
- else if (val > high) return high;
-
- return val;
-}
-
#endif //!__DCOMMONVARS__H__
diff --git a/dCommon/dEnums/dMessageIdentifiers.h b/dCommon/dEnums/dMessageIdentifiers.h
deleted file mode 100644
index 7c810a2d..00000000
--- a/dCommon/dEnums/dMessageIdentifiers.h
+++ /dev/null
@@ -1,564 +0,0 @@
-#pragma once
-#include "MessageIdentifiers.h"
-
-enum CONNECTION_TYPE {
- SERVER = 0, //!< Means it is used throughout all servers
- AUTH, //!< Means it is sent from the client authentication
- CHAT, //!< Means it is sent from and to the chat server
- CHAT_INTERNAL, //!< Unused - We can potentially use this in the future for various things
- WORLD, //!< Means it is sent from the client world
- CLIENT, //!< Means it is sent to the client from the world server
- MASTER //!< Means it is sent to and from the master server
-};
-
-//! The Internal Server Packet Identifiers
-enum SERVER {
- MSG_SERVER_VERSION_CONFIRM = 0, /*!< Sent during a handshake to confirm the server/client version */
- MSG_SERVER_DISCONNECT_NOTIFY, /*!< Sent when a user disconnected */
- MSG_SERVER_GENERAL_NOTIFY /*!< A general notification */
-};
-
-//! The Internal Authentication Packet Identifiers
-enum AUTH {
- MSG_AUTH_LOGIN_REQUEST = 0, /*!< Sent from the client when a user logs in */
- MSG_AUTH_LOGOUT_REQUEST, /*!< Sent from the client when a user logs out */
- MSG_AUTH_CREATE_NEW_ACCOUNT_REQUEST, /*!< Sent from the client when a user creates a new account */
- MSG_AUTH_LEGOINTERFACE_AUTH_RESPONSE, /*!< Unknown */
- MSG_AUTH_SESSIONKEY_RECEIVED_CONFIRM, /*!< Sent when the server recieved the session key (?) */
- MSG_AUTH_RUNTIME_CONFIG /*!< Unknown */
-};
-
-//! The Internal Chat Packet Identifiers
-enum CHAT {
- MSG_CHAT_LOGIN_SESSION_NOTIFY = 0, /*!< When a user logs in */
- MSG_CHAT_GENERAL_CHAT_MESSAGE, /*!< Used for global chat messages */
- MSG_CHAT_PRIVATE_CHAT_MESSAGE, /*!< Used for private chat messages */
- MSG_CHAT_USER_CHANNEL_CHAT_MESSAGE, /*!< Unknown */
- MSG_CHAT_WORLD_DISCONNECT_REQUEST, /*!< Unknown */
- MSG_CHAT_WORLD_PROXIMITY_RESPONSE, /*!< Unknown */
- MSG_CHAT_WORLD_PARCEL_RESPONSE, /*!< Unknown */
- MSG_CHAT_ADD_FRIEND_REQUEST, /*!< When the client requests to add a friend */
- MSG_CHAT_ADD_FRIEND_RESPONSE, /*!< Sent from the server when the client adds a friend */
- MSG_CHAT_REMOVE_FRIEND, /*!< When the client removes a friend */
- MSG_CHAT_GET_FRIENDS_LIST, /*!< Sent when the client requests a user's friends list */
- MSG_CHAT_ADD_IGNORE, /*!< Sent when the client adds a friend to the "ignore" list */
- MSG_CHAT_REMOVE_IGNORE, /*!< Sent when the client removes a friend from the "ignore" list */
- MSG_CHAT_GET_IGNORE_LIST, /*!< Sent when the client requests a user's ignored list */
- MSG_CHAT_TEAM_MISSED_INVITE_CHECK, /*!< Unknown (Something with an unresponded-to friend request probably) */
- MSG_CHAT_TEAM_INVITE, /*!< When the client invites a user to a team */
- MSG_CHAT_TEAM_INVITE_RESPONSE, /*!< Sent from the server when the client invites someone to the team */
- MSG_CHAT_TEAM_KICK, /*!< Sent when the client kicks a member from a team */
- MSG_CHAT_TEAM_LEAVE, /*!< Sent when the client leaves a team */
- MSG_CHAT_TEAM_SET_LOOT, /*!< Unknown (Something to do with team loot) */
- MSG_CHAT_TEAM_SET_LEADER, /*!< Unknown (Probably sets the team leader or something) */
- MSG_CHAT_TEAM_GET_STATUS, /*!< Check to see if we are in a team or not, sent on world join */
- MSG_CHAT_GUILD_CREATE, /*!< Guild Creation */
- MSG_CHAT_GUILD_INVITE, /*!< Guild Invitation */
- MSG_CHAT_GUILD_INVITE_RESPONSE, /*!< Guild Invite Response */
- MSG_CHAT_GUILD_LEAVE, /*!< Guild Leave */
- MSG_CHAT_GUILD_KICK, /*!< Guild Kick */
- MSG_CHAT_GUILD_GET_STATUS, /*!< Guild Get Status */
- MSG_CHAT_GUILD_GET_ALL, /*!< Guild Get All */
- MSG_CHAT_SHOW_ALL,
- MSG_CHAT_BLUEPRINT_MODERATED,
- MSG_CHAT_BLUEPRINT_MODEL_READY,
- MSG_CHAT_PROPERTY_READY_FOR_APPROVAL,
- MSG_CHAT_PROPERTY_MODERATION_CHANGED,
- MSG_CHAT_PROPERTY_BUILDMODE_CHANGED,
- MSG_CHAT_PROPERTY_BUILDMODE_CHANGED_REPORT,
- MSG_CHAT_MAIL,
- MSG_CHAT_WORLD_INSTANCE_LOCATION_REQUEST,
- MSG_CHAT_REPUTATION_UPDATE,
- MSG_CHAT_SEND_CANNED_TEXT,
- MSG_CHAT_GMLEVEL_UPDATE,
- MSG_CHAT_CHARACTER_NAME_CHANGE_REQUEST,
- MSG_CHAT_CSR_REQUEST,
- MSG_CHAT_CSR_REPLY,
- MSG_CHAT_GM_KICK,
- MSG_CHAT_GM_ANNOUNCE,
- MSG_CHAT_GM_MUTE,
- MSG_CHAT_ACTIVITY_UPDATE,
- MSG_CHAT_WORLD_ROUTE_PACKET,
- MSG_CHAT_GET_ZONE_POPULATIONS,
- MSG_CHAT_REQUEST_MINIMUM_CHAT_MODE,
- MSG_CHAT_REQUEST_MINIMUM_CHAT_MODE_PRIVATE,
- MSG_CHAT_MATCH_REQUEST,
- MSG_CHAT_UGCMANIFEST_REPORT_MISSING_FILE,
- MSG_CHAT_UGCMANIFEST_REPORT_DONE_FILE,
- MSG_CHAT_UGCMANIFEST_REPORT_DONE_BLUEPRINT,
- MSG_CHAT_UGCC_REQUEST,
- MSG_CHAT_WHO,
- MSG_CHAT_WORLD_PLAYERS_PET_MODERATED_ACKNOWLEDGE,
- MSG_CHAT_ACHIEVEMENT_NOTIFY,
- MSG_CHAT_GM_CLOSE_PRIVATE_CHAT_WINDOW,
- MSG_CHAT_UNEXPECTED_DISCONNECT,
- MSG_CHAT_PLAYER_READY,
- MSG_CHAT_GET_DONATION_TOTAL,
- MSG_CHAT_UPDATE_DONATION,
- MSG_CHAT_PRG_CSR_COMMAND,
- MSG_CHAT_HEARTBEAT_REQUEST_FROM_WORLD,
- MSG_CHAT_UPDATE_FREE_TRIAL_STATUS
-};
-
-//! Used for packets related to chatting
-enum CHAT_INTERNAL {
- MSG_CHAT_INTERNAL_PLAYER_ADDED_NOTIFICATION = 0,
- MSG_CHAT_INTERNAL_PLAYER_REMOVED_NOTIFICATION,
- MSG_CHAT_INTERNAL_ADD_FRIEND,
- MSG_CHAT_INTERNAL_ADD_BEST_FRIEND,
- MSG_CHAT_INTERNAL_ADD_TO_TEAM,
- MSG_CHAT_INTERNAL_ADD_BLOCK,
- MSG_CHAT_INTERNAL_REMOVE_FRIEND,
- MSG_CHAT_INTERNAL_REMOVE_BLOCK,
- MSG_CHAT_INTERNAL_REMOVE_FROM_TEAM,
- MSG_CHAT_INTERNAL_DELETE_TEAM,
- MSG_CHAT_INTERNAL_REPORT,
- MSG_CHAT_INTERNAL_PRIVATE_CHAT,
- MSG_CHAT_INTERNAL_PRIVATE_CHAT_RESPONSE,
- MSG_CHAT_INTERNAL_ANNOUNCEMENT,
- MSG_CHAT_INTERNAL_MAIL_COUNT_UPDATE,
- MSG_CHAT_INTERNAL_MAIL_SEND_NOTIFY,
- MSG_CHAT_INTERNAL_REQUEST_USER_LIST,
- MSG_CHAT_INTERNAL_FRIEND_LIST,
- MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER,
- MSG_CHAT_INTERNAL_TEAM_UPDATE,
- MSG_CHAT_INTERNAL_MUTE_UPDATE,
- MSG_CHAT_INTERNAL_CREATE_TEAM,
-};
-
-//! Used for packets send to the world
-enum WORLD {
- MSG_WORLD_CLIENT_VALIDATION = 1, // Session info
- MSG_WORLD_CLIENT_CHARACTER_LIST_REQUEST,
- MSG_WORLD_CLIENT_CHARACTER_CREATE_REQUEST,
- MSG_WORLD_CLIENT_LOGIN_REQUEST, // Character selected
- MSG_WORLD_CLIENT_GAME_MSG,
- MSG_WORLD_CLIENT_CHARACTER_DELETE_REQUEST,
- MSG_WORLD_CLIENT_CHARACTER_RENAME_REQUEST,
- MSG_WORLD_CLIENT_HAPPY_FLOWER_MODE_NOTIFY,
- MSG_WORLD_CLIENT_SLASH_RELOAD_MAP, // Reload map cmp
- MSG_WORLD_CLIENT_SLASH_PUSH_MAP_REQUEST, // Push map req cmd
- MSG_WORLD_CLIENT_SLASH_PUSH_MAP, // Push map cmd
- MSG_WORLD_CLIENT_SLASH_PULL_MAP, // Pull map cmd
- MSG_WORLD_CLIENT_LOCK_MAP_REQUEST,
- MSG_WORLD_CLIENT_GENERAL_CHAT_MESSAGE, // General chat message
- MSG_WORLD_CLIENT_HTTP_MONITOR_INFO_REQUEST,
- MSG_WORLD_CLIENT_SLASH_DEBUG_SCRIPTS, // Debug scripts cmd
- MSG_WORLD_CLIENT_MODELS_CLEAR,
- MSG_WORLD_CLIENT_EXHIBIT_INSERT_MODEL,
- MSG_WORLD_CLIENT_LEVEL_LOAD_COMPLETE, // Character data request
- MSG_WORLD_CLIENT_TMP_GUILD_CREATE,
- MSG_WORLD_CLIENT_ROUTE_PACKET, // Social?
- MSG_WORLD_CLIENT_POSITION_UPDATE,
- MSG_WORLD_CLIENT_MAIL,
- MSG_WORLD_CLIENT_WORD_CHECK, // Whitelist word check
- MSG_WORLD_CLIENT_STRING_CHECK, // Whitelist string check
- MSG_WORLD_CLIENT_GET_PLAYERS_IN_ZONE,
- MSG_WORLD_CLIENT_REQUEST_UGC_MANIFEST_INFO,
- MSG_WORLD_CLIENT_BLUEPRINT_GET_ALL_DATA_REQUEST,
- MSG_WORLD_CLIENT_CANCEL_MAP_QUEUE,
- MSG_WORLD_CLIENT_HANDLE_FUNNESS,
- MSG_WORLD_CLIENT_FAKE_PRG_CSR_MESSAGE,
- MSG_WORLD_CLIENT_REQUEST_FREE_TRIAL_REFRESH,
- MSG_WORLD_CLIENT_GM_SET_FREE_TRIAL_STATUS
-};
-
-//! An enum for packets sent to the client
-enum CLIENT {
- MSG_CLIENT_LOGIN_RESPONSE = 0,
- MSG_CLIENT_LOGOUT_RESPONSE,
- MSG_CLIENT_LOAD_STATIC_ZONE,
- MSG_CLIENT_CREATE_OBJECT,
- MSG_CLIENT_CREATE_CHARACTER,
- MSG_CLIENT_CREATE_CHARACTER_EXTENDED,
- MSG_CLIENT_CHARACTER_LIST_RESPONSE,
- MSG_CLIENT_CHARACTER_CREATE_RESPONSE,
- MSG_CLIENT_CHARACTER_RENAME_RESPONSE,
- MSG_CLIENT_CHAT_CONNECT_RESPONSE,
- MSG_CLIENT_AUTH_ACCOUNT_CREATE_RESPONSE,
- MSG_CLIENT_DELETE_CHARACTER_RESPONSE,
- MSG_CLIENT_GAME_MSG,
- MSG_CLIENT_CONNECT_CHAT,
- MSG_CLIENT_TRANSFER_TO_WORLD,
- MSG_CLIENT_IMPENDING_RELOAD_NOTIFY,
- MSG_CLIENT_MAKE_GM_RESPONSE,
- MSG_CLIENT_HTTP_MONITOR_INFO_RESPONSE,
- MSG_CLIENT_SLASH_PUSH_MAP_RESPONSE,
- MSG_CLIENT_SLASH_PULL_MAP_RESPONSE,
- MSG_CLIENT_SLASH_LOCK_MAP_RESPONSE,
- MSG_CLIENT_BLUEPRINT_SAVE_RESPONSE,
- MSG_CLIENT_BLUEPRINT_LUP_SAVE_RESPONSE,
- MSG_CLIENT_BLUEPRINT_LOAD_RESPONSE_ITEMID,
- MSG_CLIENT_BLUEPRINT_GET_ALL_DATA_RESPONSE,
- MSG_CLIENT_MODEL_INSTANTIATE_RESPONSE,
- MSG_CLIENT_DEBUG_OUTPUT,
- MSG_CLIENT_ADD_FRIEND_REQUEST,
- MSG_CLIENT_ADD_FRIEND_RESPONSE,
- MSG_CLIENT_REMOVE_FRIEND_RESPONSE,
- MSG_CLIENT_GET_FRIENDS_LIST_RESPONSE,
- MSG_CLIENT_UPDATE_FRIEND_NOTIFY,
- MSG_CLIENT_ADD_IGNORE_RESPONSE,
- MSG_CLIENT_REMOVE_IGNORE_RESPONSE,
- MSG_CLIENT_GET_IGNORE_LIST_RESPONSE,
- MSG_CLIENT_TEAM_INVITE,
- MSG_CLIENT_TEAM_INVITE_INITIAL_RESPONSE,
- MSG_CLIENT_GUILD_CREATE_RESPONSE,
- MSG_CLIENT_GUILD_GET_STATUS_RESPONSE,
- MSG_CLIENT_GUILD_INVITE,
- MSG_CLIENT_GUILD_INVITE_INITIAL_RESPONSE,
- MSG_CLIENT_GUILD_INVITE_FINAL_RESPONSE,
- MSG_CLIENT_GUILD_INVITE_CONFIRM,
- MSG_CLIENT_GUILD_ADD_PLAYER,
- MSG_CLIENT_GUILD_REMOVE_PLAYER,
- MSG_CLIENT_GUILD_LOGIN_LOGOUT,
- MSG_CLIENT_GUILD_RANK_CHANGE,
- MSG_CLIENT_GUILD_DATA,
- MSG_CLIENT_GUILD_STATUS,
- MSG_CLIENT_MAIL,
- MSG_CLIENT_DB_PROXY_RESULT,
- MSG_CLIENT_SHOW_ALL_RESPONSE,
- MSG_CLIENT_WHO_RESPONSE,
- MSG_CLIENT_SEND_CANNED_TEXT,
- MSG_CLIENT_UPDATE_CHARACTER_NAME,
- MSG_CLIENT_SET_NETWORK_SIMULATOR,
- MSG_CLIENT_INVALID_CHAT_MESSAGE,
- MSG_CLIENT_MINIMUM_CHAT_MODE_RESPONSE,
- MSG_CLIENT_MINIMUM_CHAT_MODE_RESPONSE_PRIVATE,
- MSG_CLIENT_CHAT_MODERATION_STRING,
- MSG_CLIENT_UGC_MANIFEST_RESPONSE,
- MSG_CLIENT_IN_LOGIN_QUEUE,
- MSG_CLIENT_SERVER_STATES,
- MSG_CLIENT_GM_CLOSE_TARGET_CHAT_WINDOW,
- MSG_CLIENT_GENERAL_TEXT_FOR_LOCALIZATION,
- MSG_CLIENT_UPDATE_FREE_TRIAL_STATUS,
- MSG_CLIENT_UGC_DOWNLOAD_FAILED = 120
-};
-
-//! Used for packets sent to the master server
-enum MASTER {
- MSG_MASTER_REQUEST_PERSISTENT_ID = 1,
- MSG_MASTER_REQUEST_PERSISTENT_ID_RESPONSE,
- MSG_MASTER_REQUEST_ZONE_TRANSFER,
- MSG_MASTER_REQUEST_ZONE_TRANSFER_RESPONSE,
- MSG_MASTER_SERVER_INFO,
- MSG_MASTER_REQUEST_SESSION_KEY,
- MSG_MASTER_SET_SESSION_KEY,
- MSG_MASTER_SESSION_KEY_RESPONSE,
- MSG_MASTER_PLAYER_ADDED,
- MSG_MASTER_PLAYER_REMOVED,
-
- MSG_MASTER_CREATE_PRIVATE_ZONE,
- MSG_MASTER_REQUEST_PRIVATE_ZONE,
-
- MSG_MASTER_WORLD_READY,
- MSG_MASTER_PREP_ZONE,
-
- MSG_MASTER_SHUTDOWN,
- MSG_MASTER_SHUTDOWN_RESPONSE,
- MSG_MASTER_SHUTDOWN_IMMEDIATE,
-
- MSG_MASTER_SHUTDOWN_UNIVERSE,
-
- MSG_MASTER_AFFIRM_TRANSFER_REQUEST,
- MSG_MASTER_AFFIRM_TRANSFER_RESPONSE,
-
- MSG_MASTER_NEW_SESSION_ALERT
-};
-
-//! The Game messages
-enum GAME_MSG : unsigned short {
- GAME_MSG_TELEPORT = 19,
- GAME_MSG_SET_PLAYER_CONTROL_SCHEME = 26,
- GAME_MSG_DROP_CLIENT_LOOT = 30,
- GAME_MSG_DIE = 37,
- GAME_MSG_REQUEST_DIE = 38,
- GAME_MSG_PLAY_EMOTE = 41,
- GAME_MSG_PLAY_ANIMATION = 43,
- GAME_MSG_CONTROL_BEHAVIOR = 48,
- GAME_MSG_SET_NAME = 72,
- GAME_MSG_ECHO_START_SKILL = 118,
- GAME_MSG_START_SKILL = 119,
- GAME_MSG_VERIFY_ACK = 121,
- GAME_MSG_ADD_SKILL = 127,
- GAME_MSG_REMOVE_SKILL = 128,
- GAME_MSG_SET_CURRENCY = 133,
- GAME_MSG_PICKUP_CURRENCY = 137,
- GAME_MSG_PICKUP_ITEM = 139,
- GAME_MSG_TEAM_PICKUP_ITEM = 140,
- GAME_MSG_PLAY_FX_EFFECT = 154,
- GAME_MSG_STOP_FX_EFFECT = 155,
- GAME_MSG_REQUEST_RESURRECT = 159,
- GAME_MSG_RESURRECT = 160,
- GAME_MSG_PUSH_EQUIPPED_ITEMS_STATE = 191,
- GAME_MSG_POP_EQUIPPED_ITEMS_STATE = 192,
- GAME_MSG_SET_GM_LEVEL = 193,
- GAME_MSG_SET_STUNNED = 198,
- GAME_MSG_SET_STUN_IMMUNITY = 200,
- GAME_MSG_KNOCKBACK = 202,
- GAME_MSG_REBUILD_CANCEL = 209,
- GAME_MSG_ENABLE_REBUILD = 213,
- GAME_MSG_MOVE_ITEM_IN_INVENTORY = 224,
- GAME_MSG_ADD_ITEM_TO_INVENTORY_CLIENT_SYNC = 227,
- GAME_MSG_REMOVE_ITEM_FROM_INVENTORY = 230,
- GAME_MSG_EQUIP_ITEM = 231,
- GAME_MSG_UN_EQUIP_ITEM = 233,
- GAME_MSG_OFFER_MISSION = 248,
- GAME_MSG_RESPOND_TO_MISSION = 249,
- GAME_MSG_NOTIFY_MISSION = 254,
- GAME_MSG_NOTIFY_MISSION_TASK = 255,
- GAME_MSG_REBUILD_NOTIFY_STATE = 336,
- GAME_MSG_TERMINATE_INTERACTION = 357,
- GAME_MSG_SERVER_TERMINATE_INTERACTION = 358,
- GAME_MSG_REQUEST_USE = 364,
- GAME_MSG_VENDOR_OPEN_WINDOW = 369,
- GAME_MSG_BUY_FROM_VENDOR = 373,
- GAME_MSG_SELL_TO_VENDOR = 374,
- GAME_MSG_TEAM_SET_OFF_WORLD_FLAG = 383,
- GAME_MSG_SET_INVENTORY_SIZE = 389,
- GAME_MSG_ACKNOWLEDGE_POSSESSION = 391,
- GAME_MSG_SET_SHOOTING_GALLERY_PARAMS = 400,
- GAME_MSG_REQUEST_ACTIVITY_START_STOP = 402,
- GAME_MSG_REQUEST_ACTIVITY_ENTER = 403,
- GAME_MSG_REQUEST_ACTIVITY_EXIT = 404,
- GAME_MSG_ACTIVITY_ENTER = 405,
- GAME_MSG_ACTIVITY_EXIT = 406,
- GAME_MSG_ACTIVITY_START = 407,
- GAME_MSG_ACTIVITY_STOP = 408,
- GAME_MSG_SHOOTING_GALLERY_CLIENT_AIM_UPDATE = 409,
- GAME_MSG_SHOOTING_GALLERY_FIRE = 411,
- GAME_MSG_REQUEST_VENDOR_STATUS_UPDATE = 416,
- GAME_MSG_VENDOR_STATUS_UPDATE = 417,
- GAME_MSG_NOTIFY_CLIENT_SHOOTING_GALLERY_SCORE = 425,
- GAME_MSG_CONSUME_CLIENT_ITEM = 427,
- GAME_MSG_CLIENT_ITEM_CONSUMED = 428,
- GAME_MSG_UPDATE_SHOOTING_GALLERY_ROTATION = 448,
- GAME_MSG_SET_FLAG = 471,
- GAME_MSG_NOTIFY_CLIENT_FLAG_CHANGE = 472,
- GAME_MSG_VENDOR_TRANSACTION_RESULT = 476,
- GAME_MSG_HAS_BEEN_COLLECTED = 486,
- GAME_MSG_DISPLAY_CHAT_BUBBLE = 495,
- GAME_MSG_SPAWN_PET = 498,
- GAME_MSG_DESPAWN_PET = 499,
- GAME_MSG_PLAYER_LOADED = 505,
- GAME_MSG_PLAYER_READY = 509,
- GAME_MSG_REQUEST_LINKED_MISSION = 515,
- GAME_MSG_INVALID_ZONE_TRANSFER_LIST = 519,
- GAME_MSG_MISSION_DIALOGUE_OK = 520,
- GAME_MSG_DISPLAY_MESSAGE_BOX = 529,
- GAME_MSG_MESSAGE_BOX_RESPOND = 530,
- GAME_MSG_CHOICE_BOX_RESPOND = 531,
- GAME_MSG_SMASH = 537,
- GAME_MSG_UNSMASH = 538,
- GAME_MSG_SET_SHOOTING_GALLERY_RETICULE_EFFECT = 548,
- GAME_MSG_PLACE_MODEL_RESPONSE = 0x223,
- GAME_MSG_SET_JET_PACK_MODE = 561,
- GAME_MSG_REGISTER_PET_ID = 565,
- GAME_MSG_REGISTER_PET_DBID = 566,
- GAME_MSG_SHOW_ACTIVITY_COUNTDOWN = 568,
- GAME_MSG_START_ACTIVITY_TIME = 576,
- GAME_MSG_ACTIVITY_PAUSE = 602,
- GAME_MSG_USE_NON_EQUIPMENT_ITEM = 603,
- GAME_MSG_USE_ITEM_RESULT = 607,
- GAME_MSG_COMMAND_PET = 640,
- GAME_MSG_PET_RESPONSE = 641,
- GAME_MSG_REQUEST_ACTIVITY_SUMMARY_LEADERBOARD_DATA = 648,
- GAME_MSG_SEND_ACTIVITY_SUMMARY_LEADERBOARD_DATA = 649,
- GAME_MSG_NOTIFY_OBJECT = 656,
- GAME_MSG_CLIENT_NOTIFY_PET = 659,
- GAME_MSG_NOTIFY_PET = 660,
- GAME_MSG_NOTIFY_PET_TAMING_MINIGAME = 661,
- GAME_MSG_START_SERVER_PET_MINIGAME_TIMER = 662,
- GAME_MSG_CLIENT_EXIT_TAMING_MINIGAME = 663,
- GAME_MSG_PET_NAME_CHANGED = 686,
- GAME_MSG_PET_TAMING_MINIGAME_RESULT = 667,
- GAME_MSG_PET_TAMING_TRY_BUILD_RESULT = 668,
- GAME_MSG_NOTIFY_TAMING_BUILD_SUCCESS = 673,
- GAME_MSG_NOTIFY_TAMING_MODEL_LOADED_ON_SERVER = 674,
- GAME_MSG_ACTIVATE_BUBBLE_BUFF = 678,
- GAME_MSG_DEACTIVATE_BUBBLE_BUFF = 679,
- GAME_MSG_ADD_PET_TO_PLAYER = 681,
- GAME_MSG_REQUEST_SET_PET_NAME = 683,
- GAME_MSG_SET_PET_NAME = 684,
- GAME_MSG_NOTIFY_PET_TAMING_PUZZLE_SELECTED = 675,
- GAME_MSG_SHOW_PET_ACTION_BUTTON = 692,
- GAME_MSG_SET_EMOTE_LOCK_STATE = 693,
- GAME_MSG_USE_ITEM_REQUIREMENTS_RESPONSE = 703,
- GAME_MSG_PLAY_EMBEDDED_EFFECT_ON_ALL_CLIENTS_NEAR_OBJECT = 713,
- GAME_MSG_DOWNLOAD_PROPERTY_DATA = 716,
- GAME_MSG_QUERY_PROPERTY_DATA = 717,
- GAME_MSG_PROPERTY_EDITOR_BEGIN = 724,
- GAME_MSG_PROPERTY_EDITOR_END = 725,
- GAME_MSG_IS_MINIFIG_IN_A_BUBBLE = 729,
- GAME_MSG_START_PATHING = 733,
- GAME_MSG_ACTIVATE_BUBBLE_BUFF_FROM_SERVER = 734,
- GAME_MSG_DEACTIVATE_BUBBLE_BUFF_FROM_SERVER = 735,
- GAME_MSG_NOTIFY_CLIENT_ZONE_OBJECT = 737,
- GAME_MSG_UPDATE_REPUTATION = 746,
- GAME_MSG_PROPERTY_RENTAL_RESPONSE = 750,
- GAME_MSG_REQUEST_PLATFORM_RESYNC = 760,
- GAME_MSG_PLATFORM_RESYNC = 761,
- GAME_MSG_PLAY_CINEMATIC = 762,
- GAME_MSG_END_CINEMATIC = 763,
- GAME_MSG_CINEMATIC_UPDATE = 764,
- GAME_MSG_TOGGLE_GHOST_REFERENCE_OVERRIDE = 767,
- GAME_MSG_SET_GHOST_REFERENCE_POSITION = 768,
- GAME_MSG_FIRE_EVENT_SERVER_SIDE = 770,
- GAME_MSG_SET_NETWORK_SCRIPT_VAR = 781,
- GAME_MSG_UPDATE_MODEL_FROM_CLIENT = 793,
- GAME_MSG_DELETE_MODEL_FROM_CLIENT = 794,
- GAME_MSG_PLAY_ND_AUDIO_EMITTER = 821,
- GAME_MSG_PLAY2_DAMBIENT_SOUND = 831,
- GAME_MSG_ENTER_PROPERTY1 = 840,
- GAME_MSG_ENTER_PROPERTY2 = 841,
- GAME_MSG_PROPERTY_ENTRANCE_SYNC = 842,
- GAME_MSG_PROPERTY_SELECT_QUERY = 845,
- GAME_MSG_PARSE_CHAT_MESSAGE = 850,
- GAME_MSG_BROADCAST_TEXT_TO_CHATBOX = 858,
- GAME_MSG_OPEN_PROPERTY_MANAGEMENT = 860,
- GAME_MSG_OPEN_PROPERTY_VENDOR = 861,
- GAME_MSG_UPDATE_PROPERTY_OR_MODEL_FOR_FILTER_CHECK = 863,
- GAME_MSG_CLIENT_TRADE_REQUEST = 868,
- GAME_MSG_SERVER_TRADE_REQUEST = 869,
- GAME_MSG_SERVER_TRADE_INVITE = 870,
- GAME_MSG_CLIENT_TRADE_REPLY = 871,
- GAME_MSG_SERVER_TRADE_REPLY = 872,
- GAME_MSG_SERVER_TRADE_INITIAL_REPLY = 873,
- GAME_MSG_SERVER_TRADE_FINAL_REPLY = 874,
- GAME_MSG_CLIENT_TRADE_UPDATE = 875,
- GAME_MSG_SERVER_SIDE_TRADE_UPDATE = 876,
- GAME_MSG_SERVER_TRADE_UPDATE = 877,
- GAME_MSG_CLIENT_TRADE_CANCEL = 878,
- GAME_MSG_CLIENT_SIDE_TRADE_CANCEL = 879,
- GAME_MSG_CLIENT_TRADE_ACCEPT = 880,
- GAME_MSG_SERVER_SIDE_TRADE_ACCEPT = 881,
- GAME_MSG_SERVER_SIDE_TRADE_CANCEL = 882,
- GAME_MSG_SERVER_TRADE_CANCEL = 883,
- GAME_MSG_SERVER_TRADE_ACCEPT = 884,
- GAME_MSG_READY_FOR_UPDATES = 888,
- GAME_MSG_ORIENT_TO_OBJECT = 905,
- GAME_MSG_ORIENT_TO_POSITION = 906,
- GAME_MSG_ORIENT_TO_ANGLE = 907,
- GAME_MSG_BOUNCER_ACTIVE_STATUS = 942,
- GAME_MSG_UN_USE_BBB_MODEL = 999,
- GAME_MSG_BBB_LOAD_ITEM_REQUEST = 1000,
- GAME_MSG_BBB_SAVE_REQUEST = 1001,
- GAME_MSG_BBB_SAVE_RESPONSE = 1006,
- GAME_MSG_NOTIFY_CLIENT_OBJECT = 1042,
- GAME_MSG_DISPLAY_ZONE_SUMMARY = 1043,
- GAME_MSG_ZONE_SUMMARY_DISMISSED = 1044,
- GAME_MSG_ACTIVITY_STATE_CHANGE_REQUEST = 1053,
- GAME_MSG_MODIFY_PLAYER_ZONE_STATISTIC = 1046,
- GAME_MSG_START_BUILDING_WITH_ITEM = 1057,
- GAME_MSG_START_ARRANGING_WITH_ITEM = 1061,
- GAME_MSG_FINISH_ARRANGING_WITH_ITEM = 1062,
- GAME_MSG_DONE_ARRANGING_WITH_ITEM = 1063,
- GAME_MSG_SET_BUILD_MODE = 1068,
- GAME_MSG_BUILD_MODE_SET = 1069,
- GAME_MSG_SET_BUILD_MODE_CONFIRMED = 1073,
- GAME_MSG_NOTIFY_CLIENT_FAILED_PRECONDITION = 1081,
- GAME_MSG_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1093,
- GAME_MSG_MODULAR_BUILD_BEGIN = 1094,
- GAME_MSG_MODULAR_BUILD_END = 1095,
- GAME_MSG_MODULAR_BUILD_MOVE_AND_EQUIP = 1096,
- GAME_MSG_MODULAR_BUILD_FINISH = 1097,
- GAME_MSG_REPORT_BUG = 1198,
- GAME_MSG_MISSION_DIALOGUE_CANCELLED = 1129,
- GAME_MSG_ECHO_SYNC_SKILL = 1144,
- GAME_MSG_SYNC_SKILL = 1145,
- GAME_MSG_REQUEST_SERVER_PROJECTILE_IMPACT = 1148,
- GAME_MSG_DO_CLIENT_PROJECTILE_IMPACT = 1151,
- GAME_MSG_MODULAR_BUILD_CONVERT_MODEL = 1155,
- GAME_MSG_SET_PLAYER_ALLOWED_RESPAWN = 1165,
- GAME_MSG_UI_MESSAGE_SERVER_TO_SINGLE_CLIENT = 1184,
- GAME_MSG_UI_MESSAGE_SERVER_TO_ALL_CLIENTS = 1185,
- GAME_MSG_PET_TAMING_TRY_BUILD = 1197,
- GAME_MSG_REQUEST_SMASH_PLAYER = 1202,
- GAME_MSG_FIRE_EVENT_CLIENT_SIDE = 1213,
- GAME_MSG_TOGGLE_GM_INVIS = 1218,
- GAME_MSG_CHANGE_OBJECT_WORLD_STATE = 1223,
- GAME_MSG_VEHICLE_LOCK_INPUT = 1230,
- GAME_MSG_VEHICLE_UNLOCK_INPUT = 1231,
- GAME_MSG_RACING_RESET_PLAYER_TO_LAST_RESET = 1252,
- GAME_MSG_RACING_SERVER_SET_PLAYER_LAP_AND_PLANE = 1253,
- GAME_MSG_RACING_SET_PLAYER_RESET_INFO = 1254,
- GAME_MSG_RACING_PLAYER_INFO_RESET_FINISHED = 1255,
- GAME_MSG_LOCK_NODE_ROTATION = 1260,
- GAME_MSG_VEHICLE_SET_WHEEL_LOCK_STATE = 1273,
- GAME_MSG_NOTIFY_VEHICLE_OF_RACING_OBJECT = 1276,
- GAME_MSG_SET_NAME_BILLBOARD_STATE = 1284,
- GAME_MSG_PLAYER_REACHED_RESPAWN_CHECKPOINT = 1296,
- GAME_MSG_HANDLE_UGC_EQUIP_POST_DELETE_BASED_ON_EDIT_MODE = 1300,
- GAME_MSG_HANDLE_UGC_EQUIP_PRE_CREATE_BASED_ON_EDIT_MODE = 1301,
- GAME_MSG_PROPERTY_CONTENTS_FROM_CLIENT = 1305,
- GAME_MSG_GET_MODELS_ON_PROPERTY = 1306,
- GAME_MSG_MATCH_REQUEST = 1308,
- GAME_MSG_MATCH_RESPONSE = 1309,
- GAME_MSG_MATCH_UPDATE = 1310,
- GAME_MSG_MODULE_ASSEMBLY_DB_DATA_FOR_CLIENT = 1131,
- GAME_MSG_MODULE_ASSEMBLY_QUERY_DATA = 1132,
- GAME_MSG_SHOW_BILLBOARD_INTERACT_ICON = 1337,
- GAME_MSG_CHANGE_IDLE_FLAGS = 1338,
- GAME_MSG_VEHICLE_ADD_PASSIVE_BOOST_ACTION = 1340,
- GAME_MSG_VEHICLE_REMOVE_PASSIVE_BOOST_ACTION = 1341,
- GAME_MSG_VEHICLE_NOTIFY_SERVER_ADD_PASSIVE_BOOST_ACTION = 1342,
- GAME_MSG_VEHICLE_NOTIFY_SERVER_REMOVE_PASSIVE_BOOST_ACTION = 1343,
- GAME_MSG_VEHICLE_ADD_SLOWDOWN_ACTION = 1344,
- GAME_MSG_VEHICLE_REMOVE_SLOWDOWN_ACTION = 1345,
- GAME_MSG_VEHICLE_NOTIFY_SERVER_ADD_SLOWDOWN_ACTION = 1346,
- GAME_MSG_VEHICLE_NOTIFY_SERVER_REMOVE_SLOWDOWN_ACTION = 1347,
- GAME_MSG_BUYBACK_FROM_VENDOR = 1350,
- GAME_MSG_SET_PROPERTY_ACCESS = 1366,
- GAME_MSG_ZONE_PROPERTY_MODEL_PLACED = 1369,
- GAME_MSG_ZONE_PROPERTY_MODEL_ROTATED = 1370,
- GAME_MSG_ZONE_PROPERTY_MODEL_REMOVED_WHILE_EQUIPPED = 1371,
- GAME_MSG_ZONE_PROPERTY_MODEL_EQUIPPED = 1372,
- GAME_MSG_ZONE_PROPERTY_MODEL_PICKED_UP = 1373,
- GAME_MSG_ZONE_PROPERTY_MODEL_REMOVED = 1374,
- GAME_MSG_NOTIFY_RACING_CLIENT = 1390,
- GAME_MSG_RACING_PLAYER_HACK_CAR = 1391,
- GAME_MSG_RACING_PLAYER_LOADED = 1392,
- GAME_MSG_RACING_CLIENT_READY = 1393,
- GAME_MSG_UPDATE_CHAT_MODE = 1395,
- GAME_MSG_VEHICLE_NOTIFY_FINISHED_RACE = 1396,
- GAME_MSG_SET_CONSUMABLE_ITEM = 1409,
- GAME_MSG_SET_STATUS_IMMUNITY = 1435,
- GAME_MSG_SET_PET_NAME_MODERATED = 1448,
- GAME_MSG_MODIFY_LEGO_SCORE = 1459,
- GAME_MSG_RESTORE_TO_POST_LOAD_STATS = 1468,
- GAME_MSG_SET_RAIL_MOVEMENT = 1471,
- GAME_MSG_START_RAIL_MOVEMENT = 1472,
- GAME_MSG_CANCEL_RAIL_MOVEMENT = 1474,
- GAME_MSG_CLIENT_RAIL_MOVEMENT_READY = 1476,
- GAME_MSG_PLAYER_RAIL_ARRIVED_NOTIFICATION = 1477,
- GAME_MSG_UPDATE_PLAYER_STATISTIC = 1481,
- GAME_MSG_MODULAR_ASSEMBLY_NIF_COMPLETED = 1498,
- GAME_MSG_NOTIFY_NOT_ENOUGH_INV_SPACE = 1516,
- GAME_MSG_TEAM_SET_LEADER = 0x0615,
- GAME_MSG_TEAM_INVITE_CONFIRM = 0x0616,
- GAME_MSG_TEAM_GET_STATUS_RESPONSE = 0x0617,
- GAME_MSG_TEAM_ADD_PLAYER = 0x061a,
- GAME_MSG_TEAM_REMOVE_PLAYER = 0x061b,
- GAME_MSG_START_CELEBRATION_EFFECT = 1618,
- GAME_MSG_ADD_BUFF = 1647,
- GAME_MSG_SERVER_DONE_LOADING_ALL_OBJECTS = 1642,
- GAME_MSG_PLACE_PROPERTY_MODEL = 1170,
- GAME_MSG_VEHICLE_NOTIFY_HIT_IMAGINATION_SERVER = 1606,
- GAME_MSG_ADD_RUN_SPEED_MODIFIER = 1505,
- GAME_MSG_HANDLE_HOT_PROPERTY_DATA = 1511,
- GAME_MSG_SEND_HOT_PROPERTY_DATA = 1510,
- GAME_MSG_REMOVE_RUN_SPEED_MODIFIER = 1506,
- GAME_MSG_UPDATE_PROPERTY_PERFORMANCE_COST = 1547,
- GAME_MSG_PROPERTY_ENTRANCE_BEGIN = 1553,
- GAME_MSG_SET_RESURRECT_RESTORE_VALUES = 1591,
- GAME_MSG_VEHICLE_STOP_BOOST = 1617,
- GAME_MSG_REMOVE_BUFF = 1648,
- GAME_MSG_REQUEST_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1666,
- GAME_MSG_RESPONSE_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1667,
- GAME_MSG_PLAYER_SET_CAMERA_CYCLING_MODE = 1676,
- GAME_MSG_SET_MOUNT_INVENTORY_ID = 1726,
- GAME_MSG_NOTIFY_SERVER_LEVEL_PROCESSING_COMPLETE = 1734,
- GAME_MSG_NOTIFY_LEVEL_REWARDS = 1735,
- GAME_MSG_DISMOUNT_COMPLETE = 1756,
- GAME_MSG_MARK_INVENTORY_ITEM_AS_ACTIVE = 1767,
- END
-};
diff --git a/dCommon/dEnums/eAuthMessageType.h b/dCommon/dEnums/eAuthMessageType.h
new file mode 100644
index 00000000..ecc17a37
--- /dev/null
+++ b/dCommon/dEnums/eAuthMessageType.h
@@ -0,0 +1,15 @@
+#ifndef __EAUTHMESSAGETYPE__H__
+#define __EAUTHMESSAGETYPE__H__
+
+#include
+
+enum class eAuthMessageType : uint32_t {
+ LOGIN_REQUEST = 0,
+ LOGOUT_REQUEST,
+ CREATE_NEW_ACCOUNT_REQUEST,
+ LEGOINTERFACE_AUTH_RESPONSE,
+ SESSIONKEY_RECEIVED_CONFIRM,
+ RUNTIME_CONFIG
+};
+
+#endif //!__EAUTHMESSAGETYPE__H__
diff --git a/dCommon/dEnums/eBuildType.h b/dCommon/dEnums/eBuildType.h
new file mode 100644
index 00000000..f28f43cc
--- /dev/null
+++ b/dCommon/dEnums/eBuildType.h
@@ -0,0 +1,12 @@
+#ifndef __EBUILDTYPE__H__
+#define __EBUILDTYPE__H__
+
+#include
+
+enum class eBuildType :uint32_t {
+ NOWHERE,
+ IN_WORLD,
+ ON_PROPERTY
+};
+
+#endif //!__EBUILDTYPE__H__
diff --git a/dCommon/dEnums/eCharacterCreationResponse.h b/dCommon/dEnums/eCharacterCreationResponse.h
new file mode 100644
index 00000000..da1ec0f2
--- /dev/null
+++ b/dCommon/dEnums/eCharacterCreationResponse.h
@@ -0,0 +1,14 @@
+#ifndef __ECHARACTERCREATIONRESPONSE__H__
+#define __ECHARACTERCREATIONRESPONSE__H__
+
+#include
+
+enum class eCharacterCreationResponse : uint8_t {
+ SUCCESS = 0,
+ OBJECT_ID_UNAVAILABLE,
+ NAME_NOT_ALLOWED,
+ PREDEFINED_NAME_IN_USE,
+ CUSTOM_NAME_IN_USE
+};
+
+#endif //!__ECHARACTERCREATIONRESPONSE__H__
diff --git a/dCommon/dEnums/eChatInternalMessageType.h b/dCommon/dEnums/eChatInternalMessageType.h
new file mode 100644
index 00000000..d3b7020b
--- /dev/null
+++ b/dCommon/dEnums/eChatInternalMessageType.h
@@ -0,0 +1,31 @@
+#ifndef __ECHATINTERNALMESSAGETYPE__H__
+#define __ECHATINTERNALMESSAGETYPE__H__
+
+#include
+
+enum eChatInternalMessageType : uint32_t {
+ PLAYER_ADDED_NOTIFICATION = 0,
+ PLAYER_REMOVED_NOTIFICATION,
+ ADD_FRIEND,
+ ADD_BEST_FRIEND,
+ ADD_TO_TEAM,
+ ADD_BLOCK,
+ REMOVE_FRIEND,
+ REMOVE_BLOCK,
+ REMOVE_FROM_TEAM,
+ DELETE_TEAM,
+ REPORT,
+ PRIVATE_CHAT,
+ PRIVATE_CHAT_RESPONSE,
+ ANNOUNCEMENT,
+ MAIL_COUNT_UPDATE,
+ MAIL_SEND_NOTIFY,
+ REQUEST_USER_LIST,
+ FRIEND_LIST,
+ ROUTE_TO_PLAYER,
+ TEAM_UPDATE,
+ MUTE_UPDATE,
+ CREATE_TEAM,
+};
+
+#endif //!__ECHATINTERNALMESSAGETYPE__H__
diff --git a/dCommon/dEnums/eChatMessageType.h b/dCommon/dEnums/eChatMessageType.h
new file mode 100644
index 00000000..52895ba3
--- /dev/null
+++ b/dCommon/dEnums/eChatMessageType.h
@@ -0,0 +1,78 @@
+#ifndef __ECHATMESSAGETYPE__H__
+#define __ECHATMESSAGETYPE__H__
+
+#include
+
+//! The Internal Chat Packet Identifiers
+enum class eChatMessageType :uint32_t {
+ LOGIN_SESSION_NOTIFY = 0,
+ GENERAL_CHAT_MESSAGE,
+ PRIVATE_CHAT_MESSAGE,
+ USER_CHANNEL_CHAT_MESSAGE,
+ WORLD_DISCONNECT_REQUEST,
+ WORLD_PROXIMITY_RESPONSE,
+ WORLD_PARCEL_RESPONSE,
+ ADD_FRIEND_REQUEST,
+ ADD_FRIEND_RESPONSE,
+ REMOVE_FRIEND,
+ GET_FRIENDS_LIST,
+ ADD_IGNORE,
+ REMOVE_IGNORE,
+ GET_IGNORE_LIST,
+ TEAM_MISSED_INVITE_CHECK,
+ TEAM_INVITE,
+ TEAM_INVITE_RESPONSE,
+ TEAM_KICK,
+ TEAM_LEAVE,
+ TEAM_SET_LOOT,
+ TEAM_SET_LEADER,
+ TEAM_GET_STATUS,
+ GUILD_CREATE,
+ GUILD_INVITE,
+ GUILD_INVITE_RESPONSE,
+ GUILD_LEAVE,
+ GUILD_KICK,
+ GUILD_GET_STATUS,
+ GUILD_GET_ALL,
+ SHOW_ALL,
+ BLUEPRINT_MODERATED,
+ BLUEPRINT_MODEL_READY,
+ PROPERTY_READY_FOR_APPROVAL,
+ PROPERTY_MODERATION_CHANGED,
+ PROPERTY_BUILDMODE_CHANGED,
+ PROPERTY_BUILDMODE_CHANGED_REPORT,
+ MAIL,
+ WORLD_INSTANCE_LOCATION_REQUEST,
+ REPUTATION_UPDATE,
+ SEND_CANNED_TEXT,
+ GMLEVEL_UPDATE,
+ CHARACTER_NAME_CHANGE_REQUEST,
+ CSR_REQUEST,
+ CSR_REPLY,
+ GM_KICK,
+ GM_ANNOUNCE,
+ GM_MUTE,
+ ACTIVITY_UPDATE,
+ WORLD_ROUTE_PACKET,
+ GET_ZONE_POPULATIONS,
+ REQUEST_MINIMUM_CHAT_MODE,
+ REQUEST_MINIMUM_CHAT_MODE_PRIVATE,
+ MATCH_REQUEST,
+ UGCMANIFEST_REPORT_MISSING_FILE,
+ UGCMANIFEST_REPORT_DONE_FILE,
+ UGCMANIFEST_REPORT_DONE_BLUEPRINT,
+ UGCC_REQUEST,
+ WHO,
+ WORLD_PLAYERS_PET_MODERATED_ACKNOWLEDGE,
+ ACHIEVEMENT_NOTIFY,
+ GM_CLOSE_PRIVATE_CHAT_WINDOW,
+ UNEXPECTED_DISCONNECT,
+ PLAYER_READY,
+ GET_DONATION_TOTAL,
+ UPDATE_DONATION,
+ PRG_CSR_COMMAND,
+ HEARTBEAT_REQUEST_FROM_WORLD,
+ UPDATE_FREE_TRIAL_STATUS
+};
+
+#endif //!__ECHATMESSAGETYPE__H__
diff --git a/dCommon/dEnums/eCinematicEvent.h b/dCommon/dEnums/eCinematicEvent.h
new file mode 100644
index 00000000..7fb82ca7
--- /dev/null
+++ b/dCommon/dEnums/eCinematicEvent.h
@@ -0,0 +1,12 @@
+#ifndef __ECINEMATICEVENT__H__
+#define __ECINEMATICEVENT__H__
+
+#include
+
+enum class eCinematicEvent : uint32_t {
+ STARTED,
+ WAYPOINT,
+ ENDED,
+};
+
+#endif //!__ECINEMATICEVENT__H__
diff --git a/dCommon/dEnums/eClientMessageType.h b/dCommon/dEnums/eClientMessageType.h
new file mode 100644
index 00000000..aafccc36
--- /dev/null
+++ b/dCommon/dEnums/eClientMessageType.h
@@ -0,0 +1,76 @@
+#ifndef __ECLIENTMESSAGETYPE__H__
+#define __ECLIENTMESSAGETYPE__H__
+
+#include
+
+enum class eClientMessageType : uint32_t {
+ LOGIN_RESPONSE = 0,
+ LOGOUT_RESPONSE,
+ LOAD_STATIC_ZONE,
+ CREATE_OBJECT,
+ CREATE_CHARACTER,
+ CREATE_CHARACTER_EXTENDED,
+ CHARACTER_LIST_RESPONSE,
+ CHARACTER_CREATE_RESPONSE,
+ CHARACTER_RENAME_RESPONSE,
+ CHAT_CONNECT_RESPONSE,
+ AUTH_ACCOUNT_CREATE_RESPONSE,
+ DELETE_CHARACTER_RESPONSE,
+ GAME_MSG,
+ CONNECT_CHAT,
+ TRANSFER_TO_WORLD,
+ IMPENDING_RELOAD_NOTIFY,
+ MAKE_GM_RESPONSE,
+ HTTP_MONITOR_INFO_RESPONSE,
+ SLASH_PUSH_MAP_RESPONSE,
+ SLASH_PULL_MAP_RESPONSE,
+ SLASH_LOCK_MAP_RESPONSE,
+ BLUEPRINT_SAVE_RESPONSE,
+ BLUEPRINT_LUP_SAVE_RESPONSE,
+ BLUEPRINT_LOAD_RESPONSE_ITEMID,
+ BLUEPRINT_GET_ALL_DATA_RESPONSE,
+ MODEL_INSTANTIATE_RESPONSE,
+ DEBUG_OUTPUT,
+ ADD_FRIEND_REQUEST,
+ ADD_FRIEND_RESPONSE,
+ REMOVE_FRIEND_RESPONSE,
+ GET_FRIENDS_LIST_RESPONSE,
+ UPDATE_FRIEND_NOTIFY,
+ ADD_IGNORE_RESPONSE,
+ REMOVE_IGNORE_RESPONSE,
+ GET_IGNORE_LIST_RESPONSE,
+ TEAM_INVITE,
+ TEAM_INVITE_INITIAL_RESPONSE,
+ GUILD_CREATE_RESPONSE,
+ GUILD_GET_STATUS_RESPONSE,
+ GUILD_INVITE,
+ GUILD_INVITE_INITIAL_RESPONSE,
+ GUILD_INVITE_FINAL_RESPONSE,
+ GUILD_INVITE_CONFIRM,
+ GUILD_ADD_PLAYER,
+ GUILD_REMOVE_PLAYER,
+ GUILD_LOGIN_LOGOUT,
+ GUILD_RANK_CHANGE,
+ GUILD_DATA,
+ GUILD_STATUS,
+ MAIL,
+ DB_PROXY_RESULT,
+ SHOW_ALL_RESPONSE,
+ WHO_RESPONSE,
+ SEND_CANNED_TEXT,
+ UPDATE_CHARACTER_NAME,
+ SET_NETWORK_SIMULATOR,
+ INVALID_CHAT_MESSAGE,
+ MINIMUM_CHAT_MODE_RESPONSE,
+ MINIMUM_CHAT_MODE_RESPONSE_PRIVATE,
+ CHAT_MODERATION_STRING,
+ UGC_MANIFEST_RESPONSE,
+ IN_LOGIN_QUEUE,
+ SERVER_STATES,
+ GM_CLOSE_TARGET_CHAT_WINDOW,
+ GENERAL_TEXT_FOR_LOCALIZATION,
+ UPDATE_FREE_TRIAL_STATUS,
+ UGC_DOWNLOAD_FAILED = 120
+};
+
+#endif //!__ECLIENTMESSAGETYPE__H__
diff --git a/dCommon/dEnums/eConnectionType.h b/dCommon/dEnums/eConnectionType.h
new file mode 100644
index 00000000..ce1ff90c
--- /dev/null
+++ b/dCommon/dEnums/eConnectionType.h
@@ -0,0 +1,14 @@
+#ifndef __ECONNECTIONTYPE__H__
+#define __ECONNECTIONTYPE__H__
+
+enum class eConnectionType : uint16_t {
+ SERVER = 0,
+ AUTH,
+ CHAT,
+ CHAT_INTERNAL,
+ WORLD,
+ CLIENT,
+ MASTER
+};
+
+#endif //!__ECONNECTIONTYPE__H__
diff --git a/dCommon/dEnums/eControlScheme.h b/dCommon/dEnums/eControlScheme.h
new file mode 100644
index 00000000..f7585ebb
--- /dev/null
+++ b/dCommon/dEnums/eControlScheme.h
@@ -0,0 +1,18 @@
+#ifndef __ECONTROLSCHEME__H__
+#define __ECONTROLSCHEME__H__
+
+#include
+
+enum class eControlScheme : uint32_t {
+ SCHEME_A,
+ SCHEME_D,
+ SCHEME_GAMEPAD,
+ SCHEME_E,
+ SCHEME_FPS,
+ SCHEME_DRIVING,
+ SCHEME_TAMING,
+ SCHEME_MODULAR_BUILD,
+ SCHEME_WEAR_A_ROBOT //== freecam?
+};
+
+#endif //!__ECONTROLSCHEME__H__
diff --git a/dCommon/dEnums/eCyclingMode.h b/dCommon/dEnums/eCyclingMode.h
new file mode 100644
index 00000000..b5e3248b
--- /dev/null
+++ b/dCommon/dEnums/eCyclingMode.h
@@ -0,0 +1,11 @@
+#ifndef __ECYCLINGMODE__H__
+#define __ECYCLINGMODE__H__
+
+#include
+
+enum class eCyclingMode : uint32_t {
+ ALLOW_CYCLE_TEAMMATES,
+ DISALLOW_CYCLING
+};
+
+#endif //!__ECYCLINGMODE__H__
diff --git a/dCommon/dEnums/eGameActivity.h b/dCommon/dEnums/eGameActivity.h
new file mode 100644
index 00000000..16b75380
--- /dev/null
+++ b/dCommon/dEnums/eGameActivity.h
@@ -0,0 +1,15 @@
+#ifndef __EGAMEACTIVITY__H__
+#define __EGAMEACTIVITY__H__
+
+#include
+
+enum class eGameActivity : uint32_t {
+ NONE,
+ QUICKBUILDING,
+ SHOOTING_GALLERY,
+ RACING,
+ PINBALL,
+ PET_TAMING
+};
+
+#endif //!__EGAMEACTIVITY__H__
diff --git a/dCommon/dEnums/eGameMessageType.h b/dCommon/dEnums/eGameMessageType.h
new file mode 100644
index 00000000..051a5ae8
--- /dev/null
+++ b/dCommon/dEnums/eGameMessageType.h
@@ -0,0 +1,303 @@
+#ifndef __EGAMEMESSAGETYPE__H__
+#define __EGAMEMESSAGETYPE__H__
+
+#include
+
+enum class eGameMessageType : uint16_t {
+ TELEPORT = 19,
+ SET_PLAYER_CONTROL_SCHEME = 26,
+ DROP_CLIENT_LOOT = 30,
+ DIE = 37,
+ REQUEST_DIE = 38,
+ PLAY_EMOTE = 41,
+ PLAY_ANIMATION = 43,
+ CONTROL_BEHAVIOR = 48,
+ SET_NAME = 72,
+ ECHO_START_SKILL = 118,
+ START_SKILL = 119,
+ VERIFY_ACK = 121,
+ ADD_SKILL = 127,
+ REMOVE_SKILL = 128,
+ SET_CURRENCY = 133,
+ PICKUP_CURRENCY = 137,
+ PICKUP_ITEM = 139,
+ TEAM_PICKUP_ITEM = 140,
+ PLAY_FX_EFFECT = 154,
+ STOP_FX_EFFECT = 155,
+ REQUEST_RESURRECT = 159,
+ RESURRECT = 160,
+ PUSH_EQUIPPED_ITEMS_STATE = 191,
+ POP_EQUIPPED_ITEMS_STATE = 192,
+ SET_GM_LEVEL = 193,
+ SET_STUNNED = 198,
+ SET_STUN_IMMUNITY = 200,
+ KNOCKBACK = 202,
+ REBUILD_CANCEL = 209,
+ ENABLE_REBUILD = 213,
+ MOVE_ITEM_IN_INVENTORY = 224,
+ ADD_ITEM_TO_INVENTORY_CLIENT_SYNC = 227,
+ REMOVE_ITEM_FROM_INVENTORY = 230,
+ EQUIP_ITEM = 231,
+ UN_EQUIP_ITEM = 233,
+ OFFER_MISSION = 248,
+ RESPOND_TO_MISSION = 249,
+ NOTIFY_MISSION = 254,
+ NOTIFY_MISSION_TASK = 255,
+ REBUILD_NOTIFY_STATE = 336,
+ TERMINATE_INTERACTION = 357,
+ SERVER_TERMINATE_INTERACTION = 358,
+ REQUEST_USE = 364,
+ VENDOR_OPEN_WINDOW = 369,
+ BUY_FROM_VENDOR = 373,
+ SELL_TO_VENDOR = 374,
+ TEAM_SET_OFF_WORLD_FLAG = 383,
+ SET_INVENTORY_SIZE = 389,
+ ACKNOWLEDGE_POSSESSION = 391,
+ SET_SHOOTING_GALLERY_PARAMS = 400,
+ REQUEST_ACTIVITY_START_STOP = 402,
+ REQUEST_ACTIVITY_ENTER = 403,
+ REQUEST_ACTIVITY_EXIT = 404,
+ ACTIVITY_ENTER = 405,
+ ACTIVITY_EXIT = 406,
+ ACTIVITY_START = 407,
+ ACTIVITY_STOP = 408,
+ SHOOTING_GALLERY_CLIENT_AIM_UPDATE = 409,
+ SHOOTING_GALLERY_FIRE = 411,
+ REQUEST_VENDOR_STATUS_UPDATE = 416,
+ VENDOR_STATUS_UPDATE = 417,
+ NOTIFY_CLIENT_SHOOTING_GALLERY_SCORE = 425,
+ CONSUME_CLIENT_ITEM = 427,
+ CLIENT_ITEM_CONSUMED = 428,
+ UPDATE_SHOOTING_GALLERY_ROTATION = 448,
+ SET_FLAG = 471,
+ NOTIFY_CLIENT_FLAG_CHANGE = 472,
+ VENDOR_TRANSACTION_RESULT = 476,
+ HAS_BEEN_COLLECTED = 486,
+ DISPLAY_CHAT_BUBBLE = 495,
+ SPAWN_PET = 498,
+ DESPAWN_PET = 499,
+ PLAYER_LOADED = 505,
+ PLAYER_READY = 509,
+ REQUEST_LINKED_MISSION = 515,
+ INVALID_ZONE_TRANSFER_LIST = 519,
+ MISSION_DIALOGUE_OK = 520,
+ DISPLAY_MESSAGE_BOX = 529,
+ MESSAGE_BOX_RESPOND = 530,
+ CHOICE_BOX_RESPOND = 531,
+ SMASH = 537,
+ UNSMASH = 538,
+ PLACE_MODEL_RESPONSE = 547,
+ SET_SHOOTING_GALLERY_RETICULE_EFFECT = 548,
+ SET_JET_PACK_MODE = 561,
+ REGISTER_PET_ID = 565,
+ REGISTER_PET_DBID = 566,
+ SHOW_ACTIVITY_COUNTDOWN = 568,
+ START_ACTIVITY_TIME = 576,
+ ACTIVITY_PAUSE = 602,
+ USE_NON_EQUIPMENT_ITEM = 603,
+ USE_ITEM_RESULT = 607,
+ COMMAND_PET = 640,
+ PET_RESPONSE = 641,
+ REQUEST_ACTIVITY_SUMMARY_LEADERBOARD_DATA = 648,
+ SEND_ACTIVITY_SUMMARY_LEADERBOARD_DATA = 649,
+ NOTIFY_OBJECT = 656,
+ CLIENT_NOTIFY_PET = 659,
+ NOTIFY_PET = 660,
+ NOTIFY_PET_TAMING_MINIGAME = 661,
+ START_SERVER_PET_MINIGAME_TIMER = 662,
+ CLIENT_EXIT_TAMING_MINIGAME = 663,
+ PET_NAME_CHANGED = 686,
+ PET_TAMING_MINIGAME_RESULT = 667,
+ PET_TAMING_TRY_BUILD_RESULT = 668,
+ NOTIFY_TAMING_BUILD_SUCCESS = 673,
+ NOTIFY_TAMING_MODEL_LOADED_ON_SERVER = 674,
+ ACTIVATE_BUBBLE_BUFF = 678,
+ DEACTIVATE_BUBBLE_BUFF = 679,
+ ADD_PET_TO_PLAYER = 681,
+ REQUEST_SET_PET_NAME = 683,
+ SET_PET_NAME = 684,
+ NOTIFY_PET_TAMING_PUZZLE_SELECTED = 675,
+ SHOW_PET_ACTION_BUTTON = 692,
+ SET_EMOTE_LOCK_STATE = 693,
+ USE_ITEM_REQUIREMENTS_RESPONSE = 703,
+ PLAY_EMBEDDED_EFFECT_ON_ALL_CLIENTS_NEAR_OBJECT = 713,
+ DOWNLOAD_PROPERTY_DATA = 716,
+ QUERY_PROPERTY_DATA = 717,
+ PROPERTY_EDITOR_BEGIN = 724,
+ PROPERTY_EDITOR_END = 725,
+ IS_MINIFIG_IN_A_BUBBLE = 729,
+ START_PATHING = 733,
+ ACTIVATE_BUBBLE_BUFF_FROM_SERVER = 734,
+ DEACTIVATE_BUBBLE_BUFF_FROM_SERVER = 735,
+ NOTIFY_CLIENT_ZONE_OBJECT = 737,
+ UPDATE_REPUTATION = 746,
+ PROPERTY_RENTAL_RESPONSE = 750,
+ REQUEST_PLATFORM_RESYNC = 760,
+ PLATFORM_RESYNC = 761,
+ PLAY_CINEMATIC = 762,
+ END_CINEMATIC = 763,
+ CINEMATIC_UPDATE = 764,
+ TOGGLE_GHOST_REFERENCE_OVERRIDE = 767,
+ SET_GHOST_REFERENCE_POSITION = 768,
+ FIRE_EVENT_SERVER_SIDE = 770,
+ SET_NETWORK_SCRIPT_VAR = 781,
+ UPDATE_MODEL_FROM_CLIENT = 793,
+ DELETE_MODEL_FROM_CLIENT = 794,
+ PLAY_ND_AUDIO_EMITTER = 821,
+ PLAY2_DAMBIENT_SOUND = 831,
+ ENTER_PROPERTY1 = 840,
+ ENTER_PROPERTY2 = 841,
+ PROPERTY_ENTRANCE_SYNC = 842,
+ PROPERTY_SELECT_QUERY = 845,
+ PARSE_CHAT_MESSAGE = 850,
+ BROADCAST_TEXT_TO_CHATBOX = 858,
+ OPEN_PROPERTY_MANAGEMENT = 860,
+ OPEN_PROPERTY_VENDOR = 861,
+ UPDATE_PROPERTY_OR_MODEL_FOR_FILTER_CHECK = 863,
+ CLIENT_TRADE_REQUEST = 868,
+ SERVER_TRADE_REQUEST = 869,
+ SERVER_TRADE_INVITE = 870,
+ CLIENT_TRADE_REPLY = 871,
+ SERVER_TRADE_REPLY = 872,
+ SERVER_TRADE_INITIAL_REPLY = 873,
+ SERVER_TRADE_FINAL_REPLY = 874,
+ CLIENT_TRADE_UPDATE = 875,
+ SERVER_SIDE_TRADE_UPDATE = 876,
+ SERVER_TRADE_UPDATE = 877,
+ CLIENT_TRADE_CANCEL = 878,
+ CLIENT_SIDE_TRADE_CANCEL = 879,
+ CLIENT_TRADE_ACCEPT = 880,
+ SERVER_SIDE_TRADE_ACCEPT = 881,
+ SERVER_SIDE_TRADE_CANCEL = 882,
+ SERVER_TRADE_CANCEL = 883,
+ SERVER_TRADE_ACCEPT = 884,
+ READY_FOR_UPDATES = 888,
+ ORIENT_TO_OBJECT = 905,
+ ORIENT_TO_POSITION = 906,
+ ORIENT_TO_ANGLE = 907,
+ BOUNCER_ACTIVE_STATUS = 942,
+ UN_USE_BBB_MODEL = 999,
+ BBB_LOAD_ITEM_REQUEST = 1000,
+ BBB_SAVE_REQUEST = 1001,
+ BBB_SAVE_RESPONSE = 1006,
+ NOTIFY_CLIENT_OBJECT = 1042,
+ DISPLAY_ZONE_SUMMARY = 1043,
+ ZONE_SUMMARY_DISMISSED = 1044,
+ ACTIVITY_STATE_CHANGE_REQUEST = 1053,
+ MODIFY_PLAYER_ZONE_STATISTIC = 1046,
+ START_BUILDING_WITH_ITEM = 1057,
+ START_ARRANGING_WITH_ITEM = 1061,
+ FINISH_ARRANGING_WITH_ITEM = 1062,
+ DONE_ARRANGING_WITH_ITEM = 1063,
+ SET_BUILD_MODE = 1068,
+ BUILD_MODE_SET = 1069,
+ SET_BUILD_MODE_CONFIRMED = 1073,
+ NOTIFY_CLIENT_FAILED_PRECONDITION = 1081,
+ MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1093,
+ MODULAR_BUILD_BEGIN = 1094,
+ MODULAR_BUILD_END = 1095,
+ MODULAR_BUILD_MOVE_AND_EQUIP = 1096,
+ MODULAR_BUILD_FINISH = 1097,
+ REPORT_BUG = 1198,
+ MISSION_DIALOGUE_CANCELLED = 1129,
+ ECHO_SYNC_SKILL = 1144,
+ SYNC_SKILL = 1145,
+ REQUEST_SERVER_PROJECTILE_IMPACT = 1148,
+ DO_CLIENT_PROJECTILE_IMPACT = 1151,
+ MODULAR_BUILD_CONVERT_MODEL = 1155,
+ SET_PLAYER_ALLOWED_RESPAWN = 1165,
+ UI_MESSAGE_SERVER_TO_SINGLE_CLIENT = 1184,
+ UI_MESSAGE_SERVER_TO_ALL_CLIENTS = 1185,
+ PET_TAMING_TRY_BUILD = 1197,
+ REQUEST_SMASH_PLAYER = 1202,
+ FIRE_EVENT_CLIENT_SIDE = 1213,
+ TOGGLE_GM_INVIS = 1218,
+ CHANGE_OBJECT_WORLD_STATE = 1223,
+ VEHICLE_LOCK_INPUT = 1230,
+ VEHICLE_UNLOCK_INPUT = 1231,
+ RACING_RESET_PLAYER_TO_LAST_RESET = 1252,
+ RACING_SERVER_SET_PLAYER_LAP_AND_PLANE = 1253,
+ RACING_SET_PLAYER_RESET_INFO = 1254,
+ RACING_PLAYER_INFO_RESET_FINISHED = 1255,
+ LOCK_NODE_ROTATION = 1260,
+ VEHICLE_SET_WHEEL_LOCK_STATE = 1273,
+ NOTIFY_VEHICLE_OF_RACING_OBJECT = 1276,
+ SET_NAME_BILLBOARD_STATE = 1284,
+ PLAYER_REACHED_RESPAWN_CHECKPOINT = 1296,
+ HANDLE_UGC_EQUIP_POST_DELETE_BASED_ON_EDIT_MODE = 1300,
+ HANDLE_UGC_EQUIP_PRE_CREATE_BASED_ON_EDIT_MODE = 1301,
+ PROPERTY_CONTENTS_FROM_CLIENT = 1305,
+ GET_MODELS_ON_PROPERTY = 1306,
+ MATCH_REQUEST = 1308,
+ MATCH_RESPONSE = 1309,
+ MATCH_UPDATE = 1310,
+ MODULE_ASSEMBLY_DB_DATA_FOR_CLIENT = 1131,
+ MODULE_ASSEMBLY_QUERY_DATA = 1132,
+ SHOW_BILLBOARD_INTERACT_ICON = 1337,
+ CHANGE_IDLE_FLAGS = 1338,
+ VEHICLE_ADD_PASSIVE_BOOST_ACTION = 1340,
+ VEHICLE_REMOVE_PASSIVE_BOOST_ACTION = 1341,
+ VEHICLE_NOTIFY_SERVER_ADD_PASSIVE_BOOST_ACTION = 1342,
+ VEHICLE_NOTIFY_SERVER_REMOVE_PASSIVE_BOOST_ACTION = 1343,
+ VEHICLE_ADD_SLOWDOWN_ACTION = 1344,
+ VEHICLE_REMOVE_SLOWDOWN_ACTION = 1345,
+ VEHICLE_NOTIFY_SERVER_ADD_SLOWDOWN_ACTION = 1346,
+ VEHICLE_NOTIFY_SERVER_REMOVE_SLOWDOWN_ACTION = 1347,
+ BUYBACK_FROM_VENDOR = 1350,
+ SET_PROPERTY_ACCESS = 1366,
+ ZONE_PROPERTY_MODEL_PLACED = 1369,
+ ZONE_PROPERTY_MODEL_ROTATED = 1370,
+ ZONE_PROPERTY_MODEL_REMOVED_WHILE_EQUIPPED = 1371,
+ ZONE_PROPERTY_MODEL_EQUIPPED = 1372,
+ ZONE_PROPERTY_MODEL_PICKED_UP = 1373,
+ ZONE_PROPERTY_MODEL_REMOVED = 1374,
+ NOTIFY_RACING_CLIENT = 1390,
+ RACING_PLAYER_HACK_CAR = 1391,
+ RACING_PLAYER_LOADED = 1392,
+ RACING_CLIENT_READY = 1393,
+ UPDATE_CHAT_MODE = 1395,
+ VEHICLE_NOTIFY_FINISHED_RACE = 1396,
+ SET_CONSUMABLE_ITEM = 1409,
+ SET_STATUS_IMMUNITY = 1435,
+ SET_PET_NAME_MODERATED = 1448,
+ MODIFY_LEGO_SCORE = 1459,
+ RESTORE_TO_POST_LOAD_STATS = 1468,
+ SET_RAIL_MOVEMENT = 1471,
+ START_RAIL_MOVEMENT = 1472,
+ CANCEL_RAIL_MOVEMENT = 1474,
+ CLIENT_RAIL_MOVEMENT_READY = 1476,
+ PLAYER_RAIL_ARRIVED_NOTIFICATION = 1477,
+ UPDATE_PLAYER_STATISTIC = 1481,
+ MODULAR_ASSEMBLY_NIF_COMPLETED = 1498,
+ NOTIFY_NOT_ENOUGH_INV_SPACE = 1516,
+ TEAM_SET_LEADER = 1557,
+ TEAM_INVITE_CONFIRM = 1558,
+ TEAM_GET_STATUS_RESPONSE = 1559,
+ TEAM_ADD_PLAYER = 1562,
+ TEAM_REMOVE_PLAYER = 1563,
+ START_CELEBRATION_EFFECT = 1618,
+ ADD_BUFF = 1647,
+ SERVER_DONE_LOADING_ALL_OBJECTS = 1642,
+ PLACE_PROPERTY_MODEL = 1170,
+ VEHICLE_NOTIFY_HIT_IMAGINATION_SERVER = 1606,
+ ADD_RUN_SPEED_MODIFIER = 1505,
+ HANDLE_HOT_PROPERTY_DATA = 1511,
+ SEND_HOT_PROPERTY_DATA = 1510,
+ REMOVE_RUN_SPEED_MODIFIER = 1506,
+ UPDATE_PROPERTY_PERFORMANCE_COST = 1547,
+ PROPERTY_ENTRANCE_BEGIN = 1553,
+ SET_RESURRECT_RESTORE_VALUES = 1591,
+ VEHICLE_STOP_BOOST = 1617,
+ REMOVE_BUFF = 1648,
+ REQUEST_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1666,
+ RESPONSE_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1667,
+ PLAYER_SET_CAMERA_CYCLING_MODE = 1676,
+ SET_MOUNT_INVENTORY_ID = 1726,
+ NOTIFY_SERVER_LEVEL_PROCESSING_COMPLETE = 1734,
+ NOTIFY_LEVEL_REWARDS = 1735,
+ DISMOUNT_COMPLETE = 1756,
+ MARK_INVENTORY_ITEM_AS_ACTIVE = 1767,
+ END
+};
+
+#endif //!__EGAMEMESSAGETYPE__H__
diff --git a/dCommon/dEnums/eKillType.h b/dCommon/dEnums/eKillType.h
new file mode 100644
index 00000000..fe3908c8
--- /dev/null
+++ b/dCommon/dEnums/eKillType.h
@@ -0,0 +1,11 @@
+#ifndef __EKILLTYPE__H__
+#define __EKILLTYPE__H__
+
+#include
+
+enum class eKillType : uint32_t {
+ VIOLENT,
+ SILENT
+};
+
+#endif //!__EKILLTYPE__H__
diff --git a/dCommon/dEnums/eLoginResponse.h b/dCommon/dEnums/eLoginResponse.h
new file mode 100644
index 00000000..01bba3d5
--- /dev/null
+++ b/dCommon/dEnums/eLoginResponse.h
@@ -0,0 +1,24 @@
+#ifndef __ELOGINRESPONSE__H__
+#define __ELOGINRESPONSE__H__
+
+#include
+
+enum class eLoginResponse : uint8_t {
+ GENERAL_FAILED = 0,
+ SUCCESS,
+ BANNED,
+ // Unused 3
+ // Unused 4
+ PERMISSIONS_NOT_HIGH_ENOUGH = 5,
+ INVALID_USER,
+ ACCOUNT_LOCKED,
+ WRONG_PASS,
+ ACCOUNT_ACTIVATION_PENDING,
+ ACCOUNT_DISABLED,
+ GAME_TIME_EXPIRED,
+ FREE_TRIAL_ENDED,
+ PLAY_SCHEDULE_TIME_UP,
+ ACCOUNT_NOT_ACTIVATED
+};
+
+#endif //!__ELOGINRESPONSE__H__
diff --git a/dCommon/dEnums/eLootSourceType.h b/dCommon/dEnums/eLootSourceType.h
new file mode 100644
index 00000000..b8ecca4a
--- /dev/null
+++ b/dCommon/dEnums/eLootSourceType.h
@@ -0,0 +1,31 @@
+#ifndef __ELOOTSOURCETYPE__H__
+#define __ELOOTSOURCETYPE__H__
+
+#include
+
+enum class eLootSourceType : uint32_t {
+ NONE = 0,
+ CHEST,
+ MISSION,
+ MAIL,
+ CURRENCY,
+ ACHIEVEMENT,
+ TRADE,
+ QUICKBUILD,
+ DELETION,
+ VENDOR,
+ ACTIVITY,
+ PICKUP,
+ BRICK,
+ PROPERTY,
+ MODERATION,
+ EXHIBIT,
+ INVENTORY,
+ CLAIMCODE,
+ CONSUMPTION,
+ CRAFTING,
+ LEVEL_REWARD,
+ RELOCATE
+};
+
+#endif //!__ELOOTSOURCETYPE__H__
diff --git a/dCommon/dEnums/eMasterMessageType.h b/dCommon/dEnums/eMasterMessageType.h
new file mode 100644
index 00000000..5c867d70
--- /dev/null
+++ b/dCommon/dEnums/eMasterMessageType.h
@@ -0,0 +1,36 @@
+#ifndef __EMASTERMESSAGETYPE__H__
+#define __EMASTERMESSAGETYPE__H__
+
+#include
+
+enum class eMasterMessageType : uint32_t {
+ REQUEST_PERSISTENT_ID = 1,
+ REQUEST_PERSISTENT_ID_RESPONSE,
+ REQUEST_ZONE_TRANSFER,
+ REQUEST_ZONE_TRANSFER_RESPONSE,
+ SERVER_INFO,
+ REQUEST_SESSION_KEY,
+ SET_SESSION_KEY,
+ SESSION_KEY_RESPONSE,
+ PLAYER_ADDED,
+ PLAYER_REMOVED,
+
+ CREATE_PRIVATE_ZONE,
+ REQUEST_PRIVATE_ZONE,
+
+ WORLD_READY,
+ PREP_ZONE,
+
+ SHUTDOWN,
+ SHUTDOWN_RESPONSE,
+ SHUTDOWN_IMMEDIATE,
+
+ SHUTDOWN_UNIVERSE,
+
+ AFFIRM_TRANSFER_REQUEST,
+ AFFIRM_TRANSFER_RESPONSE,
+
+ NEW_SESSION_ALERT
+};
+
+#endif //!__EMASTERMESSAGETYPE__H__
diff --git a/dCommon/dEnums/eMatchUpdate.h b/dCommon/dEnums/eMatchUpdate.h
new file mode 100644
index 00000000..a42eecd3
--- /dev/null
+++ b/dCommon/dEnums/eMatchUpdate.h
@@ -0,0 +1,17 @@
+#ifndef __EMATCHUPDATE__H__
+#define __EMATCHUPDATE__H__
+
+#include
+
+enum class eMatchUpdate : int32_t {
+ PLAYER_ADDED = 0,
+ PLAYER_REMOVED,
+ PHASE_CREATED,
+ PHASE_WAIT_READY,
+ PHASE_WAIT_START,
+ PLAYER_READY,
+ PLAYER_NOT_READY,
+ PLAYER_UPDATE
+};
+
+#endif //!__EMATCHUPDATE__H__
diff --git a/dCommon/dEnums/eObjectBits.h b/dCommon/dEnums/eObjectBits.h
new file mode 100644
index 00000000..b978aad6
--- /dev/null
+++ b/dCommon/dEnums/eObjectBits.h
@@ -0,0 +1,13 @@
+#ifndef __EOBJECTBITS__H__
+#define __EOBJECTBITS__H__
+
+#include
+
+enum class eObjectBits : size_t {
+ PERSISTENT = 32,
+ CLIENT = 46,
+ SPAWNED = 58,
+ CHARACTER = 60
+};
+
+#endif //!__EOBJECTBITS__H__
diff --git a/dCommon/dEnums/eObjectWorldState.h b/dCommon/dEnums/eObjectWorldState.h
new file mode 100644
index 00000000..9735a072
--- /dev/null
+++ b/dCommon/dEnums/eObjectWorldState.h
@@ -0,0 +1,12 @@
+#ifndef __EOBJECTWORLDSTATE__H__
+#define __EOBJECTWORLDSTATE__H__
+
+#include
+
+enum class eObjectWorldState : uint32_t {
+ INWORLD,
+ ATTACHED,
+ INVENTORY
+};
+
+#endif //!__EOBJECTWORLDSTATE__H__
diff --git a/dCommon/dEnums/ePetTamingNotifyType.h b/dCommon/dEnums/ePetTamingNotifyType.h
new file mode 100644
index 00000000..564e932f
--- /dev/null
+++ b/dCommon/dEnums/ePetTamingNotifyType.h
@@ -0,0 +1,15 @@
+#ifndef __EPETTAMINGNOTIFYTYPE__H__
+#define __EPETTAMINGNOTIFYTYPE__H__
+
+#include
+
+enum class ePetTamingNotifyType : uint32_t {
+ SUCCESS,
+ QUIT,
+ FAILED,
+ BEGIN,
+ READY,
+ NAMINGPET
+};
+
+#endif //!__EPETTAMINGNOTIFYTYPE__H__
diff --git a/dCommon/dEnums/ePlayerFlag.h b/dCommon/dEnums/ePlayerFlag.h
new file mode 100644
index 00000000..fefdfb67
--- /dev/null
+++ b/dCommon/dEnums/ePlayerFlag.h
@@ -0,0 +1,172 @@
+#ifndef __EPLAYERFLAG__H__
+#define __EPLAYERFLAG__H__
+
+#include
+
+enum ePlayerFlag : int32_t {
+ BTARR_TESTING = 0,
+ PLAYER_HAS_ENTERED_PET_RANCH = 1,
+ MINIMAP_UNLOCKED = 2,
+ ACTIVITY_REBUILDING_FAIL_TIME = 3,
+ ACTIVITY_REBUILDING_FAIL_RANGE = 4,
+ ACTIVITY_SHOOTING_GALLERY_HELP = 5,
+ HELP_WALKING_CONTROLS = 6,
+ FIRST_SMASHABLE = 7,
+ FIRST_IMAGINATION_PICKUP = 8,
+ FIRST_DAMAGE = 9,
+ FIRST_ITEM = 10,
+ FIRST_BRICK = 11,
+ FIRST_CONSUMABLE = 12,
+ FIRST_EQUIPPABLE = 13,
+ CHAT_HELP = 14,
+ FIRST_PET_TAMING_MINIGAME = 15,
+ FIRST_PET_ON_SWITCH = 16,
+ FIRST_PET_JUMPED_ON_SWITCH = 17,
+ FIRST_PET_FOUND_TREASURE = 18,
+ FIRST_PET_DUG_TREASURE = 19,
+ FIRST_PET_OWNER_ON_PET_BOUNCER = 20,
+ FIRST_PET_DESPAWN_NO_IMAGINATION = 21,
+ FIRST_PET_SELECTED_ENOUGH_BRICKS = 22,
+ FIRST_EMOTE_UNLOCKED = 23,
+ GF_PIRATE_REP = 24,
+ AG_BOB_CINEMATIC_EVENT = 25,
+ HELP_JUMPING_CONTROLS = 26,
+ HELP_DOUBLE_JUMP_CONTROLS = 27,
+ HELP_CAMERA_CONTROLS = 28,
+ HELP_ROTATE_CONTROLS = 29,
+ HELP_SMASH = 30,
+ MONUMENT_INTRO_MUSIC_PLAYED = 31,
+ BEGINNING_ZONE_SUMMARY_DISPLAYED = 32,
+ AG_FINISH_LINE_BUILT = 33,
+ AG_BOSS_AREA_FOUND = 34,
+ AG_LANDED_IN_BATTLEFIELD = 35,
+ GF_PLAYER_HAS_BEEN_TO_THE_RAVINE = 36,
+ MODULAR_BUILD_STARTED = 37,
+ MODULAR_BUILD_FINISHED_CLICK_BUTTON = 38,
+ THINKING_HAT_RECEIVED_GO_TO_MODULAR_BUILD_AREA = 39,
+ BUILD_AREA_ENTERED_MOD_NOT_ACTIVATED_PUT_ON_HAT = 40,
+ HAT_ON_INSIDE_OF_MOD_BUILD_EQUIP_A_MODULE_FROM_LEG = 41,
+ MODULE_EQUIPPED_PLACE_ON_GLOWING_BLUE_SPOT = 42,
+ FIRST_MODULE_PLACED_CORRECTLY_NOW_DO_THE_REST = 43,
+ ROCKET_COMPLETE_NOW_LAUNCH_FROM_PAD = 44,
+ JOINED_A_FACTION = 45,
+ VENTURE_FACTION = 46,
+ ASSEMBLY_FACTION = 47,
+ PARADOX_FACTION = 48,
+ SENTINEL_FACTION = 49,
+ LUP_WORLD_ACCESS = 50,
+ AG_FIRST_FLAG_COLLECTED = 51,
+ TOOLTIP_TALK_TO_SKYLAND_TO_GET_HAT = 52,
+ MODULAR_BUILD_PLAYER_PLACES_FIRST_MODEL_IN_SCRATCH = 53,
+ MODULAR_BUILD_FIRST_ARROW_DISPLAY_FOR_MODULE = 54,
+ AG_BEACON_QB_SO_THE_PLAYER_CAN_ALWAYS_BUILD_THEM = 55,
+ GF_PET_DIG_FLAG_1 = 56,
+ GF_PET_DIG_FLAG_2 = 57,
+ GF_PET_DIG_FLAG_3 = 58,
+ SUPPRESS_SPACESHIP_CINEMATIC_FLYTHROUGH = 59,
+ GF_PLAYER_FALL_DEATH = 60,
+ GF_PLAYER_CAN_GET_FLAG_1 = 61,
+ GF_PLAYER_CAN_GET_FLAG_2 = 62,
+ GF_PLAYER_CAN_GET_FLAG_3 = 63,
+ ENTER_BBB_FROM_PROPERTY_EDIT_CONFIRMATION_DIALOG = 64,
+ AG_FIRST_COMBAT_COMPLETE = 65,
+ AG_COMPLETE_BOB_MISSION = 66,
+ FIRST_MANUAL_PET_HIBERNATE = 69,
+ CAGED_SPIDER = 74,
+ IS_NEWS_SCREEN_VISIBLE = 114,
+ NJ_GARMADON_CINEMATIC_SEEN = 125,
+ EQUPPED_TRIAL_FACTION_GEAR = 126,
+ ELEPHANT_PET_3050 = 801,
+ CAT_PET_3054 = 803,
+ TRICERATOPS_PET_3195 = 806,
+ TERRIER_PET_3254 = 807,
+ SKUNK_PET_3261 = 811,
+ BUNNY_PET_3672 = 813,
+ CROCODILE_PET_3994 = 814,
+ DOBERMAN_PET_5635 = 815,
+ BUFFALO_PET_5636 = 816,
+ ROBOT_DOG_PET_5637 = 818,
+ RED_DRAGON_PET_5639 = 819,
+ TORTOISE_PET_5640 = 820,
+ GREEN_DRAGON_PET_5641 = 821,
+ PANDA_PET_5643 = 822,
+ MANTIS_PET_5642 = 823,
+ WARTHOG_PET_6720 = 824,
+ LION_PET_3520 = 825,
+ GOAT_PET_7638 = 818,
+ CRAB_PET_7694 = 827,
+ REINDEER_PET_12294 = 829,
+ STEGOSAURUS_PET_12431 = 830,
+ SABER_CAT_PET_12432 = 831,
+ GRYPHON_PET_12433 = 832,
+ ALINE_PET_12334 = 833,
+ UNKNOWN_PET = 834,
+ EARTH_DRAGON_PET_16210 = 836,
+ SKELETON_DRAGON_PET_13067 = 838,
+ AG_SPACE_SHIP_BINOC_AT_LAUNCH = 1001,
+ AG_SPACE_SHIP_BINOC_AT_LAUNCH_PLATFORM = 1002,
+ AG_SPACE_SHIP_BINOC_ON_PLATFORM_TO_LEFT_OF_START = 1003,
+ AG_SPACE_SHIP_BINOC_ON_PLATFORM_TO_RIGHT_OF_START = 1004,
+ AG_SPACE_SHIP_BINOC_AT_BOB = 1005,
+ AG_BATTLE_BINOC_FOR_TRICERETOPS = 1101,
+ AG_BATTLE_BINOC_AT_PARADOX = 1102,
+ AG_BATTLE_BINOC_AT_MISSION_GIVER = 1103,
+ AG_BATTLE_BINOC_AT_BECK = 1104,
+ AG_MONUMENT_BINOC_INTRO = 1105,
+ AG_MONUMENT_BINOC_OUTRO = 1106,
+ AG_LAUNCH_BINOC_INTRO = 1107,
+ AG_LAUNCH_BINOC_BISON = 1108,
+ AG_LAUNCH_BINOC_SHARK = 1109,
+ NS_BINOC_CONCERT_TRANSITION = 1201,
+ NS_BINOC_RACE_PLACE_TRANSITION = 1202,
+ NS_BINOC_BRICK_ANNEX_TRANSITION = 1203,
+ NS_BINOC_GF_LAUNCH = 1204,
+ NS_BINOC_FV_LAUNCH = 1205,
+ NS_BINOC_BRICK_ANNEX_WATER = 1206,
+ NS_BINOC_AG_LAUNCH_AT_RACE_PLACE = 1207,
+ NS_BINOC_AG_LAUNCH_AT_BRICK_ANNEX = 1208,
+ NS_BINOC_AG_LAUNCH_AT_PLAZA = 1209,
+ NS_BINOC_TBA = 1210,
+ NS_FLAG_COLLECTABLE_1_BY_JONNY_THUNDER = 1211,
+ NS_FLAG_COLLECTABLE_2_UNDER_CONCERT_BRIDGE = 1212,
+ NS_FLAG_COLLECTABLE_3_BY_FV_LAUNCH = 1213,
+ NS_FLAG_COLLECTABLE_4_IN_PLAZA_BEHIND_BUILDING = 1214,
+ NS_FLAG_COLLECTABLE_5_BY_GF_LAUNCH = 1215,
+ NS_FLAG_COLLECTABLE_6_BY_DUCK_SG = 1216,
+ NS_FLAG_COLLECTABLE_7_BY_LUP_LAUNCH = 1217,
+ NS_FLAG_COLLECTABLE_8_BY_NT_LUANCH = 1218,
+ NS_FLAG_COLLECTABLE_9_BY_RACE_BUILD = 1219,
+ NS_FLAG_COLLECTABLE_10_ON_AG_LAUNCH_PATH = 1220,
+ PR_BINOC_AT_LAUNCH_PAD = 1251,
+ PR_BINOC_AT_BEGINNING_OF_ISLAND_B = 1252,
+ PR_BINOC_AT_FIRST_PET_BOUNCER = 1253,
+ PR_BINOC_ON_BY_CROWS_NEST = 1254,
+ PR_PET_DIG_AT_BEGINNING_OF_ISLAND_B = 1261,
+ PR_PET_DIG_AT_THE_LOCATION_OF_OLD_BOUNCE_BACK = 1262,
+ PR_PET_DIG_UNDER_QB_BRIDGE = 1263,
+ PR_PET_DIG_BACK_SIDE_BY_PARTNER_BOUNCE = 1264,
+ PR_PET_DIG_BY_LAUNCH_PAD = 1265,
+ PR_PET_DIG_BY_FIRST_PET_BOUNCER = 1266,
+ GF_BINOC_ON_LANDING_PAD = 1301,
+ GF_BINOC_AT_RAVINE_START = 1302,
+ GF_BINOC_ON_TOP_OF_RAVINE_HEAD = 1303,
+ GF_BINOC_AT_TURTLE_AREA = 1304,
+ GF_BINOC_IN_TUNNEL_TO_ELEPHANTS = 1305,
+ GF_BINOC_IN_ELEPHANTS_AREA = 1306,
+ GF_BINOC_IN_RACING_AREA = 1307,
+ GF_BINOC_IN_CROC_AREA = 1308,
+ GF_BINOC_IN_JAIL_AREA = 1309,
+ GF_BINOC_TELESCOPE_NEXT_TO_CAPTAIN_JACK = 1310,
+ NT_HEART_OF_DARKNESS = 1911,
+ NT_PLINTH_REBUILD = 1919,
+ NT_FACTION_SPY_DUKE = 1974,
+ NT_FACTION_SPY_OVERBUILD = 1976,
+ NT_FACTION_SPY_HAEL = 1977,
+ NJ_EARTH_SPINJITZU = 2030,
+ NJ_LIGHTNING_SPINJITZU = 2031,
+ NJ_ICE_SPINJITZU = 2032,
+ NJ_FIRE_SPINJITZU = 2033,
+ NJ_WU_SHOW_DAILY_CHEST = 2099
+};
+
+#endif //!__EPLAYERFLAG__H__
diff --git a/dCommon/dEnums/eQuickBuildFailReason.h b/dCommon/dEnums/eQuickBuildFailReason.h
new file mode 100644
index 00000000..a6144bd5
--- /dev/null
+++ b/dCommon/dEnums/eQuickBuildFailReason.h
@@ -0,0 +1,13 @@
+#ifndef __EQUICKBUILDFAILREASON__H__
+#define __EQUICKBUILDFAILREASON__H__
+
+#include
+
+enum class eQuickBuildFailReason : uint32_t {
+ NOT_GIVEN,
+ OUT_OF_IMAGINATION,
+ CANCELED_EARLY,
+ BUILD_ENDED
+};
+
+#endif //!__EQUICKBUILDFAILREASON__H__
diff --git a/dCommon/dEnums/eRebuildState.h b/dCommon/dEnums/eRebuildState.h
new file mode 100644
index 00000000..497bcb77
--- /dev/null
+++ b/dCommon/dEnums/eRebuildState.h
@@ -0,0 +1,15 @@
+#ifndef __EREBUILDSTATE__H__
+#define __EREBUILDSTATE__H__
+
+#include
+
+enum class eRebuildState : uint32_t {
+ OPEN,
+ COMPLETED = 2,
+ RESETTING = 4,
+ BUILDING,
+ INCOMPLETE
+};
+
+
+#endif //!__EREBUILDSTATE__H__
diff --git a/dCommon/dEnums/eRenameResponse.h b/dCommon/dEnums/eRenameResponse.h
new file mode 100644
index 00000000..2298e922
--- /dev/null
+++ b/dCommon/dEnums/eRenameResponse.h
@@ -0,0 +1,15 @@
+#ifndef __ERENAMERESPONSE__H__
+#define __ERENAMERESPONSE__H__
+
+#include
+
+//! An enum for character rename responses
+enum class eRenameResponse : uint8_t {
+ SUCCESS = 0,
+ UNKNOWN_ERROR,
+ NAME_UNAVAILABLE,
+ NAME_IN_USE
+};
+
+
+#endif //!__ERENAMERESPONSE__H__
diff --git a/dCommon/dEnums/eReplicaComponentType.h b/dCommon/dEnums/eReplicaComponentType.h
index 3eee16f3..2d24c19e 100644
--- a/dCommon/dEnums/eReplicaComponentType.h
+++ b/dCommon/dEnums/eReplicaComponentType.h
@@ -107,7 +107,7 @@ enum class eReplicaComponentType : uint32_t {
DONATION_VENDOR,
COMBAT_MEDIATOR,
COMMENDATION_VENDOR,
- UNKNOWN_103,
+ GATE_RUSH_CONTROL,
RAIL_ACTIVATOR,
ROLLER,
PLAYER_FORCED_MOVEMENT,
@@ -119,7 +119,7 @@ enum class eReplicaComponentType : uint32_t {
UNKNOWN_112,
PROPERTY_PLAQUE,
BUILD_BORDER,
- UNKOWN_115,
+ UNKNOWN_115,
CULLING_PLANE,
DESTROYABLE = 1000 // Actually 7
};
diff --git a/dCommon/dEnums/eReplicaPacketType.h b/dCommon/dEnums/eReplicaPacketType.h
new file mode 100644
index 00000000..2650fb30
--- /dev/null
+++ b/dCommon/dEnums/eReplicaPacketType.h
@@ -0,0 +1,12 @@
+#ifndef __EREPLICAPACKETTYPE__H__
+#define __EREPLICAPACKETTYPE__H__
+
+#include
+
+enum class eReplicaPacketType : uint8_t {
+ CONSTRUCTION,
+ SERIALIZATION,
+ DESTRUCTION
+};
+
+#endif //!__EREPLICAPACKETTYPE__H__
diff --git a/dCommon/dEnums/eServerMessageType.h b/dCommon/dEnums/eServerMessageType.h
new file mode 100644
index 00000000..7f211ffb
--- /dev/null
+++ b/dCommon/dEnums/eServerMessageType.h
@@ -0,0 +1,12 @@
+#ifndef __ESERVERMESSAGETYPE__H__
+#define __ESERVERMESSAGETYPE__H__
+
+#include