Ticket #4369: 4369_stay_ready.patch

File 4369_stay_ready.patch, 3.8 KB (added by Imarok, 7 years ago)

Add third state "Stay Ready"

  • binaries/data/mods/public/gui/gamesetup/gamesetup.js

     
    137137 * Highlight ready players.
    138138 */
    139139const g_ReadyColor = "green";
     140const g_StayReadyColor = "blue";
    140141
    141142/**
    142143 * Placeholder item for the map-dropdownlist.
     
    172173
    173174/**
    174175 * Whether the current player is ready to start the game.
     176 * 0 - not ready
     177 * 1 - ready
     178 * 2 - stay ready
    175179 */
    176180var g_IsReady;
    177181
     
    687691{
    688692    --g_ReadyChanged;
    689693
    690     if (g_ReadyChanged < 1 && g_PlayerAssignments[message.guid].player != -1)
     694    if (g_ReadyChanged < 1 && g_PlayerAssignments[message.guid].player != -1 && message.status < 2)
    691695        addChatMessage({
    692696            "type": message.status == 1 ? "ready" : "not-ready",
    693697            "guid": message.guid
     
    18381842
    18391843function toggleReady()
    18401844{
    1841     setReady(!g_IsReady);
     1845    setReady((g_IsReady + 1) % 3);
    18421846}
    18431847
    18441848function setReady(ready, sendMessage = true)
     
    18531857
    18541858    let button = Engine.GetGUIObjectByName("startGame");
    18551859
    1856     button.caption = g_IsReady ?
    1857         translate("I'm not ready!") :
     1860    button.caption = g_IsReady ? (
     1861            g_IsReady == 2 ?
     1862                translate("I'm not ready!") :
     1863                translate("Stay ready")) :
    18581864        translate("I'm ready");
    18591865
    1860     button.tooltip = g_IsReady ?
    1861         translate("State that you are not ready to play.") :
     1866    button.tooltip = g_IsReady ? (
     1867            g_IsReady == 2 ?
     1868            translate("State that you are not ready to play.") :
     1869            translate("Stay ready even when the game settings change.")) :
    18621870        translate("State that you are ready to play!");
    18631871}
    18641872
     
    18781886        let pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[g_PlayerAssignments[guid].player - 1] : {};
    18791887        isAI[g_PlayerAssignments[guid].player] = false;
    18801888        if (g_PlayerAssignments[guid].status || !g_IsNetworked)
    1881             Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = '[color="' + g_ReadyColor + '"]' + translate(getSetting(pData, pDefs, "Name")) + '[/color]';
     1889            Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption =
     1890                '[color="' + (g_PlayerAssignments[guid].status == 1 ? g_ReadyColor : g_StayReadyColor) + '"]' +
     1891                translate(getSetting(pData, pDefs, "Name")) + '[/color]';
    18821892        else
    18831893        {
    18841894            Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = translate(getSetting(pData, pDefs, "Name"));
     
    18941904        let pData = g_GameAttributes.settings.PlayerData ? g_GameAttributes.settings.PlayerData[playerid] : {};
    18951905        let pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[playerid] : {};
    18961906        if (isAI[playerid + 1])
    1897             Engine.GetGUIObjectByName("playerName[" + playerid + "]").caption = '[color="' + g_ReadyColor + '"]' + translate(getSetting(pData, pDefs, "Name")) + '[/color]';
     1907            Engine.GetGUIObjectByName("playerName[" + playerid + "]").caption =
     1908                '[color="' + g_StayReadyColor + '"]' + translate(getSetting(pData, pDefs, "Name")) + '[/color]';
    18981909    }
    18991910
    19001911    // The host is not allowed to start until everyone is ready.
     
    19311942        Engine.ClearAllPlayerReady();
    19321943        setReady(true);
    19331944    }
    1934     else
     1945    else if (g_IsReady != 2)
    19351946        setReady(false, false);
    19361947}
    19371948
  • source/network/NetServer.cpp

     
    774774void CNetServerWorker::ClearAllPlayerReady()
    775775{
    776776    for (PlayerAssignmentMap::iterator it = m_PlayerAssignments.begin(); it != m_PlayerAssignments.end(); ++it)
    777         it->second.m_Status = 0;
     777        if (it->second.m_Status != 2)
     778            it->second.m_Status = 0;
    778779
    779780    SendPlayerAssignments();
    780781}