mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Destroy parties explicitly before building
This removes a call to G_DestroyParty from CL_ClearPlayer. The problem with calling it from there is that the consoleplayer of a splitscreen is removed first, the local party is cleared. Then G_LeaveParty assert fails when the next splitscreen player is removed because the console's party was already cleared.
This commit is contained in:
parent
11b2ee0d26
commit
20d9d48483
3 changed files with 9 additions and 2 deletions
|
|
@ -2794,7 +2794,6 @@ void CL_ClearPlayer(INT32 playernum)
|
||||||
splitscreen_invitations[playernum] = -1;
|
splitscreen_invitations[playernum] = -1;
|
||||||
|
|
||||||
playerconsole[playernum] = playernum;
|
playerconsole[playernum] = playernum;
|
||||||
G_DestroyParty(playernum);
|
|
||||||
|
|
||||||
// Wipe the struct.
|
// Wipe the struct.
|
||||||
memset(&players[playernum], 0, sizeof (player_t));
|
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
|
// Clear player before joining, lest some things get set incorrectly
|
||||||
CL_ClearPlayer(newplayernum);
|
CL_ClearPlayer(newplayernum);
|
||||||
|
G_DestroyParty(newplayernum);
|
||||||
|
|
||||||
playeringame[newplayernum] = true;
|
playeringame[newplayernum] = true;
|
||||||
G_AddPlayer(newplayernum);
|
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
|
// Clear player before joining, lest some things get set incorrectly
|
||||||
CL_ClearPlayer(newplayernum);
|
CL_ClearPlayer(newplayernum);
|
||||||
|
G_DestroyParty(newplayernum);
|
||||||
|
|
||||||
playeringame[newplayernum] = true;
|
playeringame[newplayernum] = true;
|
||||||
G_AddPlayer(newplayernum);
|
G_AddPlayer(newplayernum);
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,11 @@ public:
|
||||||
// consoleplayer.
|
// consoleplayer.
|
||||||
Party& operator [](Party::Console console) { return pool_[console]; }
|
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:
|
protected:
|
||||||
std::array<Party, MAXPLAYERS> pool_;
|
std::array<Party, MAXPLAYERS> pool_;
|
||||||
}
|
}
|
||||||
|
|
@ -271,7 +276,7 @@ void G_ObliterateParties(void)
|
||||||
|
|
||||||
void G_DestroyParty(UINT8 player)
|
void G_DestroyParty(UINT8 player)
|
||||||
{
|
{
|
||||||
local_party[player] = {};
|
local_party.reset(player);
|
||||||
final_party[player] = {};
|
final_party[player] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -944,6 +944,7 @@ static void P_NetUnArchiveParties(savebuffer_t *save)
|
||||||
if (!playeringame[i])
|
if (!playeringame[i])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
G_DestroyParty(i);
|
||||||
G_BuildLocalSplitscreenParty(i);
|
G_BuildLocalSplitscreenParty(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue