2017-11-21 13:20:43 +00:00
|
|
|
#ifndef _GROUP_H
|
|
|
|
#define _GROUP_H
|
|
|
|
|
2018-01-25 15:32:33 -02:00
|
|
|
#include <common/Common.h>
|
|
|
|
#include <common/Network/PacketDef/Zone/ServerZoneDef.h>
|
|
|
|
#include <common/Forwards.h>
|
|
|
|
#include <sapphire_zone/Forwards.h>
|
2017-11-21 13:20:43 +00:00
|
|
|
#include <boost/enable_shared_from_this.hpp>
|
|
|
|
#include <set>
|
|
|
|
#include <cstdint>
|
|
|
|
#include <map>
|
|
|
|
|
|
|
|
namespace Core {
|
2017-12-07 17:28:55 -02:00
|
|
|
namespace Social {
|
2017-11-21 13:20:43 +00:00
|
|
|
|
2017-11-21 17:01:05 +00:00
|
|
|
class Group;
|
|
|
|
using GroupPtr = boost::shared_ptr< Group >;
|
|
|
|
|
2017-11-21 13:20:43 +00:00
|
|
|
struct GroupMember
|
|
|
|
{
|
|
|
|
uint64_t inviterId;
|
2017-12-07 04:15:20 -02:00
|
|
|
uint64_t contentId; // todo: maybe just use id..
|
2017-12-06 18:55:57 -02:00
|
|
|
std::string name;
|
2017-11-21 13:20:43 +00:00
|
|
|
uint32_t role;
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class GroupType : uint8_t
|
|
|
|
{
|
|
|
|
None,
|
|
|
|
Party,
|
2017-11-21 17:01:05 +00:00
|
|
|
FriendList,
|
2017-11-21 13:20:43 +00:00
|
|
|
FreeCompany,
|
|
|
|
Linkshell,
|
|
|
|
FreeCompanyPetition,
|
|
|
|
Blacklist,
|
|
|
|
ContentGroup
|
|
|
|
};
|
|
|
|
|
|
|
|
class Group : public boost::enable_shared_from_this< Group >
|
|
|
|
{
|
2017-12-07 04:15:20 -02:00
|
|
|
public:
|
2017-12-19 03:42:04 -02:00
|
|
|
Group( uint64_t id, uint64_t ownerId ) :
|
|
|
|
m_id( id ), m_ownerId( m_ownerId ) {};
|
2017-12-07 04:15:20 -02:00
|
|
|
|
|
|
|
bool isParty() const;
|
|
|
|
bool isFriendList() const;
|
|
|
|
bool isFreeCompany() const;
|
|
|
|
bool isLinkshell() const;
|
|
|
|
bool isFreeCompanyPetition() const;
|
|
|
|
bool isBlacklist() const;
|
|
|
|
bool isContentGroup() const;
|
|
|
|
|
2017-12-25 02:13:54 -02:00
|
|
|
virtual Core::Network::Packets::GamePacketPtr addMember( Entity::PlayerPtr pSender, Entity::PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
|
2017-12-19 03:42:04 -02:00
|
|
|
|
2017-12-25 02:13:54 -02:00
|
|
|
virtual Core::Network::Packets::GamePacketPtr inviteMember( Entity::PlayerPtr pSender, Entity::PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
|
|
|
|
virtual Core::Network::Packets::GamePacketPtr removeMember( Entity::PlayerPtr pSender, Entity::PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
|
2017-12-19 03:42:04 -02:00
|
|
|
//virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
|
2017-12-07 04:15:20 -02:00
|
|
|
virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false );
|
|
|
|
|
|
|
|
/*! generates a player entry used for lists (social, etc) */
|
2017-12-07 13:17:15 -02:00
|
|
|
static Core::Network::Packets::Server::PlayerEntry generatePlayerEntry( GroupMember groupMember );
|
|
|
|
|
|
|
|
/*! access GroupMember vector */
|
|
|
|
|
|
|
|
std::map< uint64_t, GroupMember > getMembers() const;
|
2017-12-07 04:15:20 -02:00
|
|
|
|
|
|
|
/*! get container limit */
|
|
|
|
uint32_t getCapacity() const;
|
|
|
|
|
2017-12-19 03:42:04 -02:00
|
|
|
protected:
|
2017-11-21 13:20:43 +00:00
|
|
|
GroupType m_type{ GroupType::None };
|
|
|
|
uint64_t m_id{ 0 };
|
|
|
|
uint64_t m_ownerId{ 0 };
|
|
|
|
uint32_t m_maxCapacity{ 250 };
|
|
|
|
uint32_t m_maxRoles{ 50 };
|
|
|
|
time_point m_createTime{ std::chrono::steady_clock::now() };
|
|
|
|
std::map< uint64_t, GroupMember > m_members;
|
2017-12-19 03:42:04 -02:00
|
|
|
std::map< uint64_t, GroupMember > m_invites; // <recipient, groupmember (which contains senderId)>
|
2017-12-07 04:15:20 -02:00
|
|
|
|
2017-12-19 03:42:04 -02:00
|
|
|
private:
|
|
|
|
|
2017-11-21 13:20:43 +00:00
|
|
|
|
2017-12-07 17:50:54 -02:00
|
|
|
/*virtual void load();
|
2017-11-21 17:01:05 +00:00
|
|
|
virtual void update();
|
2017-12-07 17:50:54 -02:00
|
|
|
virtual void disband();*/
|
2017-12-06 18:55:57 -02:00
|
|
|
|
2017-11-21 13:20:43 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
#endif // ! _GROUP_H
|