Fixed +playerclass not being respected when new players join a save

This commit is contained in:
Boondorl 2025-07-30 19:35:24 -04:00 committed by Rachael Alexanderson
commit d6ead264ed
2 changed files with 21 additions and 2 deletions

View file

@ -549,6 +549,19 @@ static void InitPlayerClasses ()
}
}
// Account for additional players joining from a save file.
static void UpdatePlayerClass(int i)
{
if (!savegamerestore || !playeringame[i])
return;
SinglePlayerClass[i] = players[i].userinfo.GetPlayerClassNum();
if (SinglePlayerClass[i] < 0)
SinglePlayerClass[i] = (pr_classchoice()) % PlayerClasses.Size();
players[i].cls = nullptr;
players[i].CurrentPlayerClass = SinglePlayerClass[i];
}
//==========================================================================
//
//
@ -2018,7 +2031,7 @@ void G_WriteVisited(FSerializer &arc)
}
// Store player classes to be used when spawning a random class
if (multiplayer)
if (!multiplayer || !deathmatch)
{
arc.Array("randomclasses", SinglePlayerClass, MAXPLAYERS);
}
@ -2102,7 +2115,10 @@ void G_ReadVisited(FSerializer &arc)
for (unsigned int i = 0; i < MAXPLAYERS; ++i)
{
FStringf key("%d", i);
arc(key.GetChars(), players[i].cls);
if (!arc.HasKey(key.GetChars()))
UpdatePlayerClass(i);
else
arc(key.GetChars(), players[i].cls);
}
arc.EndObject();
}