1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-25 02:57:45 +00:00

Merge branch 'party_crap' of https://github.com/takhlaq/Sapphire into party_crap

This commit is contained in:
Maru 2017-12-06 21:03:27 -02:00
commit eec2809b19
8 changed files with 151 additions and 15 deletions

View file

@ -0,0 +1,10 @@
#include <cassert>
#include <boost/shared_ptr.hpp>
#include <Server_Common/Network/PacketDef/Ipcs.h>
#include <Server_Common/Network/PacketDef/Zone/ServerZoneDef.h>
#include <Server_Zone/Actor/Actor.h>
#include <Server_Zone/Actor/Player.h>
#include <Server_Zone/ServerZone.h>
#include <Server_Common/Network/GamePacketNew.h>
#include "FriendList.h"

View file

@ -0,0 +1,81 @@
#ifndef _FRIENDLIST_H
#define _FRIENDLIST_H
#include <src/servers/Server_Common/Common.h>
#include <Server_Common/Forwards.h>
#include <Server_Zone/Actor/Group/Group.h>
#include <Server_Zone/Forwards.h>
#include <boost/enable_shared_from_this.hpp>
#include <set>
#include <cstdint>
#include <map>
namespace Core {
namespace Entity {
namespace Group {
class FriendList;
using FriendListPtr = boost::shared_ptr< FriendList >;
struct GroupMember
{
uint64_t contentId;
char name[32];
uint32_t category;
uint64_t inviterId;
};
enum class GroupType : uint8_t
{
None,
Party,
FriendList,
FreeCompany,
Linkshell,
FreeCompanyPetition,
Blacklist,
ContentGroup
};
class FriendList : public Group
{
private:
GroupType m_type{ GroupType::FriendList };
uint64_t m_id{ 0 };
uint64_t m_ownerId{ 0 };
uint32_t m_maxCapacity{ 200 };
uint32_t m_maxRoles{ 8 };
time_point m_createTime{ std::chrono::steady_clock::now() };
std::map< uint64_t, GroupMember > m_members;
std::map< uint64_t, uint64_t > m_invites; // <recipient, sender>
virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false );
virtual void load();
virtual void update();
virtual void disband();
public:
FriendList( uint64_t id, uint64_t ownerId, uint32_t maxCapacity, time_point createTime ) :
m_id( id ), m_ownerId( m_ownerId ), m_maxCapacity( maxCapacity ), m_createTime( createTime ){};
~FriendList(){};
bool isParty() const;
bool isFriendList() const;
bool isFreeCompany() const;
bool isLinkshell() const;
bool isFreeCompanyPetition() const;
bool isBlacklist() const;
bool isContentGroup() const;
};
}
}
};
#endif // ! _FRIENDLIST_H

View file

@ -1,6 +1,7 @@
#include <cassert> #include <cassert>
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <Server_Zone/Session.h>
#include <Server_Common/Network/PacketDef/Ipcs.h> #include <Server_Common/Network/PacketDef/Ipcs.h>
#include <Server_Common/Network/PacketDef/Zone/ServerZoneDef.h> #include <Server_Common/Network/PacketDef/Zone/ServerZoneDef.h>
#include <Server_Zone/Actor/Actor.h> #include <Server_Zone/Actor/Actor.h>
@ -9,6 +10,8 @@
#include <Server_Common/Network/GamePacketNew.h> #include <Server_Common/Network/GamePacketNew.h>
#include "Group.h" #include "Group.h"
extern Core::ServerZone g_serverZone;
// todo: i fuckin have no fuckin clue how to use group manager classes, why not just have a map of <id, group>? // todo: i fuckin have no fuckin clue how to use group manager classes, why not just have a map of <id, group>?
// todo: invite map in g_serverZone.getGroupMgr(GroupType) and look up // todo: invite map in g_serverZone.getGroupMgr(GroupType) and look up
@ -46,7 +49,7 @@ Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( Pla
GroupMember member; GroupMember member;
member.inviterId = senderId; member.inviterId = senderId;
member.role = 0; member.role = 0;
member.pPlayer = pRecipient; member.contentId = recipientId;
m_members.emplace( recipientId, member ); m_members.emplace( recipientId, member );
} }
else else
@ -59,14 +62,12 @@ Core::Network::Packets::GamePacketPtr Core::Entity::Group::Group::addMember( Pla
void Core::Entity::Group::Group::sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo ) void Core::Entity::Group::Group::sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo )
{ {
assert( pPacket ); assert( pPacket );
if( pPacket ) for( const auto& member : m_members )
{ {
for( const auto& member : m_members ) auto pSession = g_serverZone.getSession( member.second.name );
if( pSession )
{ {
if( member.second.pPlayer ) pSession->getPlayer()->queuePacket( pPacket );
{
member.second.pPlayer->queuePacket( pPacket );
}
} }
} }
} }

