From 3f5a9c88116aebd51eb72da5f8d068768941e87f Mon Sep 17 00:00:00 2001 From: Gent Date: Sun, 8 Nov 2020 13:58:44 -0500 Subject: [PATCH] Fix buddy list not syncing properly I couldn't reproduce this on my public server, but the list would show up empty sometimes on initial login on my local server, so I threw it in for good measure. --- src/BuddyManager.cpp | 9 +++++++++ src/Player.hpp | 1 + src/PlayerManager.cpp | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) 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)