Page MenuHomeWildfire Games

template_structure_defensive_tower* corrections
Needs ReviewPublic

Authored by Nescio on Jan 8 2020, 11:03 PM.

Details

Reviewers
bb
Angen
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Summary

The recent introduction of the artillery and bolt towers messed up some things, because the new templates were carelessly copied from the scout/stone/defense tower templates. This patch tries to bring some order to the template_structure_defensive_tower* templates and does the following:

  • file moves
    • renames *_sentry.xml to *_small.xml and updates all child templates accordingly
    • renames *_stone.xml to *_large.xml and updates all child templates accordingly
    • renames the two old icons for consistency with the new ones (tower_artillery.png and tower_bolt.png)
  • classes:
    • makes the Defensive and Tower classes visible (cf. Civic, Economic, Military, Resource)
    • deletes the unused GarrisonTower class
    • replaces the now problematic DefenseTower visible class
    • ensures each generic template has exactly one corresponding visible class (ArtilleryTower, BoltTower, LargeTower, SmallTower, Outpost)
  • updates the AI files accordingly
  • updates the technology files to ensure arrow technologies don't apply to the artillery and bolt towers
  • simplifies the build restrictions

Checked with grep -ir -e DefenseTower -e GarrisonTower -e SentryTower -e StoneTower simulation/*

Test Plan

Check for mistakes and omissions.

Event Timeline

Nescio created this revision.Jan 8 2020, 11:03 PM
Owners added subscribers: Restricted Owners Package, Restricted Owners Package.Jan 8 2020, 11:03 PM

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/982/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/78/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 121| 121| EntityLimits.prototype.UpdateLimitsFromTech = function(tech)
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124|    |-		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
|    | 124|+		if ("RequiredTechs" in this.removers[category] && this.removers[category].RequiredTechs.indexOf(tech) !== -1)
| 125| 125| 			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124| 124| 		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
| 125|    |-			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
|    | 125|+			this.removers[category].RequiredTechs.splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
| 128| 128| };
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124| 124| 		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
| 125|    |-			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
|    | 125|+			this.removers[category]["RequiredTechs"].splice(this.removers[category].RequiredTechs.indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
| 128| 128| };
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 133| 133| 	{
| 134| 134| 		var nolimit = true;
| 135| 135| 		if ("RequiredTechs" in this.removers[category])
| 136|    |-			nolimit = !this.removers[category]["RequiredTechs"].length;
|    | 136|+			nolimit = !this.removers[category].RequiredTechs.length;
| 137| 137| 		if (nolimit && "RequiredClasses" in this.removers[category])
| 138| 138| 			for (var cls of this.removers[category]["RequiredClasses"])
| 139| 139| 				nolimit = nolimit && this.classCount[cls] > 0;
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredClasses"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 135| 135| 		if ("RequiredTechs" in this.removers[category])
| 136| 136| 			nolimit = !this.removers[category]["RequiredTechs"].length;
| 137| 137| 		if (nolimit && "RequiredClasses" in this.removers[category])
| 138|    |-			for (var cls of this.removers[category]["RequiredClasses"])
|    | 138|+			for (var cls of this.removers[category].RequiredClasses)
| 139| 139| 				nolimit = nolimit && this.classCount[cls] > 0;
| 140| 140| 
| 141| 141| 		if (nolimit && this.limit[category] !== undefined)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 158| 158| 			"players": [cmpPlayer.GetPlayerID()],
| 159| 159| 			"translateMessage": true,
| 160| 160| 			"translateParameters": ["category"],
| 161|    |-			"parameters": {"category": category, "limit": this.limit[category]},
|    | 161|+			"parameters": { "category": category, "limit": this.limit[category]},
| 162| 162| 		};
| 163| 163| 
| 164| 164| 		if (limitType == BUILD)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 158| 158| 			"players": [cmpPlayer.GetPlayerID()],
| 159| 159| 			"translateMessage": true,
| 160| 160| 			"translateParameters": ["category"],
| 161|    |-			"parameters": {"category": category, "limit": this.limit[category]},
|    | 161|+			"parameters": {"category": category, "limit": this.limit[category] },
| 162| 162| 		};
| 163| 163| 
| 164| 164| 		if (limitType == BUILD)
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredClasses"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 266| 266| 
| 267| 267| 	for (var category in this.removers)
| 268| 268| 		if ("RequiredClasses" in this.removers[category])
| 269|    |-			for (var cls of this.removers[category]["RequiredClasses"])
|    | 269|+			for (var cls of this.removers[category].RequiredClasses)
| 270| 270| 				if (classes.indexOf(cls) !== -1)
| 271| 271| 					this.classCount[cls] += modifier;
| 272| 272| 

binaries/data/mods/public/simulation/components/EntityLimits.js
|  89| »   »   »   for·(var·c·in·this.template.LimitRemovers[category])
|    | [NORMAL] JSHintBear:
|    | 'c' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 124| »   »   if·("RequiredTechs"·in·this.removers[category]·&&·this.removers[category]["RequiredTechs"].indexOf(tech)·!==·-1)
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 125| »   »   »   this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech),·1);
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 125| »   »   »   this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech),·1);
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 136| »   »   »   nolimit·=·!this.removers[category]["RequiredTechs"].length;
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 138| »   »   »   for·(var·cls·of·this.removers[category]["RequiredClasses"])
|    | [NORMAL] JSHintBear:
|    | ['RequiredClasses'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 232| »   »   var·modifier·=·1;
|    | [NORMAL] JSHintBear:
|    | 'modifier' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 257| »   for·(var·category·in·this.changers)
|    | [NORMAL] JSHintBear:
|    | 'category' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 267| »   for·(var·category·in·this.removers)
|    | [NORMAL] JSHintBear:
|    | 'category' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 269| »   »   »   for·(var·cls·of·this.removers[category]["RequiredClasses"])
|    | [NORMAL] JSHintBear:
|    | ['RequiredClasses'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 245| »   »   this.ChangeCount(category,·modifier);
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 262| »   »   »   »   »   this.limit[category]·+=·modifier·*·this.changers[category][c];
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 264| »   »   »   »   »   this.removedLimit[category]·+=·modifier·*·this.changers[category][c];
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 271| »   »   »   »   »   this.classCount[cls]·+=·modifier;
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 214| 214| 		result.message = markForTranslation("%(name)s cannot be built in %(territoryType)s territory. Valid territories: %(validTerritories)s");
| 215| 215| 		result.translateParameters.push("territoryType");
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217|    |-		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
|    | 217|+		result.parameters.territoryType = { "context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219| 219| 		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 214| 214| 		result.message = markForTranslation("%(name)s cannot be built in %(territoryType)s territory. Valid territories: %(validTerritories)s");
| 215| 215| 		result.translateParameters.push("territoryType");
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217|    |-		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
|    | 217|+		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory };
| 218| 218| 		// gui code will join this array to a string
| 219| 219| 		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217| 217| 		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219|    |-		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
|    | 219|+		result.parameters.validTerritories = { "context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
| 221| 221| 	}
| 222| 222| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217| 217| 		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219|    |-		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
|    | 219|+		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories() };
| 220| 220| 		return result;	// Fail
| 221| 221| 	}
| 222| 222| 

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 149| »   »   switch·(ret)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 247| »   »   »   var·cmpIdentity·=·Engine.QueryInterface(id,·IID_Identity);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'cmpIdentity' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 256| »   »   »   »   let·result·=·markForPluralTranslation(
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'result' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 277| »   »   »   »   let·result·=·markForPluralTranslation(
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'result' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 144| »   »   var·ret·=·cmpObstruction.CheckFoundation(passClassName,·false);
|    | [NORMAL] JSHintBear:
|    | 'ret' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 167| »   var·cmpPlayer·=·QueryOwnerInterface(this.entity,·IID_Player);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 241| »   »   var·cmpRangeManager·=·Engine.QueryInterface(SYSTEM_ENTITY,·IID_RangeManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpRangeManager' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 242| »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity,·IID_Player);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 147| »   if·(ret·!=·"success")
|    | [NORMAL] JSHintBear:
|    | 'ret' used out of scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 149| »   »   switch·(ret)
|    | [NORMAL] JSHintBear:
|    | 'ret' used out of scope.
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1500/display/redirect

Nescio updated this revision to Diff 10935.Jan 8 2020, 11:10 PM
Nescio edited the summary of this revision. (Show Details)

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/984/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/985/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/80/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 214| 214| 		result.message = markForTranslation("%(name)s cannot be built in %(territoryType)s territory. Valid territories: %(validTerritories)s");
| 215| 215| 		result.translateParameters.push("territoryType");
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217|    |-		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
|    | 217|+		result.parameters.territoryType = { "context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219| 219| 		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 214| 214| 		result.message = markForTranslation("%(name)s cannot be built in %(territoryType)s territory. Valid territories: %(validTerritories)s");
| 215| 215| 		result.translateParameters.push("territoryType");
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217|    |-		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
|    | 217|+		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory };
| 218| 218| 		// gui code will join this array to a string
| 219| 219| 		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217| 217| 		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219|    |-		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
|    | 219|+		result.parameters.validTerritories = { "context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
| 221| 221| 	}
| 222| 222| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217| 217| 		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219|    |-		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
|    | 219|+		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories() };
| 220| 220| 		return result;	// Fail
| 221| 221| 	}
| 222| 222| 

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 149| »   »   switch·(ret)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 247| »   »   »   var·cmpIdentity·=·Engine.QueryInterface(id,·IID_Identity);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'cmpIdentity' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 256| »   »   »   »   let·result·=·markForPluralTranslation(
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'result' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 277| »   »   »   »   let·result·=·markForPluralTranslation(
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'result' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 144| »   »   var·ret·=·cmpObstruction.CheckFoundation(passClassName,·false);
|    | [NORMAL] JSHintBear:
|    | 'ret' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 167| »   var·cmpPlayer·=·QueryOwnerInterface(this.entity,·IID_Player);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 241| »   »   var·cmpRangeManager·=·Engine.QueryInterface(SYSTEM_ENTITY,·IID_RangeManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpRangeManager' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 242| »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity,·IID_Player);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 147| »   if·(ret·!=·"success")
|    | [NORMAL] JSHintBear:
|    | 'ret' used out of scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 149| »   »   switch·(ret)
|    | [NORMAL] JSHintBear:
|    | 'ret' used out of scope.
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 121| 121| EntityLimits.prototype.UpdateLimitsFromTech = function(tech)
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124|    |-		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
|    | 124|+		if ("RequiredTechs" in this.removers[category] && this.removers[category].RequiredTechs.indexOf(tech) !== -1)
| 125| 125| 			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124| 124| 		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
| 125|    |-			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
|    | 125|+			this.removers[category].RequiredTechs.splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
| 128| 128| };
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124| 124| 		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
| 125|    |-			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
|    | 125|+			this.removers[category]["RequiredTechs"].splice(this.removers[category].RequiredTechs.indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
| 128| 128| };
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 133| 133| 	{
| 134| 134| 		var nolimit = true;
| 135| 135| 		if ("RequiredTechs" in this.removers[category])
| 136|    |-			nolimit = !this.removers[category]["RequiredTechs"].length;
|    | 136|+			nolimit = !this.removers[category].RequiredTechs.length;
| 137| 137| 		if (nolimit && "RequiredClasses" in this.removers[category])
| 138| 138| 			for (var cls of this.removers[category]["RequiredClasses"])
| 139| 139| 				nolimit = nolimit && this.classCount[cls] > 0;
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredClasses"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 135| 135| 		if ("RequiredTechs" in this.removers[category])
| 136| 136| 			nolimit = !this.removers[category]["RequiredTechs"].length;
| 137| 137| 		if (nolimit && "RequiredClasses" in this.removers[category])
| 138|    |-			for (var cls of this.removers[category]["RequiredClasses"])
|    | 138|+			for (var cls of this.removers[category].RequiredClasses)
| 139| 139| 				nolimit = nolimit && this.classCount[cls] > 0;
| 140| 140| 
| 141| 141| 		if (nolimit && this.limit[category] !== undefined)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 158| 158| 			"players": [cmpPlayer.GetPlayerID()],
| 159| 159| 			"translateMessage": true,
| 160| 160| 			"translateParameters": ["category"],
| 161|    |-			"parameters": {"category": category, "limit": this.limit[category]},
|    | 161|+			"parameters": { "category": category, "limit": this.limit[category]},
| 162| 162| 		};
| 163| 163| 
| 164| 164| 		if (limitType == BUILD)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 158| 158| 			"players": [cmpPlayer.GetPlayerID()],
| 159| 159| 			"translateMessage": true,
| 160| 160| 			"translateParameters": ["category"],
| 161|    |-			"parameters": {"category": category, "limit": this.limit[category]},
|    | 161|+			"parameters": {"category": category, "limit": this.limit[category] },
| 162| 162| 		};
| 163| 163| 
| 164| 164| 		if (limitType == BUILD)
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredClasses"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 266| 266| 
| 267| 267| 	for (var category in this.removers)
| 268| 268| 		if ("RequiredClasses" in this.removers[category])
| 269|    |-			for (var cls of this.removers[category]["RequiredClasses"])
|    | 269|+			for (var cls of this.removers[category].RequiredClasses)
| 270| 270| 				if (classes.indexOf(cls) !== -1)
| 271| 271| 					this.classCount[cls] += modifier;
| 272| 272| 

binaries/data/mods/public/simulation/components/EntityLimits.js
|  89| »   »   »   for·(var·c·in·this.template.LimitRemovers[category])
|    | [NORMAL] JSHintBear:
|    | 'c' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 124| »   »   if·("RequiredTechs"·in·this.removers[category]·&&·this.removers[category]["RequiredTechs"].indexOf(tech)·!==·-1)
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 125| »   »   »   this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech),·1);
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 125| »   »   »   this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech),·1);
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 136| »   »   »   nolimit·=·!this.removers[category]["RequiredTechs"].length;
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 138| »   »   »   for·(var·cls·of·this.removers[category]["RequiredClasses"])
|    | [NORMAL] JSHintBear:
|    | ['RequiredClasses'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 232| »   »   var·modifier·=·1;
|    | [NORMAL] JSHintBear:
|    | 'modifier' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 257| »   for·(var·category·in·this.changers)
|    | [NORMAL] JSHintBear:
|    | 'category' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 267| »   for·(var·category·in·this.removers)
|    | [NORMAL] JSHintBear:
|    | 'category' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 269| »   »   »   for·(var·cls·of·this.removers[category]["RequiredClasses"])
|    | [NORMAL] JSHintBear:
|    | ['RequiredClasses'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 245| »   »   this.ChangeCount(category,·modifier);
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 262| »   »   »   »   »   this.limit[category]·+=·modifier·*·this.changers[category][c];
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 264| »   »   »   »   »   this.removedLimit[category]·+=·modifier·*·this.changers[category][c];
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 271| »   »   »   »   »   this.classCount[cls]·+=·modifier;
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1502/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/macos-differential/81/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 121| 121| EntityLimits.prototype.UpdateLimitsFromTech = function(tech)
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124|    |-		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
|    | 124|+		if ("RequiredTechs" in this.removers[category] && this.removers[category].RequiredTechs.indexOf(tech) !== -1)
| 125| 125| 			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124| 124| 		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
| 125|    |-			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
|    | 125|+			this.removers[category].RequiredTechs.splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
| 128| 128| };
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 122| 122| {
| 123| 123| 	for (var category in this.removers)
| 124| 124| 		if ("RequiredTechs" in this.removers[category] && this.removers[category]["RequiredTechs"].indexOf(tech) !== -1)
| 125|    |-			this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech), 1);
|    | 125|+			this.removers[category]["RequiredTechs"].splice(this.removers[category].RequiredTechs.indexOf(tech), 1);
| 126| 126| 
| 127| 127| 	this.UpdateLimitRemoval();
| 128| 128| };
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredTechs"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 133| 133| 	{
| 134| 134| 		var nolimit = true;
| 135| 135| 		if ("RequiredTechs" in this.removers[category])
| 136|    |-			nolimit = !this.removers[category]["RequiredTechs"].length;
|    | 136|+			nolimit = !this.removers[category].RequiredTechs.length;
| 137| 137| 		if (nolimit && "RequiredClasses" in this.removers[category])
| 138| 138| 			for (var cls of this.removers[category]["RequiredClasses"])
| 139| 139| 				nolimit = nolimit && this.classCount[cls] > 0;
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredClasses"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 135| 135| 		if ("RequiredTechs" in this.removers[category])
| 136| 136| 			nolimit = !this.removers[category]["RequiredTechs"].length;
| 137| 137| 		if (nolimit && "RequiredClasses" in this.removers[category])
| 138|    |-			for (var cls of this.removers[category]["RequiredClasses"])
|    | 138|+			for (var cls of this.removers[category].RequiredClasses)
| 139| 139| 				nolimit = nolimit && this.classCount[cls] > 0;
| 140| 140| 
| 141| 141| 		if (nolimit && this.limit[category] !== undefined)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 158| 158| 			"players": [cmpPlayer.GetPlayerID()],
| 159| 159| 			"translateMessage": true,
| 160| 160| 			"translateParameters": ["category"],
| 161|    |-			"parameters": {"category": category, "limit": this.limit[category]},
|    | 161|+			"parameters": { "category": category, "limit": this.limit[category]},
| 162| 162| 		};
| 163| 163| 
| 164| 164| 		if (limitType == BUILD)
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 158| 158| 			"players": [cmpPlayer.GetPlayerID()],
| 159| 159| 			"translateMessage": true,
| 160| 160| 			"translateParameters": ["category"],
| 161|    |-			"parameters": {"category": category, "limit": this.limit[category]},
|    | 161|+			"parameters": {"category": category, "limit": this.limit[category] },
| 162| 162| 		};
| 163| 163| 
| 164| 164| 		if (limitType == BUILD)
|    | [NORMAL] ESLintBear (dot-notation):
|    | ["RequiredClasses"] is better written in dot notation.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/EntityLimits.js
| 266| 266| 
| 267| 267| 	for (var category in this.removers)
| 268| 268| 		if ("RequiredClasses" in this.removers[category])
| 269|    |-			for (var cls of this.removers[category]["RequiredClasses"])
|    | 269|+			for (var cls of this.removers[category].RequiredClasses)
| 270| 270| 				if (classes.indexOf(cls) !== -1)
| 271| 271| 					this.classCount[cls] += modifier;
| 272| 272| 

binaries/data/mods/public/simulation/components/EntityLimits.js
|  89| »   »   »   for·(var·c·in·this.template.LimitRemovers[category])
|    | [NORMAL] JSHintBear:
|    | 'c' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 124| »   »   if·("RequiredTechs"·in·this.removers[category]·&&·this.removers[category]["RequiredTechs"].indexOf(tech)·!==·-1)
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 125| »   »   »   this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech),·1);
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 125| »   »   »   this.removers[category]["RequiredTechs"].splice(this.removers[category]["RequiredTechs"].indexOf(tech),·1);
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 136| »   »   »   nolimit·=·!this.removers[category]["RequiredTechs"].length;
|    | [NORMAL] JSHintBear:
|    | ['RequiredTechs'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 138| »   »   »   for·(var·cls·of·this.removers[category]["RequiredClasses"])
|    | [NORMAL] JSHintBear:
|    | ['RequiredClasses'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 232| »   »   var·modifier·=·1;
|    | [NORMAL] JSHintBear:
|    | 'modifier' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 257| »   for·(var·category·in·this.changers)
|    | [NORMAL] JSHintBear:
|    | 'category' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 267| »   for·(var·category·in·this.removers)
|    | [NORMAL] JSHintBear:
|    | 'category' is already defined.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 269| »   »   »   for·(var·cls·of·this.removers[category]["RequiredClasses"])
|    | [NORMAL] JSHintBear:
|    | ['RequiredClasses'] is better written in dot notation.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 245| »   »   this.ChangeCount(category,·modifier);
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 262| »   »   »   »   »   this.limit[category]·+=·modifier·*·this.changers[category][c];
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 264| »   »   »   »   »   this.removedLimit[category]·+=·modifier·*·this.changers[category][c];
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.

binaries/data/mods/public/simulation/components/EntityLimits.js
| 271| »   »   »   »   »   this.classCount[cls]·+=·modifier;
|    | [NORMAL] JSHintBear:
|    | 'modifier' used out of scope.
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 214| 214| 		result.message = markForTranslation("%(name)s cannot be built in %(territoryType)s territory. Valid territories: %(validTerritories)s");
| 215| 215| 		result.translateParameters.push("territoryType");
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217|    |-		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
|    | 217|+		result.parameters.territoryType = { "context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219| 219| 		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 214| 214| 		result.message = markForTranslation("%(name)s cannot be built in %(territoryType)s territory. Valid territories: %(validTerritories)s");
| 215| 215| 		result.translateParameters.push("territoryType");
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217|    |-		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
|    | 217|+		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory };
| 218| 218| 		// gui code will join this array to a string
| 219| 219| 		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required after '{'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217| 217| 		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219|    |-		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
|    | 219|+		result.parameters.validTerritories = { "context": "Territory type list", "list": this.GetTerritories()};
| 220| 220| 		return result;	// Fail
| 221| 221| 	}
| 222| 222| 
|    | [NORMAL] ESLintBear (object-curly-spacing):
|    | A space is required before '}'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 216| 216| 		result.translateParameters.push("validTerritories");
| 217| 217| 		result.parameters.territoryType = {"context": "Territory type", "message": invalidTerritory};
| 218| 218| 		// gui code will join this array to a string
| 219|    |-		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories()};
|    | 219|+		result.parameters.validTerritories = {"context": "Territory type list", "list": this.GetTerritories() };
| 220| 220| 		return result;	// Fail
| 221| 221| 	}
| 222| 222| 

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 149| »   »   switch·(ret)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 247| »   »   »   var·cmpIdentity·=·Engine.QueryInterface(id,·IID_Identity);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'cmpIdentity' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 256| »   »   »   »   let·result·=·markForPluralTranslation(
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'result' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 277| »   »   »   »   let·result·=·markForPluralTranslation(
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'result' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 144| »   »   var·ret·=·cmpObstruction.CheckFoundation(passClassName,·false);
|    | [NORMAL] JSHintBear:
|    | 'ret' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 167| »   var·cmpPlayer·=·QueryOwnerInterface(this.entity,·IID_Player);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 241| »   »   var·cmpRangeManager·=·Engine.QueryInterface(SYSTEM_ENTITY,·IID_RangeManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpRangeManager' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 242| »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity,·IID_Player);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 147| »   if·(ret·!=·"success")
|    | [NORMAL] JSHintBear:
|    | 'ret' used out of scope.

binaries/data/mods/public/simulation/components/BuildRestrictions.js
| 149| »   »   switch·(ret)
|    | [NORMAL] JSHintBear:
|    | 'ret' used out of scope.
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1503/display/redirect

Angen added inline comments.Jan 9 2020, 7:59 AM
binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_small.xml
35

please keep elements in alphabetic order

Nescio added inline comments.Jan 9 2020, 10:39 AM
binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_small.xml
35

Inside <Entity>, absolutely.
Inside <Identity>, shouldn't elements follow the order specified in the Identity.js component?

Angen resigned from this revision.Feb 19 2020, 10:06 AM