32 Commits

Author SHA1 Message Date
6bb0938be0 Fix ammo filtering 2025-12-15 22:47:12 +01:00
8a37ee810a Use 7z LIKE GOD INTENDED IT instead of fucking zip 2025-12-15 22:47:12 +01:00
4d1320161a Add a release script 2025-12-15 22:47:12 +01:00
b5d6211ae0 Add a build script 2025-12-15 22:47:12 +01:00
fa05cd625f Add rig filter button 2025-12-15 22:47:12 +01:00
d18ebb6dc0 Filter rigs by calibration fits as well 2025-12-15 22:47:12 +01:00
f3a89157ca Have fits filter rigs by size 2025-12-15 22:47:12 +01:00
766d45dd17 Make fits a check instead of radio button 2025-12-15 22:47:12 +01:00
457bbc0dc3 Fix rigs never passing fitting check because no cpu 2025-12-15 22:47:12 +01:00
4ddf1733e4 Refresh market filter when fit changed 2025-12-15 22:47:12 +01:00
ca2a80cc85 Hallucinte some more buttons below market 2025-12-15 22:47:11 +01:00
DarkPhoenix
c7074f499f Add a guard against situation where fit is empty for some reason 2025-12-15 12:18:52 +01:00
DarkPhoenix
f6f3a69be4 Fail build if image tool couldn't be fetched 2025-12-11 19:21:03 +01:00
DarkPhoenix
23e09729f7 CCP mistype is actually a mistype on my part 2025-12-11 18:50:14 +01:00
DarkPhoenix
0aca05704f Bump version 2025-12-11 18:03:49 +01:00
DarkPhoenix
b08894e984 Anhinga effect changes 2025-12-11 18:03:32 +01:00
DarkPhoenix
a1bc8742c9 Add new renders 2025-12-11 15:58:02 +01:00
DarkPhoenix
6472cabc05 Update static data and make some changes to support new AT ships 2025-12-11 15:54:11 +01:00
DarkPhoenix
56bb8217d3 Do not fail whole app when ESI access object fails instantiation 2025-12-10 19:22:52 +01:00
DarkPhoenix
17f9071317 Bump version 2025-12-09 15:28:26 +01:00
DarkPhoenix
50eda1f4db Add option to copy condensed skill list 2025-12-09 15:26:17 +01:00
DarkPhoenix
84fbc0a46c Fix clipboard on my wayland installation 2025-12-09 15:08:38 +01:00
Anton Vorobyov
9551195078 Merge pull request #2700 from skyride/master
Fixed bug with Clipboard on Wayland
2025-12-09 17:49:24 +04:00
DarkPhoenix
f01949d892 Add expedition hold display 2025-12-09 14:44:43 +01:00
DarkPhoenix
26b4c05b6f Stacking penalize residue probability attribute 2025-12-09 14:41:40 +01:00
Anton Vorobyov
6ecab03fd8 Merge pull request #2683 from cryonox/dev/refresh_tokens
Refresh tokens when pyfa start to avoid expiry
2025-12-09 17:35:55 +04:00
DarkPhoenix
edc0418d9a Add perserverance effects 2025-12-09 14:31:05 +01:00
DarkPhoenix
1d413595b9 Update icons 2025-12-09 14:17:49 +01:00
DarkPhoenix
ce5a593f7b Add missing wightstorm booster effects 2025-12-09 14:15:35 +01:00
DarkPhoenix
faea6a97f0 Update static data 2025-12-09 14:13:14 +01:00
Amy Findlay
b92913cbf9 Fixed bug with Clipboard on Wayland 2025-11-22 19:57:55 +01:00
cryonox
edec81f4b8 Refresh tokens when pyfa start to avoid expiry 2025-09-10 12:39:34 +08:00
46 changed files with 29561 additions and 12367 deletions

View File

@@ -32,7 +32,7 @@ for:
- sh: export PYFA_VERSION="$(python3 -B scripts/dump_version.py)"
- sh: mkdir build
# Download packaging tool
- sh: curl -o $APPIMAGE_TOOL -L https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage
- sh: curl --fail-with-body -o $APPIMAGE_TOOL -L https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage
- sh: chmod +x $APPIMAGE_TOOL
build_script:
- sh: mkdir -p AppDir/opt/pyfa

View File

