Page MenuHomeWildfire Games

Elaborate Armour.
ClosedPublic

Authored by Freagarach on Aug 25 2019, 10:03 PM.

Details

Reviewers
wraitii
Angen
bb
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Commits
rP24001: Rename Armour to Resistance and change the way it is processed.
Summary

This patch:

  • Puts the armour in nodes (damage types in a damage node).
  • Also adds support for resistance against capture.
  • Armour -> Resistance.
Test Plan

Verify that no node is forgotten.

  • Units_demo loads fine.
  • Armour is applied (effect reduced when hit).
  • Techs apply.
  • Auras apply.
  • PetraAI gets the point (though does not use "capture"-armour (yet)).

Diff Detail

Repository
rP 0 A.D. Public Repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
Freagarach added a comment.EditedJul 24 2020, 4:06 PM

Do not try to use "Shield"-like behaviour yet.

(Note that templates should be put in alphabetical order.)

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (no-multi-spaces):
|    | Multiple spaces found before 'state'.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
| 298| 298| 		if (!g_AvailableFormations.has(unitEntStates[0].player))
| 299| 299| 			g_AvailableFormations.set(unitEntStates[0].player, Engine.GuiInterfaceCall("GetAvailableFormations", unitEntStates[0].player));
| 300| 300| 
| 301|    |-		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity &&  state.identity.formations.indexOf(formation) != -1));
|    | 301|+		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity && state.identity.formations.indexOf(formation) != -1));
| 302| 302| 	},
| 303| 303| 	"setupButton": function(data)
| 304| 304| 	{
|    | [NORMAL] ESLintBear (space-before-function-paren):
|    | Unexpected space before function parentheses.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
| 761| 761| 				addResearchToQueue(data.item.researchFacilityId, t);
| 762| 762| 			})(tech);
| 763| 763| 
| 764|    |-			button.onPressRight = (t => function () {
|    | 764|+			button.onPressRight = (t => function() {
| 765| 765| 				showTemplateDetails(
| 766| 766| 					t,
| 767| 767| 					GetTemplateData(data.unitEntStates.find(state => state.id == data.item.researchFacilityId).template).nativeCiv);

binaries/data/mods/public/gui/session/selection_panels.js
|  50| »   »   »   switch·(data.item)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
|  61| »   »   switch·(data.item)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
| 729| »   »   »   »   »   »   switch·(entity.check)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.
|    | [NORMAL] ESLintBear (no-extra-semi):
|    | Unnecessary semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
| 788| 788| 			let restrictedClasses = this.get("Attack/" + type + "/RestrictedClasses/_string");
| 789| 789| 			if (!restrictedClasses || !MatchesClassList(target.classes(), restrictedClasses))
| 790| 790| 				return true;
| 791|    |-		};
|    | 791|+		}
| 792| 792| 
| 793| 793| 		return false;
| 794| 794| 	},

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 850| »   »   if·(this.position()·!==·undefined)·{
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 867| »   »   if·(this.position()·!==·undefined·&&·unitToFleeFrom.position()·!==·undefined)·{
|    | [NORMAL] ESLintBear (brace-rules/brace-on-same-line):
|    | Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 997| }(API3);
|    | [MAJOR] ESLintBear (no-use-before-define):
|    | 'API3' was used before it was defined.

binaries/data/mods/public/simulation/ai/common-api/entity.js
| 791| »   »   };
|    | [NORMAL] JSHintBear:
|    | Unnecessary semicolon.
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Resistance.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Resistance.js
|  76|  76| 	 */
|  77|  77| 	GetResistanceOfType(resistanceType)
|  78|  78| 	{
|  79|    |-		let ret = {}
|    |  79|+		let ret = {};
|  80|  80| 		let template = this.template[resistanceType];
|  81|  81| 		if (!template)
|  82|  82| 			return ret;
|    | [NORMAL] ESLintBear (no-multi-spaces):
|    | Multiple spaces found before 'ApplyValueModificationsToEntity'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/Resistance.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/Resistance.js
|  89|  89| 		}
|  90|  90| 
|  91|  91| 		if (template.Capture)
|  92|    |-			ret.Capture =  ApplyValueModificationsToEntity("Resistance/" + resistanceType + "/Capture", +this.template[resistanceType].Capture, this.entity);
|    |  92|+			ret.Capture = ApplyValueModificationsToEntity("Resistance/" + resistanceType + "/Capture", +this.template[resistanceType].Capture, this.entity);
|  93|  93| 
|  94|  94| 		return ret;
|  95|  95| 	}

binaries/data/mods/public/simulation/components/Resistance.js
|  79| »   »   let·ret·=·{}
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
Executing section cli...

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

Stan added inline comments.Jul 24 2020, 4:18 PM
binaries/data/mods/public/simulation/components/Resistance.js
15 ↗(On Diff #12887)

Should not happen often, but one might not want to send a message if it didn't change? As done because it's likely out of scope.

wraitii added a comment.EditedJul 25 2020, 11:54 AM

I rather like @bb's suggestion (which you're using now). I think you could skip the "entity" node as was done before, though.

bb requested changes to this revision.Jul 30 2020, 3:26 PM

Vulcan found some stuff in Resistance.js

I think you could skip the "entity" node as was done before, though.

The Entity node has two nice features:

  1. It makes the template and code more natural, no random exception case, but defined forms.
  2. It gets rid of the (not properly ported!!!) exception case that foundation cannot be an attackEffect (used to be damageTypes, but some changes made some inconsistency at some places)