View file

@ -19,7 +19,8 @@ using GroupPtr = boost::shared_ptr< Group >;
struct GroupMember struct GroupMember
{ {
uint64_t inviterId; uint64_t inviterId;
PlayerPtr pPlayer; uint64_t contentId;
std::string name;
uint32_t role; uint32_t role;
}; };
@ -49,11 +50,7 @@ private:
std::map< uint64_t, uint64_t > m_invites; // <recipient, sender> std::map< uint64_t, uint64_t > m_invites; // <recipient, sender>
virtual Core::Network::Packets::GamePacketPtr addMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
virtual Core::Network::Packets::GamePacketPtr inviteMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
virtual Core::Network::Packets::GamePacketPtr removeMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
virtual Core::Network::Packets::GamePacketPtr kickMember( PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0 );
virtual void sendPacketToMembers( Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false );
virtual void load(); virtual void load();
virtual void update(); virtual void update();
@ -70,6 +67,12 @@ public:
bool isFreeCompanyPetition() const; bool isFreeCompanyPetition() const;
bool isBlacklist() const; bool isBlacklist() const;
bool isContentGroup() const; bool isContentGroup() const;
virtual Core::Network::Packets::GamePacketPtr addMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0);
virtual Core::Network::Packets::GamePacketPtr inviteMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0);
virtual Core::Network::Packets::GamePacketPtr removeMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0);
virtual Core::Network::Packets::GamePacketPtr kickMember(PlayerPtr pSender, PlayerPtr pRecipient, uint64_t senderId = 0, uint64_t recipientId = 0);
virtual void sendPacketToMembers(Core::Network::Packets::GamePacketPtr pPacket, bool invitesToo = false);
}; };
} }

View file

@ -0,0 +1,2 @@
#include "../FriendList.h"
#include "FriendListMgr.h"

View file

@ -0,0 +1,39 @@
#ifndef _FRIENDLISTMGR_H
#define _FRIENDLISTMGR_H
#include <map>
#include <cstdint>
#include <boost/enable_shared_from_this.hpp>
#include <Server_Zone/Forwards.h>
#include <Server_Zone/Actor/Group/Group.h>
#include <Server_Zone/Actor/Group/Manager/GroupMgr.h>
namespace Core {
namespace Entity {
namespace Group {
class FriendListMgr : public GroupMgr
{
private:
GroupType m_type{ GroupType::None };
uint64_t m_groupCount{ 0 };
uint32_t m_maxEntries{ 0xFFFFFFFF };
std::map< uint64_t, GroupPtr > m_groups; // < groupid, groupPtr >
std::map< uint64_t, uint64_t > m_invites; // < recipient, groupid >
virtual GroupPtr createGroup( PlayerPtr pOwner ) = 0;
public:
FriendListMgr( GroupType type, uint32_t maxEntries ) :
m_type( type ), m_maxEntries( maxEntries ){};
~FriendListMgr(){};
GroupPtr findGroupByInviteIdForPlayer( uint64_t playerId ) const;
GroupPtr findGroupById( uint64_t groupId ) const;
};
}
}
};
#endif /* ! _FRIENDLISTMGR_H */

View file

@ -32,7 +32,7 @@ private:
friend virtual void load(); friend virtual void load();
friend virtual void update(); friend virtual void update();
friend virtual void disband(); friend virtual void disband();
//*/ */
public: public:
GroupMgr( GroupType type, uint32_t maxEntries ) : GroupMgr( GroupType type, uint32_t maxEntries ) :
m_type( type ), m_maxEntries( maxEntries ){}; m_type( type ), m_maxEntries( maxEntries ){};

View file

@ -429,7 +429,7 @@ void Core::Network::GameConnection::finishLoadingHandler( const Packets::GamePac
void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket& inPacket, void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer ) Entity::PlayerPtr pPlayer )
{ {
uint8_t type = inPacket.getValAt< uint8_t >( 0x2A ); uint8_t type = inPacket.getValAt< uint8_t >( 0x2A );
uint8_t count = inPacket.getValAt< uint8_t >( 0x2B ); uint8_t count = inPacket.getValAt< uint8_t >( 0x2B );