mirror of
https://github.com/Jous99/F4MP.git
synced 2026-01-13 00:20:54 +01:00
73 lines
2.5 KiB
C
73 lines
2.5 KiB
C
|
|
#pragma once
|
||
|
|
|
||
|
|
#include <Events/PacketEvent.h>
|
||
|
|
|
||
|
|
struct World;
|
||
|
|
struct UpdateEvent;
|
||
|
|
struct PlayerJoinEvent;
|
||
|
|
struct PlayerLeaveEvent;
|
||
|
|
struct PartyInviteRequest;
|
||
|
|
struct PartyAcceptInviteRequest;
|
||
|
|
struct PartyLeaveRequest;
|
||
|
|
struct NotifyPartyInfo;
|
||
|
|
struct PartyCreateRequest;
|
||
|
|
struct PartyChangeLeaderRequest;
|
||
|
|
struct PartyKickRequest;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Manages every party in the server.
|
||
|
|
*/
|
||
|
|
struct PartyService
|
||
|
|
{
|
||
|
|
struct Party
|
||
|
|
{
|
||
|
|
uint32_t LeaderPlayerId;
|
||
|
|
Vector<Player*> Members;
|
||
|
|
GameId CachedWeather{};
|
||
|
|
};
|
||
|
|
|
||
|
|
PartyService(World& aWorld, entt::dispatcher& aDispatcher) noexcept;
|
||
|
|
~PartyService() noexcept = default;
|
||
|
|
|
||
|
|
TP_NOCOPYMOVE(PartyService);
|
||
|
|
|
||
|
|
const Party* GetById(uint32_t aId) const noexcept;
|
||
|
|
bool IsPlayerInParty(Player* const apPlayer) const noexcept;
|
||
|
|
bool IsPlayerLeader(Player* const apPlayer) noexcept;
|
||
|
|
Party* GetPlayerParty(Player* const apPlayer) noexcept;
|
||
|
|
|
||
|
|
protected:
|
||
|
|
void OnUpdate(const UpdateEvent& acEvent) noexcept;
|
||
|
|
void OnPlayerJoin(const PlayerJoinEvent& acEvent) noexcept;
|
||
|
|
void OnPlayerLeave(const PlayerLeaveEvent& acEvent) noexcept;
|
||
|
|
void OnPartyInvite(const PacketEvent<PartyInviteRequest>& acPacket) noexcept;
|
||
|
|
void OnPartyAcceptInvite(const PacketEvent<PartyAcceptInviteRequest>& acPacket) noexcept;
|
||
|
|
void OnPartyLeave(const PacketEvent<PartyLeaveRequest>& acPacket) noexcept;
|
||
|
|
void OnPartyCreate(const PacketEvent<PartyCreateRequest>& acPacket) noexcept;
|
||
|
|
void OnPartyChangeLeader(const PacketEvent<PartyChangeLeaderRequest>& acPacket) noexcept;
|
||
|
|
void OnPartyKick(const PacketEvent<PartyKickRequest>& acPacket) noexcept;
|
||
|
|
void RemovePlayerFromParty(Player* apPlayer) noexcept;
|
||
|
|
|
||
|
|
void BroadcastPlayerList(Player* apPlayer = nullptr) const noexcept;
|
||
|
|
void BroadcastPartyInfo(uint32_t aPartyId) const noexcept;
|
||
|
|
|
||
|
|
private:
|
||
|
|
World& m_world;
|
||
|
|
|
||
|
|
TiltedPhoques::Map<uint32_t, Party> m_parties;
|
||
|
|
uint32_t m_nextId{0};
|
||
|
|
uint64_t m_nextInvitationExpire{0};
|
||
|
|
|
||
|
|
entt::scoped_connection m_updateEvent;
|
||
|
|
entt::scoped_connection m_playerJoinConnection;
|
||
|
|
entt::scoped_connection m_playerLeaveConnection;
|
||
|
|
entt::scoped_connection m_partyInviteConnection;
|
||
|
|
entt::scoped_connection m_partyAcceptInviteConnection;
|
||
|
|
entt::scoped_connection m_partyLeaveConnection;
|
||
|
|
entt::scoped_connection m_partyCreateConnection;
|
||
|
|
entt::scoped_connection m_partyChangeLeaderConnection;
|
||
|
|
entt::scoped_connection m_partyKickConnection;
|
||
|
|
|
||
|
|
void SendPartyJoinedEvent(Party& aParty, Player* aPlayer) noexcept;
|
||
|
|
};
|