Ticket #3198: t3198_send_diplomacy_message_only_if_it_changes_better.patch

File t3198_send_diplomacy_message_only_if_it_changes_better.patch, 2.1 KB (added by elexis, 9 years ago)

The diplomacy button will now be updated as soon as one clicks on it. It has become really hard to send dupes this way (only when spamming different diplomacies anyway).

  • binaries/data/mods/public/gui/session/menu.js

     
    251251    chatWindow.hidden = !chatWindow.hidden;
    252252}
    253253
    254254function setDiplomacy(data)
    255255{
    256     Engine.PostNetworkCommand({"type": "diplomacy", "to": data.to, "player": data.player});
     256    var we = Engine.GetPlayerID();
     257   
     258    // If the diplomacy button was already clicked before, return
     259    let setting = data.to.charAt(0).toUpperCase() + data.to.slice(1);
     260    let button = Engine.GetGUIObjectByName("diplomacyPlayer"+setting+"["+(data.player-1)+"]");
     261    if (button.caption == "x")
     262        return;
     263   
     264    // If the diplomacy button is clicked, update the buttons immediately to prevent
     265    // sending duplicate messages ((see ticket #3198)
     266    for each (let setting in ["Ally", "Neutral", "Enemy"])
     267    {
     268        let button = Engine.GetGUIObjectByName("diplomacyPlayer"+setting+"["+(data.player-1)+"]");
     269        button.caption = (data.to == setting.toLowerCase()) ? "x" : "";
     270    }
     271   
     272    // Send update only if diplomacy actually changed
     273    if ((data.to == "ally" && !g_Players[we].isAlly[data.player])
     274            || (data.to == "neutral" && !g_Players[we].isNeutral[data.player])
     275            || (data.to == "enemy" && !g_Players[we].isEnemy[data.player]))
     276            Engine.PostNetworkCommand({"type": "diplomacy", "to": data.to, "player": data.player});
    257277}
    258278
    259279function tributeResource(data)
    260280{
    261281    Engine.PostNetworkCommand({"type": "tribute", "player": data.player, "amounts":  data.amounts});
     
    358378        // Set up the buttons
    359379        for each (let setting in ["Ally", "Neutral", "Enemy"])
    360380        {
    361381            let button = Engine.GetGUIObjectByName("diplomacyPlayer"+setting+"["+(i-1)+"]");
    362382
    363             button.caption = g_Players[we]["is"+setting][i] ? translate("x") : "";
     383            button.caption = g_Players[we]["is"+setting][i] ? "x" : "";
    364384            button.onpress = (function(e){ return function() { setDiplomacy(e) } })({"player": i, "to": setting.toLowerCase()});
    365385            button.hidden = false;
    366386        }
    367387    }
    368388