binaries/data/mods/public/simulation/ai/petra/entityExtend.js
56 ↗(On Diff #12887)

Don't really see the purpose of this loop, since we hardcode the types anyhow, so we can access them directly (same comment applies to some other places)

binaries/data/mods/public/simulation/components/Resistance.js
1 ↗(On Diff #12887)

I have noticed some sim components have been implemented in class syntax, however I have my doubts about it. I certainly won't start rewriting stuff into class syntax.

22 ↗(On Diff #12887)

period

44–46 ↗(On Diff #12887)

Understand why, you do it like this. But why do we need the loop here? Seems like we can access the correct form immediately

102 ↗(On Diff #12887)

period

136–141 ↗(On Diff #12887)

Not implemented yet, so shouldn't be in the help yet

This revision now requires changes to proceed.Jul 30 2020, 3:26 PM
Freagarach updated this revision to Diff 13101.Aug 6 2020, 12:38 PM
Freagarach marked 7 inline comments as done.
  • Rebased.
  • Reduced loops.
  • Returned to prototype.
  • Readded need for cmpResistance to be damaged (may be split).
  • Moved a function from cmpAttack to Attacking-helper (may be split).
  • Moved all resistance related stuff from cmpHealth and cmpCapturable to cmpResistance.

Note there there may still be some cleaning left to do, also tests ought to be added.

  • Readded need for cmpResistance to be damaged (may be split).

Mh, I don't really understand why you did this? Seems to me you could just query for Resistance in Attacking and do relevant stuff.
It doesn't really make sense that "Resistance" is required to take damage, only the receiver ought to be required for that.

Other than that the diff generally seems OK, I think centralising resistance in resistance is OK given the schema.

Vulcan added a comment.Aug 6 2020, 1:01 PM

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

Linter detected issues:
Executing section Source...
Executing section JS...
**** ESLintBear (no-multi-spaces) [Section <empty> | Severity NORMAL] ****
!    ! Multiple spaces found before 'state'.
[----] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[++++] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[ 301] 		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity &&  state.identity.formations.indexOf(formation) != -1));
[ 301] 		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity && state.identity.formations.indexOf(formation) != -1));
**** ESLintBear (space-before-function-paren) [Section <empty> | Severity NORMAL] ****
!    ! Unexpected space before function parentheses.
[----] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[++++] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[ 764] 			button.onPressRight = (t => function () {
[ 764] 			button.onPressRight = (t => function() {

binaries/data/mods/public/gui/session/selection_panels.js
[  50] »   »   »   switch·(data.item)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
[  61] »   »   switch·(data.item)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
[ 729] »   »   »   »   »   »   switch·(entity.check)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
[ 116] //new testHandleAttackEffects().testBonusMultiplier();
[ 116] // new testHandleAttackEffects().testBonusMultiplier();
**** ESLintBear (no-extra-semi) [Section <empty> | Severity NORMAL] ****
!    ! Unnecessary semicolon.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 777] 		};
[ 777] 		}

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 836] »   »   if·(this.position()·!==·undefined)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 853] »   »   if·(this.position()·!==·undefined·&&·unitToFleeFrom.position()·!==·undefined)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 983] }(API3);
**** ESLintBear (no-use-before-define) [Section: JS | Severity: MAJOR] ****
!    ! 'API3' was used before it was defined.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 777] »   »   };
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! Unnecessary semicolon.
**** ESLintBear (semi) [Section <empty> | Severity NORMAL] ****
!    ! Missing semicolon.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Attacking.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/Attacking.js
[ 291] 		let cmpResistance = Engine.QueryInterface(ent, IID_Resistance)
[ 291] 		let cmpResistance = Engine.QueryInterface(ent, IID_Resistance);

binaries/data/mods/public/simulation/helpers/Attacking.js
[ 291] »   »   let·cmpResistance·=·Engine.QueryInterface(ent,·IID_Resistance)
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! Missing semicolon.
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[  22] //// Interface functions ////
[  22] // // Interface functions ////
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[ 154] //// Private functions ////
[ 154] // // Private functions ////
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[ 296] //// Message Listeners ////
[ 296] // // Message Listeners ////
Executing section cli...

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

Stan added a comment.Aug 6 2020, 1:17 PM

Small inline

