As mentioned in #5199, when one presses the StartGame button twice, the game can be loaded with different RNGs (as launchGame computes and distributes the RNG).
As mentioned in #5206, it also copies over wrong playernames.
As mentioned by temple on irc 2018-06-04, it results in the TriggerScript list being duplicated.
It also triggers an FSM error.
Details
- Reviewers
wraitii - Commits
- rP21843: Prevent calling the JS gamestart function twice when doubleclicking on the…
- Trac Tickets
- #5199
#5206
Execute launchGame(); launchGame(); to simulate the doubleclick if not quick enough. Should we do C++ changes instead to prevent SetNetworkGameAttributes calls after GameStart?
(It sounds like we may want to do that some day.) Adding a test that we didn't start the game yet to StartNetworkGame may be possible too.
Diff Detail
- Repository
- rP 0 A.D. Public Repository
- Branch
- /ps/trunk
- Lint
Lint OK - Unit
No Unit Test Coverage - Build Status
Buildable 6221 Build 10332: Vulcan Build Jenkins Build 10331: arc lint + arc unit
Event Timeline
Successful build - Chance fights ever on the side of the prudent.
Linter detected issues: Executing section Default... Executing section Source... Executing section JS... | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 62| 62| var g_RomanNumbers = [undefined, "I", "II", "III", "IV", "V", "VI", "VII", "VIII"]; | 63| 63| | 64| 64| var g_PlayerTeamList = prepareForDropdown([{ | 65| |- "label": translateWithContext("team", "None"), | | 65|+ "label": translateWithContext("team", "None"), | 66| 66| "id": -1 | 67| 67| }].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 63| 63| | 64| 64| var g_PlayerTeamList = prepareForDropdown([{ | 65| 65| "label": translateWithContext("team", "None"), | 66| |- "id": -1 | | 66|+ "id": -1 | 67| 67| }].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | | [NORMAL] ESLintBear (indent): | | Expected indentation of 0 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 64| 64| var g_PlayerTeamList = prepareForDropdown([{ | 65| 65| "label": translateWithContext("team", "None"), | 66| 66| "id": -1 | 67| |- }].concat( | | 67|+}].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | 70| 70| "id": i | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 65| 65| "label": translateWithContext("team", "None"), | 66| 66| "id": -1 | 67| 67| }].concat( | 68| |- Array(g_MaxTeams).fill(0).map((v, i) => ({ | | 68|+ Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | 70| 70| "id": i | 71| 71| })) | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 66| 66| "id": -1 | 67| 67| }].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| |- "label": i + 1, | | 69|+ "label": i + 1, | 70| 70| "id": i | 71| 71| })) | 72| 72| ) | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 67| 67| }].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | 70| |- "id": i | | 70|+ "id": i | 71| 71| })) | 72| 72| ) | 73| 73| ); | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | 70| 70| "id": i | 71| |- })) | | 71|+ })) | 72| 72| ) | 73| 73| ); | 74| 74| | | [NORMAL] ESLintBear (indent): | | Expected indentation of 0 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 69| 69| "label": i + 1, | 70| 70| "id": i | 71| 71| })) | 72| |- ) | | 72|+) | 73| 73| ); | 74| 74| | 75| 75| /** | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 78| 78| var g_RelicCountList = Object.keys(g_CivData).map((civ, i) => i + 1); | 79| 79| | 80| 80| var g_PlayerCivList = g_CivData && prepareForDropdown([{ | 81| |- "name": translateWithContext("civilization", "Random"), | | 81|+ "name": translateWithContext("civilization", "Random"), | 82| 82| "tooltip": translate("Picks one civilization at random when the game starts."), | 83| 83| "color": g_ColorRandom, | 84| 84| "code": "random" | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 79| 79| | 80| 80| var g_PlayerCivList = g_CivData && prepareForDropdown([{ | 81| 81| "name": translateWithContext("civilization", "Random"), | 82| |- "tooltip": translate("Picks one civilization at random when the game starts."), | | 82|+ "tooltip": translate("Picks one civilization at random when the game starts."), | 83| 83| "color": g_ColorRandom, | 84| 84| "code": "random" | 85| 85| }].concat( | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 80| 80| var g_PlayerCivList = g_CivData && prepareForDropdown([{ | 81| 81| "name": translateWithContext("civilization", "Random"), | 82| 82| "tooltip": translate("Picks one civilization at random when the game starts."), | 83| |- "color": g_ColorRandom, | | 83|+ "color": g_ColorRandom, | 84| 84| "code": "random" | 85| 85| }].concat( | 86| 86| Object.keys(g_CivData).filter( | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 81| 81| "name": translateWithContext("civilization", "Random"), | 82| 82| "tooltip": translate("Picks one civilization at random when the game starts."), | 83| 83| "color": g_ColorRandom, | 84| |- "code": "random" | | 84|+ "code": "random" | 85| 85| }].concat( | 86| 86| Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | | [NORMAL] ESLintBear (indent): | | Expected indentation of 0 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 82| 82| "tooltip": translate("Picks one civilization at random when the game starts."), | 83| 83| "color": g_ColorRandom, | 84| 84| "code": "random" | 85| |- }].concat( | | 85|+}].concat( | 86| 86| Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 83| 83| "color": g_ColorRandom, | 84| 84| "code": "random" | 85| 85| }].concat( | 86| |- Object.keys(g_CivData).filter( | | 86|+ Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 84| 84| "code": "random" | 85| 85| }].concat( | 86| 86| Object.keys(g_CivData).filter( | 87| |- civ => g_CivData[civ].SelectableInGameSetup | | 87|+ civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 85| 85| }].concat( | 86| 86| Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| |- ).map(civ => ({ | | 88|+ ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 86| 86| Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | 89| |- "name": g_CivData[civ].Name, | | 89|+ "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | 92| 92| "code": civ | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | 90| |- "tooltip": g_CivData[civ].History, | | 90|+ "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | 92| 92| "code": civ | 93| 93| })).sort(sortNameIgnoreCase) | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 88| 88| ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | 91| |- "color": g_ColorRegular, | | 91|+ "color": g_ColorRegular, | 92| 92| "code": civ | 93| 93| })).sort(sortNameIgnoreCase) | 94| 94| ) | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 89| 89| "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | 92| |- "code": civ | | 92|+ "code": civ | 93| 93| })).sort(sortNameIgnoreCase) | 94| 94| ) | 95| 95| ); | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 90| 90| "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | 92| 92| "code": civ | 93| |- })).sort(sortNameIgnoreCase) | | 93|+ })).sort(sortNameIgnoreCase) | 94| 94| ) | 95| 95| ); | 96| 96| | | [NORMAL] ESLintBear (indent): | | Expected indentation of 0 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 91| 91| "color": g_ColorRegular, | 92| 92| "code": civ | 93| 93| })).sort(sortNameIgnoreCase) | 94| |- ) | | 94|+) | 95| 95| ); | 96| 96| | 97| 97| /** | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js |1132|1132| translate("%(hotkey_civinfo)s / %(hotkey_structree)s: View History / Structure Tree\nLast opened will be reopened on click."), { |1133|1133| "hotkey_civinfo": colorizeHotkey("%(hotkey)s", "civinfo"), |1134|1134| "hotkey_structree": colorizeHotkey("%(hotkey)s", "structree") |1135| |- }); | |1135|+ }); |1136|1136| } |1137|1137| |1138|1138| function initDefaults() | | [NORMAL] ESLintBear (no-trailing-spaces): | | Trailing spaces not allowed. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js |1226|1226| offset = -Math.min(slideSpeed * dt, maxOffset); |1227|1227| } |1228|1228| |1229| |- updateSettingsPanelPosition(offset); | |1229|+ updateSettingsPanelPosition(offset); |1230|1230| } |1231|1231| |1232|1232| /** | | [NORMAL] ESLintBear (curly): | | Unnecessary { after 'if' condition. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js |1757|1757| let biomeList; |1758|1758| |1759|1759| if (g_GameAttributes.mapType == "random" && g_GameAttributes.settings.SupportedBiomes) |1760| |- { | |1760|+ |1761|1761| if (typeof g_GameAttributes.settings.SupportedBiomes == "string") |1762|1762| biomeList = g_Settings.Biomes.filter(biome => biome.Id.startsWith(g_GameAttributes.settings.SupportedBiomes)); |1763|1763| else |1764|1764| biomeList = g_Settings.Biomes.filter( |1765|1765| biome => g_GameAttributes.settings.SupportedBiomes.indexOf(biome.Id) != -1); |1766| |- } | |1766|+ |1767|1767| |1768|1768| g_BiomeList = biomeList && prepareForDropdown( |1769|1769| [{ binaries/data/mods/public/gui/gamesetup/gamesetup.js |2001| » while·(g_IsNetworked) | | [NORMAL] ESLintBear (no-unmodified-loop-condition): | | 'g_IsNetworked' is not modified in this loop.
Link to build: https://jenkins.wildfiregames.com/job/differential/623/display/redirect
binaries/data/mods/public/gui/gamesetup/gamesetup.js | ||
---|---|---|
2266 | Needs a comment if not a more solid patch. |
If an A23 hot fix, commit as is and raise concerns. If not, don't commit and handle the C++ changes.
binaries/data/mods/public/gui/gamesetup/gamesetup.js | ||
---|---|---|
2266 | More solid patch committed at rP21836. Adding comment. Notice the patch isn't that solid after all, it only decreases the likelihood of the bug. Notice that the doubleclick also results in this bug #5206. Meh. I don't want to leave things to chances, adding the global! |
This diff is more solid, because it doesn't rely on the luck of nothing calling updateGUIObjects after disabling the button.
Successful build - Chance fights ever on the side of the prudent.
Linter detected issues: Executing section Default... Executing section Source... Executing section JS... | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 62| 62| var g_RomanNumbers = [undefined, "I", "II", "III", "IV", "V", "VI", "VII", "VIII"]; | 63| 63| | 64| 64| var g_PlayerTeamList = prepareForDropdown([{ | 65| |- "label": translateWithContext("team", "None"), | | 65|+ "label": translateWithContext("team", "None"), | 66| 66| "id": -1 | 67| 67| }].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 63| 63| | 64| 64| var g_PlayerTeamList = prepareForDropdown([{ | 65| 65| "label": translateWithContext("team", "None"), | 66| |- "id": -1 | | 66|+ "id": -1 | 67| 67| }].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | | [NORMAL] ESLintBear (indent): | | Expected indentation of 0 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 64| 64| var g_PlayerTeamList = prepareForDropdown([{ | 65| 65| "label": translateWithContext("team", "None"), | 66| 66| "id": -1 | 67| |- }].concat( | | 67|+}].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | 70| 70| "id": i | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 65| 65| "label": translateWithContext("team", "None"), | 66| 66| "id": -1 | 67| 67| }].concat( | 68| |- Array(g_MaxTeams).fill(0).map((v, i) => ({ | | 68|+ Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | 70| 70| "id": i | 71| 71| })) | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 66| 66| "id": -1 | 67| 67| }].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| |- "label": i + 1, | | 69|+ "label": i + 1, | 70| 70| "id": i | 71| 71| })) | 72| 72| ) | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 67| 67| }].concat( | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | 70| |- "id": i | | 70|+ "id": i | 71| 71| })) | 72| 72| ) | 73| 73| ); | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 68| 68| Array(g_MaxTeams).fill(0).map((v, i) => ({ | 69| 69| "label": i + 1, | 70| 70| "id": i | 71| |- })) | | 71|+ })) | 72| 72| ) | 73| 73| ); | 74| 74| | | [NORMAL] ESLintBear (indent): | | Expected indentation of 0 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 69| 69| "label": i + 1, | 70| 70| "id": i | 71| 71| })) | 72| |- ) | | 72|+) | 73| 73| ); | 74| 74| | 75| 75| /** | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 78| 78| var g_RelicCountList = Object.keys(g_CivData).map((civ, i) => i + 1); | 79| 79| | 80| 80| var g_PlayerCivList = g_CivData && prepareForDropdown([{ | 81| |- "name": translateWithContext("civilization", "Random"), | | 81|+ "name": translateWithContext("civilization", "Random"), | 82| 82| "tooltip": translate("Picks one civilization at random when the game starts."), | 83| 83| "color": g_ColorRandom, | 84| 84| "code": "random" | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 79| 79| | 80| 80| var g_PlayerCivList = g_CivData && prepareForDropdown([{ | 81| 81| "name": translateWithContext("civilization", "Random"), | 82| |- "tooltip": translate("Picks one civilization at random when the game starts."), | | 82|+ "tooltip": translate("Picks one civilization at random when the game starts."), | 83| 83| "color": g_ColorRandom, | 84| 84| "code": "random" | 85| 85| }].concat( | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 80| 80| var g_PlayerCivList = g_CivData && prepareForDropdown([{ | 81| 81| "name": translateWithContext("civilization", "Random"), | 82| 82| "tooltip": translate("Picks one civilization at random when the game starts."), | 83| |- "color": g_ColorRandom, | | 83|+ "color": g_ColorRandom, | 84| 84| "code": "random" | 85| 85| }].concat( | 86| 86| Object.keys(g_CivData).filter( | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 81| 81| "name": translateWithContext("civilization", "Random"), | 82| 82| "tooltip": translate("Picks one civilization at random when the game starts."), | 83| 83| "color": g_ColorRandom, | 84| |- "code": "random" | | 84|+ "code": "random" | 85| 85| }].concat( | 86| 86| Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | | [NORMAL] ESLintBear (indent): | | Expected indentation of 0 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 82| 82| "tooltip": translate("Picks one civilization at random when the game starts."), | 83| 83| "color": g_ColorRandom, | 84| 84| "code": "random" | 85| |- }].concat( | | 85|+}].concat( | 86| 86| Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 83| 83| "color": g_ColorRandom, | 84| 84| "code": "random" | 85| 85| }].concat( | 86| |- Object.keys(g_CivData).filter( | | 86|+ Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 84| 84| "code": "random" | 85| 85| }].concat( | 86| 86| Object.keys(g_CivData).filter( | 87| |- civ => g_CivData[civ].SelectableInGameSetup | | 87|+ civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 85| 85| }].concat( | 86| 86| Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| |- ).map(civ => ({ | | 88|+ ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 86| 86| Object.keys(g_CivData).filter( | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | 89| |- "name": g_CivData[civ].Name, | | 89|+ "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | 92| 92| "code": civ | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 87| 87| civ => g_CivData[civ].SelectableInGameSetup | 88| 88| ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | 90| |- "tooltip": g_CivData[civ].History, | | 90|+ "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | 92| 92| "code": civ | 93| 93| })).sort(sortNameIgnoreCase) | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 88| 88| ).map(civ => ({ | 89| 89| "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | 91| |- "color": g_ColorRegular, | | 91|+ "color": g_ColorRegular, | 92| 92| "code": civ | 93| 93| })).sort(sortNameIgnoreCase) | 94| 94| ) | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 3. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 89| 89| "name": g_CivData[civ].Name, | 90| 90| "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | 92| |- "code": civ | | 92|+ "code": civ | 93| 93| })).sort(sortNameIgnoreCase) | 94| 94| ) | 95| 95| ); | | [NORMAL] ESLintBear (indent): | | Expected indentation of 1 tab but found 2. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 90| 90| "tooltip": g_CivData[civ].History, | 91| 91| "color": g_ColorRegular, | 92| 92| "code": civ | 93| |- })).sort(sortNameIgnoreCase) | | 93|+ })).sort(sortNameIgnoreCase) | 94| 94| ) | 95| 95| ); | 96| 96| | | [NORMAL] ESLintBear (indent): | | Expected indentation of 0 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | 91| 91| "color": g_ColorRegular, | 92| 92| "code": civ | 93| 93| })).sort(sortNameIgnoreCase) | 94| |- ) | | 94|+) | 95| 95| ); | 96| 96| | 97| 97| /** | | [NORMAL] ESLintBear (indent): | | Expected indentation of 2 tabs but found 1. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js |1133|1133| translate("%(hotkey_civinfo)s / %(hotkey_structree)s: View History / Structure Tree\nLast opened will be reopened on click."), { |1134|1134| "hotkey_civinfo": colorizeHotkey("%(hotkey)s", "civinfo"), |1135|1135| "hotkey_structree": colorizeHotkey("%(hotkey)s", "structree") |1136| |- }); | |1136|+ }); |1137|1137| } |1138|1138| |1139|1139| function initDefaults() | | [NORMAL] ESLintBear (no-trailing-spaces): | | Trailing spaces not allowed. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js |1227|1227| offset = -Math.min(slideSpeed * dt, maxOffset); |1228|1228| } |1229|1229| |1230| |- updateSettingsPanelPosition(offset); | |1230|+ updateSettingsPanelPosition(offset); |1231|1231| } |1232|1232| |1233|1233| /** | | [NORMAL] ESLintBear (curly): | | Unnecessary { after 'if' condition. |----| | /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js | |++++| /mnt/data/jenkins-phabricator/workspace/differential/binaries/data/mods/public/gui/gamesetup/gamesetup.js |1758|1758| let biomeList; |1759|1759| |1760|1760| if (g_GameAttributes.mapType == "random" && g_GameAttributes.settings.SupportedBiomes) |1761| |- { | |1761|+ |1762|1762| if (typeof g_GameAttributes.settings.SupportedBiomes == "string") |1763|1763| biomeList = g_Settings.Biomes.filter(biome => biome.Id.startsWith(g_GameAttributes.settings.SupportedBiomes)); |1764|1764| else |1765|1765| biomeList = g_Settings.Biomes.filter( |1766|1766| biome => g_GameAttributes.settings.SupportedBiomes.indexOf(biome.Id) != -1); |1767| |- } | |1767|+ |1768|1768| |1769|1769| g_BiomeList = biomeList && prepareForDropdown( |1770|1770| [{ binaries/data/mods/public/gui/gamesetup/gamesetup.js |2002| » while·(g_IsNetworked) | | [NORMAL] ESLintBear (no-unmodified-loop-condition): | | 'g_IsNetworked' is not modified in this loop.
Link to build: https://jenkins.wildfiregames.com/job/differential/632/display/redirect