mirror of
https://github.com/whoahq/whoa.git
synced 2026-02-01 16:22:45 +03:00
feat(object): add storage management functions to base object classes
This commit is contained in:
parent
2d5d97f34a
commit
0c3bbc4336
@ -1,10 +1,26 @@
|
|||||||
#include "object/client/CGContainer.hpp"
|
#include "object/client/CGContainer.hpp"
|
||||||
#include "object/client/CGItem.hpp"
|
#include "object/client/CGItem.hpp"
|
||||||
|
|
||||||
|
uint32_t CGContainer::GetBaseOffset() {
|
||||||
|
return CGItem::TotalFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGContainer::GetBaseOffsetSaved() {
|
||||||
|
return CGItem::TotalFieldsSaved();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGContainer::GetDataSize() {
|
||||||
|
return CGContainer::TotalFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGContainer::GetDataSizeSaved() {
|
||||||
|
return CGContainer::TotalFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CGContainer::TotalFields() {
|
uint32_t CGContainer::TotalFields() {
|
||||||
return CGItem::TotalFields() + 74;
|
return CGContainer::GetBaseOffset() + 74;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGContainer::TotalFieldsSaved() {
|
uint32_t CGContainer::TotalFieldsSaved() {
|
||||||
return CGItem::TotalFieldsSaved() + 72;
|
return CGContainer::GetBaseOffsetSaved() + 72;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,14 +4,24 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
struct CGContainerData {
|
struct CGContainerData {
|
||||||
// TODO
|
uint32_t numSlots;
|
||||||
|
uint32_t pad;
|
||||||
|
uint64_t slots[36];
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGContainer {
|
class CGContainer {
|
||||||
public:
|
public:
|
||||||
// Public static functions
|
// Public static functions
|
||||||
|
static uint32_t GetBaseOffset();
|
||||||
|
static uint32_t GetBaseOffsetSaved();
|
||||||
|
static uint32_t GetDataSize();
|
||||||
|
static uint32_t GetDataSizeSaved();
|
||||||
static uint32_t TotalFields();
|
static uint32_t TotalFields();
|
||||||
static uint32_t TotalFieldsSaved();
|
static uint32_t TotalFieldsSaved();
|
||||||
|
|
||||||
|
// Public member variables
|
||||||
|
CGContainerData* m_cont;
|
||||||
|
uint32_t* m_contSaved;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
8
src/object/client/CGContainer_C.cpp
Normal file
8
src/object/client/CGContainer_C.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "object/client/CGContainer_C.hpp"
|
||||||
|
|
||||||
|
void CGContainer_C::SetStorage(uint32_t* storage, uint32_t* saved) {
|
||||||
|
this->CGItem_C::SetStorage(storage, saved);
|
||||||
|
|
||||||
|
this->m_cont = reinterpret_cast<CGContainerData*>(&storage[CGContainer::GetBaseOffset()]);
|
||||||
|
this->m_contSaved = &saved[CGContainer::GetBaseOffsetSaved()];
|
||||||
|
}
|
||||||
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
class CGContainer_C : public CGItem_C, public CGContainer {
|
class CGContainer_C : public CGItem_C, public CGContainer {
|
||||||
public:
|
public:
|
||||||
// TODO
|
// Public member functions
|
||||||
|
void SetStorage(uint32_t* storage, uint32_t* saved);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,10 +1,26 @@
|
|||||||
#include "object/client/CGCorpse.hpp"
|
#include "object/client/CGCorpse.hpp"
|
||||||
#include "object/client/CGObject.hpp"
|
#include "object/client/CGObject.hpp"
|
||||||
|
|
||||||
|
uint32_t CGCorpse::GetBaseOffset() {
|
||||||
|
return CGObject::TotalFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGCorpse::GetBaseOffsetSaved() {
|
||||||
|
return CGObject::TotalFieldsSaved();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGCorpse::GetDataSize() {
|
||||||
|
return CGCorpse::TotalFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGCorpse::GetDataSizeSaved() {
|
||||||
|
return CGCorpse::TotalFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CGCorpse::TotalFields() {
|
uint32_t CGCorpse::TotalFields() {
|
||||||
return CGObject::TotalFields() + 30;
|
return CGCorpse::GetBaseOffset() + 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGCorpse::TotalFieldsSaved() {
|
uint32_t CGCorpse::TotalFieldsSaved() {
|
||||||
return CGObject::TotalFieldsSaved() + 3;
|
return CGCorpse::GetBaseOffsetSaved() + 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,8 +10,16 @@ struct CGCorpseData {
|
|||||||
class CGCorpse {
|
class CGCorpse {
|
||||||
public:
|
public:
|
||||||
// Public static functions
|
// Public static functions
|
||||||
|
static uint32_t GetBaseOffset();
|
||||||
|
static uint32_t GetBaseOffsetSaved();
|
||||||
|
static uint32_t GetDataSize();
|
||||||
|
static uint32_t GetDataSizeSaved();
|
||||||
static uint32_t TotalFields();
|
static uint32_t TotalFields();
|
||||||
static uint32_t TotalFieldsSaved();
|
static uint32_t TotalFieldsSaved();
|
||||||
|
|
||||||
|
// Public member variables
|
||||||
|
CGCorpseData* m_corpse;
|
||||||
|
uint32_t* m_corpseSaved;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
8
src/object/client/CGCorpse_C.cpp
Normal file
8
src/object/client/CGCorpse_C.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "object/client/CGCorpse_C.hpp"
|
||||||
|
|
||||||
|
void CGCorpse_C::SetStorage(uint32_t* storage, uint32_t* saved) {
|
||||||
|
this->CGObject_C::SetStorage(storage, saved);
|
||||||
|
|
||||||
|
this->m_corpse = reinterpret_cast<CGCorpseData*>(&storage[CGCorpse::GetBaseOffset()]);
|
||||||
|
this->m_corpseSaved = &saved[CGCorpse::GetBaseOffsetSaved()];
|
||||||
|
}
|
||||||
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
class CGCorpse_C : public CGObject_C, public CGCorpse {
|
class CGCorpse_C : public CGObject_C, public CGCorpse {
|
||||||
public:
|
public:
|
||||||
// TODO
|
// Public member functions
|
||||||
|
void SetStorage(uint32_t* storage, uint32_t* saved);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,10 +1,26 @@
|
|||||||
#include "object/client/CGDynamicObject.hpp"
|
#include "object/client/CGDynamicObject.hpp"
|
||||||
#include "object/client/CGObject.hpp"
|
#include "object/client/CGObject.hpp"
|
||||||
|
|
||||||
|
uint32_t CGDynamicObject::GetBaseOffset() {
|
||||||
|
return CGObject::TotalFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGDynamicObject::GetBaseOffsetSaved() {
|
||||||
|
return CGObject::TotalFieldsSaved();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGDynamicObject::GetDataSize() {
|
||||||
|
return CGDynamicObject::TotalFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGDynamicObject::GetDataSizeSaved() {
|
||||||
|
return CGDynamicObject::TotalFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CGDynamicObject::TotalFields() {
|
uint32_t CGDynamicObject::TotalFields() {
|
||||||
return CGObject::TotalFields() + 6;
|
return CGDynamicObject::GetBaseOffset() + 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGDynamicObject::TotalFieldsSaved() {
|
uint32_t CGDynamicObject::TotalFieldsSaved() {
|
||||||
return CGObject::TotalFieldsSaved();
|
return CGDynamicObject::GetBaseOffsetSaved() + 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,8 +10,16 @@ struct CGDynamicObjectData {
|
|||||||
class CGDynamicObject {
|
class CGDynamicObject {
|
||||||
public:
|
public:
|
||||||
// Public static functions
|
// Public static functions
|
||||||
|
static uint32_t GetBaseOffset();
|
||||||
|
static uint32_t GetBaseOffsetSaved();
|
||||||
|
static uint32_t GetDataSize();
|
||||||
|
static uint32_t GetDataSizeSaved();
|
||||||
static uint32_t TotalFields();
|
static uint32_t TotalFields();
|
||||||
static uint32_t TotalFieldsSaved();
|
static uint32_t TotalFieldsSaved();
|
||||||
|
|
||||||
|
// Public member variables
|
||||||
|
CGDynamicObjectData* m_dynamicObj;
|
||||||
|
uint32_t* m_dynamicObjSaved;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
8
src/object/client/CGDynamicObject_C.cpp
Normal file
8
src/object/client/CGDynamicObject_C.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "object/client/CGDynamicObject_C.hpp"
|
||||||
|
|
||||||
|
void CGDynamicObject_C::SetStorage(uint32_t* storage, uint32_t* saved) {
|
||||||
|
this->CGObject_C::SetStorage(storage, saved);
|
||||||
|
|
||||||
|
this->m_dynamicObj = reinterpret_cast<CGDynamicObjectData*>(&storage[CGDynamicObject::GetBaseOffset()]);
|
||||||
|
this->m_dynamicObjSaved = &saved[CGDynamicObject::GetBaseOffsetSaved()];
|
||||||
|
}
|
||||||
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
class CGDynamicObject_C : public CGObject_C, public CGDynamicObject {
|
class CGDynamicObject_C : public CGObject_C, public CGDynamicObject {
|
||||||
public:
|
public:
|
||||||
// TODO
|
// Public member functions
|
||||||
|
void SetStorage(uint32_t* storage, uint32_t* saved);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,10 +1,26 @@
|
|||||||
#include "object/client/CGGameObject.hpp"
|
#include "object/client/CGGameObject.hpp"
|
||||||
#include "object/client/CGObject.hpp"
|
#include "object/client/CGObject.hpp"
|
||||||
|
|
||||||
|
uint32_t CGGameObject::GetBaseOffset() {
|
||||||
|
return CGObject::TotalFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGGameObject::GetBaseOffsetSaved() {
|
||||||
|
return CGObject::TotalFieldsSaved();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGGameObject::GetDataSize() {
|
||||||
|
return CGGameObject::TotalFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGGameObject::GetDataSizeSaved() {
|
||||||
|
return CGGameObject::TotalFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CGGameObject::TotalFields() {
|
uint32_t CGGameObject::TotalFields() {
|
||||||
return CGObject::TotalFields() + 12;
|
return CGGameObject::GetBaseOffset() + 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGGameObject::TotalFieldsSaved() {
|
uint32_t CGGameObject::TotalFieldsSaved() {
|
||||||
return CGObject::TotalFieldsSaved() + 4;
|
return CGGameObject::GetBaseOffsetSaved() + 4;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,8 +10,16 @@ struct CGGameObjectData {
|
|||||||
class CGGameObject {
|
class CGGameObject {
|
||||||
public:
|
public:
|
||||||
// Public static functions
|
// Public static functions
|
||||||
|
static uint32_t GetBaseOffset();
|
||||||
|
static uint32_t GetBaseOffsetSaved();
|
||||||
|
static uint32_t GetDataSize();
|
||||||
|
static uint32_t GetDataSizeSaved();
|
||||||
static uint32_t TotalFields();
|
static uint32_t TotalFields();
|
||||||
static uint32_t TotalFieldsSaved();
|
static uint32_t TotalFieldsSaved();
|
||||||
|
|
||||||
|
// Public member variables
|
||||||
|
CGGameObjectData* m_gameObj;
|
||||||
|
uint32_t* m_gameObjSaved;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
8
src/object/client/CGGameObject_C.cpp
Normal file
8
src/object/client/CGGameObject_C.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "object/client/CGGameObject_C.hpp"
|
||||||
|
|
||||||
|
void CGGameObject_C::SetStorage(uint32_t* storage, uint32_t* saved) {
|
||||||
|
this->CGObject_C::SetStorage(storage, saved);
|
||||||
|
|
||||||
|
this->m_gameObj = reinterpret_cast<CGGameObjectData*>(&storage[CGGameObject::GetBaseOffset()]);
|
||||||
|
this->m_gameObjSaved = &saved[CGGameObject::GetBaseOffsetSaved()];
|
||||||
|
}
|
||||||
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
class CGGameObject_C : public CGObject_C, public CGGameObject {
|
class CGGameObject_C : public CGObject_C, public CGGameObject {
|
||||||
public:
|
public:
|
||||||
// TODO
|
// Public member functions
|
||||||
|
void SetStorage(uint32_t* storage, uint32_t* saved);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,10 +1,26 @@
|
|||||||
#include "object/client/CGItem.hpp"
|
#include "object/client/CGItem.hpp"
|
||||||
#include "object/client/CGObject.hpp"
|
#include "object/client/CGObject.hpp"
|
||||||
|
|
||||||
|
uint32_t CGItem::GetBaseOffset() {
|
||||||
|
return CGObject::TotalFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGItem::GetBaseOffsetSaved() {
|
||||||
|
return CGObject::TotalFieldsSaved();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGItem::GetDataSize() {
|
||||||
|
return CGItem::TotalFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGItem::GetDataSizeSaved() {
|
||||||
|
return CGItem::TotalFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CGItem::TotalFields() {
|
uint32_t CGItem::TotalFields() {
|
||||||
return CGObject::TotalFields() + 58;
|
return CGItem::GetBaseOffset() + 58;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGItem::TotalFieldsSaved() {
|
uint32_t CGItem::TotalFieldsSaved() {
|
||||||
return CGObject::TotalFieldsSaved() + 47;
|
return CGItem::GetBaseOffsetSaved() + 47;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,15 +3,43 @@
|
|||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
struct ItemEnchantment {
|
||||||
|
int32_t id;
|
||||||
|
int32_t expiration;
|
||||||
|
int32_t chargesRemaining;
|
||||||
|
};
|
||||||
|
|
||||||
struct CGItemData {
|
struct CGItemData {
|
||||||
// TODO
|
uint64_t owner;
|
||||||
|
uint64_t containedIn;
|
||||||
|
uint64_t creator;
|
||||||
|
uint64_t giftCreator;
|
||||||
|
uint32_t stackCount;
|
||||||
|
int32_t expiration;
|
||||||
|
int32_t spellCharges[5];
|
||||||
|
uint32_t flags;
|
||||||
|
ItemEnchantment enchantments[12];
|
||||||
|
int32_t propertySeed;
|
||||||
|
int32_t randomPropertiesID;
|
||||||
|
int32_t durability;
|
||||||
|
int32_t maxDurability;
|
||||||
|
int32_t createPlayedTime;
|
||||||
|
int32_t pad;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGItem {
|
class CGItem {
|
||||||
public:
|
public:
|
||||||
// Public static functions
|
// Public static functions
|
||||||
|
static uint32_t GetBaseOffset();
|
||||||
|
static uint32_t GetBaseOffsetSaved();
|
||||||
|
static uint32_t GetDataSize();
|
||||||
|
static uint32_t GetDataSizeSaved();
|
||||||
static uint32_t TotalFields();
|
static uint32_t TotalFields();
|
||||||
static uint32_t TotalFieldsSaved();
|
static uint32_t TotalFieldsSaved();
|
||||||
|
|
||||||
|
// Public member variables
|
||||||
|
CGItemData* m_item;
|
||||||
|
uint32_t* m_itemSaved;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
8
src/object/client/CGItem_C.cpp
Normal file
8
src/object/client/CGItem_C.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "object/client/CGItem_C.hpp"
|
||||||
|
|
||||||
|
void CGItem_C::SetStorage(uint32_t* storage, uint32_t* saved) {
|
||||||
|
this->CGObject_C::SetStorage(storage, saved);
|
||||||
|
|
||||||
|
this->m_item = reinterpret_cast<CGItemData*>(&storage[CGItem::GetBaseOffset()]);
|
||||||
|
this->m_itemSaved = &saved[CGItem::GetBaseOffsetSaved()];
|
||||||
|
}
|
||||||
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
class CGItem_C : public CGObject_C, public CGItem {
|
class CGItem_C : public CGObject_C, public CGItem {
|
||||||
public:
|
public:
|
||||||
// TODO
|
// Public member functions
|
||||||
|
void SetStorage(uint32_t* storage, uint32_t* saved);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,9 +1,25 @@
|
|||||||
#include "object/client/CGObject.hpp"
|
#include "object/client/CGObject.hpp"
|
||||||
|
|
||||||
|
uint32_t CGObject::GetBaseOffset() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGObject::GetBaseOffsetSaved() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGObject::GetDataSize() {
|
||||||
|
return CGObject::TotalFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGObject::GetDataSizeSaved() {
|
||||||
|
return CGObject::TotalFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CGObject::TotalFields() {
|
uint32_t CGObject::TotalFields() {
|
||||||
return 6;
|
return CGObject::GetBaseOffset() + 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGObject::TotalFieldsSaved() {
|
uint32_t CGObject::TotalFieldsSaved() {
|
||||||
return 3;
|
return CGObject::GetBaseOffsetSaved() + 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,10 @@ struct CGObjectData {
|
|||||||
class CGObject {
|
class CGObject {
|
||||||
public:
|
public:
|
||||||
// Public static functions
|
// Public static functions
|
||||||
|
static uint32_t GetBaseOffset();
|
||||||
|
static uint32_t GetBaseOffsetSaved();
|
||||||
|
static uint32_t GetDataSize();
|
||||||
|
static uint32_t GetDataSizeSaved();
|
||||||
static uint32_t TotalFields();
|
static uint32_t TotalFields();
|
||||||
static uint32_t TotalFieldsSaved();
|
static uint32_t TotalFieldsSaved();
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,10 @@
|
|||||||
#include "object/client/CGObject_C.hpp"
|
#include "object/client/CGObject_C.hpp"
|
||||||
|
|
||||||
|
void CGObject_C::SetStorage(uint32_t* storage, uint32_t* saved) {
|
||||||
|
this->m_obj = reinterpret_cast<CGObjectData*>(&storage[CGObject::GetBaseOffset()]);
|
||||||
|
this->m_objSaved = &saved[CGObject::GetBaseOffsetSaved()];
|
||||||
|
}
|
||||||
|
|
||||||
void CGObject_C::SetTypeID(OBJECT_TYPE_ID typeID) {
|
void CGObject_C::SetTypeID(OBJECT_TYPE_ID typeID) {
|
||||||
this->m_typeID = typeID;
|
this->m_typeID = typeID;
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
class CGObject_C : public CGObject, public TSHashObject<CGObject_C, CHashKeyGUID> {
|
class CGObject_C : public CGObject, public TSHashObject<CGObject_C, CHashKeyGUID> {
|
||||||
public:
|
public:
|
||||||
// Public member functions
|
// Public member functions
|
||||||
|
void SetStorage(uint32_t* storage, uint32_t* saved);
|
||||||
void SetTypeID(OBJECT_TYPE_ID typeID);
|
void SetTypeID(OBJECT_TYPE_ID typeID);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,18 +1,42 @@
|
|||||||
#include "object/client/CGPlayer.hpp"
|
#include "object/client/CGPlayer.hpp"
|
||||||
#include "object/client/CGUnit.hpp"
|
#include "object/client/CGUnit.hpp"
|
||||||
|
|
||||||
|
uint32_t CGPlayer::GetBaseOffset() {
|
||||||
|
return CGUnit::TotalFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGPlayer::GetBaseOffsetSaved() {
|
||||||
|
return CGUnit::TotalFieldsSaved();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGPlayer::GetDataSize() {
|
||||||
|
return CGPlayer::TotalFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGPlayer::GetDataSizeSaved() {
|
||||||
|
return CGPlayer::TotalFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGPlayer::GetRemoteDataSize() {
|
||||||
|
return CGPlayer::TotalRemoteFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGPlayer::GetRemoteDataSizeSaved() {
|
||||||
|
return CGPlayer::TotalRemoteFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CGPlayer::TotalFields() {
|
uint32_t CGPlayer::TotalFields() {
|
||||||
return CGUnit::TotalFields() + 1178;
|
return CGPlayer::GetBaseOffset() + 1178;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGPlayer::TotalRemoteFields() {
|
uint32_t CGPlayer::TotalRemoteFields() {
|
||||||
return CGUnit::TotalFields() + 176;
|
return CGPlayer::GetBaseOffset() + 176;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGPlayer::TotalFieldsSaved() {
|
uint32_t CGPlayer::TotalFieldsSaved() {
|
||||||
return CGUnit::TotalFieldsSaved() + 1043;
|
return CGPlayer::GetBaseOffsetSaved() + 1043;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGPlayer::TotalRemoteFieldsSaved() {
|
uint32_t CGPlayer::TotalRemoteFieldsSaved() {
|
||||||
return CGUnit::TotalFieldsSaved() + 173;
|
return CGPlayer::GetBaseOffsetSaved() + 173;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,10 +10,20 @@ struct CGPlayerData {
|
|||||||
class CGPlayer {
|
class CGPlayer {
|
||||||
public:
|
public:
|
||||||
// Public static functions
|
// Public static functions
|
||||||
|
static uint32_t GetBaseOffset();
|
||||||
|
static uint32_t GetBaseOffsetSaved();
|
||||||
|
static uint32_t GetDataSize();
|
||||||
|
static uint32_t GetDataSizeSaved();
|
||||||
|
static uint32_t GetRemoteDataSize();
|
||||||
|
static uint32_t GetRemoteDataSizeSaved();
|
||||||
static uint32_t TotalFields();
|
static uint32_t TotalFields();
|
||||||
static uint32_t TotalRemoteFields();
|
static uint32_t TotalRemoteFields();
|
||||||
static uint32_t TotalFieldsSaved();
|
static uint32_t TotalFieldsSaved();
|
||||||
static uint32_t TotalRemoteFieldsSaved();
|
static uint32_t TotalRemoteFieldsSaved();
|
||||||
|
|
||||||
|
// Public member variables
|
||||||
|
CGPlayerData* m_player;
|
||||||
|
uint32_t* m_playerSaved;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -3,6 +3,13 @@
|
|||||||
#include "object/Types.hpp"
|
#include "object/Types.hpp"
|
||||||
#include <storm/Error.hpp>
|
#include <storm/Error.hpp>
|
||||||
|
|
||||||
|
void CGPlayer_C::SetStorage(uint32_t* storage, uint32_t* saved) {
|
||||||
|
this->CGUnit_C::SetStorage(storage, saved);
|
||||||
|
|
||||||
|
this->m_player = reinterpret_cast<CGPlayerData*>(&storage[CGPlayer::GetBaseOffset()]);
|
||||||
|
this->m_playerSaved = &saved[CGPlayer::GetBaseOffsetSaved()];
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t Player_C_GetDisplayId(uint32_t race, uint32_t sex) {
|
uint32_t Player_C_GetDisplayId(uint32_t race, uint32_t sex) {
|
||||||
STORM_ASSERT(sex < UNITSEX_LAST);
|
STORM_ASSERT(sex < UNITSEX_LAST);
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,8 @@ class CreatureModelDataRec;
|
|||||||
|
|
||||||
class CGPlayer_C : public CGUnit_C, public CGPlayer {
|
class CGPlayer_C : public CGUnit_C, public CGPlayer {
|
||||||
public:
|
public:
|
||||||
// TODO
|
// Public member functions
|
||||||
|
void SetStorage(uint32_t* storage, uint32_t* saved);
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t Player_C_GetDisplayId(uint32_t race, uint32_t sex);
|
uint32_t Player_C_GetDisplayId(uint32_t race, uint32_t sex);
|
||||||
|
|||||||
@ -1,10 +1,26 @@
|
|||||||
#include "object/client/CGUnit.hpp"
|
#include "object/client/CGUnit.hpp"
|
||||||
#include "object/client/CGObject.hpp"
|
#include "object/client/CGObject.hpp"
|
||||||
|
|
||||||
|
uint32_t CGUnit::GetBaseOffset() {
|
||||||
|
return CGObject::TotalFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGUnit::GetBaseOffsetSaved() {
|
||||||
|
return CGObject::TotalFieldsSaved();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGUnit::GetDataSize() {
|
||||||
|
return CGUnit::TotalFields() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CGUnit::GetDataSizeSaved() {
|
||||||
|
return CGUnit::TotalFieldsSaved() * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t CGUnit::TotalFields() {
|
uint32_t CGUnit::TotalFields() {
|
||||||
return CGObject::TotalFields() + 142;
|
return CGUnit::GetBaseOffset() + 142;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CGUnit::TotalFieldsSaved() {
|
uint32_t CGUnit::TotalFieldsSaved() {
|
||||||
return CGObject::TotalFieldsSaved() + 123;
|
return CGUnit::GetBaseOffsetSaved() + 123;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,14 +4,86 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
struct CGUnitData {
|
struct CGUnitData {
|
||||||
// TODO
|
uint64_t charm;
|
||||||
|
uint64_t summon;
|
||||||
|
uint64_t critter;
|
||||||
|
uint64_t charmedBy;
|
||||||
|
uint64_t summonedBy;
|
||||||
|
uint64_t createdBy;
|
||||||
|
uint64_t target;
|
||||||
|
uint64_t channelObject;
|
||||||
|
int32_t channelSpell;
|
||||||
|
int32_t pad1;
|
||||||
|
int32_t health;
|
||||||
|
int32_t power[7];
|
||||||
|
int32_t maxHealth;
|
||||||
|
int32_t maxPower[7];
|
||||||
|
int32_t powerRegenFlatModifier[7];
|
||||||
|
int32_t powerRegenInterruptedFlatModifier[7];
|
||||||
|
int32_t level;
|
||||||
|
int32_t factionTemplate;
|
||||||
|
int32_t virtualItemSlotID[3];
|
||||||
|
uint32_t flags;
|
||||||
|
uint32_t flags2;
|
||||||
|
uint32_t auraState;
|
||||||
|
uint32_t attackRoundBaseTime[2];
|
||||||
|
uint32_t rangedAttackTime;
|
||||||
|
float boundingRadius;
|
||||||
|
float combatReach;
|
||||||
|
int32_t displayID;
|
||||||
|
int32_t nativeDisplayID;
|
||||||
|
int32_t mountDisplayID;
|
||||||
|
uint32_t minDamage;
|
||||||
|
uint32_t maxDamage;
|
||||||
|
uint32_t minOffhandDamage;
|
||||||
|
uint32_t maxOffhandDamage;
|
||||||
|
int32_t pad2;
|
||||||
|
uint32_t petNumber;
|
||||||
|
uint32_t petNameTimestamp;
|
||||||
|
uint32_t petExperience;
|
||||||
|
uint32_t petNextLevelExperience;
|
||||||
|
uint32_t dynamicFlags;
|
||||||
|
int32_t modCastingSpeed;
|
||||||
|
int32_t createdBySpell;
|
||||||
|
uint32_t npcFlags;
|
||||||
|
uint32_t emoteState;
|
||||||
|
int32_t stats[5];
|
||||||
|
int32_t posStats[5];
|
||||||
|
int32_t negStats[5];
|
||||||
|
int32_t resistance[7];
|
||||||
|
int32_t resistanceBuffModsPositive[7];
|
||||||
|
int32_t resistanceBuffModsNegative[7];
|
||||||
|
int32_t baseMana;
|
||||||
|
int32_t baseHealth;
|
||||||
|
int32_t pad3;
|
||||||
|
int32_t attackPower;
|
||||||
|
int32_t attackPowerMods;
|
||||||
|
int32_t attackPowerMultiplier;
|
||||||
|
int32_t rangedAttackPower;
|
||||||
|
int32_t rangedAttackPowerMods;
|
||||||
|
int32_t rangedAttackPowerMultiplier;
|
||||||
|
int32_t minRangedDamage;
|
||||||
|
int32_t maxRangedDamage;
|
||||||
|
int32_t powerCostModifier[7];
|
||||||
|
int32_t powerCostMultiplier[7];
|
||||||
|
int32_t maxHealthModifier;
|
||||||
|
int32_t hoverHeight;
|
||||||
|
int32_t pad4;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGUnit {
|
class CGUnit {
|
||||||
public:
|
public:
|
||||||
// Public static functions
|
// Public static functions
|
||||||
|
static uint32_t GetBaseOffset();
|
||||||
|
static uint32_t GetBaseOffsetSaved();
|
||||||
|
static uint32_t GetDataSize();
|
||||||
|
static uint32_t GetDataSizeSaved();
|
||||||
static uint32_t TotalFields();
|
static uint32_t TotalFields();
|
||||||
static uint32_t TotalFieldsSaved();
|
static uint32_t TotalFieldsSaved();
|
||||||
|
|
||||||
|
// Public member variables
|
||||||
|
CGUnitData* m_unit;
|
||||||
|
uint32_t* m_unitSaved;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -88,3 +88,10 @@ const char* CGUnit_C::GetDisplayRaceNameFromRecord(const ChrRacesRec* raceRec, U
|
|||||||
|
|
||||||
return raceRec->m_name;
|
return raceRec->m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CGUnit_C::SetStorage(uint32_t* storage, uint32_t* saved) {
|
||||||
|
this->CGObject_C::SetStorage(storage, saved);
|
||||||
|
|
||||||
|
this->m_unit = reinterpret_cast<CGUnitData*>(&storage[CGUnit::GetBaseOffset()]);
|
||||||
|
this->m_unitSaved = &saved[CGUnit::GetBaseOffsetSaved()];
|
||||||
|
}
|
||||||
|
|||||||
@ -13,6 +13,9 @@ class CGUnit_C : public CGObject_C, public CGUnit {
|
|||||||
// Public static functions
|
// Public static functions
|
||||||
static const char* GetDisplayClassNameFromRecord(const ChrClassesRec* classRec, UNIT_SEX sex, UNIT_SEX* displaySex);
|
static const char* GetDisplayClassNameFromRecord(const ChrClassesRec* classRec, UNIT_SEX sex, UNIT_SEX* displaySex);
|
||||||
static const char* GetDisplayRaceNameFromRecord(const ChrRacesRec* raceRec, UNIT_SEX sex, UNIT_SEX* displaySex);
|
static const char* GetDisplayRaceNameFromRecord(const ChrRacesRec* raceRec, UNIT_SEX sex, UNIT_SEX* displaySex);
|
||||||
|
|
||||||
|
// Public member functions
|
||||||
|
void SetStorage(uint32_t* storage, uint32_t* saved);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -26,14 +26,14 @@ static ClntObjMgr* s_curMgr;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static uint32_t s_objTotalSize[] = {
|
static uint32_t s_objTotalSize[] = {
|
||||||
static_cast<uint32_t>(sizeof(CGObject_C) + sizeof(CGObjectData) + (sizeof(uint32_t) * CGObject::TotalFieldsSaved())),
|
static_cast<uint32_t>(sizeof(CGObject_C) + CGObject::GetDataSize() + CGObject::GetDataSizeSaved()),
|
||||||
static_cast<uint32_t>(sizeof(CGItem_C) + sizeof(CGItemData) + (sizeof(uint32_t) * CGItem::TotalFieldsSaved())),
|
static_cast<uint32_t>(sizeof(CGItem_C) + CGItem::GetDataSize() + CGItem::GetDataSizeSaved()),
|
||||||
static_cast<uint32_t>(sizeof(CGContainer_C) + sizeof(CGContainerData) + (sizeof(uint32_t) * CGContainer::TotalFieldsSaved())),
|
static_cast<uint32_t>(sizeof(CGContainer_C) + CGContainer::GetDataSize() + CGContainer::GetDataSizeSaved()),
|
||||||
static_cast<uint32_t>(sizeof(CGUnit_C) + sizeof(CGUnitData) + (sizeof(uint32_t) * CGUnit::TotalFieldsSaved())),
|
static_cast<uint32_t>(sizeof(CGUnit_C) + CGUnit::GetDataSize() + CGUnit::GetDataSizeSaved()),
|
||||||
static_cast<uint32_t>(sizeof(CGPlayer_C) + sizeof(CGPlayerData) + (sizeof(uint32_t) * CGPlayer::TotalRemoteFieldsSaved())),
|
static_cast<uint32_t>(sizeof(CGPlayer_C) + CGPlayer::GetRemoteDataSize() + CGPlayer::GetRemoteDataSizeSaved()),
|
||||||
static_cast<uint32_t>(sizeof(CGGameObject_C) + sizeof(CGGameObjectData) + (sizeof(uint32_t) * CGGameObject::TotalFieldsSaved())),
|
static_cast<uint32_t>(sizeof(CGGameObject_C) + CGGameObject::GetDataSize() + CGGameObject::GetDataSizeSaved()),
|
||||||
static_cast<uint32_t>(sizeof(CGDynamicObject_C) + sizeof(CGDynamicObjectData) + (sizeof(uint32_t) * CGDynamicObject::TotalFieldsSaved())),
|
static_cast<uint32_t>(sizeof(CGDynamicObject_C) + CGDynamicObject::GetDataSize() + CGDynamicObject::GetDataSizeSaved()),
|
||||||
static_cast<uint32_t>(sizeof(CGCorpse_C) + sizeof(CGCorpseData) + (sizeof(uint32_t) * CGCorpse::TotalFieldsSaved())),
|
static_cast<uint32_t>(sizeof(CGCorpse_C) + CGCorpse::GetDataSize() + CGCorpse::GetDataSizeSaved()),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char* s_objNames[] = {
|
static const char* s_objNames[] = {
|
||||||
@ -71,7 +71,7 @@ void* ClntObjMgrAllocObject(OBJECT_TYPE_ID typeID, uint64_t guid) {
|
|||||||
|
|
||||||
// Heap allocate player object for current player
|
// Heap allocate player object for current player
|
||||||
if (guid == playerGUID) {
|
if (guid == playerGUID) {
|
||||||
return STORM_ALLOC(sizeof(CGPlayer_C) + sizeof(CGPlayerData) + (sizeof(uint32_t) * CGPlayer::TotalFieldsSaved()));
|
return STORM_ALLOC(sizeof(CGPlayer_C) + CGPlayer::GetDataSize() + CGPlayer::GetDataSizeSaved());
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO GarbageCollect(typeID, 10000);
|
// TODO GarbageCollect(typeID, 10000);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user