@@ -1333,10 +1333,10 @@ class Effect446(BaseEffect):
Implants named like: Capsuleer Defense Augmentation Chip (3 of 3)
Implants named like: Festival only 'Rock' SH Dose (4 of 4)
Implants named like: Halcyon G Booster (5 of 5)
Implants named like: Nirvana Booster (5 of 5)
Implants named like: Serenity Limited 'Hardshell' Dose (3 of 3)
Implants named like: Zainou 'Gnome' Shield Management SM (6 of 6)
Modules named like: Core Defense Field Extender (8 of 8)
Implant: AIR Nirvana Booster II
Implant: Genolution Core Augmentation CA-3
Implant: Sansha Modified 'Gnome' Implant
Skill: Shield Management
@@ -1358,6 +1358,7 @@ class Effect485(BaseEffect):
Implants named like: Halcyon G Booster (5 of 5)
Implants named like: Halcyon R Booster (5 of 5)
Implants named like: Inherent Implants 'Squire' Capacitor Systems Operation EO (6 of 6)
Implants named like: Wightstorm Rapture Booster (4 of 4)
Implants named like: grade Rapture (15 of 18)
Modules named like: Capacitor Control Circuit (8 of 8)
Implant: AIR Overclocker Booster III
@@ -2603,15 +2604,22 @@ class Effect891(BaseEffect):
Used by:
Variations of ship: Raven (3 of 4)
Module: Anhinga Tertiary Mode
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Cruise Missiles'),
'maxVelocity', ship.getModifiedItemAttr('shipBonusCB3'),
skill='Caldari Battleship', **kwargs)
if 'ship' in context:
skill = 'Caldari Battleship'
penalties = False
else:
skill = None
penalties = True
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Cruise Missiles'), 'maxVelocity',
ship.getModifiedItemAttr('shipBonusCB3'), skill=skill, stackingPenalties=penalties, **kwargs)
class Effect892(BaseEffect):
@@ -2620,15 +2628,22 @@ class Effect892(BaseEffect):
Used by:
Variations of ship: Raven (3 of 4)
Module: Anhinga Tertiary Mode
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'),
'maxVelocity', ship.getModifiedItemAttr('shipBonusCB3'),
skill='Caldari Battleship', **kwargs)
if 'ship' in context:
skill = 'Caldari Battleship'
penalties = False
else:
skill = None
penalties = True
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Torpedoes'), 'maxVelocity',
ship.getModifiedItemAttr('shipBonusCB3'), skill=skill, stackingPenalties=penalties, **kwargs)
class Effect896(BaseEffect):
@@ -3285,6 +3300,7 @@ class Effect1024(BaseEffect):
shipMissileHeavyVelocityBonusCC2
Used by:
Module: Anhinga Tertiary Mode
Ship: Caracal
Ship: Osprey Navy Issue
"""
@@ -3293,9 +3309,15 @@ class Effect1024(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
'maxVelocity', ship.getModifiedItemAttr('shipBonusCC2'),
skill='Caldari Cruiser', **kwargs)
if 'ship' in context:
skill = 'Caldari Cruiser'
penalties = False
else:
skill = None
penalties = True
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Heavy Missiles'), 'maxVelocity',
ship.getModifiedItemAttr('shipBonusCC2'), skill=skill, stackingPenalties=penalties, **kwargs)
class Effect1030(BaseEffect):
@@ -3905,6 +3927,7 @@ class Effect1230(BaseEffect):
shipMissileVelocityPirateFactionFrigate
Used by:
Module: Anhinga Primary Mode
Ship: Barghest
Ship: Garmur
Ship: Laelaps
@@ -3916,8 +3939,10 @@ class Effect1230(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
'maxVelocity', ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)
penalties = 'ship' not in context
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'maxVelocity',
ship.getModifiedItemAttr('shipBonusRole7'), stackingPenalties=penalties, **kwargs)
class Effect1232(BaseEffect):
@@ -5654,6 +5679,7 @@ class Effect1885(BaseEffect):
shipCruiseLauncherROFBonus2CB
Used by:
Modules named like: Anhinga Mode (3 of 3)
Ship: Raven
Ship: Raven State Issue
"""
@@ -5662,9 +5688,18 @@ class Effect1885(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Cruise',
'speed', ship.getModifiedItemAttr('shipBonus2CB'),
skill='Caldari Battleship', **kwargs)
if 'ship' in context:
skill = 'Caldari Battleship'
penalties = False
penaltyGroup = None
else:
skill = None
penalties = True
penaltyGroup = 'postPerc'
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Missile Launcher Cruise', 'speed',
ship.getModifiedItemAttr('shipBonus2CB'), skill=skill,
stackingPenalties=penalties, penaltyGroup=penaltyGroup, **kwargs)
class Effect1886(BaseEffect):
@@ -5672,6 +5707,7 @@ class Effect1886(BaseEffect):
shipSiegeLauncherROFBonus2CB
Used by:
Modules named like: Anhinga Mode (3 of 3)
Ship: Raven
Ship: Raven State Issue
"""
@@ -5680,9 +5716,18 @@ class Effect1886(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Torpedo',
'speed', ship.getModifiedItemAttr('shipBonus2CB'),
skill='Caldari Battleship', **kwargs)
if 'ship' in context:
skill = 'Caldari Battleship'
penalties = False
penaltyGroup = None
else:
skill = None
penalties = True
penaltyGroup = 'postPerc'
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Missile Launcher Torpedo', 'speed',
ship.getModifiedItemAttr('shipBonus2CB'), skill=skill,
stackingPenalties=penalties, penaltyGroup=penaltyGroup, **kwargs)
class Effect1910(BaseEffect):
@@ -8398,6 +8443,7 @@ class Effect2803(BaseEffect):
Used by:
Implants named like: Harvest Damage Booster (4 of 4)
Implants named like: Wightstorm Vitarka Booster (4 of 4)
Modules named like: Energy Collision Accelerator (8 of 8)
Implant: Wisdom of Gheinok
"""
@@ -9674,6 +9720,7 @@ class Effect3196(BaseEffect):
thermodynamicsSkillDamageBonus
Used by:
Implants named like: Wightstorm Sunyata Booster (4 of 4)
Skill: Thermodynamics
"""
@@ -18029,6 +18076,7 @@ class Effect5189(BaseEffect):
Used by:
Implants named like: Tetrimon Precision Booster (4 of 4)
Implants named like: Wightstorm Manasikara Booster (4 of 4)
Modules named like: Energy Metastasis Adjuster (8 of 8)
"""
@@ -18179,6 +18227,7 @@ class Effect5213(BaseEffect):
shipRocketMaxVelocityBonusRookie
Used by:
Module: Skua Sharpshooter Mode
Ship: Taipan
"""
@@ -18186,8 +18235,10 @@ class Effect5213(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Rockets'),
'maxVelocity', ship.getModifiedItemAttr('rookieRocketVelocity'), **kwargs)
penalties = 'ship' not in context
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Rockets'), 'maxVelocity',
ship.getModifiedItemAttr('rookieRocketVelocity'), stackingPenalties=penalties, **kwargs)
class Effect5214(BaseEffect):
@@ -18195,6 +18246,7 @@ class Effect5214(BaseEffect):
shipLightMissileMaxVelocityBonusRookie
Used by:
Module: Skua Sharpshooter Mode
Ship: Taipan
"""
@@ -18202,8 +18254,10 @@ class Effect5214(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Light Missiles'),
'maxVelocity', ship.getModifiedItemAttr('rookieLightMissileVelocity'), **kwargs)
penalties = 'ship' not in context
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Light Missiles'), 'maxVelocity',
ship.getModifiedItemAttr('rookieLightMissileVelocity'), stackingPenalties=penalties, **kwargs)
class Effect5215(BaseEffect):
@@ -20345,6 +20399,7 @@ class Effect5468(BaseEffect):
shipBonusAgilityCI2
Used by:
Module: Anhinga Tertiary Mode
Ship: Badger
"""
@@ -20352,7 +20407,14 @@ class Effect5468(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('shipBonusCI2'), skill='Caldari Hauler', **kwargs)
if 'ship' in context:
skill = 'Caldari Hauler'
penalties = False
else:
skill = None
penalties = True
fit.ship.boostItemAttr('agility', ship.getModifiedItemAttr('shipBonusCI2'),
skill=skill, stackingPenalties=penalties, **kwargs)
class Effect5469(BaseEffect):
@@ -20885,6 +20947,24 @@ class Effect5559(BaseEffect):
'shieldBonus', ship.getModifiedItemAttr('shipBonusMC2'), skill='Minmatar Cruiser', **kwargs)
class Effect5560(BaseEffect):
"""
roleBonusMarauderMJDRReactivationDelayBonus
Used by:
Module: Anhinga Tertiary Mode
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
penalties = 'ship' not in context
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Micro Jump Drive', 'moduleReactivationDelay',
ship.getModifiedItemAttr('roleBonusMarauder'), stackingPenalties=penalties, **kwargs)
class Effect5564(BaseEffect):
"""
subSystemBonusCaldariOffensiveCommandBursts
@@ -21075,6 +21155,7 @@ class Effect5618(BaseEffect):
shipBonusRHMLROF2CB
Used by:
Modules named like: Anhinga Mode (3 of 3)
Ship: Raven
Ship: Widow
"""
@@ -21083,8 +21164,18 @@ class Effect5618(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Heavy',
'speed', ship.getModifiedItemAttr('shipBonus2CB'), skill='Caldari Battleship', **kwargs)
if 'ship' in context:
skill = 'Caldari Battleship'
penalties = False
penaltyGroup = None
else:
skill = None
penalties = True
penaltyGroup = 'postPerc'
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Missile Launcher Rapid Heavy', 'speed',
ship.getModifiedItemAttr('shipBonus2CB'), skill=skill,
stackingPenalties=penalties, penaltyGroup=penaltyGroup, **kwargs)
class Effect5619(BaseEffect):
@@ -22373,6 +22464,8 @@ class Effect5867(BaseEffect):
shipBonusMissileExplosionDelayPirateFaction2
Used by:
Module: Anhinga Primary Mode
Module: Anhinga Secondary Mode
Ship: Barghest
Ship: Garmur
Ship: Laelaps
@@ -22384,8 +22477,10 @@ class Effect5867(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
'explosionDelay', ship.getModifiedItemAttr('shipBonusRole8'), **kwargs)
penalties = 'ship' not in context
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'), 'explosionDelay',
ship.getModifiedItemAttr('shipBonusRole8'), stackingPenalties=penalties, **kwargs)
class Effect5868(BaseEffect):
@@ -23307,7 +23402,7 @@ class Effect6009(BaseEffect):
Used by:
Ships from group: Strategic Cruiser (4 of 4)
Ships from group: Tactical Destroyer (4 of 4)
Ships from group: Tactical Destroyer (5 of 5)
"""
type = 'passive'
@@ -23324,7 +23419,8 @@ class Effect6010(BaseEffect):
shipModeMaxTargetRangePostDiv
Used by:
Modules named like: Sharpshooter Mode (4 of 4)
Modules named like: Sharpshooter Mode (5 of 5)
Module: Anhinga Primary Mode
"""
type = 'passive'
@@ -23365,7 +23461,7 @@ class Effect6012(BaseEffect):
shipModeScanStrengthPostDiv
Used by:
Modules named like: Sharpshooter Mode (4 of 4)
Modules named like: Sharpshooter Mode (5 of 5)
"""
type = 'passive'
@@ -23386,8 +23482,7 @@ class Effect6014(BaseEffect):
modeSigRadiusPostDiv
Used by:
Module: Confessor Defense Mode
Module: Jackdaw Defense Mode
Modules named like: Defense Mode (3 of 5)
"""
type = 'passive'
@@ -23403,7 +23498,7 @@ class Effect6015(BaseEffect):
modeArmorResonancePostDiv
Used by:
Modules named like: Defense Mode (3 of 4)
Modules named like: Defense Mode (3 of 5)
"""
type = 'passive'
@@ -23429,7 +23524,7 @@ class Effect6016(BaseEffect):
modeAgilityPostDiv
Used by:
Modules named like: Propulsion Mode (4 of 4)
Modules named like: Propulsion Mode (5 of 5)
"""
type = 'passive'
@@ -23643,8 +23738,7 @@ class Effect6041(BaseEffect):
modeShieldResonancePostDiv
Used by:
Module: Jackdaw Defense Mode
Module: Svipul Defense Mode
Modules named like: Defense Mode (3 of 5)
"""
type = 'passive'
@@ -23968,6 +24062,7 @@ class Effect6077(BaseEffect):
Used by:
Ship: Jackdaw
Ship: Skua
"""
type = 'passive'
@@ -23986,6 +24081,7 @@ class Effect6083(BaseEffect):
Used by:
Ship: Jackdaw
Ship: Metamorphosis
Ship: Skua
Ship: Sunesis
"""
@@ -24005,6 +24101,7 @@ class Effect6085(BaseEffect):
Used by:
Ship: Jackdaw
Ship: Skua
"""
type = 'passive'
@@ -24079,6 +24176,7 @@ class Effect6098(BaseEffect):
Used by:
Ship: Jackdaw
Ship: Skua
"""
type = 'passive'
@@ -25472,6 +25570,7 @@ class Effect6316(BaseEffect):
Used by:
Ships from group: Command Destroyer (3 of 6)
Ship: Skua
"""
type = 'passive'
@@ -25490,6 +25589,7 @@ class Effect6317(BaseEffect):
Used by:
Ships from group: Command Destroyer (6 of 6)
Ship: Skua
"""
type = 'passive'
@@ -25763,6 +25863,7 @@ class Effect6334(BaseEffect):
Used by:
Ships from group: Command Destroyer (3 of 6)
Ship: Skua
"""
type = 'passive'
@@ -31727,6 +31828,7 @@ class Effect6799(BaseEffect):
Used by:
Module: Jackdaw Sharpshooter Mode
Module: Skua Sharpshooter Mode
"""
type = 'passive'
@@ -31747,7 +31849,7 @@ class Effect6800(BaseEffect):
modeDampTDResistsPostDiv
Used by:
Modules named like: Sharpshooter Mode (4 of 4)
Modules named like: Sharpshooter Mode (5 of 5)
"""
type = 'passive'
@@ -31763,8 +31865,7 @@ class Effect6801(BaseEffect):
modeMWDandABBoostPostDiv
Used by:
Module: Confessor Propulsion Mode
Module: Svipul Propulsion Mode
Modules named like: Propulsion Mode (3 of 5)
"""
type = 'passive'
@@ -34760,11 +34861,20 @@ class Effect7117(BaseEffect):
roleBonusWarpSpeed
Used by:
Items from category: Ship (42 of 409)
Ships from group: Blockade Runner (5 of 5)
Ships from group: Covert Ops (9 of 9)
Ships from group: Hauler (5 of 18)
Ships from group: Interceptor (10 of 10)
Ships from group: Interdictor (4 of 4)
Ship: Azariel
Ship: Cynabal
Ship: Dramiel
Ship: Khizriel
Ship: Leopard
Ship: Machariel
Ship: Mekubal
Ship: Sarathiel
Ship: Victorieux Luxury Yacht
"""
type = 'passive'
@@ -37751,6 +37861,23 @@ class Effect8279(BaseEffect):
skill='Industrial Command Ships', **kwargs)
class Effect8291(BaseEffect):
"""
afterburnerSpeedBoostBonusPassive
Used by:
Implants named like: Wightstorm Cetana Booster (4 of 4)
"""
type = 'passive'
@staticmethod
def handler(fit, booster, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Afterburner'), 'speedFactor',
booster.getModifiedItemAttr('speedFBonus'), **kwargs)
class Effect8294(BaseEffect):
"""
industrialCommandBonusDroneOreMiningYield
@@ -41626,7 +41753,7 @@ class Effect12329(BaseEffect):
shipMiningYieldBonusOreDestroyer1
Used by:
Variations of ship: Pioneer (3 of 3)
Variations of ship: Pioneer (3 of 4)
"""
type = 'passive'
@@ -42378,6 +42505,26 @@ class Effect12757(BaseEffect):
'miningCritBonusYield', src.getModifiedItemAttr('miningCritBonusYieldBonus') * src.level, **kwargs)
class Effect12758(BaseEffect):
"""
shipRoleBonusAnhingaLargeMissilePowerFittingBonus
Used by:
Ship: Anhinga
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemMultiply(
lambda mod: mod.item.group.name in (
'Missile Launcher Rapid Heavy',
'Missile Launcher Cruise',
'Missile Launcher Torpedo'),
'power', ship.getModifiedItemAttr('AnhingaLargeMissilePowerFittingBonus'), **kwargs)
class Effect12759(BaseEffect):
"""
miningCritChanceBonusOreIceOnline
@@ -42428,4 +42575,160 @@ class Effect12761(BaseEffect):
lambda mod: (mod.item.requiresSkill('Mining')
or mod.item.requiresSkill('Ice Harvesting')
or mod.item.requiresSkill('Gas Cloud Harvesting')),
'miningWasteProbability', src.getModifiedItemAttr('miningWasteProbabilityBonus'), **kwargs)
'miningWasteProbability', src.getModifiedItemAttr('miningWasteProbabilityBonus'),
stackingPenalties=True, **kwargs)
class Effect12764(BaseEffect):
"""
shipRoleBonusAnhingaLargeMissileCpuFittingBonus
Used by:
Ship: Anhinga
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemMultiply(
lambda mod: mod.item.group.name in (
'Missile Launcher Rapid Heavy',
'Missile Launcher Cruise',
'Missile Launcher Torpedo'),
'cpu', ship.getModifiedItemAttr('AnhingaLargeMissileCpuFittingBonus'), **kwargs)
class Effect12766(BaseEffect):
"""
shipBonusTorpedoAndCruiseMissileExplosionRadiusCBC1
Used by:
Ship: Anhinga
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Torpedoes') or mod.charge.requiresSkill('Cruise Missiles'),
'aoeCloudSize', ship.getModifiedItemAttr('shipBonusCBC1'), skill='Caldari Battlecruiser', **kwargs)
class Effect12767(BaseEffect):
"""
tacticalBonusSkuaDefensiveShieldRechargeRate
Used by:
Module: Skua Defense Mode
"""
type = 'passive'
@staticmethod
def handler(fit, module, context, projectionRange, **kwargs):
fit.ship.multiplyItemAttr('shieldRechargeRate', 1 / module.getModifiedItemAttr('modeShieldRechargePostDiv'), **kwargs)
class Effect12771(BaseEffect):
"""
shipRoleBonusPerseveranceIceMiningCriticalHitChanceBonus
Used by:
Ship: Perseverance
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Ice Harvesting'), 'miningCritChance',
ship.getModifiedItemAttr('shipRoleBonusPerseveranceIceMiningCriticalHitChance'), **kwargs)
class Effect12772(BaseEffect):
"""
shipIceMiningCriticalHitChanceBonusOreDestroyer1
Used by:
Ship: Perseverance
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Ice Harvesting'), 'miningCritChance',
ship.getModifiedItemAttr('shipBonusOreDestroyer1'), skill='Mining Destroyer', **kwargs)
class Effect12773(BaseEffect):
"""
shipIceMiningCriticalHitYieldBonusOreDestroyer2
Used by:
Ship: Perseverance
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Ice Harvesting'), 'miningCritBonusYield',
ship.getModifiedItemAttr('shipBonusOreDestroyer2'), skill='Mining Destroyer', **kwargs)
class Effect12774(BaseEffect):
"""
shipIceMiningRangeBonusOreDestroyer3
Used by:
Ship: Perseverance
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Ice Harvesting'), 'maxRange',
ship.getModifiedItemAttr('shipBonusOreDestroyer3'), skill='Mining Destroyer', **kwargs)
class Effect12777(BaseEffect):
"""
roleBonusCDLinksPGCPUReductionSkua
Used by:
Ship: Skua
"""
type = 'passive'
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'), 'cpu',
src.getModifiedItemAttr('roleBonusCD'), **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Leadership'), 'power',
src.getModifiedItemAttr('roleBonusCD'), **kwargs)
class Effect12790(BaseEffect):
"""
shipBonusTorpedoAndCruiseMissileExplosionVelocityCBC2
Used by:
Ship: Anhinga
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill('Torpedoes') or mod.charge.requiresSkill('Cruise Missiles'),
'aoeVelocity', ship.getModifiedItemAttr('shipBonusCBC2'), skill='Caldari Battlecruiser', **kwargs)

View File

@@ -951,7 +951,7 @@ class Fit:
mod.item.requiresSkill("Mining")
or mod.item.requiresSkill("Ice Harvesting")
or mod.item.requiresSkill("Gas Cloud Harvesting")),
"miningWasteProbability", value)
"miningWasteProbability", value, stackingPenalties=True)
del self.commandBonuses[warfareBuffID]

View File

@@ -126,7 +126,7 @@ class Ship(ItemAttrShortcut, HandledItem):
valid Item objects, not the Mode objects. Returns None if not a
t3 dessy
"""
if self.item.group.name != "Tactical Destroyer":
if self.item.group.name != "Tactical Destroyer" and self.item.name != "Anhinga":
return None
items = []

