Ticket #3702: lockedTeams.patch

File lockedTeams.patch, 4.7 KB (added by Matthew Guttag, 8 years ago)

New patch removes for each loops from menu.js and completes the partialy implemented logic for team locking in Player.js

  • gui/session/menu.js

     
    300300
    301301        if (i != we)
    302302            Engine.GetGUIObjectByName("diplomacyPlayerTheirs["+(i-1)+"]").caption = (g_Players[i].isAlly[we] ? translate("Ally") : (g_Players[i].isNeutral[we] ? translate("Neutral") : translate("Enemy")));
    303 
    304         // Don't display the options for ourself, or if we or the other player aren't active anymore
     303       
     304        // Attack Request
     305        var simState = GetSimState();
     306        let button = Engine.GetGUIObjectByName("diplomacyAttackRequest["+(i-1)+"]");
     307        button.hidden = simState.ceasefireActive || !(g_Players[i].isEnemy[we]);
     308        button.tooltip = translate("Request your allies to attack this enemy");
     309        button.onpress = (function(i, we){ return function() {
     310            Engine.PostNetworkCommand({"type": "attack-request", "source": we, "target": i});
     311        } })(i, we);
     312       
     313        // Don't display the options for ourself
    305314        if (i == we || g_Players[we].state != "active" || g_Players[i].state != "active")
    306315        {
    307316            // Hide the unused/unselectable options
    308             for each (let a in ["TributeFood", "TributeWood", "TributeStone", "TributeMetal", "Ally", "Neutral", "Enemy"])
     317            for (let a of ["TributeFood", "TributeWood", "TributeStone", "TributeMetal", "Ally", "Neutral", "Enemy"])
    309318                Engine.GetGUIObjectByName("diplomacyPlayer"+a+"["+(i-1)+"]").hidden = true;
    310319            Engine.GetGUIObjectByName("diplomacyAttackRequest["+(i-1)+"]").hidden = true;
    311320            continue;
    312321        }
     322       
     323        //Don't display tribute options but do display attack options if teams locked and not on our team
     324        if (g_Players[we].teamsLocked && (g_Players[we].team != -1 && g_Players[i].team != -1 && g_Players[i].team != g_Players[we].team))
     325        {
     326            for (let a of ["TributeFood", "TributeWood", "TributeStone", "TributeMetal", "Ally", "Neutral", "Enemy"])
     327                Engine.GetGUIObjectByName("diplomacyPlayer"+a+"["+(i-1)+"]").hidden = true;
     328            Engine.GetGUIObjectByName("diplomacyAttackRequest["+(i-1)+"]").hidden = false;
     329            continue;
     330        }
    313331
    314332        // Tribute
    315         for each (let resource in ["food", "wood", "stone", "metal"])
     333        for (let resource of ["food", "wood", "stone", "metal"])
    316334        {
    317335            let button = Engine.GetGUIObjectByName("diplomacyPlayerTribute"+resource[0].toUpperCase()+resource.substring(1)+"["+(i-1)+"]");
    318336            button.onpress = (function(player, resource, button){
     
    348366            button.tooltip = formatTributeTooltip(g_Players[i], resource, 100);
    349367        }
    350368
    351         // Attack Request
    352         var simState = GetSimState();
    353         let button = Engine.GetGUIObjectByName("diplomacyAttackRequest["+(i-1)+"]");
    354         button.hidden = simState.ceasefireActive || !(g_Players[i].isEnemy[we]);
    355         button.tooltip = translate("Request your allies to attack this enemy");
    356         button.onpress = (function(i, we){ return function() {
    357             Engine.PostNetworkCommand({"type": "attack-request", "source": we, "target": i});
    358         } })(i, we);
    359 
    360         // Skip our own teams on teams locked
    361         if (g_Players[we].teamsLocked && g_Players[we].team != -1 && g_Players[we].team == g_Players[i].team)
     369        // Skip our own teams and other teams on teams locked
     370        if (g_Players[we].teamsLocked && g_Players[we].team != -1 && g_Players[i].team != -1)
    362371            continue;
    363372
    364373        // Diplomacy settings
    365374        // Set up the buttons
    366         for each (let setting in ["Ally", "Neutral", "Enemy"])
     375        for (let setting of ["Ally", "Neutral", "Enemy"])
    367376        {
    368377            let button = Engine.GetGUIObjectByName("diplomacyPlayer"+setting+"["+(i-1)+"]");
    369378
  • simulation/components/Player.js

     
    392392
    393393Player.prototype.SetDiplomacy = function(dipl)
    394394{
    395     // Should we check for teamsLocked here?
    396     this.diplomacy = dipl;
    397     Engine.BroadcastMessage(MT_DiplomacyChanged, {"player": this.playerID});
     395    if (!this.teamsLocked)
     396    {
     397        this.diplomacy = dipl;
     398        Engine.BroadcastMessage(MT_DiplomacyChanged, {"player": this.playerID});
     399    }
    398400};
    399401
    400402Player.prototype.SetDiplomacyIndex = function(idx, value)
     
    414416    if (this.teamsLocked)
    415417    {
    416418        // but can't stab your team members in the back
    417         if (this.team == -1 || this.team != cmpPlayer.GetTeam())
     419        if (this.team == -1 || cmpPlayer.GetTeam() == -1)
    418420        {
    419421            // Break alliance or declare war
    420422            if (Math.min(this.diplomacy[idx],cmpPlayer.diplomacy[this.playerID]) > value)
     
    703705
    704706    if (this.state != "active" || cmpPlayer.state != "active")
    705707        return;
    706 
     708   
     709    if (this.teamsLocked && this.team != -1 && cmpPlayer.team != -1 && this.team != cmpPlayer.team)
     710        return;
     711   
    707712    if (!this.SubtractResourcesOrNotify(amounts))
    708713        return;
    709714