mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
Persist the the valid subset of chosen player settings when changing the skirmish map. Patch by Offensive ePeen, refs #3120.
This was SVN commit r18458.
This commit is contained in:
parent
e6e8efec1c
commit
b642f0d876
2 changed files with 34 additions and 32 deletions
|
|
@ -134,6 +134,7 @@
|
|||
{"nick": "njm"},
|
||||
{"nick": "NoMonkey", "name": "John Mena"},
|
||||
{"nick": "notpete", "name": "Rich Cross"},
|
||||
{"nick": "Offensive ePeen", "name": "Jared Ryan Bills"},
|
||||
{"nick": "Ols", "name": "Oliver Whiteman"},
|
||||
{"nick": "olsner", "name": "Simon Brenner"},
|
||||
{"nick": "otero"},
|
||||
|
|
|
|||
|
|
@ -1039,6 +1039,34 @@ function onTick()
|
|||
updateTimers();
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the map or the number of players changes.
|
||||
*/
|
||||
function resizePlayerData(targetPlayerData, maxPlayers)
|
||||
{
|
||||
if (g_IsNetworked)
|
||||
// Unassign excess players
|
||||
for (let guid in g_PlayerAssignments)
|
||||
{
|
||||
let playerID = g_PlayerAssignments[guid].player;
|
||||
if (playerID > maxPlayers)
|
||||
Engine.AssignNetworkPlayer(playerID, "");
|
||||
}
|
||||
else if (!g_PlayerAssignments.local ||
|
||||
g_PlayerAssignments.local.player > maxPlayers)
|
||||
g_PlayerAssignments = {
|
||||
"local": {
|
||||
"name": singleplayerName(),
|
||||
"player": 1
|
||||
}
|
||||
};
|
||||
|
||||
let pData = g_GameAttributes.settings.PlayerData;
|
||||
return maxPlayers > pData.length ?
|
||||
pData.concat(targetPlayerData.slice(pData.length, maxPlayers)) :
|
||||
pData.slice(0, maxPlayers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the host choses the number of players on a random map.
|
||||
* @param {Number} num
|
||||
|
|
@ -1048,22 +1076,7 @@ function selectNumPlayers(num)
|
|||
if (g_IsInGuiUpdate || !g_IsController || g_GameAttributes.mapType != "random")
|
||||
return;
|
||||
|
||||
// Unassign players from nonexistent slots
|
||||
if (g_IsNetworked)
|
||||
{
|
||||
for (let i = g_MaxPlayers; i > num; --i)
|
||||
Engine.AssignNetworkPlayer(i, "");
|
||||
}
|
||||
else if (g_PlayerAssignments.local.player > num)
|
||||
g_PlayerAssignments.local.player = 1;
|
||||
|
||||
// Update player data
|
||||
let pData = g_GameAttributes.settings.PlayerData;
|
||||
if (num < pData.length)
|
||||
g_GameAttributes.settings.PlayerData = pData.slice(0, num);
|
||||
else
|
||||
for (let i = pData.length; i < num; ++i)
|
||||
g_GameAttributes.settings.PlayerData.push(g_DefaultPlayerData[i]);
|
||||
g_GameAttributes.settings.PlayerData = resizePlayerData(g_DefaultPlayerData, num);
|
||||
|
||||
updateGameAttributes();
|
||||
}
|
||||
|
|
@ -1174,6 +1187,10 @@ function selectMap(name)
|
|||
if (mapSettings.PlayerData)
|
||||
sanitizePlayerData(mapSettings.PlayerData);
|
||||
|
||||
// Persist player data
|
||||
if (g_GameAttributes.mapType == "skirmish")
|
||||
mapSettings.PlayerData = resizePlayerData(mapSettings.PlayerData, mapSettings.PlayerData.length);
|
||||
|
||||
// Copy any new settings
|
||||
g_GameAttributes.map = name;
|
||||
g_GameAttributes.script = mapSettings.Script;
|
||||
|
|
@ -1190,22 +1207,6 @@ function selectMap(name)
|
|||
g_GameAttributes.settings.PlayerData[i].AIDiff = g_DefaultPlayerData[i].AIDiff;
|
||||
}
|
||||
|
||||
if (g_IsNetworked)
|
||||
// Unassign excess players
|
||||
for (let guid in g_PlayerAssignments)
|
||||
{
|
||||
let player = g_PlayerAssignments[guid].player;
|
||||
if (player > g_GameAttributes.settings.PlayerData.length)
|
||||
Engine.AssignNetworkPlayer(player, "");
|
||||
}
|
||||
else
|
||||
g_PlayerAssignments = {
|
||||
"local": {
|
||||
"name": singleplayerName(),
|
||||
"player": 1
|
||||
}
|
||||
};
|
||||
|
||||
updateGameAttributes();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue