diff --git a/src/BuddyManager.cpp b/src/BuddyManager.cpp index e81ed8e..b0889e3 100644 --- a/src/BuddyManager.cpp +++ b/src/BuddyManager.cpp @@ -338,6 +338,15 @@ void BuddyManager::reqBuddyMenuchat(CNSocket* sock, CNPacketData* data) { // Getting buddy state void BuddyManager::reqPktGetBuddyState(CNSocket* sock, CNPacketData* data) { Player* plr = PlayerManager::getPlayer(sock); + + /* + * If the buddy list wasn't synced a second time yet, sync it. + * Not sure why we have to do it again for the client not to trip up. + */ + if (!plr->buddiesSynced) { + refreshBuddyList(sock); + plr->buddiesSynced = true; + } INITSTRUCT(sP_FE2CL_REP_GET_BUDDY_STATE_SUCC, resp); diff --git a/src/Player.hpp b/src/Player.hpp index f61e8b3..0ecf1dd 100644 --- a/src/Player.hpp +++ b/src/Player.hpp @@ -71,5 +71,6 @@ struct Player { bool notify; + bool buddiesSynced; int64_t buddyIDs[50]; }; diff --git a/src/PlayerManager.cpp b/src/PlayerManager.cpp index 3096f0b..3cbb2dd 100644 --- a/src/PlayerManager.cpp +++ b/src/PlayerManager.cpp @@ -404,7 +404,7 @@ void PlayerManager::enterPlayer(CNSocket* sock, CNPacketData* data) { MissionManager::failInstancedMissions(sock); - // send over buddy list + // initial buddy sync BuddyManager::refreshBuddyList(sock); for (auto& pair : PlayerManager::players)