From 6a9f5b683fee50aba3d1a87e02f3e937af035d5c Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 9 Feb 2023 17:58:25 +0100 Subject: [PATCH] Fixed an issue with a missing lookup table update. Removed unneeded functions. --- src/world/FreeCompany/FreeCompany.cpp | 11 +++--- src/world/FreeCompany/FreeCompany.h | 4 -- src/world/Manager/FreeCompanyMgr.cpp | 56 ++++++++++++++++++++++----- src/world/Manager/FreeCompanyMgr.h | 2 + 4 files changed, 55 insertions(+), 18 deletions(-) diff --git a/src/world/FreeCompany/FreeCompany.cpp b/src/world/FreeCompany/FreeCompany.cpp index fdc3ede1..22e7fa70 100644 --- a/src/world/FreeCompany/FreeCompany.cpp +++ b/src/world/FreeCompany/FreeCompany.cpp @@ -203,11 +203,6 @@ std::set< uint64_t >& Sapphire::FreeCompany::getMemberIdList() return m_memberIds; } -void Sapphire::FreeCompany::addInvite( uint64_t memberId ) -{ - -} - void Sapphire::FreeCompany::addMember( uint64_t memberId, uint8_t hierarchyId, uint32_t lastLogout ) { FcMember member{ memberId, hierarchyId, lastLogout }; @@ -215,6 +210,12 @@ void Sapphire::FreeCompany::addMember( uint64_t memberId, uint8_t hierarchyId, u m_memberIds.insert( memberId ); } +void Sapphire::FreeCompany::removeMember( uint64_t memberId ) +{ + m_memberDetails.erase( memberId ); + m_memberIds.erase( memberId ); +} + void Sapphire::FreeCompany::setChatChannel( uint64_t chatChannelId ) { m_chatChannelId = chatChannelId; diff --git a/src/world/FreeCompany/FreeCompany.h b/src/world/FreeCompany/FreeCompany.h index 819fd0ca..d6d99eab 100644 --- a/src/world/FreeCompany/FreeCompany.h +++ b/src/world/FreeCompany/FreeCompany.h @@ -140,12 +140,8 @@ namespace Sapphire void setChatChannel( uint64_t chatChannelId ); void addMember( uint64_t memberId, uint8_t hierarchyId, uint32_t lastLogout ); - void removeMember( uint64_t memberId ); - void addInvite( uint64_t memberId ); - - void removeInvite( uint64_t memberId ); }; diff --git a/src/world/Manager/FreeCompanyMgr.cpp b/src/world/Manager/FreeCompanyMgr.cpp index 601e1c16..78b92f8e 100644 --- a/src/world/Manager/FreeCompanyMgr.cpp +++ b/src/world/Manager/FreeCompanyMgr.cpp @@ -249,26 +249,63 @@ void FreeCompanyMgr::onFcLogin( uint64_t characterId ) if( !fc ) return; - uint64_t onlinePlayers = 1; - auto fcResult = makeFcResult( *player, fc->getId(), onlinePlayers, - FreeCompanyResultPacket::ResultType::FcLogin, - 0, FreeCompanyResultPacket::UpdateStatus::Execute, - fc->getName(), fc->getTag() ); + m_onlinePlayers++; + auto fcResultSelf = makeFcResult( *player, fc->getId(), m_onlinePlayers, + FreeCompanyResultPacket::ResultType::FcLogin, + 0, FreeCompanyResultPacket::UpdateStatus::Execute, + fc->getName(), fc->getTag() ); - server.queueForPlayer( player->getCharacterId(), fcResult ); + server.queueForPlayer( player->getCharacterId(), fcResultSelf ); - // todo - send packet to rest of fc members + auto fcResultOthers = makeFcResult( *player, fc->getId(), m_onlinePlayers, + FreeCompanyResultPacket::ResultType::FcLogin, + 0, FreeCompanyResultPacket::UpdateStatus::Member, + fc->getName(), player->getName() ); + + server.queueForFreeCompany( fc->getId(), fcResultOthers, { characterId } ); +} + +void FreeCompanyMgr::onFcLogout( uint64_t characterId ) +{ + auto& server = Common::Service< World::WorldServer >::ref(); + auto player = server.getPlayer( characterId ); + if( !player ) + return; + + auto fc = getPlayerFreeCompany( player->getCharacterId() ); + if( !fc ) + return; + + m_onlinePlayers--; + auto fcResultOthers = makeFcResult( *player, fc->getId(), m_onlinePlayers, + FreeCompanyResultPacket::ResultType::FcLogout, + 0, FreeCompanyResultPacket::UpdateStatus::Member, + fc->getName(), player->getName() ); + + server.queueForFreeCompany( fc->getId(), fcResultOthers, { characterId } ); } void FreeCompanyMgr::onSignPetition( Entity::Player& source, Entity::Player& target ) { - + auto& server = Common::Service< World::WorldServer >::ref(); auto fc = getPlayerFreeCompany( target.getCharacterId() ); if( !fc ) return; addMember( fc->getId(), source.getCharacterId() ); - // todo - send fcresult packets + auto fcResultSelf = makeFcResult( source, fc->getId(), m_onlinePlayers, + FreeCompanyResultPacket::ResultType::FcCreateAccept, + 0, FreeCompanyResultPacket::UpdateStatus::Execute, + fc->getName(), fc->getTag() ); + + server.queueForPlayer( source.getCharacterId(), fcResultSelf ); + + auto fcResultOthers = makeFcResult( source, fc->getId(), m_onlinePlayers, + FreeCompanyResultPacket::ResultType::FcCreateAccept, + 0, FreeCompanyResultPacket::UpdateStatus::Member, + fc->getName(), source.getName() ); + + server.queueForFreeCompany( fc->getId(), fcResultOthers, { source.getCharacterId() } ); } @@ -278,6 +315,7 @@ void FreeCompanyMgr::addMember( uint64_t fcId, uint64_t memberId ) if( !pFc ) return; + m_charaIdToFcIdMap[ memberId ] = fcId; dbInsertMember( fcId, memberId, 0 ); pFc->addMember( memberId, 0, 0 ); } diff --git a/src/world/Manager/FreeCompanyMgr.h b/src/world/Manager/FreeCompanyMgr.h index 7ca040ee..0ab7dd16 100644 --- a/src/world/Manager/FreeCompanyMgr.h +++ b/src/world/Manager/FreeCompanyMgr.h @@ -21,6 +21,7 @@ namespace Sapphire::World::Manager std::unordered_map< uint64_t, uint64_t > m_charaIdToFcIdMap; uint64_t m_maxFcId{ 0 }; + uint32_t m_onlinePlayers{ 0 }; public: @@ -68,6 +69,7 @@ namespace Sapphire::World::Manager // void joinLinkshell( uint64_t lsId, uint64_t characterId ); void onFcLogin( uint64_t characterId ); + void onFcLogout( uint64_t characterId ); void onSignPetition( Entity::Player& source, Entity::Player& target ); };