mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-15 16:27:14 +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>
33 lines
959 B
C++
33 lines
959 B
C++
#ifndef __ACHIEVEMENTVENDORCOMPONENT__H__
|
|
#define __ACHIEVEMENTVENDORCOMPONENT__H__
|
|
|
|
#include "BaseVendorComponent.h"
|
|
#include "eReplicaComponentType.h"
|
|
#include <set>
|
|
#include <map>
|
|
|
|
struct ObjectLoadState;
|
|
|
|
class Entity;
|
|
|
|
class AchievementVendorComponent final : public BaseVendorComponent {
|
|
public:
|
|
static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::ACHIEVEMENT_VENDOR;
|
|
|
|
// The client's allocator for this type (ObjectLoader2::DoObjectComponentLoad calls it in load order)
|
|
static void Allocator(Entity& entity, ObjectLoadState& state);
|
|
AchievementVendorComponent(Entity* parent, const int32_t componentID);
|
|
|
|
void LoadDataFromTemplate() override;
|
|
|
|
void RefreshInventory(bool isCreation = false) override;
|
|
bool SellsItem(Entity* buyer, const LOT lot);
|
|
void Buy(Entity* buyer, LOT lot, uint32_t count);
|
|
|
|
private:
|
|
std::map<LWOOBJID,std::set<LOT>> m_PlayerPurchasableItems;
|
|
};
|
|
|
|
|
|
#endif //!__ACHIEVEMENTVENDORCOMPONENT__H__
|