mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-15 08:17:13 +00:00
refactor(entity): each component type has an allocator, as the client
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>
This commit is contained in:
@@ -26,6 +26,8 @@
|
||||
#include "CDSkillBehaviorTable.h"
|
||||
#include "ServiceType.h"
|
||||
#include "MessageType/Client.h"
|
||||
#include "Entity.h"
|
||||
#include "ObjectLoadState.h"
|
||||
|
||||
ProjectileSyncEntry::ProjectileSyncEntry() {
|
||||
}
|
||||
@@ -565,3 +567,10 @@ void SkillComponent::Serialize(RakNet::BitStream& outBitStream, bool bIsInitialU
|
||||
uint32_t SkillComponent::GetUniqueSkillId() {
|
||||
return ++this->m_skillUid;
|
||||
}
|
||||
|
||||
void SkillComponent::Allocator(Entity& entity, ObjectLoadState& state) {
|
||||
const auto skillID = state.GetComponentID(eReplicaComponentType::SKILL, -1);
|
||||
if (skillID > -1 || entity.GetCharacter()) {
|
||||
entity.AddComponent<SkillComponent>(skillID);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user