Merge branch 'master' into huangzheng2016-master
# Conflicts: # gui/builtinPreferenceViews/pyfaEsiPreferences.py
1
docs/_config.yml
Normal file
@@ -0,0 +1 @@
|
||||
theme: jekyll-theme-midnight
|
||||
104
docs/callback.html
Normal 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
@@ -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 
|
||||
```
|
||||
|
||||
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 we’ll help you sort it out.
|
||||
103
eos/effects.py
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
Before Width: | Height: | Size: 812 B After Width: | Height: | Size: 433 B |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 944 B |
BIN
imgs/icons/24409@1x.png
Normal file
|
After Width: | Height: | Size: 701 B |
BIN
imgs/icons/24409@2x.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 822 B |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 796 B After Width: | Height: | Size: 787 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25235@1x.png
Normal file
|
After Width: | Height: | Size: 780 B |
BIN
imgs/icons/25235@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
imgs/icons/25236@1x.png
Normal file
|
After Width: | Height: | Size: 829 B |
BIN
imgs/icons/25236@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25237@1x.png
Normal file
|
After Width: | Height: | Size: 821 B |
BIN
imgs/icons/25237@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25238@1x.png
Normal file
|
After Width: | Height: | Size: 824 B |
BIN
imgs/icons/25238@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25240@1x.png
Normal file
|
After Width: | Height: | Size: 784 B |
BIN
imgs/icons/25240@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25241@1x.png
Normal file
|
After Width: | Height: | Size: 808 B |
BIN
imgs/icons/25241@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25242@1x.png
Normal file
|
After Width: | Height: | Size: 829 B |
BIN
imgs/icons/25242@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25243@1x.png
Normal file
|
After Width: | Height: | Size: 833 B |
BIN
imgs/icons/25243@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25245@1x.png
Normal file
|
After Width: | Height: | Size: 783 B |
BIN
imgs/icons/25245@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
imgs/icons/25246@1x.png
Normal file
|
After Width: | Height: | Size: 814 B |
BIN
imgs/icons/25246@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25247@1x.png
Normal file
|
After Width: | Height: | Size: 825 B |
BIN
imgs/icons/25247@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25248@1x.png
Normal file
|
After Width: | Height: | Size: 821 B |
BIN
imgs/icons/25248@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25250@1x.png
Normal file
|
After Width: | Height: | Size: 782 B |
BIN
imgs/icons/25250@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
imgs/icons/25251@1x.png
Normal file
|
After Width: | Height: | Size: 816 B |
BIN
imgs/icons/25251@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25252@1x.png
Normal file
|
After Width: | Height: | Size: 823 B |
BIN
imgs/icons/25252@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25253@1x.png
Normal file
|
After Width: | Height: | Size: 814 B |
BIN
imgs/icons/25253@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25255@1x.png
Normal file
|
After Width: | Height: | Size: 787 B |
BIN
imgs/icons/25255@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25256@1x.png
Normal file
|
After Width: | Height: | Size: 836 B |
BIN
imgs/icons/25256@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25257@1x.png
Normal file
|
After Width: | Height: | Size: 846 B |
BIN
imgs/icons/25257@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25258@1x.png
Normal file
|
After Width: | Height: | Size: 848 B |
BIN
imgs/icons/25258@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25259@1x.png
Normal file
|
After Width: | Height: | Size: 816 B |
BIN
imgs/icons/25259@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25260@1x.png
Normal file
|
After Width: | Height: | Size: 778 B |
BIN
imgs/icons/25260@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25261@1x.png
Normal file
|
After Width: | Height: | Size: 835 B |
BIN
imgs/icons/25261@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25262@1x.png
Normal file
|
After Width: | Height: | Size: 831 B |
BIN
imgs/icons/25262@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25263@1x.png
Normal file
|
After Width: | Height: | Size: 829 B |
BIN
imgs/icons/25263@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25264@1x.png
Normal file
|
After Width: | Height: | Size: 802 B |
BIN
imgs/icons/25264@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25265@1x.png
Normal file
|
After Width: | Height: | Size: 769 B |
BIN
imgs/icons/25265@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
imgs/icons/25266@1x.png
Normal file
|
After Width: | Height: | Size: 818 B |
BIN
imgs/icons/25266@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25267@1x.png
Normal file
|
After Width: | Height: | Size: 823 B |
BIN
imgs/icons/25267@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25268@1x.png
Normal file
|
After Width: | Height: | Size: 821 B |
BIN
imgs/icons/25268@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25269@1x.png
Normal file
|
After Width: | Height: | Size: 797 B |
BIN
imgs/icons/25269@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25270@1x.png
Normal file
|
After Width: | Height: | Size: 773 B |
BIN
imgs/icons/25270@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
imgs/icons/25271@1x.png
Normal file
|
After Width: | Height: | Size: 817 B |
BIN
imgs/icons/25271@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25272@1x.png
Normal file
|
After Width: | Height: | Size: 822 B |
BIN
imgs/icons/25272@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25273@1x.png
Normal file
|
After Width: | Height: | Size: 832 B |
BIN
imgs/icons/25273@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
imgs/icons/25274@1x.png
Normal file
|
After Width: | Height: | Size: 812 B |
BIN
imgs/icons/25274@2x.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
imgs/icons/25283@1x.png
Normal file
|
After Width: | Height: | Size: 733 B |
BIN
imgs/icons/25283@2x.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
imgs/icons/25311@1x.png
Normal file
|
After Width: | Height: | Size: 710 B |
BIN
imgs/icons/25311@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
@@ -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)))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -375,7 +375,9 @@ class EsiSettings:
|
||||
"clientSecret": "",
|
||||
"timeout": 60,
|
||||
"server": "Tranquility",
|
||||
"exportCharges": True}
|
||||
"exportCharges": True,
|
||||
"enforceJwtExpiration": True
|
||||
}
|
||||
|
||||
self.settings = SettingsProvider.getInstance().getSettings(
|
||||
"pyfaServiceEsiSettings",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||