F4MP/codigos originales/tiltedcode/Code/server/Services/CharacterService.h

88 lines
4.1 KiB
C
Raw Normal View History

#pragma once
#include <Events/PacketEvent.h>
#include <Structs/ActorData.h>
struct UpdateEvent;
struct CharacterInteriorCellChangeEvent;
struct CharacterSpawnedEvent;
struct World;
struct AssignCharacterRequest;
struct CharacterSpawnRequest;
struct ClientReferencesMoveRequest;
struct RequestFactionsChanges;
struct GridCellCoords;
struct RequestOwnershipTransfer;
struct CharacterRemoveEvent;
struct CharacterExteriorCellChangeEvent;
struct RequestOwnershipClaim;
struct OwnershipTransferEvent;
struct MountRequest;
struct NewPackageRequest;
struct RequestRespawn;
struct SyncExperienceRequest;
struct DialogueRequest;
struct SubtitleRequest;
/**
* @brief Manages player and actor state.
*/
struct CharacterService
{
CharacterService(World& aWorld, entt::dispatcher& aDispatcher) noexcept;
~CharacterService() noexcept = default;
TP_NOCOPYMOVE(CharacterService);
static void Serialize(World& aRegistry, entt::entity aEntity, CharacterSpawnRequest* apSpawnRequest) noexcept;
protected:
void OnUpdate(const UpdateEvent& acEvent) const noexcept;
void OnCharacterExteriorCellChange(const CharacterExteriorCellChangeEvent& acEvent) const noexcept;
void OnCharacterInteriorCellChange(const CharacterInteriorCellChangeEvent& acEvent) const noexcept;
void OnAssignCharacterRequest(const PacketEvent<AssignCharacterRequest>& acMessage) const noexcept;
void OnOwnershipTransferRequest(const PacketEvent<RequestOwnershipTransfer>& acMessage) const noexcept;
void OnOwnershipTransferEvent(const OwnershipTransferEvent& acEvent) const noexcept;
void OnOwnershipClaimRequest(const PacketEvent<RequestOwnershipClaim>& acMessage) const noexcept;
void OnCharacterRemoveEvent(const CharacterRemoveEvent& acEvent) const noexcept;
void OnCharacterSpawned(const CharacterSpawnedEvent& acEvent) const noexcept;
void OnReferencesMoveRequest(const PacketEvent<ClientReferencesMoveRequest>& acMessage) const noexcept;
void OnFactionsChanges(const PacketEvent<RequestFactionsChanges>& acMessage) const noexcept;
void OnMountRequest(const PacketEvent<MountRequest>& acMessage) const noexcept;
void OnNewPackageRequest(const PacketEvent<NewPackageRequest>& acMessage) const noexcept;
void OnRequestRespawn(const PacketEvent<RequestRespawn>& acMessage) const noexcept;
void OnSyncExperienceRequest(const PacketEvent<SyncExperienceRequest>& acMessage) const noexcept;
void OnDialogueRequest(const PacketEvent<DialogueRequest>& acMessage) const noexcept;
void OnSubtitleRequest(const PacketEvent<SubtitleRequest>& acMessage) const noexcept;
void CreateCharacter(const PacketEvent<AssignCharacterRequest>& acMessage) const noexcept;
void TransferOwnership(Player* apPlayer, const uint32_t acServerId, const ActorData& acActorData) const noexcept;
ActorData BuildActorData(const entt::entity acEntity) const noexcept;
void ApplyActorData(const entt::entity acEntity, const ActorData& acActorData) const noexcept;
void BroadcastActorData(Player* apPlayer, const entt::entity acEntity, const ActorData& acActorData) const noexcept;
void ProcessFactionsChanges() const noexcept;
void ProcessMovementChanges() const noexcept;
private:
World& m_world;
entt::scoped_connection m_updateConnection;
entt::scoped_connection m_exteriorCellChangeEventConnection;
entt::scoped_connection m_interiorCellChangeEventConnection;
entt::scoped_connection m_characterAssignRequestConnection;
entt::scoped_connection m_transferOwnershipConnection;
entt::scoped_connection m_ownershipTransferEventConnection;
entt::scoped_connection m_claimOwnershipConnection;
entt::scoped_connection m_removeCharacterConnection;
entt::scoped_connection m_characterSpawnedConnection;
entt::scoped_connection m_referenceMovementSnapshotConnection;
entt::scoped_connection m_factionsChangesConnection;
entt::scoped_connection m_mountConnection;
entt::scoped_connection m_newPackageConnection;
entt::scoped_connection m_requestRespawnConnection;
entt::scoped_connection m_syncExperienceConnection;
entt::scoped_connection m_dialogueConnection;
entt::scoped_connection m_subtitleConnection;
};