View File

@@ -47,6 +47,8 @@ class AddCurrentlyOpenFit(ContextMenuUnconditional):
if isinstance(page, BlankPage):
continue
fit = sFit.getFit(page.activeFitID, basic=True)
if fit is None:
continue
id = ContextMenuUnconditional.nextID()
mitem = wx.MenuItem(rootMenu, id, "{}: {}".format(fit.ship.item.name, fit.name))
bindmenu.Bind(wx.EVT_MENU, self.handleSelection, mitem)

View File

@@ -17,7 +17,10 @@ class ChangeShipTacticalMode(ContextMenuUnconditional):
self.modeMap = {
'Defense': _t('Defense'),
'Propulsion': _t('Propulsion'),
'Sharpshooter': _t('Sharpshooter')
'Sharpshooter': _t('Sharpshooter'),
'Primary': _t('Primary'),
'Secondary': _t('Secondary'),
'Tertiary': _t('Tertiary'),
}
def display(self, callingWindow, srcContext):

View File

@@ -166,7 +166,7 @@ class ItemView(Display):
self.updateItemStore(items)
self.filterItemStore()
return
# If "Fits" filter is active, re-filter the current view
if self.marketBrowser.getFitsFilter():
self.filterItemStore()

View File

@@ -130,6 +130,7 @@ class TargetingMiscViewMinimal(StatsView):
("specialPlanetaryCommoditiesHoldCapacity", _t("Planetary goods hold")),
("specialQuafeHoldCapacity", _t("Quafe hold")),
("specialMobileDepotHoldCapacity", _t("Mobile depot hold")),
("specialExpeditionHoldCapacity", _t("Expedition hold")),
))
cargoValues = {
@@ -154,6 +155,7 @@ class TargetingMiscViewMinimal(StatsView):
"specialPlanetaryCommoditiesHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialPlanetaryCommoditiesHoldCapacity"),
"specialQuafeHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialQuafeHoldCapacity"),
"specialMobileDepotHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialMobileDepotHoldCapacity"),
"specialExpeditionHoldCapacity": lambda: fit.ship.getModifiedItemAttr("specialExpeditionHoldCapacity"),
}
stats = (("labelTargets", {"main": lambda: fit.maxTargets}, 3, 0, 0, ""),

View File

@@ -106,6 +106,9 @@ class CharacterSelection(wx.Panel):
exportItem = menu.Append(wx.ID_ANY, _t("Copy Missing Skills"))
self.Bind(wx.EVT_MENU, self.exportSkills, exportItem)
exportItem = menu.Append(wx.ID_ANY, _t("Copy Missing Skills (condensed)"))
self.Bind(wx.EVT_MENU, self.exportSkillsCondensed, exportItem)
exportItem = menu.Append(wx.ID_ANY, _t("Copy Missing Skills (EVEMon)"))
self.Bind(wx.EVT_MENU, self.exportSkillsEveMon, exportItem)
@@ -268,6 +271,15 @@ class CharacterSelection(wx.Panel):
toClipboard(list)
def exportSkillsCondensed(self, evt):
skillsMap = self._buildSkillsTooltipSuperCondensed(self.reqs, skillsMap={})
list = ""
for key in sorted(skillsMap):
list += "%s %d\n" % (key, skillsMap[key][0])
toClipboard(list)
def exportSkillsEveMon(self, evt):
skillsMap = self._buildSkillsTooltipCondensed(self.reqs, skillsMap={})

View File

@@ -54,6 +54,7 @@ class MarketBrowser(wx.Panel):
self.settings = MarketPriceSettings.getInstance()
self.__mode = 'normal'
self.__normalBtnMap = {}
self.__normalSlotBtnMap = {}
self.marketView = MarketTree(self.splitter, self)
self.itemView = ItemView(self.splitter, self)
@@ -216,6 +217,9 @@ class MarketBrowser(wx.Panel):
self.__normalBtnMap.clear()
for btn in self.metaButtons:
self.__normalBtnMap[btn] = btn.userSelected
self.__normalSlotBtnMap.clear()
for btn in self.slotButtons:
self.__normalSlotBtnMap[btn] = btn.userSelected
if newMode == 'search':
self.marketView.UnselectAll()
setting = self.settings.get('marketMGSearchMode')
@@ -224,9 +228,14 @@ class MarketBrowser(wx.Panel):
if newMode in ('search', 'recent', 'charges'):
for btn in self.metaButtons:
btn.setUserSelection(True)
# Clear slot button selections when searching (search can return any item type)
for btn in self.slotButtons:
btn.setUserSelection(False)
if newMode == 'normal':
for btn, state in self.__normalBtnMap.items():
btn.setUserSelection(state)
for btn, state in self.__normalSlotBtnMap.items():
btn.setUserSelection(state)
# We turn on all meta buttons permanently
if setting == 2:
for btn in self.metaButtons:

View File

@@ -1,22 +1,68 @@
# noinspection PyPackageRequirements
import wx
from logbook import Logger
logger = Logger(__name__)
def toClipboard(text):
clip = wx.TheClipboard
clip.Open()
data = wx.TextDataObject(text)
clip.SetData(data)
clip.Close()
"""
Copy text to clipboard. Explicitly uses CLIPBOARD selection, not PRIMARY.
On X11 systems, wxPython can confuse between PRIMARY and CLIPBOARD selections,
causing "already open" errors. This function ensures we always use CLIPBOARD.
See: https://discuss.wxpython.org/t/wx-theclipboard-pasting-different-content-on-every-second-paste/35361
"""
clipboard = wx.TheClipboard
try:
# Explicitly use CLIPBOARD selection, not PRIMARY selection
# This prevents X11 confusion between the two clipboard types
clipboard.UsePrimarySelection(False)
if clipboard.Open():
try:
data = wx.TextDataObject(text)
clipboard.SetData(data)
return True
finally:
clipboard.Close()
else:
logger.debug("Failed to open clipboard for writing")
return False
except Exception as e:
logger.warning("Error writing to clipboard: {}", e)
return False
def fromClipboard():
clip = wx.TheClipboard
clip.Open()
data = wx.TextDataObject("")
if clip.GetData(data):
clip.Close()
return data.GetText()
else:
clip.Close()
"""
Read text from clipboard. Explicitly uses CLIPBOARD selection, not PRIMARY.
On X11 systems, wxPython can confuse between PRIMARY and CLIPBOARD selections,
causing "already open" errors. This function ensures we always use CLIPBOARD.
See: https://discuss.wxpython.org/t/wx-theclipboard-pasting-different-content-on-every-second-paste/35361
"""
clipboard = wx.TheClipboard
try:
# Explicitly use CLIPBOARD selection, not PRIMARY selection
# This prevents X11 confusion between the two clipboard types
clipboard.UsePrimarySelection(False)
if clipboard.Open():
try:
data = wx.TextDataObject()
if clipboard.GetData(data):
return data.GetText()
else:
logger.debug("Clipboard open but no CLIPBOARD data available")
return None
finally:
clipboard.Close()
else:
logger.debug("Failed to open clipboard for reading")
return None
except Exception as e:
logger.warning("Error reading from clipboard: {}", e)
return None

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
imgs/renders/29066@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/renders/29066@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
imgs/renders/29067@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
imgs/renders/29067@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
imgs/renders/29105@1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
imgs/renders/29105@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

11
pyfa.py
View File

@@ -150,6 +150,17 @@ if __name__ == "__main__":
mf = MainFrame(options.title)
ErrorHandler.SetParent(mf)
# Start ESI token validation, this helps avoid token expiry
try:
from service.esi import Esi
esi = Esi.getInstance()
esi.startTokenValidation()
pyfalog.info("ESI token validation started")
except (KeyboardInterrupt, SystemExit):
raise
except Exception as e:
pyfalog.warning(f"failed to start ESI token validation thread:\n{e}")
if options.profile_path:
profile_path = os.path.join(options.profile_path, 'pyfa-{}.profile'.format(datetime.datetime.now().strftime('%Y%m%d_%H%M%S')))
pyfalog.debug("Starting pyfa with a profiler, saving to {}".format(profile_path))

View File

@@ -24,9 +24,7 @@ echo "Building the binary..."
echo "Creating release zip..."
ZIP="pyfa-${TAG}-win.zip"
cd dist/pyfa
zip -r "../../${ZIP}" .
cd ../..
7z a "${ZIP}" dist/pyfa/*
echo "Creating a release..."
TOKEN="$GITEA_API_KEY"
@@ -56,5 +54,7 @@ curl -X POST \
-H "Authorization: token $TOKEN" \
-F "attachment=@${ZIP}" \
"$GITEA/api/v1/repos/$REPO/releases/${RELEASE_ID}/assets?name=${ZIP}"
rm "${ZIP}"
echo "Release complete! ${ZIP} uploaded to ${TAG}"

View File

@@ -41,11 +41,15 @@ def main(old, new, groups=True, effects=True, attributes=True, renames=True):
new_cursor = new_db.cursor()
# Force some of the items to make them published
FORCEPUB_TYPES = ("Ibis", "Impairor", "Velator", "Reaper",
"Amarr Tactical Destroyer Propulsion Mode",
"Amarr Tactical Destroyer Sharpshooter Mode",
"Amarr Tactical Destroyer Defense Mode")
OVERRIDES_TYPEPUB = 'UPDATE invtypes SET published = 1 WHERE typeName = ?'
FORCEPUB_TYPES = (
"% Propulsion Mode",
"% Sharpshooter Mode",
"% Defense Mode",
"% Primary Mode",
"% Secondary Mode",
"% Tertiary Mode",
)
OVERRIDES_TYPEPUB = 'UPDATE invtypes SET published = 1 WHERE typeName like ?'
for typename in FORCEPUB_TYPES:
old_cursor.execute(OVERRIDES_TYPEPUB, (typename,))
new_cursor.execute(OVERRIDES_TYPEPUB, (typename,))

View File

@@ -25,6 +25,44 @@ pyfalog = Logger(__name__)
_t = wx.GetTranslation
class EsiTokenValidationThread(threading.Thread):
def __init__(self, callback=None):
threading.Thread.__init__(self)
self.name = "EsiTokenValidation"
self.callback = callback
self.running = True
def run(self):
with config.logging_setup.threadbound():
try:
esi = Esi.getInstance()
chars = esi.getSsoCharacters()
for char in chars:
if not self.running:
return
if char.is_token_expired():
pyfalog.info(f"Token expired for {char.characterName}, attempting refresh")
try:
esi.refresh(char)
eos.db.save(char)
pyfalog.info(f"Successfully refreshed token for {char.characterName}")
except Exception as e:
pyfalog.error(f"Failed to refresh token for {char.characterName}: {e}")
else:
pyfalog.debug(f"Token valid for {char.characterName}")
except Exception as e:
pyfalog.error(f"Error validating ESI tokens: {e}")
finally:
if self.callback:
wx.CallAfter(self.callback)
def stop(self):
self.running = False
class Esi(EsiAccess):
_instance = None
@@ -194,3 +232,9 @@ class Esi(EsiAccess):
pyfalog.debug("Handling SSO login with: {0}", message)
self.handleLogin(message['code'])
def startTokenValidation(self):
pyfalog.debug("Starting ESI token validation thread")
tokenValidationThread = EsiTokenValidationThread()
tokenValidationThread.daemon = True
tokenValidationThread.start()

View File

@@ -327,6 +327,8 @@ class Market:
"Sidewinder" : self.les_grp, # AT20 prize
"Cobra" : self.les_grp, # AT20 prize
"Python" : self.les_grp, # AT20 prize
"Skua" : self.les_grp, # AT21 prize
"Anhinga" : self.les_grp, # AT21 prize
}
self.ITEMS_FORCEGROUP_R = self.__makeRevDict(self.ITEMS_FORCEGROUP)

View File

@@ -49167,5 +49167,51 @@
"published": 1,
"stackable": 1,
"unitID": 105
},
"6054": {
"attributeID": 6054,
"categoryID": 37,
"dataType": 5,
"defaultValue": 0.0,
"displayWhenZero": 0,
"highIsGood": 1,
"name": "AnhingaLargeMissilePowerFittingBonus",
"published": 0,
"stackable": 1
},
"6055": {
"attributeID": 6055,
"categoryID": 37,
"dataType": 5,
"defaultValue": 0.0,
"displayWhenZero": 0,
"highIsGood": 1,
"name": "AnhingaLargeMissileCpuFittingBonus",
"published": 0,
"stackable": 1
},
"6057": {
"attributeID": 6057,
"categoryID": 2,
"dataType": 5,
"defaultValue": 1.0,
"description": "",
"displayWhenZero": 0,
"highIsGood": 0,
"name": "modeShieldRechargePostDiv",
"published": 0,
"stackable": 1
},
"6062": {
"attributeID": 6062,
"categoryID": 51,
"dataType": 5,
"defaultValue": 0.0,
"description": "Role Bonus for Perseverance Ice Mining Critical Hit Role bonus",
"displayWhenZero": 0,
"highIsGood": 1,
"name": "shipRoleBonusPerseveranceIceMiningCriticalHitChance",
"published": 0,
"stackable": 1
}
}

View File

@@ -58317,6 +58317,7 @@
],
"propulsionChance": 0,
"published": 0,
"rangeAttributeID": 54,
"rangeChance": 0
},
"6216": {
@@ -99669,6 +99670,56 @@
"published": 0,
"rangeChance": 0
},
"12758": {
"description_de": "Automatically generated effect",
"description_en-us": "Automatically generated effect",
"description_es": "Automatically generated effect",
"description_fr": "Automatically generated effect",
"description_it": "Automatically generated effect",
"description_ja": "Automatically generated effect",
"description_ko": "Automatically generated effect",
"description_ru": "Automatically generated effect",
"description_zh": "Automatically generated effect",
"descriptionID": 1022818,
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12758,
"effectName": "shipRoleBonusAnhingaLargeMissilePowerFittingBonus",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 1245,
"modifiedAttributeID": 30,
"modifyingAttributeID": 6054,
"operation": 0
},
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 506,
"modifiedAttributeID": 30,
"modifyingAttributeID": 6054,
"operation": 0
},
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 508,
"modifiedAttributeID": 30,
"modifyingAttributeID": 6054,
"operation": 0
}
],
"propulsionChance": 0,
"published": 0,
"rangeAttributeID": 54,
"rangeChance": 0
},
"12759": {
"disallowAutoRepeat": 0,
"effectCategory": 4,
@@ -99769,5 +99820,285 @@
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12764": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12764,
"effectName": "shipRoleBonusAnhingaLargeMissileCpuFittingBonus",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 1245,
"modifiedAttributeID": 50,
"modifyingAttributeID": 6055,
"operation": 0
},
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 506,
"modifiedAttributeID": 50,
"modifyingAttributeID": 6055,
"operation": 0
},
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 508,
"modifiedAttributeID": 50,
"modifyingAttributeID": 6055,
"operation": 0
}
],
"propulsionChance": 0,
"published": 0,
"rangeAttributeID": 54,
"rangeChance": 0
},
"12765": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12765,
"effectName": "shipBonusTorpedoAndCruiseMissileExplosionVelocityMB",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 653,
"modifyingAttributeID": 490,
"operation": 6,
"skillTypeID": 3325
},
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 653,
"modifyingAttributeID": 490,
"operation": 6,
"skillTypeID": 3326
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12766": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12766,
"effectName": "shipBonusTorpedoAndCruiseMissileExplosionRadiusCBC1",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 654,
"modifyingAttributeID": 743,
"operation": 6,
"skillTypeID": 3326
},
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 654,
"modifyingAttributeID": 743,
"operation": 6,
"skillTypeID": 3325
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12767": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12767,
"effectName": "tacticalBonusSkuaDefensiveShieldRechargeRate",
"electronicChance": 0,
"guid": "",
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 479,
"modifyingAttributeID": 6057,
"operation": 5
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12771": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12771,
"effectName": "shipRoleBonusPerseveranceIceMiningCriticalHitChanceBonus",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationRequiredSkillModifier",
"modifiedAttributeID": 5967,
"modifyingAttributeID": 6062,
"operation": 6,
"skillTypeID": 16281
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12772": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12772,
"effectName": "shipIceMiningCriticalHitChanceBonusOreDestroyer1",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationRequiredSkillModifier",
"modifiedAttributeID": 5967,
"modifyingAttributeID": 5820,
"operation": 6,
"skillTypeID": 16281
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12773": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12773,
"effectName": "shipIceMiningCriticalHitYieldBonusOreDestroyer2",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationRequiredSkillModifier",
"modifiedAttributeID": 5969,
"modifyingAttributeID": 5821,
"operation": 6,
"skillTypeID": 16281
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12774": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12774,
"effectName": "shipIceMiningRangeBonusOreDestroyer3",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationRequiredSkillModifier",
"modifiedAttributeID": 54,
"modifyingAttributeID": 5822,
"operation": 6,
"skillTypeID": 16281
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12777": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12777,
"effectName": "roleBonusCDLinksPGCPUReductionSkua",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationRequiredSkillModifier",
"modifiedAttributeID": 30,
"modifyingAttributeID": 2064,
"operation": 6,
"skillTypeID": 3348
},
{
"domain": "shipID",
"func": "LocationRequiredSkillModifier",
"modifiedAttributeID": 50,
"modifyingAttributeID": 2064,
"operation": 6,
"skillTypeID": 3348
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"12790": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 12790,
"effectName": "shipBonusTorpedoAndCruiseMissileExplosionVelocityCBC2",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 653,
"modifyingAttributeID": 745,
"operation": 6,
"skillTypeID": 3325
},
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 653,
"modifyingAttributeID": 745,
"operation": 6,
"skillTypeID": 3326
}
],
"propulsionChance": 0,
"published": 0,
"rangeAttributeID": 54,
"rangeChance": 0
}
}

View File

@@ -29731,7 +29731,7 @@
"groupName_ja": "突入ポッドランチャー",
"groupName_ko": "침투 포드 런처",
"groupName_ru": "Пусковая установка внедряющихся капсул",
"groupName_zh": "分裂者级逃生舱发射器",
"groupName_zh": "突破者级逃生舱发射器",
"groupNameID": 726805,
"published": 1,
"useBasePrice": 0
@@ -29750,7 +29750,7 @@
"groupName_ja": "突入ポッド「SCARAB」",
"groupName_ko": "스캐럽 침투 포드",
"groupName_ru": "Внедряющиеся капсулы «Скарабей»",
"groupName_zh": "圣甲虫分裂者级逃生舱",
"groupName_zh": "圣甲虫突破者级逃生舱",
"groupNameID": 726814,
"published": 1,
"useBasePrice": 0
@@ -30182,14 +30182,14 @@
"categoryID": 2,
"fittableNonSingleton": 0,
"groupID": 4918,
"groupName_de": "Phasenasteroiden",
"groupName_en-us": "Phased Asteroids",
"groupName_es": "Asteroides fásicos",
"groupName_fr": "Astéroïdes phasiques",
"groupName_it": "Phased Asteroids",
"groupName_de": "Phasenasteroid",
"groupName_en-us": "Phased Asteroid",
"groupName_es": "Asteroide fásico",
"groupName_fr": "Astéroïde phasique",
"groupName_it": "Phased Asteroid",
"groupName_ja": "位相偏移アステロイド",
"groupName_ko": "위상 소행성",
"groupName_ru": "Фазовые астероиды",
"groupName_ru": "Фазовый астероид",
"groupName_zh": "相位小行星",
"groupNameID": 1019374,
"published": 0,
@@ -30366,6 +30366,63 @@
"published": 0,
"useBasePrice": 0
},
"4949": {
"anchorable": 0,
"anchored": 0,
"categoryID": 11,
"fittableNonSingleton": 0,
"groupID": 4949,
"groupName_de": "Interbus-Yoiul-LADs",
"groupName_en-us": "InterBus Yoiul LADs",
"groupName_es": "MAL de Yoiul de InterBus",
"groupName_fr": "LUTINs de Yoiul d'InterBus",
"groupName_it": "InterBus Yoiul LADs",
"groupName_ja": "インターバス・ヨイウルLAD",
"groupName_ko": "인터버스 요이얼 LAD",
"groupName_ru": "Йольские ГАДы консорциума «ИнтерБас»",
"groupName_zh": "星际捷运尤尔节自动化物流配送舰",
"groupNameID": 1025585,
"published": 0,
"useBasePrice": 0
},
"4972": {
"anchorable": 0,
"anchored": 0,
"categoryID": 17,
"fittableNonSingleton": 0,
"groupID": 4972,
"groupName_de": "Verity-Kryo-Technologie",
"groupName_en-us": "Verity Cryo Tech",
"groupName_es": "Tecnología criogénica de Verity",
"groupName_fr": "Cryotechnologie de Verity",
"groupName_it": "Verity Cryo Tech",
"groupName_ja": "ヴェリティ・クライオテック",
"groupName_ko": "베리티 크라이오 장비",
"groupName_ru": "Криотехнология «Подлинных улучшений»",
"groupName_zh": "维里蒂低温技术",
"groupNameID": 1028940,
"published": 1,
"useBasePrice": 1
},
"4975": {
"anchorable": 0,
"anchored": 0,
"categoryID": 11,
"fittableNonSingleton": 0,
"groupID": 4975,
"groupName_de": "Irregular Capital Industrial Ship",
"groupName_en-us": "Irregular Capital Industrial Ship",
"groupName_es": "Irregular Capital Industrial Ship",
"groupName_fr": "Irregular Capital Industrial Ship",
"groupName_it": "Irregular Capital Industrial Ship",
"groupName_ja": "Irregular Capital Industrial Ship",
"groupName_ko": "Irregular Capital Industrial Ship",
"groupName_ru": "Irregular Capital Industrial Ship",
"groupName_zh": "Irregular Capital Industrial Ship",
"groupNameID": 1030693,
"published": 0,
"useBasePrice": 0
},
"350858": {
"anchorable": 0,
"anchored": 0,

View File

@@ -14686,5 +14686,131 @@
},
"27266": {
"iconFile": "res:/UI/Texture/Icons/Modules/fleetBoost_MiningCrit.png"
},
"27267": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_racial_ama_05_128.png"
},
"27268": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_racial_ama_05_128.png"
},
"27269": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_racial_ama_05_128.png"
},
"27270": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_ornament_01_128.png"
},
"27271": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_ornament_01_128.png"
},
"27272": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_art_deco_01_2K_128.png"
},
"27273": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_10_128.png"
},
"27274": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_10_128.png"
},
"27275": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_08_128.png"
},
"27276": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_08_128.png"
},
"27277": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_05_128.png"
},
"27278": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_05_128.png"
},
"27279": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_16_128.png"
},
"27280": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_16_128.png"
},
"27281": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_12_128.png"
},
"27282": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_12_128.png"
},
"27283": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_07_128.png"
},
"27284": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_07_128.png"
},
"27285": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_11_128.png"
},
"27286": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_11_128.png"
},
"27287": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_organic_10_128.png"
},
"27288": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_09_128.png"
},
"27289": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_06_128.png"
},
"27290": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_14_128.png"
},
"27291": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/patterns/cosm_winter_14_128.png"
},
"27292": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_turquoise_gloss_000_060_100_cs180.png"
},
"27293": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_malachite_highgloss_000_100_010_cs180.png"
},
"27294": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_orange_matt_000_100_010_cs180.png"
},
"27295": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_emerald_brushed_000_060_100.png"
},
"27296": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_emerald_brushed_000_060_100.png"
},
"27297": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_royal_polished_000_080_100.png"
},
"27298": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_royal_polished_000_080_100.png"
},
"27299": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_emerald_polished_000_100_010.png"
},
"27300": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_emerald_polished_000_100_010.png"
},
"27301": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_azure_gloss_000_030_100.png"
},
"27302": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_azure_gloss_000_030_100.png"
},
"27303": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_azure_highgloss_000_100_001.png"
},
"27304": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_azure_highgloss_000_100_001.png"
},
"27305": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_rosered_satin_000_100_050.png"
},
"27306": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_rosered_satin_000_100_050.png"
},
"27307": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_royal_metallic_000_100_100.png"
},
"27309": {
"iconFile": "res:/UI/Texture/classes/Cosmetics/Ship/materials/cosm_brass_metallic_013_051_089.png"
}
}

View File

@@ -45856,7 +45856,7 @@
"name_ja": "突入ポッド",
"name_ko": "침투 포드",
"name_ru": "Внедряющиеся капсулы",
"name_zh": "分裂者级逃生舱",
"name_zh": "突破者级逃生舱",
"nameID": 871476,
"parentGroupID": 11
},
@@ -45881,7 +45881,7 @@
"name_ja": "突入ポッドランチャー",
"name_ko": "침투 포드 런처",
"name_ru": "Пусковая установка внедряющихся капсул",
"name_zh": "分裂者级逃生舱发射器",
"name_zh": "突破者级逃生舱发射器",
"nameID": 871478,
"parentGroupID": 10
},

View File

@@ -11511,7 +11511,7 @@
"17940": {
"3380": 5,
"3410": 3,
"89241": 3
"32918": 3
},
"17975": {
"16281": 1
@@ -30076,6 +30076,12 @@
"3436": 1,
"9955": 5
},
"89807": {
"33096": 1
},
"89808": {
"35680": 1
},
"90037": {
"11584": 3
},
@@ -30249,8 +30255,86 @@
"43703": 1,
"60515": 1
},
"90665": {
"3386": 1
"90669": {
"3405": 1
},
"90670": {
"3405": 1
},
"90671": {
"3405": 1
},
"90672": {
"3405": 1
},
"90673": {
"3405": 1
},
"90674": {
"3405": 1
},
"90675": {
"3405": 1
},
"90676": {
"3405": 1
},
"90677": {
"3405": 1
},
"90678": {
"3405": 1
},
"90679": {
"3405": 1
},
"90680": {
"3405": 1
},
"90682": {
"3405": 1
},
"90683": {
"3405": 1
},
"90684": {
"3405": 1
},
"90685": {
"3405": 1
},
"90686": {
"3405": 1
},
"90687": {
"3405": 1
},
"90688": {
"3405": 1
},
"90689": {
"3405": 1
},
"90690": {
"3405": 1
},
"90691": {
"3405": 1
},
"90692": {
"3405": 1
},
"90693": {
"3405": 1
},
"90694": {
"3402": 1
},
"90695": {
"3402": 1
},
"90696": {
"3402": 1
},
"90727": {
"3386": 3
@@ -30263,5 +30347,18 @@
"90733": {
"3348": 1,
"22536": 1
},
"91044": {
"21718": 1
},
"91045": {
"21718": 1
},
"91046": {
"21718": 1
},
"91174": {
"16281": 1,
"89241": 2
}
}

View File

@@ -827996,7 +827996,7 @@
},
{
"attributeID": 184,
"value": 89241.0
"value": 32918.0
},
{
"attributeID": 275,

View File

@@ -878783,6 +878783,10 @@
"attributeID": 1298,
"value": 1283.0
},
{
"attributeID": 1302,
"value": 91174.0
},
{
"attributeID": 1768,
"value": 11346.0
@@ -878873,6 +878877,10 @@
"attributeID": 1298,
"value": 1283.0
},
{
"attributeID": 1302,
"value": 91174.0
},
{
"attributeID": 1768,
"value": 11346.0
@@ -878963,6 +878971,10 @@
"attributeID": 1298,
"value": 1283.0
},
{
"attributeID": 1302,
"value": 91174.0
},
{
"attributeID": 1692,
"value": 4.0
@@ -886541,6 +886553,10 @@
"attributeID": 1299,
"value": 1534.0
},
{
"attributeID": 1303,
"value": 89808.0
},
{
"attributeID": 1544,
"value": 1.0
@@ -958018,6 +958034,10 @@
"attributeID": 1301,
"value": 540.0
},
{
"attributeID": 1302,
"value": 89808.0
},
{
"attributeID": 1795,
"value": 60000.0
@@ -958188,6 +958208,10 @@
"attributeID": 1301,
"value": 540.0
},
{
"attributeID": 1302,
"value": 89808.0
},
{
"attributeID": 1795,
"value": 60000.0
@@ -958528,6 +958552,10 @@
"attributeID": 1301,
"value": 540.0
},
{
"attributeID": 1302,
"value": 89808.0
},
{
"attributeID": 1795,
"value": 60000.0
@@ -958698,6 +958726,10 @@
"attributeID": 1301,
"value": 540.0
},
{
"attributeID": 1302,
"value": 89808.0
},
{
"attributeID": 1795,
"value": 60000.0
@@ -970503,6 +970535,10 @@
"attributeID": 1301,
"value": 540.0
},
{
"attributeID": 1302,
"value": 89808.0
},
{
"attributeID": 1795,
"value": 60000.0
@@ -970685,6 +970721,10 @@
"attributeID": 1301,
"value": 540.0
},
{
"attributeID": 1302,
"value": 89808.0
},
{
"attributeID": 1795,
"value": 60000.0
@@ -970867,6 +970907,10 @@
"attributeID": 1301,
"value": 540.0
},
{
"attributeID": 1303,
"value": 89808.0
},
{
"attributeID": 1795,
"value": 60000.0
@@ -971049,6 +971093,10 @@
"attributeID": 1301,
"value": 540.0
},
{
"attributeID": 1302,
"value": 89808.0
},
{
"attributeID": 1795,
"value": 60000.0

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

View File

@@ -168393,7 +168393,7 @@
"wreckTypeID": 41699
},
"42125": {
"basePrice": 119829000000.0,
"basePrice": 20000000000.0,
"capacity": 1750.0,
"certificateTemplate": 86,
"description_de": "<i>\"Die Föderation glaubt immer noch, sie könne mit der Zukunft der Menschen ihre Spiele treiben. So, wie sie auch mit dem Lebenswerk meines Vaters gespielt hat.\n\n\n\nIch werde ihnen zeigen, wie man dieses Spiel richtig spielt. Sie haben einen Mann zerstört, der die Wissenschaft und Anwendung von Neuralboostern revolutioniert hätte.\n\n\n\nIch werde sie zerstören, indem ich ihnen zeige, wie mächtig diese Wissenschaft sein kann. Es wird keinen Frieden, kein Erbarmen geben. Ich schwöre Rache, im Namen und in Erinnerung Igil Sarpatis.\"</i>\n\n\n\n- V. Salvador Sarpati, im Interview mit Alton Haveri von Scope",
@@ -168442,7 +168442,7 @@
"wreckTypeID": 72817
},
"42126": {
"basePrice": 672620000000.0,
"basePrice": 60000000000.0,
"capacity": 18000.0,
"certificateTemplate": 244,
"description_de": "<i>\"Die Kaperung der Molyneux hat mir gezeigt, dass Kapselpiloten herausragende Dinge leisten können, wenn sie Blut gerochen haben. Eine Zeit lang war ich mir nicht sicher, ob wir entkommen würden.\n\n\n\nNicht wegen der Regierungspolizei. Nein, die waren der reinste Witz. Aber die Kapselpiloten hätten mich fast erwischt. Das Witzige an der Sache ist, dass sie einander fast so erbittert bekämpft haben, wie sie versuchten mich zu fassen.\n\n\n\nEinige haben wir sogar geholfen. Wissen Sie, der Pfad der Zerstörung, den wir hinterlassen haben, ging fast ausschließlich auf sie zurück. Ich denke, es wäre sicher amüsant, ihnen ein paar mehr Spielzeuge zu geben, Sie nicht?\"</i>\n\n\n\n- V. Salvador Sarpati, im Interview mit Alton Haveri von Scope",
@@ -171548,7 +171548,7 @@
"volume": 1.0
},
"42241": {
"basePrice": 253642000000.0,
"basePrice": 60000000000.0,
"capacity": 12400.0,
"certificateTemplate": 249,
"description_de": "<i>\"Molok, vom falschen Glauben als 'Der Täuscher' verhöhnt, war wahrhaftiger als jeder der sogenannten 'Echten Amarr', die den korrupten Thronbeschmutzern Gefolgschaft leisteten, es sich je erhoffen konnte. Er war es, der die wahre Natur des Universums begriffen hatte. Es gibt nur eine Wahrheit: Macht ist alles; die nackte, gnadenlose Kraft in der Hand jener, die den Willen haben, nach ihr zu greifen. Wir trinken das Blut der Mächtigen und der Reinen, denn um zu überleben und fortzuschreiten, müssen wir uns an ihrer Energie laben und sie unser eigen machen. Das ist die Lektion von Molok. Sein Scheitern ist nicht von Belang, seine Erkenntnis der großen Wahrheit ist alles, was zählt.\"</i>\n\n\n\n- Omir Sarikusa, Meditationen des Blutroten Kelchs",
@@ -178117,6 +178117,7 @@
"descriptionID": 522185,
"groupID": 1770,
"iconID": 21687,
"isDynamicType": 0,
"marketGroupID": 1633,
"mass": 0.0,
"metaGroupID": 1,
@@ -178153,6 +178154,7 @@
"descriptionID": 522191,
"groupID": 1770,
"iconID": 21691,
"isDynamicType": 0,
"marketGroupID": 1633,
"mass": 0.0,
"metaGroupID": 1,
@@ -178225,6 +178227,7 @@
"descriptionID": 522212,
"groupID": 1770,
"iconID": 21700,
"isDynamicType": 0,
"marketGroupID": 1633,
"mass": 0.0,
"metaGroupID": 1,
@@ -178261,6 +178264,7 @@
"descriptionID": 522216,
"groupID": 1770,
"iconID": 21704,
"isDynamicType": 0,
"marketGroupID": 1633,
"mass": 0.0,
"metaGroupID": 1,
@@ -199677,6 +199681,7 @@
"descriptionID": 522187,
"groupID": 1770,
"iconID": 21687,
"isDynamicType": 0,
"marketGroupID": 1633,
"mass": 0.0,
"metaGroupID": 2,
@@ -199714,6 +199719,7 @@
"descriptionID": 522194,
"groupID": 1770,
"iconID": 21691,
"isDynamicType": 0,
"marketGroupID": 1633,
"mass": 0.0,
"metaGroupID": 2,
@@ -199751,6 +199757,7 @@
"descriptionID": 522214,
"groupID": 1770,
"iconID": 21700,
"isDynamicType": 0,
"marketGroupID": 1633,
"mass": 0.0,
"metaGroupID": 2,
@@ -199788,6 +199795,7 @@
"descriptionID": 522226,
"groupID": 1770,
"iconID": 21704,
"isDynamicType": 0,
"marketGroupID": 1633,
"mass": 0.0,
"metaGroupID": 2,
@@ -238958,7 +238966,7 @@
"volume": 0.01
},
"45649": {
"basePrice": 254538000000.0,
"basePrice": 60000000000.0,
"capacity": 13750.0,
"certificateTemplate": 247,
"description_de": "„Wir sind also die Neunte Megacorporation. Wir sind es schon lange Zeit und wir sind ein wichtiger Teil der ganzen Masche. Der Staat der Caldari wurde damals schal und unflexibel, mit all diesem „Heiian“-Bockmist. Glaubt irgendwer, dass sich die Großen Acht auch nur einen Fedofurz darum scheren? Das ist Holoreel-Mindflood. Nur für die Trottel. Die Proleten, die nur Ausreden suchen, den Großen Mega-Daddys nicht im Wege zu stehen. Und die Kapselpiloten, die „Ehre sei dem Staat“ kleffen. Sie sind die allerschlimmsten. All diese Macht und sie verbeugen sich vor Mami Staat und Daddy Mega. Das macht mich krank.\n\n\n\n„Was? Achso, die Neunte Mega. Was ich meine? Also, die Großen Acht, ja? Sie teilen den Staat unter sich auf. Sie stecken die Köpfe zusammen, bestimmen wer was kriegt, und geben dem Ganzen einen netten Anstrich mit ein bisschen Wettbewerb hier und ein wenig Krieg da. Das ist alles nur Theater. Sie sind vertikal integrierte Megacorporations, die komplette Sektoren der Wirtschaft beherrschen, weil sie sich alle an denselben Plan halten. Wir aber sind der Anti-Plan. Wir sind die neunte Mega, weil sich schließlich ja auch jemand um die Kriminalität kümmern muss, oder? Das sind wir: die Megacorporation des Verbrechens!“ \n\n\n\n Korako „The Rabbit“ Kosakami, Interview mit Ret Gloriaxx von der Sendung „Scopes Galaktische Stunde“",

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

View File

@@ -697,6 +697,10 @@
{
"level": 3,
"typeID": 90727
},
{
"level": 2,
"typeID": 91017
}
]
},
@@ -1398,6 +1402,10 @@
{
"level": 3,
"typeID": 90727
},
{
"level": 2,
"typeID": 91017
}
]
},
@@ -2099,6 +2107,10 @@
{
"level": 3,
"typeID": 90727
},
{
"level": 2,
"typeID": 91017
}
]
},
@@ -2800,6 +2812,10 @@
{
"level": 3,
"typeID": 90727
},
{
"level": 2,
"typeID": 91017
}
]
}

View File

@@ -70,7 +70,7 @@
"displayNameID": 517442,
"itemModifiers": [
{
"dogmaAttributeID": 37
"dogmaAttributeID": 3171
}
],
"locationGroupModifiers": [],
@@ -5261,5 +5261,135 @@
],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"2518": {
"aggregateMode": "Minimum",
"developerDescription": "Sisters of EVE Metaliminal Storm Bonus 5 - Winter Nexus Storm",
"displayName_de": "Thermalresistenz-Bonus (unbeständiger Eissturm)",
"displayName_en-us": "Thermal Resistance Bonus (Volatile Ice Storm)",
"displayName_es": "Bonificación de resistencia térmica (tormenta de hielo volátil)",
"displayName_fr": "Bonus de résistance thermique (tempête de glace volatile)",
"displayName_it": "Thermal Resistance Bonus (Volatile Ice Storm)",
"displayName_ja": "サーマルレジスタンスボーナス(揮発性アイスストーム)",
"displayName_ko": "열 저항력 보너스(불안정한 얼음 폭풍)",
"displayName_ru": "Бонус к сопротивляемости термальному урону (нестабильная ледяная буря)",
"displayName_zh": "热能抗性加成(不稳定冰风暴)",
"displayNameID": 1030721,
"itemModifiers": [
{
"dogmaAttributeID": 110
},
{
"dogmaAttributeID": 270
},
{
"dogmaAttributeID": 274
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowInverted"
},
"2519": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 21",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2520": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 22",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2521": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 23",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2522": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 24",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2523": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 25",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2524": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 27",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2525": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 28",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2526": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 26",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2527": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 29",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
},
"2528": {
"aggregateMode": "Maximum",
"developerDescription": "Sisters of EVE Landmark Bonus 30",
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PreAssignment",
"showOutputValueInUI": "ShowNormal"
}
}

View File

@@ -1,10 +1,10 @@
[
{
"field_name": "client_build",
"field_value": 3103065
"field_value": 3137986
},
{
"field_name": "dump_time",
"field_value": 1763465723
"field_value": 1765458681
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
version: v2.65.0
version: v2.65.2