Merge branch 'master' into huangzheng2016-master

# Conflicts:
#	gui/builtinPreferenceViews/pyfaEsiPreferences.py
This commit is contained in:
blitzmann
2022-05-08 12:35:46 -04:00
109 changed files with 25968 additions and 6499 deletions

1
docs/_config.yml Normal file
View File

@@ -0,0 +1 @@
theme: jekyll-theme-midnight

104
docs/callback.html Normal file
View File

@@ -0,0 +1,104 @@
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>pyfa Authentication Proxy</title>
<style type="text/css">
body { width: 700px; margin: 150px auto; }
h1 { font-size: 40px; }
h2 { font-size: 32px; }
body { font: 20px Helvetica, sans-serif; color: #333; }
#article { display: block; text-align: left; width: 650px; margin: 0 auto; }
.hidden { display:none; }
.success { color: #28a745; }
.error { color: #dc3545; }
textarea { width: 100%; height: 100px; }
hr { border-width: 1px 0 0 0; border-style: solid; border-color: #333; }
button { cursor: pointer; background-color: white; border: 1px solid #333; color: #333; padding: 8px 11px; text-align: center; text-decoration: none; display: inline-block; }
@media (prefers-color-scheme: dark) {
body { background-color: #333; color: white; }
textarea { width: 100%; height: 100px; background-color: #aaa;}
button { background-color: #333; border: 1px solid white; color: white; }
hr { border-color: white; }
}
</style>
</head>
<body>
<!-- Layout from Short Circuit's CREST login. Shout out! https://github.com/farshield/shortcircuit -->
<h1>pyfa</h1>
<div id="mode0" class="hidden">
<p id="mode0-msg">Processing request...</p>
<button id="showBtn" onClick="showCode()">Show Code</button>
</div>
<div id="mode1" class="hidden">
<p id="mode1-p">Please copy and paste the token below into pyfa.</p>
<textarea id="authCodeText" readonly></textarea>
</div>
</div>
<script>
debugger;
function showCode() {
var element = document.getElementById(`mode1`);
element.classList.remove("hidden");
element = document.getElementById(`showBtn`);
element.classList.add("hidden");
}
function httpPostAsync(url, callback)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == XMLHttpRequest.DONE)
callback(xmlHttp);
}
xmlHttp.open("GET", url, true); // true for asynchronous
xmlHttp.send(null);
}
const urlSearchParams = new URLSearchParams(window.location.search);
const params = Object.fromEntries(urlSearchParams.entries());
let stateInfo;
try {
stateInfo = JSON.parse(atob(params.state))
} catch (err) {
// something has happened and we cannot continue.
// todo: show a simple message and exit.
throw err;
}
// we always want to show the text box for manual.
var element = document.getElementById(`mode${stateInfo.mode}`);
element.classList.remove("hidden");
if (stateInfo.mode === 0) {
let p = document.getElementById(`mode1-p`);
p.prepend(document.createElement("hr"))
}
debugger;
document.getElementById(`authCodeText`).value = btoa(JSON.stringify(params))
if (stateInfo.mode == 0) { // auto / server mode
httpPostAsync(stateInfo.redirect + window.location.search, (req)=>{
debugger;
const msgDiv = document.getElementById(`mode0-msg`);
if (req.status === 200) {
msgDiv.innerHTML ="<span class='success'>Success!</span> You may close this window and return to the application.";
return;
} else if (req.status === 0){
msgDiv.innerHTML = "<span class='error'>Error!</span> Server response not received.<p><small>The local pyfa server may have timed out, or may not have started correctly.</small></p>";
} else if (req.status === 400){
msgDiv.innerHTML = `<span class='error'>Error!</span> <p><small>${req.responseText}</small></p>`
} else {
msgDiv.innerHTML = `<span class='error'>Error!</span> <p><small>There was an unknown error. Please report this to the pyfa issues page.</p><p><textarea readdonly>${req.responseText}</textarea></small></p>`
}
showCode()
// todo: bad request error when it's not an error itself, but rather
})
// todo: post message to local EVE server
}
</script>
</body>
</html>

37
docs/index.md Normal file
View File

@@ -0,0 +1,37 @@
## Welcome to GitHub Pages
You can use the [editor on GitHub](https://github.com/pyfa-org/Pyfa/edit/gh-pages/index.md) to maintain and preview the content for your website in Markdown files.
Whenever you commit to this repository, GitHub Pages will run [Jekyll](https://jekyllrb.com/) to rebuild the pages in your site, from the content in your Markdown files.
### Markdown
Markdown is a lightweight and easy-to-use syntax for styling your writing. It includes conventions for
```markdown
Syntax highlighted code block
# Header 1
## Header 2
### Header 3
- Bulleted
- List
1. Numbered
2. List
**Bold** and _Italic_ and `Code` text
[Link](url) and ![Image](src)
```
For more details see [GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/).
### Jekyll Themes
Your Pages site will use the layout and styles from the Jekyll theme you have selected in your [repository settings](https://github.com/pyfa-org/Pyfa/settings/pages). The name of this theme is saved in the Jekyll `_config.yml` configuration file.
### Support or Contact
Having trouble with Pages? Check out our [documentation](https://docs.github.com/categories/github-pages-basics/) or [contact support](https://support.github.com/contact) and well help you sort it out.

View File

@@ -1053,6 +1053,7 @@ class Effect290(BaseEffect):
sharpshooterRangeSkillBonusPostPercentMaxRangeLocationShipModulesRequiringGunnery
Used by:
Implants named like: DED Turret Booster (4 of 4)
Implants named like: Frentix Booster (4 of 4)
Implants named like: Halcyon B Booster (5 of 5)
Implants named like: Zainou 'Deadeye' Sharpshooter ST (6 of 6)
@@ -1756,6 +1757,7 @@ class Effect584(BaseEffect):
Used by:
Implants named like: 'Pyrolancea' Dose (7 of 7)
Implants named like: DED Turret Booster (4 of 4)
Implants named like: Eifyr and Co. 'Gunslinger' Surgical Strike SS (6 of 6)
Implants named like: Halcyon Y Booster (5 of 5)
Implant: Standard Cerebral Accelerator
@@ -1840,7 +1842,7 @@ class Effect596(BaseEffect):
ammoInfluenceRange
Used by:
Items from category: Charge (608 of 1005)
Items from category: Charge (608 of 1006)
"""
type = 'passive'
@@ -1855,7 +1857,7 @@ class Effect598(BaseEffect):
ammoSpeedMultiplier
Used by:
Charges from group: Festival Charges (35 of 35)
Charges from group: Festival Charges (36 of 36)
Charges from group: Interdiction Probe (2 of 2)
Charges from group: Structure Festival Charges (2 of 2)
Special Edition Assetss from group: Festival Charges Expired (4 of 4)
@@ -2136,6 +2138,7 @@ class Effect699(BaseEffect):
signatureAnalysisScanResolutionBonusPostPercentScanResolutionShip
Used by:
Implants named like: DED Scan Booster (4 of 4)
Implants named like: Halcyon B Booster (5 of 5)
Implants named like: Halcyon R Booster (5 of 5)
Implants named like: Zainou 'Gypsy' Signature Analysis SA (6 of 6)
@@ -2414,7 +2417,7 @@ class Effect804(BaseEffect):
ammoInfluenceCapNeed
Used by:
Items from category: Charge (538 of 1005)
Items from category: Charge (538 of 1006)
"""
type = 'passive'
@@ -3756,6 +3759,7 @@ class Effect1185(BaseEffect):
Used by:
Implants named like: Halcyon R Booster (5 of 5)
Implants named like: Smuggler Low Observability Booster (4 of 4)
Implants named like: X Instinct Booster (4 of 4)
Implants named like: grade Halo (15 of 18)
Implant: Serenity YC122.9 Season Booster - Signature Radius
@@ -5327,6 +5331,7 @@ class Effect1763(BaseEffect):
Used by:
Implants named like: Halcyon R Booster (5 of 5)
Implants named like: Smuggler Bay Loading Booster (4 of 4)
Implants named like: Zainou 'Deadeye' Rapid Launch RL (6 of 6)
Implant: Standard Cerebral Accelerator
Implant: Whelan Machorin's Ballistic Smartlink
@@ -6923,6 +6928,7 @@ class Effect2298(BaseEffect):
Implants named like: High grade Jackal (5 of 6)
Implants named like: High grade Spur (5 of 6)
Implants named like: High grade Talon (5 of 6)
Implants named like: Smuggler Low Observability Booster (4 of 4)
"""
type = 'passive'
@@ -13630,6 +13636,7 @@ class Effect4162(BaseEffect):
Used by:
Modules from group: Scan Probe Launcher (4 of 7)
Implants named like: DED Scan Booster (4 of 4)
Implants named like: Halcyon G Booster (5 of 5)
Implants named like: Hunt Probing Booster (4 of 4)
Implants named like: Poteque 'Prospector' Astrometric Rangefinding AR (3 of 3)
@@ -16735,6 +16742,7 @@ class Effect4951(BaseEffect):
Implants named like: Agency 'Hardshell' TB Dose (4 of 4)
Implants named like: Blue Pill Booster (5 of 5)
Implants named like: Halcyon R Booster (5 of 5)
Implants named like: Smuggler Shield Booster (4 of 4)
Implant: Antipharmakon Thureo
"""
@@ -35288,6 +35296,7 @@ class Effect7183(BaseEffect):
implantWarpScrambleRangeBonus
Used by:
Implants named like: DED Apprehension Booster (4 of 4)
Implants named like: Inquest 'Hedone' Entanglement Optimizer WS (3 of 3)
"""
@@ -35295,9 +35304,9 @@ class Effect7183(BaseEffect):
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Warp Scrambler',
'maxRange', src.getModifiedItemAttr('warpScrambleRangeBonus'),
stackingPenalties=False, **kwargs)
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Warp Scrambler',
'maxRange', src.getModifiedItemAttr('warpScrambleRangeBonus'), **kwargs)
class Effect7184(BaseEffect):
@@ -38268,3 +38277,85 @@ class Effect8479(BaseEffect):
fit.drones.filteredItemBoost(
lambda drone: drone.item.requiresSkill('Drones'), 'falloff',
container.getModifiedItemAttr('falloffBonus'), **kwargs)
class Effect8517(BaseEffect):
"""
stasisWebifierResistanceBonusPassive
Used by:
Implants named like: Smuggler Blockade Running Booster (4 of 4)
"""
type = 'passive'
@staticmethod
def handler(fit, booster, context, projectionRange, **kwargs):
fit.ship.boostItemAttr('stasisWebifierResistance',
booster.getModifiedItemAttr('stasisWebifierResistanceBonus'), **kwargs)
class Effect8518(BaseEffect):
"""
cargoScanResistanceAssign
Used by:
Implants named like: Smuggler Blockade Running Booster (4 of 4)
"""
type = 'passive'
@staticmethod
def handler(fit, module, context, projectionRange, **kwargs):
fit.ship.forceItemAttr('cargoScanResistance', module.getModifiedItemAttr('cargoScanResistance'), **kwargs)
class Effect8519(BaseEffect):
"""
warpScrambleStrengthBonusPassive
Used by:
Implants named like: DED Apprehension Booster (4 of 4)
"""
runTime = 'early'
type = 'passive'
@staticmethod
def handler(fit, booster, context, projectionRange, **kwargs):
fit.modules.filteredItemIncrease(
lambda mod: mod.item.group.name == 'Warp Scrambler', 'warpScrambleStrength',
booster.getModifiedItemAttr('warpScrambleStrengthBonus'), **kwargs)
class Effect8590(BaseEffect):
"""
launcherReloadTimeBonusPassive
Used by:
Implants named like: Smuggler Bay Loading Booster (4 of 4)
"""
type = 'passive'
@staticmethod
def handler(fit, booster, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Missile Launcher Operation'),
'reloadTime', booster.getModifiedItemAttr('reloadTimeBonus'), **kwargs)
class Effect8594(BaseEffect):
"""
modifyArmorDamageResistanceBonusPostPercentPassive
Used by:
Implants named like: DED Armor Booster (4 of 4)
"""
type = 'passive'
@staticmethod
def handler(fit, booster, context, projectionRange, **kwargs):
for type in ('Em', 'Explosive', 'Kinetic', 'Thermal'):
fit.ship.boostItemAttr(f'armor{type}DamageResonance',
booster.getModifiedItemAttr('armorDamageResistanceBonus'), **kwargs)

View File

@@ -36,6 +36,13 @@ class PFEsiPref(PreferenceView):
self.stInfo.Wrap(dlgWidth - 50)
mainSizer.Add(self.stInfo, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5)
self.enforceJwtExpiration = wx.CheckBox(panel, wx.ID_ANY, _t("Enforce Token Expiration"), wx.DefaultPosition,
wx.DefaultSize,
0)
self.enforceJwtExpiration.SetToolTip(wx.ToolTip(_t("This option is a workaround in case you cannot log into EVE SSO "
"due to 'Signature has expired' error")))
mainSizer.Add(self.enforceJwtExpiration, 0, wx.ALL | wx.EXPAND, 5)
rbSizer = wx.BoxSizer(wx.HORIZONTAL)
self.rbMode = wx.RadioBox(panel, -1, _t("Login Authentication Method"), wx.DefaultPosition, wx.DefaultSize,
[_t('Local Server'), _t('Manual')], 1, wx.RA_SPECIFY_COLS)
@@ -45,6 +52,7 @@ class PFEsiPref(PreferenceView):
" character login. Use this if having issues with the local server."))
self.rbMode.SetSelection(self.settings.get('loginMode'))
self.enforceJwtExpiration.SetValue(self.settings.get("enforceJwtExpiration" or True))
rbSizer.Add(self.rbMode, 1, wx.TOP | wx.RIGHT, 5)
@@ -71,6 +79,8 @@ class PFEsiPref(PreferenceView):
mainSizer.Add(esiSizer, 0, wx.TOP | wx.RIGHT , 10)
self.chESIserver.Bind(wx.EVT_CHOICE, self.OnServerChange)
self.enforceJwtExpiration.Bind(wx.EVT_CHECKBOX, self.OnEnforceChange)
mainSizer.Add(rbSizer, 1, wx.ALL | wx.EXPAND, 0)
panel.SetSizer(mainSizer)
@@ -82,6 +92,10 @@ class PFEsiPref(PreferenceView):
def OnModeChange(self, event):
self.settings.set('loginMode', event.GetInt())
def OnEnforceChange(self, event):
self.settings.set('enforceJwtExpiration', self.enforceJwtExpiration.GetValue())
event.Skip()
def OnServerChange(self, event):
source = self.chESIserver.GetString(self.chESIserver.GetSelection())
esiService = Esi.getInstance()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 812 B

After

Width:  |  Height:  |  Size: 433 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 944 B

BIN
imgs/icons/24409@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

BIN
imgs/icons/24409@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 796 B

After

Width:  |  Height:  |  Size: 787 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25235@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

BIN
imgs/icons/25235@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
imgs/icons/25236@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

BIN
imgs/icons/25236@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25237@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

BIN
imgs/icons/25237@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25238@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

BIN
imgs/icons/25238@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25240@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

BIN
imgs/icons/25240@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25241@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 B

BIN
imgs/icons/25241@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25242@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

BIN
imgs/icons/25242@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25243@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

BIN
imgs/icons/25243@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25245@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

BIN
imgs/icons/25245@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
imgs/icons/25246@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

BIN
imgs/icons/25246@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25247@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

BIN
imgs/icons/25247@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25248@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

BIN
imgs/icons/25248@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25250@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

BIN
imgs/icons/25250@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
imgs/icons/25251@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 B

BIN
imgs/icons/25251@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25252@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

BIN
imgs/icons/25252@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25253@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

BIN
imgs/icons/25253@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25255@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 787 B

BIN
imgs/icons/25255@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25256@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 B

BIN
imgs/icons/25256@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25257@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

BIN
imgs/icons/25257@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25258@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 B

BIN
imgs/icons/25258@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25259@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 B

BIN
imgs/icons/25259@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25260@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

BIN
imgs/icons/25260@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25261@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 B

BIN
imgs/icons/25261@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25262@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 831 B

BIN
imgs/icons/25262@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25263@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

BIN
imgs/icons/25263@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25264@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 B

BIN
imgs/icons/25264@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25265@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 B

BIN
imgs/icons/25265@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
imgs/icons/25266@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 818 B

BIN
imgs/icons/25266@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25267@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

BIN
imgs/icons/25267@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25268@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

BIN
imgs/icons/25268@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25269@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

BIN
imgs/icons/25269@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25270@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 773 B

BIN
imgs/icons/25270@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
imgs/icons/25271@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 B

BIN
imgs/icons/25271@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25272@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

BIN
imgs/icons/25272@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25273@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 B

BIN
imgs/icons/25273@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/icons/25274@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 B

BIN
imgs/icons/25274@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/icons/25283@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
imgs/icons/25283@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
imgs/icons/25311@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

BIN
imgs/icons/25311@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -248,7 +248,7 @@ class EsiAccess:
algorithms=jwk_set["alg"],
issuer=[self.server_base.sso, "https://%s" % self.server_base.sso],
# ignore "aud" claim: https://tweetfleet.slack.com/archives/C30KX8UUX/p1648495011905969
options={"verify_aud": False}
options={"verify_aud": False, "verify_exp": self.settings.get("enforceJwtExpiration")}
)
except ExpiredSignatureError as e:
raise GenericSsoError("The JWT token has expired: {}".format(str(e)))

View File

@@ -313,6 +313,7 @@ class Market:
"Tiamat" : self.les_grp, # AT16 prize
"Raiju" : self.les_grp, # AT17 prize
"Laelaps" : self.les_grp, # AT17 prize
"Boobook" : self.les_grp, # 19th EVE anniversary gift
}
self.ITEMS_FORCEGROUP_R = self.__makeRevDict(self.ITEMS_FORCEGROUP)

View File

@@ -375,7 +375,9 @@ class EsiSettings:
"clientSecret": "",
"timeout": 60,
"server": "Tranquility",
"exportCharges": True}
"exportCharges": True,
"enforceJwtExpiration": True
}
self.settings = SettingsProvider.getInstance().getSettings(
"pyfaServiceEsiSettings",

View File

@@ -3091,15 +3091,27 @@
},
"188": {
"attributeID": 188,
"categoryID": 9,
"categoryID": 36,
"dataType": 5,
"defaultValue": 0.0,
"description": "Chance of being able to resist a cargo scan.",
"displayName_de": "Widerstand gegen Fracht-Scans",
"displayName_en-us": "Cargo Scan Resistance",
"displayName_es": "Cargo Scan Resistance",
"displayName_fr": "Résistance au scan de la cargaison",
"displayName_it": "Cargo Scan Resistance",
"displayName_ja": "カーゴスキャンレジスタンス",
"displayName_ko": "화물 스캔 저항",
"displayName_ru": "Экранирование грузового отсека",
"displayName_zh": "Cargo Scan Resistance",
"displayNameID": 600128,
"displayWhenZero": 0,
"highIsGood": 1,
"iconID": 106,
"name": "cargoScanResistance",
"published": 0,
"stackable": 1
"published": 1,
"stackable": 1,
"unitID": 127
},
"189": {
"attributeID": 189,
@@ -44392,11 +44404,23 @@
"dataType": 4,
"defaultValue": 0.0,
"description": "Warp Scramble Strength Bonus",
"displayName_de": "Bonus auf Warp-Störungsstärke",
"displayName_en-us": "Warp Scramble Strength Bonus",
"displayName_es": "Warp Scramble Strength Bonus",
"displayName_fr": "Bonus de puissance d'inhibition de warp",
"displayName_it": "Warp Scramble Strength Bonus",
"displayName_ja": "ワープスクランブル強度ボーナス",
"displayName_ko": "워프 스크램블 강도 보너스",
"displayName_ru": "Влияние на мощность глушения варп-двигателей",
"displayName_zh": "Warp Scramble Strength Bonus",
"displayNameID": 600129,
"displayWhenZero": 0,
"highIsGood": 1,
"iconID": 111,
"name": "warpScrambleStrengthBonus",
"published": 0,
"stackable": 1
"published": 1,
"stackable": 1,
"unitID": 139
},
"3036": {
"attributeID": 3036,
@@ -46520,14 +46544,14 @@
"categoryID": 37,
"dataType": 5,
"defaultValue": 0.0,
"displayName_de": "Drone Tracking Speed Bonus",
"displayName_de": "Drohnen-Nachführungsgeschwindigkeits-Bonus",
"displayName_en-us": "Drone Tracking Speed Bonus",
"displayName_es": "Drone Tracking Speed Bonus",
"displayName_fr": "Drone Tracking Speed Bonus",
"displayName_fr": "Bonus de vitesse de poursuite des drones",
"displayName_it": "Drone Tracking Speed Bonus",
"displayName_ja": "Drone Tracking Speed Bonus",
"displayName_ko": "Drone Tracking Speed Bonus",
"displayName_ru": "Drone Tracking Speed Bonus",
"displayName_ja": "ドローン追跡速度ボーナス",
"displayName_ko": "드론 트래킹 속도 보너스",
"displayName_ru": "Бонус к скорости наведения дронов",
"displayName_zh": "Drone Tracking Speed Bonus",
"displayNameID": 598958,
"displayWhenZero": 0,
@@ -46537,5 +46561,50 @@
"published": 1,
"stackable": 1,
"unitID": 105
},
"3422": {
"attributeID": 3422,
"categoryID": 36,
"dataType": 5,
"defaultValue": 0.0,
"displayName_de": "Widerstandsbonus gegen Stasisnetze",
"displayName_en-us": "Stasis Webifier Resistance Bonus",
"displayName_es": "Stasis Webifier Resistance Bonus",
"displayName_fr": "Bonus de résistance du générateur de stase",
"displayName_it": "Stasis Webifier Resistance Bonus",
"displayName_ja": "ステイシスウェビファイヤーレジスタンスボーナス",
"displayName_ko": "스테이시스 웹 생성기 저항 보너스",
"displayName_ru": "Влияние на сопротивляемость стазис-индукторов",
"displayName_zh": "Stasis Webifier Resistance Bonus",
"displayNameID": 600127,
"displayWhenZero": 0,
"highIsGood": 0,
"iconID": 1389,
"name": "stasisWebifierResistanceBonus",
"published": 1,
"stackable": 1,
"unitID": 105
},
"3429": {
"attributeID": 3429,
"categoryID": 3,
"dataType": 5,
"defaultValue": 0.0,
"displayName_de": "Bonus auf Schadensresistenz von Panzerungen",
"displayName_en-us": "Armor Damage Resistance Bonus",
"displayName_es": "Armor Damage Resistance Bonus",
"displayName_fr": "Bonus de résistance aux dégâts du blindage",
"displayName_it": "Armor Damage Resistance Bonus",
"displayName_ja": "アーマーダメージレジスタンスボーナス",
"displayName_ko": "장갑 피해 저항력 보너스",
"displayName_ru": "Влияние на сопротивляемость брони",
"displayName_zh": "Armor Damage Resistance Bonus",
"displayNameID": 600536,
"displayWhenZero": 0,
"highIsGood": 0,
"name": "armorDamageResistanceBonus",
"published": 1,
"stackable": 0,
"unitID": 124
}
}

View File

@@ -90506,5 +90506,138 @@
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8517": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8517,
"effectName": "stasisWebifierResistanceBonusPassive",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 2115,
"modifyingAttributeID": 3422,
"operation": 6
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8518": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8518,
"effectName": "cargoScanResistanceAssign",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 188,
"modifyingAttributeID": 188,
"operation": 7
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8519": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8519,
"effectName": "warpScrambleStrengthBonusPassive",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 52,
"modifiedAttributeID": 105,
"modifyingAttributeID": 3035,
"operation": 2
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8590": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8590,
"effectName": "launcherReloadTimeBonusPassive",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationRequiredSkillModifier",
"modifiedAttributeID": 1795,
"modifyingAttributeID": 2573,
"operation": 6,
"skillTypeID": 3319
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8594": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8594,
"effectName": "modifyArmorDamageResistanceBonusPostPercentPassive",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 267,
"modifyingAttributeID": 3429,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 268,
"modifyingAttributeID": 3429,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 269,
"modifyingAttributeID": 3429,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 270,
"modifyingAttributeID": 3429,
"operation": 6
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
}
}

View File

@@ -508,14 +508,14 @@
"categoryID": 6,
"fittableNonSingleton": 0,
"groupID": 28,
"groupName_de": "Industrial",
"groupName_de": "Transporter",
"groupName_en-us": "Hauler",
"groupName_es": "Hauler",
"groupName_fr": "Vaisseau industriel",
"groupName_fr": "Cargo",
"groupName_it": "Hauler",
"groupName_ja": "輸送艦",
"groupName_ko": "인더스트리얼",
"groupName_ru": "Грузовой корабль",
"groupName_ja": "ハウラー",
"groupName_ko": "운반선",
"groupName_ru": "Перевозчик",
"groupName_zh": "工业舰",
"groupNameID": 63600,
"published": 1,
@@ -1620,14 +1620,14 @@
"categoryID": 9,
"fittableNonSingleton": 0,
"groupID": 108,
"groupName_de": "Industrial-Blueprint",
"groupName_de": "Transporter-Blaupause",
"groupName_en-us": "Hauler Blueprint",
"groupName_es": "Hauler Blueprint",
"groupName_fr": "Plan de construction Vaisseau industriel",
"groupName_fr": "Plan de construction Cargo",
"groupName_it": "Hauler Blueprint",
"groupName_ja": "輸送艦ブループリント",
"groupName_ko": "인더스트리얼 블루프린트",
"groupName_ru": "Чертежи грузового корабля",
"groupName_ja": "ハウラー設計図",
"groupName_ko": "운반선 블루프린트",
"groupName_ru": "Hauler Blueprint",
"groupName_zh": "工业舰蓝图",
"groupNameID": 63656,
"published": 1,
@@ -7313,14 +7313,14 @@
"categoryID": 9,
"fittableNonSingleton": 0,
"groupID": 503,
"groupName_de": "Elite-Industrial-Blueprint",
"groupName_de": "Elite-Transporter-Blaupause",
"groupName_en-us": "Elite Hauler Blueprint",
"groupName_es": "Elite Hauler Blueprint",
"groupName_fr": "Plan de construction Vaisseau industriel d'élite",
"groupName_fr": "Plan de construction Cargo d'élite",
"groupName_it": "Elite Hauler Blueprint",
"groupName_ja": "エリート輸送艦ブループリント",
"groupName_ko": "엘리트 인더스트리얼 블루프린트",
"groupName_ru": "Чертежи грузового корабля специального назначения",
"groupName_ja": "エリートハウラー設計図",
"groupName_ko": "엘리트 운반선 블루프린트",
"groupName_ru": "Elite Hauler Blueprint",
"groupName_zh": "精英工业舰蓝图",
"groupNameID": 63936,
"iconID": 0,
@@ -14861,14 +14861,14 @@
"categoryID": 11,
"fittableNonSingleton": 0,
"groupID": 927,
"groupName_de": "Missionen: Fraktionen-Industrieschiffe",
"groupName_de": "Missionen: Fraktionstransporter",
"groupName_en-us": "Mission Faction Haulers",
"groupName_es": "Mission Faction Haulers",
"groupName_fr": "Vaisseaux industriels de faction mission",
"groupName_fr": "Cargos de faction de mission",
"groupName_it": "Mission Faction Haulers",
"groupName_ja": "ミッション勢力別インダストリアル",
"groupName_ko": "미션 팩션 인더스트리얼",
"groupName_ru": "Промышленные корабли боевой группы фракции",
"groupName_ja": "ミッション勢力別ハウラー",
"groupName_ko": "미션 팩션 운반선",
"groupName_ru": "Mission Faction Haulers",
"groupName_zh": "任务势力工业舰",
"groupNameID": 64290,
"published": 0,

View File

@@ -135,14 +135,14 @@
"descriptionID": 65267,
"hasTypes": 0,
"iconID": 1443,
"name_de": "Standardindustrieschiffe",
"name_en-us": "Standard Industrial Ships",
"name_es": "Standard Industrial Ships",
"name_fr": "Vaisseaux industriels standards",
"name_it": "Standard Industrial Ships",
"name_ja": "標準型輸送船",
"name_ko": "일반 인더스트리얼",
"name_ru": "Типовые",
"name_de": "Standardtransporter",
"name_en-us": "Standard Haulers",
"name_es": "Standard Haulers",
"name_fr": "Cargos standards",
"name_it": "Standard Haulers",
"name_ja": "標準型ハウラー",
"name_ko": "일반 운반선",
"name_ru": "Стандартные перевозчики",
"name_zh": "标准工业舰",
"nameID": 66341,
"parentGroupID": 1382
@@ -1867,26 +1867,26 @@
"parentGroupID": 204
},
"208": {
"description_de": "Blueprints von Schiffen der Industrial-Klasse.",
"description_en-us": "Blueprints of industrial-class vessels.",
"description_es": "Blueprints of industrial-class vessels.",
"description_fr": "Plans de construction de vaisseaux de classe industrielle.",
"description_it": "Blueprints of industrial-class vessels.",
"description_ja": "輸送艦級艦船のブループリント。",
"description_ko": "인더스트리얼급 함선 블루프린트입니다.",
"description_ru": "Чертежи промышленных кораблей.",
"description_de": "Blaupausen für Transporter",
"description_en-us": "Blueprints of haulers",
"description_es": "Blueprints of haulers",
"description_fr": "Plans de construction de cargos",
"description_it": "Blueprints of haulers",
"description_ja": "輸送艇の設計図",
"description_ko": "운반선 블루프린트",
"description_ru": "Чертежи перевозчиков",
"description_zh": "工业舰蓝图。",
"descriptionID": 64521,
"hasTypes": 0,
"iconID": 2703,
"name_de": "Industrieschiffe",
"name_en-us": "Industrial Ships",
"name_es": "Industrial Ships",
"name_fr": "Vaisseaux industriels",
"name_it": "Industrial Ships",
"name_ja": "輸送船",
"name_ko": "인더스트리얼",
"name_ru": "Грузовые корабли",
"name_de": "Transporter",
"name_en-us": "Haulers",
"name_es": "Haulers",
"name_fr": "Cargos",
"name_it": "Haulers",
"name_ja": "ハウラー",
"name_ko": "운반선",
"name_ru": "Перевозчики",
"name_zh": "工业舰",
"nameID": 65595,
"parentGroupID": 204
@@ -22933,26 +22933,26 @@
"parentGroupID": 4
},
"1382": {
"description_de": "Große Transportschiffe, die das wirtschaftliche Rückgrat darstellen",
"description_en-us": "Large transport ships that form the backbone of the economy",
"description_es": "Large transport ships that form the backbone of the economy",
"description_fr": "Vaisseaux de transport de grande taille qui constituent l'épine dorsale de l'économie",
"description_it": "Large transport ships that form the backbone of the economy",
"description_ja": "経済活動を支える大型の特化型輸送艦",
"description_ko": "대형 수송선은 뉴에덴 경제에서 중추적인 역할을 담당합니다.",
"description_ru": "Крупные транспортные корабли, формирующие основу современной экономики",
"description_de": "Transporter und Industrieschiffe, die das Rückgrat der Wirtschaft darstellen",
"description_en-us": "Haulers and industrial ships that form the backbone of the economy",
"description_es": "Haulers and industrial ships that form the backbone of the economy",
"description_fr": "Cargos et vaisseaux industriels qui constituent l'épine dorsale de l'économie",
"description_it": "Haulers and industrial ships that form the backbone of the economy",
"description_ja": "経済の屋台骨を形成するハウラーと輸送艦",
"description_ko": "운반선과 인더스트리얼 함선은 뉴에덴 경제에서 중추적인 역할을 담당합니다",
"description_ru": "Перевозчики и грузовые корабли, составляющие основу экономики",
"description_zh": "大型运输舰船,是宇宙经济系统的基石",
"descriptionID": 65386,
"hasTypes": 0,
"iconID": 1443,
"name_de": "Industrieschiffe",
"name_en-us": "Industrial Ships",
"name_es": "Industrial Ships",
"name_fr": "Vaisseaux industriels",
"name_it": "Industrial Ships",
"name_ja": "輸送",
"name_ko": "인더스트리얼",
"name_ru": "Грузовые корабли",
"name_de": "Transporter und Industrieschiffe",
"name_en-us": "Haulers and Industrial Ships",
"name_es": "Haulers and Industrial Ships",
"name_fr": "Cargos et vaisseaux industriels",
"name_it": "Haulers and Industrial Ships",
"name_ja": "ハウラーと輸送",
"name_ko": "운반선 및 인더스트리얼",
"name_ru": "Перевозчики и грузовые корабли",
"name_zh": "工业舰",
"nameID": 66460,
"parentGroupID": 4
@@ -22983,26 +22983,26 @@
"parentGroupID": 4
},
"1385": {
"description_de": "Fortgeschrittene Industrial Ships sind speziell angepasst für bestimmte Aufgaben.",
"description_en-us": "Advanced industrial ships are specially modified for specific purposes.",
"description_es": "Advanced industrial ships are specially modified for specific purposes.",
"description_fr": "Les vaisseaux industriels avancés sont spécialement modifiés à des fins particulières.",
"description_it": "Advanced industrial ships are specially modified for specific purposes.",
"description_ja": "特定用途のために改良された高性能輸送船。",
"description_ko": "상급 인더스트리얼들은 특정 역할에 특화되었습니다.",
"description_ru": "Усовершенствованные модификации промышленных кораблей, предназначенные для выполнения узкоспециализированных задач.",
"description_de": "Die Ausrüstung von fortschrittlichen Transportern ist auf ihren jeweiligen Verwendungszweck angepasst.",
"description_en-us": "Advanced haulers are modified for specific purposes.",
"description_es": "Advanced haulers are modified for specific purposes.",
"description_fr": "Les cargos avancés sont modifiés à des fins particulières.",
"description_it": "Advanced haulers are modified for specific purposes.",
"description_ja": "高性能ハウラーは特定の目的のために特化している。",
"description_ko": "상급 운반선은 특정 역할에 맞춰 설계되었습니다.",
"description_ru": "Улучшенные перевозчики для выполнения особых задач.",
"description_zh": "高级工业舰都经过了特殊改装,以便它们专精于某个特定领域。",
"descriptionID": 65387,
"hasTypes": 0,
"iconID": 1443,
"name_de": "Fortschrittliche Industrieschiffe",
"name_en-us": "Advanced Industrial Ships",
"name_es": "Advanced Industrial Ships",
"name_fr": "Vaisseaux industriels avancés",
"name_it": "Advanced Industrial Ships",
"name_ja": "高性能輸送船",
"name_ko": "상급 인더스트리얼",
"name_ru": "Специализированные",
"name_de": "Fortschrittliche Transporter",
"name_en-us": "Advanced Haulers",
"name_es": "Advanced Haulers",
"name_fr": "Cargos avancés",
"name_it": "Advanced Haulers",
"name_ja": "高性能ハウラー",
"name_ko": "상급 운반선",
"name_ru": "Улучшенные крейсеры",
"name_zh": "高级工业舰",
"nameID": 66461,
"parentGroupID": 1382
@@ -33380,14 +33380,14 @@
"2006": {
"hasTypes": 0,
"iconID": 21420,
"name_de": "Industrieschiffe",
"name_en-us": "Industrial Ships",
"name_es": "Industrial Ships",
"name_fr": "Vaisseaux industriels",
"name_it": "Industrial Ships",
"name_ja": "輸送艦",
"name_ko": "인더스트리얼",
"name_ru": "Грузовые корабли",
"name_de": "Transporter und Industrieschiffe",
"name_en-us": "Haulers and Industrial Ships",
"name_es": "Haulers and Industrial Ships",
"name_fr": "Cargos et vaisseaux industriels",
"name_it": "Haulers and Industrial Ships",
"name_ja": "ハウラーと輸送艦",
"name_ko": "운반선 및 인더스트리얼",
"name_ru": "Перевозчики и грузовые корабли",
"name_zh": "工业舰",
"nameID": 305518,
"parentGroupID": 1954
@@ -34600,14 +34600,14 @@
"2085": {
"hasTypes": 0,
"iconID": 21420,
"name_de": "Standardindustrieschiffe",
"name_en-us": "Standard Industrial Ships",
"name_es": "Standard Industrial Ships",
"name_fr": "Vaisseaux industriels standards",
"name_it": "Standard Industrial Ships",
"name_ja": "標準型輸送艦",
"name_ko": "일반 인더스트리얼",
"name_ru": "Типовые",
"name_de": "Standardtransporter",
"name_en-us": "Standard Haulers",
"name_es": "Standard Haulers",
"name_fr": "Cargos standards",
"name_it": "Standard Haulers",
"name_ja": "標準型ハウラー",
"name_ko": "일반 운반선",
"name_ru": "Стандартные перевозчики",
"name_zh": "标准工业舰",
"nameID": 309730,
"parentGroupID": 2006
@@ -34615,14 +34615,14 @@
"2086": {
"hasTypes": 0,
"iconID": 21420,
"name_de": "Fortschrittliche Industrieschiffe",
"name_en-us": "Advanced Industrial Ships",
"name_es": "Advanced Industrial Ships",
"name_fr": "Vaisseaux industriels avancés",
"name_it": "Advanced Industrial Ships",
"name_ja": "最新型輸送艦",
"name_ko": "상급 인더스트리얼",
"name_ru": "Специализированные",
"name_de": "Fortschrittliche Transporter",
"name_en-us": "Advanced Haulers",
"name_es": "Advanced Haulers",
"name_fr": "Cargos avancés",
"name_it": "Advanced Haulers",
"name_ja": "高性能ハウラー",
"name_ko": "상급 운반선",
"name_ru": "Улучшенные крейсеры",
"name_zh": "高级工业舰",
"nameID": 309731,
"parentGroupID": 2006
@@ -38593,14 +38593,14 @@
"2330": {
"hasTypes": 0,
"iconID": 21420,
"name_de": "Sonderversionen: Industrieschiffe",
"name_en-us": "Special Edition Industrial Ships",
"name_es": "Special Edition Industrial Ships",
"name_fr": "Vaisseaux industriels (édition spéciale)",
"name_it": "Special Edition Industrial Ships",
"name_ja": "特別版輸送艦",
"name_ko": "인더스트리얼",
"name_ru": "Грузовые корабли особой версии",
"name_de": "Sonderversion-Transporter",
"name_en-us": "Special Edition Haulers",
"name_es": "Special Edition Haulers",
"name_fr": "Cargos édition spéciale",
"name_it": "Special Edition Haulers",
"name_ja": "特別エディションハウラー",
"name_ko": "스페셜 에디션 운반선",
"name_ru": "Перевозчики особой версии",
"name_zh": "特别版工业舰",
"nameID": 315414,
"parentGroupID": 2006

View File

@@ -27406,5 +27406,44 @@
},
"63635": {
"3402": 1
},
"63849": {
"3355": 1
},
"63850": {
"3355": 1
},
"63851": {
"3355": 1
},
"63852": {
"3402": 1
},
"63853": {
"3402": 1
},
"63854": {
"3402": 1
},
"63871": {
"21718": 1
},
"63872": {
"21718": 1
},
"63876": {
"21718": 1
},
"63877": {
"21718": 1
},
"63910": {
"21718": 1
},
"63911": {
"21718": 1
},
"64034": {
"3327": 1
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More