Ticket #4248: gamesetup_unassigned_player_fix_v2.patch
File gamesetup_unassigned_player_fix_v2.patch, 3.3 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/gui/gamesetup/gamesetup.js
function sanitizePlayerData(playerData) 993 993 playerData.shift(); 994 994 995 995 playerData.forEach((pData, index) => { 996 996 pData.Color = pData.Color || g_PlayerColors[index]; 997 997 pData.Civ = pData.Civ || "random"; 998 pData.AI = pData.AI || ""; 998 999 // Use default AI if the map doesn't specify any explicitly 1000 if (!("AI" in pData)) 1001 pData.AI = g_DefaultPlayerData[index].AI; 1002 1003 if (!("AIDiff" in pData)) 1004 pData.AIDiff = g_DefaultPlayerData[index].AIDiff; 999 1005 }); 1000 1006 1001 1007 // Replace colors with the best matching color of PlayerDefaults 1002 1008 if (g_GameAttributes.mapType != "scenario") 1003 1009 { … … function onTick() 1073 1079 } 1074 1080 1075 1081 /** 1076 1082 * Called when the map or the number of players changes. 1077 1083 */ 1078 function resizePlayerData(targetPlayerData,maxPlayers)1084 function unassignInvalidPlayers(maxPlayers) 1079 1085 { 1080 1086 if (g_IsNetworked) 1081 1087 { 1082 1088 // Remove invalid playerIDs from the servers playerassignments copy 1083 1089 for (let playerID = +maxPlayers + 1; playerID <= g_MaxPlayers; ++playerID) … … function resizePlayerData(targetPlayerDa 1089 1095 "local": { 1090 1096 "name": singleplayerName(), 1091 1097 "player": 1 1092 1098 } 1093 1099 }; 1094 1095 let pData = g_GameAttributes.settings.PlayerData;1096 return maxPlayers > pData.length ?1097 pData.concat(targetPlayerData.slice(pData.length, maxPlayers)) :1098 pData.slice(0, maxPlayers);1099 1100 } 1100 1101 1101 1102 /** 1102 1103 * Called when the host choses the number of players on a random map. 1103 1104 * @param {Number} num … … function resizePlayerData(targetPlayerDa 1105 1106 function selectNumPlayers(num) 1106 1107 { 1107 1108 if (g_IsInGuiUpdate || !g_IsController || g_GameAttributes.mapType != "random") 1108 1109 return; 1109 1110 1110 g_GameAttributes.settings.PlayerData = resizePlayerData(g_DefaultPlayerData, num); 1111 let pData = g_GameAttributes.settings.PlayerData; 1112 g_GameAttributes.settings.PlayerData = 1113 num > pData.length ? 1114 pData.concat(g_DefaultPlayerData.slice(pData.length, num)) : 1115 pData.slice(0, num); 1116 1117 unassignInvalidPlayers(num); 1111 1118 1112 1119 updateGameAttributes(); 1113 1120 } 1114 1121 1115 1122 /** … … function selectMap(name) 1216 1223 } 1217 1224 1218 1225 if (mapSettings.PlayerData) 1219 1226 sanitizePlayerData(mapSettings.PlayerData); 1220 1227 1221 // Persist player data1222 if (g_GameAttributes.mapType == "skirmish")1223 mapSettings.PlayerData = resizePlayerData(mapSettings.PlayerData, mapSettings.PlayerData.length);1224 1225 1228 // Copy any new settings 1226 1229 g_GameAttributes.map = name; 1227 1230 g_GameAttributes.script = mapSettings.Script; 1228 1231 if (g_GameAttributes.map !== "random") 1229 1232 for (let prop in mapSettings) 1230 1233 g_GameAttributes.settings[prop] = mapSettings[prop]; 1231 1234 1232 // Use default AI if the map doesn't specify any explicitly 1233 for (let i in g_GameAttributes.settings.PlayerData) 1234 { 1235 if (!('AI' in g_GameAttributes.settings.PlayerData[i])) 1236 g_GameAttributes.settings.PlayerData[i].AI = g_DefaultPlayerData[i].AI; 1237 if (!('AIDiff' in g_GameAttributes.settings.PlayerData[i])) 1238 g_GameAttributes.settings.PlayerData[i].AIDiff = g_DefaultPlayerData[i].AIDiff; 1239 } 1235 unassignInvalidPlayers(g_GameAttributes.settings.PlayerData.length); 1240 1236 1241 1237 updateGameAttributes(); 1242 1238 } 1243 1239 1244 1240 function launchGame()