Ticket #3120: 3120.v7.patch

File 3120.v7.patch, 3.4 KB (added by Jared Ryan Bills, 8 years ago)

Fixed bug related to gaia player in skirmish maps.

  • 0ad/binaries/data/mods/public/gui/credits/texts/programming.json

     
    134134            {"nick": "njm"},
    135135            {"nick": "NoMonkey", "name": "John Mena"},
    136136            {"nick": "notpete", "name": "Rich Cross"},
     137            {"nick": "Offensive ePeen", "name": "Jared Ryan Bills"},
    137138            {"nick": "Ols", "name": "Oliver Whiteman"},
    138139            {"nick": "olsner", "name": "Simon Brenner"},
    139140            {"nick": "otero"},
  • 0ad/binaries/data/mods/public/gui/gamesetup/gamesetup.js

     
    10401040}
    10411041
    10421042/**
     1043 * Called when the map changes or the number of players changes
     1044 */
     1045function resizePlayerData(defPData, ply)
     1046{
     1047    if (g_IsNetworked)
     1048        // Unassign excess players
     1049        for (let guid in g_PlayerAssignments)
     1050        {
     1051            let player = g_PlayerAssignments[guid].player;
     1052            if (player > ply)
     1053                Engine.AssignNetworkPlayer(player, "");
     1054        }
     1055    else
     1056        // Reassign player 1
     1057        g_PlayerAssignments = {
     1058            "local": {
     1059                "name": singleplayerName(),
     1060                "player": 1
     1061            }
     1062        };
     1063    let pData = g_GameAttributes.settings.PlayerData;
     1064    return ply > pData.length ?
     1065        pData.concat(defPData.slice(pData.length, ply)) :
     1066        pData.slice(0, ply);
     1067}
     1068
     1069/**
    10431070 * Called when the host choses the number of players on a random map.
    10441071 * @param {Number} num
    10451072 */
     
    10481075    if (g_IsInGuiUpdate || !g_IsController || g_GameAttributes.mapType != "random")
    10491076        return;
    10501077
    1051     // Unassign players from nonexistent slots
    1052     if (g_IsNetworked)
    1053     {
    1054         for (let i = g_MaxPlayers; i > num; --i)
    1055             Engine.AssignNetworkPlayer(i, "");
    1056     }
    1057     else if (g_PlayerAssignments.local.player > num)
    1058         g_PlayerAssignments.local.player = 1;
    1059 
    10601078    // Update player data
    1061     let pData = g_GameAttributes.settings.PlayerData;
    1062     if (num < pData.length)
    1063         g_GameAttributes.settings.PlayerData = pData.slice(0, num);
    1064     else
    1065         for (let i = pData.length; i < num; ++i)
    1066             g_GameAttributes.settings.PlayerData.push(g_DefaultPlayerData[i]);
     1079    g_GameAttributes.settings.PlayerData = resizePlayerData(g_DefaultPlayerData, num);
    10671080
    10681081    updateGameAttributes();
    10691082}
     
    11711184        delete g_GameAttributes.settings.LastManStanding;
    11721185    }
    11731186
     1187    // Persist player data settings on map change
     1188    if (g_GameAttributes.mapType == "skirmish")
     1189    {
     1190        let bGaiaSet = (mapSettings.PlayerData[0] == null);
     1191        if (bGaiaSet)
     1192            mapSettings.PlayerData.shift();
     1193        mapSettings.PlayerData = resizePlayerData(mapSettings.PlayerData, mapSettings.PlayerData.length);
     1194        if (bGaiaSet)
     1195            mapSettings.PlayerData.unshift(null);
     1196    }
     1197
    11741198    if (mapSettings.PlayerData)
    11751199        sanitizePlayerData(mapSettings.PlayerData);
    11761200
     
    11901214            g_GameAttributes.settings.PlayerData[i].AIDiff = g_DefaultPlayerData[i].AIDiff;
    11911215    }
    11921216
    1193     if (g_IsNetworked)
    1194         // Unassign excess players
    1195         for (let guid in g_PlayerAssignments)
    1196         {
    1197             let player = g_PlayerAssignments[guid].player;
    1198             if (player > g_GameAttributes.settings.PlayerData.length)
    1199                 Engine.AssignNetworkPlayer(player, "");
    1200         }
    1201     else
    1202         g_PlayerAssignments = {
    1203             "local": {
    1204                 "name": singleplayerName(),
    1205                 "player": 1
    1206             }
    1207         };
    1208 
    12091217    updateGameAttributes();
    12101218}
    12111219