mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-27 22:57:45 +00:00
Added leader modification functions for linkshells
This commit is contained in:
parent
755aeedf60
commit
001e0c2e5c
5 changed files with 137 additions and 1 deletions
|
@ -373,4 +373,82 @@ void LinkshellMgr::joinLinkshell( uint64_t lsId, uint64_t characterId )
|
|||
chatChannelMgr.addPlayerToChannel( lsPtr->getChatChannel(), *joiningPlayer );
|
||||
|
||||
sendLinkshellList( *joiningPlayer );
|
||||
}
|
||||
}
|
||||
|
||||
void LinkshellMgr::addLeader( Sapphire::Entity::Player &sourcePlayer, Sapphire::Entity::Player &newLeaderPlayer, uint64_t linkshellId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto lsPtr = getLinkshellById( linkshellId );
|
||||
|
||||
if( !lsPtr )
|
||||
return Logger::warn( "Failed to promote player from linkshell - linkshell not found!" );
|
||||
|
||||
lsPtr->addLeader( newLeaderPlayer.getCharacterId() );
|
||||
writeLinkshell( lsPtr->getId() );
|
||||
sendLinkshellList( newLeaderPlayer );
|
||||
|
||||
auto linkshellResult = makeLinkshellResult( newLeaderPlayer, 0, 0,
|
||||
WorldPackets::Client::LinkshellAddLeader, 0,
|
||||
LinkshellResultPacket::UpdateStatus::Target,
|
||||
lsPtr->getName(), sourcePlayer.getName() );
|
||||
|
||||
server.queueForPlayer( newLeaderPlayer.getCharacterId(), linkshellResult );
|
||||
|
||||
auto linkshellResult1 = makeLinkshellResult( sourcePlayer, 0, 0,
|
||||
WorldPackets::Client::LinkshellAddLeader, 0,
|
||||
LinkshellResultPacket::UpdateStatus::Execute,
|
||||
lsPtr->getName(), newLeaderPlayer.getName() );
|
||||
|
||||
server.queueForPlayer( sourcePlayer.getCharacterId(), linkshellResult1 );
|
||||
}
|
||||
|
||||
void LinkshellMgr::declineLeader( Sapphire::Entity::Player &sourcePlayer, uint64_t linkshellId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto lsPtr = getLinkshellById( linkshellId );
|
||||
|
||||
if( !lsPtr )
|
||||
return Logger::warn( "Failed to decline leader from linkshell - linkshell not found!" );
|
||||
|
||||
lsPtr->removeLeader( sourcePlayer.getCharacterId() );
|
||||
writeLinkshell( lsPtr->getId() );
|
||||
sendLinkshellList( sourcePlayer );
|
||||
|
||||
auto linkshellResult = makeLinkshellResult( sourcePlayer, 0, 0,
|
||||
WorldPackets::Client::LinkshellDeclineLeader, 0,
|
||||
LinkshellResultPacket::UpdateStatus::Execute,
|
||||
lsPtr->getName(), sourcePlayer.getName() );
|
||||
|
||||
server.queueForPlayer( sourcePlayer.getCharacterId(), linkshellResult );
|
||||
|
||||
}
|
||||
|
||||
void LinkshellMgr::removeLeader( Sapphire::Entity::Player &sourcePlayer, Sapphire::Entity::Player &leaderPlayer, uint64_t linkshellId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto lsPtr = getLinkshellById( linkshellId );
|
||||
|
||||
if( !lsPtr )
|
||||
return Logger::warn( "Failed to remove leader from linkshell - linkshell not found!" );
|
||||
|
||||
lsPtr->removeLeader( leaderPlayer.getCharacterId() );
|
||||
writeLinkshell( lsPtr->getId() );
|
||||
sendLinkshellList( leaderPlayer );
|
||||
|
||||
auto linkshellResult = makeLinkshellResult( leaderPlayer, 0, 0,
|
||||
WorldPackets::Client::LinkshellRemoveLeader, 0,
|
||||
LinkshellResultPacket::UpdateStatus::Target,
|
||||
lsPtr->getName(), sourcePlayer.getName() );
|
||||
|
||||
server.queueForPlayer( leaderPlayer.getCharacterId(), linkshellResult );
|
||||
|
||||
auto linkshellResult1 = makeLinkshellResult( sourcePlayer, 0, 0,
|
||||
WorldPackets::Client::LinkshellRemoveLeader, 0,
|
||||
LinkshellResultPacket::UpdateStatus::Execute,
|
||||
lsPtr->getName(), leaderPlayer.getName() );
|
||||
|
||||
server.queueForPlayer( sourcePlayer.getCharacterId(), linkshellResult1 );
|
||||
}
|
||||
|
|
|
@ -41,6 +41,10 @@ namespace Sapphire::World::Manager
|
|||
void invitePlayer( Entity::Player& sourcePlayer, Entity::Player& invitedPlayer, uint64_t linkshellId );
|
||||
void kickPlayer( Entity::Player& sourcePlayer, Entity::Player& kickedPlayer, uint64_t linkshellId );
|
||||
|
||||
void addLeader( Entity::Player& sourcePlayer, Entity::Player& newLeaderPlayer, uint64_t linkshellId );
|
||||
void removeLeader( Entity::Player& sourcePlayer, Entity::Player& leaderPlayer, uint64_t linkshellId );
|
||||
void declineLeader( Entity::Player& sourcePlayer, uint64_t linkshellId );
|
||||
|
||||
void sendLinkshellList( Entity::Player& player );
|
||||
|
||||
// get all linkshells associated with player
|
||||
|
|
|
@ -68,6 +68,10 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH
|
|||
setZoneHandler( LinkshellJoin, "LinkshellJoin", &GameConnection::linkshellJoinHandler );
|
||||
setZoneHandler( LinkshellKick, "LinkshellKick", &GameConnection::linkshellKickHandler );
|
||||
|
||||
setZoneHandler( LinkshellAddLeader, "LinkshellAddLeader", &GameConnection::linkshellAddLeaderHandler );
|
||||
setZoneHandler( LinkshellRemoveLeader, "LinkshellRemoveLeader", &GameConnection::linkshellRemoveLeaderHandler );
|
||||
setZoneHandler( LinkshellDeclineLeader, "LinkshellDeclineLeader", &GameConnection::linkshellDeclineLeaderHandler );
|
||||
|
||||
setZoneHandler( ReqExamineFcInfo, "ReqExamineFcInfo", &GameConnection::reqExamineFcInfo );
|
||||
setZoneHandler( ZoneJump, "ZoneJump", &GameConnection::zoneJumpHandler );
|
||||
setZoneHandler( Command, "Command", &GameConnection::commandHandler );
|
||||
|
|
|
@ -113,6 +113,10 @@ namespace Sapphire::Network
|
|||
DECLARE_HANDLER( linkshellListHandler );
|
||||
DECLARE_HANDLER( linkshellKickHandler );
|
||||
|
||||
DECLARE_HANDLER( linkshellAddLeaderHandler );
|
||||
DECLARE_HANDLER( linkshellRemoveLeaderHandler );
|
||||
DECLARE_HANDLER( linkshellDeclineLeaderHandler );
|
||||
|
||||
DECLARE_HANDLER( linkshellJoinHandler );
|
||||
|
||||
DECLARE_HANDLER( syncHandler );
|
||||
|
|
|
@ -43,6 +43,52 @@ void Sapphire::Network::GameConnection::linkshellKickHandler( const Packets::FFX
|
|||
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::linkshellAddLeaderHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsAddLeaderPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellAddLeader >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto playerPtr = server.getPlayer( lsAddLeaderPacket.data().MemberCharacterID );
|
||||
|
||||
if( !playerPtr )
|
||||
{
|
||||
Logger::error( std::string( __FUNCTION__ ) + " requested player \"{}\" not found!", lsAddLeaderPacket.data().MemberCharacterName );
|
||||
return;
|
||||
}
|
||||
|
||||
lsMgr.addLeader( player, *playerPtr, lsAddLeaderPacket.data().LinkshellID );
|
||||
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::linkshellRemoveLeaderHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsRemoveLeaderPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellRemoveLeader >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto playerPtr = server.getPlayer( lsRemoveLeaderPacket.data().MemberCharacterID );
|
||||
|
||||
if( !playerPtr )
|
||||
{
|
||||
Logger::error( std::string( __FUNCTION__ ) + " requested player \"{}\" not found!", lsRemoveLeaderPacket.data().MemberCharacterName );
|
||||
return;
|
||||
}
|
||||
|
||||
lsMgr.removeLeader( player, *playerPtr, lsRemoveLeaderPacket.data().LinkshellID );
|
||||
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::linkshellDeclineLeaderHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsDeclineLeaderPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellDeclineLeader >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
lsMgr.declineLeader( player, lsDeclineLeaderPacket.data().LinkshellID );
|
||||
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsJoinPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellJoin >( inPacket );
|
||||
|
|
Loading…
Add table
Reference in a new issue