mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-14 07:47:13 +00:00
DoObjectComponentLoad walks the client's load order and calls the type's allocator from a table, like ObjectLoader2, instead of one 76-case switch. Components with rules of their own have a static Allocator (the client's LWOxComponent::Allocator); the rest share a registry allocator. The load state moves to ObjectLoadState.h so the allocators can take it. Construction bytes are identical for all 15,962 LOTs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
37 lines
1.2 KiB
C++
37 lines
1.2 KiB
C++
#ifndef BBBCOMPONENT_H
|
|
#define BBBCOMPONENT_H
|
|
|
|
#include "BitStream.h"
|
|
#include "Component.h"
|
|
#include "dCommonVars.h"
|
|
#include "eReplicaComponentType.h"
|
|
|
|
struct ObjectLoadState;
|
|
|
|
/**
|
|
* The BBB component (76), as the client's LWOBBBComponent: DoObjectPreLoad gives every character one (and the registry
|
|
* any object listing it). It sends whether there is a metadata source item, then the item's ID.
|
|
*/
|
|
class BBBComponent final : public Component {
|
|
public:
|
|
static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::BBB;
|
|
|
|
// The client's allocator for this type (ObjectLoader2::DoObjectComponentLoad calls it in load order)
|
|
static void Allocator(Entity& entity, ObjectLoadState& state);
|
|
|
|
BBBComponent(Entity* parent, const int32_t componentID) : Component(parent, componentID) {}
|
|
|
|
// LWOBBBComponent::Deserialize 0x00bd6690
|
|
void Serialize(RakNet::BitStream& outBitStream, bool bIsInitialUpdate) override {
|
|
outBitStream.Write(m_MetadataSourceItem != LWOOBJID_EMPTY);
|
|
if (m_MetadataSourceItem != LWOOBJID_EMPTY) outBitStream.Write(m_MetadataSourceItem);
|
|
}
|
|
|
|
void SetMetadataSourceItem(const LWOOBJID item) { m_MetadataSourceItem = item; }
|
|
|
|
private:
|
|
LWOOBJID m_MetadataSourceItem = LWOOBJID_EMPTY;
|
|
};
|
|
|
|
#endif // BBBCOMPONENT_H
|