diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 415934cc7..e20c6d442 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2794,7 +2794,6 @@ void CL_ClearPlayer(INT32 playernum) splitscreen_invitations[playernum] = -1; playerconsole[playernum] = playernum; - G_DestroyParty(playernum); // Wipe the struct. memset(&players[playernum], 0, sizeof (player_t)); @@ -3876,6 +3875,7 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum) { // Clear player before joining, lest some things get set incorrectly CL_ClearPlayer(newplayernum); + G_DestroyParty(newplayernum); playeringame[newplayernum] = true; G_AddPlayer(newplayernum); @@ -4018,6 +4018,7 @@ static void Got_AddBot(UINT8 **p, INT32 playernum) // Clear player before joining, lest some things get set incorrectly CL_ClearPlayer(newplayernum); + G_DestroyParty(newplayernum); playeringame[newplayernum] = true; G_AddPlayer(newplayernum); @@ -4038,6 +4039,9 @@ static void Got_AddBot(UINT8 **p, INT32 playernum) sprintf(player_names[newplayernum], "%s", skins[skinnum].realname); SetPlayerSkinByNum(newplayernum, skinnum); + playerconsole[newplayernum] = newplayernum; + G_BuildLocalSplitscreenParty(newplayernum); + if (netgame) { HU_AddChatText(va("\x82*Bot %d has been added to the game", newplayernum+1), false); @@ -7108,4 +7112,4 @@ void SendServerNotice(SINT8 target, char *message) if (client) return; DoSayCommand(message, target + 1, HU_PRIVNOTICE, servernode); -} \ No newline at end of file +} diff --git a/src/g_party.cpp b/src/g_party.cpp index 1c82a2d1d..2b72d49f0 100644 --- a/src/g_party.cpp +++ b/src/g_party.cpp @@ -186,6 +186,11 @@ public: // consoleplayer. Party& operator [](Party::Console console) { return pool_[console]; } + // Clears a single player's local party. This method + // accesses the playernum directly, instead of the + // consoleplayer. + void reset(playernum_t player) { pool_[player] = {}; } + protected: std::array pool_; } @@ -271,7 +276,7 @@ void G_ObliterateParties(void) void G_DestroyParty(UINT8 player) { - local_party[player] = {}; + local_party.reset(player); final_party[player] = {}; } diff --git a/src/p_saveg.c b/src/p_saveg.c index 70ccf1624..16073ac06 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -944,6 +944,7 @@ static void P_NetUnArchiveParties(savebuffer_t *save) if (!playeringame[i]) continue; + G_DestroyParty(i); G_BuildLocalSplitscreenParty(i); }