mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-03-07 17:19:48 +00:00
Merge remote-tracking branch 'upstream/main' into first-draft-leaderboard-re-write
This commit is contained in:
@@ -1,77 +1,81 @@
|
||||
#include "AMFDeserialize.h"
|
||||
|
||||
#include "AMFFormat.h"
|
||||
#include <stdexcept>
|
||||
|
||||
#include "Amf3.h"
|
||||
|
||||
/**
|
||||
* AMF3 Reference document https://rtmp.veriskope.com/pdf/amf3-file-format-spec.pdf
|
||||
* AMF3 Deserializer written by EmosewaMC
|
||||
*/
|
||||
|
||||
AMFValue* AMFDeserialize::Read(RakNet::BitStream* inStream) {
|
||||
AMFBaseValue* AMFDeserialize::Read(RakNet::BitStream* inStream) {
|
||||
if (!inStream) return nullptr;
|
||||
AMFValue* returnValue = nullptr;
|
||||
AMFBaseValue* returnValue = nullptr;
|
||||
// Read in the value type from the bitStream
|
||||
int8_t marker;
|
||||
inStream->Read(marker);
|
||||
uint8_t i;
|
||||
inStream->Read(i);
|
||||
if (i > static_cast<uint8_t>(eAmf::Dictionary)) return nullptr;
|
||||
eAmf marker = static_cast<eAmf>(i);
|
||||
// Based on the typing, create the value associated with that and return the base value class
|
||||
switch (marker) {
|
||||
case AMFValueType::AMFUndefined: {
|
||||
returnValue = new AMFUndefinedValue();
|
||||
case eAmf::Undefined: {
|
||||
returnValue = new AMFBaseValue();
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFValueType::AMFNull: {
|
||||
case eAmf::Null: {
|
||||
returnValue = new AMFNullValue();
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFValueType::AMFFalse: {
|
||||
returnValue = new AMFFalseValue();
|
||||
case eAmf::False: {
|
||||
returnValue = new AMFBoolValue(false);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFValueType::AMFTrue: {
|
||||
returnValue = new AMFTrueValue();
|
||||
case eAmf::True: {
|
||||
returnValue = new AMFBoolValue(true);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFValueType::AMFInteger: {
|
||||
case eAmf::Integer: {
|
||||
returnValue = ReadAmfInteger(inStream);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFValueType::AMFDouble: {
|
||||
case eAmf::Double: {
|
||||
returnValue = ReadAmfDouble(inStream);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFValueType::AMFString: {
|
||||
case eAmf::String: {
|
||||
returnValue = ReadAmfString(inStream);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFValueType::AMFArray: {
|
||||
case eAmf::Array: {
|
||||
returnValue = ReadAmfArray(inStream);
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO We do not need these values, but if someone wants to implement them
|
||||
// then please do so and add the corresponding unit tests.
|
||||
case AMFValueType::AMFXMLDoc:
|
||||
case AMFValueType::AMFDate:
|
||||
case AMFValueType::AMFObject:
|
||||
case AMFValueType::AMFXML:
|
||||
case AMFValueType::AMFByteArray:
|
||||
case AMFValueType::AMFVectorInt:
|
||||
case AMFValueType::AMFVectorUInt:
|
||||
case AMFValueType::AMFVectorDouble:
|
||||
case AMFValueType::AMFVectorObject:
|
||||
case AMFValueType::AMFDictionary: {
|
||||
throw static_cast<AMFValueType>(marker);
|
||||
// These values are unimplemented in the live client and will remain unimplemented
|
||||
// unless someone modifies the client to allow serializing of these values.
|
||||
case eAmf::XMLDoc:
|
||||
case eAmf::Date:
|
||||
case eAmf::Object:
|
||||
case eAmf::XML:
|
||||
case eAmf::ByteArray:
|
||||
case eAmf::VectorInt:
|
||||
case eAmf::VectorUInt:
|
||||
case eAmf::VectorDouble:
|
||||
case eAmf::VectorObject:
|
||||
case eAmf::Dictionary: {
|
||||
throw marker;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw static_cast<AMFValueType>(marker);
|
||||
throw std::invalid_argument("Invalid AMF3 marker" + std::to_string(static_cast<int32_t>(marker)));
|
||||
break;
|
||||
}
|
||||
return returnValue;
|
||||
@@ -99,7 +103,7 @@ uint32_t AMFDeserialize::ReadU29(RakNet::BitStream* inStream) {
|
||||
return actualNumber;
|
||||
}
|
||||
|
||||
std::string AMFDeserialize::ReadString(RakNet::BitStream* inStream) {
|
||||
const std::string AMFDeserialize::ReadString(RakNet::BitStream* inStream) {
|
||||
auto length = ReadU29(inStream);
|
||||
// Check if this is a reference
|
||||
bool isReference = length % 2 == 1;
|
||||
@@ -113,48 +117,39 @@ std::string AMFDeserialize::ReadString(RakNet::BitStream* inStream) {
|
||||
return value;
|
||||
} else {
|
||||
// Length is a reference to a previous index - use that as the read in value
|
||||
return accessedElements[length];
|
||||
return accessedElements.at(length);
|
||||
}
|
||||
}
|
||||
|
||||
AMFValue* AMFDeserialize::ReadAmfDouble(RakNet::BitStream* inStream) {
|
||||
auto doubleValue = new AMFDoubleValue();
|
||||
AMFBaseValue* AMFDeserialize::ReadAmfDouble(RakNet::BitStream* inStream) {
|
||||
double value;
|
||||
inStream->Read<double>(value);
|
||||
doubleValue->SetDoubleValue(value);
|
||||
return doubleValue;
|
||||
return new AMFDoubleValue(value);
|
||||
}
|
||||
|
||||
AMFValue* AMFDeserialize::ReadAmfArray(RakNet::BitStream* inStream) {
|
||||
AMFBaseValue* AMFDeserialize::ReadAmfArray(RakNet::BitStream* inStream) {
|
||||
auto arrayValue = new AMFArrayValue();
|
||||
|
||||
// Read size of dense array
|
||||
auto sizeOfDenseArray = (ReadU29(inStream) >> 1);
|
||||
|
||||
// Then read Key'd portion
|
||||
// Then read associative portion
|
||||
while (true) {
|
||||
auto key = ReadString(inStream);
|
||||
// No more values when we encounter an empty string
|
||||
// No more associative values when we encounter an empty string key
|
||||
if (key.size() == 0) break;
|
||||
arrayValue->InsertValue(key, Read(inStream));
|
||||
arrayValue->Insert(key, Read(inStream));
|
||||
}
|
||||
|
||||
// Finally read dense portion
|
||||
for (uint32_t i = 0; i < sizeOfDenseArray; i++) {
|
||||
arrayValue->PushBackValue(Read(inStream));
|
||||
arrayValue->Insert(i, Read(inStream));
|
||||
}
|
||||
|
||||
return arrayValue;
|
||||
}
|
||||
|
||||
AMFValue* AMFDeserialize::ReadAmfString(RakNet::BitStream* inStream) {
|
||||
auto stringValue = new AMFStringValue();
|
||||
stringValue->SetStringValue(ReadString(inStream));
|
||||
return stringValue;
|
||||
AMFBaseValue* AMFDeserialize::ReadAmfString(RakNet::BitStream* inStream) {
|
||||
return new AMFStringValue(ReadString(inStream));
|
||||
}
|
||||
|
||||
AMFValue* AMFDeserialize::ReadAmfInteger(RakNet::BitStream* inStream) {
|
||||
auto integerValue = new AMFIntegerValue();
|
||||
integerValue->SetIntegerValue(ReadU29(inStream));
|
||||
return integerValue;
|
||||
AMFBaseValue* AMFDeserialize::ReadAmfInteger(RakNet::BitStream* inStream) {
|
||||
return new AMFIntValue(ReadU29(inStream));
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class AMFValue;
|
||||
class AMFBaseValue;
|
||||
|
||||
class AMFDeserialize {
|
||||
public:
|
||||
/**
|
||||
@@ -14,7 +15,7 @@ public:
|
||||
* @param inStream inStream to read value from.
|
||||
* @return Returns an AMFValue with all the information from the bitStream in it.
|
||||
*/
|
||||
AMFValue* Read(RakNet::BitStream* inStream);
|
||||
AMFBaseValue* Read(RakNet::BitStream* inStream);
|
||||
private:
|
||||
/**
|
||||
* @brief Private method to read a U29 integer from a bitstream
|
||||
@@ -30,7 +31,7 @@ private:
|
||||
* @param inStream bitStream to read data from
|
||||
* @return The read string
|
||||
*/
|
||||
std::string ReadString(RakNet::BitStream* inStream);
|
||||
const std::string ReadString(RakNet::BitStream* inStream);
|
||||
|
||||
/**
|
||||
* @brief Read an AMFDouble value from a bitStream
|
||||
@@ -38,7 +39,7 @@ private:
|
||||
* @param inStream bitStream to read data from
|
||||
* @return Double value represented as an AMFValue
|
||||
*/
|
||||
AMFValue* ReadAmfDouble(RakNet::BitStream* inStream);
|
||||
AMFBaseValue* ReadAmfDouble(RakNet::BitStream* inStream);
|
||||
|
||||
/**
|
||||
* @brief Read an AMFArray from a bitStream
|
||||
@@ -46,7 +47,7 @@ private:
|
||||
* @param inStream bitStream to read data from
|
||||
* @return Array value represented as an AMFValue
|
||||
*/
|
||||
AMFValue* ReadAmfArray(RakNet::BitStream* inStream);
|
||||
AMFBaseValue* ReadAmfArray(RakNet::BitStream* inStream);
|
||||
|
||||
/**
|
||||
* @brief Read an AMFString from a bitStream
|
||||
@@ -54,7 +55,7 @@ private:
|
||||
* @param inStream bitStream to read data from
|
||||
* @return String value represented as an AMFValue
|
||||
*/
|
||||
AMFValue* ReadAmfString(RakNet::BitStream* inStream);
|
||||
AMFBaseValue* ReadAmfString(RakNet::BitStream* inStream);
|
||||
|
||||
/**
|
||||
* @brief Read an AMFInteger from a bitStream
|
||||
@@ -62,7 +63,7 @@ private:
|
||||
* @param inStream bitStream to read data from
|
||||
* @return Integer value represented as an AMFValue
|
||||
*/
|
||||
AMFValue* ReadAmfInteger(RakNet::BitStream* inStream);
|
||||
AMFBaseValue* ReadAmfInteger(RakNet::BitStream* inStream);
|
||||
|
||||
/**
|
||||
* List of strings read so far saved to be read by reference.
|
||||
|
||||
@@ -1,156 +0,0 @@
|
||||
#include "AMFFormat.h"
|
||||
|
||||
// AMFInteger
|
||||
void AMFIntegerValue::SetIntegerValue(uint32_t value) {
|
||||
this->value = value;
|
||||
}
|
||||
|
||||
uint32_t AMFIntegerValue::GetIntegerValue() {
|
||||
return this->value;
|
||||
}
|
||||
|
||||
// AMFDouble
|
||||
void AMFDoubleValue::SetDoubleValue(double value) {
|
||||
this->value = value;
|
||||
}
|
||||
|
||||
double AMFDoubleValue::GetDoubleValue() {
|
||||
return this->value;
|
||||
}
|
||||
|
||||
// AMFString
|
||||
void AMFStringValue::SetStringValue(const std::string& value) {
|
||||
this->value = value;
|
||||
}
|
||||
|
||||
std::string AMFStringValue::GetStringValue() {
|
||||
return this->value;
|
||||
}
|
||||
|
||||
// AMFXMLDoc
|
||||
void AMFXMLDocValue::SetXMLDocValue(const std::string& value) {
|
||||
this->xmlData = value;
|
||||
}
|
||||
|
||||
std::string AMFXMLDocValue::GetXMLDocValue() {
|
||||
return this->xmlData;
|
||||
}
|
||||
|
||||
// AMFDate
|
||||
void AMFDateValue::SetDateValue(uint64_t value) {
|
||||
this->millisecondTimestamp = value;
|
||||
}
|
||||
|
||||
uint64_t AMFDateValue::GetDateValue() {
|
||||
return this->millisecondTimestamp;
|
||||
}
|
||||
|
||||
// AMFArray Insert Value
|
||||
void AMFArrayValue::InsertValue(const std::string& key, AMFValue* value) {
|
||||
this->associative.insert(std::make_pair(key, value));
|
||||
}
|
||||
|
||||
// AMFArray Remove Value
|
||||
void AMFArrayValue::RemoveValue(const std::string& key) {
|
||||
_AMFArrayMap_::iterator it = this->associative.find(key);
|
||||
if (it != this->associative.end()) {
|
||||
this->associative.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
// AMFArray Get Associative Iterator Begin
|
||||
_AMFArrayMap_::iterator AMFArrayValue::GetAssociativeIteratorValueBegin() {
|
||||
return this->associative.begin();
|
||||
}
|
||||
|
||||
// AMFArray Get Associative Iterator End
|
||||
_AMFArrayMap_::iterator AMFArrayValue::GetAssociativeIteratorValueEnd() {
|
||||
return this->associative.end();
|
||||
}
|
||||
|
||||
// AMFArray Push Back Value
|
||||
void AMFArrayValue::PushBackValue(AMFValue* value) {
|
||||
this->dense.push_back(value);
|
||||
}
|
||||
|
||||
// AMFArray Pop Back Value
|
||||
void AMFArrayValue::PopBackValue() {
|
||||
this->dense.pop_back();
|
||||
}
|
||||
|
||||
// AMFArray Get Dense List Size
|
||||
uint32_t AMFArrayValue::GetDenseValueSize() {
|
||||
return (uint32_t)this->dense.size();
|
||||
}
|
||||
|
||||
// AMFArray Get Dense Iterator Begin
|
||||
_AMFArrayList_::iterator AMFArrayValue::GetDenseIteratorBegin() {
|
||||
return this->dense.begin();
|
||||
}
|
||||
|
||||
// AMFArray Get Dense Iterator End
|
||||
_AMFArrayList_::iterator AMFArrayValue::GetDenseIteratorEnd() {
|
||||
return this->dense.end();
|
||||
}
|
||||
|
||||
AMFArrayValue::~AMFArrayValue() {
|
||||
for (auto valueToDelete : GetDenseArray()) {
|
||||
if (valueToDelete) delete valueToDelete;
|
||||
}
|
||||
for (auto valueToDelete : GetAssociativeMap()) {
|
||||
if (valueToDelete.second) delete valueToDelete.second;
|
||||
}
|
||||
}
|
||||
|
||||
// AMFObject Constructor
|
||||
AMFObjectValue::AMFObjectValue(std::vector<std::pair<std::string, AMFValueType>> traits) {
|
||||
this->traits.reserve(traits.size());
|
||||
std::vector<std::pair<std::string, AMFValueType>>::iterator it = traits.begin();
|
||||
while (it != traits.end()) {
|
||||
this->traits.insert(std::make_pair(it->first, std::make_pair(it->second, new AMFNullValue())));
|
||||
it++;
|
||||
}
|
||||
}
|
||||
|
||||
// AMFObject Set Value
|
||||
void AMFObjectValue::SetTraitValue(const std::string& trait, AMFValue* value) {
|
||||
if (value) {
|
||||
_AMFObjectTraits_::iterator it = this->traits.find(trait);
|
||||
if (it != this->traits.end()) {
|
||||
if (it->second.first == value->GetValueType()) {
|
||||
it->second.second = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AMFObject Get Value
|
||||
AMFValue* AMFObjectValue::GetTraitValue(const std::string& trait) {
|
||||
_AMFObjectTraits_::iterator it = this->traits.find(trait);
|
||||
if (it != this->traits.end()) {
|
||||
return it->second.second;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// AMFObject Get Trait Iterator Begin
|
||||
_AMFObjectTraits_::iterator AMFObjectValue::GetTraitsIteratorBegin() {
|
||||
return this->traits.begin();
|
||||
}
|
||||
|
||||
// AMFObject Get Trait Iterator End
|
||||
_AMFObjectTraits_::iterator AMFObjectValue::GetTraitsIteratorEnd() {
|
||||
return this->traits.end();
|
||||
}
|
||||
|
||||
// AMFObject Get Trait Size
|
||||
uint32_t AMFObjectValue::GetTraitArrayCount() {
|
||||
return (uint32_t)this->traits.size();
|
||||
}
|
||||
|
||||
AMFObjectValue::~AMFObjectValue() {
|
||||
for (auto valueToDelete = GetTraitsIteratorBegin(); valueToDelete != GetTraitsIteratorEnd(); valueToDelete++) {
|
||||
if (valueToDelete->second.second) delete valueToDelete->second.second;
|
||||
}
|
||||
}
|
||||
@@ -1,413 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// Custom Classes
|
||||
#include "dCommonVars.h"
|
||||
|
||||
// C++
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
/*!
|
||||
\file AMFFormat.hpp
|
||||
\brief A class for managing AMF values
|
||||
*/
|
||||
|
||||
class AMFValue; // Forward declaration
|
||||
|
||||
// Definitions
|
||||
#define _AMFArrayMap_ std::unordered_map<std::string, AMFValue*>
|
||||
#define _AMFArrayList_ std::vector<AMFValue*>
|
||||
|
||||
#define _AMFObjectTraits_ std::unordered_map<std::string, std::pair<AMFValueType, AMFValue*>>
|
||||
#define _AMFObjectDynamicTraits_ std::unordered_map<std::string, AMFValue*>
|
||||
|
||||
//! An enum for each AMF value type
|
||||
enum AMFValueType : unsigned char {
|
||||
AMFUndefined = 0x00, //!< An undefined AMF Value
|
||||
AMFNull = 0x01, //!< A null AMF value
|
||||
AMFFalse = 0x02, //!< A false AMF value
|
||||
AMFTrue = 0x03, //!< A true AMF value
|
||||
AMFInteger = 0x04, //!< An integer AMF value
|
||||
AMFDouble = 0x05, //!< A double AMF value
|
||||
AMFString = 0x06, //!< A string AMF value
|
||||
AMFXMLDoc = 0x07, //!< An XML Doc AMF value
|
||||
AMFDate = 0x08, //!< A date AMF value
|
||||
AMFArray = 0x09, //!< An array AMF value
|
||||
AMFObject = 0x0A, //!< An object AMF value
|
||||
AMFXML = 0x0B, //!< An XML AMF value
|
||||
AMFByteArray = 0x0C, //!< A byte array AMF value
|
||||
AMFVectorInt = 0x0D, //!< An integer vector AMF value
|
||||
AMFVectorUInt = 0x0E, //!< An unsigned integer AMF value
|
||||
AMFVectorDouble = 0x0F, //!< A double vector AMF value
|
||||
AMFVectorObject = 0x10, //!< An object vector AMF value
|
||||
AMFDictionary = 0x11 //!< A dictionary AMF value
|
||||
};
|
||||
|
||||
//! An enum for the object value types
|
||||
enum AMFObjectValueType : unsigned char {
|
||||
AMFObjectAnonymous = 0x01,
|
||||
AMFObjectTyped = 0x02,
|
||||
AMFObjectDynamic = 0x03,
|
||||
AMFObjectExternalizable = 0x04
|
||||
};
|
||||
|
||||
//! The base AMF value class
|
||||
class AMFValue {
|
||||
public:
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
virtual AMFValueType GetValueType() = 0;
|
||||
virtual ~AMFValue() {};
|
||||
};
|
||||
|
||||
//! A typedef for a pointer to an AMF value
|
||||
typedef AMFValue* NDGFxValue;
|
||||
|
||||
|
||||
// The various AMF value types
|
||||
|
||||
//! The undefined value AMF type
|
||||
class AMFUndefinedValue : public AMFValue {
|
||||
private:
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFUndefined;
|
||||
};
|
||||
|
||||
//! The null value AMF type
|
||||
class AMFNullValue : public AMFValue {
|
||||
private:
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFNull;
|
||||
};
|
||||
|
||||
//! The false value AMF type
|
||||
class AMFFalseValue : public AMFValue {
|
||||
private:
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFFalse;
|
||||
};
|
||||
|
||||
//! The true value AMF type
|
||||
class AMFTrueValue : public AMFValue {
|
||||
private:
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFTrue;
|
||||
};
|
||||
|
||||
//! The integer value AMF type
|
||||
class AMFIntegerValue : public AMFValue {
|
||||
private:
|
||||
uint32_t value; //!< The value of the AMF type
|
||||
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFInteger;
|
||||
//! Sets the integer value
|
||||
/*!
|
||||
\param value The value to set
|
||||
*/
|
||||
void SetIntegerValue(uint32_t value);
|
||||
|
||||
//! Gets the integer value
|
||||
/*!
|
||||
\return The integer value
|
||||
*/
|
||||
uint32_t GetIntegerValue();
|
||||
};
|
||||
|
||||
//! The double value AMF type
|
||||
class AMFDoubleValue : public AMFValue {
|
||||
private:
|
||||
double value; //!< The value of the AMF type
|
||||
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFDouble;
|
||||
//! Sets the double value
|
||||
/*!
|
||||
\param value The value to set to
|
||||
*/
|
||||
void SetDoubleValue(double value);
|
||||
|
||||
//! Gets the double value
|
||||
/*!
|
||||
\return The double value
|
||||
*/
|
||||
double GetDoubleValue();
|
||||
};
|
||||
|
||||
//! The string value AMF type
|
||||
class AMFStringValue : public AMFValue {
|
||||
private:
|
||||
std::string value; //!< The value of the AMF type
|
||||
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFString;
|
||||
//! Sets the string value
|
||||
/*!
|
||||
\param value The string value to set to
|
||||
*/
|
||||
void SetStringValue(const std::string& value);
|
||||
|
||||
//! Gets the string value
|
||||
/*!
|
||||
\return The string value
|
||||
*/
|
||||
std::string GetStringValue();
|
||||
};
|
||||
|
||||
//! The XML doc value AMF type
|
||||
class AMFXMLDocValue : public AMFValue {
|
||||
private:
|
||||
std::string xmlData; //!< The value of the AMF type
|
||||
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFXMLDoc;
|
||||
//! Sets the XML Doc value
|
||||
/*!
|
||||
\param value The value to set to
|
||||
*/
|
||||
void SetXMLDocValue(const std::string& value);
|
||||
|
||||
//! Gets the XML Doc value
|
||||
/*!
|
||||
\return The XML Doc value
|
||||
*/
|
||||
std::string GetXMLDocValue();
|
||||
};
|
||||
|
||||
//! The date value AMF type
|
||||
class AMFDateValue : public AMFValue {
|
||||
private:
|
||||
uint64_t millisecondTimestamp; //!< The time in milliseconds since the ephoch
|
||||
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() { return ValueType; }
|
||||
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFDate;
|
||||
//! Sets the date time
|
||||
/*!
|
||||
\param value The value to set to
|
||||
*/
|
||||
void SetDateValue(uint64_t value);
|
||||
|
||||
//! Gets the date value
|
||||
/*!
|
||||
\return The date value in milliseconds since the epoch
|
||||
*/
|
||||
uint64_t GetDateValue();
|
||||
};
|
||||
|
||||
//! The array value AMF type
|
||||
// This object will manage it's own memory map and list. Do not delete its values.
|
||||
class AMFArrayValue : public AMFValue {
|
||||
private:
|
||||
_AMFArrayMap_ associative; //!< The array map (associative part)
|
||||
_AMFArrayList_ dense; //!< The array list (dense part)
|
||||
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() override { return ValueType; }
|
||||
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFArray;
|
||||
|
||||
~AMFArrayValue() override;
|
||||
//! Inserts an item into the array map for a specific key
|
||||
/*!
|
||||
\param key The key to set
|
||||
\param value The value to add
|
||||
*/
|
||||
void InsertValue(const std::string& key, AMFValue* value);
|
||||
|
||||
//! Removes an item for a specific key
|
||||
/*!
|
||||
\param key The key to remove
|
||||
*/
|
||||
void RemoveValue(const std::string& key);
|
||||
|
||||
//! Finds an AMF value
|
||||
/*!
|
||||
\return The AMF value if found, nullptr otherwise
|
||||
*/
|
||||
template <typename T>
|
||||
T* FindValue(const std::string& key) const {
|
||||
_AMFArrayMap_::const_iterator it = this->associative.find(key);
|
||||
if (it != this->associative.end() && T::ValueType == it->second->GetValueType()) {
|
||||
return dynamic_cast<T*>(it->second);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
};
|
||||
|
||||
//! Returns where the associative iterator begins
|
||||
/*!
|
||||
\return Where the array map iterator begins
|
||||
*/
|
||||
_AMFArrayMap_::iterator GetAssociativeIteratorValueBegin();
|
||||
|
||||
//! Returns where the associative iterator ends
|
||||
/*!
|
||||
\return Where the array map iterator ends
|
||||
*/
|
||||
_AMFArrayMap_::iterator GetAssociativeIteratorValueEnd();
|
||||
|
||||
//! Pushes back a value into the array list
|
||||
/*!
|
||||
\param value The value to push back
|
||||
*/
|
||||
void PushBackValue(AMFValue* value);
|
||||
|
||||
//! Pops back the last value in the array list
|
||||
void PopBackValue();
|
||||
|
||||
//! Gets the count of the dense list
|
||||
/*!
|
||||
\return The dense list size
|
||||
*/
|
||||
uint32_t GetDenseValueSize();
|
||||
|
||||
//! Gets a specific value from the list for the specified index
|
||||
/*!
|
||||
\param index The index to get
|
||||
*/
|
||||
template <typename T>
|
||||
T* GetValueAt(uint32_t index) {
|
||||
if (index >= this->dense.size()) return nullptr;
|
||||
AMFValue* foundValue = this->dense.at(index);
|
||||
return T::ValueType == foundValue->GetValueType() ? dynamic_cast<T*>(foundValue) : nullptr;
|
||||
};
|
||||
|
||||
//! Returns where the dense iterator begins
|
||||
/*!
|
||||
\return Where the iterator begins
|
||||
*/
|
||||
_AMFArrayList_::iterator GetDenseIteratorBegin();
|
||||
|
||||
//! Returns where the dense iterator ends
|
||||
/*!
|
||||
\return Where the iterator ends
|
||||
*/
|
||||
_AMFArrayList_::iterator GetDenseIteratorEnd();
|
||||
|
||||
//! Returns the associative map
|
||||
/*!
|
||||
\return The associative map
|
||||
*/
|
||||
_AMFArrayMap_ GetAssociativeMap() { return this->associative; };
|
||||
|
||||
//! Returns the dense array
|
||||
/*!
|
||||
\return The dense array
|
||||
*/
|
||||
_AMFArrayList_ GetDenseArray() { return this->dense; };
|
||||
};
|
||||
|
||||
//! The anonymous object value AMF type
|
||||
class AMFObjectValue : public AMFValue {
|
||||
private:
|
||||
_AMFObjectTraits_ traits; //!< The object traits
|
||||
|
||||
//! Returns the AMF value type
|
||||
/*!
|
||||
\return The AMF value type
|
||||
*/
|
||||
AMFValueType GetValueType() override { return ValueType; }
|
||||
~AMFObjectValue() override;
|
||||
|
||||
public:
|
||||
static const AMFValueType ValueType = AMFObject;
|
||||
//! Constructor
|
||||
/*!
|
||||
\param traits The traits to set
|
||||
*/
|
||||
AMFObjectValue(std::vector<std::pair<std::string, AMFValueType>> traits);
|
||||
|
||||
//! Gets the object value type
|
||||
/*!
|
||||
\return The object value type
|
||||
*/
|
||||
virtual AMFObjectValueType GetObjectValueType() { return AMFObjectAnonymous; }
|
||||
|
||||
//! Sets the value of a trait
|
||||
/*!
|
||||
\param trait The trait to set the value for
|
||||
\param value The AMF value to set
|
||||
*/
|
||||
void SetTraitValue(const std::string& trait, AMFValue* value);
|
||||
|
||||
//! Gets a trait value
|
||||
/*!
|
||||
\param trait The trait to get the value for
|
||||
\return The trait value
|
||||
*/
|
||||
AMFValue* GetTraitValue(const std::string& trait);
|
||||
|
||||
//! Gets the beginning of the object traits iterator
|
||||
/*!
|
||||
\return The AMF trait array iterator begin
|
||||
*/
|
||||
_AMFObjectTraits_::iterator GetTraitsIteratorBegin();
|
||||
|
||||
//! Gets the end of the object traits iterator
|
||||
/*!
|
||||
\return The AMF trait array iterator begin
|
||||
*/
|
||||
_AMFObjectTraits_::iterator GetTraitsIteratorEnd();
|
||||
|
||||
//! Gets the amount of traits
|
||||
/*!
|
||||
\return The amount of traits
|
||||
*/
|
||||
uint32_t GetTraitArrayCount();
|
||||
};
|
||||
@@ -1,259 +0,0 @@
|
||||
#include "AMFFormat_BitStream.h"
|
||||
|
||||
// Writes an AMFValue pointer to a RakNet::BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFValue*>(AMFValue* value) {
|
||||
if (value != nullptr) {
|
||||
AMFValueType type = value->GetValueType();
|
||||
|
||||
switch (type) {
|
||||
case AMFUndefined: {
|
||||
AMFUndefinedValue* v = (AMFUndefinedValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFNull: {
|
||||
AMFNullValue* v = (AMFNullValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFFalse: {
|
||||
AMFFalseValue* v = (AMFFalseValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFTrue: {
|
||||
AMFTrueValue* v = (AMFTrueValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFInteger: {
|
||||
AMFIntegerValue* v = (AMFIntegerValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFDouble: {
|
||||
AMFDoubleValue* v = (AMFDoubleValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFString: {
|
||||
AMFStringValue* v = (AMFStringValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFXMLDoc: {
|
||||
AMFXMLDocValue* v = (AMFXMLDocValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFDate: {
|
||||
AMFDateValue* v = (AMFDateValue*)value;
|
||||
this->Write(*v);
|
||||
break;
|
||||
}
|
||||
|
||||
case AMFArray: {
|
||||
this->Write((AMFArrayValue*)value);
|
||||
break;
|
||||
}
|
||||
case AMFObject:
|
||||
case AMFXML:
|
||||
case AMFByteArray:
|
||||
case AMFVectorInt:
|
||||
case AMFVectorUInt:
|
||||
case AMFVectorDouble:
|
||||
case AMFVectorObject:
|
||||
case AMFDictionary:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A private function to write an value to a RakNet::BitStream
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteUInt29(RakNet::BitStream* bs, uint32_t v) {
|
||||
unsigned char b4 = (unsigned char)v;
|
||||
if (v < 0x00200000) {
|
||||
b4 = b4 & 0x7F;
|
||||
if (v > 0x7F) {
|
||||
unsigned char b3;
|
||||
v = v >> 7;
|
||||
b3 = ((unsigned char)(v)) | 0x80;
|
||||
if (v > 0x7F) {
|
||||
unsigned char b2;
|
||||
v = v >> 7;
|
||||
b2 = ((unsigned char)(v)) | 0x80;
|
||||
bs->Write(b2);
|
||||
}
|
||||
|
||||
bs->Write(b3);
|
||||
}
|
||||
} else {
|
||||
unsigned char b1;
|
||||
unsigned char b2;
|
||||
unsigned char b3;
|
||||
|
||||
v = v >> 8;
|
||||
b3 = ((unsigned char)(v)) | 0x80;
|
||||
v = v >> 7;
|
||||
b2 = ((unsigned char)(v)) | 0x80;
|
||||
v = v >> 7;
|
||||
b1 = ((unsigned char)(v)) | 0x80;
|
||||
|
||||
bs->Write(b1);
|
||||
bs->Write(b2);
|
||||
bs->Write(b3);
|
||||
}
|
||||
|
||||
bs->Write(b4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a flag number to a RakNet::BitStream
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteFlagNumber(RakNet::BitStream* bs, uint32_t v) {
|
||||
v = (v << 1) | 0x01;
|
||||
WriteUInt29(bs, v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an AMFString to a RakNet::BitStream
|
||||
*
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteAMFString(RakNet::BitStream* bs, const std::string& str) {
|
||||
WriteFlagNumber(bs, (uint32_t)str.size());
|
||||
bs->Write(str.c_str(), (uint32_t)str.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an U16 to a bitstream
|
||||
*
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteAMFU16(RakNet::BitStream* bs, uint16_t value) {
|
||||
bs->Write(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an U32 to a bitstream
|
||||
*
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteAMFU32(RakNet::BitStream* bs, uint32_t value) {
|
||||
bs->Write(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an U64 to a bitstream
|
||||
*
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteAMFU64(RakNet::BitStream* bs, uint64_t value) {
|
||||
bs->Write(value);
|
||||
}
|
||||
|
||||
|
||||
// Writes an AMFUndefinedValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFUndefinedValue>(AMFUndefinedValue value) {
|
||||
this->Write(AMFUndefined);
|
||||
}
|
||||
|
||||
// Writes an AMFNullValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFNullValue>(AMFNullValue value) {
|
||||
this->Write(AMFNull);
|
||||
}
|
||||
|
||||
// Writes an AMFFalseValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFFalseValue>(AMFFalseValue value) {
|
||||
this->Write(AMFFalse);
|
||||
}
|
||||
|
||||
// Writes an AMFTrueValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFTrueValue>(AMFTrueValue value) {
|
||||
this->Write(AMFTrue);
|
||||
}
|
||||
|
||||
// Writes an AMFIntegerValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFIntegerValue>(AMFIntegerValue value) {
|
||||
this->Write(AMFInteger);
|
||||
WriteUInt29(this, value.GetIntegerValue());
|
||||
}
|
||||
|
||||
// Writes an AMFDoubleValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFDoubleValue>(AMFDoubleValue value) {
|
||||
this->Write(AMFDouble);
|
||||
double d = value.GetDoubleValue();
|
||||
WriteAMFU64(this, *((unsigned long long*) & d));
|
||||
}
|
||||
|
||||
// Writes an AMFStringValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFStringValue>(AMFStringValue value) {
|
||||
this->Write(AMFString);
|
||||
std::string v = value.GetStringValue();
|
||||
WriteAMFString(this, v);
|
||||
}
|
||||
|
||||
// Writes an AMFXMLDocValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFXMLDocValue>(AMFXMLDocValue value) {
|
||||
this->Write(AMFXMLDoc);
|
||||
std::string v = value.GetXMLDocValue();
|
||||
WriteAMFString(this, v);
|
||||
}
|
||||
|
||||
// Writes an AMFDateValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFDateValue>(AMFDateValue value) {
|
||||
this->Write(AMFDate);
|
||||
uint64_t date = value.GetDateValue();
|
||||
WriteAMFU64(this, date);
|
||||
}
|
||||
|
||||
// Writes an AMFArrayValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFArrayValue*>(AMFArrayValue* value) {
|
||||
this->Write(AMFArray);
|
||||
uint32_t denseSize = value->GetDenseValueSize();
|
||||
WriteFlagNumber(this, denseSize);
|
||||
|
||||
_AMFArrayMap_::iterator it = value->GetAssociativeIteratorValueBegin();
|
||||
_AMFArrayMap_::iterator end = value->GetAssociativeIteratorValueEnd();
|
||||
|
||||
while (it != end) {
|
||||
WriteAMFString(this, it->first);
|
||||
this->Write(it->second);
|
||||
it++;
|
||||
}
|
||||
|
||||
this->Write(AMFNull);
|
||||
|
||||
if (denseSize > 0) {
|
||||
_AMFArrayList_::iterator it2 = value->GetDenseIteratorBegin();
|
||||
_AMFArrayList_::iterator end2 = value->GetDenseIteratorEnd();
|
||||
|
||||
while (it2 != end2) {
|
||||
this->Write(*it2);
|
||||
it2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,92 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// Custom Classes
|
||||
#include "AMFFormat.h"
|
||||
|
||||
// RakNet
|
||||
#include <BitStream.h>
|
||||
|
||||
/*!
|
||||
\file AMFFormat_BitStream.h
|
||||
\brief A class that implements native writing of AMF values to RakNet::BitStream
|
||||
*/
|
||||
|
||||
// We are using the RakNet namespace
|
||||
namespace RakNet {
|
||||
//! Writes an AMFValue pointer to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFValue*>(AMFValue* value);
|
||||
|
||||
//! Writes an AMFUndefinedValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFUndefinedValue>(AMFUndefinedValue value);
|
||||
|
||||
//! Writes an AMFNullValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFNullValue>(AMFNullValue value);
|
||||
|
||||
//! Writes an AMFFalseValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFFalseValue>(AMFFalseValue value);
|
||||
|
||||
//! Writes an AMFTrueValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFTrueValue>(AMFTrueValue value);
|
||||
|
||||
//! Writes an AMFIntegerValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFIntegerValue>(AMFIntegerValue value);
|
||||
|
||||
//! Writes an AMFDoubleValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFDoubleValue>(AMFDoubleValue value);
|
||||
|
||||
//! Writes an AMFStringValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFStringValue>(AMFStringValue value);
|
||||
|
||||
//! Writes an AMFXMLDocValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFXMLDocValue>(AMFXMLDocValue value);
|
||||
|
||||
//! Writes an AMFDateValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFDateValue>(AMFDateValue value);
|
||||
|
||||
//! Writes an AMFArrayValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFArrayValue*>(AMFArrayValue* value);
|
||||
} // namespace RakNet
|
||||
367
dCommon/Amf3.h
Normal file
367
dCommon/Amf3.h
Normal file
@@ -0,0 +1,367 @@
|
||||
#ifndef __AMF3__H__
|
||||
#define __AMF3__H__
|
||||
|
||||
#include "dCommonVars.h"
|
||||
#include "dLogger.h"
|
||||
#include "Game.h"
|
||||
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
enum class eAmf : uint8_t {
|
||||
Undefined = 0x00, // An undefined AMF Value
|
||||
Null = 0x01, // A null AMF value
|
||||
False = 0x02, // A false AMF value
|
||||
True = 0x03, // A true AMF value
|
||||
Integer = 0x04, // An integer AMF value
|
||||
Double = 0x05, // A double AMF value
|
||||
String = 0x06, // A string AMF value
|
||||
XMLDoc = 0x07, // Unused in the live client and cannot be serialized without modification. An XML Doc AMF value
|
||||
Date = 0x08, // Unused in the live client and cannot be serialized without modification. A date AMF value
|
||||
Array = 0x09, // An array AMF value
|
||||
Object = 0x0A, // Unused in the live client and cannot be serialized without modification. An object AMF value
|
||||
XML = 0x0B, // Unused in the live client and cannot be serialized without modification. An XML AMF value
|
||||
ByteArray = 0x0C, // Unused in the live client and cannot be serialized without modification. A byte array AMF value
|
||||
VectorInt = 0x0D, // Unused in the live client and cannot be serialized without modification. An integer vector AMF value
|
||||
VectorUInt = 0x0E, // Unused in the live client and cannot be serialized without modification. An unsigned integer AMF value
|
||||
VectorDouble = 0x0F, // Unused in the live client and cannot be serialized without modification. A double vector AMF value
|
||||
VectorObject = 0x10, // Unused in the live client and cannot be serialized without modification. An object vector AMF value
|
||||
Dictionary = 0x11 // Unused in the live client and cannot be serialized without modification. A dictionary AMF value
|
||||
};
|
||||
|
||||
class AMFBaseValue {
|
||||
public:
|
||||
virtual eAmf GetValueType() { return eAmf::Undefined; };
|
||||
AMFBaseValue() {};
|
||||
virtual ~AMFBaseValue() {};
|
||||
};
|
||||
|
||||
template<typename ValueType>
|
||||
class AMFValue : public AMFBaseValue {
|
||||
public:
|
||||
AMFValue() {};
|
||||
AMFValue(ValueType value) { SetValue(value); };
|
||||
virtual ~AMFValue() override {};
|
||||
|
||||
eAmf GetValueType() override { return eAmf::Undefined; };
|
||||
|
||||
const ValueType& GetValue() { return data; };
|
||||
void SetValue(ValueType value) { data = value; };
|
||||
protected:
|
||||
ValueType data;
|
||||
};
|
||||
|
||||
// As a string this is much easier to write and read from a BitStream.
|
||||
template<>
|
||||
class AMFValue<const char*> : public AMFBaseValue {
|
||||
public:
|
||||
AMFValue() {};
|
||||
AMFValue(const char* value) { SetValue(std::string(value)); };
|
||||
virtual ~AMFValue() override {};
|
||||
|
||||
eAmf GetValueType() override { return eAmf::String; };
|
||||
|
||||
const std::string& GetValue() { return data; };
|
||||
void SetValue(std::string value) { data = value; };
|
||||
protected:
|
||||
std::string data;
|
||||
};
|
||||
|
||||
typedef AMFValue<std::nullptr_t> AMFNullValue;
|
||||
typedef AMFValue<bool> AMFBoolValue;
|
||||
typedef AMFValue<int32_t> AMFIntValue;
|
||||
typedef AMFValue<std::string> AMFStringValue;
|
||||
typedef AMFValue<double> AMFDoubleValue;
|
||||
|
||||
template<> inline eAmf AMFValue<std::nullptr_t>::GetValueType() { return eAmf::Null; };
|
||||
template<> inline eAmf AMFValue<bool>::GetValueType() { return this->data ? eAmf::True : eAmf::False; };
|
||||
template<> inline eAmf AMFValue<int32_t>::GetValueType() { return eAmf::Integer; };
|
||||
template<> inline eAmf AMFValue<uint32_t>::GetValueType() { return eAmf::Integer; };
|
||||
template<> inline eAmf AMFValue<std::string>::GetValueType() { return eAmf::String; };
|
||||
template<> inline eAmf AMFValue<double>::GetValueType() { return eAmf::Double; };
|
||||
|
||||
/**
|
||||
* The AMFArrayValue object holds 2 types of lists:
|
||||
* An associative list where a key maps to a value
|
||||
* A Dense list where elements are stored back to back
|
||||
*
|
||||
* Objects that are Registered are owned by this object
|
||||
* and are not to be deleted by a caller.
|
||||
*/
|
||||
class AMFArrayValue : public AMFBaseValue {
|
||||
|
||||
typedef std::unordered_map<std::string, AMFBaseValue*> AMFAssociative;
|
||||
typedef std::vector<AMFBaseValue*> AMFDense;
|
||||
|
||||
public:
|
||||
eAmf GetValueType() override { return eAmf::Array; };
|
||||
|
||||
~AMFArrayValue() override {
|
||||
for (auto valueToDelete : GetDense()) {
|
||||
if (valueToDelete) {
|
||||
delete valueToDelete;
|
||||
valueToDelete = nullptr;
|
||||
}
|
||||
}
|
||||
for (auto valueToDelete : GetAssociative()) {
|
||||
if (valueToDelete.second) {
|
||||
delete valueToDelete.second;
|
||||
valueToDelete.second = nullptr;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the Associative portion of the object
|
||||
*/
|
||||
inline AMFAssociative& GetAssociative() { return this->associative; };
|
||||
|
||||
/**
|
||||
* Returns the dense portion of the object
|
||||
*/
|
||||
inline AMFDense& GetDense() { return this->dense; };
|
||||
|
||||
/**
|
||||
* Inserts an AMFValue into the associative portion with the given key.
|
||||
* If a duplicate is attempted to be inserted, it is ignored and the
|
||||
* first value with that key is kept in the map.
|
||||
*
|
||||
* These objects are not to be deleted by the caller as they are owned by
|
||||
* the AMFArray object which manages its own memory.
|
||||
*
|
||||
* @param key The key to associate with the value
|
||||
* @param value The value to insert
|
||||
*
|
||||
* @return The inserted element if the type matched,
|
||||
* or nullptr if a key existed and was not the same type
|
||||
*/
|
||||
template<typename ValueType>
|
||||
std::pair<AMFValue<ValueType>*, bool> Insert(const std::string& key, ValueType value) {
|
||||
auto element = associative.find(key);
|
||||
AMFValue<ValueType>* val = nullptr;
|
||||
bool found = true;
|
||||
if (element == associative.end()) {
|
||||
val = new AMFValue<ValueType>(value);
|
||||
associative.insert(std::make_pair(key, val));
|
||||
} else {
|
||||
val = dynamic_cast<AMFValue<ValueType>*>(element->second);
|
||||
found = false;
|
||||
}
|
||||
return std::make_pair(val, found);
|
||||
};
|
||||
|
||||
// Associates an array with a string key
|
||||
std::pair<AMFBaseValue*, bool> Insert(const std::string& key) {
|
||||
auto element = associative.find(key);
|
||||
AMFArrayValue* val = nullptr;
|
||||
bool found = true;
|
||||
if (element == associative.end()) {
|
||||
val = new AMFArrayValue();
|
||||
associative.insert(std::make_pair(key, val));
|
||||
} else {
|
||||
val = dynamic_cast<AMFArrayValue*>(element->second);
|
||||
found = false;
|
||||
}
|
||||
return std::make_pair(val, found);
|
||||
};
|
||||
|
||||
// Associates an array with an integer key
|
||||
std::pair<AMFBaseValue*, bool> Insert(const uint32_t& index) {
|
||||
AMFArrayValue* val = nullptr;
|
||||
bool inserted = false;
|
||||
if (index >= dense.size()) {
|
||||
dense.resize(index + 1);
|
||||
val = new AMFArrayValue();
|
||||
dense.at(index) = val;
|
||||
inserted = true;
|
||||
}
|
||||
return std::make_pair(dynamic_cast<AMFArrayValue*>(dense.at(index)), inserted);
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Inserts an AMFValue into the AMFArray key'd by index.
|
||||
* Attempting to insert the same key to the same value twice overwrites
|
||||
* the previous value with the new one.
|
||||
*
|
||||
* @param index The index to associate with the value
|
||||
* @param value The value to insert
|
||||
* @return The inserted element, or nullptr if the type did not match
|
||||
* what was at the index.
|
||||
*/
|
||||
template<typename ValueType>
|
||||
std::pair<AMFValue<ValueType>*, bool> Insert(const uint32_t& index, ValueType value) {
|
||||
AMFValue<ValueType>* val = nullptr;
|
||||
bool inserted = false;
|
||||
if (index >= this->dense.size()) {
|
||||
this->dense.resize(index + 1);
|
||||
val = new AMFValue<ValueType>(value);
|
||||
this->dense.at(index) = val;
|
||||
inserted = true;
|
||||
}
|
||||
return std::make_pair(dynamic_cast<AMFValue<ValueType>*>(this->dense.at(index)), inserted);
|
||||
};
|
||||
|
||||
/**
|
||||
* Inserts an AMFValue into the associative portion with the given key.
|
||||
* If a duplicate is attempted to be inserted, it replaces the original
|
||||
*
|
||||
* The inserted element is now owned by this object and is not to be deleted
|
||||
*
|
||||
* @param key The key to associate with the value
|
||||
* @param value The value to insert
|
||||
*/
|
||||
void Insert(const std::string& key, AMFBaseValue* value) {
|
||||
auto element = associative.find(key);
|
||||
if (element != associative.end() && element->second) {
|
||||
delete element->second;
|
||||
element->second = value;
|
||||
} else {
|
||||
associative.insert(std::make_pair(key, value));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Inserts an AMFValue into the associative portion with the given index.
|
||||
* If a duplicate is attempted to be inserted, it replaces the original
|
||||
*
|
||||
* The inserted element is now owned by this object and is not to be deleted
|
||||
*
|
||||
* @param key The key to associate with the value
|
||||
* @param value The value to insert
|
||||
*/
|
||||
void Insert(const uint32_t index, AMFBaseValue* value) {
|
||||
if (index < dense.size()) {
|
||||
AMFDense::iterator itr = dense.begin() + index;
|
||||
if (*itr) delete dense.at(index);
|
||||
} else {
|
||||
dense.resize(index + 1);
|
||||
}
|
||||
dense.at(index) = value;
|
||||
};
|
||||
|
||||
/**
|
||||
* Pushes an AMFValue into the back of the dense portion.
|
||||
*
|
||||
* These objects are not to be deleted by the caller as they are owned by
|
||||
* the AMFArray object which manages its own memory.
|
||||
*
|
||||
* @param value The value to insert
|
||||
*
|
||||
* @return The inserted pointer, or nullptr should the key already be in use.
|
||||
*/
|
||||
template<typename ValueType>
|
||||
inline AMFValue<ValueType>* Push(ValueType value) {
|
||||
return Insert(this->dense.size(), value).first;
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes the key from the associative portion
|
||||
*
|
||||
* The pointer removed is now no longer managed by this container
|
||||
*
|
||||
* @param key The key to remove from the associative portion
|
||||
*/
|
||||
void Remove(const std::string& key, bool deleteValue = true) {
|
||||
AMFAssociative::iterator it = this->associative.find(key);
|
||||
if (it != this->associative.end()) {
|
||||
if (deleteValue) delete it->second;
|
||||
this->associative.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Pops the last element in the dense portion, deleting it in the process.
|
||||
*/
|
||||
void Remove(const uint32_t index) {
|
||||
if (!this->dense.empty() && index < this->dense.size()) {
|
||||
auto itr = this->dense.begin() + index;
|
||||
if (*itr) delete (*itr);
|
||||
this->dense.erase(itr);
|
||||
}
|
||||
}
|
||||
|
||||
void Pop() {
|
||||
if (!this->dense.empty()) Remove(this->dense.size() - 1);
|
||||
}
|
||||
|
||||
AMFArrayValue* GetArray(const std::string& key) {
|
||||
AMFAssociative::const_iterator it = this->associative.find(key);
|
||||
if (it != this->associative.end()) {
|
||||
return dynamic_cast<AMFArrayValue*>(it->second);
|
||||
}
|
||||
return nullptr;
|
||||
};
|
||||
|
||||
AMFArrayValue* GetArray(const uint32_t index) {
|
||||
return index >= this->dense.size() ? nullptr : dynamic_cast<AMFArrayValue*>(this->dense.at(index));
|
||||
};
|
||||
|
||||
inline AMFArrayValue* InsertArray(const std::string& key) {
|
||||
return static_cast<AMFArrayValue*>(Insert(key).first);
|
||||
};
|
||||
|
||||
inline AMFArrayValue* InsertArray(const uint32_t index) {
|
||||
return static_cast<AMFArrayValue*>(Insert(index).first);
|
||||
};
|
||||
|
||||
inline AMFArrayValue* PushArray() {
|
||||
return static_cast<AMFArrayValue*>(Insert(this->dense.size()).first);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets an AMFValue by the key from the associative portion and converts it
|
||||
* to the AmfValue template type. If the key did not exist, it is inserted.
|
||||
*
|
||||
* @tparam The target object type
|
||||
* @param key The key to lookup
|
||||
*
|
||||
* @return The AMFValue
|
||||
*/
|
||||
template <typename AmfType>
|
||||
AMFValue<AmfType>* Get(const std::string& key) const {
|
||||
AMFAssociative::const_iterator it = this->associative.find(key);
|
||||
return it != this->associative.end() ?
|
||||
dynamic_cast<AMFValue<AmfType>*>(it->second) :
|
||||
nullptr;
|
||||
};
|
||||
|
||||
// Get from the array but dont cast it
|
||||
AMFBaseValue* Get(const std::string& key) const {
|
||||
AMFAssociative::const_iterator it = this->associative.find(key);
|
||||
return it != this->associative.end() ? it->second : nullptr;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Get an AMFValue object at a position in the dense portion.
|
||||
* Gets an AMFValue by the index from the dense portion and converts it
|
||||
* to the AmfValue template type. If the index did not exist, it is inserted.
|
||||
*
|
||||
* @tparam The target object type
|
||||
* @param index The index to get
|
||||
* @return The casted object, or nullptr.
|
||||
*/
|
||||
template <typename AmfType>
|
||||
AMFValue<AmfType>* Get(uint32_t index) const {
|
||||
return index < this->dense.size() ?
|
||||
dynamic_cast<AMFValue<AmfType>*>(this->dense.at(index)) :
|
||||
nullptr;
|
||||
};
|
||||
|
||||
// Get from the dense but dont cast it
|
||||
AMFBaseValue* Get(const uint32_t index) const {
|
||||
return index < this->dense.size() ? this->dense.at(index) : nullptr;
|
||||
};
|
||||
private:
|
||||
/**
|
||||
* The associative portion. These values are key'd with strings to an AMFValue.
|
||||
*/
|
||||
AMFAssociative associative;
|
||||
|
||||
/**
|
||||
* The dense portion. These AMFValue's are stored one after
|
||||
* another with the most recent addition being at the back.
|
||||
*/
|
||||
AMFDense dense;
|
||||
};
|
||||
|
||||
#endif //!__AMF3__H__
|
||||
184
dCommon/AmfSerialize.cpp
Normal file
184
dCommon/AmfSerialize.cpp
Normal file
@@ -0,0 +1,184 @@
|
||||
#include "AmfSerialize.h"
|
||||
|
||||
#include "Game.h"
|
||||
#include "dLogger.h"
|
||||
|
||||
// Writes an AMFValue pointer to a RakNet::BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFBaseValue&>(AMFBaseValue& value) {
|
||||
eAmf type = value.GetValueType();
|
||||
this->Write(type);
|
||||
switch (type) {
|
||||
case eAmf::Integer: {
|
||||
this->Write<AMFIntValue&>(*static_cast<AMFIntValue*>(&value));
|
||||
break;
|
||||
}
|
||||
|
||||
case eAmf::Double: {
|
||||
this->Write<AMFDoubleValue&>(*static_cast<AMFDoubleValue*>(&value));
|
||||
break;
|
||||
}
|
||||
|
||||
case eAmf::String: {
|
||||
this->Write<AMFStringValue&>(*static_cast<AMFStringValue*>(&value));
|
||||
break;
|
||||
}
|
||||
|
||||
case eAmf::Array: {
|
||||
this->Write<AMFArrayValue&>(*static_cast<AMFArrayValue*>(&value));
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
Game::logger->Log("AmfSerialize", "Encountered unwritable AMFType %i!", type);
|
||||
}
|
||||
case eAmf::Undefined:
|
||||
case eAmf::Null:
|
||||
case eAmf::False:
|
||||
case eAmf::True:
|
||||
case eAmf::Date:
|
||||
case eAmf::Object:
|
||||
case eAmf::XML:
|
||||
case eAmf::XMLDoc:
|
||||
case eAmf::ByteArray:
|
||||
case eAmf::VectorInt:
|
||||
case eAmf::VectorUInt:
|
||||
case eAmf::VectorDouble:
|
||||
case eAmf::VectorObject:
|
||||
case eAmf::Dictionary:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A private function to write an value to a RakNet::BitStream
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteUInt29(RakNet::BitStream* bs, uint32_t v) {
|
||||
unsigned char b4 = (unsigned char)v;
|
||||
if (v < 0x00200000) {
|
||||
b4 = b4 & 0x7F;
|
||||
if (v > 0x7F) {
|
||||
unsigned char b3;
|
||||
v = v >> 7;
|
||||
b3 = ((unsigned char)(v)) | 0x80;
|
||||
if (v > 0x7F) {
|
||||
unsigned char b2;
|
||||
v = v >> 7;
|
||||
b2 = ((unsigned char)(v)) | 0x80;
|
||||
bs->Write(b2);
|
||||
}
|
||||
|
||||
bs->Write(b3);
|
||||
}
|
||||
} else {
|
||||
unsigned char b1;
|
||||
unsigned char b2;
|
||||
unsigned char b3;
|
||||
|
||||
v = v >> 8;
|
||||
b3 = ((unsigned char)(v)) | 0x80;
|
||||
v = v >> 7;
|
||||
b2 = ((unsigned char)(v)) | 0x80;
|
||||
v = v >> 7;
|
||||
b1 = ((unsigned char)(v)) | 0x80;
|
||||
|
||||
bs->Write(b1);
|
||||
bs->Write(b2);
|
||||
bs->Write(b3);
|
||||
}
|
||||
|
||||
bs->Write(b4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a flag number to a RakNet::BitStream
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteFlagNumber(RakNet::BitStream* bs, uint32_t v) {
|
||||
v = (v << 1) | 0x01;
|
||||
WriteUInt29(bs, v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an AMFString to a RakNet::BitStream
|
||||
*
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteAMFString(RakNet::BitStream* bs, const std::string& str) {
|
||||
WriteFlagNumber(bs, (uint32_t)str.size());
|
||||
bs->Write(str.c_str(), (uint32_t)str.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an U16 to a bitstream
|
||||
*
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteAMFU16(RakNet::BitStream* bs, uint16_t value) {
|
||||
bs->Write(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an U32 to a bitstream
|
||||
*
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteAMFU32(RakNet::BitStream* bs, uint32_t value) {
|
||||
bs->Write(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an U64 to a bitstream
|
||||
*
|
||||
* RakNet writes in the correct byte order - do not reverse this.
|
||||
*/
|
||||
void WriteAMFU64(RakNet::BitStream* bs, uint64_t value) {
|
||||
bs->Write(value);
|
||||
}
|
||||
|
||||
// Writes an AMFIntegerValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFIntValue&>(AMFIntValue& value) {
|
||||
WriteUInt29(this, value.GetValue());
|
||||
}
|
||||
|
||||
// Writes an AMFDoubleValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFDoubleValue&>(AMFDoubleValue& value) {
|
||||
double d = value.GetValue();
|
||||
WriteAMFU64(this, *reinterpret_cast<uint64_t*>(&d));
|
||||
}
|
||||
|
||||
// Writes an AMFStringValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFStringValue&>(AMFStringValue& value) {
|
||||
WriteAMFString(this, value.GetValue());
|
||||
}
|
||||
|
||||
// Writes an AMFArrayValue to BitStream
|
||||
template<>
|
||||
void RakNet::BitStream::Write<AMFArrayValue&>(AMFArrayValue& value) {
|
||||
uint32_t denseSize = value.GetDense().size();
|
||||
WriteFlagNumber(this, denseSize);
|
||||
|
||||
auto it = value.GetAssociative().begin();
|
||||
auto end = value.GetAssociative().end();
|
||||
|
||||
while (it != end) {
|
||||
WriteAMFString(this, it->first);
|
||||
this->Write<AMFBaseValue&>(*it->second);
|
||||
it++;
|
||||
}
|
||||
|
||||
this->Write(eAmf::Null);
|
||||
|
||||
if (denseSize > 0) {
|
||||
auto it2 = value.GetDense().begin();
|
||||
auto end2 = value.GetDense().end();
|
||||
|
||||
while (it2 != end2) {
|
||||
this->Write<AMFBaseValue&>(**it2);
|
||||
it2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
50
dCommon/AmfSerialize.h
Normal file
50
dCommon/AmfSerialize.h
Normal file
@@ -0,0 +1,50 @@
|
||||
#pragma once
|
||||
|
||||
// Custom Classes
|
||||
#include "Amf3.h"
|
||||
|
||||
// RakNet
|
||||
#include <BitStream.h>
|
||||
|
||||
/*!
|
||||
\file AmfSerialize.h
|
||||
\brief A class that implements native writing of AMF values to RakNet::BitStream
|
||||
*/
|
||||
|
||||
// We are using the RakNet namespace
|
||||
namespace RakNet {
|
||||
//! Writes an AMFValue pointer to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFBaseValue&>(AMFBaseValue& value);
|
||||
|
||||
//! Writes an AMFIntegerValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFIntValue&>(AMFIntValue& value);
|
||||
|
||||
//! Writes an AMFDoubleValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFDoubleValue&>(AMFDoubleValue& value);
|
||||
|
||||
//! Writes an AMFStringValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFStringValue&>(AMFStringValue& value);
|
||||
|
||||
//! Writes an AMFArrayValue to a RakNet::BitStream
|
||||
/*!
|
||||
\param value The value to write
|
||||
*/
|
||||
template <>
|
||||
void RakNet::BitStream::Write<AMFArrayValue&>(AMFArrayValue& value);
|
||||
} // namespace RakNet
|
||||
@@ -1,6 +1,6 @@
|
||||
set(DCOMMON_SOURCES "AMFFormat.cpp"
|
||||
set(DCOMMON_SOURCES
|
||||
"AMFDeserialize.cpp"
|
||||
"AMFFormat_BitStream.cpp"
|
||||
"AmfSerialize.cpp"
|
||||
"BinaryIO.cpp"
|
||||
"dConfig.cpp"
|
||||
"Diagnostics.cpp"
|
||||
|
||||
12
dCommon/DluAssert.h
Normal file
12
dCommon/DluAssert.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef __DLUASSERT__H__
|
||||
#define __DLUASSERT__H__
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#ifdef _DEBUG
|
||||
# define DluAssert(expression) assert(expression)
|
||||
#else
|
||||
# define DluAssert(expression)
|
||||
#endif
|
||||
|
||||
#endif //!__DLUASSERT__H__
|
||||
@@ -7,6 +7,8 @@
|
||||
#include <string>
|
||||
#include <set>
|
||||
#include "BitStream.h"
|
||||
#include "eConnectionType.h"
|
||||
#include "eClientMessageType.h"
|
||||
|
||||
#pragma warning (disable:4251) //Disables SQL warnings
|
||||
|
||||
@@ -26,9 +28,11 @@ constexpr uint32_t lowFrameDelta = FRAMES_TO_MS(lowFramerate);
|
||||
|
||||
//========== MACROS ===========
|
||||
|
||||
#define HEADER_SIZE 8
|
||||
#define CBITSTREAM RakNet::BitStream bitStream;
|
||||
#define CINSTREAM RakNet::BitStream inStream(packet->data, packet->length, false);
|
||||
#define CMSGHEADER PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_GAME_MSG);
|
||||
#define CINSTREAM_SKIP_HEADER CINSTREAM if (inStream.GetNumberOfUnreadBits() >= BYTES_TO_BITS(HEADER_SIZE)) inStream.IgnoreBytes(HEADER_SIZE); else inStream.IgnoreBits(inStream.GetNumberOfUnreadBits());
|
||||
#define CMSGHEADER PacketUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::GAME_MSG);
|
||||
#define SEND_PACKET Game::server->Send(&bitStream, sysAddr, false);
|
||||
#define SEND_PACKET_BROADCAST Game::server->Send(&bitStream, UNASSIGNED_SYSTEM_ADDRESS, true);
|
||||
|
||||
|
||||
@@ -1,564 +0,0 @@
|
||||
#pragma once
|
||||
#include "MessageIdentifiers.h"
|
||||
|
||||
enum CONNECTION_TYPE {
|
||||
SERVER = 0, //!< Means it is used throughout all servers
|
||||
AUTH, //!< Means it is sent from the client authentication
|
||||
CHAT, //!< Means it is sent from and to the chat server
|
||||
CHAT_INTERNAL, //!< Unused - We can potentially use this in the future for various things
|
||||
WORLD, //!< Means it is sent from the client world
|
||||
CLIENT, //!< Means it is sent to the client from the world server
|
||||
MASTER //!< Means it is sent to and from the master server
|
||||
};
|
||||
|
||||
//! The Internal Server Packet Identifiers
|
||||
enum SERVER {
|
||||
MSG_SERVER_VERSION_CONFIRM = 0, /*!< Sent during a handshake to confirm the server/client version */
|
||||
MSG_SERVER_DISCONNECT_NOTIFY, /*!< Sent when a user disconnected */
|
||||
MSG_SERVER_GENERAL_NOTIFY /*!< A general notification */
|
||||
};
|
||||
|
||||
//! The Internal Authentication Packet Identifiers
|
||||
enum AUTH {
|
||||
MSG_AUTH_LOGIN_REQUEST = 0, /*!< Sent from the client when a user logs in */
|
||||
MSG_AUTH_LOGOUT_REQUEST, /*!< Sent from the client when a user logs out */
|
||||
MSG_AUTH_CREATE_NEW_ACCOUNT_REQUEST, /*!< Sent from the client when a user creates a new account */
|
||||
MSG_AUTH_LEGOINTERFACE_AUTH_RESPONSE, /*!< Unknown */
|
||||
MSG_AUTH_SESSIONKEY_RECEIVED_CONFIRM, /*!< Sent when the server recieved the session key (?) */
|
||||
MSG_AUTH_RUNTIME_CONFIG /*!< Unknown */
|
||||
};
|
||||
|
||||
//! The Internal Chat Packet Identifiers
|
||||
enum CHAT {
|
||||
MSG_CHAT_LOGIN_SESSION_NOTIFY = 0, /*!< When a user logs in */
|
||||
MSG_CHAT_GENERAL_CHAT_MESSAGE, /*!< Used for global chat messages */
|
||||
MSG_CHAT_PRIVATE_CHAT_MESSAGE, /*!< Used for private chat messages */
|
||||
MSG_CHAT_USER_CHANNEL_CHAT_MESSAGE, /*!< Unknown */
|
||||
MSG_CHAT_WORLD_DISCONNECT_REQUEST, /*!< Unknown */
|
||||
MSG_CHAT_WORLD_PROXIMITY_RESPONSE, /*!< Unknown */
|
||||
MSG_CHAT_WORLD_PARCEL_RESPONSE, /*!< Unknown */
|
||||
MSG_CHAT_ADD_FRIEND_REQUEST, /*!< When the client requests to add a friend */
|
||||
MSG_CHAT_ADD_FRIEND_RESPONSE, /*!< Sent from the server when the client adds a friend */
|
||||
MSG_CHAT_REMOVE_FRIEND, /*!< When the client removes a friend */
|
||||
MSG_CHAT_GET_FRIENDS_LIST, /*!< Sent when the client requests a user's friends list */
|
||||
MSG_CHAT_ADD_IGNORE, /*!< Sent when the client adds a friend to the "ignore" list */
|
||||
MSG_CHAT_REMOVE_IGNORE, /*!< Sent when the client removes a friend from the "ignore" list */
|
||||
MSG_CHAT_GET_IGNORE_LIST, /*!< Sent when the client requests a user's ignored list */
|
||||
MSG_CHAT_TEAM_MISSED_INVITE_CHECK, /*!< Unknown (Something with an unresponded-to friend request probably) */
|
||||
MSG_CHAT_TEAM_INVITE, /*!< When the client invites a user to a team */
|
||||
MSG_CHAT_TEAM_INVITE_RESPONSE, /*!< Sent from the server when the client invites someone to the team */
|
||||
MSG_CHAT_TEAM_KICK, /*!< Sent when the client kicks a member from a team */
|
||||
MSG_CHAT_TEAM_LEAVE, /*!< Sent when the client leaves a team */
|
||||
MSG_CHAT_TEAM_SET_LOOT, /*!< Unknown (Something to do with team loot) */
|
||||
MSG_CHAT_TEAM_SET_LEADER, /*!< Unknown (Probably sets the team leader or something) */
|
||||
MSG_CHAT_TEAM_GET_STATUS, /*!< Check to see if we are in a team or not, sent on world join */
|
||||
MSG_CHAT_GUILD_CREATE, /*!< Guild Creation */
|
||||
MSG_CHAT_GUILD_INVITE, /*!< Guild Invitation */
|
||||
MSG_CHAT_GUILD_INVITE_RESPONSE, /*!< Guild Invite Response */
|
||||
MSG_CHAT_GUILD_LEAVE, /*!< Guild Leave */
|
||||
MSG_CHAT_GUILD_KICK, /*!< Guild Kick */
|
||||
MSG_CHAT_GUILD_GET_STATUS, /*!< Guild Get Status */
|
||||
MSG_CHAT_GUILD_GET_ALL, /*!< Guild Get All */
|
||||
MSG_CHAT_SHOW_ALL,
|
||||
MSG_CHAT_BLUEPRINT_MODERATED,
|
||||
MSG_CHAT_BLUEPRINT_MODEL_READY,
|
||||
MSG_CHAT_PROPERTY_READY_FOR_APPROVAL,
|
||||
MSG_CHAT_PROPERTY_MODERATION_CHANGED,
|
||||
MSG_CHAT_PROPERTY_BUILDMODE_CHANGED,
|
||||
MSG_CHAT_PROPERTY_BUILDMODE_CHANGED_REPORT,
|
||||
MSG_CHAT_MAIL,
|
||||
MSG_CHAT_WORLD_INSTANCE_LOCATION_REQUEST,
|
||||
MSG_CHAT_REPUTATION_UPDATE,
|
||||
MSG_CHAT_SEND_CANNED_TEXT,
|
||||
MSG_CHAT_GMLEVEL_UPDATE,
|
||||
MSG_CHAT_CHARACTER_NAME_CHANGE_REQUEST,
|
||||
MSG_CHAT_CSR_REQUEST,
|
||||
MSG_CHAT_CSR_REPLY,
|
||||
MSG_CHAT_GM_KICK,
|
||||
MSG_CHAT_GM_ANNOUNCE,
|
||||
MSG_CHAT_GM_MUTE,
|
||||
MSG_CHAT_ACTIVITY_UPDATE,
|
||||
MSG_CHAT_WORLD_ROUTE_PACKET,
|
||||
MSG_CHAT_GET_ZONE_POPULATIONS,
|
||||
MSG_CHAT_REQUEST_MINIMUM_CHAT_MODE,
|
||||
MSG_CHAT_REQUEST_MINIMUM_CHAT_MODE_PRIVATE,
|
||||
MSG_CHAT_MATCH_REQUEST,
|
||||
MSG_CHAT_UGCMANIFEST_REPORT_MISSING_FILE,
|
||||
MSG_CHAT_UGCMANIFEST_REPORT_DONE_FILE,
|
||||
MSG_CHAT_UGCMANIFEST_REPORT_DONE_BLUEPRINT,
|
||||
MSG_CHAT_UGCC_REQUEST,
|
||||
MSG_CHAT_WHO,
|
||||
MSG_CHAT_WORLD_PLAYERS_PET_MODERATED_ACKNOWLEDGE,
|
||||
MSG_CHAT_ACHIEVEMENT_NOTIFY,
|
||||
MSG_CHAT_GM_CLOSE_PRIVATE_CHAT_WINDOW,
|
||||
MSG_CHAT_UNEXPECTED_DISCONNECT,
|
||||
MSG_CHAT_PLAYER_READY,
|
||||
MSG_CHAT_GET_DONATION_TOTAL,
|
||||
MSG_CHAT_UPDATE_DONATION,
|
||||
MSG_CHAT_PRG_CSR_COMMAND,
|
||||
MSG_CHAT_HEARTBEAT_REQUEST_FROM_WORLD,
|
||||
MSG_CHAT_UPDATE_FREE_TRIAL_STATUS
|
||||
};
|
||||
|
||||
//! Used for packets related to chatting
|
||||
enum CHAT_INTERNAL {
|
||||
MSG_CHAT_INTERNAL_PLAYER_ADDED_NOTIFICATION = 0,
|
||||
MSG_CHAT_INTERNAL_PLAYER_REMOVED_NOTIFICATION,
|
||||
MSG_CHAT_INTERNAL_ADD_FRIEND,
|
||||
MSG_CHAT_INTERNAL_ADD_BEST_FRIEND,
|
||||
MSG_CHAT_INTERNAL_ADD_TO_TEAM,
|
||||
MSG_CHAT_INTERNAL_ADD_BLOCK,
|
||||
MSG_CHAT_INTERNAL_REMOVE_FRIEND,
|
||||
MSG_CHAT_INTERNAL_REMOVE_BLOCK,
|
||||
MSG_CHAT_INTERNAL_REMOVE_FROM_TEAM,
|
||||
MSG_CHAT_INTERNAL_DELETE_TEAM,
|
||||
MSG_CHAT_INTERNAL_REPORT,
|
||||
MSG_CHAT_INTERNAL_PRIVATE_CHAT,
|
||||
MSG_CHAT_INTERNAL_PRIVATE_CHAT_RESPONSE,
|
||||
MSG_CHAT_INTERNAL_ANNOUNCEMENT,
|
||||
MSG_CHAT_INTERNAL_MAIL_COUNT_UPDATE,
|
||||
MSG_CHAT_INTERNAL_MAIL_SEND_NOTIFY,
|
||||
MSG_CHAT_INTERNAL_REQUEST_USER_LIST,
|
||||
MSG_CHAT_INTERNAL_FRIEND_LIST,
|
||||
MSG_CHAT_INTERNAL_ROUTE_TO_PLAYER,
|
||||
MSG_CHAT_INTERNAL_TEAM_UPDATE,
|
||||
MSG_CHAT_INTERNAL_MUTE_UPDATE,
|
||||
MSG_CHAT_INTERNAL_CREATE_TEAM,
|
||||
};
|
||||
|
||||
//! Used for packets send to the world
|
||||
enum WORLD {
|
||||
MSG_WORLD_CLIENT_VALIDATION = 1, // Session info
|
||||
MSG_WORLD_CLIENT_CHARACTER_LIST_REQUEST,
|
||||
MSG_WORLD_CLIENT_CHARACTER_CREATE_REQUEST,
|
||||
MSG_WORLD_CLIENT_LOGIN_REQUEST, // Character selected
|
||||
MSG_WORLD_CLIENT_GAME_MSG,
|
||||
MSG_WORLD_CLIENT_CHARACTER_DELETE_REQUEST,
|
||||
MSG_WORLD_CLIENT_CHARACTER_RENAME_REQUEST,
|
||||
MSG_WORLD_CLIENT_HAPPY_FLOWER_MODE_NOTIFY,
|
||||
MSG_WORLD_CLIENT_SLASH_RELOAD_MAP, // Reload map cmp
|
||||
MSG_WORLD_CLIENT_SLASH_PUSH_MAP_REQUEST, // Push map req cmd
|
||||
MSG_WORLD_CLIENT_SLASH_PUSH_MAP, // Push map cmd
|
||||
MSG_WORLD_CLIENT_SLASH_PULL_MAP, // Pull map cmd
|
||||
MSG_WORLD_CLIENT_LOCK_MAP_REQUEST,
|
||||
MSG_WORLD_CLIENT_GENERAL_CHAT_MESSAGE, // General chat message
|
||||
MSG_WORLD_CLIENT_HTTP_MONITOR_INFO_REQUEST,
|
||||
MSG_WORLD_CLIENT_SLASH_DEBUG_SCRIPTS, // Debug scripts cmd
|
||||
MSG_WORLD_CLIENT_MODELS_CLEAR,
|
||||
MSG_WORLD_CLIENT_EXHIBIT_INSERT_MODEL,
|
||||
MSG_WORLD_CLIENT_LEVEL_LOAD_COMPLETE, // Character data request
|
||||
MSG_WORLD_CLIENT_TMP_GUILD_CREATE,
|
||||
MSG_WORLD_CLIENT_ROUTE_PACKET, // Social?
|
||||
MSG_WORLD_CLIENT_POSITION_UPDATE,
|
||||
MSG_WORLD_CLIENT_MAIL,
|
||||
MSG_WORLD_CLIENT_WORD_CHECK, // Whitelist word check
|
||||
MSG_WORLD_CLIENT_STRING_CHECK, // Whitelist string check
|
||||
MSG_WORLD_CLIENT_GET_PLAYERS_IN_ZONE,
|
||||
MSG_WORLD_CLIENT_REQUEST_UGC_MANIFEST_INFO,
|
||||
MSG_WORLD_CLIENT_BLUEPRINT_GET_ALL_DATA_REQUEST,
|
||||
MSG_WORLD_CLIENT_CANCEL_MAP_QUEUE,
|
||||
MSG_WORLD_CLIENT_HANDLE_FUNNESS,
|
||||
MSG_WORLD_CLIENT_FAKE_PRG_CSR_MESSAGE,
|
||||
MSG_WORLD_CLIENT_REQUEST_FREE_TRIAL_REFRESH,
|
||||
MSG_WORLD_CLIENT_GM_SET_FREE_TRIAL_STATUS
|
||||
};
|
||||
|
||||
//! An enum for packets sent to the client
|
||||
enum CLIENT {
|
||||
MSG_CLIENT_LOGIN_RESPONSE = 0,
|
||||
MSG_CLIENT_LOGOUT_RESPONSE,
|
||||
MSG_CLIENT_LOAD_STATIC_ZONE,
|
||||
MSG_CLIENT_CREATE_OBJECT,
|
||||
MSG_CLIENT_CREATE_CHARACTER,
|
||||
MSG_CLIENT_CREATE_CHARACTER_EXTENDED,
|
||||
MSG_CLIENT_CHARACTER_LIST_RESPONSE,
|
||||
MSG_CLIENT_CHARACTER_CREATE_RESPONSE,
|
||||
MSG_CLIENT_CHARACTER_RENAME_RESPONSE,
|
||||
MSG_CLIENT_CHAT_CONNECT_RESPONSE,
|
||||
MSG_CLIENT_AUTH_ACCOUNT_CREATE_RESPONSE,
|
||||
MSG_CLIENT_DELETE_CHARACTER_RESPONSE,
|
||||
MSG_CLIENT_GAME_MSG,
|
||||
MSG_CLIENT_CONNECT_CHAT,
|
||||
MSG_CLIENT_TRANSFER_TO_WORLD,
|
||||
MSG_CLIENT_IMPENDING_RELOAD_NOTIFY,
|
||||
MSG_CLIENT_MAKE_GM_RESPONSE,
|
||||
MSG_CLIENT_HTTP_MONITOR_INFO_RESPONSE,
|
||||
MSG_CLIENT_SLASH_PUSH_MAP_RESPONSE,
|
||||
MSG_CLIENT_SLASH_PULL_MAP_RESPONSE,
|
||||
MSG_CLIENT_SLASH_LOCK_MAP_RESPONSE,
|
||||
MSG_CLIENT_BLUEPRINT_SAVE_RESPONSE,
|
||||
MSG_CLIENT_BLUEPRINT_LUP_SAVE_RESPONSE,
|
||||
MSG_CLIENT_BLUEPRINT_LOAD_RESPONSE_ITEMID,
|
||||
MSG_CLIENT_BLUEPRINT_GET_ALL_DATA_RESPONSE,
|
||||
MSG_CLIENT_MODEL_INSTANTIATE_RESPONSE,
|
||||
MSG_CLIENT_DEBUG_OUTPUT,
|
||||
MSG_CLIENT_ADD_FRIEND_REQUEST,
|
||||
MSG_CLIENT_ADD_FRIEND_RESPONSE,
|
||||
MSG_CLIENT_REMOVE_FRIEND_RESPONSE,
|
||||
MSG_CLIENT_GET_FRIENDS_LIST_RESPONSE,
|
||||
MSG_CLIENT_UPDATE_FRIEND_NOTIFY,
|
||||
MSG_CLIENT_ADD_IGNORE_RESPONSE,
|
||||
MSG_CLIENT_REMOVE_IGNORE_RESPONSE,
|
||||
MSG_CLIENT_GET_IGNORE_LIST_RESPONSE,
|
||||
MSG_CLIENT_TEAM_INVITE,
|
||||
MSG_CLIENT_TEAM_INVITE_INITIAL_RESPONSE,
|
||||
MSG_CLIENT_GUILD_CREATE_RESPONSE,
|
||||
MSG_CLIENT_GUILD_GET_STATUS_RESPONSE,
|
||||
MSG_CLIENT_GUILD_INVITE,
|
||||
MSG_CLIENT_GUILD_INVITE_INITIAL_RESPONSE,
|
||||
MSG_CLIENT_GUILD_INVITE_FINAL_RESPONSE,
|
||||
MSG_CLIENT_GUILD_INVITE_CONFIRM,
|
||||
MSG_CLIENT_GUILD_ADD_PLAYER,
|
||||
MSG_CLIENT_GUILD_REMOVE_PLAYER,
|
||||
MSG_CLIENT_GUILD_LOGIN_LOGOUT,
|
||||
MSG_CLIENT_GUILD_RANK_CHANGE,
|
||||
MSG_CLIENT_GUILD_DATA,
|
||||
MSG_CLIENT_GUILD_STATUS,
|
||||
MSG_CLIENT_MAIL,
|
||||
MSG_CLIENT_DB_PROXY_RESULT,
|
||||
MSG_CLIENT_SHOW_ALL_RESPONSE,
|
||||
MSG_CLIENT_WHO_RESPONSE,
|
||||
MSG_CLIENT_SEND_CANNED_TEXT,
|
||||
MSG_CLIENT_UPDATE_CHARACTER_NAME,
|
||||
MSG_CLIENT_SET_NETWORK_SIMULATOR,
|
||||
MSG_CLIENT_INVALID_CHAT_MESSAGE,
|
||||
MSG_CLIENT_MINIMUM_CHAT_MODE_RESPONSE,
|
||||
MSG_CLIENT_MINIMUM_CHAT_MODE_RESPONSE_PRIVATE,
|
||||
MSG_CLIENT_CHAT_MODERATION_STRING,
|
||||
MSG_CLIENT_UGC_MANIFEST_RESPONSE,
|
||||
MSG_CLIENT_IN_LOGIN_QUEUE,
|
||||
MSG_CLIENT_SERVER_STATES,
|
||||
MSG_CLIENT_GM_CLOSE_TARGET_CHAT_WINDOW,
|
||||
MSG_CLIENT_GENERAL_TEXT_FOR_LOCALIZATION,
|
||||
MSG_CLIENT_UPDATE_FREE_TRIAL_STATUS,
|
||||
MSG_CLIENT_UGC_DOWNLOAD_FAILED = 120
|
||||
};
|
||||
|
||||
//! Used for packets sent to the master server
|
||||
enum MASTER {
|
||||
MSG_MASTER_REQUEST_PERSISTENT_ID = 1,
|
||||
MSG_MASTER_REQUEST_PERSISTENT_ID_RESPONSE,
|
||||
MSG_MASTER_REQUEST_ZONE_TRANSFER,
|
||||
MSG_MASTER_REQUEST_ZONE_TRANSFER_RESPONSE,
|
||||
MSG_MASTER_SERVER_INFO,
|
||||
MSG_MASTER_REQUEST_SESSION_KEY,
|
||||
MSG_MASTER_SET_SESSION_KEY,
|
||||
MSG_MASTER_SESSION_KEY_RESPONSE,
|
||||
MSG_MASTER_PLAYER_ADDED,
|
||||
MSG_MASTER_PLAYER_REMOVED,
|
||||
|
||||
MSG_MASTER_CREATE_PRIVATE_ZONE,
|
||||
MSG_MASTER_REQUEST_PRIVATE_ZONE,
|
||||
|
||||
MSG_MASTER_WORLD_READY,
|
||||
MSG_MASTER_PREP_ZONE,
|
||||
|
||||
MSG_MASTER_SHUTDOWN,
|
||||
MSG_MASTER_SHUTDOWN_RESPONSE,
|
||||
MSG_MASTER_SHUTDOWN_IMMEDIATE,
|
||||
|
||||
MSG_MASTER_SHUTDOWN_UNIVERSE,
|
||||
|
||||
MSG_MASTER_AFFIRM_TRANSFER_REQUEST,
|
||||
MSG_MASTER_AFFIRM_TRANSFER_RESPONSE,
|
||||
|
||||
MSG_MASTER_NEW_SESSION_ALERT
|
||||
};
|
||||
|
||||
//! The Game messages
|
||||
enum GAME_MSG : unsigned short {
|
||||
GAME_MSG_TELEPORT = 19,
|
||||
GAME_MSG_SET_PLAYER_CONTROL_SCHEME = 26,
|
||||
GAME_MSG_DROP_CLIENT_LOOT = 30,
|
||||
GAME_MSG_DIE = 37,
|
||||
GAME_MSG_REQUEST_DIE = 38,
|
||||
GAME_MSG_PLAY_EMOTE = 41,
|
||||
GAME_MSG_PLAY_ANIMATION = 43,
|
||||
GAME_MSG_CONTROL_BEHAVIOR = 48,
|
||||
GAME_MSG_SET_NAME = 72,
|
||||
GAME_MSG_ECHO_START_SKILL = 118,
|
||||
GAME_MSG_START_SKILL = 119,
|
||||
GAME_MSG_VERIFY_ACK = 121,
|
||||
GAME_MSG_ADD_SKILL = 127,
|
||||
GAME_MSG_REMOVE_SKILL = 128,
|
||||
GAME_MSG_SET_CURRENCY = 133,
|
||||
GAME_MSG_PICKUP_CURRENCY = 137,
|
||||
GAME_MSG_PICKUP_ITEM = 139,
|
||||
GAME_MSG_TEAM_PICKUP_ITEM = 140,
|
||||
GAME_MSG_PLAY_FX_EFFECT = 154,
|
||||
GAME_MSG_STOP_FX_EFFECT = 155,
|
||||
GAME_MSG_REQUEST_RESURRECT = 159,
|
||||
GAME_MSG_RESURRECT = 160,
|
||||
GAME_MSG_PUSH_EQUIPPED_ITEMS_STATE = 191,
|
||||
GAME_MSG_POP_EQUIPPED_ITEMS_STATE = 192,
|
||||
GAME_MSG_SET_GM_LEVEL = 193,
|
||||
GAME_MSG_SET_STUNNED = 198,
|
||||
GAME_MSG_SET_STUN_IMMUNITY = 200,
|
||||
GAME_MSG_KNOCKBACK = 202,
|
||||
GAME_MSG_REBUILD_CANCEL = 209,
|
||||
GAME_MSG_ENABLE_REBUILD = 213,
|
||||
GAME_MSG_MOVE_ITEM_IN_INVENTORY = 224,
|
||||
GAME_MSG_ADD_ITEM_TO_INVENTORY_CLIENT_SYNC = 227,
|
||||
GAME_MSG_REMOVE_ITEM_FROM_INVENTORY = 230,
|
||||
GAME_MSG_EQUIP_ITEM = 231,
|
||||
GAME_MSG_UN_EQUIP_ITEM = 233,
|
||||
GAME_MSG_OFFER_MISSION = 248,
|
||||
GAME_MSG_RESPOND_TO_MISSION = 249,
|
||||
GAME_MSG_NOTIFY_MISSION = 254,
|
||||
GAME_MSG_NOTIFY_MISSION_TASK = 255,
|
||||
GAME_MSG_REBUILD_NOTIFY_STATE = 336,
|
||||
GAME_MSG_TERMINATE_INTERACTION = 357,
|
||||
GAME_MSG_SERVER_TERMINATE_INTERACTION = 358,
|
||||
GAME_MSG_REQUEST_USE = 364,
|
||||
GAME_MSG_VENDOR_OPEN_WINDOW = 369,
|
||||
GAME_MSG_BUY_FROM_VENDOR = 373,
|
||||
GAME_MSG_SELL_TO_VENDOR = 374,
|
||||
GAME_MSG_TEAM_SET_OFF_WORLD_FLAG = 383,
|
||||
GAME_MSG_SET_INVENTORY_SIZE = 389,
|
||||
GAME_MSG_ACKNOWLEDGE_POSSESSION = 391,
|
||||
GAME_MSG_SET_SHOOTING_GALLERY_PARAMS = 400,
|
||||
GAME_MSG_REQUEST_ACTIVITY_START_STOP = 402,
|
||||
GAME_MSG_REQUEST_ACTIVITY_ENTER = 403,
|
||||
GAME_MSG_REQUEST_ACTIVITY_EXIT = 404,
|
||||
GAME_MSG_ACTIVITY_ENTER = 405,
|
||||
GAME_MSG_ACTIVITY_EXIT = 406,
|
||||
GAME_MSG_ACTIVITY_START = 407,
|
||||
GAME_MSG_ACTIVITY_STOP = 408,
|
||||
GAME_MSG_SHOOTING_GALLERY_CLIENT_AIM_UPDATE = 409,
|
||||
GAME_MSG_SHOOTING_GALLERY_FIRE = 411,
|
||||
GAME_MSG_REQUEST_VENDOR_STATUS_UPDATE = 416,
|
||||
GAME_MSG_VENDOR_STATUS_UPDATE = 417,
|
||||
GAME_MSG_NOTIFY_CLIENT_SHOOTING_GALLERY_SCORE = 425,
|
||||
GAME_MSG_CONSUME_CLIENT_ITEM = 427,
|
||||
GAME_MSG_CLIENT_ITEM_CONSUMED = 428,
|
||||
GAME_MSG_UPDATE_SHOOTING_GALLERY_ROTATION = 448,
|
||||
GAME_MSG_SET_FLAG = 471,
|
||||
GAME_MSG_NOTIFY_CLIENT_FLAG_CHANGE = 472,
|
||||
GAME_MSG_VENDOR_TRANSACTION_RESULT = 476,
|
||||
GAME_MSG_HAS_BEEN_COLLECTED = 486,
|
||||
GAME_MSG_DISPLAY_CHAT_BUBBLE = 495,
|
||||
GAME_MSG_SPAWN_PET = 498,
|
||||
GAME_MSG_DESPAWN_PET = 499,
|
||||
GAME_MSG_PLAYER_LOADED = 505,
|
||||
GAME_MSG_PLAYER_READY = 509,
|
||||
GAME_MSG_REQUEST_LINKED_MISSION = 515,
|
||||
GAME_MSG_INVALID_ZONE_TRANSFER_LIST = 519,
|
||||
GAME_MSG_MISSION_DIALOGUE_OK = 520,
|
||||
GAME_MSG_DISPLAY_MESSAGE_BOX = 529,
|
||||
GAME_MSG_MESSAGE_BOX_RESPOND = 530,
|
||||
GAME_MSG_CHOICE_BOX_RESPOND = 531,
|
||||
GAME_MSG_SMASH = 537,
|
||||
GAME_MSG_UNSMASH = 538,
|
||||
GAME_MSG_SET_SHOOTING_GALLERY_RETICULE_EFFECT = 548,
|
||||
GAME_MSG_PLACE_MODEL_RESPONSE = 0x223,
|
||||
GAME_MSG_SET_JET_PACK_MODE = 561,
|
||||
GAME_MSG_REGISTER_PET_ID = 565,
|
||||
GAME_MSG_REGISTER_PET_DBID = 566,
|
||||
GAME_MSG_SHOW_ACTIVITY_COUNTDOWN = 568,
|
||||
GAME_MSG_START_ACTIVITY_TIME = 576,
|
||||
GAME_MSG_ACTIVITY_PAUSE = 602,
|
||||
GAME_MSG_USE_NON_EQUIPMENT_ITEM = 603,
|
||||
GAME_MSG_USE_ITEM_RESULT = 607,
|
||||
GAME_MSG_COMMAND_PET = 640,
|
||||
GAME_MSG_PET_RESPONSE = 641,
|
||||
GAME_MSG_REQUEST_ACTIVITY_SUMMARY_LEADERBOARD_DATA = 648,
|
||||
GAME_MSG_SEND_ACTIVITY_SUMMARY_LEADERBOARD_DATA = 649,
|
||||
GAME_MSG_NOTIFY_OBJECT = 656,
|
||||
GAME_MSG_CLIENT_NOTIFY_PET = 659,
|
||||
GAME_MSG_NOTIFY_PET = 660,
|
||||
GAME_MSG_NOTIFY_PET_TAMING_MINIGAME = 661,
|
||||
GAME_MSG_START_SERVER_PET_MINIGAME_TIMER = 662,
|
||||
GAME_MSG_CLIENT_EXIT_TAMING_MINIGAME = 663,
|
||||
GAME_MSG_PET_NAME_CHANGED = 686,
|
||||
GAME_MSG_PET_TAMING_MINIGAME_RESULT = 667,
|
||||
GAME_MSG_PET_TAMING_TRY_BUILD_RESULT = 668,
|
||||
GAME_MSG_NOTIFY_TAMING_BUILD_SUCCESS = 673,
|
||||
GAME_MSG_NOTIFY_TAMING_MODEL_LOADED_ON_SERVER = 674,
|
||||
GAME_MSG_ACTIVATE_BUBBLE_BUFF = 678,
|
||||
GAME_MSG_DEACTIVATE_BUBBLE_BUFF = 679,
|
||||
GAME_MSG_ADD_PET_TO_PLAYER = 681,
|
||||
GAME_MSG_REQUEST_SET_PET_NAME = 683,
|
||||
GAME_MSG_SET_PET_NAME = 684,
|
||||
GAME_MSG_NOTIFY_PET_TAMING_PUZZLE_SELECTED = 675,
|
||||
GAME_MSG_SHOW_PET_ACTION_BUTTON = 692,
|
||||
GAME_MSG_SET_EMOTE_LOCK_STATE = 693,
|
||||
GAME_MSG_USE_ITEM_REQUIREMENTS_RESPONSE = 703,
|
||||
GAME_MSG_PLAY_EMBEDDED_EFFECT_ON_ALL_CLIENTS_NEAR_OBJECT = 713,
|
||||
GAME_MSG_DOWNLOAD_PROPERTY_DATA = 716,
|
||||
GAME_MSG_QUERY_PROPERTY_DATA = 717,
|
||||
GAME_MSG_PROPERTY_EDITOR_BEGIN = 724,
|
||||
GAME_MSG_PROPERTY_EDITOR_END = 725,
|
||||
GAME_MSG_IS_MINIFIG_IN_A_BUBBLE = 729,
|
||||
GAME_MSG_START_PATHING = 733,
|
||||
GAME_MSG_ACTIVATE_BUBBLE_BUFF_FROM_SERVER = 734,
|
||||
GAME_MSG_DEACTIVATE_BUBBLE_BUFF_FROM_SERVER = 735,
|
||||
GAME_MSG_NOTIFY_CLIENT_ZONE_OBJECT = 737,
|
||||
GAME_MSG_UPDATE_REPUTATION = 746,
|
||||
GAME_MSG_PROPERTY_RENTAL_RESPONSE = 750,
|
||||
GAME_MSG_REQUEST_PLATFORM_RESYNC = 760,
|
||||
GAME_MSG_PLATFORM_RESYNC = 761,
|
||||
GAME_MSG_PLAY_CINEMATIC = 762,
|
||||
GAME_MSG_END_CINEMATIC = 763,
|
||||
GAME_MSG_CINEMATIC_UPDATE = 764,
|
||||
GAME_MSG_TOGGLE_GHOST_REFERENCE_OVERRIDE = 767,
|
||||
GAME_MSG_SET_GHOST_REFERENCE_POSITION = 768,
|
||||
GAME_MSG_FIRE_EVENT_SERVER_SIDE = 770,
|
||||
GAME_MSG_SET_NETWORK_SCRIPT_VAR = 781,
|
||||
GAME_MSG_UPDATE_MODEL_FROM_CLIENT = 793,
|
||||
GAME_MSG_DELETE_MODEL_FROM_CLIENT = 794,
|
||||
GAME_MSG_PLAY_ND_AUDIO_EMITTER = 821,
|
||||
GAME_MSG_PLAY2_DAMBIENT_SOUND = 831,
|
||||
GAME_MSG_ENTER_PROPERTY1 = 840,
|
||||
GAME_MSG_ENTER_PROPERTY2 = 841,
|
||||
GAME_MSG_PROPERTY_ENTRANCE_SYNC = 842,
|
||||
GAME_MSG_PROPERTY_SELECT_QUERY = 845,
|
||||
GAME_MSG_PARSE_CHAT_MESSAGE = 850,
|
||||
GAME_MSG_BROADCAST_TEXT_TO_CHATBOX = 858,
|
||||
GAME_MSG_OPEN_PROPERTY_MANAGEMENT = 860,
|
||||
GAME_MSG_OPEN_PROPERTY_VENDOR = 861,
|
||||
GAME_MSG_UPDATE_PROPERTY_OR_MODEL_FOR_FILTER_CHECK = 863,
|
||||
GAME_MSG_CLIENT_TRADE_REQUEST = 868,
|
||||
GAME_MSG_SERVER_TRADE_REQUEST = 869,
|
||||
GAME_MSG_SERVER_TRADE_INVITE = 870,
|
||||
GAME_MSG_CLIENT_TRADE_REPLY = 871,
|
||||
GAME_MSG_SERVER_TRADE_REPLY = 872,
|
||||
GAME_MSG_SERVER_TRADE_INITIAL_REPLY = 873,
|
||||
GAME_MSG_SERVER_TRADE_FINAL_REPLY = 874,
|
||||
GAME_MSG_CLIENT_TRADE_UPDATE = 875,
|
||||
GAME_MSG_SERVER_SIDE_TRADE_UPDATE = 876,
|
||||
GAME_MSG_SERVER_TRADE_UPDATE = 877,
|
||||
GAME_MSG_CLIENT_TRADE_CANCEL = 878,
|
||||
GAME_MSG_CLIENT_SIDE_TRADE_CANCEL = 879,
|
||||
GAME_MSG_CLIENT_TRADE_ACCEPT = 880,
|
||||
GAME_MSG_SERVER_SIDE_TRADE_ACCEPT = 881,
|
||||
GAME_MSG_SERVER_SIDE_TRADE_CANCEL = 882,
|
||||
GAME_MSG_SERVER_TRADE_CANCEL = 883,
|
||||
GAME_MSG_SERVER_TRADE_ACCEPT = 884,
|
||||
GAME_MSG_READY_FOR_UPDATES = 888,
|
||||
GAME_MSG_ORIENT_TO_OBJECT = 905,
|
||||
GAME_MSG_ORIENT_TO_POSITION = 906,
|
||||
GAME_MSG_ORIENT_TO_ANGLE = 907,
|
||||
GAME_MSG_BOUNCER_ACTIVE_STATUS = 942,
|
||||
GAME_MSG_UN_USE_BBB_MODEL = 999,
|
||||
GAME_MSG_BBB_LOAD_ITEM_REQUEST = 1000,
|
||||
GAME_MSG_BBB_SAVE_REQUEST = 1001,
|
||||
GAME_MSG_BBB_SAVE_RESPONSE = 1006,
|
||||
GAME_MSG_NOTIFY_CLIENT_OBJECT = 1042,
|
||||
GAME_MSG_DISPLAY_ZONE_SUMMARY = 1043,
|
||||
GAME_MSG_ZONE_SUMMARY_DISMISSED = 1044,
|
||||
GAME_MSG_ACTIVITY_STATE_CHANGE_REQUEST = 1053,
|
||||
GAME_MSG_MODIFY_PLAYER_ZONE_STATISTIC = 1046,
|
||||
GAME_MSG_START_BUILDING_WITH_ITEM = 1057,
|
||||
GAME_MSG_START_ARRANGING_WITH_ITEM = 1061,
|
||||
GAME_MSG_FINISH_ARRANGING_WITH_ITEM = 1062,
|
||||
GAME_MSG_DONE_ARRANGING_WITH_ITEM = 1063,
|
||||
GAME_MSG_SET_BUILD_MODE = 1068,
|
||||
GAME_MSG_BUILD_MODE_SET = 1069,
|
||||
GAME_MSG_SET_BUILD_MODE_CONFIRMED = 1073,
|
||||
GAME_MSG_NOTIFY_CLIENT_FAILED_PRECONDITION = 1081,
|
||||
GAME_MSG_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1093,
|
||||
GAME_MSG_MODULAR_BUILD_BEGIN = 1094,
|
||||
GAME_MSG_MODULAR_BUILD_END = 1095,
|
||||
GAME_MSG_MODULAR_BUILD_MOVE_AND_EQUIP = 1096,
|
||||
GAME_MSG_MODULAR_BUILD_FINISH = 1097,
|
||||
GAME_MSG_REPORT_BUG = 1198,
|
||||
GAME_MSG_MISSION_DIALOGUE_CANCELLED = 1129,
|
||||
GAME_MSG_ECHO_SYNC_SKILL = 1144,
|
||||
GAME_MSG_SYNC_SKILL = 1145,
|
||||
GAME_MSG_REQUEST_SERVER_PROJECTILE_IMPACT = 1148,
|
||||
GAME_MSG_DO_CLIENT_PROJECTILE_IMPACT = 1151,
|
||||
GAME_MSG_MODULAR_BUILD_CONVERT_MODEL = 1155,
|
||||
GAME_MSG_SET_PLAYER_ALLOWED_RESPAWN = 1165,
|
||||
GAME_MSG_UI_MESSAGE_SERVER_TO_SINGLE_CLIENT = 1184,
|
||||
GAME_MSG_UI_MESSAGE_SERVER_TO_ALL_CLIENTS = 1185,
|
||||
GAME_MSG_PET_TAMING_TRY_BUILD = 1197,
|
||||
GAME_MSG_REQUEST_SMASH_PLAYER = 1202,
|
||||
GAME_MSG_FIRE_EVENT_CLIENT_SIDE = 1213,
|
||||
GAME_MSG_TOGGLE_GM_INVIS = 1218,
|
||||
GAME_MSG_CHANGE_OBJECT_WORLD_STATE = 1223,
|
||||
GAME_MSG_VEHICLE_LOCK_INPUT = 1230,
|
||||
GAME_MSG_VEHICLE_UNLOCK_INPUT = 1231,
|
||||
GAME_MSG_RACING_RESET_PLAYER_TO_LAST_RESET = 1252,
|
||||
GAME_MSG_RACING_SERVER_SET_PLAYER_LAP_AND_PLANE = 1253,
|
||||
GAME_MSG_RACING_SET_PLAYER_RESET_INFO = 1254,
|
||||
GAME_MSG_RACING_PLAYER_INFO_RESET_FINISHED = 1255,
|
||||
GAME_MSG_LOCK_NODE_ROTATION = 1260,
|
||||
GAME_MSG_VEHICLE_SET_WHEEL_LOCK_STATE = 1273,
|
||||
GAME_MSG_NOTIFY_VEHICLE_OF_RACING_OBJECT = 1276,
|
||||
GAME_MSG_SET_NAME_BILLBOARD_STATE = 1284,
|
||||
GAME_MSG_PLAYER_REACHED_RESPAWN_CHECKPOINT = 1296,
|
||||
GAME_MSG_HANDLE_UGC_EQUIP_POST_DELETE_BASED_ON_EDIT_MODE = 1300,
|
||||
GAME_MSG_HANDLE_UGC_EQUIP_PRE_CREATE_BASED_ON_EDIT_MODE = 1301,
|
||||
GAME_MSG_PROPERTY_CONTENTS_FROM_CLIENT = 1305,
|
||||
GAME_MSG_GET_MODELS_ON_PROPERTY = 1306,
|
||||
GAME_MSG_MATCH_REQUEST = 1308,
|
||||
GAME_MSG_MATCH_RESPONSE = 1309,
|
||||
GAME_MSG_MATCH_UPDATE = 1310,
|
||||
GAME_MSG_MODULE_ASSEMBLY_DB_DATA_FOR_CLIENT = 1131,
|
||||
GAME_MSG_MODULE_ASSEMBLY_QUERY_DATA = 1132,
|
||||
GAME_MSG_SHOW_BILLBOARD_INTERACT_ICON = 1337,
|
||||
GAME_MSG_CHANGE_IDLE_FLAGS = 1338,
|
||||
GAME_MSG_VEHICLE_ADD_PASSIVE_BOOST_ACTION = 1340,
|
||||
GAME_MSG_VEHICLE_REMOVE_PASSIVE_BOOST_ACTION = 1341,
|
||||
GAME_MSG_VEHICLE_NOTIFY_SERVER_ADD_PASSIVE_BOOST_ACTION = 1342,
|
||||
GAME_MSG_VEHICLE_NOTIFY_SERVER_REMOVE_PASSIVE_BOOST_ACTION = 1343,
|
||||
GAME_MSG_VEHICLE_ADD_SLOWDOWN_ACTION = 1344,
|
||||
GAME_MSG_VEHICLE_REMOVE_SLOWDOWN_ACTION = 1345,
|
||||
GAME_MSG_VEHICLE_NOTIFY_SERVER_ADD_SLOWDOWN_ACTION = 1346,
|
||||
GAME_MSG_VEHICLE_NOTIFY_SERVER_REMOVE_SLOWDOWN_ACTION = 1347,
|
||||
GAME_MSG_BUYBACK_FROM_VENDOR = 1350,
|
||||
GAME_MSG_SET_PROPERTY_ACCESS = 1366,
|
||||
GAME_MSG_ZONE_PROPERTY_MODEL_PLACED = 1369,
|
||||
GAME_MSG_ZONE_PROPERTY_MODEL_ROTATED = 1370,
|
||||
GAME_MSG_ZONE_PROPERTY_MODEL_REMOVED_WHILE_EQUIPPED = 1371,
|
||||
GAME_MSG_ZONE_PROPERTY_MODEL_EQUIPPED = 1372,
|
||||
GAME_MSG_ZONE_PROPERTY_MODEL_PICKED_UP = 1373,
|
||||
GAME_MSG_ZONE_PROPERTY_MODEL_REMOVED = 1374,
|
||||
GAME_MSG_NOTIFY_RACING_CLIENT = 1390,
|
||||
GAME_MSG_RACING_PLAYER_HACK_CAR = 1391,
|
||||
GAME_MSG_RACING_PLAYER_LOADED = 1392,
|
||||
GAME_MSG_RACING_CLIENT_READY = 1393,
|
||||
GAME_MSG_UPDATE_CHAT_MODE = 1395,
|
||||
GAME_MSG_VEHICLE_NOTIFY_FINISHED_RACE = 1396,
|
||||
GAME_MSG_SET_CONSUMABLE_ITEM = 1409,
|
||||
GAME_MSG_SET_STATUS_IMMUNITY = 1435,
|
||||
GAME_MSG_SET_PET_NAME_MODERATED = 1448,
|
||||
GAME_MSG_MODIFY_LEGO_SCORE = 1459,
|
||||
GAME_MSG_RESTORE_TO_POST_LOAD_STATS = 1468,
|
||||
GAME_MSG_SET_RAIL_MOVEMENT = 1471,
|
||||
GAME_MSG_START_RAIL_MOVEMENT = 1472,
|
||||
GAME_MSG_CANCEL_RAIL_MOVEMENT = 1474,
|
||||
GAME_MSG_CLIENT_RAIL_MOVEMENT_READY = 1476,
|
||||
GAME_MSG_PLAYER_RAIL_ARRIVED_NOTIFICATION = 1477,
|
||||
GAME_MSG_UPDATE_PLAYER_STATISTIC = 1481,
|
||||
GAME_MSG_MODULAR_ASSEMBLY_NIF_COMPLETED = 1498,
|
||||
GAME_MSG_NOTIFY_NOT_ENOUGH_INV_SPACE = 1516,
|
||||
GAME_MSG_TEAM_SET_LEADER = 0x0615,
|
||||
GAME_MSG_TEAM_INVITE_CONFIRM = 0x0616,
|
||||
GAME_MSG_TEAM_GET_STATUS_RESPONSE = 0x0617,
|
||||
GAME_MSG_TEAM_ADD_PLAYER = 0x061a,
|
||||
GAME_MSG_TEAM_REMOVE_PLAYER = 0x061b,
|
||||
GAME_MSG_START_CELEBRATION_EFFECT = 1618,
|
||||
GAME_MSG_ADD_BUFF = 1647,
|
||||
GAME_MSG_SERVER_DONE_LOADING_ALL_OBJECTS = 1642,
|
||||
GAME_MSG_PLACE_PROPERTY_MODEL = 1170,
|
||||
GAME_MSG_VEHICLE_NOTIFY_HIT_IMAGINATION_SERVER = 1606,
|
||||
GAME_MSG_ADD_RUN_SPEED_MODIFIER = 1505,
|
||||
GAME_MSG_HANDLE_HOT_PROPERTY_DATA = 1511,
|
||||
GAME_MSG_SEND_HOT_PROPERTY_DATA = 1510,
|
||||
GAME_MSG_REMOVE_RUN_SPEED_MODIFIER = 1506,
|
||||
GAME_MSG_UPDATE_PROPERTY_PERFORMANCE_COST = 1547,
|
||||
GAME_MSG_PROPERTY_ENTRANCE_BEGIN = 1553,
|
||||
GAME_MSG_SET_RESURRECT_RESTORE_VALUES = 1591,
|
||||
GAME_MSG_VEHICLE_STOP_BOOST = 1617,
|
||||
GAME_MSG_REMOVE_BUFF = 1648,
|
||||
GAME_MSG_REQUEST_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1666,
|
||||
GAME_MSG_RESPONSE_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1667,
|
||||
GAME_MSG_PLAYER_SET_CAMERA_CYCLING_MODE = 1676,
|
||||
GAME_MSG_SET_MOUNT_INVENTORY_ID = 1726,
|
||||
GAME_MSG_NOTIFY_SERVER_LEVEL_PROCESSING_COMPLETE = 1734,
|
||||
GAME_MSG_NOTIFY_LEVEL_REWARDS = 1735,
|
||||
GAME_MSG_DISMOUNT_COMPLETE = 1756,
|
||||
GAME_MSG_MARK_INVENTORY_ITEM_AS_ACTIVE = 1767,
|
||||
END
|
||||
};
|
||||
15
dCommon/dEnums/eAuthMessageType.h
Normal file
15
dCommon/dEnums/eAuthMessageType.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef __EAUTHMESSAGETYPE__H__
|
||||
#define __EAUTHMESSAGETYPE__H__
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
enum class eAuthMessageType : uint32_t {
|
||||
LOGIN_REQUEST = 0,
|
||||
LOGOUT_REQUEST,
|
||||
CREATE_NEW_ACCOUNT_REQUEST,
|
||||
LEGOINTERFACE_AUTH_RESPONSE,
|
||||
SESSIONKEY_RECEIVED_CONFIRM,
|
||||
RUNTIME_CONFIG
|
||||
};
|
||||
|
||||
#endif //!__EAUTHMESSAGETYPE__H__
|
||||
31
dCommon/dEnums/eChatInternalMessageType.h
Normal file
31
dCommon/dEnums/eChatInternalMessageType.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#ifndef __ECHATINTERNALMESSAGETYPE__H__
|
||||
#define __ECHATINTERNALMESSAGETYPE__H__
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
enum eChatInternalMessageType : uint32_t {
|
||||
PLAYER_ADDED_NOTIFICATION = 0,
|
||||
PLAYER_REMOVED_NOTIFICATION,
|
||||
ADD_FRIEND,
|
||||
ADD_BEST_FRIEND,
|
||||
ADD_TO_TEAM,
|
||||
ADD_BLOCK,
|
||||
REMOVE_FRIEND,
|
||||
REMOVE_BLOCK,
|
||||
REMOVE_FROM_TEAM,
|
||||
DELETE_TEAM,
|
||||
REPORT,
|
||||
PRIVATE_CHAT,
|
||||
PRIVATE_CHAT_RESPONSE,
|
||||
ANNOUNCEMENT,
|
||||
MAIL_COUNT_UPDATE,
|
||||
MAIL_SEND_NOTIFY,
|
||||
REQUEST_USER_LIST,
|
||||
FRIEND_LIST,
|
||||
ROUTE_TO_PLAYER,
|
||||
TEAM_UPDATE,
|
||||
MUTE_UPDATE,
|
||||
CREATE_TEAM,
|
||||
};
|
||||
|
||||
#endif //!__ECHATINTERNALMESSAGETYPE__H__
|
||||
78
dCommon/dEnums/eChatMessageType.h
Normal file
78
dCommon/dEnums/eChatMessageType.h
Normal file
@@ -0,0 +1,78 @@
|
||||
#ifndef __ECHATMESSAGETYPE__H__
|
||||
#define __ECHATMESSAGETYPE__H__
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
//! The Internal Chat Packet Identifiers
|
||||
enum class eChatMessageType :uint32_t {
|
||||
LOGIN_SESSION_NOTIFY = 0,
|
||||
GENERAL_CHAT_MESSAGE,
|
||||
PRIVATE_CHAT_MESSAGE,
|
||||
USER_CHANNEL_CHAT_MESSAGE,
|
||||
WORLD_DISCONNECT_REQUEST,
|
||||
WORLD_PROXIMITY_RESPONSE,
|
||||
WORLD_PARCEL_RESPONSE,
|
||||
ADD_FRIEND_REQUEST,
|
||||
ADD_FRIEND_RESPONSE,
|
||||
REMOVE_FRIEND,
|
||||
GET_FRIENDS_LIST,
|
||||
ADD_IGNORE,
|
||||
REMOVE_IGNORE,
|
||||
GET_IGNORE_LIST,
|
||||
TEAM_MISSED_INVITE_CHECK,
|
||||
TEAM_INVITE,
|
||||
TEAM_INVITE_RESPONSE,
|
||||
TEAM_KICK,
|
||||
TEAM_LEAVE,
|
||||
TEAM_SET_LOOT,
|
||||
TEAM_SET_LEADER,
|
||||
TEAM_GET_STATUS,
|
||||
GUILD_CREATE,
|
||||
GUILD_INVITE,
|
||||
GUILD_INVITE_RESPONSE,
|
||||
GUILD_LEAVE,
|
||||
GUILD_KICK,
|
||||
GUILD_GET_STATUS,
|
||||
GUILD_GET_ALL,
|
||||
SHOW_ALL,
|
||||
BLUEPRINT_MODERATED,
|
||||
BLUEPRINT_MODEL_READY,
|
||||
PROPERTY_READY_FOR_APPROVAL,
|
||||
PROPERTY_MODERATION_CHANGED,
|
||||
PROPERTY_BUILDMODE_CHANGED,
|
||||
PROPERTY_BUILDMODE_CHANGED_REPORT,
|
||||
MAIL,
|
||||
WORLD_INSTANCE_LOCATION_REQUEST,
|
||||
REPUTATION_UPDATE,
|
||||
SEND_CANNED_TEXT,
|
||||
GMLEVEL_UPDATE,
|
||||
CHARACTER_NAME_CHANGE_REQUEST,
|
||||
CSR_REQUEST,
|
||||
CSR_REPLY,
|
||||
GM_KICK,
|
||||
GM_ANNOUNCE,
|
||||
GM_MUTE,
|
||||
ACTIVITY_UPDATE,
|
||||
WORLD_ROUTE_PACKET,
|
||||
GET_ZONE_POPULATIONS,
|
||||
REQUEST_MINIMUM_CHAT_MODE,
|
||||
REQUEST_MINIMUM_CHAT_MODE_PRIVATE,
|
||||
MATCH_REQUEST,
|
||||
UGCMANIFEST_REPORT_MISSING_FILE,
|
||||
UGCMANIFEST_REPORT_DONE_FILE,
|
||||
UGCMANIFEST_REPORT_DONE_BLUEPRINT,
|
||||
UGCC_REQUEST,
|
||||
WHO,
|
||||
WORLD_PLAYERS_PET_MODERATED_ACKNOWLEDGE,
|
||||
ACHIEVEMENT_NOTIFY,
|
||||
GM_CLOSE_PRIVATE_CHAT_WINDOW,
|
||||
UNEXPECTED_DISCONNECT,
|
||||
PLAYER_READY,
|
||||
GET_DONATION_TOTAL,
|
||||
UPDATE_DONATION,
|
||||
PRG_CSR_COMMAND,
|
||||
HEARTBEAT_REQUEST_FROM_WORLD,
|
||||
UPDATE_FREE_TRIAL_STATUS
|
||||
};
|
||||
|
||||
#endif //!__ECHATMESSAGETYPE__H__
|
||||
76
dCommon/dEnums/eClientMessageType.h
Normal file
76
dCommon/dEnums/eClientMessageType.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#ifndef __ECLIENTMESSAGETYPE__H__
|
||||
#define __ECLIENTMESSAGETYPE__H__
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
enum class eClientMessageType : uint32_t {
|
||||
LOGIN_RESPONSE = 0,
|
||||
LOGOUT_RESPONSE,
|
||||
LOAD_STATIC_ZONE,
|
||||
CREATE_OBJECT,
|
||||
CREATE_CHARACTER,
|
||||
CREATE_CHARACTER_EXTENDED,
|
||||
CHARACTER_LIST_RESPONSE,
|
||||
CHARACTER_CREATE_RESPONSE,
|
||||
CHARACTER_RENAME_RESPONSE,
|
||||
CHAT_CONNECT_RESPONSE,
|
||||
AUTH_ACCOUNT_CREATE_RESPONSE,
|
||||
DELETE_CHARACTER_RESPONSE,
|
||||
GAME_MSG,
|
||||
CONNECT_CHAT,
|
||||
TRANSFER_TO_WORLD,
|
||||
IMPENDING_RELOAD_NOTIFY,
|
||||
MAKE_GM_RESPONSE,
|
||||
HTTP_MONITOR_INFO_RESPONSE,
|
||||
SLASH_PUSH_MAP_RESPONSE,
|
||||
SLASH_PULL_MAP_RESPONSE,
|
||||
SLASH_LOCK_MAP_RESPONSE,
|
||||
BLUEPRINT_SAVE_RESPONSE,
|
||||
BLUEPRINT_LUP_SAVE_RESPONSE,
|
||||
BLUEPRINT_LOAD_RESPONSE_ITEMID,
|
||||
BLUEPRINT_GET_ALL_DATA_RESPONSE,
|
||||
MODEL_INSTANTIATE_RESPONSE,
|
||||
DEBUG_OUTPUT,
|
||||
ADD_FRIEND_REQUEST,
|
||||
ADD_FRIEND_RESPONSE,
|
||||
REMOVE_FRIEND_RESPONSE,
|
||||
GET_FRIENDS_LIST_RESPONSE,
|
||||
UPDATE_FRIEND_NOTIFY,
|
||||
ADD_IGNORE_RESPONSE,
|
||||
REMOVE_IGNORE_RESPONSE,
|
||||
GET_IGNORE_LIST_RESPONSE,
|
||||
TEAM_INVITE,
|
||||
TEAM_INVITE_INITIAL_RESPONSE,
|
||||
GUILD_CREATE_RESPONSE,
|
||||
GUILD_GET_STATUS_RESPONSE,
|
||||
GUILD_INVITE,
|
||||
GUILD_INVITE_INITIAL_RESPONSE,
|
||||
GUILD_INVITE_FINAL_RESPONSE,
|
||||
GUILD_INVITE_CONFIRM,
|
||||
GUILD_ADD_PLAYER,
|
||||
GUILD_REMOVE_PLAYER,
|
||||
GUILD_LOGIN_LOGOUT,
|
||||
GUILD_RANK_CHANGE,
|
||||
GUILD_DATA,
|
||||
GUILD_STATUS,
|
||||
MAIL,
|
||||
DB_PROXY_RESULT,
|
||||
SHOW_ALL_RESPONSE,
|
||||
WHO_RESPONSE,
|
||||
SEND_CANNED_TEXT,
|
||||
UPDATE_CHARACTER_NAME,
|
||||
SET_NETWORK_SIMULATOR,
|
||||
INVALID_CHAT_MESSAGE,
|
||||
MINIMUM_CHAT_MODE_RESPONSE,
|
||||
MINIMUM_CHAT_MODE_RESPONSE_PRIVATE,
|
||||
CHAT_MODERATION_STRING,
|
||||
UGC_MANIFEST_RESPONSE,
|
||||
IN_LOGIN_QUEUE,
|
||||
SERVER_STATES,
|
||||
GM_CLOSE_TARGET_CHAT_WINDOW,
|
||||
GENERAL_TEXT_FOR_LOCALIZATION,
|
||||
UPDATE_FREE_TRIAL_STATUS,
|
||||
UGC_DOWNLOAD_FAILED = 120
|
||||
};
|
||||
|
||||
#endif //!__ECLIENTMESSAGETYPE__H__
|
||||
14
dCommon/dEnums/eConnectionType.h
Normal file
14
dCommon/dEnums/eConnectionType.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#ifndef __ECONNECTIONTYPE__H__
|
||||
#define __ECONNECTIONTYPE__H__
|
||||
|
||||
enum class eConnectionType : uint16_t {
|
||||
SERVER = 0,
|
||||
AUTH,
|
||||
CHAT,
|
||||
CHAT_INTERNAL,
|
||||
WORLD,
|
||||
CLIENT,
|
||||
MASTER
|
||||
};
|
||||
|
||||
#endif //!__ECONNECTIONTYPE__H__
|
||||
303
dCommon/dEnums/eGameMessageType.h
Normal file
303
dCommon/dEnums/eGameMessageType.h
Normal file
@@ -0,0 +1,303 @@
|
||||
#ifndef __EGAMEMESSAGETYPE__H__
|
||||
#define __EGAMEMESSAGETYPE__H__
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
enum class eGameMessageType : uint16_t {
|
||||
TELEPORT = 19,
|
||||
SET_PLAYER_CONTROL_SCHEME = 26,
|
||||
DROP_CLIENT_LOOT = 30,
|
||||
DIE = 37,
|
||||
REQUEST_DIE = 38,
|
||||
PLAY_EMOTE = 41,
|
||||
PLAY_ANIMATION = 43,
|
||||
CONTROL_BEHAVIOR = 48,
|
||||
SET_NAME = 72,
|
||||
ECHO_START_SKILL = 118,
|
||||
START_SKILL = 119,
|
||||
VERIFY_ACK = 121,
|
||||
ADD_SKILL = 127,
|
||||
REMOVE_SKILL = 128,
|
||||
SET_CURRENCY = 133,
|
||||
PICKUP_CURRENCY = 137,
|
||||
PICKUP_ITEM = 139,
|
||||
TEAM_PICKUP_ITEM = 140,
|
||||
PLAY_FX_EFFECT = 154,
|
||||
STOP_FX_EFFECT = 155,
|
||||
REQUEST_RESURRECT = 159,
|
||||
RESURRECT = 160,
|
||||
PUSH_EQUIPPED_ITEMS_STATE = 191,
|
||||
POP_EQUIPPED_ITEMS_STATE = 192,
|
||||
SET_GM_LEVEL = 193,
|
||||
SET_STUNNED = 198,
|
||||
SET_STUN_IMMUNITY = 200,
|
||||
KNOCKBACK = 202,
|
||||
REBUILD_CANCEL = 209,
|
||||
ENABLE_REBUILD = 213,
|
||||
MOVE_ITEM_IN_INVENTORY = 224,
|
||||
ADD_ITEM_TO_INVENTORY_CLIENT_SYNC = 227,
|
||||
REMOVE_ITEM_FROM_INVENTORY = 230,
|
||||
EQUIP_ITEM = 231,
|
||||
UN_EQUIP_ITEM = 233,
|
||||
OFFER_MISSION = 248,
|
||||
RESPOND_TO_MISSION = 249,
|
||||
NOTIFY_MISSION = 254,
|
||||
NOTIFY_MISSION_TASK = 255,
|
||||
REBUILD_NOTIFY_STATE = 336,
|
||||
TERMINATE_INTERACTION = 357,
|
||||
SERVER_TERMINATE_INTERACTION = 358,
|
||||
REQUEST_USE = 364,
|
||||
VENDOR_OPEN_WINDOW = 369,
|
||||
BUY_FROM_VENDOR = 373,
|
||||
SELL_TO_VENDOR = 374,
|
||||
TEAM_SET_OFF_WORLD_FLAG = 383,
|
||||
SET_INVENTORY_SIZE = 389,
|
||||
ACKNOWLEDGE_POSSESSION = 391,
|
||||
SET_SHOOTING_GALLERY_PARAMS = 400,
|
||||
REQUEST_ACTIVITY_START_STOP = 402,
|
||||
REQUEST_ACTIVITY_ENTER = 403,
|
||||
REQUEST_ACTIVITY_EXIT = 404,
|
||||
ACTIVITY_ENTER = 405,
|
||||
ACTIVITY_EXIT = 406,
|
||||
ACTIVITY_START = 407,
|
||||
ACTIVITY_STOP = 408,
|
||||
SHOOTING_GALLERY_CLIENT_AIM_UPDATE = 409,
|
||||
SHOOTING_GALLERY_FIRE = 411,
|
||||
REQUEST_VENDOR_STATUS_UPDATE = 416,
|
||||
VENDOR_STATUS_UPDATE = 417,
|
||||
NOTIFY_CLIENT_SHOOTING_GALLERY_SCORE = 425,
|
||||
CONSUME_CLIENT_ITEM = 427,
|
||||
CLIENT_ITEM_CONSUMED = 428,
|
||||
UPDATE_SHOOTING_GALLERY_ROTATION = 448,
|
||||
SET_FLAG = 471,
|
||||
NOTIFY_CLIENT_FLAG_CHANGE = 472,
|
||||
VENDOR_TRANSACTION_RESULT = 476,
|
||||
HAS_BEEN_COLLECTED = 486,
|
||||
DISPLAY_CHAT_BUBBLE = 495,
|
||||
SPAWN_PET = 498,
|
||||
DESPAWN_PET = 499,
|
||||
PLAYER_LOADED = 505,
|
||||
PLAYER_READY = 509,
|
||||
REQUEST_LINKED_MISSION = 515,
|
||||
INVALID_ZONE_TRANSFER_LIST = 519,
|
||||
MISSION_DIALOGUE_OK = 520,
|
||||
DISPLAY_MESSAGE_BOX = 529,
|
||||
MESSAGE_BOX_RESPOND = 530,
|
||||
CHOICE_BOX_RESPOND = 531,
|
||||
SMASH = 537,
|
||||
UNSMASH = 538,
|
||||
PLACE_MODEL_RESPONSE = 547,
|
||||
SET_SHOOTING_GALLERY_RETICULE_EFFECT = 548,
|
||||
SET_JET_PACK_MODE = 561,
|
||||
REGISTER_PET_ID = 565,
|
||||
REGISTER_PET_DBID = 566,
|
||||
SHOW_ACTIVITY_COUNTDOWN = 568,
|
||||
START_ACTIVITY_TIME = 576,
|
||||
ACTIVITY_PAUSE = 602,
|
||||
USE_NON_EQUIPMENT_ITEM = 603,
|
||||
USE_ITEM_RESULT = 607,
|
||||
COMMAND_PET = 640,
|
||||
PET_RESPONSE = 641,
|
||||
REQUEST_ACTIVITY_SUMMARY_LEADERBOARD_DATA = 648,
|
||||
SEND_ACTIVITY_SUMMARY_LEADERBOARD_DATA = 649,
|
||||
NOTIFY_OBJECT = 656,
|
||||
CLIENT_NOTIFY_PET = 659,
|
||||
NOTIFY_PET = 660,
|
||||
NOTIFY_PET_TAMING_MINIGAME = 661,
|
||||
START_SERVER_PET_MINIGAME_TIMER = 662,
|
||||
CLIENT_EXIT_TAMING_MINIGAME = 663,
|
||||
PET_NAME_CHANGED = 686,
|
||||
PET_TAMING_MINIGAME_RESULT = 667,
|
||||
PET_TAMING_TRY_BUILD_RESULT = 668,
|
||||
NOTIFY_TAMING_BUILD_SUCCESS = 673,
|
||||
NOTIFY_TAMING_MODEL_LOADED_ON_SERVER = 674,
|
||||
ACTIVATE_BUBBLE_BUFF = 678,
|
||||
DEACTIVATE_BUBBLE_BUFF = 679,
|
||||
ADD_PET_TO_PLAYER = 681,
|
||||
REQUEST_SET_PET_NAME = 683,
|
||||
SET_PET_NAME = 684,
|
||||
NOTIFY_PET_TAMING_PUZZLE_SELECTED = 675,
|
||||
SHOW_PET_ACTION_BUTTON = 692,
|
||||
SET_EMOTE_LOCK_STATE = 693,
|
||||
USE_ITEM_REQUIREMENTS_RESPONSE = 703,
|
||||
PLAY_EMBEDDED_EFFECT_ON_ALL_CLIENTS_NEAR_OBJECT = 713,
|
||||
DOWNLOAD_PROPERTY_DATA = 716,
|
||||
QUERY_PROPERTY_DATA = 717,
|
||||
PROPERTY_EDITOR_BEGIN = 724,
|
||||
PROPERTY_EDITOR_END = 725,
|
||||
IS_MINIFIG_IN_A_BUBBLE = 729,
|
||||
START_PATHING = 733,
|
||||
ACTIVATE_BUBBLE_BUFF_FROM_SERVER = 734,
|
||||
DEACTIVATE_BUBBLE_BUFF_FROM_SERVER = 735,
|
||||
NOTIFY_CLIENT_ZONE_OBJECT = 737,
|
||||
UPDATE_REPUTATION = 746,
|
||||
PROPERTY_RENTAL_RESPONSE = 750,
|
||||
REQUEST_PLATFORM_RESYNC = 760,
|
||||
PLATFORM_RESYNC = 761,
|
||||
PLAY_CINEMATIC = 762,
|
||||
END_CINEMATIC = 763,
|
||||
CINEMATIC_UPDATE = 764,
|
||||
TOGGLE_GHOST_REFERENCE_OVERRIDE = 767,
|
||||
SET_GHOST_REFERENCE_POSITION = 768,
|
||||
FIRE_EVENT_SERVER_SIDE = 770,
|
||||
SET_NETWORK_SCRIPT_VAR = 781,
|
||||
UPDATE_MODEL_FROM_CLIENT = 793,
|
||||
DELETE_MODEL_FROM_CLIENT = 794,
|
||||
PLAY_ND_AUDIO_EMITTER = 821,
|
||||
PLAY2_DAMBIENT_SOUND = 831,
|
||||
ENTER_PROPERTY1 = 840,
|
||||
ENTER_PROPERTY2 = 841,
|
||||
PROPERTY_ENTRANCE_SYNC = 842,
|
||||
PROPERTY_SELECT_QUERY = 845,
|
||||
PARSE_CHAT_MESSAGE = 850,
|
||||
BROADCAST_TEXT_TO_CHATBOX = 858,
|
||||
OPEN_PROPERTY_MANAGEMENT = 860,
|
||||
OPEN_PROPERTY_VENDOR = 861,
|
||||
UPDATE_PROPERTY_OR_MODEL_FOR_FILTER_CHECK = 863,
|
||||
CLIENT_TRADE_REQUEST = 868,
|
||||
SERVER_TRADE_REQUEST = 869,
|
||||
SERVER_TRADE_INVITE = 870,
|
||||
CLIENT_TRADE_REPLY = 871,
|
||||
SERVER_TRADE_REPLY = 872,
|
||||
SERVER_TRADE_INITIAL_REPLY = 873,
|
||||
SERVER_TRADE_FINAL_REPLY = 874,
|
||||
CLIENT_TRADE_UPDATE = 875,
|
||||
SERVER_SIDE_TRADE_UPDATE = 876,
|
||||
SERVER_TRADE_UPDATE = 877,
|
||||
CLIENT_TRADE_CANCEL = 878,
|
||||
CLIENT_SIDE_TRADE_CANCEL = 879,
|
||||
CLIENT_TRADE_ACCEPT = 880,
|
||||
SERVER_SIDE_TRADE_ACCEPT = 881,
|
||||
SERVER_SIDE_TRADE_CANCEL = 882,
|
||||
SERVER_TRADE_CANCEL = 883,
|
||||
SERVER_TRADE_ACCEPT = 884,
|
||||
READY_FOR_UPDATES = 888,
|
||||
ORIENT_TO_OBJECT = 905,
|
||||
ORIENT_TO_POSITION = 906,
|
||||
ORIENT_TO_ANGLE = 907,
|
||||
BOUNCER_ACTIVE_STATUS = 942,
|
||||
UN_USE_BBB_MODEL = 999,
|
||||
BBB_LOAD_ITEM_REQUEST = 1000,
|
||||
BBB_SAVE_REQUEST = 1001,
|
||||
BBB_SAVE_RESPONSE = 1006,
|
||||
NOTIFY_CLIENT_OBJECT = 1042,
|
||||
DISPLAY_ZONE_SUMMARY = 1043,
|
||||
ZONE_SUMMARY_DISMISSED = 1044,
|
||||
ACTIVITY_STATE_CHANGE_REQUEST = 1053,
|
||||
MODIFY_PLAYER_ZONE_STATISTIC = 1046,
|
||||
START_BUILDING_WITH_ITEM = 1057,
|
||||
START_ARRANGING_WITH_ITEM = 1061,
|
||||
FINISH_ARRANGING_WITH_ITEM = 1062,
|
||||
DONE_ARRANGING_WITH_ITEM = 1063,
|
||||
SET_BUILD_MODE = 1068,
|
||||
BUILD_MODE_SET = 1069,
|
||||
SET_BUILD_MODE_CONFIRMED = 1073,
|
||||
NOTIFY_CLIENT_FAILED_PRECONDITION = 1081,
|
||||
MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1093,
|
||||
MODULAR_BUILD_BEGIN = 1094,
|
||||
MODULAR_BUILD_END = 1095,
|
||||
MODULAR_BUILD_MOVE_AND_EQUIP = 1096,
|
||||
MODULAR_BUILD_FINISH = 1097,
|
||||
REPORT_BUG = 1198,
|
||||
MISSION_DIALOGUE_CANCELLED = 1129,
|
||||
ECHO_SYNC_SKILL = 1144,
|
||||
SYNC_SKILL = 1145,
|
||||
REQUEST_SERVER_PROJECTILE_IMPACT = 1148,
|
||||
DO_CLIENT_PROJECTILE_IMPACT = 1151,
|
||||
MODULAR_BUILD_CONVERT_MODEL = 1155,
|
||||
SET_PLAYER_ALLOWED_RESPAWN = 1165,
|
||||
UI_MESSAGE_SERVER_TO_SINGLE_CLIENT = 1184,
|
||||
UI_MESSAGE_SERVER_TO_ALL_CLIENTS = 1185,
|
||||
PET_TAMING_TRY_BUILD = 1197,
|
||||
REQUEST_SMASH_PLAYER = 1202,
|
||||
FIRE_EVENT_CLIENT_SIDE = 1213,
|
||||
TOGGLE_GM_INVIS = 1218,
|
||||
CHANGE_OBJECT_WORLD_STATE = 1223,
|
||||
VEHICLE_LOCK_INPUT = 1230,
|
||||
VEHICLE_UNLOCK_INPUT = 1231,
|
||||
RACING_RESET_PLAYER_TO_LAST_RESET = 1252,
|
||||
RACING_SERVER_SET_PLAYER_LAP_AND_PLANE = 1253,
|
||||
RACING_SET_PLAYER_RESET_INFO = 1254,
|
||||
RACING_PLAYER_INFO_RESET_FINISHED = 1255,
|
||||
LOCK_NODE_ROTATION = 1260,
|
||||
VEHICLE_SET_WHEEL_LOCK_STATE = 1273,
|
||||
NOTIFY_VEHICLE_OF_RACING_OBJECT = 1276,
|
||||
SET_NAME_BILLBOARD_STATE = 1284,
|
||||
PLAYER_REACHED_RESPAWN_CHECKPOINT = 1296,
|
||||
HANDLE_UGC_EQUIP_POST_DELETE_BASED_ON_EDIT_MODE = 1300,
|
||||
HANDLE_UGC_EQUIP_PRE_CREATE_BASED_ON_EDIT_MODE = 1301,
|
||||
PROPERTY_CONTENTS_FROM_CLIENT = 1305,
|
||||
GET_MODELS_ON_PROPERTY = 1306,
|
||||
MATCH_REQUEST = 1308,
|
||||
MATCH_RESPONSE = 1309,
|
||||
MATCH_UPDATE = 1310,
|
||||
MODULE_ASSEMBLY_DB_DATA_FOR_CLIENT = 1131,
|
||||
MODULE_ASSEMBLY_QUERY_DATA = 1132,
|
||||
SHOW_BILLBOARD_INTERACT_ICON = 1337,
|
||||
CHANGE_IDLE_FLAGS = 1338,
|
||||
VEHICLE_ADD_PASSIVE_BOOST_ACTION = 1340,
|
||||
VEHICLE_REMOVE_PASSIVE_BOOST_ACTION = 1341,
|
||||
VEHICLE_NOTIFY_SERVER_ADD_PASSIVE_BOOST_ACTION = 1342,
|
||||
VEHICLE_NOTIFY_SERVER_REMOVE_PASSIVE_BOOST_ACTION = 1343,
|
||||
VEHICLE_ADD_SLOWDOWN_ACTION = 1344,
|
||||
VEHICLE_REMOVE_SLOWDOWN_ACTION = 1345,
|
||||
VEHICLE_NOTIFY_SERVER_ADD_SLOWDOWN_ACTION = 1346,
|
||||
VEHICLE_NOTIFY_SERVER_REMOVE_SLOWDOWN_ACTION = 1347,
|
||||
BUYBACK_FROM_VENDOR = 1350,
|
||||
SET_PROPERTY_ACCESS = 1366,
|
||||
ZONE_PROPERTY_MODEL_PLACED = 1369,
|
||||
ZONE_PROPERTY_MODEL_ROTATED = 1370,
|
||||
ZONE_PROPERTY_MODEL_REMOVED_WHILE_EQUIPPED = 1371,
|
||||
ZONE_PROPERTY_MODEL_EQUIPPED = 1372,
|
||||
ZONE_PROPERTY_MODEL_PICKED_UP = 1373,
|
||||
ZONE_PROPERTY_MODEL_REMOVED = 1374,
|
||||
NOTIFY_RACING_CLIENT = 1390,
|
||||
RACING_PLAYER_HACK_CAR = 1391,
|
||||
RACING_PLAYER_LOADED = 1392,
|
||||
RACING_CLIENT_READY = 1393,
|
||||
UPDATE_CHAT_MODE = 1395,
|
||||
VEHICLE_NOTIFY_FINISHED_RACE = 1396,
|
||||
SET_CONSUMABLE_ITEM = 1409,
|
||||
SET_STATUS_IMMUNITY = 1435,
|
||||
SET_PET_NAME_MODERATED = 1448,
|
||||
MODIFY_LEGO_SCORE = 1459,
|
||||
RESTORE_TO_POST_LOAD_STATS = 1468,
|
||||
SET_RAIL_MOVEMENT = 1471,
|
||||
START_RAIL_MOVEMENT = 1472,
|
||||
CANCEL_RAIL_MOVEMENT = 1474,
|
||||
CLIENT_RAIL_MOVEMENT_READY = 1476,
|
||||
PLAYER_RAIL_ARRIVED_NOTIFICATION = 1477,
|
||||
UPDATE_PLAYER_STATISTIC = 1481,
|
||||
MODULAR_ASSEMBLY_NIF_COMPLETED = 1498,
|
||||
NOTIFY_NOT_ENOUGH_INV_SPACE = 1516,
|
||||
TEAM_SET_LEADER = 1557,
|
||||
TEAM_INVITE_CONFIRM = 1558,
|
||||
TEAM_GET_STATUS_RESPONSE = 1559,
|
||||
TEAM_ADD_PLAYER = 1562,
|
||||
TEAM_REMOVE_PLAYER = 1563,
|
||||
START_CELEBRATION_EFFECT = 1618,
|
||||
ADD_BUFF = 1647,
|
||||
SERVER_DONE_LOADING_ALL_OBJECTS = 1642,
|
||||
PLACE_PROPERTY_MODEL = 1170,
|
||||
VEHICLE_NOTIFY_HIT_IMAGINATION_SERVER = 1606,
|
||||
ADD_RUN_SPEED_MODIFIER = 1505,
|
||||
HANDLE_HOT_PROPERTY_DATA = 1511,
|
||||
SEND_HOT_PROPERTY_DATA = 1510,
|
||||
REMOVE_RUN_SPEED_MODIFIER = 1506,
|
||||
UPDATE_PROPERTY_PERFORMANCE_COST = 1547,
|
||||
PROPERTY_ENTRANCE_BEGIN = 1553,
|
||||
SET_RESURRECT_RESTORE_VALUES = 1591,
|
||||
VEHICLE_STOP_BOOST = 1617,
|
||||
REMOVE_BUFF = 1648,
|
||||
REQUEST_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1666,
|
||||
RESPONSE_MOVE_ITEM_BETWEEN_INVENTORY_TYPES = 1667,
|
||||
PLAYER_SET_CAMERA_CYCLING_MODE = 1676,
|
||||
SET_MOUNT_INVENTORY_ID = 1726,
|
||||
NOTIFY_SERVER_LEVEL_PROCESSING_COMPLETE = 1734,
|
||||
NOTIFY_LEVEL_REWARDS = 1735,
|
||||
DISMOUNT_COMPLETE = 1756,
|
||||
MARK_INVENTORY_ITEM_AS_ACTIVE = 1767,
|
||||
END
|
||||
};
|
||||
|
||||
#endif //!__EGAMEMESSAGETYPE__H__
|
||||
36
dCommon/dEnums/eMasterMessageType.h
Normal file
36
dCommon/dEnums/eMasterMessageType.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#ifndef __EMASTERMESSAGETYPE__H__
|
||||
#define __EMASTERMESSAGETYPE__H__
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
enum class eMasterMessageType : uint32_t {
|
||||
REQUEST_PERSISTENT_ID = 1,
|
||||
REQUEST_PERSISTENT_ID_RESPONSE,
|
||||
REQUEST_ZONE_TRANSFER,
|
||||
REQUEST_ZONE_TRANSFER_RESPONSE,
|
||||
SERVER_INFO,
|
||||
REQUEST_SESSION_KEY,
|
||||
SET_SESSION_KEY,
|
||||
SESSION_KEY_RESPONSE,
|
||||
PLAYER_ADDED,
|
||||
PLAYER_REMOVED,
|
||||
|
||||
CREATE_PRIVATE_ZONE,
|
||||
REQUEST_PRIVATE_ZONE,
|
||||
|
||||
WORLD_READY,
|
||||
PREP_ZONE,
|
||||
|
||||
SHUTDOWN,
|
||||
SHUTDOWN_RESPONSE,
|
||||
SHUTDOWN_IMMEDIATE,
|
||||
|
||||
SHUTDOWN_UNIVERSE,
|
||||
|
||||
AFFIRM_TRANSFER_REQUEST,
|
||||
AFFIRM_TRANSFER_RESPONSE,
|
||||
|
||||
NEW_SESSION_ALERT
|
||||
};
|
||||
|
||||
#endif //!__EMASTERMESSAGETYPE__H__
|
||||
@@ -107,7 +107,7 @@ enum class eReplicaComponentType : uint32_t {
|
||||
DONATION_VENDOR,
|
||||
COMBAT_MEDIATOR,
|
||||
COMMENDATION_VENDOR,
|
||||
UNKNOWN_103,
|
||||
GATE_RUSH_CONTROL,
|
||||
RAIL_ACTIVATOR,
|
||||
ROLLER,
|
||||
PLAYER_FORCED_MOVEMENT,
|
||||
@@ -119,7 +119,7 @@ enum class eReplicaComponentType : uint32_t {
|
||||
UNKNOWN_112,
|
||||
PROPERTY_PLAQUE,
|
||||
BUILD_BORDER,
|
||||
UNKOWN_115,
|
||||
UNKNOWN_115,
|
||||
CULLING_PLANE,
|
||||
DESTROYABLE = 1000 // Actually 7
|
||||
};
|
||||
|
||||
12
dCommon/dEnums/eServerMessageType.h
Normal file
12
dCommon/dEnums/eServerMessageType.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef __ESERVERMESSAGETYPE__H__
|
||||
#define __ESERVERMESSAGETYPE__H__
|
||||
|
||||
#include <cstdint>
|
||||
//! The Internal Server Packet Identifiers
|
||||
enum class eServerMessageType : uint32_t {
|
||||
VERSION_CONFIRM = 0,
|
||||
DISCONNECT_NOTIFY,
|
||||
GENERAL_NOTIFY
|
||||
};
|
||||
|
||||
#endif //!__ESERVERMESSAGETYPE__H__
|
||||
42
dCommon/dEnums/eWorldMessageType.h
Normal file
42
dCommon/dEnums/eWorldMessageType.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef __EWORLDMESSAGETYPE__H__
|
||||
#define __EWORLDMESSAGETYPE__H__
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
enum class eWorldMessageType : uint32_t {
|
||||
VALIDATION = 1, // Session info
|
||||
CHARACTER_LIST_REQUEST,
|
||||
CHARACTER_CREATE_REQUEST,
|
||||
LOGIN_REQUEST, // Character selected
|
||||
GAME_MSG,
|
||||
CHARACTER_DELETE_REQUEST,
|
||||
CHARACTER_RENAME_REQUEST,
|
||||
HAPPY_FLOWER_MODE_NOTIFY,
|
||||
SLASH_RELOAD_MAP, // Reload map cmp
|
||||
SLASH_PUSH_MAP_REQUEST, // Push map req cmd
|
||||
SLASH_PUSH_MAP, // Push map cmd
|
||||
SLASH_PULL_MAP, // Pull map cmd
|
||||
LOCK_MAP_REQUEST,
|
||||
GENERAL_CHAT_MESSAGE, // General chat message
|
||||
HTTP_MONITOR_INFO_REQUEST,
|
||||
SLASH_DEBUG_SCRIPTS, // Debug scripts cmd
|
||||
MODELS_CLEAR,
|
||||
EXHIBIT_INSERT_MODEL,
|
||||
LEVEL_LOAD_COMPLETE, // Character data request
|
||||
TMP_GUILD_CREATE,
|
||||
ROUTE_PACKET, // Social?
|
||||
POSITION_UPDATE,
|
||||
MAIL,
|
||||
WORD_CHECK, // Whitelist word check
|
||||
STRING_CHECK, // Whitelist string check
|
||||
GET_PLAYERS_IN_ZONE,
|
||||
REQUEST_UGC_MANIFEST_INFO,
|
||||
BLUEPRINT_GET_ALL_DATA_REQUEST,
|
||||
CANCEL_MAP_QUEUE,
|
||||
HANDLE_FUNNESS,
|
||||
FAKE_PRG_CSR_MESSAGE,
|
||||
REQUEST_FREE_TRIAL_REFRESH,
|
||||
GM_SET_FREE_TRIAL_STATUS
|
||||
};
|
||||
|
||||
#endif //!__EWORLDMESSAGETYPE__H__
|
||||
Reference in New Issue
Block a user