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>
40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
#ifndef __COLLECTIBLECOMPONENT__H__
|
|
#define __COLLECTIBLECOMPONENT__H__
|
|
|
|
#include "Component.h"
|
|
#include "eReplicaComponentType.h"
|
|
|
|
struct ObjectLoadState;
|
|
|
|
class CollectibleComponent final : public Component {
|
|
public:
|
|
static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::COLLECTIBLE;
|
|
|
|
// The client's allocator for this type (ObjectLoader2::DoObjectComponentLoad calls it in load order)
|
|
static void Allocator(Entity& entity, ObjectLoadState& state);
|
|
CollectibleComponent(Entity* parentEntity, const int32_t componentID, const int32_t collectibleId);
|
|
|
|
void LoadDataFromTemplate() override;
|
|
|
|
int16_t GetCollectibleId() const { return m_CollectibleId; }
|
|
void Serialize(RakNet::BitStream& outBitStream, bool isConstruction) override;
|
|
|
|
bool MsgGetObjectReportInfo(GameMessages::GetObjectReportInfo& reportInfo);
|
|
|
|
/**
|
|
* Whether a player's collecting it counts. The server-only CollectibleComponent.requirement_mission names the
|
|
* mission the collectible belongs to: when that is a mission to accept (Missions.isMission, not an achievement,
|
|
* which is always open), the collectible only counts while the player has it accepted and not handed in.
|
|
*/
|
|
bool CountsFor(const Entity& player) const;
|
|
|
|
int32_t GetRequirementMission() const { return m_RequirementMission; }
|
|
private:
|
|
int16_t m_CollectibleId = 0;
|
|
|
|
// CollectibleComponent.requirement_mission, -1 for none
|
|
int32_t m_RequirementMission = -1;
|
|
};
|
|
|
|
#endif //!__COLLECTIBLECOMPONENT__H__
|