diff --git a/dGame/dGameMessages/EffectsMessages.cpp b/dGame/dGameMessages/EffectsMessages.cpp index 17fbbbd68..1a2392230 100644 --- a/dGame/dGameMessages/EffectsMessages.cpp +++ b/dGame/dGameMessages/EffectsMessages.cpp @@ -513,6 +513,31 @@ namespace GameMessages { bitStream.Write(text); } + bool DisplayTooltip::Deserialize(RakNet::BitStream& bitStream) { + VALIDATE_READ(bitStream.Read(doOrDie)); + VALIDATE_READ(bitStream.Read(noRepeat)); + VALIDATE_READ(bitStream.Read(noRevive)); + VALIDATE_READ(bitStream.Read(isPropertyTooltip)); + VALIDATE_READ(bitStream.Read(show)); + VALIDATE_READ(bitStream.Read(translate)); + VALIDATE_READ(bitStream.Read(time)); + VALIDATE_READ(BitStreamUtils::ReadLengthPrefixed(bitStream, id)); + // The parameters are "key=type:value" lines, followed by a null terminator when there are any + std::u16string params; + VALIDATE_READ(BitStreamUtils::ReadLengthPrefixed(bitStream, params)); + if (!params.empty()) { + uint16_t terminator{}; + VALIDATE_READ(bitStream.Read(terminator)); + } + localizeParams.values.clear(); + for (const auto& line : GeneralUtils::SplitString(GeneralUtils::UTF16ToWTF8(params), '\n')) { + if (!line.empty()) localizeParams.ParseInsert(line); + } + VALIDATE_READ(BitStreamUtils::ReadLengthPrefixed(bitStream, imageName)); + VALIDATE_READ(BitStreamUtils::ReadLengthPrefixed(bitStream, text)); + return true; + } + void EmotePlayed::Serialize(RakNet::BitStream& stream) const { stream.Write(emoteID); stream.Write(targetID); diff --git a/dGame/dGameMessages/EffectsMessages.h b/dGame/dGameMessages/EffectsMessages.h index b6cace93d..382c39433 100644 --- a/dGame/dGameMessages/EffectsMessages.h +++ b/dGame/dGameMessages/EffectsMessages.h @@ -337,6 +337,7 @@ namespace GameMessages { std::u16string imageName{}; std::u16string text{}; void Serialize(RakNet::BitStream& bitStream) const override; + bool Deserialize(RakNet::BitStream& bitStream) override; }; struct EmotePlayed : public NetGameMsg { diff --git a/dGame/dGameMessages/GameMessageDecoder.cpp b/dGame/dGameMessages/GameMessageDecoder.cpp index 1f8e2f3e0..92c56ecd8 100644 --- a/dGame/dGameMessages/GameMessageDecoder.cpp +++ b/dGame/dGameMessages/GameMessageDecoder.cpp @@ -1,99 +1,186 @@ #include "GameMessageDecoder.h" -#include #include +#include #include +#include +#include #include +#include +#include "Amf3.h" #include "GameMessages.h" #include "GameMessageHandler.h" +#include "GeneralUtils.h" +#include "LDFFormat.h" +#include "magic_enum.hpp" +#include "PacketJson.h" + #include "ActivityMessages.h" +#include "BuildingMessages.h" +#include "CombatMessages.h" +#include "EffectsMessages.h" #include "InventoryMessages.h" +#include "MissionMessages.h" +#include "MovementMessages.h" #include "ObjectMessages.h" +#include "PetMessages.h" +#include "PlayerMessages.h" +#include "PropertyMessages.h" +#include "QuickBuildMessages.h" +#include "RacingMessages.h" #include "SkillMessages.h" -#include "master/MessageCapture.h" +#include "TradeMessages.h" +#include "VendorMessages.h" +#include "ZoneMessages.h" + +// Enums the message structs only forward declare +#include "BaseCombatAIComponent.h" // AiState +#include "BehaviorSlot.h" +#include "eAnimationFlags.h" +#include "eCinematicEvent.h" +#include "eControlScheme.h" +#include "eHelpType.h" +#include "eInventoryType.h" +#include "eKillType.h" +#include "eMatchUpdate.h" +#include "eMissionLockState.h" +#include "eMissionState.h" +#include "eObjectWorldState.h" +#include "ePetAbilityType.h" +#include "ePetTamingNotifyType.h" +#include "eQuickBuildFailReason.h" +#include "eQuickBuildState.h" +#include "eRacingClientNotificationType.h" +#include "eReponseMoveItemBetweenInventoryTypeCode.h" +#include "eStateChangeType.h" +#include "eTerminateType.h" +#include "eUnequippableActiveType.h" +#include "eUseItemResponse.h" +#include "eVendorTransactionResult.h" namespace { using json = nlohmann::json; - using Decoder = std::function(RakNet::BitStream&)>; - // Object IDs as strings: they don't fit in a JavaScript number - std::string Id(LWOOBJID id) { return std::to_string(id); } - json Point(const NiPoint3& point) { return json::array({ point.x, point.y, point.z }); } - json Rotation(const NiQuaternion& rotation) { return json::array({ rotation.x, rotation.y, rotation.z, rotation.w }); } - // A skill's behavior data, which is its own bit stream - json Bytes(const std::string& bytes) { return MessageCapture::ToHex(bytes); } + // How a member becomes JSON (PacketJson.h, and the game's own types here). Every member type of a message struct + // needs one: the build fails otherwise. + using PacketJson::ToJson; + using PacketJson::Hex; - // Reads T with its Deserialize, then lists its fields with `fields` - template - Decoder Make(std::function fields) { - return [fields](RakNet::BitStream& stream) -> std::optional { - T message; - if (!message.Deserialize(stream)) return std::nullopt; + json ToJson(const Brick& brick) { return json{ {"designerID", brick.designerID}, {"materialID", brick.materialID} }; } + + json ToJson(const AMFBaseValue* value) { + if (!value) return nullptr; + switch (value->GetValueType()) { + case eAmf::Null: + case eAmf::Undefined: return nullptr; + case eAmf::True: return true; + case eAmf::False: return false; + case eAmf::Integer: return static_cast(value)->GetValue(); + case eAmf::Double: return static_cast(value)->GetValue(); + case eAmf::String: return static_cast(value)->GetValue(); + case eAmf::Array: { + const auto* array = static_cast(value); json out = json::object(); - fields(message, out); + for (const auto& [key, item] : array->GetAssociative()) out[key] = ToJson(item.get()); + if (!array->GetDense().empty()) { + json dense = json::array(); + for (const auto& item : array->GetDense()) dense.push_back(ToJson(item.get())); + out["[]"] = dense; + } return out; - }; + } + default: return "(AMF type " + std::to_string(static_cast(value->GetValueType())) + ")"; + } + } + json ToJson(const AMFArrayValue& value) { return ToJson(static_cast(&value)); } + json ToJson(const std::unique_ptr& value) { return ToJson(static_cast(value.get())); } + + template json ToJson(const std::optional& value); + template json ToJson(const std::vector& values); + template json ToJson(const std::pair& value); + + enum class eDirection { TO_SERVER, TO_CLIENT }; + + struct Read { + std::optional fields; + uint32_t unreadBits{}; + }; + using Reader = Read(*)(RakNet::BitStream&); + + struct Entry { + MessageType::Game id; + eDirection direction; + const char* structName; + Reader read; + }; + + template Read ReadWith(RakNet::BitStream& stream); + +#include "GameMessageFields.inc" + + template json ToJson(const std::optional& value) { return value ? ToJson(*value) : json(nullptr); } + template json ToJson(const std::vector& values) { + if constexpr (std::is_same_v) { + return json{ {"hex", Hex(std::string(values.begin(), values.end()))} }; + } else { + json out = json::array(); + for (const auto& value : values) out.push_back(ToJson(value)); + return out; + } + } + template json ToJson(const std::pair& value) { return json::array({ ToJson(value.first), ToJson(value.second) }); } + + // Reads the message with its own Deserialize and lists its members + template Read ReadWith(RakNet::BitStream& stream) { + T message; + if (!message.Deserialize(stream)) return {}; + return { ToJson(message), stream.GetNumberOfUnreadBits() }; } - // (to server, message ID) -> decoder - const std::map, Decoder>& Decoders() { - using namespace GameMessages; - using enum MessageType::Game; - static const std::map, Decoder> decoders{ - // Sent by the client - { { true, REQUEST_USE }, Make([](const RequestUse& m, json& j) { - j = { {"bIsMultiInteractUse", m.bIsMultiInteractUse}, {"multiInteractID", m.multiInteractID}, - {"multiInteractType", m.multiInteractType}, {"object", Id(m.object)}, {"secondary", m.secondary} }; - }) }, - { { true, REQUEST_SERVER_OBJECT_INFO }, Make([](const RequestServerObjectInfo& m, json& j) { - j = { {"bVerbose", m.bVerbose}, {"clientId", Id(m.clientId)}, {"targetForReport", Id(m.targetForReport)} }; - }) }, - { { true, SHOOTING_GALLERY_FIRE }, Make([](const ShootingGalleryFire& m, json& j) { - j = { {"target", Point(m.target)}, {"rotation", Rotation(m.rotation)} }; - }) }, - { { true, PICKUP_ITEM }, Make([](const PickupItem& m, json& j) { - j = { {"lootID", Id(m.lootID)}, {"lootOwnerID", Id(m.lootOwnerID)} }; - }) }, - { { true, START_SKILL }, Make([](const StartSkill& m, json& j) { - j = { {"bUsedMouse", m.bUsedMouse}, {"consumableItemID", Id(m.consumableItemID)}, {"fCasterLatency", m.fCasterLatency}, - {"iCastType", m.iCastType}, {"lastClickedPosit", Point(m.lastClickedPosit)}, {"optionalOriginatorID", Id(m.optionalOriginatorID)}, - {"optionalTargetID", Id(m.optionalTargetID)}, {"originatorRot", Rotation(m.originatorRot)}, {"sBitStream", Bytes(m.sBitStream)}, - {"skillID", m.skillID}, {"uiSkillHandle", m.uiSkillHandle} }; - }) }, - { { true, SYNC_SKILL }, Make([](const SyncSkill& m, json& j) { - j = { {"bDone", m.bDone}, {"sBitStream", Bytes(m.sBitStream)}, {"uiBehaviorHandle", m.uiBehaviorHandle}, {"uiSkillHandle", m.uiSkillHandle} }; - }) }, - { { true, REQUEST_SERVER_PROJECTILE_IMPACT }, Make([](const RequestServerProjectileImpact& m, json& j) { - j = { {"i64LocalID", Id(m.i64LocalID)}, {"i64TargetID", Id(m.i64TargetID)}, {"sBitStream", Bytes(m.sBitStream)} }; - }) }, - // Sent to the client - { { false, ECHO_START_SKILL }, Make([](const EchoStartSkill& m, json& j) { - j = { {"bUsedMouse", m.bUsedMouse}, {"fCasterLatency", m.fCasterLatency}, {"iCastType", m.iCastType}, - {"lastClickedPosit", Point(m.lastClickedPosit)}, {"optionalOriginatorID", Id(m.optionalOriginatorID)}, - {"optionalTargetID", Id(m.optionalTargetID)}, {"originatorRot", Rotation(m.originatorRot)}, {"sBitStream", Bytes(m.sBitStream)}, - {"skillID", m.skillID}, {"uiSkillHandle", m.uiSkillHandle} }; - }) }, - { { false, ECHO_SYNC_SKILL }, Make([](const EchoSyncSkill& m, json& j) { - j = { {"bDone", m.bDone}, {"sBitStream", Bytes(m.sBitStream)}, {"uiBehaviorHandle", m.uiBehaviorHandle}, {"uiSkillHandle", m.uiSkillHandle} }; - }) }, - { { false, DO_CLIENT_PROJECTILE_IMPACT }, Make([](const DoClientProjectileImpact& m, json& j) { - j = { {"i64OrgID", Id(m.i64OrgID)}, {"i64OwnerID", Id(m.i64OwnerID)}, {"i64TargetID", Id(m.i64TargetID)}, {"sBitStream", Bytes(m.sBitStream)} }; - }) }, - }; - return decoders; + // (to server, ID) -> the struct that reads it + const std::map, const Entry*>& Index() { + static const auto index = [] { + std::map, const Entry*> out; + // The struct the server reads a message with, for its direction... + for (const auto& entry : Entries()) out.emplace(std::pair{ entry.direction == eDirection::TO_SERVER, entry.id }, &entry); + // ...and for the other direction when no struct is only sent that way (the layout is the same both ways) + for (const auto& entry : Entries()) out.emplace(std::pair{ entry.direction != eDirection::TO_SERVER, entry.id }, &entry); + return out; + }(); + return index; + } + + const Entry* Find(MessageType::Game messageId, bool toServer) { + const auto it = Index().find({ toServer, messageId }); + return it == Index().end() ? nullptr : it->second; } } namespace GameMessageDecoder { bool CanDecode(MessageType::Game messageId, bool toServer) { - return Decoders().contains({ toServer, messageId }); + const auto* entry = Find(messageId, toServer); + return entry && entry->read; } + bool HasStruct(MessageType::Game messageId) { return Find(messageId, true) != nullptr; } + std::optional Decode(MessageType::Game messageId, bool toServer, RakNet::BitStream& payload) { - const auto it = Decoders().find({ toServer, messageId }); - if (it == Decoders().end()) return std::nullopt; - return it->second(payload); + const auto* entry = Find(messageId, toServer); + if (!entry || !entry->read) return std::nullopt; + auto read = entry->read(payload); + if (!read.fields) return std::nullopt; + // Whole bytes the struct didn't read: the message has more than the struct knows (padding is under a byte) + if (read.unreadBits >= 8) (*read.fields)["(unread bits)"] = read.unreadBits; + return read.fields; + } + + std::vector Decodable() { + std::vector out; + for (const auto& entry : Entries()) { + if (entry.read) out.push_back(entry.id); + } + return out; } std::optional RoundTripReceived(MessageType::Game messageId, RakNet::BitStream& payload) { diff --git a/dGame/dGameMessages/GameMessageDecoder.h b/dGame/dGameMessages/GameMessageDecoder.h index fb96a5423..ab8c6a261 100644 --- a/dGame/dGameMessages/GameMessageDecoder.h +++ b/dGame/dGameMessages/GameMessageDecoder.h @@ -2,24 +2,33 @@ #define __GAMEMESSAGEDECODER__H__ #include +#include #include "BitStream.h" #include "json.hpp" #include "MessageType/Game.h" /** - * Reads a game message's fields for the dashboard's message inspector, using the server's own typed message struct - * and its Deserialize, so what is shown is exactly what the server reads. Messages the server has no typed struct - * for (the ones handled by reading the stream inline) aren't decoded; the inspector shows their bytes instead. + * Reads a game message's fields for the dashboard's message inspector and capture viewer, using the server's own + * message struct and its Deserialize, so what is shown is exactly what the server reads. Every wire message struct + * (NetGameMsg in *Messages.h) is registered; its members are listed by name by GameMessageFields.inc, which + * tools/gen_game_message_fields.py writes from the struct definitions. Messages the server has no struct for aren't + * decoded; the viewer shows their name and bytes. */ namespace GameMessageDecoder { - // Whether a message sent in this direction has a typed struct + // Whether a message sent in this direction has a struct that reads it bool CanDecode(MessageType::Game messageId, bool toServer); + // Whether the server has a struct for the message at all (in either direction) + bool HasStruct(MessageType::Game messageId); + // The message's fields, read from `payload` (the bits after the object ID and message ID), or nullopt when it has - // no typed struct or doesn't read cleanly + // no struct or doesn't read cleanly. Whole bytes the struct left unread are reported as "(unread bits)". std::optional Decode(MessageType::Game messageId, bool toServer, RakNet::BitStream& payload); + // Every message ID with a struct that reads it + std::vector Decodable(); + /** * Reads a message a client sent with the struct the server reads it with, and writes it again. nullopt when the * server has no typed struct for it or it doesn't read; otherwise whether it read the whole message (padding diff --git a/dGame/dGameMessages/GameMessageFields.inc b/dGame/dGameMessages/GameMessageFields.inc new file mode 100644 index 000000000..78104641d --- /dev/null +++ b/dGame/dGameMessages/GameMessageFields.inc @@ -0,0 +1,2803 @@ +// Generated by tools/gen_game_message_fields.py from the packet structs. Do not edit: run the script. + +// Every struct's members, in declaration order (a base struct's first) +json ToJson(const GameMessages::ActivityEnter& m); +json ToJson(const GameMessages::ActivityExit& m); +json ToJson(const GameMessages::ActivityStart& m); +json ToJson(const GameMessages::ActivityStop& m); +json ToJson(const GameMessages::ActivityPause& m); +json ToJson(const GameMessages::StartActivityTime& m); +json ToJson(const GameMessages::RequestActivityEnter& m); +json ToJson(const GameMessages::RequestActivityExit& m); +json ToJson(const GameMessages::ShowActivityCountdown& m); +json ToJson(const GameMessages::MatchResponse& m); +json ToJson(const GameMessages::MatchUpdate& m); +json ToJson(const GameMessages::MatchRequest& m); +json ToJson(const GameMessages::RequestActivitySummaryLeaderboardData& m); +json ToJson(const GameMessages::SendActivitySummaryLeaderboardData& m); +json ToJson(const GameMessages::NotifyClientShootingGalleryScore& m); +json ToJson(const GameMessages::UpdateShootingGalleryRotation& m); +json ToJson(const GameMessages::ShootingGalleryFire& m); +json ToJson(const GameMessages::ActivityStateChangeRequest& m); +json ToJson(const GameMessages::StartBuildingWithItem& m); +json ToJson(const GameMessages::StartArrangingWithItem& m); +json ToJson(const GameMessages::FinishArrangingWithItem& m); +json ToJson(const GameMessages::DoneArrangingWithItem& m); +json ToJson(const GameMessages::ModularBuildEnd& m); +json ToJson(const GameMessages::ModularBuildFinish& m); +json ToJson(const GameMessages::ModularBuildMoveAndEquip& m); +json ToJson(const GameMessages::ModularBuildConvertModel& m); +json ToJson(const GameMessages::SetBuildMode& m); +json ToJson(const GameMessages::SetBuildModeConfirmed& m); +json ToJson(const GameMessages::BuildModeSet& m); +json ToJson(const GameMessages::UnUseBBBModel& m); +json ToJson(const GameMessages::BBBLoadItemRequest& m); +json ToJson(const GameMessages::BBBSaveRequest& m); +json ToJson(const GameMessages::ActivateBrickMode& m); +json ToJson(const GameMessages::SetBBBAutosave& m); +json ToJson(const GameMessages::RebuildBBBAutosaveMsg& m); +json ToJson(const GameMessages::NotifyClientUGCModelReady& m); +json ToJson(const GameMessages::UGObjectMetadata& m); +json ToJson(const GameMessages::BlueprintMetadata& m); +json ToJson(const GameMessages::FetchModelMetadataRequest& m); +json ToJson(const GameMessages::FetchModelMetadataResponse& m); +json ToJson(const GameMessages::SetModelToBuild& m); +json ToJson(const GameMessages::SpawnModelBricks& m); +json ToJson(const GameMessages::Die& m); +json ToJson(const GameMessages::RequestDie& m); +json ToJson(const GameMessages::RequestSmashPlayer& m); +json ToJson(const GameMessages::RequestResurrect& m); +json ToJson(const GameMessages::Resurrect& m); +json ToJson(const GameMessages::Smash& m); +json ToJson(const GameMessages::UnSmash& m); +json ToJson(const GameMessages::SetResurrectRestoreValues& m); +json ToJson(const GameMessages::SetPlayerAllowedRespawn& m); +json ToJson(const GameMessages::Knockback& m); +json ToJson(const GameMessages::SetStunned& m); +json ToJson(const GameMessages::SetStunImmunity& m); +json ToJson(const GameMessages::SetStatusImmunity& m); +json ToJson(const GameMessages::AddBuff& m); +json ToJson(const GameMessages::RemoveBuff& m); +json ToJson(const GameMessages::RemoveBuffsAppliedByObject& m); +json ToJson(const GameMessages::AddRunSpeedModifier& m); +json ToJson(const GameMessages::RemoveRunSpeedModifier& m); +json ToJson(const GameMessages::ActivateBubbleBuff& m); +json ToJson(const GameMessages::DeactivateBubbleBuff& m); +json ToJson(const GameMessages::DeactivateBubbleBuffFromServer& m); +json ToJson(const GameMessages::PlayAnimation& m); +json ToJson(const GameMessages::PlayNDAudioEmitter& m); +json ToJson(const GameMessages::PlayEmbeddedEffectOnAllClientsNearObject& m); +json ToJson(const GameMessages::PlayFXEffect& m); +json ToJson(const GameMessages::StopFXEffect& m); +json ToJson(const GameMessages::BroadcastTextToChatbox& m); +json ToJson(const GameMessages::Play2DAmbientSound& m); +json ToJson(const GameMessages::Stop2DAmbientSound& m); +json ToJson(const GameMessages::UIMessageServerToSingleClient& m); +json ToJson(const GameMessages::UIMessageServerToAllClients& m); +json ToJson(const GameMessages::StartCelebrationEffect& m); +json ToJson(const GameMessages::DisplayMessageBox& m); +json ToJson(const GameMessages::MessageBoxRespond& m); +json ToJson(const GameMessages::ChoiceBoxRespond& m); +json ToJson(const GameMessages::DisplayChatBubble& m); +json ToJson(const GameMessages::ChangeIdleFlags& m); +json ToJson(const GameMessages::SetNameBillboardState& m); +json ToJson(const GameMessages::ShowBillboardInteractIcon& m); +json ToJson(const GameMessages::PlayCinematic& m); +json ToJson(const GameMessages::EndCinematic& m); +json ToJson(const GameMessages::CinematicUpdate& m); +json ToJson(const GameMessages::SlashCommandTextFeedback& m); +json ToJson(const GameMessages::PlayEmote& m); +json ToJson(const GameMessages::SetEmoteLockState& m); +json ToJson(const GameMessages::DisplayTooltip& m); +json ToJson(const GameMessages::EmotePlayed& m); +json ToJson(const GameMessages::AddItemToInventoryClientSync& m); +json ToJson(const GameMessages::SetInventorySize& m); +json ToJson(const GameMessages::RemoveItemFromInventory& m); +json ToJson(const GameMessages::EquipInventory& m); +json ToJson(const GameMessages::UnEquipInventory& m); +json ToJson(const GameMessages::MoveItemInInventory& m); +json ToJson(const GameMessages::MoveItemBetweenInventoryTypes& m); +json ToJson(const GameMessages::RequestMoveItemBetweenInventoryTypes& m); +json ToJson(const GameMessages::ResponseMoveItemBetweenInventoryTypes& m); +json ToJson(const GameMessages::MoveInventoryBatch& m); +json ToJson(const GameMessages::NotifyNotEnoughInvSpace& m); +json ToJson(const GameMessages::UpdateInventoryUi& m); +json ToJson(const GameMessages::MarkInventoryItemAsActive& m); +json ToJson(const GameMessages::ConsumeClientItem& m); +json ToJson(const GameMessages::ClientItemConsumed& m); +json ToJson(const GameMessages::UseNonEquipmentItem& m); +json ToJson(const GameMessages::UseItemResult& m); +json ToJson(const GameMessages::UseItemRequirementsResponse& m); +json ToJson(const GameMessages::SetConsumableItem& m); +json ToJson(const GameMessages::PushEquippedItemsState& m); +json ToJson(const GameMessages::PopEquippedItemsState& m); +json ToJson(const GameMessages::ResyncEquipment& m); +json ToJson(const GameMessages::UpdateInventoryGroup& m); +json ToJson(const GameMessages::UpdateInventoryGroupContents& m); +json ToJson(const GameMessages::UseItemOnClient& m); +json ToJson(const GameMessages::DropClientLoot& m); +json ToJson(const GameMessages::PickupItem& m); +json ToJson(const GameMessages::TeamPickupItem& m); +json ToJson(const GameMessages::OfferMission& m); +json ToJson(const GameMessages::RespondToMission& m); +json ToJson(const GameMessages::NotifyMission& m); +json ToJson(const GameMessages::NotifyMissionTask& m); +json ToJson(const GameMessages::ResetMissions& m); +json ToJson(const GameMessages::MissionDialogueOK& m); +json ToJson(const GameMessages::MissionDialogueCancelled& m); +json ToJson(const GameMessages::RequestLinkedMission& m); +json ToJson(const GameMessages::SetFlag& m); +json ToJson(const GameMessages::NotifyClientFlagChange& m); +json ToJson(const GameMessages::HasBeenCollected& m); +json ToJson(const GameMessages::NotifyLevelRewards& m); +json ToJson(const GameMessages::Teleport& m); +json ToJson(const GameMessages::StartPathing& m); +json ToJson(const GameMessages::PlatformResync& m); +json ToJson(const GameMessages::RequestPlatformResync& m); +json ToJson(const GameMessages::OrientToAngle& m); +json ToJson(const GameMessages::LockNodeRotation& m); +json ToJson(const GameMessages::SetGravityScale& m); +json ToJson(const GameMessages::SetJetPackMode& m); +json ToJson(const GameMessages::SetPlayerControlScheme& m); +json ToJson(const GameMessages::PlayerReachedRespawnCheckpoint& m); +json ToJson(const GameMessages::SetRailMovement& m); +json ToJson(const GameMessages::StartRailMovement& m); +json ToJson(const GameMessages::ClientRailMovementReady& m); +json ToJson(const GameMessages::CancelRailMovement& m); +json ToJson(const GameMessages::RequestRailActivatorState& m); +json ToJson(const GameMessages::NotifyRailActivatorStateChange& m); +json ToJson(const GameMessages::PlayerRailArrivedNotification& m); +json ToJson(const GameMessages::SetMountInventoryID& m); +json ToJson(const GameMessages::DismountComplete& m); +json ToJson(const GameMessages::AcknowledgePossession& m); +json ToJson(const GameMessages::ModifyGhostingDistance& m); +json ToJson(const GameMessages::ToggleGhostReferenceOverride& m); +json ToJson(const GameMessages::SetGhostReferencePosition& m); +json ToJson(const GameMessages::PlayerSetCameraCyclingMode& m); +json ToJson(const GameMessages::ForceCameraTargetCycle& m); +json ToJson(const GameMessages::FireEventClientSide& m); +json ToJson(const GameMessages::FireEventServerSide& m); +json ToJson(const GameMessages::NotifyClientObject& m); +json ToJson(const GameMessages::NotifyClientZoneObject& m); +json ToJson(const GameMessages::NotifyObject& m); +json ToJson(const GameMessages::ScriptNetworkVarUpdate& m); +json ToJson(const GameMessages::NotifyClientFailedPrecondition& m); +json ToJson(const GameMessages::TerminateInteraction& m); +json ToJson(const GameMessages::SetName& m); +json ToJson(const GameMessages::RequestUse& m); +json ToJson(const GameMessages::RequestServerObjectInfo& m); +json ToJson(const GameMessages::NotifyPetTamingMinigame& m); +json ToJson(const GameMessages::ClientExitTamingMinigame& m); +json ToJson(const GameMessages::StartServerPetMinigameTimer& m); +json ToJson(const GameMessages::NotifyTamingModelLoadedOnServer& m); +json ToJson(const GameMessages::NotifyPetTamingPuzzleSelected& m); +json ToJson(const GameMessages::PetTamingTryBuild& m); +json ToJson(const GameMessages::PetTamingTryBuildResult& m); +json ToJson(const GameMessages::NotifyTamingBuildSuccess& m); +json ToJson(const GameMessages::PetResponse& m); +json ToJson(const GameMessages::AddPetToPlayer& m); +json ToJson(const GameMessages::RegisterPetID& m); +json ToJson(const GameMessages::RegisterPetDBID& m); +json ToJson(const GameMessages::ShowPetActionButton& m); +json ToJson(const GameMessages::BouncerActiveStatus& m); +json ToJson(const GameMessages::RequestSetPetName& m); +json ToJson(const GameMessages::SetPetName& m); +json ToJson(const GameMessages::SetPetNameModerated& m); +json ToJson(const GameMessages::PetNameChanged& m); +json ToJson(const GameMessages::CommandPet& m); +json ToJson(const GameMessages::DespawnPet& m); +json ToJson(const GameMessages::UpdateChatMode& m); +json ToJson(const GameMessages::SetGMLevel& m); +json ToJson(const GameMessages::ModifyLEGOScore& m); +json ToJson(const GameMessages::SetCurrency& m); +json ToJson(const GameMessages::UpdateReputation& m); +json ToJson(const GameMessages::SetTooltipFlag& m); +json ToJson(const GameMessages::SetLastCustomBuild& m); +json ToJson(const GameMessages::ToggleGMInvis& m); +json ToJson(const GameMessages::PickupCurrency& m); +json ToJson(const GameMessages::ModifyPlayerZoneStatistic& m); +json ToJson(const GameMessages::UpdatePlayerStatistic& m); +json ToJson(const GameMessages::ParseChatMessage& m); +json ToJson(const GameMessages::ReportBug& m); +json ToJson(const GameMessages::VerifyAck& m); +json ToJson(const GameMessages::Help& m); +json ToJson(const GameMessages::DisplayGuildCreateBox& m); +json ToJson(const GameMessages::OpenPropertyVendor& m); +json ToJson(const GameMessages::OpenPropertyManagement& m); +json ToJson(const GameMessages::DownloadPropertyData& m); +json ToJson(const GameMessages::PropertyRentalResponse& m); +json ToJson(const GameMessages::PropertyEntranceBegin& m); +json ToJson(const GameMessages::PropertySelectQuery& m); +json ToJson(const GameMessages::PropertySelectQuery::PropertyInfo& m); +json ToJson(const GameMessages::GetModelsOnProperty& m); +json ToJson(const GameMessages::PlaceModelResponse& m); +json ToJson(const GameMessages::RequeryPropertyModels& m); +json ToJson(const GameMessages::HandleUGCEquipPreCreateBasedOnEditMode& m); +json ToJson(const GameMessages::HandleUGCEquipPostDeleteBasedOnEditMode& m); +json ToJson(const GameMessages::SetPropertyAccess& m); +json ToJson(const GameMessages::UpdatePropertyOrModelForFilterCheck& m); +json ToJson(const GameMessages::QueryPropertyData& m); +json ToJson(const GameMessages::PropertyEditorBegin& m); +json ToJson(const GameMessages::PropertyEditorEnd& m); +json ToJson(const GameMessages::PropertyContentsFromClient& m); +json ToJson(const GameMessages::ZonePropertyModelEquipped& m); +json ToJson(const GameMessages::ZonePropertyModelRotated& m); +json ToJson(const GameMessages::PlacePropertyModel& m); +json ToJson(const GameMessages::UpdateModelFromClient& m); +json ToJson(const GameMessages::DeleteModelFromClient& m); +json ToJson(const GameMessages::PropertyEntranceSync& m); +json ToJson(const GameMessages::EnterProperty1& m); +json ToJson(const GameMessages::UpdatePropertyPerformanceCost& m); +json ToJson(const GameMessages::ReportOffensiveModel& m); +json ToJson(const GameMessages::ReportOffensiveProperty& m); +json ToJson(const GameMessages::GetHotPropertyData& m); +json ToJson(const GameMessages::NewsSendHotPropertiesInfoToClient& m); +json ToJson(const GameMessages::NewsSendHotPropertiesInfoToClient::HotPropertyInfo& m); +json ToJson(const GameMessages::PlayBehaviorSound& m); +json ToJson(const GameMessages::RebuildNotifyState& m); +json ToJson(const GameMessages::EnableRebuild& m); +json ToJson(const GameMessages::RebuildCancel& m); +json ToJson(const GameMessages::ModuleAssemblyDBDataForClient& m); +json ToJson(const GameMessages::ModuleAssemblyQueryData& m); +json ToJson(const GameMessages::ModularAssemblyNIFCompleted& m); +json ToJson(const GameMessages::NotifyVehicleOfRacingObject& m); +json ToJson(const GameMessages::RacingPlayerLoaded& m); +json ToJson(const GameMessages::VehicleUnlockInput& m); +json ToJson(const GameMessages::VehicleSetWheelLockState& m); +json ToJson(const GameMessages::RacingSetPlayerResetInfo& m); +json ToJson(const GameMessages::RacingResetPlayerToLastReset& m); +json ToJson(const GameMessages::VehicleStopBoost& m); +json ToJson(const GameMessages::NotifyRacingClient& m); +json ToJson(const GameMessages::VehicleAddPassiveBoostAction& m); +json ToJson(const GameMessages::VehicleRemovePassiveBoostAction& m); +json ToJson(const GameMessages::VehicleNotifyFinishedRace& m); +json ToJson(const GameMessages::VehicleNotifyServerAddPassiveBoostAction& m); +json ToJson(const GameMessages::VehicleNotifyServerRemovePassiveBoostAction& m); +json ToJson(const GameMessages::RacingClientReady& m); +json ToJson(const GameMessages::RacingPlayerInfoResetFinished& m); +json ToJson(const GameMessages::VehicleNotifyHitImaginationServer& m); +json ToJson(const GameMessages::AddSkill& m); +json ToJson(const GameMessages::RemoveSkill& m); +json ToJson(const GameMessages::UncastSkill& m); +json ToJson(const GameMessages::CasterDead& m); +json ToJson(const GameMessages::SelectSkill& m); +json ToJson(const GameMessages::StartSkill& m); +json ToJson(const GameMessages::EchoStartSkill& m); +json ToJson(const GameMessages::SyncSkill& m); +json ToJson(const GameMessages::EchoSyncSkill& m); +json ToJson(const GameMessages::RequestServerProjectileImpact& m); +json ToJson(const GameMessages::DoClientProjectileImpact& m); +json ToJson(const GameMessages::UseSkillSet& m); +json ToJson(const GameMessages::TradeItemEntry& m); +json ToJson(const GameMessages::TradeItemEntry::Config& m); +json ToJson(const GameMessages::ClientTradeRequest& m); +json ToJson(const GameMessages::ServerTradeInvite& m); +json ToJson(const GameMessages::ServerTradeInitialReply& m); +json ToJson(const GameMessages::ServerTradeFinalReply& m); +json ToJson(const GameMessages::ClientTradeUpdate& m); +json ToJson(const GameMessages::ServerTradeUpdate& m); +json ToJson(const GameMessages::ClientTradeCancel& m); +json ToJson(const GameMessages::ClientTradeAccept& m); +json ToJson(const GameMessages::ServerTradeCancel& m); +json ToJson(const GameMessages::ServerTradeAccept& m); +json ToJson(const GameMessages::VendorOpenWindow& m); +json ToJson(const GameMessages::RequestVendorStatusUpdate& m); +json ToJson(const GameMessages::VendorStatusUpdate& m); +json ToJson(const GameMessages::VendorStatusUpdate::Entry& m); +json ToJson(const GameMessages::VendorTransactionResult& m); +json ToJson(const GameMessages::BuyFromVendor& m); +json ToJson(const GameMessages::SellToVendor& m); +json ToJson(const GameMessages::BuybackFromVendor& m); +json ToJson(const GameMessages::AddDonationItem& m); +json ToJson(const GameMessages::RemoveDonationItem& m); +json ToJson(const GameMessages::ConfirmDonationOnPlayer& m); +json ToJson(const GameMessages::CancelDonationOnPlayer& m); +json ToJson(const GameMessages::TransferToZone& m); +json ToJson(const GameMessages::TransferToZoneCheckedIM& m); +json ToJson(const GameMessages::PlayerLoaded& m); +json ToJson(const GameMessages::ReadyForUpdates& m); +json ToJson(const GameMessages::PlayerReady& m); +json ToJson(const GameMessages::RestoreToPostLoadStats& m); +json ToJson(const GameMessages::ServerDoneLoadingAllObjects& m); +json ToJson(const GameMessages::InvalidZoneTransferList& m); +json ToJson(const GameMessages::DisplayZoneSummary& m); +json ToJson(const GameMessages::ZoneSummaryDismissed& m); +json ToJson(const GameMessages::NotifyServerLevelProcessingComplete& m); +json ToJson(const GameMessages::ChangeObjectWorldState& m); +json ToJson(const GameMessages::LocalizedAnnouncementServerToSingleClient& m); + +json ToJson(const GameMessages::ActivityEnter& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ActivityExit& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ActivityStart& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ActivityStop& m) { + json j = json::object(); + j["bExit"] = ToJson(m.bExit); + j["bUserCancel"] = ToJson(m.bUserCancel); + return j; +} +json ToJson(const GameMessages::ActivityPause& m) { + json j = json::object(); + j["bPause"] = ToJson(m.bPause); + return j; +} +json ToJson(const GameMessages::StartActivityTime& m) { + json j = json::object(); + j["startTime"] = ToJson(m.startTime); + return j; +} +json ToJson(const GameMessages::RequestActivityEnter& m) { + json j = json::object(); + j["bStart"] = ToJson(m.bStart); + j["userID"] = ToJson(m.userID); + return j; +} +json ToJson(const GameMessages::RequestActivityExit& m) { + json j = json::object(); + j["bUserCancel"] = ToJson(m.bUserCancel); + j["userID"] = ToJson(m.userID); + return j; +} +json ToJson(const GameMessages::ShowActivityCountdown& m) { + json j = json::object(); + j["bPlayAdditionalSound"] = ToJson(m.bPlayAdditionalSound); + j["bPlayCountdownSound"] = ToJson(m.bPlayCountdownSound); + j["sndName"] = ToJson(m.sndName); + j["stateToPlaySoundOn"] = ToJson(m.stateToPlaySoundOn); + return j; +} +json ToJson(const GameMessages::MatchResponse& m) { + json j = json::object(); + j["response"] = ToJson(m.response); + return j; +} +json ToJson(const GameMessages::MatchUpdate& m) { + json j = json::object(); + j["data"] = ToJson(m.data); + j["type"] = ToJson(m.type); + return j; +} +json ToJson(const GameMessages::MatchRequest& m) { + json j = json::object(); + j["activator"] = ToJson(m.activator); + j["playerChoices"] = ToJson(m.playerChoices); + j["type"] = ToJson(m.type); + j["value"] = ToJson(m.value); + return j; +} +json ToJson(const GameMessages::RequestActivitySummaryLeaderboardData& m) { + json j = json::object(); + j["gameID"] = ToJson(m.gameID); + j["queryType"] = ToJson(m.queryType); + j["resultsEnd"] = ToJson(m.resultsEnd); + j["resultsStart"] = ToJson(m.resultsStart); + j["targetID"] = ToJson(m.targetID); + j["weekly"] = ToJson(m.weekly); + return j; +} +json ToJson(const GameMessages::SendActivitySummaryLeaderboardData& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::NotifyClientShootingGalleryScore& m) { + json j = json::object(); + j["addTime"] = ToJson(m.addTime); + j["score"] = ToJson(m.score); + j["targetID"] = ToJson(m.targetID); + j["targetPos"] = ToJson(m.targetPos); + return j; +} +json ToJson(const GameMessages::UpdateShootingGalleryRotation& m) { + json j = json::object(); + j["angle"] = ToJson(m.angle); + j["facing"] = ToJson(m.facing); + j["muzzlePos"] = ToJson(m.muzzlePos); + return j; +} +json ToJson(const GameMessages::ShootingGalleryFire& m) { + json j = json::object(); + j["target"] = ToJson(m.target); + j["rotation"] = ToJson(m.rotation); + return j; +} +json ToJson(const GameMessages::ActivityStateChangeRequest& m) { + json j = json::object(); + j["objectID"] = ToJson(m.objectID); + j["value1"] = ToJson(m.value1); + j["value2"] = ToJson(m.value2); + j["stringValue"] = ToJson(m.stringValue); + return j; +} +json ToJson(const GameMessages::StartBuildingWithItem& m) { + json j = json::object(); + j["firstTime"] = ToJson(m.firstTime); + j["success"] = ToJson(m.success); + j["sourceBag"] = ToJson(m.sourceBag); + j["sourceId"] = ToJson(m.sourceId); + j["sourceLot"] = ToJson(m.sourceLot); + j["sourceType"] = ToJson(m.sourceType); + j["targetId"] = ToJson(m.targetId); + j["targetLot"] = ToJson(m.targetLot); + j["targetPos"] = ToJson(m.targetPos); + j["targetType"] = ToJson(m.targetType); + return j; +} +json ToJson(const GameMessages::StartArrangingWithItem& m) { + json j = json::object(); + j["firstTime"] = ToJson(m.firstTime); + j["buildAreaID"] = ToJson(m.buildAreaID); + j["buildStartPos"] = ToJson(m.buildStartPos); + j["sourceBag"] = ToJson(m.sourceBag); + j["sourceID"] = ToJson(m.sourceID); + j["sourceLot"] = ToJson(m.sourceLot); + j["sourceType"] = ToJson(m.sourceType); + j["targetID"] = ToJson(m.targetID); + j["targetLot"] = ToJson(m.targetLot); + j["targetPos"] = ToJson(m.targetPos); + j["targetType"] = ToJson(m.targetType); + return j; +} +json ToJson(const GameMessages::FinishArrangingWithItem& m) { + json j = json::object(); + j["buildAreaID"] = ToJson(m.buildAreaID); + j["newSourceBag"] = ToJson(m.newSourceBag); + j["newSourceID"] = ToJson(m.newSourceID); + j["newSourceLot"] = ToJson(m.newSourceLot); + j["newSourceType"] = ToJson(m.newSourceType); + j["newTargetID"] = ToJson(m.newTargetID); + j["newTargetLot"] = ToJson(m.newTargetLot); + j["newTargetType"] = ToJson(m.newTargetType); + j["newTargetPos"] = ToJson(m.newTargetPos); + j["oldItemBag"] = ToJson(m.oldItemBag); + j["oldItemID"] = ToJson(m.oldItemID); + j["oldItemLot"] = ToJson(m.oldItemLot); + j["oldItemType"] = ToJson(m.oldItemType); + return j; +} +json ToJson(const GameMessages::DoneArrangingWithItem& m) { + json j = json::object(); + j["newSourceBag"] = ToJson(m.newSourceBag); + j["newSourceID"] = ToJson(m.newSourceID); + j["newSourceLot"] = ToJson(m.newSourceLot); + j["newSourceType"] = ToJson(m.newSourceType); + j["newTargetID"] = ToJson(m.newTargetID); + j["newTargetLot"] = ToJson(m.newTargetLot); + j["newTargetType"] = ToJson(m.newTargetType); + j["newTargetPosition"] = ToJson(m.newTargetPosition); + j["oldItemBag"] = ToJson(m.oldItemBag); + j["oldItemID"] = ToJson(m.oldItemID); + j["oldItemLot"] = ToJson(m.oldItemLot); + j["oldItemType"] = ToJson(m.oldItemType); + return j; +} +json ToJson(const GameMessages::ModularBuildEnd& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ModularBuildFinish& m) { + json j = json::object(); + j["modules"] = ToJson(m.modules); + return j; +} +json ToJson(const GameMessages::ModularBuildMoveAndEquip& m) { + json j = json::object(); + j["templateID"] = ToJson(m.templateID); + return j; +} +json ToJson(const GameMessages::ModularBuildConvertModel& m) { + json j = json::object(); + j["modelID"] = ToJson(m.modelID); + return j; +} +json ToJson(const GameMessages::SetBuildMode& m) { + json j = json::object(); + j["start"] = ToJson(m.start); + j["distanceType"] = ToJson(m.distanceType); + j["modePaused"] = ToJson(m.modePaused); + j["modeValue"] = ToJson(m.modeValue); + j["playerId"] = ToJson(m.playerId); + j["startPos"] = ToJson(m.startPos); + return j; +} +json ToJson(const GameMessages::SetBuildModeConfirmed& m) { + json j = json::object(); + j["start"] = ToJson(m.start); + j["warnVisitors"] = ToJson(m.warnVisitors); + j["modePaused"] = ToJson(m.modePaused); + j["modeValue"] = ToJson(m.modeValue); + j["playerId"] = ToJson(m.playerId); + j["startPos"] = ToJson(m.startPos); + return j; +} +json ToJson(const GameMessages::BuildModeSet& m) { + json j = json::object(); + j["start"] = ToJson(m.start); + j["distanceType"] = ToJson(m.distanceType); + j["modePaused"] = ToJson(m.modePaused); + j["modeValue"] = ToJson(m.modeValue); + j["playerId"] = ToJson(m.playerId); + j["startPos"] = ToJson(m.startPos); + return j; +} +json ToJson(const GameMessages::UnUseBBBModel& m) { + json j = json::object(); + j["bHasWorldTransform"] = ToJson(m.bHasWorldTransform); + j["modelID"] = ToJson(m.modelID); + j["worldPos"] = ToJson(m.worldPos); + j["worldRot"] = ToJson(m.worldRot); + return j; +} +json ToJson(const GameMessages::BBBLoadItemRequest& m) { + json j = json::object(); + j["itemID"] = ToJson(m.itemID); + return j; +} +json ToJson(const GameMessages::BBBSaveRequest& m) { + json j = json::object(); + j["localID"] = ToJson(m.localID); + j["lxfmlDataCompressed"] = ToJson(m.lxfmlDataCompressed); + j["timeTakenInMs"] = ToJson(m.timeTakenInMs); + return j; +} +json ToJson(const GameMessages::ActivateBrickMode& m) { + json j = json::object(); + j["buildObjectID"] = ToJson(m.buildObjectID); + j["buildType"] = ToJson(m.buildType); + j["enterBuildFromWorld"] = ToJson(m.enterBuildFromWorld); + j["enterFlag"] = ToJson(m.enterFlag); + return j; +} +json ToJson(const GameMessages::SetBBBAutosave& m) { + json j = json::object(); + j["lxfmlDataCompressed"] = ToJson(m.lxfmlDataCompressed); + return j; +} +json ToJson(const GameMessages::RebuildBBBAutosaveMsg& m) { + json j = json::object(); + j["count"] = ToJson(m.count); + return j; +} +json ToJson(const GameMessages::NotifyClientUGCModelReady& m) { + json j = json::object(); + j["blueprintID"] = ToJson(m.blueprintID); + return j; +} +json ToJson(const GameMessages::UGObjectMetadata& m) { + json j = json::object(); + j["userModelID"] = ToJson(m.userModelID); + j["blueprintID"] = ToJson(m.blueprintID); + j["userModelName"] = ToJson(m.userModelName); + j["userModelDesc"] = ToJson(m.userModelDesc); + j["owningPlayerID"] = ToJson(m.owningPlayerID); + j["accountID"] = ToJson(m.accountID); + j["owningPlayerName"] = ToJson(m.owningPlayerName); + j["userModelBehaviors"] = ToJson(m.userModelBehaviors); + return j; +} +json ToJson(const GameMessages::BlueprintMetadata& m) { + json j = json::object(); + j["blueprintID"] = ToJson(m.blueprintID); + j["blueprintCreationTimestamp"] = ToJson(m.blueprintCreationTimestamp); + j["userModelMod"] = ToJson(m.userModelMod); + j["modelBoxMins"] = ToJson(m.modelBoxMins); + j["modelBoxMaxs"] = ToJson(m.modelBoxMaxs); + j["userModelOpt"] = ToJson(m.userModelOpt); + j["ugcIconReady"] = ToJson(m.ugcIconReady); + j["brickListColonDelim"] = ToJson(m.brickListColonDelim); + j["neverFalseIfPresentInCaps"] = ToJson(m.neverFalseIfPresentInCaps); + j["numberOfBricks"] = ToJson(m.numberOfBricks); + return j; +} +json ToJson(const GameMessages::FetchModelMetadataRequest& m) { + json j = json::object(); + j["context"] = ToJson(m.context); + j["objectID"] = ToJson(m.objectID); + j["requestorID"] = ToJson(m.requestorID); + j["ugID"] = ToJson(m.ugID); + return j; +} +json ToJson(const GameMessages::FetchModelMetadataResponse& m) { + json j = json::object(); + j["ugID"] = ToJson(m.ugID); + j["objectID"] = ToJson(m.objectID); + j["requestorID"] = ToJson(m.requestorID); + j["context"] = ToJson(m.context); + j["bHasUGData"] = ToJson(m.bHasUGData); + j["bHasBPData"] = ToJson(m.bHasBPData); + j["ugData"] = ToJson(m.ugData); + j["bpData"] = ToJson(m.bpData); + return j; +} +json ToJson(const GameMessages::SetModelToBuild& m) { + json j = json::object(); + j["modelLot"] = ToJson(m.modelLot); + return j; +} +json ToJson(const GameMessages::SpawnModelBricks& m) { + json j = json::object(); + j["amount"] = ToJson(m.amount); + j["position"] = ToJson(m.position); + return j; +} +json ToJson(const GameMessages::Die& m) { + json j = json::object(); + j["bClientDeath"] = ToJson(m.bClientDeath); + j["bSpawnLoot"] = ToJson(m.bSpawnLoot); + j["deathType"] = ToJson(m.deathType); + j["directionRelative_AngleXZ"] = ToJson(m.directionRelative_AngleXZ); + j["directionRelative_AngleY"] = ToJson(m.directionRelative_AngleY); + j["directionRelative_Force"] = ToJson(m.directionRelative_Force); + j["killType"] = ToJson(m.killType); + j["killerID"] = ToJson(m.killerID); + j["lootOwnerID"] = ToJson(m.lootOwnerID); + return j; +} +json ToJson(const GameMessages::RequestDie& m) { + json j = json::object(); + j["bClientDeath"] = ToJson(m.bClientDeath); + j["bSpawnLoot"] = ToJson(m.bSpawnLoot); + j["deathType"] = ToJson(m.deathType); + j["directionRelative_AngleXZ"] = ToJson(m.directionRelative_AngleXZ); + j["directionRelative_AngleY"] = ToJson(m.directionRelative_AngleY); + j["directionRelative_Force"] = ToJson(m.directionRelative_Force); + j["killType"] = ToJson(m.killType); + j["killerID"] = ToJson(m.killerID); + j["lootOwnerID"] = ToJson(m.lootOwnerID); + return j; +} +json ToJson(const GameMessages::RequestSmashPlayer& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::RequestResurrect& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::Resurrect& m) { + json j = json::object(); + j["bRezImmediately"] = ToJson(m.bRezImmediately); + return j; +} +json ToJson(const GameMessages::Smash& m) { + json j = json::object(); + j["bIgnoreObjectVisibility"] = ToJson(m.bIgnoreObjectVisibility); + j["force"] = ToJson(m.force); + j["ghostOpacity"] = ToJson(m.ghostOpacity); + j["killerID"] = ToJson(m.killerID); + return j; +} +json ToJson(const GameMessages::UnSmash& m) { + json j = json::object(); + j["builderID"] = ToJson(m.builderID); + j["duration"] = ToJson(m.duration); + return j; +} +json ToJson(const GameMessages::SetResurrectRestoreValues& m) { + json j = json::object(); + j["iArmorRestore"] = ToJson(m.iArmorRestore); + j["iHealthRestore"] = ToJson(m.iHealthRestore); + j["iImaginationRestore"] = ToJson(m.iImaginationRestore); + return j; +} +json ToJson(const GameMessages::SetPlayerAllowedRespawn& m) { + json j = json::object(); + j["dontPromptForRespawn"] = ToJson(m.dontPromptForRespawn); + return j; +} +json ToJson(const GameMessages::Knockback& m) { + json j = json::object(); + j["Caster"] = ToJson(m.Caster); + j["Originator"] = ToJson(m.Originator); + j["iKnockBackTimeMS"] = ToJson(m.iKnockBackTimeMS); + j["vector"] = ToJson(m.vector); + return j; +} +json ToJson(const GameMessages::SetStunned& m) { + json j = json::object(); + j["Originator"] = ToJson(m.Originator); + j["StateChangeType"] = ToJson(m.StateChangeType); + j["bCantAttack"] = ToJson(m.bCantAttack); + j["bCantAttackOutChangeWasApplied"] = ToJson(m.bCantAttackOutChangeWasApplied); + j["bCantEquip"] = ToJson(m.bCantEquip); + j["bCantEquipOutChangeWasApplied"] = ToJson(m.bCantEquipOutChangeWasApplied); + j["bCantInteract"] = ToJson(m.bCantInteract); + j["bCantInteractOutChangeWasApplied"] = ToJson(m.bCantInteractOutChangeWasApplied); + j["bCantJump"] = ToJson(m.bCantJump); + j["bCantJumpOutChangeWasApplied"] = ToJson(m.bCantJumpOutChangeWasApplied); + j["bCantMove"] = ToJson(m.bCantMove); + j["bCantMoveOutChangeWasApplied"] = ToJson(m.bCantMoveOutChangeWasApplied); + j["bCantTurn"] = ToJson(m.bCantTurn); + j["bCantTurnOutChangeWasApplied"] = ToJson(m.bCantTurnOutChangeWasApplied); + j["bCantUseItem"] = ToJson(m.bCantUseItem); + j["bCantUseItemOutChangeWasApplied"] = ToJson(m.bCantUseItemOutChangeWasApplied); + j["bDontTerminateInteract"] = ToJson(m.bDontTerminateInteract); + j["bIgnoreImmunity"] = ToJson(m.bIgnoreImmunity); + return j; +} +json ToJson(const GameMessages::SetStunImmunity& m) { + json j = json::object(); + j["Caster"] = ToJson(m.Caster); + j["StateChangeType"] = ToJson(m.StateChangeType); + j["bImmuneToStunAttack"] = ToJson(m.bImmuneToStunAttack); + j["bImmuneToStunEquip"] = ToJson(m.bImmuneToStunEquip); + j["bImmuneToStunInteract"] = ToJson(m.bImmuneToStunInteract); + j["bImmuneToStunJump"] = ToJson(m.bImmuneToStunJump); + j["bImmuneToStunMove"] = ToJson(m.bImmuneToStunMove); + j["bImmuneToStunTurn"] = ToJson(m.bImmuneToStunTurn); + j["bImmuneToStunUseItem"] = ToJson(m.bImmuneToStunUseItem); + return j; +} +json ToJson(const GameMessages::SetStatusImmunity& m) { + json j = json::object(); + j["StateChangeType"] = ToJson(m.StateChangeType); + j["bImmuneToBasicAttack"] = ToJson(m.bImmuneToBasicAttack); + j["bImmuneToDOT"] = ToJson(m.bImmuneToDOT); + j["bImmuneToKnockback"] = ToJson(m.bImmuneToKnockback); + j["bImmuneToInterrupt"] = ToJson(m.bImmuneToInterrupt); + j["bImmuneToSpeed"] = ToJson(m.bImmuneToSpeed); + j["bImmuneToImaginationGain"] = ToJson(m.bImmuneToImaginationGain); + j["bImmuneToImaginationLoss"] = ToJson(m.bImmuneToImaginationLoss); + j["bImmuneToQuickbuildInterrupt"] = ToJson(m.bImmuneToQuickbuildInterrupt); + j["bImmuneToPullToPoint"] = ToJson(m.bImmuneToPullToPoint); + return j; +} +json ToJson(const GameMessages::AddBuff& m) { + json j = json::object(); + j["bAddedByTeammate"] = ToJson(m.bAddedByTeammate); + j["bApplyOnTeammates"] = ToJson(m.bApplyOnTeammates); + j["bCancelOnDamaged"] = ToJson(m.bCancelOnDamaged); + j["bCancelOnDeath"] = ToJson(m.bCancelOnDeath); + j["bCancelOnLogOut"] = ToJson(m.bCancelOnLogOut); + j["bCancelOnMove"] = ToJson(m.bCancelOnMove); + j["bCancelOnRemoveBuff"] = ToJson(m.bCancelOnRemoveBuff); + j["bCancelOnUI"] = ToJson(m.bCancelOnUI); + j["bCancelOnUnEquip"] = ToJson(m.bCancelOnUnEquip); + j["bCancelOnZone"] = ToJson(m.bCancelOnZone); + j["bIgnoreImmunities"] = ToJson(m.bIgnoreImmunities); + j["bIsImmunity"] = ToJson(m.bIsImmunity); + j["bUseRefCount"] = ToJson(m.bUseRefCount); + j["i64AddedBy"] = ToJson(m.i64AddedBy); + j["uiBuffID"] = ToJson(m.uiBuffID); + j["uiDurationMS"] = ToJson(m.uiDurationMS); + return j; +} +json ToJson(const GameMessages::RemoveBuff& m) { + json j = json::object(); + j["bFromRemoveBehavior"] = ToJson(m.bFromRemoveBehavior); + j["bFromUnEquip"] = ToJson(m.bFromUnEquip); + j["bRemoveImmunity"] = ToJson(m.bRemoveImmunity); + j["uiBuffID"] = ToJson(m.uiBuffID); + return j; +} +json ToJson(const GameMessages::RemoveBuffsAppliedByObject& m) { + json j = json::object(); + j["objectID"] = ToJson(m.objectID); + return j; +} +json ToJson(const GameMessages::AddRunSpeedModifier& m) { + json j = json::object(); + j["i64Caster"] = ToJson(m.i64Caster); + j["uiModifier"] = ToJson(m.uiModifier); + return j; +} +json ToJson(const GameMessages::RemoveRunSpeedModifier& m) { + json j = json::object(); + j["uiModifier"] = ToJson(m.uiModifier); + return j; +} +json ToJson(const GameMessages::ActivateBubbleBuff& m) { + json j = json::object(); + j["bSpecialAnims"] = ToJson(m.bSpecialAnims); + j["wszType"] = ToJson(m.wszType); + return j; +} +json ToJson(const GameMessages::DeactivateBubbleBuff& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::DeactivateBubbleBuffFromServer& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::PlayAnimation& m) { + json j = json::object(); + j["animationID"] = ToJson(m.animationID); + j["bExpectAnimToExist"] = ToJson(m.bExpectAnimToExist); + j["bPlayImmediate"] = ToJson(m.bPlayImmediate); + j["bTriggerOnCompleteMsg"] = ToJson(m.bTriggerOnCompleteMsg); + j["fPriority"] = ToJson(m.fPriority); + j["fScale"] = ToJson(m.fScale); + return j; +} +json ToJson(const GameMessages::PlayNDAudioEmitter& m) { + json j = json::object(); + j["NDAudioCallbackMessageData"] = ToJson(m.NDAudioCallbackMessageData); + j["NDAudioEmitterID"] = ToJson(m.NDAudioEmitterID); + j["NDAudioEventGUID"] = ToJson(m.NDAudioEventGUID); + j["NDAudioMetaEventName"] = ToJson(m.NDAudioMetaEventName); + j["result"] = ToJson(m.result); + j["targetObjectIDForNDAudioCallbackMessages"] = ToJson(m.targetObjectIDForNDAudioCallbackMessages); + return j; +} +json ToJson(const GameMessages::PlayEmbeddedEffectOnAllClientsNearObject& m) { + json j = json::object(); + j["effectName"] = ToJson(m.effectName); + j["fromObjectID"] = ToJson(m.fromObjectID); + j["radius"] = ToJson(m.radius); + return j; +} +json ToJson(const GameMessages::PlayFXEffect& m) { + json j = json::object(); + j["effectID"] = ToJson(m.effectID); + j["effectType"] = ToJson(m.effectType); + j["scale"] = ToJson(m.scale); + j["name"] = ToJson(m.name); + j["priority"] = ToJson(m.priority); + j["secondary"] = ToJson(m.secondary); + j["serialize"] = ToJson(m.serialize); + return j; +} +json ToJson(const GameMessages::StopFXEffect& m) { + json j = json::object(); + j["killImmediate"] = ToJson(m.killImmediate); + j["name"] = ToJson(m.name); + return j; +} +json ToJson(const GameMessages::BroadcastTextToChatbox& m) { + json j = json::object(); + j["attrs"] = ToJson(m.attrs); + j["wsText"] = ToJson(m.wsText); + return j; +} +json ToJson(const GameMessages::Play2DAmbientSound& m) { + json j = json::object(); + j["audioGUID"] = ToJson(m.audioGUID); + j["result"] = ToJson(m.result); + return j; +} +json ToJson(const GameMessages::Stop2DAmbientSound& m) { + json j = json::object(); + j["force"] = ToJson(m.force); + j["audioGUID"] = ToJson(m.audioGUID); + j["result"] = ToJson(m.result); + return j; +} +json ToJson(const GameMessages::UIMessageServerToSingleClient& m) { + json j = json::object(); + j["args"] = ToJson(m.args); + j["strMessageName"] = ToJson(m.strMessageName); + return j; +} +json ToJson(const GameMessages::UIMessageServerToAllClients& m) { + json j = json::object(); + j["args"] = ToJson(m.args); + j["strMessageName"] = ToJson(m.strMessageName); + return j; +} +json ToJson(const GameMessages::StartCelebrationEffect& m) { + json j = json::object(); + j["animation"] = ToJson(m.animation); + j["backgroundObject"] = ToJson(m.backgroundObject); + j["cameraPathLOT"] = ToJson(m.cameraPathLOT); + j["celeLeadIn"] = ToJson(m.celeLeadIn); + j["celeLeadOut"] = ToJson(m.celeLeadOut); + j["celebrationID"] = ToJson(m.celebrationID); + j["duration"] = ToJson(m.duration); + j["iconID"] = ToJson(m.iconID); + j["mainText"] = ToJson(m.mainText); + j["mixerProgram"] = ToJson(m.mixerProgram); + j["musicCue"] = ToJson(m.musicCue); + j["pathNodeName"] = ToJson(m.pathNodeName); + j["soundGUID"] = ToJson(m.soundGUID); + j["subText"] = ToJson(m.subText); + return j; +} +json ToJson(const GameMessages::DisplayMessageBox& m) { + json j = json::object(); + j["bShow"] = ToJson(m.bShow); + j["callbackClient"] = ToJson(m.callbackClient); + j["identifier"] = ToJson(m.identifier); + j["imageID"] = ToJson(m.imageID); + j["text"] = ToJson(m.text); + j["userData"] = ToJson(m.userData); + return j; +} +json ToJson(const GameMessages::MessageBoxRespond& m) { + json j = json::object(); + j["iButton"] = ToJson(m.iButton); + j["identifier"] = ToJson(m.identifier); + j["userData"] = ToJson(m.userData); + return j; +} +json ToJson(const GameMessages::ChoiceBoxRespond& m) { + json j = json::object(); + j["buttonIdentifier"] = ToJson(m.buttonIdentifier); + j["iButton"] = ToJson(m.iButton); + j["identifier"] = ToJson(m.identifier); + return j; +} +json ToJson(const GameMessages::DisplayChatBubble& m) { + json j = json::object(); + j["wsText"] = ToJson(m.wsText); + return j; +} +json ToJson(const GameMessages::ChangeIdleFlags& m) { + json j = json::object(); + j["flagsOff"] = ToJson(m.flagsOff); + j["flagsOn"] = ToJson(m.flagsOn); + return j; +} +json ToJson(const GameMessages::SetNameBillboardState& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ShowBillboardInteractIcon& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::PlayCinematic& m) { + json j = json::object(); + j["allowGhostUpdates"] = ToJson(m.allowGhostUpdates); + j["bCloseMultiInteract"] = ToJson(m.bCloseMultiInteract); + j["bSendServerNotify"] = ToJson(m.bSendServerNotify); + j["bUseControlledObjectForAudioListener"] = ToJson(m.bUseControlledObjectForAudioListener); + j["endBehavior"] = ToJson(m.endBehavior); + j["hidePlayerDuringCine"] = ToJson(m.hidePlayerDuringCine); + j["leadIn"] = ToJson(m.leadIn); + j["leavePlayerLockedWhenFinished"] = ToJson(m.leavePlayerLockedWhenFinished); + j["lockPlayer"] = ToJson(m.lockPlayer); + j["pathName"] = ToJson(m.pathName); + j["result"] = ToJson(m.result); + j["skipIfSamePath"] = ToJson(m.skipIfSamePath); + j["startTimeAdvance"] = ToJson(m.startTimeAdvance); + return j; +} +json ToJson(const GameMessages::EndCinematic& m) { + json j = json::object(); + j["leadOut"] = ToJson(m.leadOut); + j["leavePlayerLocked"] = ToJson(m.leavePlayerLocked); + j["pathName"] = ToJson(m.pathName); + return j; +} +json ToJson(const GameMessages::CinematicUpdate& m) { + json j = json::object(); + j["event"] = ToJson(m.event); + j["overallTime"] = ToJson(m.overallTime); + j["pathName"] = ToJson(m.pathName); + j["pathTime"] = ToJson(m.pathTime); + j["waypoint"] = ToJson(m.waypoint); + return j; +} +json ToJson(const GameMessages::SlashCommandTextFeedback& m) { + json j = json::object(); + j["text"] = ToJson(m.text); + return j; +} +json ToJson(const GameMessages::PlayEmote& m) { + json j = json::object(); + j["emoteID"] = ToJson(m.emoteID); + j["targetID"] = ToJson(m.targetID); + return j; +} +json ToJson(const GameMessages::SetEmoteLockState& m) { + json j = json::object(); + j["bLock"] = ToJson(m.bLock); + j["emoteID"] = ToJson(m.emoteID); + return j; +} +json ToJson(const GameMessages::DisplayTooltip& m) { + json j = json::object(); + j["doOrDie"] = ToJson(m.doOrDie); + j["noRepeat"] = ToJson(m.noRepeat); + j["noRevive"] = ToJson(m.noRevive); + j["isPropertyTooltip"] = ToJson(m.isPropertyTooltip); + j["show"] = ToJson(m.show); + j["translate"] = ToJson(m.translate); + j["time"] = ToJson(m.time); + j["id"] = ToJson(m.id); + j["localizeParams"] = ToJson(m.localizeParams); + j["imageName"] = ToJson(m.imageName); + j["text"] = ToJson(m.text); + return j; +} +json ToJson(const GameMessages::EmotePlayed& m) { + json j = json::object(); + j["emoteID"] = ToJson(m.emoteID); + j["targetID"] = ToJson(m.targetID); + return j; +} +json ToJson(const GameMessages::AddItemToInventoryClientSync& m) { + json j = json::object(); + j["bBound"] = ToJson(m.bBound); + j["bIsBOE"] = ToJson(m.bIsBOE); + j["bIsBOP"] = ToJson(m.bIsBOP); + j["eLootTypeSource"] = ToJson(m.eLootTypeSource); + j["extraInfo"] = ToJson(m.extraInfo); + j["iObjTemplate"] = ToJson(m.iObjTemplate); + j["iSubkey"] = ToJson(m.iSubkey); + j["invType"] = ToJson(m.invType); + j["itemCount"] = ToJson(m.itemCount); + j["itemsTotal"] = ToJson(m.itemsTotal); + j["newObjID"] = ToJson(m.newObjID); + j["ni3FlyingLootPosit"] = ToJson(m.ni3FlyingLootPosit); + j["showFlyingLoot"] = ToJson(m.showFlyingLoot); + j["slotID"] = ToJson(m.slotID); + return j; +} +json ToJson(const GameMessages::SetInventorySize& m) { + json j = json::object(); + j["inventoryType"] = ToJson(m.inventoryType); + j["size"] = ToJson(m.size); + return j; +} +json ToJson(const GameMessages::RemoveItemFromInventory& m) { + json j = json::object(); + j["bConfirmed"] = ToJson(m.bConfirmed); + j["bDeleteItem"] = ToJson(m.bDeleteItem); + j["bOutSuccess"] = ToJson(m.bOutSuccess); + j["eInvType"] = ToJson(m.eInvType); + j["eLootTypeSource"] = ToJson(m.eLootTypeSource); + j["extraInfo"] = ToJson(m.extraInfo); + j["forceDeletion"] = ToJson(m.forceDeletion); + j["iLootTypeSource"] = ToJson(m.iLootTypeSource); + j["iObjID"] = ToJson(m.iObjID); + j["iObjTemplate"] = ToJson(m.iObjTemplate); + j["iRequestingObjID"] = ToJson(m.iRequestingObjID); + j["iStackCount"] = ToJson(m.iStackCount); + j["iStackRemaining"] = ToJson(m.iStackRemaining); + j["iSubkey"] = ToJson(m.iSubkey); + j["iTradeID"] = ToJson(m.iTradeID); + return j; +} +json ToJson(const GameMessages::EquipInventory& m) { + json j = json::object(); + j["bIgnoreCooldown"] = ToJson(m.bIgnoreCooldown); + j["bOutSuccess"] = ToJson(m.bOutSuccess); + j["itemToEquip"] = ToJson(m.itemToEquip); + return j; +} +json ToJson(const GameMessages::UnEquipInventory& m) { + json j = json::object(); + j["bEvenIfDead"] = ToJson(m.bEvenIfDead); + j["bIgnoreCooldown"] = ToJson(m.bIgnoreCooldown); + j["bOutSuccess"] = ToJson(m.bOutSuccess); + j["itemToUnequip"] = ToJson(m.itemToUnequip); + j["replacementObjectID"] = ToJson(m.replacementObjectID); + return j; +} +json ToJson(const GameMessages::MoveItemInInventory& m) { + json j = json::object(); + j["destInvType"] = ToJson(m.destInvType); + j["iObjID"] = ToJson(m.iObjID); + j["inventoryType"] = ToJson(m.inventoryType); + j["responseCode"] = ToJson(m.responseCode); + j["slot"] = ToJson(m.slot); + return j; +} +json ToJson(const GameMessages::MoveItemBetweenInventoryTypes& m) { + json j = json::object(); + j["inventoryTypeA"] = ToJson(m.inventoryTypeA); + j["inventoryTypeB"] = ToJson(m.inventoryTypeB); + j["objectID"] = ToJson(m.objectID); + j["showFlyingLoot"] = ToJson(m.showFlyingLoot); + j["stackCount"] = ToJson(m.stackCount); + j["templateID"] = ToJson(m.templateID); + return j; +} +json ToJson(const GameMessages::RequestMoveItemBetweenInventoryTypes& m) { + json j = json::object(); + j["bAllowPartial"] = ToJson(m.bAllowPartial); + j["destSlot"] = ToJson(m.destSlot); + j["iStackCount"] = ToJson(m.iStackCount); + j["invTypeDst"] = ToJson(m.invTypeDst); + j["invTypeSrc"] = ToJson(m.invTypeSrc); + j["itemID"] = ToJson(m.itemID); + j["showFlyingLoot"] = ToJson(m.showFlyingLoot); + j["subkey"] = ToJson(m.subkey); + j["itemLOT"] = ToJson(m.itemLOT); + return j; +} +json ToJson(const GameMessages::ResponseMoveItemBetweenInventoryTypes& m) { + json j = json::object(); + j["inventoryTypeDestination"] = ToJson(m.inventoryTypeDestination); + j["inventoryTypeSource"] = ToJson(m.inventoryTypeSource); + j["response"] = ToJson(m.response); + return j; +} +json ToJson(const GameMessages::MoveInventoryBatch& m) { + json j = json::object(); + j["bAllowPartial"] = ToJson(m.bAllowPartial); + j["bOutSuccess"] = ToJson(m.bOutSuccess); + j["count"] = ToJson(m.count); + j["dstBag"] = ToJson(m.dstBag); + j["moveLOT"] = ToJson(m.moveLOT); + j["moveSubkey"] = ToJson(m.moveSubkey); + j["showFlyingLoot"] = ToJson(m.showFlyingLoot); + j["srcBag"] = ToJson(m.srcBag); + j["startObjectID"] = ToJson(m.startObjectID); + return j; +} +json ToJson(const GameMessages::NotifyNotEnoughInvSpace& m) { + json j = json::object(); + j["freeSlotsNeeded"] = ToJson(m.freeSlotsNeeded); + j["inventoryType"] = ToJson(m.inventoryType); + return j; +} +json ToJson(const GameMessages::UpdateInventoryUi& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::MarkInventoryItemAsActive& m) { + json j = json::object(); + j["bActive"] = ToJson(m.bActive); + j["iType"] = ToJson(m.iType); + j["itemID"] = ToJson(m.itemID); + return j; +} +json ToJson(const GameMessages::ConsumeClientItem& m) { + json j = json::object(); + j["bSuccess"] = ToJson(m.bSuccess); + j["item"] = ToJson(m.item); + return j; +} +json ToJson(const GameMessages::ClientItemConsumed& m) { + json j = json::object(); + j["item"] = ToJson(m.item); + return j; +} +json ToJson(const GameMessages::UseNonEquipmentItem& m) { + json j = json::object(); + j["itemToUse"] = ToJson(m.itemToUse); + return j; +} +json ToJson(const GameMessages::UseItemResult& m) { + json j = json::object(); + j["itemTemplateID"] = ToJson(m.itemTemplateID); + j["useItemResult"] = ToJson(m.useItemResult); + return j; +} +json ToJson(const GameMessages::UseItemRequirementsResponse& m) { + json j = json::object(); + j["eUseResponse"] = ToJson(m.eUseResponse); + return j; +} +json ToJson(const GameMessages::SetConsumableItem& m) { + json j = json::object(); + j["itemTemplateID"] = ToJson(m.itemTemplateID); + return j; +} +json ToJson(const GameMessages::PushEquippedItemsState& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::PopEquippedItemsState& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ResyncEquipment& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::UpdateInventoryGroup& m) { + json j = json::object(); + j["action"] = ToJson(m.action); + j["groupID"] = ToJson(m.groupID); + j["groupName"] = ToJson(m.groupName); + j["inventoryType"] = ToJson(m.inventoryType); + j["locked"] = ToJson(m.locked); + return j; +} +json ToJson(const GameMessages::UpdateInventoryGroupContents& m) { + json j = json::object(); + j["action"] = ToJson(m.action); + j["groupID"] = ToJson(m.groupID); + j["inventoryType"] = ToJson(m.inventoryType); + j["lot"] = ToJson(m.lot); + return j; +} +json ToJson(const GameMessages::UseItemOnClient& m) { + json j = json::object(); + j["playerId"] = ToJson(m.playerId); + j["itemToUse"] = ToJson(m.itemToUse); + j["itemType"] = ToJson(m.itemType); + j["itemLOT"] = ToJson(m.itemLOT); + j["targetPosition"] = ToJson(m.targetPosition); + return j; +} +json ToJson(const GameMessages::DropClientLoot& m) { + json j = json::object(); + j["sourceID"] = ToJson(m.sourceID); + j["item"] = ToJson(m.item); + j["currency"] = ToJson(m.currency); + j["spawnPos"] = ToJson(m.spawnPos); + j["finalPosition"] = ToJson(m.finalPosition); + j["count"] = ToJson(m.count); + j["bUsePosition"] = ToJson(m.bUsePosition); + j["lootID"] = ToJson(m.lootID); + j["ownerID"] = ToJson(m.ownerID); + return j; +} +json ToJson(const GameMessages::PickupItem& m) { + json j = json::object(); + j["lootID"] = ToJson(m.lootID); + j["lootOwnerID"] = ToJson(m.lootOwnerID); + return j; +} +json ToJson(const GameMessages::TeamPickupItem& m) { + json j = json::object(); + j["lootID"] = ToJson(m.lootID); + j["lootOwnerID"] = ToJson(m.lootOwnerID); + return j; +} +json ToJson(const GameMessages::OfferMission& m) { + json j = json::object(); + j["missionID"] = ToJson(m.missionID); + j["offerer"] = ToJson(m.offerer); + return j; +} +json ToJson(const GameMessages::RespondToMission& m) { + json j = json::object(); + j["missionID"] = ToJson(m.missionID); + j["playerID"] = ToJson(m.playerID); + j["receiver"] = ToJson(m.receiver); + j["rewardItem"] = ToJson(m.rewardItem); + return j; +} +json ToJson(const GameMessages::NotifyMission& m) { + json j = json::object(); + j["missionID"] = ToJson(m.missionID); + j["missionState"] = ToJson(m.missionState); + j["sendingRewards"] = ToJson(m.sendingRewards); + return j; +} +json ToJson(const GameMessages::NotifyMissionTask& m) { + json j = json::object(); + j["missionID"] = ToJson(m.missionID); + j["taskMask"] = ToJson(m.taskMask); + j["updates"] = ToJson(m.updates); + return j; +} +json ToJson(const GameMessages::ResetMissions& m) { + json j = json::object(); + j["missionID"] = ToJson(m.missionID); + return j; +} +json ToJson(const GameMessages::MissionDialogueOK& m) { + json j = json::object(); + j["bIsComplete"] = ToJson(m.bIsComplete); + j["iMissionState"] = ToJson(m.iMissionState); + j["missionID"] = ToJson(m.missionID); + j["responder"] = ToJson(m.responder); + return j; +} +json ToJson(const GameMessages::MissionDialogueCancelled& m) { + json j = json::object(); + j["bIsComplete"] = ToJson(m.bIsComplete); + j["iMissionState"] = ToJson(m.iMissionState); + j["missionID"] = ToJson(m.missionID); + j["responder"] = ToJson(m.responder); + return j; +} +json ToJson(const GameMessages::RequestLinkedMission& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + j["missionID"] = ToJson(m.missionID); + j["bMissionOffered"] = ToJson(m.bMissionOffered); + return j; +} +json ToJson(const GameMessages::SetFlag& m) { + json j = json::object(); + j["bFlag"] = ToJson(m.bFlag); + j["iFlagID"] = ToJson(m.iFlagID); + return j; +} +json ToJson(const GameMessages::NotifyClientFlagChange& m) { + json j = json::object(); + j["bFlag"] = ToJson(m.bFlag); + j["iFlagID"] = ToJson(m.iFlagID); + return j; +} +json ToJson(const GameMessages::HasBeenCollected& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + return j; +} +json ToJson(const GameMessages::NotifyLevelRewards& m) { + json j = json::object(); + j["level"] = ToJson(m.level); + j["sendingRewards"] = ToJson(m.sendingRewards); + return j; +} +json ToJson(const GameMessages::Teleport& m) { + json j = json::object(); + j["bIgnoreY"] = ToJson(m.bIgnoreY); + j["bSetRotation"] = ToJson(m.bSetRotation); + j["bSkipAllChecks"] = ToJson(m.bSkipAllChecks); + j["pos"] = ToJson(m.pos); + j["bUseNavmesh"] = ToJson(m.bUseNavmesh); + j["rot"] = ToJson(m.rot); + return j; +} +json ToJson(const GameMessages::StartPathing& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::PlatformResync& m) { + json j = json::object(); + j["bReverse"] = ToJson(m.bReverse); + j["bStopAtDesiredWaypoint"] = ToJson(m.bStopAtDesiredWaypoint); + j["eCommand"] = ToJson(m.eCommand); + j["eState"] = ToJson(m.eState); + j["eUnexpectedCommand"] = ToJson(m.eUnexpectedCommand); + j["fIdleTimeElapsed"] = ToJson(m.fIdleTimeElapsed); + j["fMoveTimeElapsed"] = ToJson(m.fMoveTimeElapsed); + j["fPercentBetweenPoints"] = ToJson(m.fPercentBetweenPoints); + j["iDesiredWaypointIndex"] = ToJson(m.iDesiredWaypointIndex); + j["iIndex"] = ToJson(m.iIndex); + j["iNextIndex"] = ToJson(m.iNextIndex); + j["ptUnexpectedLocation"] = ToJson(m.ptUnexpectedLocation); + j["qUnexpectedRotation"] = ToJson(m.qUnexpectedRotation); + return j; +} +json ToJson(const GameMessages::RequestPlatformResync& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::OrientToAngle& m) { + json j = json::object(); + j["bRelativeToCurrent"] = ToJson(m.bRelativeToCurrent); + j["fAngle"] = ToJson(m.fAngle); + return j; +} +json ToJson(const GameMessages::LockNodeRotation& m) { + json j = json::object(); + j["nodeName"] = ToJson(m.nodeName); + return j; +} +json ToJson(const GameMessages::SetGravityScale& m) { + json j = json::object(); + j["scale"] = ToJson(m.scale); + return j; +} +json ToJson(const GameMessages::SetJetPackMode& m) { + json j = json::object(); + j["bBypassChecks"] = ToJson(m.bBypassChecks); + j["bDoHover"] = ToJson(m.bDoHover); + j["bUse"] = ToJson(m.bUse); + j["effectID"] = ToJson(m.effectID); + j["fAirspeed"] = ToJson(m.fAirspeed); + j["fMaxAirspeed"] = ToJson(m.fMaxAirspeed); + j["fVertVel"] = ToJson(m.fVertVel); + j["iWarningEffectID"] = ToJson(m.iWarningEffectID); + return j; +} +json ToJson(const GameMessages::SetPlayerControlScheme& m) { + json j = json::object(); + j["bDelayCamSwitchIfInCinematic"] = ToJson(m.bDelayCamSwitchIfInCinematic); + j["bSwitchCam"] = ToJson(m.bSwitchCam); + j["iScheme"] = ToJson(m.iScheme); + return j; +} +json ToJson(const GameMessages::PlayerReachedRespawnCheckpoint& m) { + json j = json::object(); + j["pos"] = ToJson(m.pos); + j["rot"] = ToJson(m.rot); + return j; +} +json ToJson(const GameMessages::SetRailMovement& m) { + json j = json::object(); + j["pathGoForward"] = ToJson(m.pathGoForward); + j["pathName"] = ToJson(m.pathName); + j["pathStart"] = ToJson(m.pathStart); + j["railActivatorComponentID"] = ToJson(m.railActivatorComponentID); + j["railActivatorObjectID"] = ToJson(m.railActivatorObjectID); + return j; +} +json ToJson(const GameMessages::StartRailMovement& m) { + json j = json::object(); + j["bDamageImmune"] = ToJson(m.bDamageImmune); + j["bNoAggro"] = ToJson(m.bNoAggro); + j["bNotifyActor"] = ToJson(m.bNotifyActor); + j["bShowNameBillboard"] = ToJson(m.bShowNameBillboard); + j["bCameraLocked"] = ToJson(m.bCameraLocked); + j["bCollisionEnabled"] = ToJson(m.bCollisionEnabled); + j["loopSound"] = ToJson(m.loopSound); + j["goForward"] = ToJson(m.goForward); + j["pathName"] = ToJson(m.pathName); + j["pathStart"] = ToJson(m.pathStart); + j["railActivatorComponentID"] = ToJson(m.railActivatorComponentID); + j["railActivatorObjectID"] = ToJson(m.railActivatorObjectID); + j["startSound"] = ToJson(m.startSound); + j["stopSound"] = ToJson(m.stopSound); + j["bUseDB"] = ToJson(m.bUseDB); + return j; +} +json ToJson(const GameMessages::ClientRailMovementReady& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::CancelRailMovement& m) { + json j = json::object(); + j["bImmediate"] = ToJson(m.bImmediate); + return j; +} +json ToJson(const GameMessages::RequestRailActivatorState& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::NotifyRailActivatorStateChange& m) { + json j = json::object(); + j["bActive"] = ToJson(m.bActive); + return j; +} +json ToJson(const GameMessages::PlayerRailArrivedNotification& m) { + json j = json::object(); + j["pathName"] = ToJson(m.pathName); + j["waypointNumber"] = ToJson(m.waypointNumber); + return j; +} +json ToJson(const GameMessages::SetMountInventoryID& m) { + json j = json::object(); + j["inventoryMountID"] = ToJson(m.inventoryMountID); + return j; +} +json ToJson(const GameMessages::DismountComplete& m) { + json j = json::object(); + j["mountID"] = ToJson(m.mountID); + return j; +} +json ToJson(const GameMessages::AcknowledgePossession& m) { + json j = json::object(); + j["possessedObjID"] = ToJson(m.possessedObjID); + return j; +} +json ToJson(const GameMessages::ModifyGhostingDistance& m) { + json j = json::object(); + j["fDistanceScalar"] = ToJson(m.fDistanceScalar); + return j; +} +json ToJson(const GameMessages::ToggleGhostReferenceOverride& m) { + json j = json::object(); + j["bOverride"] = ToJson(m.bOverride); + return j; +} +json ToJson(const GameMessages::SetGhostReferencePosition& m) { + json j = json::object(); + j["pos"] = ToJson(m.pos); + return j; +} +json ToJson(const GameMessages::PlayerSetCameraCyclingMode& m) { + json j = json::object(); + j["bAllowCyclingWhileDeadOnly"] = ToJson(m.bAllowCyclingWhileDeadOnly); + j["cyclingMode"] = ToJson(m.cyclingMode); + return j; +} +json ToJson(const GameMessages::ForceCameraTargetCycle& m) { + json j = json::object(); + j["bForceCycling"] = ToJson(m.bForceCycling); + j["cyclingMode"] = ToJson(m.cyclingMode); + j["optionalTargetID"] = ToJson(m.optionalTargetID); + return j; +} +json ToJson(const GameMessages::FireEventClientSide& m) { + json j = json::object(); + j["args"] = ToJson(m.args); + j["object"] = ToJson(m.object); + j["param1"] = ToJson(m.param1); + j["param2"] = ToJson(m.param2); + j["senderID"] = ToJson(m.senderID); + return j; +} +json ToJson(const GameMessages::FireEventServerSide& m) { + json j = json::object(); + j["args"] = ToJson(m.args); + j["param1"] = ToJson(m.param1); + j["param2"] = ToJson(m.param2); + j["param3"] = ToJson(m.param3); + j["senderID"] = ToJson(m.senderID); + return j; +} +json ToJson(const GameMessages::NotifyClientObject& m) { + json j = json::object(); + j["name"] = ToJson(m.name); + j["param1"] = ToJson(m.param1); + j["param2"] = ToJson(m.param2); + j["paramObj"] = ToJson(m.paramObj); + j["paramStr"] = ToJson(m.paramStr); + return j; +} +json ToJson(const GameMessages::NotifyClientZoneObject& m) { + json j = json::object(); + j["name"] = ToJson(m.name); + j["param1"] = ToJson(m.param1); + j["param2"] = ToJson(m.param2); + j["paramObj"] = ToJson(m.paramObj); + j["paramStr"] = ToJson(m.paramStr); + return j; +} +json ToJson(const GameMessages::NotifyObject& m) { + json j = json::object(); + j["objIDSender"] = ToJson(m.objIDSender); + j["name"] = ToJson(m.name); + j["param1"] = ToJson(m.param1); + j["param2"] = ToJson(m.param2); + return j; +} +json ToJson(const GameMessages::ScriptNetworkVarUpdate& m) { + json j = json::object(); + j["tableOfVars"] = ToJson(m.tableOfVars); + return j; +} +json ToJson(const GameMessages::NotifyClientFailedPrecondition& m) { + json j = json::object(); + j["failedReason"] = ToJson(m.failedReason); + j["preconditionID"] = ToJson(m.preconditionID); + return j; +} +json ToJson(const GameMessages::TerminateInteraction& m) { + json j = json::object(); + j["terminator"] = ToJson(m.terminator); + j["type"] = ToJson(m.type); + return j; +} +json ToJson(const GameMessages::SetName& m) { + json j = json::object(); + j["name"] = ToJson(m.name); + return j; +} +json ToJson(const GameMessages::RequestUse& m) { + json j = json::object(); + j["bIsMultiInteractUse"] = ToJson(m.bIsMultiInteractUse); + j["multiInteractID"] = ToJson(m.multiInteractID); + j["multiInteractType"] = ToJson(m.multiInteractType); + j["object"] = ToJson(m.object); + j["secondary"] = ToJson(m.secondary); + return j; +} +json ToJson(const GameMessages::RequestServerObjectInfo& m) { + json j = json::object(); + j["bVerbose"] = ToJson(m.bVerbose); + j["clientId"] = ToJson(m.clientId); + j["targetForReport"] = ToJson(m.targetForReport); + return j; +} +json ToJson(const GameMessages::NotifyPetTamingMinigame& m) { + json j = json::object(); + j["PetID"] = ToJson(m.PetID); + j["PlayerTamingID"] = ToJson(m.PlayerTamingID); + j["bForceTeleport"] = ToJson(m.bForceTeleport); + j["notifyType"] = ToJson(m.notifyType); + j["petsDestPos"] = ToJson(m.petsDestPos); + j["telePos"] = ToJson(m.telePos); + j["teleRot"] = ToJson(m.teleRot); + return j; +} +json ToJson(const GameMessages::ClientExitTamingMinigame& m) { + json j = json::object(); + j["bVoluntaryExit"] = ToJson(m.bVoluntaryExit); + return j; +} +json ToJson(const GameMessages::StartServerPetMinigameTimer& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::NotifyTamingModelLoadedOnServer& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::NotifyPetTamingPuzzleSelected& m) { + json j = json::object(); + j["bricks"] = ToJson(m.bricks); + return j; +} +json ToJson(const GameMessages::PetTamingTryBuild& m) { + json j = json::object(); + j["bricks"] = ToJson(m.bricks); + j["clientFailed"] = ToJson(m.clientFailed); + return j; +} +json ToJson(const GameMessages::PetTamingTryBuildResult& m) { + json j = json::object(); + j["bSuccess"] = ToJson(m.bSuccess); + j["iNumCorrect"] = ToJson(m.iNumCorrect); + return j; +} +json ToJson(const GameMessages::NotifyTamingBuildSuccess& m) { + json j = json::object(); + j["buildPosition"] = ToJson(m.buildPosition); + return j; +} +json ToJson(const GameMessages::PetResponse& m) { + json j = json::object(); + j["ObjIDPet"] = ToJson(m.ObjIDPet); + j["iPetCommandType"] = ToJson(m.iPetCommandType); + j["iResponse"] = ToJson(m.iResponse); + j["iTypeID"] = ToJson(m.iTypeID); + return j; +} +json ToJson(const GameMessages::AddPetToPlayer& m) { + json j = json::object(); + j["iElementalType"] = ToJson(m.iElementalType); + j["name"] = ToJson(m.name); + j["petDBID"] = ToJson(m.petDBID); + j["petLOT"] = ToJson(m.petLOT); + return j; +} +json ToJson(const GameMessages::RegisterPetID& m) { + json j = json::object(); + j["objID"] = ToJson(m.objID); + return j; +} +json ToJson(const GameMessages::RegisterPetDBID& m) { + json j = json::object(); + j["petDBID"] = ToJson(m.petDBID); + return j; +} +json ToJson(const GameMessages::ShowPetActionButton& m) { + json j = json::object(); + j["ButtonLabel"] = ToJson(m.ButtonLabel); + j["bShow"] = ToJson(m.bShow); + return j; +} +json ToJson(const GameMessages::BouncerActiveStatus& m) { + json j = json::object(); + j["bActive"] = ToJson(m.bActive); + return j; +} +json ToJson(const GameMessages::RequestSetPetName& m) { + json j = json::object(); + j["name"] = ToJson(m.name); + return j; +} +json ToJson(const GameMessages::SetPetName& m) { + json j = json::object(); + j["name"] = ToJson(m.name); + j["petDBID"] = ToJson(m.petDBID); + return j; +} +json ToJson(const GameMessages::SetPetNameModerated& m) { + json j = json::object(); + j["PetDBID"] = ToJson(m.PetDBID); + j["nModerationStatus"] = ToJson(m.nModerationStatus); + return j; +} +json ToJson(const GameMessages::PetNameChanged& m) { + json j = json::object(); + j["moderationStatus"] = ToJson(m.moderationStatus); + j["name"] = ToJson(m.name); + j["ownerName"] = ToJson(m.ownerName); + return j; +} +json ToJson(const GameMessages::CommandPet& m) { + json j = json::object(); + j["GenericPosInfo"] = ToJson(m.GenericPosInfo); + j["ObjIDSource"] = ToJson(m.ObjIDSource); + j["iPetCommandType"] = ToJson(m.iPetCommandType); + j["iTypeID"] = ToJson(m.iTypeID); + j["overrideObey"] = ToJson(m.overrideObey); + return j; +} +json ToJson(const GameMessages::DespawnPet& m) { + json j = json::object(); + j["bDeletePet"] = ToJson(m.bDeletePet); + return j; +} +json ToJson(const GameMessages::UpdateChatMode& m) { + json j = json::object(); + j["level"] = ToJson(m.level); + return j; +} +json ToJson(const GameMessages::SetGMLevel& m) { + json j = json::object(); + j["bOverride"] = ToJson(m.bOverride); + j["level"] = ToJson(m.level); + return j; +} +json ToJson(const GameMessages::ModifyLEGOScore& m) { + json j = json::object(); + j["score"] = ToJson(m.score); + j["sourceType"] = ToJson(m.sourceType); + return j; +} +json ToJson(const GameMessages::SetCurrency& m) { + json j = json::object(); + j["currency"] = ToJson(m.currency); + j["lootType"] = ToJson(m.lootType); + j["position"] = ToJson(m.position); + j["sourceLOT"] = ToJson(m.sourceLOT); + j["sourceID"] = ToJson(m.sourceID); + j["sourceTradeID"] = ToJson(m.sourceTradeID); + j["sourceType"] = ToJson(m.sourceType); + return j; +} +json ToJson(const GameMessages::UpdateReputation& m) { + json j = json::object(); + j["reputation"] = ToJson(m.reputation); + return j; +} +json ToJson(const GameMessages::SetTooltipFlag& m) { + json j = json::object(); + j["bFlag"] = ToJson(m.bFlag); + j["iToolTip"] = ToJson(m.iToolTip); + return j; +} +json ToJson(const GameMessages::SetLastCustomBuild& m) { + json j = json::object(); + j["tokenizedLOTList"] = ToJson(m.tokenizedLOTList); + return j; +} +json ToJson(const GameMessages::ToggleGMInvis& m) { + json j = json::object(); + j["bStateOut"] = ToJson(m.bStateOut); + return j; +} +json ToJson(const GameMessages::PickupCurrency& m) { + json j = json::object(); + j["currency"] = ToJson(m.currency); + j["position"] = ToJson(m.position); + return j; +} +json ToJson(const GameMessages::ModifyPlayerZoneStatistic& m) { + json j = json::object(); + j["bSet"] = ToJson(m.bSet); + j["statName"] = ToJson(m.statName); + j["statValue"] = ToJson(m.statValue); + j["zoneID"] = ToJson(m.zoneID); + return j; +} +json ToJson(const GameMessages::UpdatePlayerStatistic& m) { + json j = json::object(); + j["updateID"] = ToJson(m.updateID); + j["updateValue"] = ToJson(m.updateValue); + return j; +} +json ToJson(const GameMessages::ParseChatMessage& m) { + json j = json::object(); + j["iClientState"] = ToJson(m.iClientState); + j["wsString"] = ToJson(m.wsString); + return j; +} +json ToJson(const GameMessages::ReportBug& m) { + json j = json::object(); + j["body"] = ToJson(m.body); + j["clientVersion"] = ToJson(m.clientVersion); + j["otherPlayerID"] = ToJson(m.otherPlayerID); + j["selection"] = ToJson(m.selection); + return j; +} +json ToJson(const GameMessages::VerifyAck& m) { + json j = json::object(); + j["bDifferent"] = ToJson(m.bDifferent); + j["sBitStream"] = ToJson(m.sBitStream); + j["uiHandle"] = ToJson(m.uiHandle); + return j; +} +json ToJson(const GameMessages::Help& m) { + json j = json::object(); + j["helpId"] = ToJson(m.helpId); + return j; +} +json ToJson(const GameMessages::DisplayGuildCreateBox& m) { + json j = json::object(); + j["bShow"] = ToJson(m.bShow); + return j; +} +json ToJson(const GameMessages::OpenPropertyVendor& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::OpenPropertyManagement& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::DownloadPropertyData& m) { + json j = json::object(); + j["propertyId"] = ToJson(m.propertyId); + j["templateId"] = ToJson(m.templateId); + j["mapId"] = ToJson(m.mapId); + j["vendorMapId"] = ToJson(m.vendorMapId); + j["cloneId"] = ToJson(m.cloneId); + j["name"] = ToJson(m.name); + j["description"] = ToJson(m.description); + j["ownerName"] = ToJson(m.ownerName); + j["ownerId"] = ToJson(m.ownerId); + j["propertyType"] = ToJson(m.propertyType); + j["zoneCode"] = ToJson(m.zoneCode); + j["rent"] = ToJson(m.rent); + j["rentalPeriod"] = ToJson(m.rentalPeriod); + j["expirationDate"] = ToJson(m.expirationDate); + j["rentAmount"] = ToJson(m.rentAmount); + j["reputation"] = ToJson(m.reputation); + j["spawnName"] = ToJson(m.spawnName); + j["templateName"] = ToJson(m.templateName); + j["templateDescription"] = ToJson(m.templateDescription); + j["rentDuration"] = ToJson(m.rentDuration); + j["votes"] = ToJson(m.votes); + j["durationType"] = ToJson(m.durationType); + j["renew"] = ToJson(m.renew); + j["ownerAccountID"] = ToJson(m.ownerAccountID); + j["moderationStatus"] = ToJson(m.moderationStatus); + j["rejectionReason"] = ToJson(m.rejectionReason); + j["lastLogoutTime"] = ToJson(m.lastLogoutTime); + j["dayOfMonthPlaqueWasBought"] = ToJson(m.dayOfMonthPlaqueWasBought); + j["repAchievementReq"] = ToJson(m.repAchievementReq); + j["zonePosition"] = ToJson(m.zonePosition); + j["maxBuildHeight"] = ToJson(m.maxBuildHeight); + j["rentalDate"] = ToJson(m.rentalDate); + j["accessType"] = ToJson(m.accessType); + j["pathPositions"] = ToJson(m.pathPositions); + return j; +} +json ToJson(const GameMessages::PropertyRentalResponse& m) { + json j = json::object(); + j["cloneid"] = ToJson(m.cloneid); + j["code"] = ToJson(m.code); + j["propertyID"] = ToJson(m.propertyID); + j["rentdue"] = ToJson(m.rentdue); + return j; +} +json ToJson(const GameMessages::PropertyEntranceBegin& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::PropertySelectQuery& m) { + json j = json::object(); + j["navOffset"] = ToJson(m.navOffset); + j["thereAreMore"] = ToJson(m.thereAreMore); + j["cloneId"] = ToJson(m.cloneId); + j["hasFeaturedProperty"] = ToJson(m.hasFeaturedProperty); + j["wasFriends"] = ToJson(m.wasFriends); + j["properties"] = ToJson(m.properties); + return j; +} +json ToJson(const GameMessages::PropertySelectQuery::PropertyInfo& m) { + json j = json::object(); + j["cloneId"] = ToJson(m.cloneId); + j["ownerName"] = ToJson(m.ownerName); + j["name"] = ToJson(m.name); + j["description"] = ToJson(m.description); + j["reputation"] = ToJson(m.reputation); + j["isBff"] = ToJson(m.isBff); + j["isFriend"] = ToJson(m.isFriend); + j["isModApproved"] = ToJson(m.isModApproved); + j["isAlt"] = ToJson(m.isAlt); + j["isOwned"] = ToJson(m.isOwned); + j["accessType"] = ToJson(m.accessType); + j["dateLastPublished"] = ToJson(m.dateLastPublished); + j["performanceCost"] = ToJson(m.performanceCost); + return j; +} +json ToJson(const GameMessages::GetModelsOnProperty& m) { + json j = json::object(); + j["models"] = ToJson(m.models); + return j; +} +json ToJson(const GameMessages::PlaceModelResponse& m) { + json j = json::object(); + j["position"] = ToJson(m.position); + j["propertyPlaqueID"] = ToJson(m.propertyPlaqueID); + j["response"] = ToJson(m.response); + j["rotation"] = ToJson(m.rotation); + return j; +} +json ToJson(const GameMessages::RequeryPropertyModels& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::HandleUGCEquipPreCreateBasedOnEditMode& m) { + json j = json::object(); + j["modelCount"] = ToJson(m.modelCount); + j["modelID"] = ToJson(m.modelID); + return j; +} +json ToJson(const GameMessages::HandleUGCEquipPostDeleteBasedOnEditMode& m) { + json j = json::object(); + j["invItem"] = ToJson(m.invItem); + j["itemsTotal"] = ToJson(m.itemsTotal); + return j; +} +json ToJson(const GameMessages::SetPropertyAccess& m) { + json j = json::object(); + j["accessType"] = ToJson(m.accessType); + j["renew"] = ToJson(m.renew); + return j; +} +json ToJson(const GameMessages::UpdatePropertyOrModelForFilterCheck& m) { + json j = json::object(); + j["isProperty"] = ToJson(m.isProperty); + j["ugcId"] = ToJson(m.ugcId); + j["playerId"] = ToJson(m.playerId); + j["worldId"] = ToJson(m.worldId); + j["newDescription"] = ToJson(m.newDescription); + j["newName"] = ToJson(m.newName); + return j; +} +json ToJson(const GameMessages::QueryPropertyData& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::PropertyEditorBegin& m) { + json j = json::object(); + j["distanceType"] = ToJson(m.distanceType); + j["propertyObjectID"] = ToJson(m.propertyObjectID); + j["startMode"] = ToJson(m.startMode); + j["startPaused"] = ToJson(m.startPaused); + return j; +} +json ToJson(const GameMessages::PropertyEditorEnd& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::PropertyContentsFromClient& m) { + json j = json::object(); + j["queryDB"] = ToJson(m.queryDB); + return j; +} +json ToJson(const GameMessages::ZonePropertyModelEquipped& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + j["propertyID"] = ToJson(m.propertyID); + return j; +} +json ToJson(const GameMessages::ZonePropertyModelRotated& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + j["propertyID"] = ToJson(m.propertyID); + return j; +} +json ToJson(const GameMessages::PlacePropertyModel& m) { + json j = json::object(); + j["modelID"] = ToJson(m.modelID); + return j; +} +json ToJson(const GameMessages::UpdateModelFromClient& m) { + json j = json::object(); + j["modelID"] = ToJson(m.modelID); + j["position"] = ToJson(m.position); + j["rotation"] = ToJson(m.rotation); + return j; +} +json ToJson(const GameMessages::DeleteModelFromClient& m) { + json j = json::object(); + j["modelID"] = ToJson(m.modelID); + j["reason"] = ToJson(m.reason); + return j; +} +json ToJson(const GameMessages::PropertyEntranceSync& m) { + json j = json::object(); + j["includeNullAddress"] = ToJson(m.includeNullAddress); + j["includeNullDescription"] = ToJson(m.includeNullDescription); + j["playersOwn"] = ToJson(m.playersOwn); + j["updateUI"] = ToJson(m.updateUI); + j["numResults"] = ToJson(m.numResults); + j["reputationTime"] = ToJson(m.reputationTime); + j["sortMethod"] = ToJson(m.sortMethod); + j["startIndex"] = ToJson(m.startIndex); + j["filterText"] = ToJson(m.filterText); + return j; +} +json ToJson(const GameMessages::EnterProperty1& m) { + json j = json::object(); + j["index"] = ToJson(m.index); + j["returnToZone"] = ToJson(m.returnToZone); + return j; +} +json ToJson(const GameMessages::UpdatePropertyPerformanceCost& m) { + json j = json::object(); + j["performanceCost"] = ToJson(m.performanceCost); + return j; +} +json ToJson(const GameMessages::ReportOffensiveModel& m) { + json j = json::object(); + j["description"] = ToJson(m.description); + j["offensiveObjectID"] = ToJson(m.offensiveObjectID); + return j; +} +json ToJson(const GameMessages::ReportOffensiveProperty& m) { + json j = json::object(); + j["description"] = ToJson(m.description); + j["propertyPlaqueObjectID"] = ToJson(m.propertyPlaqueObjectID); + return j; +} +json ToJson(const GameMessages::GetHotPropertyData& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::NewsSendHotPropertiesInfoToClient& m) { + json j = json::object(); + j["properties"] = ToJson(m.properties); + return j; +} +json ToJson(const GameMessages::NewsSendHotPropertiesInfoToClient::HotPropertyInfo& m) { + json j = json::object(); + j["propertyId"] = ToJson(m.propertyId); + j["ownerId"] = ToJson(m.ownerId); + j["ownerName"] = ToJson(m.ownerName); + j["reputation"] = ToJson(m.reputation); + j["templateId"] = ToJson(m.templateId); + j["name"] = ToJson(m.name); + j["description"] = ToJson(m.description); + j["performanceCost"] = ToJson(m.performanceCost); + j["lastPublished"] = ToJson(m.lastPublished); + j["cloneId"] = ToJson(m.cloneId); + return j; +} +json ToJson(const GameMessages::PlayBehaviorSound& m) { + json j = json::object(); + j["soundID"] = ToJson(m.soundID); + return j; +} +json ToJson(const GameMessages::RebuildNotifyState& m) { + json j = json::object(); + j["prevState"] = ToJson(m.prevState); + j["state"] = ToJson(m.state); + j["player"] = ToJson(m.player); + return j; +} +json ToJson(const GameMessages::EnableRebuild& m) { + json j = json::object(); + j["bEnable"] = ToJson(m.bEnable); + j["bFail"] = ToJson(m.bFail); + j["bSuccess"] = ToJson(m.bSuccess); + j["eFailReason"] = ToJson(m.eFailReason); + j["fDuration"] = ToJson(m.fDuration); + j["user"] = ToJson(m.user); + return j; +} +json ToJson(const GameMessages::RebuildCancel& m) { + json j = json::object(); + j["bEarlyRelease"] = ToJson(m.bEarlyRelease); + j["userID"] = ToJson(m.userID); + return j; +} +json ToJson(const GameMessages::ModuleAssemblyDBDataForClient& m) { + json j = json::object(); + j["assemblyID"] = ToJson(m.assemblyID); + j["blob"] = ToJson(m.blob); + return j; +} +json ToJson(const GameMessages::ModuleAssemblyQueryData& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ModularAssemblyNIFCompleted& m) { + json j = json::object(); + j["objectID"] = ToJson(m.objectID); + return j; +} +json ToJson(const GameMessages::NotifyVehicleOfRacingObject& m) { + json j = json::object(); + j["racingObjectID"] = ToJson(m.racingObjectID); + return j; +} +json ToJson(const GameMessages::RacingPlayerLoaded& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + j["vehicleID"] = ToJson(m.vehicleID); + return j; +} +json ToJson(const GameMessages::VehicleUnlockInput& m) { + json j = json::object(); + j["bLockWheels"] = ToJson(m.bLockWheels); + return j; +} +json ToJson(const GameMessages::VehicleSetWheelLockState& m) { + json j = json::object(); + j["bExtraFriction"] = ToJson(m.bExtraFriction); + j["bLocked"] = ToJson(m.bLocked); + return j; +} +json ToJson(const GameMessages::RacingSetPlayerResetInfo& m) { + json j = json::object(); + j["currentLap"] = ToJson(m.currentLap); + j["furthestResetPlane"] = ToJson(m.furthestResetPlane); + j["playerID"] = ToJson(m.playerID); + j["respawnPos"] = ToJson(m.respawnPos); + j["upcomingPlane"] = ToJson(m.upcomingPlane); + return j; +} +json ToJson(const GameMessages::RacingResetPlayerToLastReset& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + return j; +} +json ToJson(const GameMessages::VehicleStopBoost& m) { + json j = json::object(); + j["bAffectPassive"] = ToJson(m.bAffectPassive); + return j; +} +json ToJson(const GameMessages::NotifyRacingClient& m) { + json j = json::object(); + j["eventType"] = ToJson(m.eventType); + j["param1"] = ToJson(m.param1); + j["paramObj"] = ToJson(m.paramObj); + j["paramStr"] = ToJson(m.paramStr); + j["singleClient"] = ToJson(m.singleClient); + return j; +} +json ToJson(const GameMessages::VehicleAddPassiveBoostAction& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::VehicleRemovePassiveBoostAction& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::VehicleNotifyFinishedRace& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::VehicleNotifyServerAddPassiveBoostAction& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::VehicleNotifyServerRemovePassiveBoostAction& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::RacingClientReady& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + return j; +} +json ToJson(const GameMessages::RacingPlayerInfoResetFinished& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + return j; +} +json ToJson(const GameMessages::VehicleNotifyHitImaginationServer& m) { + json j = json::object(); + j["pickupObjID"] = ToJson(m.pickupObjID); + j["pickupSpawnerID"] = ToJson(m.pickupSpawnerID); + j["pickupSpawnerIndex"] = ToJson(m.pickupSpawnerIndex); + j["vehiclePosition"] = ToJson(m.vehiclePosition); + return j; +} +json ToJson(const GameMessages::AddSkill& m) { + json j = json::object(); + j["AICombatWeight"] = ToJson(m.AICombatWeight); + j["bFromSkillSet"] = ToJson(m.bFromSkillSet); + j["castType"] = ToJson(m.castType); + j["fTimeSecs"] = ToJson(m.fTimeSecs); + j["iTimesCanCast"] = ToJson(m.iTimesCanCast); + j["skillID"] = ToJson(m.skillID); + j["temporary"] = ToJson(m.temporary); + return j; +} +json ToJson(const GameMessages::RemoveSkill& m) { + json j = json::object(); + j["bFromSkillSet"] = ToJson(m.bFromSkillSet); + j["skillID"] = ToJson(m.skillID); + return j; +} +json ToJson(const GameMessages::UncastSkill& m) { + json j = json::object(); + j["skillID"] = ToJson(m.skillID); + return j; +} +json ToJson(const GameMessages::CasterDead& m) { + json j = json::object(); + j["i64Caster"] = ToJson(m.i64Caster); + j["uiSkillHandle"] = ToJson(m.uiSkillHandle); + return j; +} +json ToJson(const GameMessages::SelectSkill& m) { + json j = json::object(); + j["bFromSkillSet"] = ToJson(m.bFromSkillSet); + j["skillID"] = ToJson(m.skillID); + return j; +} +json ToJson(const GameMessages::StartSkill& m) { + json j = json::object(); + j["bUsedMouse"] = ToJson(m.bUsedMouse); + j["consumableItemID"] = ToJson(m.consumableItemID); + j["fCasterLatency"] = ToJson(m.fCasterLatency); + j["iCastType"] = ToJson(m.iCastType); + j["lastClickedPosit"] = ToJson(m.lastClickedPosit); + j["optionalOriginatorID"] = ToJson(m.optionalOriginatorID); + j["optionalTargetID"] = ToJson(m.optionalTargetID); + j["originatorRot"] = ToJson(m.originatorRot); + j["sBitStream"] = ToJson(m.sBitStream); + j["skillID"] = ToJson(m.skillID); + j["uiSkillHandle"] = ToJson(m.uiSkillHandle); + return j; +} +json ToJson(const GameMessages::EchoStartSkill& m) { + json j = json::object(); + j["bUsedMouse"] = ToJson(m.bUsedMouse); + j["fCasterLatency"] = ToJson(m.fCasterLatency); + j["iCastType"] = ToJson(m.iCastType); + j["lastClickedPosit"] = ToJson(m.lastClickedPosit); + j["optionalOriginatorID"] = ToJson(m.optionalOriginatorID); + j["optionalTargetID"] = ToJson(m.optionalTargetID); + j["originatorRot"] = ToJson(m.originatorRot); + j["sBitStream"] = ToJson(m.sBitStream); + j["skillID"] = ToJson(m.skillID); + j["uiSkillHandle"] = ToJson(m.uiSkillHandle); + return j; +} +json ToJson(const GameMessages::SyncSkill& m) { + json j = json::object(); + j["bDone"] = ToJson(m.bDone); + j["sBitStream"] = ToJson(m.sBitStream); + j["uiBehaviorHandle"] = ToJson(m.uiBehaviorHandle); + j["uiSkillHandle"] = ToJson(m.uiSkillHandle); + return j; +} +json ToJson(const GameMessages::EchoSyncSkill& m) { + json j = json::object(); + j["bDone"] = ToJson(m.bDone); + j["sBitStream"] = ToJson(m.sBitStream); + j["uiBehaviorHandle"] = ToJson(m.uiBehaviorHandle); + j["uiSkillHandle"] = ToJson(m.uiSkillHandle); + return j; +} +json ToJson(const GameMessages::RequestServerProjectileImpact& m) { + json j = json::object(); + j["i64LocalID"] = ToJson(m.i64LocalID); + j["i64TargetID"] = ToJson(m.i64TargetID); + j["sBitStream"] = ToJson(m.sBitStream); + return j; +} +json ToJson(const GameMessages::DoClientProjectileImpact& m) { + json j = json::object(); + j["i64OrgID"] = ToJson(m.i64OrgID); + j["i64OwnerID"] = ToJson(m.i64OwnerID); + j["i64TargetID"] = ToJson(m.i64TargetID); + j["sBitStream"] = ToJson(m.sBitStream); + return j; +} +json ToJson(const GameMessages::UseSkillSet& m) { + json j = json::object(); + j["bRemove"] = ToJson(m.bRemove); + j["possessedId"] = ToJson(m.possessedId); + j["setId"] = ToJson(m.setId); + return j; +} +json ToJson(const GameMessages::TradeItemEntry& m) { + json j = json::object(); + j["key"] = ToJson(m.key); + j["itemID"] = ToJson(m.itemID); + j["templateID"] = ToJson(m.templateID); + j["subkey"] = ToJson(m.subkey); + j["count"] = ToJson(m.count); + j["slot"] = ToJson(m.slot); + j["inventoryType"] = ToJson(m.inventoryType); + j["config"] = ToJson(m.config); + j["unknownFlag"] = ToJson(m.unknownFlag); + return j; +} +json ToJson(const GameMessages::TradeItemEntry::Config& m) { + json j = json::object(); + j["size"] = ToJson(m.size); + j["compressed"] = ToJson(m.compressed); + j["compressedSize"] = ToJson(m.compressedSize); + j["data"] = ToJson(m.data); + return j; +} +json ToJson(const GameMessages::ClientTradeRequest& m) { + json j = json::object(); + j["bNeedInvitePopUp"] = ToJson(m.bNeedInvitePopUp); + j["i64Invitee"] = ToJson(m.i64Invitee); + return j; +} +json ToJson(const GameMessages::ServerTradeInvite& m) { + json j = json::object(); + j["bNeedInvitePopUp"] = ToJson(m.bNeedInvitePopUp); + j["i64Requestor"] = ToJson(m.i64Requestor); + j["wsName"] = ToJson(m.wsName); + return j; +} +json ToJson(const GameMessages::ServerTradeInitialReply& m) { + json j = json::object(); + j["i64Invitee"] = ToJson(m.i64Invitee); + j["resultType"] = ToJson(m.resultType); + j["wsName"] = ToJson(m.wsName); + return j; +} +json ToJson(const GameMessages::ServerTradeFinalReply& m) { + json j = json::object(); + j["bResult"] = ToJson(m.bResult); + j["i64Invitee"] = ToJson(m.i64Invitee); + j["wsName"] = ToJson(m.wsName); + return j; +} +json ToJson(const GameMessages::ClientTradeUpdate& m) { + json j = json::object(); + j["i64Currency"] = ToJson(m.i64Currency); + j["inventoryMap"] = ToJson(m.inventoryMap); + return j; +} +json ToJson(const GameMessages::ServerTradeUpdate& m) { + json j = json::object(); + j["bAboutToPerform"] = ToJson(m.bAboutToPerform); + j["i64Currency"] = ToJson(m.i64Currency); + j["inventoryMap"] = ToJson(m.inventoryMap); + return j; +} +json ToJson(const GameMessages::ClientTradeCancel& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ClientTradeAccept& m) { + json j = json::object(); + j["bFirst"] = ToJson(m.bFirst); + return j; +} +json ToJson(const GameMessages::ServerTradeCancel& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ServerTradeAccept& m) { + json j = json::object(); + j["bFirst"] = ToJson(m.bFirst); + return j; +} +json ToJson(const GameMessages::VendorOpenWindow& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::RequestVendorStatusUpdate& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::VendorStatusUpdate& m) { + json j = json::object(); + j["bUpdateOnly"] = ToJson(m.bUpdateOnly); + j["inventoryList"] = ToJson(m.inventoryList); + return j; +} +json ToJson(const GameMessages::VendorStatusUpdate::Entry& m) { + json j = json::object(); + j["lot"] = ToJson(m.lot); + j["sortPriority"] = ToJson(m.sortPriority); + return j; +} +json ToJson(const GameMessages::VendorTransactionResult& m) { + json j = json::object(); + j["iResult"] = ToJson(m.iResult); + return j; +} +json ToJson(const GameMessages::BuyFromVendor& m) { + json j = json::object(); + j["confirmed"] = ToJson(m.confirmed); + j["count"] = ToJson(m.count); + j["item"] = ToJson(m.item); + return j; +} +json ToJson(const GameMessages::SellToVendor& m) { + json j = json::object(); + j["count"] = ToJson(m.count); + j["itemObjID"] = ToJson(m.itemObjID); + return j; +} +json ToJson(const GameMessages::BuybackFromVendor& m) { + json j = json::object(); + j["confirmed"] = ToJson(m.confirmed); + j["count"] = ToJson(m.count); + j["item"] = ToJson(m.item); + return j; +} +json ToJson(const GameMessages::AddDonationItem& m) { + json j = json::object(); + j["count"] = ToJson(m.count); + j["itemObjID"] = ToJson(m.itemObjID); + return j; +} +json ToJson(const GameMessages::RemoveDonationItem& m) { + json j = json::object(); + j["confirmed"] = ToJson(m.confirmed); + j["count"] = ToJson(m.count); + j["itemObjID"] = ToJson(m.itemObjID); + return j; +} +json ToJson(const GameMessages::ConfirmDonationOnPlayer& m) { + json j = json::object(); + j["vendorID"] = ToJson(m.vendorID); + return j; +} +json ToJson(const GameMessages::CancelDonationOnPlayer& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::TransferToZone& m) { + json j = json::object(); + j["bCheckTransferAllowed"] = ToJson(m.bCheckTransferAllowed); + j["cloneID"] = ToJson(m.cloneID); + j["rotW"] = ToJson(m.rotW); + j["rotX"] = ToJson(m.rotX); + j["rotY"] = ToJson(m.rotY); + j["rotZ"] = ToJson(m.rotZ); + j["spawnPoint"] = ToJson(m.spawnPoint); + j["ucInstanceType"] = ToJson(m.ucInstanceType); + j["zoneID"] = ToJson(m.zoneID); + return j; +} +json ToJson(const GameMessages::TransferToZoneCheckedIM& m) { + json j = json::object(); + j["bIsThereaQueue"] = ToJson(m.bIsThereaQueue); + j["cloneID"] = ToJson(m.cloneID); + j["rotW"] = ToJson(m.rotW); + j["rotX"] = ToJson(m.rotX); + j["rotY"] = ToJson(m.rotY); + j["rotZ"] = ToJson(m.rotZ); + j["spawnPoint"] = ToJson(m.spawnPoint); + j["ucInstanceType"] = ToJson(m.ucInstanceType); + j["zoneID"] = ToJson(m.zoneID); + return j; +} +json ToJson(const GameMessages::PlayerLoaded& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + return j; +} +json ToJson(const GameMessages::ReadyForUpdates& m) { + json j = json::object(); + j["objectID"] = ToJson(m.objectID); + return j; +} +json ToJson(const GameMessages::PlayerReady& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::RestoreToPostLoadStats& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ServerDoneLoadingAllObjects& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::InvalidZoneTransferList& m) { + json j = json::object(); + j["customerFeedbackURL"] = ToJson(m.customerFeedbackURL); + j["invalidMapTransferList"] = ToJson(m.invalidMapTransferList); + j["bCustomerFeedbackOnExit"] = ToJson(m.bCustomerFeedbackOnExit); + j["bCustomerFeedbackOnInvalidMapTransfer"] = ToJson(m.bCustomerFeedbackOnInvalidMapTransfer); + return j; +} +json ToJson(const GameMessages::DisplayZoneSummary& m) { + json j = json::object(); + j["isPropertyMap"] = ToJson(m.isPropertyMap); + j["isZoneStart"] = ToJson(m.isZoneStart); + j["sender"] = ToJson(m.sender); + return j; +} +json ToJson(const GameMessages::ZoneSummaryDismissed& m) { + json j = json::object(); + j["playerID"] = ToJson(m.playerID); + return j; +} +json ToJson(const GameMessages::NotifyServerLevelProcessingComplete& m) { + json j = json::object(); + return j; +} +json ToJson(const GameMessages::ChangeObjectWorldState& m) { + json j = json::object(); + j["newState"] = ToJson(m.newState); + return j; +} +json ToJson(const GameMessages::LocalizedAnnouncementServerToSingleClient& m) { + json j = json::object(); + j["bodyParams"] = ToJson(m.bodyParams); + j["bForceOpenChatBox"] = ToJson(m.bForceOpenChatBox); + j["bShowAnnouncement"] = ToJson(m.bShowAnnouncement); + j["bShowInChat"] = ToJson(m.bShowInChat); + j["body"] = ToJson(m.body); + j["title"] = ToJson(m.title); + j["titleParams"] = ToJson(m.titleParams); + return j; +} + +// Wire messages: (ID, direction, reader). A struct with Handle is what the server reads from a client. +// Structs with members but no Deserialize can't be read. +const std::vector& Entries() { + static const std::vector entries{ + { MessageType::Game::ACTIVITY_ENTER, eDirection::TO_CLIENT, "ActivityEnter", &ReadWith }, + { MessageType::Game::ACTIVITY_EXIT, eDirection::TO_CLIENT, "ActivityExit", &ReadWith }, + { MessageType::Game::ACTIVITY_START, eDirection::TO_CLIENT, "ActivityStart", &ReadWith }, + { MessageType::Game::ACTIVITY_STOP, eDirection::TO_CLIENT, "ActivityStop", &ReadWith }, + { MessageType::Game::ACTIVITY_PAUSE, eDirection::TO_CLIENT, "ActivityPause", &ReadWith }, + { MessageType::Game::START_ACTIVITY_TIME, eDirection::TO_CLIENT, "StartActivityTime", &ReadWith }, + { MessageType::Game::REQUEST_ACTIVITY_ENTER, eDirection::TO_CLIENT, "RequestActivityEnter", &ReadWith }, + { MessageType::Game::REQUEST_ACTIVITY_EXIT, eDirection::TO_SERVER, "RequestActivityExit", &ReadWith }, + { MessageType::Game::SHOW_ACTIVITY_COUNTDOWN, eDirection::TO_CLIENT, "ShowActivityCountdown", &ReadWith }, + { MessageType::Game::MATCH_RESPONSE, eDirection::TO_CLIENT, "MatchResponse", &ReadWith }, + { MessageType::Game::MATCH_UPDATE, eDirection::TO_CLIENT, "MatchUpdate", &ReadWith }, + { MessageType::Game::MATCH_REQUEST, eDirection::TO_SERVER, "MatchRequest", &ReadWith }, + { MessageType::Game::REQUEST_ACTIVITY_SUMMARY_LEADERBOARD_DATA, eDirection::TO_SERVER, "RequestActivitySummaryLeaderboardData", &ReadWith }, + { MessageType::Game::SEND_ACTIVITY_SUMMARY_LEADERBOARD_DATA, eDirection::TO_SERVER, "SendActivitySummaryLeaderboardData", &ReadWith }, + { MessageType::Game::NOTIFY_CLIENT_SHOOTING_GALLERY_SCORE, eDirection::TO_CLIENT, "NotifyClientShootingGalleryScore", &ReadWith }, + { MessageType::Game::UPDATE_SHOOTING_GALLERY_ROTATION, eDirection::TO_CLIENT, "UpdateShootingGalleryRotation", &ReadWith }, + { MessageType::Game::SHOOTING_GALLERY_FIRE, eDirection::TO_SERVER, "ShootingGalleryFire", &ReadWith }, + { MessageType::Game::ACTIVITY_STATE_CHANGE_REQUEST, eDirection::TO_SERVER, "ActivityStateChangeRequest", &ReadWith }, + { MessageType::Game::START_BUILDING_WITH_ITEM, eDirection::TO_SERVER, "StartBuildingWithItem", &ReadWith }, + { MessageType::Game::START_ARRANGING_WITH_ITEM, eDirection::TO_CLIENT, "StartArrangingWithItem", &ReadWith }, + { MessageType::Game::FINISH_ARRANGING_WITH_ITEM, eDirection::TO_CLIENT, "FinishArrangingWithItem", &ReadWith }, + { MessageType::Game::DONE_ARRANGING_WITH_ITEM, eDirection::TO_SERVER, "DoneArrangingWithItem", &ReadWith }, + { MessageType::Game::MODULAR_BUILD_END, eDirection::TO_CLIENT, "ModularBuildEnd", &ReadWith }, + { MessageType::Game::MODULAR_BUILD_FINISH, eDirection::TO_SERVER, "ModularBuildFinish", &ReadWith }, + { MessageType::Game::MODULAR_BUILD_MOVE_AND_EQUIP, eDirection::TO_SERVER, "ModularBuildMoveAndEquip", &ReadWith }, + { MessageType::Game::MODULAR_BUILD_CONVERT_MODEL, eDirection::TO_SERVER, "ModularBuildConvertModel", &ReadWith }, + { MessageType::Game::SET_BUILD_MODE, eDirection::TO_SERVER, "SetBuildMode", &ReadWith }, + { MessageType::Game::SET_BUILD_MODE_CONFIRMED, eDirection::TO_CLIENT, "SetBuildModeConfirmed", &ReadWith }, + { MessageType::Game::BUILD_MODE_SET, eDirection::TO_SERVER, "BuildModeSet", &ReadWith }, + { MessageType::Game::UN_USE_BBB_MODEL, eDirection::TO_SERVER, "UnUseBBBModel", &ReadWith }, + { MessageType::Game::BBB_LOAD_ITEM_REQUEST, eDirection::TO_SERVER, "BBBLoadItemRequest", &ReadWith }, + { MessageType::Game::BBB_SAVE_REQUEST, eDirection::TO_SERVER, "BBBSaveRequest", &ReadWith }, + { MessageType::Game::ACTIVATE_BRICK_MODE, eDirection::TO_SERVER, "ActivateBrickMode", &ReadWith }, + { MessageType::Game::SET_BBB_AUTOSAVE, eDirection::TO_SERVER, "SetBBBAutosave", &ReadWith }, + { MessageType::Game::REBUILD_BBB_AUTOSAVE_MSG, eDirection::TO_CLIENT, "RebuildBBBAutosaveMsg", &ReadWith }, + { MessageType::Game::NOTIFY_CLIENT_UGC_MODEL_READY, eDirection::TO_CLIENT, "NotifyClientUGCModelReady", &ReadWith }, + { MessageType::Game::FETCH_MODEL_METADATA_REQUEST, eDirection::TO_SERVER, "FetchModelMetadataRequest", &ReadWith }, + { MessageType::Game::FETCH_MODEL_METADATA_RESPONSE, eDirection::TO_CLIENT, "FetchModelMetadataResponse", &ReadWith }, + { MessageType::Game::SET_MODEL_TO_BUILD, eDirection::TO_CLIENT, "SetModelToBuild", &ReadWith }, + { MessageType::Game::SPAWN_MODEL_BRICKS, eDirection::TO_CLIENT, "SpawnModelBricks", &ReadWith }, + { MessageType::Game::DIE, eDirection::TO_CLIENT, "Die", &ReadWith }, + { MessageType::Game::REQUEST_DIE, eDirection::TO_SERVER, "RequestDie", &ReadWith }, + { MessageType::Game::REQUEST_SMASH_PLAYER, eDirection::TO_SERVER, "RequestSmashPlayer", &ReadWith }, + { MessageType::Game::REQUEST_RESURRECT, eDirection::TO_SERVER, "RequestResurrect", &ReadWith }, + { MessageType::Game::RESURRECT, eDirection::TO_SERVER, "Resurrect", &ReadWith }, + { MessageType::Game::SMASH, eDirection::TO_CLIENT, "Smash", &ReadWith }, + { MessageType::Game::UN_SMASH, eDirection::TO_CLIENT, "UnSmash", &ReadWith }, + { MessageType::Game::SET_RESURRECT_RESTORE_VALUES, eDirection::TO_CLIENT, "SetResurrectRestoreValues", &ReadWith }, + { MessageType::Game::SET_PLAYER_ALLOWED_RESPAWN, eDirection::TO_CLIENT, "SetPlayerAllowedRespawn", &ReadWith }, + { MessageType::Game::KNOCKBACK, eDirection::TO_CLIENT, "Knockback", &ReadWith }, + { MessageType::Game::SET_STUNNED, eDirection::TO_CLIENT, "SetStunned", &ReadWith }, + { MessageType::Game::SET_STUN_IMMUNITY, eDirection::TO_CLIENT, "SetStunImmunity", &ReadWith }, + { MessageType::Game::SET_STATUS_IMMUNITY, eDirection::TO_CLIENT, "SetStatusImmunity", &ReadWith }, + { MessageType::Game::ADD_BUFF, eDirection::TO_CLIENT, "AddBuff", &ReadWith }, + { MessageType::Game::REMOVE_BUFF, eDirection::TO_CLIENT, "RemoveBuff", &ReadWith }, + { MessageType::Game::REMOVE_BUFFS_APPLIED_BY_OBJECT, eDirection::TO_CLIENT, "RemoveBuffsAppliedByObject", &ReadWith }, + { MessageType::Game::ADD_RUN_SPEED_MODIFIER, eDirection::TO_CLIENT, "AddRunSpeedModifier", &ReadWith }, + { MessageType::Game::REMOVE_RUN_SPEED_MODIFIER, eDirection::TO_CLIENT, "RemoveRunSpeedModifier", &ReadWith }, + { MessageType::Game::ACTIVATE_BUBBLE_BUFF, eDirection::TO_SERVER, "ActivateBubbleBuff", &ReadWith }, + { MessageType::Game::DECTIVATE_BUBBLE_BUFF, eDirection::TO_SERVER, "DeactivateBubbleBuff", &ReadWith }, + { MessageType::Game::DEACTIVATE_BUBBLE_BUFF_FROM_SERVER, eDirection::TO_CLIENT, "DeactivateBubbleBuffFromServer", &ReadWith }, + { MessageType::Game::PLAY_ANIMATION, eDirection::TO_CLIENT, "PlayAnimation", &ReadWith }, + { MessageType::Game::PLAY_ND_AUDIO_EMITTER, eDirection::TO_CLIENT, "PlayNDAudioEmitter", &ReadWith }, + { MessageType::Game::PLAY_EMBEDDED_EFFECT_ON_ALL_CLIENTS_NEAR_OBJECT, eDirection::TO_CLIENT, "PlayEmbeddedEffectOnAllClientsNearObject", &ReadWith }, + { MessageType::Game::PLAY_FX_EFFECT, eDirection::TO_CLIENT, "PlayFXEffect", &ReadWith }, + { MessageType::Game::STOP_FX_EFFECT, eDirection::TO_CLIENT, "StopFXEffect", &ReadWith }, + { MessageType::Game::BROADCAST_TEXT_TO_CHATBOX, eDirection::TO_CLIENT, "BroadcastTextToChatbox", &ReadWith }, + { MessageType::Game::PLAY2_D_AMBIENT_SOUND, eDirection::TO_CLIENT, "Play2DAmbientSound", &ReadWith }, + { MessageType::Game::STOP2_D_AMBIENT_SOUND, eDirection::TO_CLIENT, "Stop2DAmbientSound", &ReadWith }, + { MessageType::Game::UI_MESSAGE_SERVER_TO_SINGLE_CLIENT, eDirection::TO_CLIENT, "UIMessageServerToSingleClient", &ReadWith }, + { MessageType::Game::UI_MESSAGE_SERVER_TO_ALL_CLIENTS, eDirection::TO_CLIENT, "UIMessageServerToAllClients", &ReadWith }, + { MessageType::Game::START_CELEBRATION_EFFECT, eDirection::TO_CLIENT, "StartCelebrationEffect", &ReadWith }, + { MessageType::Game::DISPLAY_MESSAGE_BOX, eDirection::TO_CLIENT, "DisplayMessageBox", &ReadWith }, + { MessageType::Game::MESSAGE_BOX_RESPOND, eDirection::TO_SERVER, "MessageBoxRespond", &ReadWith }, + { MessageType::Game::CHOICE_BOX_RESPOND, eDirection::TO_SERVER, "ChoiceBoxRespond", &ReadWith }, + { MessageType::Game::DISPLAY_CHAT_BUBBLE, eDirection::TO_CLIENT, "DisplayChatBubble", &ReadWith }, + { MessageType::Game::CHANGE_IDLE_FLAGS, eDirection::TO_CLIENT, "ChangeIdleFlags", &ReadWith }, + { MessageType::Game::SET_NAME_BILLBOARD_STATE, eDirection::TO_CLIENT, "SetNameBillboardState", &ReadWith }, + { MessageType::Game::SHOW_BILLBOARD_INTERACT_ICON, eDirection::TO_CLIENT, "ShowBillboardInteractIcon", &ReadWith }, + { MessageType::Game::PLAY_CINEMATIC, eDirection::TO_CLIENT, "PlayCinematic", &ReadWith }, + { MessageType::Game::END_CINEMATIC, eDirection::TO_CLIENT, "EndCinematic", &ReadWith }, + { MessageType::Game::CINEMATIC_UPDATE, eDirection::TO_SERVER, "CinematicUpdate", &ReadWith }, + { MessageType::Game::SLASH_COMMAND_TEXT_FEEDBACK, eDirection::TO_CLIENT, "SlashCommandTextFeedback", &ReadWith }, + { MessageType::Game::PLAY_EMOTE, eDirection::TO_SERVER, "PlayEmote", &ReadWith }, + { MessageType::Game::SET_EMOTE_LOCK_STATE, eDirection::TO_CLIENT, "SetEmoteLockState", &ReadWith }, + { MessageType::Game::DISPLAY_TOOLTIP, eDirection::TO_CLIENT, "DisplayTooltip", &ReadWith }, + { MessageType::Game::EMOTE_PLAYED, eDirection::TO_CLIENT, "EmotePlayed", &ReadWith }, + { MessageType::Game::ADD_ITEM_TO_INVENTORY_CLIENT_SYNC, eDirection::TO_CLIENT, "AddItemToInventoryClientSync", &ReadWith }, + { MessageType::Game::SET_INVENTORY_SIZE, eDirection::TO_CLIENT, "SetInventorySize", &ReadWith }, + { MessageType::Game::REMOVE_ITEM_FROM_INVENTORY, eDirection::TO_SERVER, "RemoveItemFromInventory", &ReadWith }, + { MessageType::Game::EQUIP_INVENTORY, eDirection::TO_SERVER, "EquipInventory", &ReadWith }, + { MessageType::Game::UN_EQUIP_INVENTORY, eDirection::TO_SERVER, "UnEquipInventory", &ReadWith }, + { MessageType::Game::MOVE_ITEM_IN_INVENTORY, eDirection::TO_SERVER, "MoveItemInInventory", &ReadWith }, + { MessageType::Game::MOVE_ITEM_BETWEEN_INVENTORY_TYPES, eDirection::TO_SERVER, "MoveItemBetweenInventoryTypes", &ReadWith }, + { MessageType::Game::REQUEST_MOVE_ITEM_BETWEEN_INVENTORY_TYPES, eDirection::TO_SERVER, "RequestMoveItemBetweenInventoryTypes", &ReadWith }, + { MessageType::Game::RESPONSE_MOVE_ITEM_BETWEEN_INVENTORY_TYPES, eDirection::TO_CLIENT, "ResponseMoveItemBetweenInventoryTypes", &ReadWith }, + { MessageType::Game::MOVE_INVENTORY_BATCH, eDirection::TO_SERVER, "MoveInventoryBatch", &ReadWith }, + { MessageType::Game::NOTIFY_NOT_ENOUGH_INV_SPACE, eDirection::TO_CLIENT, "NotifyNotEnoughInvSpace", &ReadWith }, + { MessageType::Game::UPDATE_INVENTORY_UI, eDirection::TO_CLIENT, "UpdateInventoryUi", &ReadWith }, + { MessageType::Game::MARK_INVENTORY_ITEM_AS_ACTIVE, eDirection::TO_CLIENT, "MarkInventoryItemAsActive", &ReadWith }, + { MessageType::Game::CONSUME_CLIENT_ITEM, eDirection::TO_CLIENT, "ConsumeClientItem", &ReadWith }, + { MessageType::Game::CLIENT_ITEM_CONSUMED, eDirection::TO_SERVER, "ClientItemConsumed", &ReadWith }, + { MessageType::Game::USE_NON_EQUIPMENT_ITEM, eDirection::TO_SERVER, "UseNonEquipmentItem", &ReadWith }, + { MessageType::Game::USE_ITEM_RESULT, eDirection::TO_CLIENT, "UseItemResult", &ReadWith }, + { MessageType::Game::USE_ITEM_REQUIREMENTS_RESPONSE, eDirection::TO_CLIENT, "UseItemRequirementsResponse", &ReadWith }, + { MessageType::Game::SET_CONSUMABLE_ITEM, eDirection::TO_SERVER, "SetConsumableItem", &ReadWith }, + { MessageType::Game::PUSH_EQUIPPED_ITEMS_STATE, eDirection::TO_SERVER, "PushEquippedItemsState", &ReadWith }, + { MessageType::Game::POP_EQUIPPED_ITEMS_STATE, eDirection::TO_SERVER, "PopEquippedItemsState", &ReadWith }, + { MessageType::Game::RESYNC_EQUIPMENT, eDirection::TO_SERVER, "ResyncEquipment", &ReadWith }, + { MessageType::Game::UPDATE_INVENTORY_GROUP, eDirection::TO_SERVER, "UpdateInventoryGroup", &ReadWith }, + { MessageType::Game::UPDATE_INVENTORY_GROUP_CONTENTS, eDirection::TO_SERVER, "UpdateInventoryGroupContents", &ReadWith }, + { MessageType::Game::USE_ITEM_ON_CLIENT, eDirection::TO_CLIENT, "UseItemOnClient", &ReadWith }, + { MessageType::Game::DROP_CLIENT_LOOT, eDirection::TO_CLIENT, "DropClientLoot", &ReadWith }, + { MessageType::Game::PICKUP_ITEM, eDirection::TO_SERVER, "PickupItem", &ReadWith }, + { MessageType::Game::TEAM_PICKUP_ITEM, eDirection::TO_CLIENT, "TeamPickupItem", &ReadWith }, + { MessageType::Game::OFFER_MISSION, eDirection::TO_CLIENT, "OfferMission", &ReadWith }, + { MessageType::Game::RESPOND_TO_MISSION, eDirection::TO_SERVER, "RespondToMission", &ReadWith }, + { MessageType::Game::NOTIFY_MISSION, eDirection::TO_CLIENT, "NotifyMission", &ReadWith }, + { MessageType::Game::NOTIFY_MISSION_TASK, eDirection::TO_CLIENT, "NotifyMissionTask", &ReadWith }, + { MessageType::Game::RESET_MISSIONS, eDirection::TO_CLIENT, "ResetMissions", &ReadWith }, + { MessageType::Game::MISSION_DIALOGUE_OK, eDirection::TO_SERVER, "MissionDialogueOK", &ReadWith }, + { MessageType::Game::MISSION_DIALOGUE_CANCELLED, eDirection::TO_CLIENT, "MissionDialogueCancelled", &ReadWith }, + { MessageType::Game::REQUEST_LINKED_MISSION, eDirection::TO_SERVER, "RequestLinkedMission", &ReadWith }, + { MessageType::Game::SET_FLAG, eDirection::TO_SERVER, "SetFlag", &ReadWith }, + { MessageType::Game::NOTIFY_CLIENT_FLAG_CHANGE, eDirection::TO_CLIENT, "NotifyClientFlagChange", &ReadWith }, + { MessageType::Game::HAS_BEEN_COLLECTED, eDirection::TO_SERVER, "HasBeenCollected", &ReadWith }, + { MessageType::Game::NOTIFY_LEVEL_REWARDS, eDirection::TO_CLIENT, "NotifyLevelRewards", &ReadWith }, + { MessageType::Game::TELEPORT, eDirection::TO_CLIENT, "Teleport", &ReadWith }, + { MessageType::Game::START_PATHING, eDirection::TO_CLIENT, "StartPathing", &ReadWith }, + { MessageType::Game::PLATFORM_RESYNC, eDirection::TO_CLIENT, "PlatformResync", &ReadWith }, + { MessageType::Game::REQUEST_PLATFORM_RESYNC, eDirection::TO_SERVER, "RequestPlatformResync", &ReadWith }, + { MessageType::Game::ORIENT_TO_ANGLE, eDirection::TO_CLIENT, "OrientToAngle", &ReadWith }, + { MessageType::Game::LOCK_NODE_ROTATION, eDirection::TO_CLIENT, "LockNodeRotation", &ReadWith }, + { MessageType::Game::SET_GRAVITY_SCALE, eDirection::TO_CLIENT, "SetGravityScale", &ReadWith }, + { MessageType::Game::SET_JET_PACK_MODE, eDirection::TO_CLIENT, "SetJetPackMode", &ReadWith }, + { MessageType::Game::SET_PLAYER_CONTROL_SCHEME, eDirection::TO_CLIENT, "SetPlayerControlScheme", &ReadWith }, + { MessageType::Game::PLAYER_REACHED_RESPAWN_CHECKPOINT, eDirection::TO_CLIENT, "PlayerReachedRespawnCheckpoint", &ReadWith }, + { MessageType::Game::SET_RAIL_MOVEMENT, eDirection::TO_CLIENT, "SetRailMovement", &ReadWith }, + { MessageType::Game::START_RAIL_MOVEMENT, eDirection::TO_CLIENT, "StartRailMovement", &ReadWith }, + { MessageType::Game::CLIENT_RAIL_MOVEMENT_READY, eDirection::TO_SERVER, "ClientRailMovementReady", &ReadWith }, + { MessageType::Game::CANCEL_RAIL_MOVEMENT, eDirection::TO_SERVER, "CancelRailMovement", &ReadWith }, + { MessageType::Game::REQUEST_RAIL_ACTIVATOR_STATE, eDirection::TO_SERVER, "RequestRailActivatorState", &ReadWith }, + { MessageType::Game::NOTIFY_RAIL_ACTOVATOR_STATE_CHANGE, eDirection::TO_CLIENT, "NotifyRailActivatorStateChange", &ReadWith }, + { MessageType::Game::PLAYER_RAIL_ARRIVED_NOTIFICATION, eDirection::TO_SERVER, "PlayerRailArrivedNotification", &ReadWith }, + { MessageType::Game::SET_MOUNT_INVENTORY_ID, eDirection::TO_CLIENT, "SetMountInventoryID", &ReadWith }, + { MessageType::Game::DISMOUNT_COMPLETE, eDirection::TO_SERVER, "DismountComplete", &ReadWith }, + { MessageType::Game::ACKNOWLEDGE_POSSESSION, eDirection::TO_SERVER, "AcknowledgePossession", &ReadWith }, + { MessageType::Game::MODIFY_GHOSTING_DISTANCE, eDirection::TO_CLIENT, "ModifyGhostingDistance", &ReadWith }, + { MessageType::Game::TOGGLE_GHOST_REFERENCE_OVERRIDE, eDirection::TO_SERVER, "ToggleGhostReferenceOverride", &ReadWith }, + { MessageType::Game::SET_GHOST_REFERENCE_POSITION, eDirection::TO_SERVER, "SetGhostReferencePosition", &ReadWith }, + { MessageType::Game::PLAYER_SET_CAMERA_CYCLING_MODE, eDirection::TO_CLIENT, "PlayerSetCameraCyclingMode", &ReadWith }, + { MessageType::Game::FORCE_CAMERA_TARGET_CYCLE, eDirection::TO_CLIENT, "ForceCameraTargetCycle", &ReadWith }, + { MessageType::Game::FIRE_EVENT_CLIENT_SIDE, eDirection::TO_CLIENT, "FireEventClientSide", &ReadWith }, + { MessageType::Game::FIRE_EVENT_SERVER_SIDE, eDirection::TO_SERVER, "FireEventServerSide", &ReadWith }, + { MessageType::Game::NOTIFY_CLIENT_OBJECT, eDirection::TO_CLIENT, "NotifyClientObject", &ReadWith }, + { MessageType::Game::NOTIFY_CLIENT_ZONE_OBJECT, eDirection::TO_CLIENT, "NotifyClientZoneObject", &ReadWith }, + { MessageType::Game::NOTIFY_OBJECT, eDirection::TO_CLIENT, "NotifyObject", &ReadWith }, + { MessageType::Game::SCRIPT_NETWORK_VAR_UPDATE, eDirection::TO_CLIENT, "ScriptNetworkVarUpdate", &ReadWith }, + { MessageType::Game::NOTIFY_CLIENT_FAILED_PRECONDITION, eDirection::TO_CLIENT, "NotifyClientFailedPrecondition", &ReadWith }, + { MessageType::Game::TERMINATE_INTERACTION, eDirection::TO_CLIENT, "TerminateInteraction", &ReadWith }, + { MessageType::Game::SET_NAME, eDirection::TO_CLIENT, "SetName", &ReadWith }, + { MessageType::Game::REQUEST_USE, eDirection::TO_SERVER, "RequestUse", &ReadWith }, + { MessageType::Game::REQUEST_SERVER_OBJECT_INFO, eDirection::TO_SERVER, "RequestServerObjectInfo", &ReadWith }, + { MessageType::Game::NOTIFY_PET_TAMING_MINIGAME, eDirection::TO_CLIENT, "NotifyPetTamingMinigame", &ReadWith }, + { MessageType::Game::CLIENT_EXIT_TAMING_MINIGAME, eDirection::TO_SERVER, "ClientExitTamingMinigame", &ReadWith }, + { MessageType::Game::START_SERVER_PET_MINIGAME_TIMER, eDirection::TO_SERVER, "StartServerPetMinigameTimer", &ReadWith }, + { MessageType::Game::NOTIFY_TAMING_MODEL_LOADED_ON_SERVER, eDirection::TO_CLIENT, "NotifyTamingModelLoadedOnServer", &ReadWith }, + { MessageType::Game::NOTIFY_TAMING_PUZZLE_SELECTED, eDirection::TO_CLIENT, "NotifyPetTamingPuzzleSelected", &ReadWith }, + { MessageType::Game::PET_TAMING_TRY_BUILD, eDirection::TO_SERVER, "PetTamingTryBuild", &ReadWith }, + { MessageType::Game::PET_TAMING_TRY_BUILD_RESULT, eDirection::TO_CLIENT, "PetTamingTryBuildResult", &ReadWith }, + { MessageType::Game::NOTIFY_TAMING_BUILD_SUCCESS, eDirection::TO_SERVER, "NotifyTamingBuildSuccess", &ReadWith }, + { MessageType::Game::PET_RESPONSE, eDirection::TO_CLIENT, "PetResponse", &ReadWith }, + { MessageType::Game::ADD_PET_TO_PLAYER, eDirection::TO_CLIENT, "AddPetToPlayer", &ReadWith }, + { MessageType::Game::REGISTER_PET_ID, eDirection::TO_CLIENT, "RegisterPetID", &ReadWith }, + { MessageType::Game::REGISTER_PET_DBID, eDirection::TO_CLIENT, "RegisterPetDBID", &ReadWith }, + { MessageType::Game::SHOW_PET_ACTION_BUTTON, eDirection::TO_CLIENT, "ShowPetActionButton", &ReadWith }, + { MessageType::Game::BOUNCER_ACTIVE_STATUS, eDirection::TO_CLIENT, "BouncerActiveStatus", &ReadWith }, + { MessageType::Game::REQUEST_SET_PET_NAME, eDirection::TO_SERVER, "RequestSetPetName", &ReadWith }, + { MessageType::Game::SET_PET_NAME, eDirection::TO_CLIENT, "SetPetName", &ReadWith }, + { MessageType::Game::SET_PET_NAME_MODERATED, eDirection::TO_CLIENT, "SetPetNameModerated", &ReadWith }, + { MessageType::Game::PET_NAME_CHANGED, eDirection::TO_CLIENT, "PetNameChanged", &ReadWith }, + { MessageType::Game::COMMAND_PET, eDirection::TO_SERVER, "CommandPet", &ReadWith }, + { MessageType::Game::DESPAWN_PET, eDirection::TO_SERVER, "DespawnPet", &ReadWith }, + { MessageType::Game::UPDATE_CHAT_MODE, eDirection::TO_CLIENT, "UpdateChatMode", &ReadWith }, + { MessageType::Game::SET_GM_LEVEL, eDirection::TO_CLIENT, "SetGMLevel", &ReadWith }, + { MessageType::Game::MODIFY_LEGO_SCORE, eDirection::TO_CLIENT, "ModifyLEGOScore", &ReadWith }, + { MessageType::Game::SET_CURRENCY, eDirection::TO_CLIENT, "SetCurrency", &ReadWith }, + { MessageType::Game::UPDATE_REPUTATION, eDirection::TO_CLIENT, "UpdateReputation", &ReadWith }, + { MessageType::Game::SET_TOOLTIP_FLAG, eDirection::TO_SERVER, "SetTooltipFlag", &ReadWith }, + { MessageType::Game::SET_LAST_CUSTOM_BUILD, eDirection::TO_SERVER, "SetLastCustomBuild", &ReadWith }, + { MessageType::Game::TOGGLE_GM_INVIS, eDirection::TO_CLIENT, "ToggleGMInvis", &ReadWith }, + { MessageType::Game::PICKUP_CURRENCY, eDirection::TO_SERVER, "PickupCurrency", &ReadWith }, + { MessageType::Game::MODIFY_PLAYER_ZONE_STATISTIC, eDirection::TO_SERVER, "ModifyPlayerZoneStatistic", &ReadWith }, + { MessageType::Game::UPDATE_PLAYER_STATISTIC, eDirection::TO_SERVER, "UpdatePlayerStatistic", &ReadWith }, + { MessageType::Game::PARSE_CHAT_MESSAGE, eDirection::TO_SERVER, "ParseChatMessage", &ReadWith }, + { MessageType::Game::REPORT_BUG, eDirection::TO_SERVER, "ReportBug", &ReadWith }, + { MessageType::Game::VERIFY_ACK, eDirection::TO_CLIENT, "VerifyAck", &ReadWith }, + { MessageType::Game::HELP, eDirection::TO_CLIENT, "Help", &ReadWith }, + { MessageType::Game::DISPLAY_GUILD_CREATE_BOX, eDirection::TO_CLIENT, "DisplayGuildCreateBox", &ReadWith }, + { MessageType::Game::OPEN_PROPERTY_VENDOR, eDirection::TO_CLIENT, "OpenPropertyVendor", &ReadWith }, + { MessageType::Game::OPEN_PROPERTY_MANAGEMENT, eDirection::TO_CLIENT, "OpenPropertyManagement", &ReadWith }, + { MessageType::Game::DOWNLOAD_PROPERTY_DATA, eDirection::TO_CLIENT, "DownloadPropertyData", &ReadWith }, + { MessageType::Game::PROPERTY_RENTAL_RESPONSE, eDirection::TO_CLIENT, "PropertyRentalResponse", &ReadWith }, + { MessageType::Game::PROPERTY_ENTRANCE_BEGIN, eDirection::TO_CLIENT, "PropertyEntranceBegin", &ReadWith }, + { MessageType::Game::PROPERTY_SELECT_QUERY, eDirection::TO_CLIENT, "PropertySelectQuery", &ReadWith }, + { MessageType::Game::GET_MODELS_ON_PROPERTY, eDirection::TO_CLIENT, "GetModelsOnProperty", &ReadWith }, + { MessageType::Game::PLACE_MODEL_RESPONSE, eDirection::TO_CLIENT, "PlaceModelResponse", &ReadWith }, + { MessageType::Game::REQUERY_PROPERTY_MODELS, eDirection::TO_CLIENT, "RequeryPropertyModels", &ReadWith }, + { MessageType::Game::HANDLE_UGC_POST_CREATE_BASED_ON_EDIT_MODE, eDirection::TO_CLIENT, "HandleUGCEquipPreCreateBasedOnEditMode", &ReadWith }, + { MessageType::Game::HANDLE_UGC_POST_DELETE_BASED_ON_EDIT_MODE, eDirection::TO_CLIENT, "HandleUGCEquipPostDeleteBasedOnEditMode", &ReadWith }, + { MessageType::Game::SET_PROPERTY_ACCESS, eDirection::TO_SERVER, "SetPropertyAccess", &ReadWith }, + { MessageType::Game::UPDATE_PROPERTY_OR_MODEL_FOR_FILTER_CHECK, eDirection::TO_SERVER, "UpdatePropertyOrModelForFilterCheck", &ReadWith }, + { MessageType::Game::QUERY_PROPERTY_DATA, eDirection::TO_SERVER, "QueryPropertyData", &ReadWith }, + { MessageType::Game::PROPERTY_EDITOR_BEGIN, eDirection::TO_SERVER, "PropertyEditorBegin", &ReadWith }, + { MessageType::Game::PROPERTY_EDITOR_END, eDirection::TO_SERVER, "PropertyEditorEnd", &ReadWith }, + { MessageType::Game::PROPERTY_CONTENTS_FROM_CLIENT, eDirection::TO_SERVER, "PropertyContentsFromClient", &ReadWith }, + { MessageType::Game::ZONE_PROPERTY_MODEL_EQUIPPED, eDirection::TO_SERVER, "ZonePropertyModelEquipped", &ReadWith }, + { MessageType::Game::ZONE_PROPERTY_MODEL_ROTATED, eDirection::TO_SERVER, "ZonePropertyModelRotated", &ReadWith }, + { MessageType::Game::PLACE_PROPERTY_MODEL, eDirection::TO_SERVER, "PlacePropertyModel", &ReadWith }, + { MessageType::Game::CREATE_MODEL_FROM_CLIENT, eDirection::TO_SERVER, "UpdateModelFromClient", &ReadWith }, + { MessageType::Game::DELETE_MODEL_FROM_CLIENT, eDirection::TO_SERVER, "DeleteModelFromClient", &ReadWith }, + { MessageType::Game::PROPERTY_ENTRANCE_SYNC, eDirection::TO_SERVER, "PropertyEntranceSync", &ReadWith }, + { MessageType::Game::ENTER_PROPERTY1, eDirection::TO_SERVER, "EnterProperty1", &ReadWith }, + { MessageType::Game::UPDATE_PROPERTY_PERFORMANCE_COST, eDirection::TO_SERVER, "UpdatePropertyPerformanceCost", &ReadWith }, + { MessageType::Game::REPORT_OFFENSIVE_MODEL, eDirection::TO_SERVER, "ReportOffensiveModel", &ReadWith }, + { MessageType::Game::REPORT_OFFENSIVE_PROPERTY, eDirection::TO_SERVER, "ReportOffensiveProperty", &ReadWith }, + { MessageType::Game::GET_HOT_PROPERTY_DATA, eDirection::TO_SERVER, "GetHotPropertyData", &ReadWith }, + { MessageType::Game::SEND_HOT_PROPERTY_DATA, eDirection::TO_CLIENT, "NewsSendHotPropertiesInfoToClient", &ReadWith }, + { MessageType::Game::PLAY_BEHAVIOR_SOUND, eDirection::TO_CLIENT, "PlayBehaviorSound", &ReadWith }, + { MessageType::Game::REBUILD_NOTIFY_STATE, eDirection::TO_CLIENT, "RebuildNotifyState", &ReadWith }, + { MessageType::Game::ENABLE_REBUILD, eDirection::TO_CLIENT, "EnableRebuild", &ReadWith }, + { MessageType::Game::REBUILD_CANCEL, eDirection::TO_SERVER, "RebuildCancel", &ReadWith }, + { MessageType::Game::MODULE_ASSEMBLY_DB_DATA_FOR_CLIENT, eDirection::TO_CLIENT, "ModuleAssemblyDBDataForClient", &ReadWith }, + { MessageType::Game::MODULE_ASSEMBLY_QUERY_DATA, eDirection::TO_SERVER, "ModuleAssemblyQueryData", &ReadWith }, + { MessageType::Game::MODULAR_ASSEMBLY_NIF_COMPLETED, eDirection::TO_CLIENT, "ModularAssemblyNIFCompleted", &ReadWith }, + { MessageType::Game::NOTIFY_VEHICLE_OF_RACING_OBJECT, eDirection::TO_CLIENT, "NotifyVehicleOfRacingObject", &ReadWith }, + { MessageType::Game::RACING_PLAYER_LOADED, eDirection::TO_CLIENT, "RacingPlayerLoaded", &ReadWith }, + { MessageType::Game::VEHICLE_UNLOCK_INPUT, eDirection::TO_CLIENT, "VehicleUnlockInput", &ReadWith }, + { MessageType::Game::VEHICLE_SET_WHEEL_LOCK_STATE, eDirection::TO_CLIENT, "VehicleSetWheelLockState", &ReadWith }, + { MessageType::Game::RACING_SET_PLAYER_RESET_INFO, eDirection::TO_CLIENT, "RacingSetPlayerResetInfo", &ReadWith }, + { MessageType::Game::RACING_RESET_PLAYER_TO_LAST_RESET, eDirection::TO_CLIENT, "RacingResetPlayerToLastReset", &ReadWith }, + { MessageType::Game::VEHICLE_STOP_BOOST, eDirection::TO_CLIENT, "VehicleStopBoost", &ReadWith }, + { MessageType::Game::NOTIFY_RACING_CLIENT, eDirection::TO_CLIENT, "NotifyRacingClient", &ReadWith }, + { MessageType::Game::VEHICLE_ADD_PASSIVE_BOOST_ACTION, eDirection::TO_CLIENT, "VehicleAddPassiveBoostAction", &ReadWith }, + { MessageType::Game::VEHICLE_REMOVE_PASSIVE_BOOST_ACTION, eDirection::TO_CLIENT, "VehicleRemovePassiveBoostAction", &ReadWith }, + { MessageType::Game::VEHICLE_NOTIFY_FINISHED_RACE, eDirection::TO_CLIENT, "VehicleNotifyFinishedRace", &ReadWith }, + { MessageType::Game::NOTIFY_SERVER_VEHICLE_ADD_PASSIVE_BOOST_ACTION, eDirection::TO_CLIENT, "VehicleNotifyServerAddPassiveBoostAction", &ReadWith }, + { MessageType::Game::NOTIFY_SERVER_VEHICLE_REMOVE_PASSIVE_BOOST_ACTION, eDirection::TO_CLIENT, "VehicleNotifyServerRemovePassiveBoostAction", &ReadWith }, + { MessageType::Game::RACING_CLIENT_READY, eDirection::TO_SERVER, "RacingClientReady", &ReadWith }, + { MessageType::Game::RACING_PLAYER_INFO_RESET_FINISHED, eDirection::TO_SERVER, "RacingPlayerInfoResetFinished", &ReadWith }, + { MessageType::Game::VEHICLE_NOTIFY_HIT_IMAGINATION_SERVER, eDirection::TO_SERVER, "VehicleNotifyHitImaginationServer", &ReadWith }, + { MessageType::Game::ADD_SKILL, eDirection::TO_CLIENT, "AddSkill", &ReadWith }, + { MessageType::Game::REMOVE_SKILL, eDirection::TO_CLIENT, "RemoveSkill", &ReadWith }, + { MessageType::Game::UNCAST_SKILL, eDirection::TO_CLIENT, "UncastSkill", &ReadWith }, + { MessageType::Game::CASTER_DEAD, eDirection::TO_SERVER, "CasterDead", &ReadWith }, + { MessageType::Game::SELECT_SKILL, eDirection::TO_SERVER, "SelectSkill", &ReadWith }, + { MessageType::Game::START_SKILL, eDirection::TO_SERVER, "StartSkill", &ReadWith }, + { MessageType::Game::ECHO_START_SKILL, eDirection::TO_CLIENT, "EchoStartSkill", &ReadWith }, + { MessageType::Game::SYNC_SKILL, eDirection::TO_SERVER, "SyncSkill", &ReadWith }, + { MessageType::Game::ECHO_SYNC_SKILL, eDirection::TO_CLIENT, "EchoSyncSkill", &ReadWith }, + { MessageType::Game::REQUEST_SERVER_PROJECTILE_IMPACT, eDirection::TO_SERVER, "RequestServerProjectileImpact", &ReadWith }, + { MessageType::Game::DO_CLIENT_PROJECTILE_IMPACT, eDirection::TO_CLIENT, "DoClientProjectileImpact", &ReadWith }, + { MessageType::Game::USE_SKILL_SET, eDirection::TO_CLIENT, "UseSkillSet", &ReadWith }, + { MessageType::Game::CLIENT_TRADE_REQUEST, eDirection::TO_SERVER, "ClientTradeRequest", &ReadWith }, + { MessageType::Game::SERVER_TRADE_INVITE, eDirection::TO_CLIENT, "ServerTradeInvite", &ReadWith }, + { MessageType::Game::SERVER_TRADE_INITIAL_REPLY, eDirection::TO_CLIENT, "ServerTradeInitialReply", &ReadWith }, + { MessageType::Game::SERVER_TRADE_FINAL_REPLY, eDirection::TO_CLIENT, "ServerTradeFinalReply", &ReadWith }, + { MessageType::Game::CLIENT_TRADE_UPDATE, eDirection::TO_SERVER, "ClientTradeUpdate", &ReadWith }, + { MessageType::Game::SERVER_TRADE_UPDATE, eDirection::TO_CLIENT, "ServerTradeUpdate", &ReadWith }, + { MessageType::Game::CLIENT_TRADE_CANCEL, eDirection::TO_SERVER, "ClientTradeCancel", &ReadWith }, + { MessageType::Game::CLIENT_TRADE_ACCEPT, eDirection::TO_SERVER, "ClientTradeAccept", &ReadWith }, + { MessageType::Game::SERVER_TRADE_CANCEL, eDirection::TO_CLIENT, "ServerTradeCancel", &ReadWith }, + { MessageType::Game::SERVER_TRADE_ACCEPT, eDirection::TO_CLIENT, "ServerTradeAccept", &ReadWith }, + { MessageType::Game::VENDOR_OPEN_WINDOW, eDirection::TO_CLIENT, "VendorOpenWindow", &ReadWith }, + { MessageType::Game::REQUEST_VENDOR_STATUS_UPDATE, eDirection::TO_SERVER, "RequestVendorStatusUpdate", &ReadWith }, + { MessageType::Game::VENDOR_STATUS_UPDATE, eDirection::TO_CLIENT, "VendorStatusUpdate", &ReadWith }, + { MessageType::Game::VENDOR_TRANSACTION_RESULT, eDirection::TO_CLIENT, "VendorTransactionResult", &ReadWith }, + { MessageType::Game::BUY_FROM_VENDOR, eDirection::TO_SERVER, "BuyFromVendor", &ReadWith }, + { MessageType::Game::SELL_TO_VENDOR, eDirection::TO_SERVER, "SellToVendor", &ReadWith }, + { MessageType::Game::BUYBACK_FROM_VENDOR, eDirection::TO_SERVER, "BuybackFromVendor", &ReadWith }, + { MessageType::Game::ADD_DONATION_ITEM, eDirection::TO_SERVER, "AddDonationItem", &ReadWith }, + { MessageType::Game::REMOVE_DONATION_ITEM, eDirection::TO_SERVER, "RemoveDonationItem", &ReadWith }, + { MessageType::Game::CONFIRM_DONATION_ON_PLAYER, eDirection::TO_SERVER, "ConfirmDonationOnPlayer", &ReadWith }, + { MessageType::Game::CANCEL_DONATION_ON_PLAYER, eDirection::TO_SERVER, "CancelDonationOnPlayer", &ReadWith }, + { MessageType::Game::TRANSFER_TO_ZONE, eDirection::TO_CLIENT, "TransferToZone", &ReadWith }, + { MessageType::Game::TRANSFER_TO_ZONE_CHECKED_IM, eDirection::TO_CLIENT, "TransferToZoneCheckedIM", &ReadWith }, + { MessageType::Game::PLAYER_LOADED, eDirection::TO_SERVER, "PlayerLoaded", &ReadWith }, + { MessageType::Game::READY_FOR_UPDATES, eDirection::TO_CLIENT, "ReadyForUpdates", &ReadWith }, + { MessageType::Game::PLAYER_READY, eDirection::TO_CLIENT, "PlayerReady", &ReadWith }, + { MessageType::Game::RESTORE_TO_POST_LOAD_STATS, eDirection::TO_CLIENT, "RestoreToPostLoadStats", &ReadWith }, + { MessageType::Game::SERVER_DONE_LOADING_ALL_OBJECTS, eDirection::TO_CLIENT, "ServerDoneLoadingAllObjects", &ReadWith }, + { MessageType::Game::INVALID_ZONE_TRANSFER_LIST, eDirection::TO_CLIENT, "InvalidZoneTransferList", &ReadWith }, + { MessageType::Game::DISPLAY_ZONE_SUMMARY, eDirection::TO_CLIENT, "DisplayZoneSummary", &ReadWith }, + { MessageType::Game::ZONE_SUMMARY_DISMISSED, eDirection::TO_SERVER, "ZoneSummaryDismissed", &ReadWith }, + { MessageType::Game::NOTIFY_SERVER_LEVEL_PROCESSING_COMPLETE, eDirection::TO_SERVER, "NotifyServerLevelProcessingComplete", &ReadWith }, + { MessageType::Game::CHANGE_OBJECT_WORLD_STATE, eDirection::TO_CLIENT, "ChangeObjectWorldState", &ReadWith }, + { MessageType::Game::LOCALIZED_ANNOUNCEMENT_SERVER_TO_SINGLE_CLIENT, eDirection::TO_CLIENT, "LocalizedAnnouncementServerToSingleClient", &ReadWith }, + }; + return entries; +}