Ticket #2877: limit.diff

File limit.diff, 5.8 KB (added by mimo, 10 years ago)
  • binaries/data/mods/public/simulation/components/EntityLimits.js

     
    1313        "</Limits>" +
    1414        "<LimitChangers>" +
    1515            "<Monument>" +
    16                 "<CivCentre>2</CivCentre>" +
     16                "<CivilCentre>2</CivilCentre>" +
    1717            "</Monument>" +
    1818        "</LimitChangers>" +
     19        "<LimitRemovers>" +
     20            "<CivilCentre>town_phase</CivilCentre>" +
     21        "</LimitRemovers>" +
    1922    "</a:example>" +
    2023    "<element name='Limits'>" +
    2124        "<zeroOrMore>" +
     
    3740                "</zeroOrMore>" +
    3841            "</element>" +
    3942        "</zeroOrMore>" +
     43    "</element>" +
     44    "<element name='LimitRemovers'>" +
     45        "<zeroOrMore>" +
     46            "<element a:help='Specifies a category of building/unit on which to apply this limit. See BuildRestrictions/TrainingRestrictions for possible categories'>" +
     47                "<anyName />" +
     48                "<text/>" +
     49            "</element>" +
     50        "</zeroOrMore>" +
    4051    "</element>";
    4152
    4253
     
    5263    this.limit = {};
    5364    this.count = {};
    5465    this.changers = {};
     66    this.removers = {};
    5567    for (var category in this.template.Limits)
    5668    {
    5769        this.limit[category] = +this.template.Limits[category];
    5870        this.count[category] = 0;
    59         if (!(category in this.template.LimitChangers))
    60             continue;
    61         this.changers[category] = {};
    62         for (var c in this.template.LimitChangers[category])
    63             this.changers[category][c] = +this.template.LimitChangers[category][c];
     71        if (category in this.template.LimitChangers)
     72        {
     73            this.changers[category] = {};
     74            for (var c in this.template.LimitChangers[category])
     75                this.changers[category][c] = +this.template.LimitChangers[category][c];
     76        }
     77        if (category in this.template.LimitRemovers)
     78            this.removers[category] = this.template.LimitRemovers[category];
    6479    }
    6580};
    6681
     
    178193                this.ChangeLimit(category, modifier * this.changers[category][c]);
    179194};
    180195
     196EntityLimits.prototype.RemoveLimits = function(tech)
     197{
     198    for (var category in this.removers)
     199        if (this.removers[category] === tech)
     200            this.limit[category] = undefined;
     201};
     202
    181203Engine.RegisterComponentType(IID_EntityLimits, "EntityLimits", EntityLimits);
  • binaries/data/mods/public/simulation/components/TechnologyManager.js

     
    346346    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
    347347    var ents = cmpRangeManager.GetEntitiesByPlayer(playerID);
    348348
     349    // Change the EntityLimit if any
     350    var cmpPlayerEntityLimits = QueryPlayerIDInterface(playerID, IID_EntityLimits);
     351    if (cmpPlayerEntityLimits)
     352        cmpPlayerEntityLimits.RemoveLimits(tech);
     353
    349354    // Call the related trigger event
    350355    var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
    351356    cmpTrigger.CallEvent("ResearchFinished", {"player": playerID, "tech": tech});
  • binaries/data/mods/public/simulation/templates/special/player.xml

     
    1515  </BattleDetection>
    1616  <EntityLimits>
    1717    <Limits>
     18      <CivilCentre>1</CivilCentre>
    1819      <DefenseTower>30</DefenseTower>
    1920      <Fortress>10</Fortress>
    2021      <Wonder>1</Wonder>
     
    4142        <PtolemyIV>4</PtolemyIV>
    4243      </Juggernaut>
    4344    </LimitChangers>
     45    <LimitRemovers>
     46      <CivilCentre>phase_town</CivilCentre>
     47    </LimitRemovers>
    4448  </EntityLimits>
    4549  <Player/>
    4650  <StatisticsTracker/>
  • binaries/data/mods/public/simulation/templates/structures/ptol_military_colony.xml

     
    3434- Train settler-soldiers of various nationalities.
    3535- Min. distance from other Military Colonies: 100 meters.</Tooltip>
    3636    <Icon>structures/military_settlement.png</Icon>
    37     <RequiredTechnology>phase_town</RequiredTechnology>
    3837  </Identity>
    3938  <Obstruction>
    4039    <Static width="23.0" depth="23.0"/>
  • binaries/data/mods/public/simulation/templates/structures/sele_military_colony.xml

     
    3434- Train settler-soldiers of various nationalities.
    3535- Min. distance from other Military Colonies: 120 meters.</Tooltip>
    3636    <Icon>structures/military_settlement.png</Icon>
    37     <RequiredTechnology>phase_town</RequiredTechnology>
    3837  </Identity>
    3938  <Obstruction>
    4039    <Static width="23.0" depth="23.0"/>
  • binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml

     
    7070    </Classes>
    7171    <VisibleClasses datatype="tokens">CivilCentre</VisibleClasses>
    7272    <Icon>structures/civic_centre.png</Icon>
    73     <RequiredTechnology>phase_town</RequiredTechnology>
    7473  </Identity>
    7574  <Loot>
    7675    <xp>200</xp>