Ticket #1404: tech-v2.diff

File tech-v2.diff, 6.9 KB (added by mimo, 9 years ago)
  • binaries/data/mods/public/maps/skirmishes/Alpine_Valleys_(2).xml

     
    4848  "Name": "Alpine Valleys (2)",
    4949  "PlayerData": [
    5050    {
    51       "Name": "Player 1"
     51      "Name": "Player 1",
     52      "StartingTechnologies": {"phase_town_generic": true, "phase_town_athen": true},
     53      "DisabledTechnologies": {"phase_city_generic": true, "phase_city_athen": true, "phase_city_britons": true, "phase_city_gauls": true},
     54      "DisabledTemplates": {"structures/{civ}_temple": true}
    5255    },
    5356    {
    5457      "Name": "Player 2"
    5558    }
    5659  ],
     60  "Garrison": {
     61    "68": [2109, 2110, 2111, 2112]
     62  },
    5763  "Preview": "alpine_valley_skirmish.png",
    5864  "RevealMap": false
    5965}
     
    1483514841        </Entity>
    1483614842    </Entities>
    1483714843    <Paths/>
    14838 </Scenario>
    14839  No newline at end of file
     14844</Scenario>
  • binaries/data/mods/public/simulation/components/Player.js

     
    4343        "stone": markForTranslation("Stone"),
    4444    }
    4545    this.disabledTemplates = {};
     46    this.disabledTechnologies = {};
     47    this.startingTechnologies = {};
    4648};
    4749
    4850Player.prototype.SetPlayerID = function(id)
     
    569571};
    570572
    571573/**
     574 * Do some map dependant initializations
     575 */
     576Player.prototype.OnGlobalInitGame = function(msg)
     577{
     578    let cmpTechnologyManager = Engine.QueryInterface(this.entity, IID_TechnologyManager);
     579    if (cmpTechnologyManager)
     580        for (let tech in this.startingTechnologies)
     581            cmpTechnologyManager.ResearchTechnology(tech);
     582
     583    // Replace the "{civ}" code with this civ ID
     584    let disabledTemplates = this.disabledTemplates;
     585    this.disabledTemplates = {};
     586    for (let template in disabledTemplates)
     587        if (disabledTemplates[template])
     588            this.disabledTemplates[template.replace(/\{civ\}/g, this.civ)] = true;
     589};
     590
     591/**
    572592 * Keep track of population effects of all entities that
    573593 * become owned or unowned by this player
    574594 */
     
    731751    return this.disabledTemplates;
    732752};
    733753
     754Player.prototype.AddDisabledTechnology = function(tech)
     755{
     756    this.disabledTechnologies[tech] = true;
     757    Engine.BroadcastMessage(MT_DisabledTechnologiesChanged, {});
     758};
     759
     760Player.prototype.RemoveDisabledTechnology = function(tech)
     761{
     762    this.disabledTechnologies[tech] = false;
     763    Engine.BroadcastMessage(MT_DisabledTechnologiesChanged, {});
     764};
     765
     766Player.prototype.SetDisabledTechnologies = function(techs)
     767{
     768    this.disabledTechnologies = techs;
     769    Engine.BroadcastMessage(MT_DisabledTechnologiesChanged, {});
     770};
     771
     772Player.prototype.GetDisabledTechnologies = function()
     773{
     774    return this.disabledTechnologies;
     775};
     776
     777Player.prototype.AddStartingTechnology = function(tech)
     778{
     779    this.startingTechnologies[tech] = true;
     780};
     781
     782Player.prototype.SetStartingTechnologies = function(techs)
     783{
     784    this.startingTechnologies = techs;
     785};
     786
    734787Engine.RegisterComponentType(IID_Player, "Player", Player);
  • binaries/data/mods/public/simulation/components/ProductionQueue.js

     
    156156   
    157157    var techs = string.split(/\s+/);
    158158    var techList = [];
    159     var superseded = {}; // Stores the tech which supersedes the key
     159    var superseded = {}; // Stores the tech which supersedes the key
     160
     161    var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
     162    if (cmpPlayer)
     163        var disabledTechnologies = cmpPlayer.GetDisabledTechnologies();
    160164   
    161165    // Add any top level technologies to an array which corresponds to the displayed icons
    162166    // Also store what a technology is superceded by in the superceded object {"tech1":"techWhichSupercedesTech1", ...}
     
    163167    for (var i in techs)
    164168    {
    165169        var tech = techs[i];
     170        if (disabledTechnologies && disabledTechnologies[tech])
     171            continue;
    166172        var template = cmpTechnologyManager.GetTechnologyTemplate(tech);
    167173        if (!template.supersedes || techs.indexOf(template.supersedes) === -1)
    168174            techList.push(tech);
  • binaries/data/mods/public/simulation/components/interfaces/Trigger.js

     
    11Engine.RegisterInterface("Trigger");
    22
    33Engine.RegisterMessageType("DisabledTemplatesChanged");
     4
     5Engine.RegisterMessageType("DisabledTechnologiesChanged");
  • binaries/data/mods/public/simulation/helpers/Player.js

     
    109109        if (getSetting(playerData, playerDefaults, i, "Resources") !== undefined)
    110110            cmpPlayer.SetResourceCounts(getSetting(playerData, playerDefaults, i, "Resources"));
    111111
     112        if (getSetting(playerData, playerDefaults, i, "StartingTechnologies") !== undefined)
     113            cmpPlayer.SetStartingTechnologies(getSetting(playerData, playerDefaults, i, "StartingTechnologies"));
     114
     115        if (getSetting(playerData, playerDefaults, i, "DisabledTechnologies") !== undefined)
     116            cmpPlayer.SetDisabledTechnologies(getSetting(playerData, playerDefaults, i, "DisabledTechnologies"));
     117
     118        if (getSetting(playerData, playerDefaults, i, "DisabledTemplates") !== undefined)
     119            cmpPlayer.SetDisabledTemplates(getSetting(playerData, playerDefaults, i, "DisabledTemplates"));
     120
    112121        // If diplomacy explicitly defined, use that; otherwise use teams
    113122        if (getSetting(playerData, playerDefaults, i, "Diplomacy") !== undefined)
    114123            cmpPlayer.SetDiplomacy(getSetting(playerData, playerDefaults, i, "Diplomacy"));
  • binaries/data/mods/public/simulation/helpers/Setup.js

     
    3939    var cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager);
    4040    if (settings.GameType)
    4141        cmpEndGameManager.SetGameType(settings.GameType);
     42
     43    if (settings.Garrison)
     44    {
     45        for (let holder in settings.Garrison)
     46        {
     47            let cmpGarrisonHolder = Engine.QueryInterface(+holder, IID_GarrisonHolder);
     48            if (!cmpGarrisonHolder)
     49                warning("Map error in Setup.js: entity " + holder + " can not garrison units");
     50            else
     51                cmpGarrisonHolder.initGarrison = settings.Garrison[holder];
     52        }
     53    }
    4254}
    4355
    4456Engine.RegisterGlobal("LoadMapSettings", LoadMapSettings);