binaries/data/mods/public/simulation/components/Capturable.js
65 ↗(On Diff #13101)

inline ? Maybe the whole function. Wonder if we have to return an object

binaries/data/mods/public/simulation/components/Resistance.js
141 ↗(On Diff #13101)

dependency

binaries/data/mods/public/simulation/components/tests/test_Attack.js
346 ↗(On Diff #13101)

Todo?

Mh, I don't really understand why you did this? Seems to me you could just query for Resistance in Attacking and do relevant stuff.

Answer over IRC -> It's very convenient for e.g. range queries that want to filter entities somehow, but don't know if the target should have health/capture.
I feel like that's a fair point for performance reasons (we could support several interfaces in range queries, but those are already slow...).

That being said -> I think you should move back the functions in Attacking, yet still have a hard dependency on Resistance. We might want to change that in the future, and I don't think e.g. Attack needs to know about that.

Freagarach updated this revision to Diff 13111.Aug 6 2020, 5:51 PM
Freagarach marked 3 inline comments as done.
  • Inlines.
  • Move function back to Attacking.js, though merely as an interface.
  • Split off D2940.
  • Added test.
Vulcan added a comment.Aug 6 2020, 5:59 PM

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

Linter detected issues:
Executing section Source...
Executing section JS...
**** ESLintBear (no-multi-spaces) [Section <empty> | Severity NORMAL] ****
!    ! Multiple spaces found before 'state'.
[----] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[++++] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[ 301] 		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity &&  state.identity.formations.indexOf(formation) != -1));
[ 301] 		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity && state.identity.formations.indexOf(formation) != -1));
**** ESLintBear (space-before-function-paren) [Section <empty> | Severity NORMAL] ****
!    ! Unexpected space before function parentheses.
[----] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[++++] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[ 764] 			button.onPressRight = (t => function () {
[ 764] 			button.onPressRight = (t => function() {

binaries/data/mods/public/gui/session/selection_panels.js
[  50] »   »   »   switch·(data.item)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
[  61] »   »   switch·(data.item)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
[ 729] »   »   »   »   »   »   switch·(entity.check)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
[ 115] //new testHandleAttackEffects().testBonusMultiplier();
[ 115] // new testHandleAttackEffects().testBonusMultiplier();
**** ESLintBear (no-extra-semi) [Section <empty> | Severity NORMAL] ****
!    ! Unnecessary semicolon.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 777] 		};
[ 777] 		}

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 836] »   »   if·(this.position()·!==·undefined)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 853] »   »   if·(this.position()·!==·undefined·&&·unitToFleeFrom.position()·!==·undefined)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 983] }(API3);
**** ESLintBear (no-use-before-define) [Section: JS | Severity: MAJOR] ****
!    ! 'API3' was used before it was defined.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 777] »   »   };
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! Unnecessary semicolon.
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[  22] //// Interface functions ////
[  22] // // Interface functions ////
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[ 153] //// Private functions ////
[ 153] // // Private functions ////
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[ 295] //// Message Listeners ////
[ 295] // // Message Listeners ////
**** ESLintBear (no-multi-spaces) [Section <empty> | Severity NORMAL] ****
!    ! Multiple spaces found before '1'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_Resistance.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_Resistance.js
[ 251] 			"GetMaxHitpoints": () =>  1
[ 251] 			"GetMaxHitpoints": () => 1
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetInterval' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 120] 		SetInterval: function() { },
[ 120] 		"SetInterval": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetTimeout' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 121] 		SetTimeout: function() { },
[ 121] 		"SetTimeout": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CreateActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 125] 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
[ 125] 		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'EnableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 128] 		EnableActiveQuery: function(id) { },
[ 128] 		"EnableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'ResetActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
[ 129] 		"ResetActiveQuery": function(id) { if (mode == 0) return []; else return [enemy]; },
**** ESLintBear (no-else-return) [Section <empty> | Severity NORMAL] ****
!    ! Unnecessary 'else' after 'return'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; return [enemy]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'DisableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 130] 		DisableActiveQuery: function(id) { },
[ 130] 		"DisableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEntityFlagMask' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 131] 		GetEntityFlagMask: function(identifier) { },
[ 131] 		"GetEntityFlagMask": function(identifier) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetCurrentTemplateName' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 135] 		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
[ 135] 		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPlayerByID' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 139] 		GetPlayerByID: function(id) { return playerEntity; },
[ 139] 		"GetPlayerByID": function(id) { return playerEntity; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetNumPlayers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 140] 		GetNumPlayers: function() { return 2; },
[ 140] 		"GetNumPlayers": function() { return 2; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAlly' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 144] 		IsAlly: function() { return false; },
[ 144] 		"IsAlly": function() { return false; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsEnemy' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 145] 		IsEnemy: function() { return true; },
[ 145] 		"IsEnemy": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEnemies' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 146] 		GetEnemies: function() { return [2]; },
[ 146] 		"GetEnemies": function() { return [2]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetClassesList' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 157] 		GetClassesList: function() { return []; },
[ 157] 		"GetClassesList": function() { return []; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetOwner' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 161] 		GetOwner: function() { return 1; },
[ 161] 		"GetOwner": function() { return 1; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 165] 		GetTurretParent: function() { return INVALID_ENTITY; },
[ 165] 		"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 166] 		GetPosition: function() { return new Vector3D(); },
[ 166] 		"GetPosition": function() { return new Vector3D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 167] 		GetPosition2D: function() { return new Vector2D(); },
[ 167] 		"GetPosition2D": function() { return new Vector2D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 168] 		GetRotation: function() { return { "y": 0 }; },
[ 168] 		"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 169] 		IsInWorld: function() { return true; },
[ 169] 		"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 183] 		GetRange: function() { return 10; },
[ 183] 		"GetRange": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 187] 		GetRange: function() { return { "max": 10, "min": 0}; },
[ 187] 		"GetRange": function() { return { "max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 187] 		GetRange: function() { return { "max": 10, "min": 0}; },
[ 187] 		GetRange: function() { return { "max": 10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetFullAttackRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 188] 		"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetBestAttackAgainst' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 189] 		GetBestAttackAgainst: function(t) { return "melee"; },
[ 189] 		"GetBestAttackAgainst": function(t) { return "melee"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 190] 		GetPreference: function(t) { return 0; },
[ 190] 		"GetPreference": function(t) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTimers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 191] 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
[ 191] 		"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttack' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 192] 		CanAttack: function(v) { return true; },
[ 192] 		"CanAttack": function(v) { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CompareEntitiesByPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 193] 		CompareEntitiesByPreference: function(a, b) { return 0; },
[ 193] 		"CompareEntitiesByPreference": function(a, b) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 204] 			GetHitpoints: function() { return 10; },
[ 204] 			"GetHitpoints": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAnimal' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 207] 			IsAnimal: function() { return false; }
[ 207] 			"IsAnimal": function() { return false; }
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 212] 			GetHitpoints: function() { return 0; },
[ 212] 			"GetHitpoints": function() { return 0; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'JumpTo' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 219] 		JumpTo: function(x, z) { this.x = x; this.z = z; },
[ 219] 		"JumpTo": function(x, z) { this.x = x; this.z = z; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 220] 		GetTurretParent: function() { return INVALID_ENTITY; },
[ 220] 		"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 221] 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
[ 221] 		"GetPosition": function() { return new Vector3D(this.x, 0, this.z); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 222] 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
[ 222] 		"GetPosition2D": function() { return new Vector2D(this.x, this.z); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 223] 		GetRotation: function() { return { "y": 0 }; },
[ 223] 		"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 224] 		IsInWorld: function() { return true; },
[ 224] 		"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'MoveOutOfWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 225] 		MoveOutOfWorld: () => {}
[ 225] 		"MoveOutOfWorld": () => {}
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetInterval' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 277] 		SetInterval: function() { },
[ 277] 		"SetInterval": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetTimeout' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 278] 		SetTimeout: function() { },
[ 278] 		"SetTimeout": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CreateActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 283] 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
[ 283] 		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'EnableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 286] 		EnableActiveQuery: function(id) { },
[ 286] 		"EnableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'ResetActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 287] 		ResetActiveQuery: function(id) { return [enemy]; },
[ 287] 		"ResetActiveQuery": function(id) { return [enemy]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'DisableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 288] 		DisableActiveQuery: function(id) { },
[ 288] 		"DisableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEntityFlagMask' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 289] 		GetEntityFlagMask: function(identifier) { },
[ 289] 		"GetEntityFlagMask": function(identifier) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetCurrentTemplateName' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 293] 		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
[ 293] 		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPlayerByID' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 297] 		GetPlayerByID: function(id) { return playerEntity; },
[ 297] 		"GetPlayerByID": function(id) { return playerEntity; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetNumPlayers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 298] 		GetNumPlayers: function() { return 2; },
[ 298] 		"GetNumPlayers": function() { return 2; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAlly' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 306] 		IsAlly: function() { return false; },
[ 306] 		"IsAlly": function() { return false; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsEnemy' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 307] 		IsEnemy: function() { return true; },
[ 307] 		"IsEnemy": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEnemies' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 308] 		GetEnemies: function() { return [2]; },
[ 308] 		"GetEnemies": function() { return [2]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetClassesList' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 319] 			GetClassesList: function() { return []; },
[ 319] 			"GetClassesList": function() { return []; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetOwner' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 323] 			GetOwner: function() { return 1; },
[ 323] 			"GetOwner": function() { return 1; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 327] 			GetTurretParent: function() { return INVALID_ENTITY; },
[ 327] 			"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 328] 			GetPosition: function() { return new Vector3D(); },
[ 328] 			"GetPosition": function() { return new Vector3D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 329] 			GetPosition2D: function() { return new Vector2D(); },
[ 329] 			"GetPosition2D": function() { return new Vector2D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 330] 			GetRotation: function() { return { "y": 0 }; },
[ 330] 			"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 331] 			IsInWorld: function() { return true; },
[ 331] 			"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 345] 			GetRange: function() { return 10; },
[ 345] 			"GetRange": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			"GetRange": function() { return {"max":10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return { "max":10, "min": 0}; },
**** ESLintBear (key-spacing) [Section <empty> | Severity NORMAL] ****
!    ! Missing space before value for key 'max'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return {"max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return {"max":10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetFullAttackRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 350] 			"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetBestAttackAgainst' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 351] 			GetBestAttackAgainst: function(t) { return "melee"; },
[ 351] 			"GetBestAttackAgainst": function(t) { return "melee"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTimers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 352] 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
[ 352] 			"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttack' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 353] 			CanAttack: function(v) { return true; },
[ 353] 			"CanAttack": function(v) { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CompareEntitiesByPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 354] 			CompareEntitiesByPreference: function(a, b) { return 0; },
[ 354] 			"CompareEntitiesByPreference": function(a, b) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 366] 		GetHitpoints: function() { return 40; },
[ 366] 		"GetHitpoints": function() { return 40; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		"GetRange": function() { return {"max":10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return { "max":10, "min": 0}; },
**** ESLintBear (key-spacing) [Section <empty> | Severity NORMAL] ****
!    ! Missing space before value for key 'max'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return {"max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return {"max":10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttackAsFormation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 394] 		CanAttackAsFormation: function() { return false; },
[ 394] 		"CanAttackAsFormation": function() { return false; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle"});
[ 406] 	controllerAI.MoveIntoFormation({ "name": "Circle"});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle"});
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle" });

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] »   »   ResetActiveQuery:·function(id)·{·if·(mode·==·0)·return·[];·else·return·[enemy];·},
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Closing curly brace appears on the same line as the subsequent block.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 312] »   for·(var·i·=·0;·i·<·unitCount;·i++)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 404] »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! 'unitAI' used out of scope.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 413] »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! 'unitAI' used out of scope.
Executing section cli...

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

Freagarach updated this revision to Diff 13113.Aug 6 2020, 6:02 PM
  • Re-add possibility to specify the IID for entities near point in Attacking.js.
binaries/data/mods/public/simulation/components/Capturable.js
65 ↗(On Diff #13101)

Yes, we need the object (see the message sent in cmpResistance).

binaries/data/mods/public/simulation/components/Resistance.js
221 ↗(On Diff #13111)

Since this is just a health-thing, it can perhaps be moved thereto?

Vulcan added a comment.Aug 6 2020, 6:08 PM

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

Linter detected issues:
Executing section Source...
Executing section JS...
**** ESLintBear (no-multi-spaces) [Section <empty> | Severity NORMAL] ****
!    ! Multiple spaces found before 'state'.
[----] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[++++] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[ 301] 		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity &&  state.identity.formations.indexOf(formation) != -1));
[ 301] 		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity && state.identity.formations.indexOf(formation) != -1));
**** ESLintBear (space-before-function-paren) [Section <empty> | Severity NORMAL] ****
!    ! Unexpected space before function parentheses.
[----] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[++++] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[ 764] 			button.onPressRight = (t => function () {
[ 764] 			button.onPressRight = (t => function() {

binaries/data/mods/public/gui/session/selection_panels.js
[  50] »   »   »   switch·(data.item)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
[  61] »   »   switch·(data.item)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
[ 729] »   »   »   »   »   »   switch·(entity.check)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.
**** ESLintBear (no-extra-semi) [Section <empty> | Severity NORMAL] ****
!    ! Unnecessary semicolon.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 777] 		};
[ 777] 		}

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 836] »   »   if·(this.position()·!==·undefined)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 853] »   »   if·(this.position()·!==·undefined·&&·unitToFleeFrom.position()·!==·undefined)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 983] }(API3);
**** ESLintBear (no-use-before-define) [Section: JS | Severity: MAJOR] ****
!    ! 'API3' was used before it was defined.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 777] »   »   };
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! Unnecessary semicolon.
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
[ 115] //new testHandleAttackEffects().testBonusMultiplier();
[ 115] // new testHandleAttackEffects().testBonusMultiplier();
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[  22] //// Interface functions ////
[  22] // // Interface functions ////
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[ 153] //// Private functions ////
[ 153] // // Private functions ////
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[ 295] //// Message Listeners ////
[ 295] // // Message Listeners ////
**** ESLintBear (no-multi-spaces) [Section <empty> | Severity NORMAL] ****
!    ! Multiple spaces found before '1'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_Resistance.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_Resistance.js
[ 251] 			"GetMaxHitpoints": () =>  1
[ 251] 			"GetMaxHitpoints": () => 1
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetInterval' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 120] 		SetInterval: function() { },
[ 120] 		"SetInterval": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetTimeout' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 121] 		SetTimeout: function() { },
[ 121] 		"SetTimeout": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CreateActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 125] 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
[ 125] 		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'EnableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 128] 		EnableActiveQuery: function(id) { },
[ 128] 		"EnableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'ResetActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
[ 129] 		"ResetActiveQuery": function(id) { if (mode == 0) return []; else return [enemy]; },
**** ESLintBear (no-else-return) [Section <empty> | Severity NORMAL] ****
!    ! Unnecessary 'else' after 'return'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; return [enemy]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'DisableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 130] 		DisableActiveQuery: function(id) { },
[ 130] 		"DisableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEntityFlagMask' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 131] 		GetEntityFlagMask: function(identifier) { },
[ 131] 		"GetEntityFlagMask": function(identifier) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetCurrentTemplateName' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 135] 		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
[ 135] 		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPlayerByID' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 139] 		GetPlayerByID: function(id) { return playerEntity; },
[ 139] 		"GetPlayerByID": function(id) { return playerEntity; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetNumPlayers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 140] 		GetNumPlayers: function() { return 2; },
[ 140] 		"GetNumPlayers": function() { return 2; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAlly' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 144] 		IsAlly: function() { return false; },
[ 144] 		"IsAlly": function() { return false; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsEnemy' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 145] 		IsEnemy: function() { return true; },
[ 145] 		"IsEnemy": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEnemies' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 146] 		GetEnemies: function() { return [2]; },
[ 146] 		"GetEnemies": function() { return [2]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetClassesList' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 157] 		GetClassesList: function() { return []; },
[ 157] 		"GetClassesList": function() { return []; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetOwner' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 161] 		GetOwner: function() { return 1; },
[ 161] 		"GetOwner": function() { return 1; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 165] 		GetTurretParent: function() { return INVALID_ENTITY; },
[ 165] 		"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 166] 		GetPosition: function() { return new Vector3D(); },
[ 166] 		"GetPosition": function() { return new Vector3D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 167] 		GetPosition2D: function() { return new Vector2D(); },
[ 167] 		"GetPosition2D": function() { return new Vector2D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 168] 		GetRotation: function() { return { "y": 0 }; },
[ 168] 		"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 169] 		IsInWorld: function() { return true; },
[ 169] 		"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 183] 		GetRange: function() { return 10; },
[ 183] 		"GetRange": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 187] 		GetRange: function() { return { "max": 10, "min": 0}; },
[ 187] 		"GetRange": function() { return { "max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 187] 		GetRange: function() { return { "max": 10, "min": 0}; },
[ 187] 		GetRange: function() { return { "max": 10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetFullAttackRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 188] 		"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetBestAttackAgainst' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 189] 		GetBestAttackAgainst: function(t) { return "melee"; },
[ 189] 		"GetBestAttackAgainst": function(t) { return "melee"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 190] 		GetPreference: function(t) { return 0; },
[ 190] 		"GetPreference": function(t) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTimers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 191] 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
[ 191] 		"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttack' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 192] 		CanAttack: function(v) { return true; },
[ 192] 		"CanAttack": function(v) { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CompareEntitiesByPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 193] 		CompareEntitiesByPreference: function(a, b) { return 0; },
[ 193] 		"CompareEntitiesByPreference": function(a, b) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 204] 			GetHitpoints: function() { return 10; },
[ 204] 			"GetHitpoints": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAnimal' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 207] 			IsAnimal: function() { return false; }
[ 207] 			"IsAnimal": function() { return false; }
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 212] 			GetHitpoints: function() { return 0; },
[ 212] 			"GetHitpoints": function() { return 0; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'JumpTo' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 219] 		JumpTo: function(x, z) { this.x = x; this.z = z; },
[ 219] 		"JumpTo": function(x, z) { this.x = x; this.z = z; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 220] 		GetTurretParent: function() { return INVALID_ENTITY; },
[ 220] 		"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 221] 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
[ 221] 		"GetPosition": function() { return new Vector3D(this.x, 0, this.z); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 222] 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
[ 222] 		"GetPosition2D": function() { return new Vector2D(this.x, this.z); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 223] 		GetRotation: function() { return { "y": 0 }; },
[ 223] 		"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 224] 		IsInWorld: function() { return true; },
[ 224] 		"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'MoveOutOfWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 225] 		MoveOutOfWorld: () => {}
[ 225] 		"MoveOutOfWorld": () => {}
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetInterval' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 277] 		SetInterval: function() { },
[ 277] 		"SetInterval": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetTimeout' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 278] 		SetTimeout: function() { },
[ 278] 		"SetTimeout": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CreateActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 283] 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
[ 283] 		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'EnableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 286] 		EnableActiveQuery: function(id) { },
[ 286] 		"EnableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'ResetActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 287] 		ResetActiveQuery: function(id) { return [enemy]; },
[ 287] 		"ResetActiveQuery": function(id) { return [enemy]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'DisableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 288] 		DisableActiveQuery: function(id) { },
[ 288] 		"DisableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEntityFlagMask' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 289] 		GetEntityFlagMask: function(identifier) { },
[ 289] 		"GetEntityFlagMask": function(identifier) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetCurrentTemplateName' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 293] 		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
[ 293] 		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPlayerByID' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 297] 		GetPlayerByID: function(id) { return playerEntity; },
[ 297] 		"GetPlayerByID": function(id) { return playerEntity; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetNumPlayers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 298] 		GetNumPlayers: function() { return 2; },
[ 298] 		"GetNumPlayers": function() { return 2; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAlly' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 306] 		IsAlly: function() { return false; },
[ 306] 		"IsAlly": function() { return false; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsEnemy' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 307] 		IsEnemy: function() { return true; },
[ 307] 		"IsEnemy": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEnemies' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 308] 		GetEnemies: function() { return [2]; },
[ 308] 		"GetEnemies": function() { return [2]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetClassesList' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 319] 			GetClassesList: function() { return []; },
[ 319] 			"GetClassesList": function() { return []; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetOwner' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 323] 			GetOwner: function() { return 1; },
[ 323] 			"GetOwner": function() { return 1; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 327] 			GetTurretParent: function() { return INVALID_ENTITY; },
[ 327] 			"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 328] 			GetPosition: function() { return new Vector3D(); },
[ 328] 			"GetPosition": function() { return new Vector3D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 329] 			GetPosition2D: function() { return new Vector2D(); },
[ 329] 			"GetPosition2D": function() { return new Vector2D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 330] 			GetRotation: function() { return { "y": 0 }; },
[ 330] 			"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 331] 			IsInWorld: function() { return true; },
[ 331] 			"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 345] 			GetRange: function() { return 10; },
[ 345] 			"GetRange": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			"GetRange": function() { return {"max":10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return { "max":10, "min": 0}; },
**** ESLintBear (key-spacing) [Section <empty> | Severity NORMAL] ****
!    ! Missing space before value for key 'max'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return {"max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return {"max":10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetFullAttackRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 350] 			"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetBestAttackAgainst' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 351] 			GetBestAttackAgainst: function(t) { return "melee"; },
[ 351] 			"GetBestAttackAgainst": function(t) { return "melee"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTimers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 352] 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
[ 352] 			"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttack' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 353] 			CanAttack: function(v) { return true; },
[ 353] 			"CanAttack": function(v) { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CompareEntitiesByPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 354] 			CompareEntitiesByPreference: function(a, b) { return 0; },
[ 354] 			"CompareEntitiesByPreference": function(a, b) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 366] 		GetHitpoints: function() { return 40; },
[ 366] 		"GetHitpoints": function() { return 40; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		"GetRange": function() { return {"max":10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return { "max":10, "min": 0}; },
**** ESLintBear (key-spacing) [Section <empty> | Severity NORMAL] ****
!    ! Missing space before value for key 'max'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return {"max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return {"max":10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttackAsFormation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 394] 		CanAttackAsFormation: function() { return false; },
[ 394] 		"CanAttackAsFormation": function() { return false; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle"});
[ 406] 	controllerAI.MoveIntoFormation({ "name": "Circle"});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle"});
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle" });

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] »   »   ResetActiveQuery:·function(id)·{·if·(mode·==·0)·return·[];·else·return·[enemy];·},
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Closing curly brace appears on the same line as the subsequent block.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 312] »   for·(var·i·=·0;·i·<·unitCount;·i++)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 404] »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! 'unitAI' used out of scope.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 413] »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! 'unitAI' used out of scope.
Executing section cli...

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

Freagarach updated this revision to Diff 13115.Aug 6 2020, 6:14 PM

Fix extra this.entity in cmpResistance.

wraitii added inline comments.Aug 6 2020, 6:15 PM
binaries/data/mods/public/simulation/components/Resistance.js
221 ↗(On Diff #13111)

Didn't it use to be there? I think it's better in Health yeah.

Vulcan added a comment.Aug 6 2020, 6:20 PM

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

Linter detected issues:
Executing section Source...
Executing section JS...
**** ESLintBear (no-multi-spaces) [Section <empty> | Severity NORMAL] ****
!    ! Multiple spaces found before 'state'.
[----] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[++++] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[ 301] 		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity &&  state.identity.formations.indexOf(formation) != -1));
[ 301] 		return g_AvailableFormations.get(unitEntStates[0].player).filter(formation => unitEntStates.some(state => !!state.identity && state.identity.formations.indexOf(formation) != -1));
**** ESLintBear (space-before-function-paren) [Section <empty> | Severity NORMAL] ****
!    ! Unexpected space before function parentheses.
[----] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[++++] /zpool0/trunk/binaries/data/mods/public/gui/session/selection_panels.js
[ 764] 			button.onPressRight = (t => function () {
[ 764] 			button.onPressRight = (t => function() {

binaries/data/mods/public/gui/session/selection_panels.js
[  50] »   »   »   switch·(data.item)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
[  61] »   »   switch·(data.item)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.

binaries/data/mods/public/gui/session/selection_panels.js
[ 729] »   »   »   »   »   »   switch·(entity.check)
**** ESLintBear (default-case) [Section: JS | Severity: NORMAL] ****
!    ! Expected a default case.
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
[ 115] //new testHandleAttackEffects().testBonusMultiplier();
[ 115] // new testHandleAttackEffects().testBonusMultiplier();
**** ESLintBear (no-extra-semi) [Section <empty> | Severity NORMAL] ****
!    ! Unnecessary semicolon.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 777] 		};
[ 777] 		}

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 836] »   »   if·(this.position()·!==·undefined)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 853] »   »   if·(this.position()·!==·undefined·&&·unitToFleeFrom.position()·!==·undefined)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 983] }(API3);
**** ESLintBear (no-use-before-define) [Section: JS | Severity: MAJOR] ****
!    ! 'API3' was used before it was defined.

binaries/data/mods/public/simulation/ai/common-api/entity.js
[ 777] »   »   };
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! Unnecessary semicolon.
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[  22] //// Interface functions ////
[  22] // // Interface functions ////
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[ 153] //// Private functions ////
[ 153] // // Private functions ////
**** ESLintBear (spaced-comment) [Section <empty> | Severity NORMAL] ****
!    ! Expected space or tab after '//' in comment.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/Capturable.js
[ 295] //// Message Listeners ////
[ 295] // // Message Listeners ////
**** ESLintBear (no-multi-spaces) [Section <empty> | Severity NORMAL] ****
!    ! Multiple spaces found before '1'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_Resistance.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_Resistance.js
[ 251] 			"GetMaxHitpoints": () =>  1
[ 251] 			"GetMaxHitpoints": () => 1
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetInterval' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 120] 		SetInterval: function() { },
[ 120] 		"SetInterval": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetTimeout' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 121] 		SetTimeout: function() { },
[ 121] 		"SetTimeout": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CreateActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 125] 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
[ 125] 		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'EnableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 128] 		EnableActiveQuery: function(id) { },
[ 128] 		"EnableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'ResetActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
[ 129] 		"ResetActiveQuery": function(id) { if (mode == 0) return []; else return [enemy]; },
**** ESLintBear (no-else-return) [Section <empty> | Severity NORMAL] ****
!    ! Unnecessary 'else' after 'return'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; else return [enemy]; },
[ 129] 		ResetActiveQuery: function(id) { if (mode == 0) return []; return [enemy]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'DisableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 130] 		DisableActiveQuery: function(id) { },
[ 130] 		"DisableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEntityFlagMask' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 131] 		GetEntityFlagMask: function(identifier) { },
[ 131] 		"GetEntityFlagMask": function(identifier) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetCurrentTemplateName' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 135] 		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
[ 135] 		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPlayerByID' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 139] 		GetPlayerByID: function(id) { return playerEntity; },
[ 139] 		"GetPlayerByID": function(id) { return playerEntity; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetNumPlayers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 140] 		GetNumPlayers: function() { return 2; },
[ 140] 		"GetNumPlayers": function() { return 2; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAlly' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 144] 		IsAlly: function() { return false; },
[ 144] 		"IsAlly": function() { return false; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsEnemy' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 145] 		IsEnemy: function() { return true; },
[ 145] 		"IsEnemy": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEnemies' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 146] 		GetEnemies: function() { return [2]; },
[ 146] 		"GetEnemies": function() { return [2]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetClassesList' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 157] 		GetClassesList: function() { return []; },
[ 157] 		"GetClassesList": function() { return []; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetOwner' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 161] 		GetOwner: function() { return 1; },
[ 161] 		"GetOwner": function() { return 1; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 165] 		GetTurretParent: function() { return INVALID_ENTITY; },
[ 165] 		"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 166] 		GetPosition: function() { return new Vector3D(); },
[ 166] 		"GetPosition": function() { return new Vector3D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 167] 		GetPosition2D: function() { return new Vector2D(); },
[ 167] 		"GetPosition2D": function() { return new Vector2D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 168] 		GetRotation: function() { return { "y": 0 }; },
[ 168] 		"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 169] 		IsInWorld: function() { return true; },
[ 169] 		"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 183] 		GetRange: function() { return 10; },
[ 183] 		"GetRange": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 187] 		GetRange: function() { return { "max": 10, "min": 0}; },
[ 187] 		"GetRange": function() { return { "max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 187] 		GetRange: function() { return { "max": 10, "min": 0}; },
[ 187] 		GetRange: function() { return { "max": 10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetFullAttackRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 188] 		"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 188] 		GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetBestAttackAgainst' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 189] 		GetBestAttackAgainst: function(t) { return "melee"; },
[ 189] 		"GetBestAttackAgainst": function(t) { return "melee"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 190] 		GetPreference: function(t) { return 0; },
[ 190] 		"GetPreference": function(t) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTimers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 191] 		GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
[ 191] 		"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttack' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 192] 		CanAttack: function(v) { return true; },
[ 192] 		"CanAttack": function(v) { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CompareEntitiesByPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 193] 		CompareEntitiesByPreference: function(a, b) { return 0; },
[ 193] 		"CompareEntitiesByPreference": function(a, b) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 204] 			GetHitpoints: function() { return 10; },
[ 204] 			"GetHitpoints": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAnimal' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 207] 			IsAnimal: function() { return false; }
[ 207] 			"IsAnimal": function() { return false; }
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 212] 			GetHitpoints: function() { return 0; },
[ 212] 			"GetHitpoints": function() { return 0; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 215] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'JumpTo' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 219] 		JumpTo: function(x, z) { this.x = x; this.z = z; },
[ 219] 		"JumpTo": function(x, z) { this.x = x; this.z = z; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 220] 		GetTurretParent: function() { return INVALID_ENTITY; },
[ 220] 		"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 221] 		GetPosition: function() { return new Vector3D(this.x, 0, this.z); },
[ 221] 		"GetPosition": function() { return new Vector3D(this.x, 0, this.z); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 222] 		GetPosition2D: function() { return new Vector2D(this.x, this.z); },
[ 222] 		"GetPosition2D": function() { return new Vector2D(this.x, this.z); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 223] 		GetRotation: function() { return { "y": 0 }; },
[ 223] 		"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 224] 		IsInWorld: function() { return true; },
[ 224] 		"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'MoveOutOfWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 225] 		MoveOutOfWorld: () => {}
[ 225] 		"MoveOutOfWorld": () => {}
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetInterval' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 277] 		SetInterval: function() { },
[ 277] 		"SetInterval": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'SetTimeout' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 278] 		SetTimeout: function() { },
[ 278] 		"SetTimeout": function() { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CreateActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 283] 		CreateActiveQuery: function(ent, minRange, maxRange, players, iid, flags) {
[ 283] 		"CreateActiveQuery": function(ent, minRange, maxRange, players, iid, flags) {
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'EnableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 286] 		EnableActiveQuery: function(id) { },
[ 286] 		"EnableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'ResetActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 287] 		ResetActiveQuery: function(id) { return [enemy]; },
[ 287] 		"ResetActiveQuery": function(id) { return [enemy]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'DisableActiveQuery' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 288] 		DisableActiveQuery: function(id) { },
[ 288] 		"DisableActiveQuery": function(id) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEntityFlagMask' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 289] 		GetEntityFlagMask: function(identifier) { },
[ 289] 		"GetEntityFlagMask": function(identifier) { },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetCurrentTemplateName' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 293] 		GetCurrentTemplateName: function(ent) { return "special/formations/line_closed"; },
[ 293] 		"GetCurrentTemplateName": function(ent) { return "special/formations/line_closed"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPlayerByID' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 297] 		GetPlayerByID: function(id) { return playerEntity; },
[ 297] 		"GetPlayerByID": function(id) { return playerEntity; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetNumPlayers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 298] 		GetNumPlayers: function() { return 2; },
[ 298] 		"GetNumPlayers": function() { return 2; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsAlly' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 306] 		IsAlly: function() { return false; },
[ 306] 		"IsAlly": function() { return false; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsEnemy' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 307] 		IsEnemy: function() { return true; },
[ 307] 		"IsEnemy": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetEnemies' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 308] 		GetEnemies: function() { return [2]; },
[ 308] 		"GetEnemies": function() { return [2]; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetClassesList' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 319] 			GetClassesList: function() { return []; },
[ 319] 			"GetClassesList": function() { return []; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetOwner' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 323] 			GetOwner: function() { return 1; },
[ 323] 			"GetOwner": function() { return 1; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTurretParent' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 327] 			GetTurretParent: function() { return INVALID_ENTITY; },
[ 327] 			"GetTurretParent": function() { return INVALID_ENTITY; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 328] 			GetPosition: function() { return new Vector3D(); },
[ 328] 			"GetPosition": function() { return new Vector3D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetPosition2D' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 329] 			GetPosition2D: function() { return new Vector2D(); },
[ 329] 			"GetPosition2D": function() { return new Vector2D(); },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRotation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 330] 			GetRotation: function() { return { "y": 0 }; },
[ 330] 			"GetRotation": function() { return { "y": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'IsInWorld' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 331] 			IsInWorld: function() { return true; },
[ 331] 			"IsInWorld": function() { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 345] 			GetRange: function() { return 10; },
[ 345] 			"GetRange": function() { return 10; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			"GetRange": function() { return {"max":10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return { "max":10, "min": 0}; },
**** ESLintBear (key-spacing) [Section <empty> | Severity NORMAL] ****
!    ! Missing space before value for key 'max'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return {"max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 349] 			GetRange: function() { return {"max":10, "min": 0}; },
[ 349] 			GetRange: function() { return {"max":10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetFullAttackRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 350] 			"GetFullAttackRange": function() { return { "max": 40, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0}; },
[ 350] 			GetFullAttackRange: function() { return { "max": 40, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetBestAttackAgainst' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 351] 			GetBestAttackAgainst: function(t) { return "melee"; },
[ 351] 			"GetBestAttackAgainst": function(t) { return "melee"; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetTimers' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 352] 			GetTimers: function() { return { "prepare": 500, "repeat": 1000 }; },
[ 352] 			"GetTimers": function() { return { "prepare": 500, "repeat": 1000 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttack' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 353] 			CanAttack: function(v) { return true; },
[ 353] 			"CanAttack": function(v) { return true; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CompareEntitiesByPreference' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 354] 			CompareEntitiesByPreference: function(a, b) { return 0; },
[ 354] 			"CompareEntitiesByPreference": function(a, b) { return 0; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetHitpoints' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 366] 		GetHitpoints: function() { return 40; },
[ 366] 		"GetHitpoints": function() { return 40; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", { "FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0});
[ 369] 	var controllerFormation = ConstructComponent(controller, "Formation", {"FormationName": "Line Closed", "FormationShape": "square", "ShiftRows": "false", "SortingClasses": "", "WidthDepthRatio": 1, "UnitSeparationWidthMultiplier": 1, "UnitSeparationDepthMultiplier": 1, "SpeedMultiplier": 1, "Sloppyness": 0 });
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'GetRange' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		"GetRange": function() { return {"max":10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return { "max":10, "min": 0}; },
**** ESLintBear (key-spacing) [Section <empty> | Severity NORMAL] ****
!    ! Missing space before value for key 'max'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return {"max": 10, "min": 0}; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 393] 		GetRange: function() { return {"max":10, "min": 0}; },
[ 393] 		GetRange: function() { return {"max":10, "min": 0 }; },
**** ESLintBear (quote-props) [Section <empty> | Severity NORMAL] ****
!    ! Unquoted property 'CanAttackAsFormation' found.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 394] 		CanAttackAsFormation: function() { return false; },
[ 394] 		"CanAttackAsFormation": function() { return false; },
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required after '{'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle"});
[ 406] 	controllerAI.MoveIntoFormation({ "name": "Circle"});
**** ESLintBear (object-curly-spacing) [Section <empty> | Severity NORMAL] ****
!    ! A space is required before '}'.
[----] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[++++] /zpool0/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle"});
[ 406] 	controllerAI.MoveIntoFormation({"name": "Circle" });

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 129] »   »   ResetActiveQuery:·function(id)·{·if·(mode·==·0)·return·[];·else·return·[enemy];·},
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Closing curly brace appears on the same line as the subsequent block.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 312] »   for·(var·i·=·0;·i·<·unitCount;·i++)·{
**** ESLintBear (brace-rules/brace-on-same-line) [Section: JS | Severity: NORMAL] ****
!    ! Opening curly brace appears on the same line as controlling statement.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 404] »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! 'unitAI' used out of scope.

binaries/data/mods/public/simulation/components/tests/test_UnitAI.js
[ 413] »   »   TS_ASSERT_EQUALS(unitAI.fsmStateName,·"INDIVIDUAL.COMBAT.ATTACKING");
**** JSHintBear [Section: JS | Severity: NORMAL] ****
!    ! 'unitAI' used out of scope.
Executing section cli...

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

Freagarach marked an inline comment as done.Aug 6 2020, 7:11 PM
Freagarach added inline comments.
binaries/data/mods/public/simulation/components/Resistance.js
221 ↗(On Diff #13111)
Freagarach marked an inline comment as done.Aug 6 2020, 7:14 PM
Freagarach added inline comments.
binaries/data/mods/public/simulation/components/tests/test_Resistance.js
251 ↗(On Diff #13115)

-

binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js
115 ↗(On Diff #13115)

Update.

Freagarach updated this revision to Diff 13174.EditedAug 11 2020, 7:02 PM
  • Rebased.
  • Remove extra space.
  • Update test_Attacking.js.

I think you missed something in the rebased, TargetKilled is still in Resistance.

I'm wondering if <Entity> shouldn't be a compulsory tag for simplicity.

The rest looks generally fine. I'll test a bit later.

binaries/data/mods/public/simulation/components/GuiInterface.js
459 ↗(On Diff #13174)

Think I'd rather you called different functions directly.

I'm wondering if <Entity> shouldn't be a compulsory tag for simplicity.

I don't think <Entity> should be compulsory. If an entity doesn't have resistance, but can be attacked still. Or one should introduce an Attackable component and use that in range queries and the like. Would make sense. (Then resistance wouldn't be compulsory either.)

I'm wondering if <Entity> shouldn't be a compulsory tag for simplicity.

I don't think <Entity> should be compulsory. If an entity doesn't have resistance, but can be attacked still. Or one should introduce an Attackable component and use that in range queries and the like. Would make sense. (Then resistance wouldn't be compulsory either.)

yeah, but a component as strictly a "hint" to the game is kinda ugly :/ .
My point is that <Entity> could be made "zeroOrMore" instead of "OneOrMore", and then you could always have Entity, but occasionally empty. It moves the "checks" down the line and might make for slightly cleaner code.

yeah, but a component as strictly a "hint" to the game is kinda ugly :/ .

But the nice part is that it could be used beyond that (attack spreading, D2129 etc.).

  • Move handeling functions back to Attacking.js-helper as per @wraitii's request.
  • Rebased.

yeah, but a component as strictly a "hint" to the game is kinda ugly :/ .

(See Garrisonable.js as it stands now.)

bb accepted this revision.Aug 24 2020, 2:01 PM

Looks good to me, only a few small issues:

test_Attacking appears to have some weird line-endings, please do svn propset svn:eol-style native binaries/data/mods/public/simulation/helpers/tests/test_Attacking.js before committing.

binaries/data/mods/_test.sim/simulation/templates/special/filter/foundation.xml still has an armour node

PetraAI gets the point (though does not use "capture"-armour (yet)).

Petra should use this info in a function called "allowCapture" or so, deciding when to capture and damage. Maybe for another patch

binaries/data/mods/public/gui/common/tooltips.js
173 ↗(On Diff #13174)

Not sure if we really need this variable, used a couple of times, meh

182 ↗(On Diff #13274)

IIRC all other tooltips have the : in headerfont and translation too.

binaries/data/mods/public/simulation/components/DelayedDamage.js
68 ↗(On Diff #13274)

Why remove?

binaries/data/mods/public/simulation/components/Health.js
185 ↗(On Diff #13274)

@returns {Object} - Object of the form { "healthChange": number }.

binaries/data/mods/public/simulation/components/Resistance.js
77 ↗(On Diff #13274)
105 ↗(On Diff #13274)

(yes, we should teach this to the linter)

binaries/data/mods/public/simulation/components/interfaces/Resistance.js
17 ↗(On Diff #13274)
binaries/data/mods/public/simulation/components/tests/test_Resistance.js
21 ↗(On Diff #13274)

this.PlayerID ?

same for the others

233–234 ↗(On Diff #13274)

One could name them captureSpy and damageSpy if interested

binaries/data/mods/public/simulation/helpers/Attacking.js
173 ↗(On Diff #13274)
336 ↗(On Diff #13274)
binaries/data/mods/public/simulation/templates/template_structure.xml
11 ↗(On Diff #13274)

This basically nerfs capture by 65%, not sure if that is intented...

This revision is now accepted and ready to land.Aug 24 2020, 2:01 PM
Freagarach updated this revision to Diff 13277.Aug 24 2020, 2:36 PM
Freagarach marked 12 inline comments as done.

Inlines.

I'll let this linger for a short while for people to take a closer look.
ToDo before committing:

  • svn propset on test_Attacking.js.
  • Run templatessorter.
Freagarach updated this revision to Diff 13278.Aug 24 2020, 2:44 PM

No ALL_CAPS in test_Resistance.js.

I think you should go ahead and merge this before rebasing introduces bugs.

Freagarach added a comment.EditedThu, Aug 27, 12:06 PM

I wanted to do that but noticed it needed a rebase and I wanted to let the bots run over it ^^

[EDIT]: I'll run the templatessorter after I've committed this.

This revision was automatically updated to reflect the committed changes.
Freagarach marked an inline comment as done.

Thanks for the reviewing all :)

I wanted to do that but noticed it needed a rebase and I wanted to let the bots run over it ^^

Good call :)
(I generally mention it)