diff --git a/src/object/client/CClientObjCreate.cpp b/src/object/client/CClientObjCreate.cpp new file mode 100644 index 0000000..ed99e1a --- /dev/null +++ b/src/object/client/CClientObjCreate.cpp @@ -0,0 +1,72 @@ +#include "object/client/CClientObjCreate.hpp" +#include "util/DataStore.hpp" +#include "util/GUID.hpp" +#include "util/Unimplemented.hpp" +#include + +int32_t CClientObjCreate::Get(CDataStore* msg) { + uint16_t flags; + msg->Get(flags); + + this->flags = flags; + + if (this->flags & 0x20) { + *msg >> this->move; + } else if (this->flags & 0x100) { + SmartGUID guid; + *msg >> guid; + this->move.status.transport = guid; + + *msg >> this->move.status.position28; + *msg >> this->move.status.position18; + + msg->Get(this->move.status.facing34); + msg->Get(this->move.status.facing24); + } else if (this->flags & 0x40) { + this->move.status.transport = 0; + + *msg >> this->move.status.position28; + this->move.status.position18 = this->move.status.position28; + + msg->Get(this->move.status.facing34); + } + + if (this->flags & 0x8) { + msg->Get(this->uint2AC); + } else { + this->uint2AC = 0; + } + + if (this->flags & 0x10) { + msg->Get(this->uint2B0); + } else { + this->uint2B0 = 0; + } + + if (this->flags & 0x4) { + SmartGUID guid; + *msg >> guid; + this->guid2B8 = guid; + } else { + this->guid2B8 = 0; + } + + if (this->flags & 0x2) { + msg->Get(this->uint2C0); + } + + if (this->flags & 0x80) { + msg->Get(this->uint2C4); + msg->Get(this->float2C8); + } + + if (this->flags & 0x200) { + SmartGUID guid; + *msg >> guid; + this->guid2D4 = guid; + } else { + this->guid2D4 = 0; + } + + return msg->Size() >= msg->Tell(); +} diff --git a/src/object/client/CClientObjCreate.hpp b/src/object/client/CClientObjCreate.hpp new file mode 100644 index 0000000..5d8baf8 --- /dev/null +++ b/src/object/client/CClientObjCreate.hpp @@ -0,0 +1,26 @@ +#ifndef OBJECT_CLIENT_C_CLIENT_OBJ_CREATE_HPP +#define OBJECT_CLIENT_C_CLIENT_OBJ_CREATE_HPP + +#include "object/client/CClientMoveUpdate.hpp" +#include "util/GUID.hpp" +#include + +class CDataStore; + +struct CClientObjCreate { + CClientMoveUpdate move; + uint32_t flags = 0x0; + uint32_t uint2AC; + uint32_t uint2B0; + // TODO + WOWGUID guid2B8 = 0; + uint32_t uint2C0; + uint32_t uint2C4; + float float2C8; + // TODO + WOWGUID guid2D4 = 0; + + int32_t Get(CDataStore* msg); +}; + +#endif