Compare commits

..

57 Commits

Author SHA1 Message Date
DarkPhoenix
514d11e6f2 Bump pyfa version 2020-10-13 18:38:29 +03:00
DarkPhoenix
9d759054ca Add migrations/conversions 2020-10-13 18:33:21 +03:00
DarkPhoenix
c162d96cc0 Rename triglavian profiles 2020-10-13 18:27:05 +03:00
DarkPhoenix
3c22397377 Update staticdata 2020-10-13 17:58:41 +03:00
DarkPhoenix
20e605c30f Make quantum cores invalid modules for pyfa fits 2020-09-24 16:51:40 +03:00
DarkPhoenix
9601887855 Add ability to import modules from ESI directly into pyfa 2020-09-23 17:24:40 +03:00
DarkPhoenix
0a7f5b6092 Bump version 2020-09-23 14:35:18 +03:00
DarkPhoenix
e27ea79bc6 Add recalculation after unloading charge 2020-09-23 13:48:24 +03:00
DarkPhoenix
adb0609eb8 Update staticdata to 1810288 2020-09-23 13:35:18 +03:00
DarkPhoenix
39b08baff0 Change damage pattern order 2020-09-23 13:30:07 +03:00
DarkPhoenix
e4388bf835 Merge branch 'singularity' into master 2020-09-23 13:09:35 +03:00
Anton Vorobyov
b9cae5165b Merge pull request #2273 from Neugeniko/master
Addresses Issue #2265. Damage and Target Profiles for new abyssal NPC's.
2020-09-23 12:39:10 +03:00
Neugeniko
06e6589209 Edit Concord Profiles due to CCP patch updates. 2020-09-22 21:56:26 +10:00
Ryan Holmes
9f21b251ff Fix string escape (again) 2020-09-21 20:43:49 -04:00
Ryan Holmes
7d7a499070 Escape string 2020-09-21 20:35:49 -04:00
Ryan Holmes
e18a3bfab5 #2272 info blurb 2020-09-21 20:35:20 -04:00
DarkPhoenix
385215b717 Bump version 2020-09-17 01:31:45 +03:00
DarkPhoenix
d09913d61b Add 2 new fax effects 2020-09-17 01:31:24 +03:00
DarkPhoenix
b9059835ce Update static data to 1806850 2020-09-17 01:13:08 +03:00
DarkPhoenix
7af28b497c Fix several bugs related to siege mod rep cycle time mutations 2020-09-16 16:16:44 +03:00
DarkPhoenix
5cf555b8ce Bump version 2020-09-16 14:11:29 +03:00
DarkPhoenix
a25bb1aaa3 Update static data to 1805757 2020-09-16 14:05:33 +03:00
DarkPhoenix
24a54c9cec Merge branch 'singularity' into master 2020-09-16 14:04:02 +03:00
Neugeniko
0b9e6bf55d Damage Changes from sisi to tq for "Depths of the Abyss' patch. 2020-09-15 21:31:08 +10:00
Neugeniko
41070ce22e Fixed text error with menu names. 2020-09-14 09:24:19 +10:00
Neugeniko
7b5aab8a35 Merge pull request #2 from Neugeniko/Issue-#2265,-Update-Target-profiles
Update target profiles for Abyss npcs and add new profiles for new ab…
2020-09-13 20:15:26 +10:00
Neugeniko
c9fe6c959d Update target profiles for Abyss npcs and add new profiles for new abyss npc, Issue #2265 2020-09-13 20:15:09 +10:00
Neugeniko
67cf3a3a26 Merge pull request #1 from Neugeniko/Issue-#2265,-Update-Damage-profiles
Update damage profiles for Abyss npcs and add new profiles for new ab…
2020-09-13 19:33:10 +10:00
Neugeniko
c644d528e9 Update damage profiles for Abyss npcs and add new profiles for new abyss npcs, see Issue: #2265 2020-09-13 19:31:27 +10:00
DarkPhoenix
c1302ce7ee Fix version 2020-09-10 04:38:52 +03:00
DarkPhoenix
e4ea9c2ab9 Bump version 2020-09-10 04:38:20 +03:00
DarkPhoenix
cca5781ca8 Bump version 2020-09-10 04:30:20 +03:00
DarkPhoenix
9760d2c4a5 Merge branch 'master' into singularity 2020-09-10 04:26:42 +03:00
DarkPhoenix
4efa9a6961 Always return some value in mutators 2020-09-10 04:25:37 +03:00
DarkPhoenix
b27d4bcbbd Merge branch 'master' into singularity 2020-09-10 03:57:34 +03:00
DarkPhoenix
7bff295012 Add some jargon definitions for capital mods with numbers 2020-09-10 03:55:52 +03:00
DarkPhoenix
01249dfd9c Validate presence of mutaplasmid item 2020-09-10 03:28:36 +03:00
DarkPhoenix
0cc2668c1c Update warfare buffs for caustic cloud 2020-09-10 02:00:15 +03:00
DarkPhoenix
dfad734a0a Update staticdata to 1801413 2020-09-10 01:01:31 +03:00
DarkPhoenix
66c901a2b0 Bump version 2020-09-09 16:38:29 +03:00
DarkPhoenix
3673e7f39e Take measures against ESI spamming error 2020-09-09 16:35:57 +03:00
Anton Vorobyov
124b35d108 Merge pull request #2264 from jrdn/delete_all_esi_fits
Delete all of a character's fits via ESI
2020-09-09 15:12:01 +03:00
DarkPhoenix
5181e8e95a Reduce point radius for linux when scaled up 2020-09-09 15:00:35 +03:00
Anton Vorobyov
48cc4ce9d4 Merge pull request #2260 from YaarPodshipnik/fix-vector-picker-dpi-scaling
Fix HiDPI scaling issues in VectorPicker
2020-09-09 14:22:21 +03:00
Anton Vorobyov
07ff43b576 Merge branch 'master' into fix-vector-picker-dpi-scaling 2020-09-09 14:09:16 +03:00
DarkPhoenix
70969cc9fb Fix structure ewar skill not affecting ECM batteries 2020-09-09 13:56:06 +03:00
DarkPhoenix
d23bf2fa4c Add SBA tiericide conversions 2020-09-09 13:33:07 +03:00
DarkPhoenix
04c8659922 Update static data to 1800064 2020-09-09 13:21:16 +03:00
Jordan Greenberg
5e3b92699b Delete all of a character's fits via ESI 2020-09-05 15:32:52 -07:00
Yaar Podshipnik
1755ab4c3f Fix HiDPI scaling issues in VectorPicker
VectorPicker was DPI unware, so when asking GetClientSize() it would
get the actual size multiplied by the scaling factor of GetContentScaleFactor().
This made the widget seem to be cut off and display only the upper left
quarter of the circle.
Similarly, when choosing the font size for the percentages, it wouldn't
scale the maximum size, resulting in very large text.
2020-08-26 17:01:20 +01:00
DarkPhoenix
26ec741094 Bump version 2020-08-25 14:21:49 +03:00
DarkPhoenix
530f7510d5 Update staticdata to 1792574 2020-08-25 14:18:27 +03:00
DarkPhoenix
37ab704cd7 Merge branch 'singularity' into master 2020-08-25 14:17:21 +03:00
DarkPhoenix
683ad3802f Unmutate destination module when moving from cargo 2020-08-25 00:46:51 +03:00
DarkPhoenix
c882351886 Make propmod speed bonuses penalizable as postMul chain, fixes black hole + propmod speeds 2020-08-21 00:15:32 +03:00
DarkPhoenix
9d71215c52 Bump version 2020-08-20 16:31:00 +03:00
DarkPhoenix
d2a0605abe Update static data to 1790093 2020-08-20 16:27:05 +03:00
35 changed files with 162636 additions and 111897 deletions

View File

@@ -119,7 +119,7 @@ function PrepareToInstall(var NeedsRestart: Boolean): String;
begin
if(IsAppRunning( 'pyfa.exe' )) then
begin
Result := 'Please close pyfa before continuing. When closed, please go back to the previous step and continue.';
Result := 'Please close pyfa before continuing. When closed, please go back to the previous step and continue. If you have named this installer pyfa.exe, please rename it and restart installation';
end
else
begin

View File

@@ -0,0 +1,26 @@
"""
Migration 43
- Shield booster amplifier tiericide
"""
CONVERSIONS = {
16533: ( # Stalwart Restrained Shield Boost Amplifier
16531, # 5a Prototype Shield Support I
),
16535: ( # Copasetic Compact Shield Boost Amplifier
16529, # Ionic Field Accelerator I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "modules" SET "baseItemID" = ? WHERE "baseItemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -0,0 +1,25 @@
"""
Migration 44
- Signal distortion amplifier tiericide
"""
CONVERSIONS = {
25565: ( # Hypnos Compact Signal Distortion Amplifier I
25571, # Initiated Signal Distortion Amplifier I
25569, # Induced Signal Distortion Amplifier I
25567, # Compulsive Signal Distortion Amplifier I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "modules" SET "baseItemID" = ? WHERE "baseItemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -42,7 +42,7 @@ class Effect4(BaseEffect):
shieldBoosting
Used by:
Modules from group: Shield Booster (89 of 89)
Modules from group: Shield Booster (90 of 90)
"""
runTime = 'late'
@@ -148,7 +148,7 @@ class Effect27(BaseEffect):
armorRepair
Used by:
Modules from group: Armor Repair Unit (100 of 100)
Modules from group: Armor Repair Unit (101 of 101)
"""
runTime = 'late'
@@ -203,7 +203,7 @@ class Effect39(BaseEffect):
warpDisrupt
Used by:
Modules named like: Warp Disruptor (28 of 28)
Modules named like: Warp Disruptor (29 of 29)
"""
type = 'projected', 'active'
@@ -374,7 +374,7 @@ class Effect58(BaseEffect):
Modules from group: Capacitor Flux Coil (6 of 6)
Modules from group: Capacitor Power Relay (20 of 20)
Modules from group: Power Diagnostic System (23 of 23)
Modules from group: Propulsion Module (68 of 133)
Modules from group: Propulsion Module (69 of 135)
Modules from group: Reactor Control Unit (22 of 22)
"""
@@ -1126,7 +1126,7 @@ class Effect394(BaseEffect):
Implants named like: grade Snake (16 of 18)
Modules named like: Auxiliary Thrusters (8 of 8)
Implant: Quafe Zero
Implant: Serenity Seasonal Booster 1
Implant: Serenity YC122.9 Season Booster - Max Velocity
Skill: Navigation
"""
@@ -1151,6 +1151,7 @@ class Effect395(BaseEffect):
Implants named like: grade Nomad (10 of 12)
Modules named like: Low Friction Nozzle Joints (8 of 8)
Implant: Genolution Core Augmentation CA-4
Implant: Serenity YC122.9 Season Booster - Agility
Skill: Evasive Maneuvering
Skill: Spaceship Command
"""
@@ -2441,6 +2442,7 @@ class Effect856(BaseEffect):
Implants named like: Eifyr and Co. 'Rogue' Warp Drive Speed WS (6 of 6)
Implants named like: grade Ascendancy (10 of 12)
Modules named like: Hyperspatial Velocity Optimizer (8 of 8)
Implant: Serenity YC122.9 Season Booster - Warp Speed
"""
type = 'passive'
@@ -3738,6 +3740,7 @@ class Effect1185(BaseEffect):
Used by:
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
"""
type = 'passive'
@@ -4492,6 +4495,7 @@ class Effect1452(BaseEffect):
Used by:
Implants named like: grade Centurion (10 of 12)
Modules named like: Particle Dispersion Projector (8 of 8)
Implant: Serenity YC122.9 Season Booster - EW Range
Skill: Long Distance Jamming
"""
@@ -5209,7 +5213,7 @@ class Effect1720(BaseEffect):
Used by:
Modules from group: Capacitor Power Relay (20 of 20)
Modules from group: Shield Boost Amplifier (25 of 25)
Modules from group: Shield Boost Amplifier (23 of 23)
"""
type = 'passive'
@@ -9224,8 +9228,8 @@ class Effect3002(BaseEffect):
Used by:
Modules from group: Ancillary Remote Shield Booster (4 of 4)
Modules from group: Capacitor Booster (41 of 41)
Modules from group: Energy Neutralizer (54 of 54)
Modules from group: Energy Nosferatu (54 of 54)
Modules from group: Energy Neutralizer (55 of 55)
Modules from group: Energy Nosferatu (55 of 55)
Modules from group: Hull Repair Unit (25 of 25)
Modules from group: Remote Armor Repairer (39 of 39)
Modules from group: Remote Capacitor Transmitter (35 of 35)
@@ -9469,7 +9473,7 @@ class Effect3061(BaseEffect):
heatDamageBonus
Used by:
Modules from group: Shield Boost Amplifier (25 of 25)
Modules from group: Shield Boost Amplifier (23 of 23)
"""
type = 'passive'
@@ -9543,7 +9547,7 @@ class Effect3174(BaseEffect):
Used by:
Modules from group: Stasis Grappler (7 of 7)
Modules from group: Stasis Web (19 of 19)
Modules from group: Warp Scrambler (54 of 55)
Modules from group: Warp Scrambler (56 of 57)
"""
type = 'overheat'
@@ -9559,7 +9563,7 @@ class Effect3175(BaseEffect):
overloadSelfSpeedBonus
Used by:
Modules from group: Propulsion Module (133 of 133)
Modules from group: Propulsion Module (135 of 135)
"""
type = 'overheat'
@@ -9611,8 +9615,8 @@ class Effect3200(BaseEffect):
overloadSelfArmorDamageAmountDurationBonus
Used by:
Modules from group: Ancillary Armor Repairer (7 of 7)
Modules from group: Armor Repair Unit (100 of 100)
Modules from group: Ancillary Armor Repairer (8 of 8)
Modules from group: Armor Repair Unit (101 of 101)
"""
type = 'overheat'
@@ -9629,8 +9633,8 @@ class Effect3201(BaseEffect):
overloadSelfShieldBonusDurationBonus
Used by:
Modules from group: Ancillary Shield Booster (8 of 8)
Modules from group: Shield Booster (89 of 89)
Modules from group: Ancillary Shield Booster (9 of 9)
Modules from group: Shield Booster (90 of 90)
"""
type = 'overheat'
@@ -11207,6 +11211,7 @@ class Effect3650(BaseEffect):
Used by:
Implants named like: grade Centurion (10 of 12)
Implant: Serenity YC122.9 Season Booster - EW Range
"""
type = 'passive'
@@ -11223,6 +11228,7 @@ class Effect3651(BaseEffect):
Used by:
Implants named like: grade Centurion (10 of 12)
Implant: Serenity YC122.9 Season Booster - EW Range
"""
type = 'passive'
@@ -11239,6 +11245,7 @@ class Effect3652(BaseEffect):
Used by:
Implants named like: grade Centurion (10 of 12)
Implant: Serenity YC122.9 Season Booster - EW Range
"""
type = 'passive'
@@ -11255,6 +11262,7 @@ class Effect3653(BaseEffect):
Used by:
Implants named like: grade Centurion (10 of 12)
Implant: Serenity YC122.9 Season Booster - EW Range
"""
type = 'passive'
@@ -11355,6 +11363,7 @@ class Effect3668(BaseEffect):
Used by:
Implants named like: grade Harvest (10 of 12)
Implant: Serenity YC122.9 Season Booster - Mining Range
"""
type = 'passive'
@@ -11371,6 +11380,7 @@ class Effect3669(BaseEffect):
Used by:
Implants named like: grade Harvest (10 of 12)
Implant: Serenity YC122.9 Season Booster - Mining Range
"""
type = 'passive'
@@ -11387,6 +11397,7 @@ class Effect3670(BaseEffect):
Used by:
Implants named like: grade Harvest (10 of 12)
Implant: Serenity YC122.9 Season Booster - Mining Range
"""
type = 'passive'
@@ -11403,6 +11414,7 @@ class Effect3671(BaseEffect):
Used by:
Implants named like: grade Harvest (10 of 12)
Implant: Serenity YC122.9 Season Booster - Mining Range
"""
type = 'passive'
@@ -11419,6 +11431,7 @@ class Effect3672(BaseEffect):
Used by:
Implants named like: grade Harvest (12 of 12)
Implant: Serenity YC122.9 Season Booster - Mining Range
"""
runTime = 'early'
@@ -13595,6 +13608,7 @@ class Effect4162(BaseEffect):
Implants named like: Poteque 'Prospector' Astrometric Rangefinding AR (3 of 3)
Implants named like: grade Virtue (10 of 12)
Modules named like: Gravity Capacitor Upgrade (8 of 8)
Implant: Serenity YC122.9 Season Booster - Probe Scanning Strength
Skill: Astrometric Rangefinding
Skill: Astrometrics
"""
@@ -16692,7 +16706,7 @@ class Effect4936(BaseEffect):
fueledShieldBoosting
Used by:
Modules from group: Ancillary Shield Booster (8 of 8)
Modules from group: Ancillary Shield Booster (9 of 9)
"""
runTime = 'late'
@@ -18978,7 +18992,7 @@ class Effect5275(BaseEffect):
fueledArmorRepair
Used by:
Modules from group: Ancillary Armor Repairer (7 of 7)
Modules from group: Ancillary Armor Repairer (8 of 8)
"""
runTime = 'late'
@@ -23418,7 +23432,7 @@ class Effect5934(BaseEffect):
warpScrambleBlockMWDWithNPCEffect
Used by:
Modules named like: Warp Scrambler (27 of 27)
Modules named like: Warp Scrambler (28 of 28)
"""
runTime = 'early'
@@ -25148,7 +25162,7 @@ class Effect6187(BaseEffect):
energyNeutralizerFalloff
Used by:
Modules from group: Energy Neutralizer (54 of 54)
Modules from group: Energy Neutralizer (55 of 55)
"""
type = 'active', 'projected'
@@ -25239,7 +25253,7 @@ class Effect6197(BaseEffect):
energyNosferatuFalloff
Used by:
Modules from group: Energy Nosferatu (54 of 54)
Modules from group: Energy Nosferatu (55 of 55)
"""
runTime = 'late'
@@ -26908,7 +26922,7 @@ class Effect6400(BaseEffect):
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
groups = ('Structure Warp Scrambler', 'Structure Disruption Battery', 'Structure Stasis Webifier')
groups = ('Structure Warp Scrambler', 'Structure ECM Battery', 'Structure Stasis Webifier')
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups,
'capacitorNeed', src.getModifiedItemAttr('capNeedBonus'),
skill='Structure Electronic Systems', **kwargs)
@@ -29082,7 +29096,7 @@ class Effect6582(BaseEffect):
moduleBonusSiegeModule
Used by:
Variations of module: Siege Module I (2 of 2)
Modules named like: Siege Module (3 of 3)
"""
runTime = 'early'
@@ -31525,7 +31539,7 @@ class Effect6730(BaseEffect):
moduleBonusMicrowarpdrive
Used by:
Modules from group: Propulsion Module (68 of 133)
Modules from group: Propulsion Module (69 of 135)
"""
runTime = 'late'
@@ -31537,7 +31551,9 @@ class Effect6730(BaseEffect):
speedBoost = module.getModifiedItemAttr('speedFactor')
mass = fit.ship.getModifiedItemAttr('mass')
thrust = module.getModifiedItemAttr('speedBoostFactor')
fit.ship.boostItemAttr('maxVelocity', speedBoost * thrust / mass, **kwargs)
# It is actually a postMul, see black hole speed interactions
fit.ship.boostItemAttr('maxVelocity', speedBoost * thrust / mass,
stackingPenalties=True, penaltyGroup='postMul', **kwargs)
fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusBonus'),
stackingPenalties=True, **kwargs)
@@ -31547,7 +31563,7 @@ class Effect6731(BaseEffect):
moduleBonusAfterburner
Used by:
Modules from group: Propulsion Module (65 of 133)
Modules from group: Propulsion Module (66 of 135)
"""
runTime = 'late'
@@ -31559,7 +31575,9 @@ class Effect6731(BaseEffect):
speedBoost = module.getModifiedItemAttr('speedFactor')
mass = fit.ship.getModifiedItemAttr('mass')
thrust = module.getModifiedItemAttr('speedBoostFactor')
fit.ship.boostItemAttr('maxVelocity', speedBoost * thrust / mass, **kwargs)
# It is actually a postMul, see black hole speed interactions
fit.ship.boostItemAttr('maxVelocity', speedBoost * thrust / mass,
stackingPenalties=True, penaltyGroup='postMul', **kwargs)
class Effect6732(BaseEffect):
@@ -37178,3 +37196,39 @@ class Effect8085(BaseEffect):
lambda mod: mod.item.requiresSkill('Fighters'),
'fighterAbilityMissilesExplosionRadius', container.getModifiedItemAttr('aoeCloudSizeMultiplier'),
stackingPenalties=True, penaltyGroup='postMul', **kwargs)
class Effect8091(BaseEffect):
"""
shipBonusForceAuxiliaryG2CapBoosterStrength
Used by:
Ship: Ninazu
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.group.name == 'Capacitor Booster Charge',
'capacitorBonus', ship.getModifiedItemAttr('shipBonusForceAuxiliaryG2'),
skill='Gallente Carrier', **kwargs)
class Effect8092(BaseEffect):
"""
shipBonusForceAuxiliaryM2CapBoosterStrength
Used by:
Ship: Lif
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.group.name == 'Capacitor Booster Charge',
'capacitorBonus', ship.getModifiedItemAttr('shipBonusForceAuxiliaryM2'),
skill='Minmatar Carrier', **kwargs)

View File

@@ -83,14 +83,17 @@ BUILTINS = OrderedDict([
(-52, ('[Bombs]Scorch Bomb', 0, 6400, 0, 0)),
(-53, ('[Bombs]Concussion Bomb', 0, 0, 6400, 0)),
(-54, ('[Bombs]Shrapnel Bomb', 0, 0, 0, 6400)),
# Source: ticket #2067
(-55, ('[NPC][Abyssal]All', 130, 396, 258, 216)),
# Source: ticket #2067 and #2265
(-55, ('[NPC][Abyssal]All', 126, 427, 218, 230)),
(-109, ('[NPC][Abyssal]Angel', 450, 72, 80, 398)),
(-107, ('[NPC][Abyssal]Concord', 53, 559, 94, 295)),
(-56, ('[NPC][Abyssal]Drifter', 250, 250, 250, 250)),
(-57, ('[NPC][Abyssal]Drones', 250, 250, 250, 250)),
(-58, ('[NPC][Abyssal]Overmind', 0, 408, 592, 0)),
(-59, ('[NPC][Abyssal]Seeker', 406, 406, 94, 94)),
(-58, ('[NPC][Abyssal]Overmind', 0, 410, 590, 0)),
(-108, ('[NPC][Abyssal]Sansha', 569, 431, 0, 0)),
(-59, ('[NPC][Abyssal]Seeker', 402, 402, 98, 98)),
(-60, ('[NPC][Abyssal]Sleeper', 313, 313, 187, 187)),
(-61, ('[NPC][Abyssal]Triglavian', 0, 610, 0, 390)),
(-61, ('[NPC][Abyssal]Triglavian', 0, 615, 0, 385)),
(-62, ('[NPC][Asteroid]Angel Cartel', 1838, 562, 2215, 3838)),
(-63, ('[NPC][Asteroid]Blood Raiders', 5067, 4214, 0, 0)),
(-64, ('[NPC][Asteroid]Guristas', 0, 1828, 7413, 0)),
@@ -116,11 +119,11 @@ BUILTINS = OrderedDict([
(-84, ('[NPC][Deadspace]Sanshas Nation', 3009, 2237, 0, 0)),
(-85, ('[NPC][Deadspace]Serpentis', 0, 3110, 1929, 0)),
# Source: ticket #2067
(-86, ('[NPC][Invasion][Invading Precursor Entities]Dread', 0, 417, 0, 583)),
(-87, ('[NPC][Invasion][Invading Precursor Entities]Normal Subcaps', 0, 610, 0, 390)),
(-88, ('[NPC][Invasion][Invading Precursor Entities]Subcaps w/missiles 0% spool up', 367, 155, 367, 112)),
(-89, ('[NPC][Invasion][Invading Precursor Entities]Subcaps w/missiles 50% spool up', 291, 243, 291, 175)),
(-90, ('[NPC][Invasion][Invading Precursor Entities]Subcaps w/missiles 100% spool up', 241, 301, 241, 217)),
(-86, ('[NPC][Invasion][Triglavian Entities]Dread', 0, 417, 0, 583)),
(-87, ('[NPC][Invasion][Triglavian Entities]Normal Subcaps', 0, 610, 0, 390)),
(-88, ('[NPC][Invasion][Triglavian Entities]Subcaps w/missiles 0% spool up', 367, 155, 367, 112)),
(-89, ('[NPC][Invasion][Triglavian Entities]Subcaps w/missiles 50% spool up', 291, 243, 291, 175)),
(-90, ('[NPC][Invasion][Triglavian Entities]Subcaps w/missiles 100% spool up', 241, 301, 241, 217)),
(-91, ('[NPC][Invasion][Retaliating Amarr Entities]Dread/Subcaps', 583, 417, 0, 0)),
(-92, ('[NPC][Invasion][Retaliating Caldari Entities]Dread', 1000, 0, 0, 0)),
(-93, ('[NPC][Invasion][Retaliating Caldari Entities]Subcaps', 511, 21, 29, 440)),

View File

@@ -755,13 +755,11 @@ class Fit:
self.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"),
"signatureRadius", value, stackingPenalties=True)
if warfareBuffID == 80: # AOE_Beacon_caustic_cloud_local_repair
self.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
"armorDamageAmount", value, stackingPenalties=True)
if warfareBuffID == 80: # AOE_Beacon_caustic_cloud_inertia
self.ship.boostItemAttr("agility", value, stackingPenalties=True)
if warfareBuffID == 81: # AOE_Beacon_caustic_cloud_remote_repair
self.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"),
"armorDamageAmount", value, stackingPenalties=True)
if warfareBuffID == 81: # AOE_Beacon_caustic_cloud_velocity
self.ship.boostItemAttr("maxVelocity", value, stackingPenalties=True)
if warfareBuffID == 88: # AOE_Beacon_filament_cloud_shield_booster_shield_bonus
self.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),

View File

@@ -198,11 +198,23 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
# todo: validate baseItem as well if it's set.
if self.isEmpty:
return False
return (
self.__item is None or (
self.__item.category.name not in ("Module", "Subsystem", "Structure Module") and
self.__item.group.name not in self.SYSTEM_GROUPS) or
(self.item.isAbyssal and not self.isMutated))
if self.__item is None:
return True
if (
self.__item.category.name not in ("Module", "Subsystem", "Structure Module")
and self.__item.group.name not in self.SYSTEM_GROUPS
):
return True
if (
self.__item.category.name == "Structure Module"
and self.__item.group.name == "Quantum Cores"
):
return True
if self.item.isAbyssal and not self.isMutated:
return True
if self.isMutated and not self.__mutaplasmid:
return True
return False
@property
def isMutated(self):

View File

@@ -89,12 +89,9 @@ class Mutator(EqBase):
# sweet, all good
returnVal = val
else:
# need to fudge the numbers a bit. Go with the value closest to base
if val >= 0:
returnVal = min(self.maxValue, max(self.minValue, val))
else:
returnVal = max(self.maxValue, min(self.minValue, val))
actualMin = min(self.minValue, self.maxValue)
actualMax = max(self.minValue, self.maxValue)
returnVal = min(actualMax, max(actualMin, val))
return returnVal
@property
@@ -120,15 +117,24 @@ class Mutator(EqBase):
@property
def baseValue(self):
return self.baseAttribute.value
try:
return self.baseAttribute.value
except AttributeError:
return 0
@property
def minValue(self):
return self.minMod * self.baseAttribute.value
try:
return self.minMod * self.baseAttribute.value
except AttributeError:
return 0
@property
def maxValue(self):
return self.maxMod * self.baseAttribute.value
try:
return self.maxMod * self.baseAttribute.value
except AttributeError:
return 0
@property
def attribute(self):

View File

@@ -84,102 +84,142 @@ BUILTINS = OrderedDict([
(-50, ('[NPC][Burner]Talos', 0.68, 0.59, 0.59, 0.43)),
(-51, ('[NPC][Burner]Sentinel', 0.58, 0.45, 0.52, 0.66)),
# Source: ticket #2067
(-52, ('[NPC][Invasion]Invading Precursor Entities', 0.422, 0.367, 0.453, 0.411)),
(-52, ('[NPC][Invasion]Triglavian Entities', 0.422, 0.367, 0.453, 0.411)),
(-53, ('[NPC][Invasion]Retaliating Amarr Entities', 0.360, 0.310, 0.441, 0.602)),
(-54, ('[NPC][Invasion]Retaliating Caldari Entities', 0.303, 0.610, 0.487, 0.401)),
(-55, ('[NPC][Invasion]Retaliating Gallente Entities', 0.383, 0.414, 0.578, 0.513)),
(-56, ('[NPC][Invasion]Retaliating Minmatar Entities', 0.620, 0.422, 0.355, 0.399)),
(-57, ('[NPC][Abyssal][Dark Matter All Tiers]Drones', 0.439, 0.522, 0.529, 0.435)),
(-58, ('[NPC][Abyssal][Dark Matter All Tiers]Overmind', 0.626, 0.576, 0.612, 0.624)),
(-58, ('[NPC][Abyssal][Dark Matter All Tiers]Overmind', 0.643, 0.593, 0.624, 0.639)),
(-59, ('[NPC][Abyssal][Dark Matter All Tiers]Seeker', 0.082, 0.082, 0.082, 0.082)),
(-60, ('[NPC][Abyssal][Dark Matter All Tiers]Triglavian', 0.477, 0.401, 0.449, 0.37)),
(-61, ('[NPC][Abyssal][Dark Matter All Tiers]Drifter', 0.403, 0.403, 0.403, 0.403)),
(-60, ('[NPC][Abyssal][Dark Matter All Tiers]Triglavian', 0.494, 0.41, 0.464, 0.376)),
(-61, ('[NPC][Abyssal][Dark Matter All Tiers]Drifter', 0.415, 0.415, 0.415, 0.415)),
(-62, ('[NPC][Abyssal][Dark Matter All Tiers]Sleeper', 0.435, 0.435, 0.435, 0.435)),
(-63, ('[NPC][Abyssal][Dark Matter All Tiers]All', 0.507, 0.477, 0.502, 0.493)),
(-64, ('[NPC][Abyssal][Electrical T1/T2]Drones', 0.323, 0.522, 0.529, 0.435)),
(-65, ('[NPC][Abyssal][Electrical T1/T2]Overmind', 0.521, 0.576, 0.612, 0.624)),
(-66, ('[NPC][Abyssal][Electrical T1/T2]Seeker', 0, 0.082, 0.082, 0.082)),
(-67, ('[NPC][Abyssal][Electrical T1/T2]Triglavian', 0.333, 0.401, 0.449, 0.37)),
(-68, ('[NPC][Abyssal][Electrical T1/T2]Drifter', 0.267, 0.403, 0.403, 0.403)),
(-69, ('[NPC][Abyssal][Electrical T1/T2]Sleeper', 0.329, 0.435, 0.435, 0.435)),
(-70, ('[NPC][Abyssal][Electrical T1/T2]All', 0.385, 0.477, 0.502, 0.493)),
(-63, ('[NPC][Abyssal][Dark Matter All Tiers]All', 0.508, 0.474, 0.495, 0.488)),
(-64, ('[NPC][Abyssal][Electrical T0/T1/T2]Drones', 0.323, 0.522, 0.529, 0.435)),
(-65, ('[NPC][Abyssal][Electrical T0/T1/T2]Overmind', 0.542, 0.593, 0.624, 0.639)),
(-66, ('[NPC][Abyssal][Electrical T0/T1/T2]Seeker', 0, 0.082, 0.082, 0.082)),
(-67, ('[NPC][Abyssal][Electrical T0/T1/T2]Triglavian', 0.356, 0.41, 0.464, 0.376)),
(-68, ('[NPC][Abyssal][Electrical T0/T1/T2]Drifter', 0.277, 0.415, 0.415, 0.415)),
(-69, ('[NPC][Abyssal][Electrical T0/T1/T2]Sleeper', 0.329, 0.435, 0.435, 0.435)),
(-70, ('[NPC][Abyssal][Electrical T0/T1/T2]All', 0.381, 0.474, 0.495, 0.488)),
(-71, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Drones', 0.255, 0.522, 0.529, 0.435)),
(-72, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Overmind', 0.457, 0.576, 0.612, 0.624)),
(-72, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Overmind', 0.48, 0.593, 0.624, 0.639)),
(-73, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Seeker', 0, 0.082, 0.082, 0.082)),
(-74, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Triglavian', 0.241, 0.401, 0.449, 0.37)),
(-75, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Drifter', 0.184, 0.403, 0.403, 0.403)),
(-74, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Triglavian', 0.268, 0.41, 0.464, 0.376)),
(-75, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Drifter', 0.191, 0.415, 0.415, 0.415)),
(-76, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Sleeper', 0.268, 0.435, 0.435, 0.435)),
(-77, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]All', 0.313, 0.477, 0.502, 0.493)),
(-78, ('[NPC][Abyssal][Electrical T4/T5]Drones', 0.193, 0.522, 0.529, 0.435)),
(-79, ('[NPC][Abyssal][Electrical T4/T5]Overmind', 0.398, 0.576, 0.612, 0.624)),
(-80, ('[NPC][Abyssal][Electrical T4/T5]Seeker', 0, 0.082, 0.082, 0.082)),
(-81, ('[NPC][Abyssal][Electrical T4/T5]Triglavian', 0.183, 0.401, 0.449, 0.37)),
(-82, ('[NPC][Abyssal][Electrical T4/T5]Drifter', 0.107, 0.403, 0.403, 0.403)),
(-83, ('[NPC][Abyssal][Electrical T4/T5]Sleeper', 0.215, 0.435, 0.435, 0.435)),
(-84, ('[NPC][Abyssal][Electrical T4/T5]All', 0.25, 0.477, 0.502, 0.493)),
(-85, ('[NPC][Abyssal][Firestorm T1/T2]Drones', 0.461, 0.425, 0.541, 0.443)),
(-86, ('[NPC][Abyssal][Firestorm T1/T2]Overmind', 0.65, 0.469, 0.625, 0.633)),
(-87, ('[NPC][Abyssal][Firestorm T1/T2]Seeker', 0.084, 0, 0.084, 0.084)),
(-88, ('[NPC][Abyssal][Firestorm T1/T2]Triglavian', 0.534, 0.266, 0.484, 0.366)),
(-89, ('[NPC][Abyssal][Firestorm T1/T2]Drifter', 0.422, 0.282, 0.422, 0.422)),
(-90, ('[NPC][Abyssal][Firestorm T1/T2]Sleeper', 0.512, 0.402, 0.512, 0.512)),
(-91, ('[NPC][Abyssal][Firestorm T1/T2]All', 0.541, 0.365, 0.524, 0.504)),
(-77, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]All', 0.308, 0.474, 0.495, 0.488)),
(-78, ('[NPC][Abyssal][Electrical T4/T5/T6]Drones', 0.193, 0.522, 0.529, 0.435)),
(-79, ('[NPC][Abyssal][Electrical T4/T5/T6]Overmind', 0.423, 0.593, 0.624, 0.639)),
(-80, ('[NPC][Abyssal][Electrical T4/T5/T6]Seeker', 0, 0.082, 0.082, 0.082)),
(-81, ('[NPC][Abyssal][Electrical T4/T5/T6]Triglavian', 0.206, 0.41, 0.464, 0.376)),
(-82, ('[NPC][Abyssal][Electrical T4/T5/T6]Drifter', 0.111, 0.415, 0.415, 0.415)),
(-83, ('[NPC][Abyssal][Electrical T4/T5/T6]Sleeper', 0.215, 0.435, 0.435, 0.435)),
(-84, ('[NPC][Abyssal][Electrical T4/T5/T6]All', 0.247, 0.474, 0.495, 0.488)),
(-85, ('[NPC][Abyssal][Firestorm T0/T1/T2]Drones', 0.461, 0.425, 0.541, 0.443)),
(-86, ('[NPC][Abyssal][Firestorm T0/T1/T2]Overmind', 0.666, 0.489, 0.634, 0.646)),
(-87, ('[NPC][Abyssal][Firestorm T0/T1/T2]Seeker', 0.084, 0, 0.084, 0.084)),
(-88, ('[NPC][Abyssal][Firestorm T0/T1/T2]Triglavian', 0.537, 0.269, 0.489, 0.371)),
(-89, ('[NPC][Abyssal][Firestorm T0/T1/T2]Drifter', 0.43, 0.289, 0.43, 0.43)),
(-90, ('[NPC][Abyssal][Firestorm T0/T1/T2]Sleeper', 0.512, 0.402, 0.512, 0.512)),
(-91, ('[NPC][Abyssal][Firestorm T0/T1/T2]All', 0.537, 0.352, 0.512, 0.495)),
(-92, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Drones', 0.461, 0.36, 0.541, 0.443)),
(-93, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Overmind', 0.65, 0.391, 0.625, 0.633)),
(-93, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Overmind', 0.666, 0.413, 0.634, 0.646)),
(-94, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Seeker', 0.084, 0, 0.084, 0.084)),
(-95, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Triglavian', 0.534, 0.161, 0.484, 0.366)),
(-96, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Drifter', 0.422, 0.196, 0.422, 0.422)),
(-95, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Triglavian', 0.537, 0.166, 0.489, 0.371)),
(-96, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Drifter', 0.43, 0.201, 0.43, 0.43)),
(-97, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Sleeper', 0.512, 0.337, 0.512, 0.512)),
(-98, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]All', 0.541, 0.284, 0.524, 0.504)),
(-99, ('[NPC][Abyssal][Firestorm T4/T5]Drones', 0.461, 0.305, 0.541, 0.443)),
(-100, ('[NPC][Abyssal][Firestorm T4/T5]Overmind', 0.65, 0.323, 0.625, 0.633)),
(-101, ('[NPC][Abyssal][Firestorm T4/T5]Seeker', 0.084, 0, 0.084, 0.084)),
(-102, ('[NPC][Abyssal][Firestorm T4/T5]Triglavian', 0.534, 0.082, 0.484, 0.366)),
(-103, ('[NPC][Abyssal][Firestorm T4/T5]Drifter', 0.422, 0.114, 0.422, 0.422)),
(-104, ('[NPC][Abyssal][Firestorm T4/T5]Sleeper', 0.512, 0.276, 0.512, 0.512)),
(-105, ('[NPC][Abyssal][Firestorm T4/T5]All', 0.541, 0.214, 0.524, 0.504)),
(-106, ('[NPC][Abyssal][Exotic T1/T2]Drones', 0.439, 0.522, 0.417, 0.435)),
(-107, ('[NPC][Abyssal][Exotic T1/T2]Overmind', 0.626, 0.576, 0.496, 0.624)),
(-108, ('[NPC][Abyssal][Exotic T1/T2]Seeker', 0.082, 0.082, 0, 0.082)),
(-109, ('[NPC][Abyssal][Exotic T1/T2]Triglavian', 0.477, 0.401, 0.284, 0.37)),
(-110, ('[NPC][Abyssal][Exotic T1/T2]Drifter', 0.403, 0.403, 0.267, 0.403)),
(-111, ('[NPC][Abyssal][Exotic T1/T2]Sleeper', 0.435, 0.435, 0.329, 0.435)),
(-112, ('[NPC][Abyssal][Exotic T1/T2]All', 0.507, 0.477, 0.373, 0.493)),
(-98, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]All', 0.537, 0.269, 0.512, 0.495)),
(-99, ('[NPC][Abyssal][Firestorm T4/T5/T6]Drones', 0.461, 0.305, 0.541, 0.443)),
(-100, ('[NPC][Abyssal][Firestorm T4/T5/T6]Overmind', 0.666, 0.345, 0.634, 0.646)),
(-101, ('[NPC][Abyssal][Firestorm T4/T5/T6]Seeker', 0.084, 0, 0.084, 0.084)),
(-102, ('[NPC][Abyssal][Firestorm T4/T5/T6]Triglavian', 0.537, 0.085, 0.489, 0.371)),
(-103, ('[NPC][Abyssal][Firestorm T4/T5/T6]Drifter', 0.43, 0.117, 0.43, 0.43)),
(-104, ('[NPC][Abyssal][Firestorm T4/T5/T6]Sleeper', 0.512, 0.276, 0.512, 0.512)),
(-105, ('[NPC][Abyssal][Firestorm T4/T5/T6]All', 0.537, 0.201, 0.512, 0.495)),
(-106, ('[NPC][Abyssal][Exotic T0/T1/T2]Drones', 0.439, 0.522, 0.417, 0.435)),
(-107, ('[NPC][Abyssal][Exotic T0/T1/T2]Overmind', 0.643, 0.593, 0.511, 0.639)),
(-108, ('[NPC][Abyssal][Exotic T0/T1/T2]Seeker', 0.082, 0.082, 0, 0.082)),
(-109, ('[NPC][Abyssal][Exotic T0/T1/T2]Triglavian', 0.494, 0.41, 0.304, 0.376)),
(-110, ('[NPC][Abyssal][Exotic T0/T1/T2]Drifter', 0.415, 0.415, 0.277, 0.415)),
(-111, ('[NPC][Abyssal][Exotic T0/T1/T2]Sleeper', 0.435, 0.435, 0.329, 0.435)),
(-112, ('[NPC][Abyssal][Exotic T0/T1/T2]All', 0.508, 0.474, 0.359, 0.488)),
(-113, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Drones', 0.439, 0.522, 0.351, 0.435)),
(-114, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Overmind', 0.626, 0.576, 0.419, 0.624)),
(-114, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Overmind', 0.643, 0.593, 0.435, 0.639)),
(-115, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Seeker', 0.082, 0.082, 0, 0.082)),
(-116, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Triglavian', 0.477, 0.401, 0.176, 0.37)),
(-117, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Drifter', 0.403, 0.403, 0.184, 0.403)),
(-116, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Triglavian', 0.494, 0.41, 0.198, 0.376)),
(-117, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Drifter', 0.415, 0.415, 0.191, 0.415)),
(-118, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Sleeper', 0.435, 0.435, 0.268, 0.435)),
(-119, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]All', 0.507, 0.477, 0.293, 0.493)),
(-120, ('[NPC][Abyssal][Exotic T4/T5]Drones', 0.439, 0.522, 0.293, 0.435)),
(-121, ('[NPC][Abyssal][Exotic T4/T5]Overmind', 0.626, 0.576, 0.344, 0.624)),
(-122, ('[NPC][Abyssal][Exotic T4/T5]Seeker', 0.082, 0.082, 0, 0.082)),
(-123, ('[NPC][Abyssal][Exotic T4/T5]Triglavian', 0.477, 0.401, 0.107, 0.37)),
(-124, ('[NPC][Abyssal][Exotic T4/T5]Drifter', 0.403, 0.403, 0.107, 0.403)),
(-125, ('[NPC][Abyssal][Exotic T4/T5]Sleeper', 0.435, 0.435, 0.215, 0.435)),
(-126, ('[NPC][Abyssal][Exotic T4/T5]All', 0.507, 0.477, 0.223, 0.493)),
(-127, ('[NPC][Abyssal][Gamma T1/T2]Drones', 0.449, 0.54, 0.549, 0.336)),
(-128, ('[NPC][Abyssal][Gamma T1/T2]Overmind', 0.6, 0.557, 0.601, 0.504)),
(-129, ('[NPC][Abyssal][Gamma T1/T2]Seeker', 0.085, 0.085, 0.085, 0)),
(-130, ('[NPC][Abyssal][Gamma T1/T2]Triglavian', 0.463, 0.392, 0.447, 0.193)),
(-131, ('[NPC][Abyssal][Gamma T1/T2]Drifter', 0.428, 0.428, 0.428, 0.287)),
(-132, ('[NPC][Abyssal][Gamma T1/T2]Sleeper', 0.435, 0.435, 0.435, 0.329)),
(-133, ('[NPC][Abyssal][Gamma T1/T2]All', 0.493, 0.472, 0.5, 0.362)),
(-119, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]All', 0.508, 0.474, 0.276, 0.488)),
(-120, ('[NPC][Abyssal][Exotic T4/T5/T6]Drones', 0.439, 0.522, 0.293, 0.435)),
(-121, ('[NPC][Abyssal][Exotic T4/T5/T6]Overmind', 0.643, 0.593, 0.362, 0.639)),
(-122, ('[NPC][Abyssal][Exotic T4/T5/T6]Seeker', 0.082, 0.082, 0, 0.082)),
(-123, ('[NPC][Abyssal][Exotic T4/T5/T6]Triglavian', 0.494, 0.41, 0.122, 0.376)),
(-124, ('[NPC][Abyssal][Exotic T4/T5/T6]Drifter', 0.415, 0.415, 0.111, 0.415)),
(-125, ('[NPC][Abyssal][Exotic T4/T5/T6]Sleeper', 0.435, 0.435, 0.215, 0.435)),
(-126, ('[NPC][Abyssal][Exotic T4/T5/T6]All', 0.508, 0.474, 0.208, 0.488)),
(-127, ('[NPC][Abyssal][Gamma T0/T1/T2]Drones', 0.449, 0.54, 0.549, 0.336)),
(-128, ('[NPC][Abyssal][Gamma T0/T1/T2]Overmind', 0.619, 0.574, 0.612, 0.522)),
(-129, ('[NPC][Abyssal][Gamma T0/T1/T2]Seeker', 0.085, 0.085, 0.085, 0)),
(-130, ('[NPC][Abyssal][Gamma T0/T1/T2]Triglavian', 0.477, 0.4, 0.461, 0.202)),
(-131, ('[NPC][Abyssal][Gamma T0/T1/T2]Drifter', 0.437, 0.437, 0.437, 0.295)),
(-132, ('[NPC][Abyssal][Gamma T0/T1/T2]Sleeper', 0.435, 0.435, 0.435, 0.329)),
(-133, ('[NPC][Abyssal][Gamma T0/T1/T2]All', 0.493, 0.468, 0.492, 0.35)),
(-134, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Drones', 0.449, 0.54, 0.549, 0.264)),
(-135, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Overmind', 0.6, 0.557, 0.601, 0.428)),
(-135, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Overmind', 0.619, 0.574, 0.612, 0.449)),
(-136, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Seeker', 0.085, 0.085, 0.085, 0)),
(-137, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Triglavian', 0.463, 0.392, 0.447, 0.071)),
(-138, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Drifter', 0.428, 0.428, 0.428, 0.2)),
(-137, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Triglavian', 0.477, 0.4, 0.461, 0.081)),
(-138, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Drifter', 0.437, 0.437, 0.437, 0.206)),
(-139, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Sleeper', 0.435, 0.435, 0.435, 0.268)),
(-140, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]All', 0.493, 0.472, 0.5, 0.28)),
(-141, ('[NPC][Abyssal][Gamma T4/T5]Drones', 0.449, 0.54, 0.549, 0.197)),
(-142, ('[NPC][Abyssal][Gamma T4/T5]Overmind', 0.6, 0.557, 0.601, 0.356)),
(-143, ('[NPC][Abyssal][Gamma T4/T5]Seeker', 0.085, 0.085, 0.085, 0)),
(-144, ('[NPC][Abyssal][Gamma T4/T5]Triglavian', 0.463, 0.392, 0.447, 0.029)),
(-145, ('[NPC][Abyssal][Gamma T4/T5]Drifter', 0.428, 0.428, 0.428, 0.117)),
(-146, ('[NPC][Abyssal][Gamma T4/T5]Sleeper', 0.435, 0.435, 0.435, 0.215)),
(-147, ('[NPC][Abyssal][Gamma T4/T5]All', 0.493, 0.472, 0.5, 0.21))])
(-140, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]All', 0.493, 0.468, 0.492, 0.264)),
(-141, ('[NPC][Abyssal][Gamma T4/T5/T6]Drones', 0.449, 0.54, 0.549, 0.197)),
(-142, ('[NPC][Abyssal][Gamma T4/T5/T6]Overmind', 0.619, 0.574, 0.612, 0.379)),
(-143, ('[NPC][Abyssal][Gamma T4/T5/T6]Seeker', 0.085, 0.085, 0.085, 0)),
(-144, ('[NPC][Abyssal][Gamma T4/T5/T6]Triglavian', 0.477, 0.4, 0.461, 0.034)),
(-145, ('[NPC][Abyssal][Gamma T4/T5/T6]Drifter', 0.437, 0.437, 0.437, 0.121)),
(-146, ('[NPC][Abyssal][Gamma T4/T5/T6]Sleeper', 0.435, 0.435, 0.435, 0.215)),
(-147, ('[NPC][Abyssal][Gamma T4/T5/T6]All', 0.493, 0.468, 0.492, 0.196)),
# Source: ticket #2265
(-148, ('[NPC][Abyssal][Dark Matter All Tiers]Concord', 0.324, 0.318, 0.369, 0.372)),
(-149, ('[NPC][Abyssal][Dark Matter All Tiers]Sansha', 0.137, 0.331, 0.332, 0.322)),
(-150, ('[NPC][Abyssal][Dark Matter All Tiers]Angel', 0.582, 0.508, 0.457, 0.416)),
(-151, ('[NPC][Abyssal][Electrical T0/T1/T2]Concord', 0.121, 0.318, 0.369, 0.372)),
(-152, ('[NPC][Abyssal][Electrical T0/T1/T2]Sansha', 0.034, 0.331, 0.332, 0.322)),
(-153, ('[NPC][Abyssal][Electrical T0/T1/T2]Angel', 0.456, 0.508, 0.457, 0.416)),
(-154, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Concord', 0.025, 0.318, 0.369, 0.372)),
(-155, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Sansha', 0.018, 0.331, 0.332, 0.322)),
(-156, ('[NPC][Abyssal][Electrical T3 (Some T5 Rooms)]Angel', 0.373, 0.508, 0.457, 0.416)),
(-157, ('[NPC][Abyssal][Electrical T4/T5/T6]Concord', 0.008, 0.318, 0.369, 0.372)),
(-158, ('[NPC][Abyssal][Electrical T4/T5/T6]Sansha', 0.009, 0.331, 0.332, 0.322)),
(-159, ('[NPC][Abyssal][Electrical T4/T5/T6]Angel', 0.3, 0.508, 0.457, 0.416)),
(-160, ('[NPC][Abyssal][Firestorm T0/T1/T2]Concord', 0.324, 0.107, 0.369, 0.372)),
(-161, ('[NPC][Abyssal][Firestorm T0/T1/T2]Sansha', 0.148, 0.181, 0.329, 0.328)),
(-162, ('[NPC][Abyssal][Firestorm T0/T1/T2]Angel', 0.587, 0.342, 0.439, 0.39)),
(-163, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Concord', 0.324, 0.016, 0.369, 0.372)),
(-164, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Sansha', 0.148, 0.14, 0.329, 0.328)),
(-165, ('[NPC][Abyssal][Firestorm T3 (Some T5 Rooms)]Angel', 0.587, 0.241, 0.439, 0.39)),
(-166, ('[NPC][Abyssal][Firestorm T4/T5/T6]Concord', 0.324, 0.004, 0.369, 0.372)),
(-167, ('[NPC][Abyssal][Firestorm T4/T5/T6]Sansha', 0.148, 0.106, 0.329, 0.328)),
(-168, ('[NPC][Abyssal][Firestorm T4/T5/T6]Angel', 0.587, 0.172, 0.439, 0.39)),
(-169, ('[NPC][Abyssal][Exotic T0/T1/T2]Concord', 0.324, 0.318, 0.18, 0.372)),
(-170, ('[NPC][Abyssal][Exotic T0/T1/T2]Sansha', 0.137, 0.331, 0.166, 0.322)),
(-171, ('[NPC][Abyssal][Exotic T0/T1/T2]Angel', 0.582, 0.508, 0.295, 0.416)),
(-172, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Concord', 0.324, 0.318, 0.089, 0.372)),
(-173, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Sansha', 0.137, 0.331, 0.108, 0.322)),
(-174, ('[NPC][Abyssal][Exotic T3 (Some T5 Rooms)]Angel', 0.582, 0.508, 0.203, 0.416)),
(-175, ('[NPC][Abyssal][Exotic T4/T5/T6]Concord', 0.324, 0.318, 0.068, 0.372)),
(-176, ('[NPC][Abyssal][Exotic T4/T5/T6]Sansha', 0.137, 0.331, 0.073, 0.322)),
(-177, ('[NPC][Abyssal][Exotic T4/T5/T6]Angel', 0.582, 0.508, 0.14, 0.416)),
(-178, ('[NPC][Abyssal][Gamma T0/T1/T2]Concord', 0.324, 0.318, 0.369, 0.203)),
(-179, ('[NPC][Abyssal][Gamma T0/T1/T2]Sansha', 0.137, 0.355, 0.352, 0.16)),
(-180, ('[NPC][Abyssal][Gamma T0/T1/T2]Angel', 0.59, 0.528, 0.477, 0.286)),
(-181, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Concord', 0.324, 0.318, 0.369, 0.112)),
(-182, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Sansha', 0.137, 0.355, 0.352, 0.05)),
(-183, ('[NPC][Abyssal][Gamma T3 (Some T5 Rooms)]Angel', 0.59, 0.528, 0.477, 0.197)),
(-184, ('[NPC][Abyssal][Gamma T4/T5/T6]Concord', 0.324, 0.318, 0.369, 0.086)),
(-185, ('[NPC][Abyssal][Gamma T4/T5/T6]Sansha', 0.137, 0.355, 0.352, 0)),
(-186, ('[NPC][Abyssal][Gamma T4/T5/T6]Angel', 0.59, 0.528, 0.477, 0.126))])
class TargetProfile:

View File

@@ -36,9 +36,9 @@ class VectorPicker(wx.Window):
self._labelpos = int(kwargs.pop('labelpos', 0))
self._offset = float(kwargs.pop('offset', 0))
self._size = max(0, float(kwargs.pop('size', 50)))
self._fontsize = max(1, float(kwargs.pop('fontsize', 8)))
self._directionOnly = kwargs.pop('directionOnly', False)
super().__init__(*args, **kwargs)
self._fontsize = max(1, float(kwargs.pop('fontsize', 8 / self.GetContentScaleFactor())))
self._font = wx.Font(self._fontsize, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
self._angle = 0
self.__length = 1
@@ -107,8 +107,11 @@ class VectorPicker(wx.Window):
dc = wx.BufferedPaintDC(self)
self.Draw(dc)
def GetScaledClientSize(self):
return tuple([dim / self.GetContentScaleFactor() for dim in self.GetClientSize()])
def Draw(self, dc):
width, height = self.GetClientSize()
width, height = self.GetScaledClientSize()
if not width or not height:
return
dc.SetBackground(wx.Brush(self.GetBackgroundColour(), wx.BRUSHSTYLE_SOLID))
@@ -122,9 +125,11 @@ class VectorPicker(wx.Window):
a = math.radians(self._angle + self._offset)
x = math.cos(a) * radius
y = math.sin(a) * radius
# See PR #2260 on why this is needed
pointRadius = 2 / self.GetContentScaleFactor() if 'wxGTK' in wx.PlatformInfo else 2
dc.DrawLine(radius + 2, radius + 2, radius + 2 + x * self._length, radius + 2 - y * self._length)
dc.SetBrush(wx.BLACK_BRUSH)
dc.DrawCircle(radius + 2 + x * self._length, radius + 2 - y * self._length, 2)
dc.DrawCircle(radius + 2 + x * self._length, radius + 2 - y * self._length, pointRadius)
if self._label:
labelText = self._label

View File

@@ -89,6 +89,7 @@ class ItemMutatorList(wx.ScrolledWindow):
higOverrides = {
('Stasis Web', 'speedFactor'): False,
('Damage Control', 'duration'): True,
('Siege Module', 'siegeLocalLogisticsDurationBonus'): False
}
first = True

View File

@@ -62,8 +62,10 @@ class EveFittings(AuxiliaryFrame):
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
self.importBtn = wx.Button(self, wx.ID_ANY, "Import to pyfa", wx.DefaultPosition, wx.DefaultSize, 5)
self.deleteBtn = wx.Button(self, wx.ID_ANY, "Delete from EVE", wx.DefaultPosition, wx.DefaultSize, 5)
self.deleteAllBtn = wx.Button(self, wx.ID_ANY, "Delete all from Eve", wx.DefaultPosition, wx.DefaultSize, 5)
btnSizer.Add(self.importBtn, 1, wx.ALL, 5)
btnSizer.Add(self.deleteBtn, 1, wx.ALL, 5)
btnSizer.Add(self.deleteAllBtn, 1, wx.ALL, 5)
fitSizer.Add(btnSizer, 0, wx.EXPAND)
contentSizer.Add(fitSizer, 1, wx.EXPAND, 0)
@@ -72,6 +74,7 @@ class EveFittings(AuxiliaryFrame):
self.fetchBtn.Bind(wx.EVT_BUTTON, self.fetchFittings)
self.importBtn.Bind(wx.EVT_BUTTON, self.importFitting)
self.deleteBtn.Bind(wx.EVT_BUTTON, self.deleteFitting)
self.deleteAllBtn.Bind(wx.EVT_BUTTON, self.deleteAllFittings)
self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent)
@@ -169,6 +172,37 @@ class EveFittings(AuxiliaryFrame):
pyfalog.error(msg)
self.statusbar.SetStatusText(msg)
def deleteAllFittings(self, event):
sEsi = Esi.getInstance()
activeChar = self.getActiveCharacter()
if activeChar is None:
return
charName = sEsi.getSsoCharacter(activeChar).characterName
anyDeleted = False
with wx.MessageDialog(
self, "Do you really want to delete all fits from %s in EVE?"%(charName),
"Confirm Delete", wx.YES | wx.NO | wx.ICON_QUESTION
) as dlg:
if dlg.ShowModal() == wx.ID_YES:
try:
for fit in self.fittings:
sEsi.delFitting(activeChar, fit['fitting_id'])
anyDeleted = True
except requests.exceptions.ConnectionError:
msg = "Connection error, please check your internet connection"
pyfalog.error(msg)
self.statusbar.SetStatusText(msg)
except APIException as ex:
if anyDeleted:
msg = "Some fits were not deleted: ESI error {} received".format(ex.status_code)
else:
msg = "Failed to delete fits: ESI error {} received".format(ex.status_code)
pyfalog.error(msg)
self.statusbar.SetStatusText(msg)
# repopulate the fitting list
self.fitTree.populateSkillTree(self.fittings)
self.fitView.update([])
class ESIServerExceptionHandler:
def __init__(self, parentWindow, ex):

View File

@@ -91,6 +91,8 @@ class CalcReplaceLocalModuleCommand(wx.Command):
@property
def needsGuiRecalc(self):
if self.unloadedCharge:
return True
if self.savedStateCheckChanges is None:
return True
for container in self.savedStateCheckChanges:

View File

@@ -63,8 +63,8 @@ class GuiCargoToLocalModuleCommand(wx.Command):
dstModSlot = dstMod.slot
if self.srcCargoItemID == dstModItemID:
return False
# To keep all old item properties, copy them over from old module
newModInfo = ModuleInfo.fromModule(dstMod)
# To keep all old item properties, copy them over from old module, except for mutations
newModInfo = ModuleInfo.fromModule(dstMod, unmutate=True)
newModInfo.itemID = self.srcCargoItemID
if dstMod.isEmpty:
newCargoModItemID = None

View File

@@ -16,192 +16,10 @@ rename_phrase = " renamed to "
conversion_phrase = " converted to "
text = """
Basic Energized EM Membrane renamed to 'Basic' EM Energized Membrane
Energized EM Membrane I renamed to EM Energized Membrane I
Energized EM Membrane II renamed to EM Energized Membrane II
Basic Energized Explosive Membrane renamed to 'Basic' Explosive Energized Membrane
Energized Explosive Membrane I renamed to Explosive Energized Membrane I
Energized Explosive Membrane II renamed to Explosive Energized Membrane II
Basic Energized Armor Layering Membrane renamed to 'Basic' Layered Energized Membrane
Energized Armor Layering Membrane I renamed to Layered Energized Membrane I
Energized Armor Layering Membrane II renamed to Layered Energized Membrane II
Basic Energized Kinetic Membrane renamed to 'Basic' Kinetic Energized Membrane
Energized Kinetic Membrane I renamed to Kinetic Energized Membrane I
Energized Kinetic Membrane II renamed to Kinetic Energized Membrane II
Basic Energized Thermal Membrane renamed to 'Basic' Thermal Energized Membrane
Energized Thermal Membrane I renamed to Thermal Energized Membrane I
Energized Thermal Membrane II renamed to Thermal Energized Membrane II
Basic Energized Adaptive Nano Membrane renamed to 'Basic' Multispectrum Energized Membrane
Energized Adaptive Nano Membrane I renamed to Multispectrum Energized Membrane I
Energized Adaptive Nano Membrane II renamed to Multispectrum Energized Membrane II
Dark Blood Energized Adaptive Nano Membrane renamed to Dark Blood Multispectrum Energized Membrane
True Sansha Energized Adaptive Nano Membrane renamed to True Sansha Multispectrum Energized Membrane
Shadow Serpentis Energized Adaptive Nano Membrane renamed to Shadow Serpentis Multispectrum Energized Membrane
Dark Blood Energized Kinetic Membrane renamed to Dark Blood Kinetic Energized Membrane
True Sansha Energized Kinetic Membrane renamed to True Sansha Kinetic Energized Membrane
Shadow Serpentis Energized Kinetic Membrane renamed to Shadow Serpentis Kinetic Energized Membrane
Dark Blood Energized Explosive Membrane renamed to Dark Blood Explosive Energized Membrane
True Sansha Energized Explosive Membrane renamed to True Sansha Explosive Energized Membrane
Shadow Serpentis Energized Explosive Membrane renamed to Shadow Serpentis Explosive Energized Membrane
Dark Blood Energized EM Membrane renamed to Dark Blood EM Energized Membrane
True Sansha Energized EM Membrane renamed to True Sansha EM Energized Membrane
Shadow Serpentis Energized EM Membrane renamed to Shadow Serpentis EM Energized Membrane
Dark Blood Energized Thermal Membrane renamed to Dark Blood Thermal Energized Membrane
True Sansha Energized Thermal Membrane renamed to True Sansha Thermal Energized Membrane
Shadow Serpentis Energized Thermal Membrane renamed to Shadow Serpentis Thermal Energized Membrane
Brokara's Modified Energized Adaptive Nano Membrane renamed to Brokara's Modified Multispectrum Energized Membrane
Tairei's Modified Energized Adaptive Nano Membrane renamed to Tairei's Modified Multispectrum Energized Membrane
Selynne's Modified Energized Adaptive Nano Membrane renamed to Selynne's Modified Multispectrum Energized Membrane
Raysere's Modified Energized Adaptive Nano Membrane renamed to Raysere's Modified Multispectrum Energized Membrane
Vizan's Modified Energized Adaptive Nano Membrane renamed to Vizan's Modified Multispectrum Energized Membrane
Ahremen's Modified Energized Adaptive Nano Membrane renamed to Ahremen's Modified Multispectrum Energized Membrane
Chelm's Modified Energized Adaptive Nano Membrane renamed to Chelm's Modified Multispectrum Energized Membrane
Draclira's Modified Energized Adaptive Nano Membrane renamed to Draclira's Modified Multispectrum Energized Membrane
Brokara's Modified Energized Thermal Membrane renamed to Brokara's Modified Thermal Energized Membrane
Tairei's Modified Energized Thermal Membrane renamed to Tairei's Modified Thermal Energized Membrane
Selynne's Modified Energized Thermal Membrane renamed to Selynne's Modified Thermal Energized Membrane
Raysere's Modified Energized Thermal Membrane renamed to Raysere's Modified Thermal Energized Membrane
Vizan's Modified Energized Thermal Membrane renamed to Vizan's Modified Thermal Energized Membrane
Ahremen's Modified Energized Thermal Membrane renamed to Ahremen's Modified Thermal Energized Membrane
Chelm's Modified Energized Thermal Membrane renamed to Chelm's Modified Thermal Energized Membrane
Draclira's Modified Energized Thermal Membrane renamed to Draclira's Modified Thermal Energized Membrane
Brokara's Modified Energized EM Membrane renamed to Brokara's Modified EM Energized Membrane
Tairei's Modified Energized EM Membrane renamed to Tairei's Modified EM Energized Membrane
Selynne's Modified Energized EM Membrane renamed to Selynne's Modified EM Energized Membrane
Raysere's Modified Energized EM Membrane renamed to Raysere's Modified EM Energized Membrane
Vizan's Modified Energized EM Membrane renamed to Vizan's Modified EM Energized Membrane
Ahremen's Modified Energized EM Membrane renamed to Ahremen's Modified EM Energized Membrane
Chelm's Modified Energized EM Membrane renamed to Chelm's Modified EM Energized Membrane
Draclira's Modified Energized EM Membrane renamed to Draclira's Modified EM Energized Membrane
Brokara's Modified Energized Explosive Membrane renamed to Brokara's Modified Explosive Energized Membrane
Tairei's Modified Energized Explosive Membrane renamed to Tairei's Modified Explosive Energized Membrane
Selynne's Modified Energized Explosive Membrane renamed to Selynne's Modified Explosive Energized Membrane
Raysere's Modified Energized Explosive Membrane renamed to Raysere's Modified Explosive Energized Membrane
Vizan's Modified Energized Explosive Membrane renamed to Vizan's Modified Explosive Energized Membrane
Ahremen's Modified Energized Explosive Membrane renamed to Ahremen's Modified Explosive Energized Membrane
Chelm's Modified Energized Explosive Membrane renamed to Chelm's Modified Explosive Energized Membrane
Draclira's Modified Energized Explosive Membrane renamed to Draclira's Modified Explosive Energized Membrane
Brokara's Modified Energized Kinetic Membrane renamed to Brokara's Modified Kinetic Energized Membrane
Tairei's Modified Energized Kinetic Membrane renamed to Tairei's Modified Kinetic Energized Membrane
Selynne's Modified Energized Kinetic Membrane renamed to Selynne's Modified Kinetic Energized Membrane
Raysere's Modified Energized Kinetic Membrane renamed to Raysere's Modified Kinetic Energized Membrane
Vizan's Modified Energized Kinetic Membrane renamed to Vizan's Modified Kinetic Energized Membrane
Ahremen's Modified Energized Kinetic Membrane renamed to Ahremen's Modified Kinetic Energized Membrane
Chelm's Modified Energized Kinetic Membrane renamed to Chelm's Modified Kinetic Energized Membrane
Draclira's Modified Energized Kinetic Membrane renamed to Draclira's Modified Kinetic Energized Membrane
Brynn's Modified Energized Adaptive Nano Membrane renamed to Brynn's Modified Multispectrum Energized Membrane
Tuvan's Modified Energized Adaptive Nano Membrane renamed to Tuvan's Modified Multispectrum Energized Membrane
Setele's Modified Energized Adaptive Nano Membrane renamed to Setele's Modified Multispectrum Energized Membrane
Cormack's Modified Energized Adaptive Nano Membrane renamed to Cormack's Modified Multispectrum Energized Membrane
Brynn's Modified Energized Thermal Membrane renamed to Brynn's Modified Thermal Energized Membrane
Tuvan's Modified Energized Thermal Membrane renamed to Tuvan's Modified Thermal Energized Membrane
Setele's Modified Energized Thermal Membrane renamed to Setele's Modified Thermal Energized Membrane
Cormack's Modified Energized Thermal Membrane renamed to Cormack's Modified Thermal Energized Membrane
Brynn's Modified Energized EM Membrane renamed to Brynn's Modified EM Energized Membrane
Tuvan's Modified Energized EM Membrane renamed to Tuvan's Modified EM Energized Membrane
Setele's Modified Energized EM Membrane renamed to Setele's Modified EM Energized Membrane
Cormack's Modified Energized EM Membrane renamed to Cormack's Modified EM Energized Membrane
Brynn's Modified Energized Explosive Membrane renamed to Brynn's Modified Explosive Energized Membrane
Tuvan's Modified Energized Explosive Membrane renamed to Tuvan's Modified Explosive Energized Membrane
Setele's Modified Energized Explosive Membrane renamed to Setele's Modified Explosive Energized Membrane
Cormack's Modified Energized Explosive Membrane renamed to Cormack's Modified Explosive Energized Membrane
Brynn's Modified Energized Kinetic Membrane renamed to Brynn's Modified Kinetic Energized Membrane
Tuvan's Modified Energized Kinetic Membrane renamed to Tuvan's Modified Kinetic Energized Membrane
Setele's Modified Energized Kinetic Membrane renamed to Setele's Modified Kinetic Energized Membrane
Cormack's Modified Energized Kinetic Membrane renamed to Cormack's Modified Kinetic Energized Membrane
Imperial Navy Energized Thermal Membrane renamed to Imperial Navy Thermal Energized Membrane
Imperial Navy Energized EM Membrane renamed to Imperial Navy EM Energized Membrane
Imperial Navy Energized Explosive Membrane renamed to Imperial Navy Explosive Energized Membrane
Imperial Navy Energized Kinetic Membrane renamed to Imperial Navy Kinetic Energized Membrane
Imperial Navy Energized Adaptive Nano Membrane renamed to Imperial Navy Multispectrum Energized Membrane
Federation Navy Energized Thermal Membrane renamed to Federation Navy Thermal Energized Membrane
Federation Navy Energized EM Membrane renamed to Federation Navy EM Energized Membrane
Federation Navy Energized Explosive Membrane renamed to Federation Navy Explosive Energized Membrane
Federation Navy Energized Kinetic Membrane renamed to Federation Navy Kinetic Energized Membrane
Federation Navy Energized Adaptive Nano Membrane renamed to Federation Navy Multispectrum Energized Membrane
Prototype Energized Adaptive Nano Membrane I renamed to Compact Multispectrum Energized Membrane
Prototype Energized Kinetic Membrane I renamed to Compact Kinetic Energized Membrane
Prototype Energized Explosive Membrane I renamed to Compact Explosive Energized Membrane
Prototype Energized EM Membrane I renamed to Compact EM Energized Membrane
Prototype Energized Armor Layering Membrane I renamed to Compact Layered Energized Membrane
Prototype Energized Thermal Membrane I renamed to Compact Thermal Energized Membrane
Ammatar Navy Energized Adaptive Nano Membrane renamed to Ammatar Navy Multispectrum Energized Membrane
Ammatar Navy Energized Kinetic Membrane renamed to Ammatar Navy Kinetic Energized Membrane
Ammatar Navy Energized Explosive Membrane renamed to Ammatar Navy Explosive Energized Membrane
Ammatar Navy Energized EM Membrane renamed to Ammatar Navy EM Energized Membrane
Ammatar Navy Energized Thermal Membrane renamed to Ammatar Navy Thermal Energized Membrane
Corelum C-Type Energized Adaptive Nano Membrane renamed to Corelum C-Type Multispectrum Energized Membrane
Corelum C-Type Energized Kinetic Membrane renamed to Corelum C-Type Kinetic Energized Membrane
Corelum C-Type Energized Explosive Membrane renamed to Corelum C-Type Explosive Energized Membrane
Corelum C-Type Energized EM Membrane renamed to Corelum C-Type EM Energized Membrane
Corelum C-Type Energized Thermal Membrane renamed to Corelum C-Type Thermal Energized Membrane
Corelum B-Type Energized Adaptive Nano Membrane renamed to Corelum B-Type Multispectrum Energized Membrane
Corelum B-Type Energized Kinetic Membrane renamed to Corelum B-Type Kinetic Energized Membrane
Corelum B-Type Energized Explosive Membrane renamed to Corelum B-Type Explosive Energized Membrane
Corelum B-Type Energized EM Membrane renamed to Corelum B-Type EM Energized Membrane
Corelum B-Type Energized Thermal Membrane renamed to Corelum B-Type Thermal Energized Membrane
Corelum A-Type Energized Adaptive Nano Membrane renamed to Corelum A-Type Multispectrum Energized Membrane
Corelum A-Type Energized Kinetic Membrane renamed to Corelum A-Type Kinetic Energized Membrane
Corelum A-Type Energized Explosive Membrane renamed to Corelum A-Type Explosive Energized Membrane
Corelum A-Type Energized EM Membrane renamed to Corelum A-Type EM Energized Membrane
Corelum A-Type Energized Thermal Membrane renamed to Corelum A-Type Thermal Energized Membrane
Corpum C-Type Energized Adaptive Nano Membrane renamed to Corpum C-Type Multispectrum Energized Membrane
Centum C-Type Energized Adaptive Nano Membrane renamed to Centum C-Type Multispectrum Energized Membrane
Corpum C-Type Energized Kinetic Membrane renamed to Corpum C-Type Kinetic Energized Membrane
Centum C-Type Energized Kinetic Membrane renamed to Centum C-Type Kinetic Energized Membrane
Corpum C-Type Energized Explosive Membrane renamed to Corpum C-Type Explosive Energized Membrane
Centum C-Type Energized Explosive Membrane renamed to Centum C-Type Explosive Energized Membrane
Corpum C-Type Energized EM Membrane renamed to Corpum C-Type EM Energized Membrane
Centum C-Type Energized EM Membrane renamed to Centum C-Type EM Energized Membrane
Corpum C-Type Energized Thermal Membrane renamed to Corpum C-Type Thermal Energized Membrane
Centum C-Type Energized Thermal Membrane renamed to Centum C-Type Thermal Energized Membrane
Corpum B-Type Energized Adaptive Nano Membrane renamed to Corpum B-Type Multispectrum Energized Membrane
Centum B-Type Energized Adaptive Nano Membrane renamed to Centum B-Type Multispectrum Energized Membrane
Corpum B-Type Energized Kinetic Membrane renamed to Corpum B-Type Kinetic Energized Membrane
Centum B-Type Energized Kinetic Membrane renamed to Centum B-Type Kinetic Energized Membrane
Corpum B-Type Energized Explosive Membrane renamed to Corpum B-Type Explosive Energized Membrane
Centum B-Type Energized Explosive Membrane renamed to Centum B-Type Explosive Energized Membrane
Corpum B-Type Energized Thermal Membrane renamed to Corpum B-Type Thermal Energized Membrane
Centum B-Type Energized Thermal Membrane renamed to Centum B-Type Thermal Energized Membrane
Corpum A-Type Energized Thermal Membrane renamed to Corpum A-Type Thermal Energized Membrane
Centum A-Type Energized Thermal Membrane renamed to Centum A-Type Thermal Energized Membrane
Corpum A-Type Energized EM Membrane renamed to Corpum A-Type EM Energized Membrane
Centum A-Type Energized EM Membrane renamed to Centum A-Type EM Energized Membrane
Corpum A-Type Energized Explosive Membrane renamed to Corpum A-Type Explosive Energized Membrane
Centum A-Type Energized Explosive Membrane renamed to Centum A-Type Explosive Energized Membrane
Corpum A-Type Energized Kinetic Membrane renamed to Corpum A-Type Kinetic Energized Membrane
Centum A-Type Energized Kinetic Membrane renamed to Centum A-Type Kinetic Energized Membrane
Corpum A-Type Energized Adaptive Nano Membrane renamed to Corpum A-Type Multispectrum Energized Membrane
Centum A-Type Energized Adaptive Nano Membrane renamed to Centum A-Type Multispectrum Energized Membrane
Corpum B-Type Energized EM Membrane renamed to Corpum B-Type EM Energized Membrane
Centum B-Type Energized EM Membrane renamed to Centum B-Type EM Energized Membrane
'Pilfer' Energized Adaptive Nano Membrane I renamed to 'Pilfer' Multispectrum Energized Membrane
'Moonshine' Energized Thermal Membrane I renamed to 'Moonshine' Thermal Energized Membrane
'Mafia' Energized Kinetic Membrane I renamed to 'Mafia' Kinetic Energized Membrane
Khanid Navy Energized Adaptive Nano Membrane renamed to Khanid Navy Multispectrum Energized Membrane
Khanid Navy Energized Kinetic Membrane renamed to Khanid Navy Kinetic Energized Membrane
Khanid Navy Energized Explosive Membrane renamed to Khanid Navy Explosive Energized Membrane
Khanid Navy Energized EM Membrane renamed to Khanid Navy EM Energized Membrane
Khanid Navy Energized Thermal Membrane renamed to Khanid Navy Thermal Energized Membrane
Large Compact Vorton projector renamed to Large Compact Vorton Projector
Experimental Energized Adaptive Nano Membrane I converted to Compact Multispectrum Energized Membrane
Experimental Energized Armor Layering Membrane I converted to Compact Layered Energized Membrane
Experimental Energized EM Membrane I converted to Compact EM Energized Membrane
Experimental Energized Explosive Membrane I converted to Compact Explosive Energized Membrane
Experimental Energized Kinetic Membrane I converted to Compact Kinetic Energized Membrane
Experimental Energized Thermal Membrane I converted to Compact Thermal Energized Membrane
Limited Energized Adaptive Nano Membrane I converted to Compact Multispectrum Energized Membrane
Limited Energized Armor Layering Membrane I converted to Compact Layered Energized Membrane
Limited Energized EM Membrane I converted to Compact EM Energized Membrane
Limited Energized Explosive Membrane I converted to Compact Explosive Energized Membrane
Limited Energized Kinetic Membrane I converted to Compact Kinetic Energized Membrane
Limited Energized Thermal Membrane I converted to Compact Thermal Energized Membrane
Upgraded Energized Adaptive Nano Membrane I converted to Compact Multispectrum Energized Membrane
Upgraded Energized Armor Layering Membrane I converted to Compact Layered Energized Membrane
Upgraded Energized EM Membrane I converted to Compact EM Energized Membrane
Upgraded Energized Explosive Membrane I converted to Compact Explosive Energized Membrane
Upgraded Energized Kinetic Membrane I converted to Compact Kinetic Energized Membrane
Upgraded Energized Thermal Membrane I converted to Compact Thermal Energized Membrane
'Hypnos' Signal Distortion Amplifier I renamed to Hypnos Compact Signal Distortion Amplifier I
Initiated Signal Distortion Amplifier I converted to Hypnos Compact Signal Distortion Amplifier I
Induced Signal Distortion Amplifier I converted to Hypnos Compact Signal Distortion Amplifier I
Compulsive Signal Distortion Amplifier I converted to Hypnos Compact Signal Distortion Amplifier I
"""
def main(old, new):

View File

@@ -46,6 +46,7 @@ class EsiEndpoints(Enum):
CHAR_SKILLS = "/v4/characters/{character_id}/skills/"
CHAR_FITTINGS = "/v1/characters/{character_id}/fittings/"
CHAR_DEL_FIT = "/v1/characters/{character_id}/fittings/{fitting_id}/"
DYNAMIC_ITEM = "/v1/dogma/dynamic/items/{type_id}/{item_id}/"
@unique

View File

@@ -0,0 +1,12 @@
"""
Conversion pack for October 2020 release
"""
CONVERSIONS = {
# Renamed items
"'Hypnos' Signal Distortion Amplifier I": "Hypnos Compact Signal Distortion Amplifier I",
# Converted items
"Initiated Signal Distortion Amplifier I": "Hypnos Compact Signal Distortion Amplifier I",
"Induced Signal Distortion Amplifier I": "Hypnos Compact Signal Distortion Amplifier I",
"Compulsive Signal Distortion Amplifier I": "Hypnos Compact Signal Distortion Amplifier I",
}

View File

@@ -0,0 +1,12 @@
"""
Conversion pack for September 2020 release
"""
CONVERSIONS = {
# Renamed items
"'Stalwart' Particle Field Magnifier": "Stalwart Restrained Shield Boost Amplifier",
"'Copasetic' Particle Field Acceleration": "Copasetic Compact Shield Boost Amplifier",
# Converted items
"5a Prototype Shield Support I": "Stalwart Restrained Shield Boost Amplifier",
"Ionic Field Accelerator I": "Copasetic Compact Shield Boost Amplifier"
}

View File

@@ -67,12 +67,13 @@ class EsiAccess:
# session request stuff
self._session = Session()
self._session.headers.update({
self._basicHeaders = {
'Accept': 'application/json',
'User-Agent': (
'pyfa v{}'.format(config.version)
)
})
}
self._session.headers.update(self._basicHeaders)
self._session.proxies = NetworkSettings.getInstance().getProxySettingsInRequestsFormat()
@property
@@ -97,6 +98,9 @@ class EsiAccess:
def oauth_token(self):
return '%s/oauth/token' % self.sso_url
def getDynamicItem(self, typeID, itemID):
return self.get(None, EsiEndpoints.DYNAMIC_ITEM.value, type_id=typeID, item_id=itemID)
def getSkills(self, char):
return self.get(char, EsiEndpoints.CHAR_SKILLS.value, character_id=char.characterID)
@@ -236,6 +240,11 @@ class EsiAccess:
return json_res
def _before_request(self, ssoChar):
self._session.headers.clear()
self._session.headers.update(self._basicHeaders)
if ssoChar is None:
return
if ssoChar.is_token_expired():
pyfalog.info("Refreshing token for {}".format(ssoChar.characterName))
self.refresh(ssoChar)
@@ -256,17 +265,17 @@ class EsiAccess:
return resp
def get(self, ssoChar, endpoint, *args, **kwargs):
def get(self, ssoChar, endpoint, **kwargs):
self._before_request(ssoChar)
endpoint = endpoint.format(**kwargs)
return self._after_request(self._session.get("{}{}".format(self.esi_url, endpoint)))
def post(self, ssoChar, endpoint, json, *args, **kwargs):
def post(self, ssoChar, endpoint, json, **kwargs):
self._before_request(ssoChar)
endpoint = endpoint.format(**kwargs)
return self._after_request(self._session.post("{}{}".format(self.esi_url, endpoint), data=json))
def delete(self, ssoChar, endpoint, *args, **kwargs):
def delete(self, ssoChar, endpoint, **kwargs):
self._before_request(ssoChar)
endpoint = endpoint.format(**kwargs)
return self._after_request(self._session.delete("{}{}".format(self.esi_url, endpoint)))

View File

@@ -627,6 +627,15 @@ laar:
caar:
- 'caar'
- 'capital ancillary (.+ )?(?<!remote )armor repairer'
25k:
- '25k'
- '25000'
25kmm:
- '25kmm'
- '25000mm'
25m:
- '25m'
- '25000mm'
# Hull modules
dc:
@@ -649,6 +658,18 @@ cehe:
- 'capital (.+ )?emergency hull energizer'
# Propulsion modules and upgrades
10k:
- '10k'
- '10000'
10kmn:
- '10kmn'
- '10000mn'
50k:
- '50k'
- '50000'
50kmn:
- '50kmn'
- '50000mn'
ab:
- '(^| )ab' # Checking only beginning of a word to remove unwanted spam
- 'afterburner'

View File

@@ -18,9 +18,12 @@
# =============================================================================
import re
from eos.db.gamedata.queries import getAttributeInfo, getDynamicItem
from eos.utils.float import floatUnerr
from service.port.shared import fetchItem
from service.esiAccess import EsiAccess
def renderMutant(mutant, firstPrefix='', prefix=''):
@@ -77,3 +80,23 @@ def parseMutant(lines):
continue
mutations[attrInfo.ID] = value
return baseItem, mutaplasmidItem, mutations
def parseDynamicItemString(text):
m = re.search(r'<url=showinfo:(?P<typeid>\d+)//(?P<itemid>\d+)>.+</url>', text)
if m:
typeID = int(m.group('typeid'))
itemID = int(m.group('itemid'))
return typeID, itemID
return None
def fetchDynamicItem(dynamicItemData):
typeID, itemID = dynamicItemData
esiData = EsiAccess().getDynamicItem(typeID, itemID).json()
baseItemID = esiData['source_type_id']
mutaplasmidID = esiData['mutator_type_id']
attrs = {i['attribute_id']: i['value'] for i in esiData['dogma_attributes']}
baseItem = fetchItem(baseItemID)
mutaplasmid = getDynamicItem(mutaplasmidID)
return baseItem, mutaplasmid, attrs

View File

@@ -41,7 +41,7 @@ from service.port.multibuy import exportMultiBuy
from service.port.shared import IPortUser, UserCancelException, processing_notify
from service.port.shipstats import exportFitStats
from service.port.xml import importXml, exportXml
from service.port.muta import parseMutant
from service.port.muta import parseMutant, parseDynamicItemString, fetchDynamicItem
pyfalog = Logger(__name__)
@@ -255,6 +255,15 @@ class Port:
return "DNA", True, (cls.importDnaAlt(m.group("dna")),)
if activeFit is not None:
# Try to import mutated item from network
dynData = parseDynamicItemString(string)
if dynData is not None:
itemData = fetchDynamicItem(dynData)
if itemData is not None:
baseItem, mutaplasmidItem, mutations = itemData
return "FittingItem", False, ((baseItem, mutaplasmidItem, mutations),)
# Try to import mutated module
try:
baseItem, mutaplasmidItem, mutations = parseMutant(lines)

View File

@@ -25852,7 +25852,7 @@
"displayName": "Missile Damage Bonus",
"displayNameID": 311932,
"highIsGood": 1,
"iconID": 0,
"iconID": 1397,
"name": "siegeMissileDamageBonus",
"published": 1,
"stackable": 1,
@@ -26319,7 +26319,7 @@
"displayName": "Armor Repairer / Shield Booster Duration Bonus",
"displayNameID": 312084,
"highIsGood": 1,
"iconID": 0,
"iconID": 2104,
"name": "siegeLocalLogisticsDurationBonus",
"published": 1,
"stackable": 1,
@@ -26334,7 +26334,7 @@
"displayName": "Armor Repairer / Shield Booster Amount Bonus",
"displayNameID": 312085,
"highIsGood": 1,
"iconID": 0,
"iconID": 2104,
"name": "siegeLocalLogisticsAmountBonus",
"published": 1,
"stackable": 1,
@@ -32559,6 +32559,24 @@
"stackable": 0,
"unitID": 105
},
"3096": {
"attributeID": 3096,
"dataType": 4,
"defaultValue": 0.0,
"highIsGood": 0,
"name": "locationListID",
"published": 0,
"stackable": 0
},
"3097": {
"attributeID": 3097,
"dataType": 5,
"defaultValue": 1.0,
"highIsGood": 0,
"name": "lightYearDistanceMax",
"published": 0,
"stackable": 0
},
"3098": {
"attributeID": 3098,
"dataType": 5,
@@ -32576,5 +32594,29 @@
"name": "shieldBoosterDurationBonus",
"published": 0,
"stackable": 0
},
"3101": {
"attributeID": 3101,
"categoryID": 1,
"dataType": 11,
"defaultValue": 0.0,
"description": "Describes which type of deed fits in this structure",
"displayName": "Quantum Core Type",
"displayNameID": 569361,
"highIsGood": 0,
"name": "structureRequiresDeedType",
"published": 1,
"stackable": 0,
"unitID": 116
},
"3102": {
"attributeID": 3102,
"dataType": 0,
"defaultValue": 0.0,
"description": "when authored alongside the effectTractorBeamCan it will determine if it only tractors corpses instead of wrecks and cans",
"highIsGood": 0,
"name": "onlyTractorCorpses",
"published": 0,
"stackable": 0
}
}

View File

@@ -79525,5 +79525,69 @@
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8088": {
"disallowAutoRepeat": 0,
"dischargeAttributeID": 6,
"distribution": 2,
"durationAttributeID": 51,
"effectCategory": 2,
"effectID": 8088,
"effectName": "EntityChainLightning",
"electronicChance": 0,
"guid": "effects.AttackMode",
"isAssistance": 0,
"isOffensive": 1,
"isWarpSafe": 0,
"propulsionChance": 0,
"published": 0,
"rangeAttributeID": 54,
"rangeChance": 0
},
"8091": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8091,
"effectName": "shipBonusForceAuxiliaryG2CapBoosterStrength",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 87,
"modifiedAttributeID": 67,
"modifyingAttributeID": 2315,
"operation": 6
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8092": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8092,
"effectName": "shipBonusForceAuxiliaryM2CapBoosterStrength",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "LocationGroupModifier",
"groupID": 87,
"modifiedAttributeID": 67,
"modifyingAttributeID": 2318,
"operation": 6
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -16182,5 +16182,81 @@
"name": "Proving Ground Filaments",
"nameID": 567624,
"parentGroupID": 2456
},
"2749": {
"description": "Quantum Cores are FTL communications facillities vital to the efficient operation of Upwell structures.",
"descriptionID": 569752,
"hasTypes": 1,
"iconID": 21729,
"name": "Quantum Cores",
"nameID": 569644,
"parentGroupID": 2202
},
"2750": {
"description": "Capital Astronautic Mutaplasmids",
"descriptionID": 569939,
"hasTypes": 1,
"name": "Capital Astronautic Mutaplasmids",
"nameID": 569938,
"parentGroupID": 2439
},
"2751": {
"description": "Capital Armor Mutaplasmids",
"descriptionID": 569941,
"hasTypes": 1,
"name": "Capital Armor Mutaplasmids",
"nameID": 569940,
"parentGroupID": 2437
},
"2752": {
"description": "Capital Shield Mutaplasmids",
"descriptionID": 569944,
"hasTypes": 1,
"name": "Capital Shield Mutaplasmids",
"nameID": 569943,
"parentGroupID": 2438
},
"2753": {
"description": "Capital Engineering Mutaplasmids",
"descriptionID": 569946,
"hasTypes": 1,
"name": "Capital Engineering Mutaplasmids",
"nameID": 569945,
"parentGroupID": 2440
},
"2754": {
"description": "Siege Module Mutaplasmids",
"descriptionID": 569952,
"hasTypes": 1,
"name": "Siege Module Mutaplasmids",
"nameID": 569951,
"parentGroupID": 2512
},
"2756": {
"description": "Filaments that jump users out of the Triglavian Region Pochven",
"descriptionID": 571036,
"hasTypes": 1,
"iconID": 24530,
"name": "Triglavian Space Outbound",
"nameID": 571035,
"parentGroupID": 2456
},
"2757": {
"description": "Filaments that jump users into the Triglavian Region Pochven",
"descriptionID": 571038,
"hasTypes": 1,
"iconID": 24530,
"name": "Triglavian Space Inbound",
"nameID": 571037,
"parentGroupID": 2456
},
"2760": {
"description": "Special Edition Deployable Structures",
"descriptionID": 571154,
"hasTypes": 1,
"iconID": 16,
"name": "Special Edition Deployable Structures",
"nameID": 571153,
"parentGroupID": 1659
}
}

View File

@@ -25645,5 +25645,112 @@
},
"55977": {
"3402": 1
},
"56128": {
"3402": 1
},
"56129": {
"3402": 1
},
"56130": {
"3402": 1
},
"56179": {
"3402": 1
},
"56180": {
"3402": 1
},
"56181": {
"3402": 1
},
"56182": {
"3402": 1
},
"56183": {
"3402": 1
},
"56184": {
"3402": 1
},
"56185": {
"3402": 1
},
"56186": {
"3402": 1
},
"56187": {
"3402": 1
},
"56303": {
"3435": 5,
"3449": 5
},
"56304": {
"3435": 5
},
"56305": {
"3450": 4
},
"56306": {
"3454": 4
},
"56307": {
"21803": 4
},
"56308": {
"3392": 3,
"21803": 1
},
"56309": {
"21802": 4
},
"56310": {
"21802": 4
},
"56311": {
"3423": 5
},
"56312": {
"3423": 5
},
"56313": {
"22043": 1
},
"56362": {
"11584": 1
},
"56619": {
"3402": 1
},
"56620": {
"3402": 1
},
"56621": {
"3402": 1
},
"56631": {
"3389": 5,
"3409": 4
},
"56632": {
"3389": 5,
"3409": 4
},
"56633": {
"3389": 5,
"3409": 4
},
"56640": {
"3402": 1
},
"56659": {
"3402": 1
},
"56661": {
"3402": 1
},
"56662": {
"3402": 1
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -41,6 +41,144 @@
"operationName": "PostMul",
"showOutputValueInUI": "ShowNormal"
},
"2": {
"aggregateMode": "Maximum",
"developerDescription": "[PROTOTYPE]Test Boost Speed",
"itemModifiers": [
{
"dogmaAttributeID": 37
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"3": {
"aggregateMode": "Minimum",
"developerDescription": "Velocity penalty",
"displayName": "Velocity penalty",
"displayNameID": 517442,
"itemModifiers": [
{
"dogmaAttributeID": 37
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"4": {
"aggregateMode": "Maximum",
"developerDescription": "Warp penalty",
"displayName": "Warp penalty",
"displayNameID": 517444,
"itemModifiers": [
{
"dogmaAttributeID": 104
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "ModAdd",
"showOutputValueInUI": "Hide"
},
"5": {
"aggregateMode": "Maximum",
"developerDescription": "Disallow Cloak",
"displayName": "Disallow Cloak",
"displayNameID": 517760,
"itemModifiers": [
{
"dogmaAttributeID": 2454
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "ModAdd",
"showOutputValueInUI": "Hide"
},
"6": {
"aggregateMode": "Maximum",
"developerDescription": "Disallow jump/dock",
"displayName": "Disallow jump/dock",
"displayNameID": 517825,
"itemModifiers": [
{
"dogmaAttributeID": 2354
},
{
"dogmaAttributeID": 2453
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "ModAdd",
"showOutputValueInUI": "Hide"
},
"7": {
"aggregateMode": "Minimum",
"developerDescription": "QA Anti-targeting debuff",
"displayName": "QA Anti-targeting debuff",
"displayNameID": 517856,
"itemModifiers": [
{
"dogmaAttributeID": 192
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostAssignment",
"showOutputValueInUI": "ShowNormal"
},
"8": {
"aggregateMode": "Minimum",
"developerDescription": "PANIC: Shield Resistance",
"displayName": "Shield Resistance",
"displayNameID": 518605,
"itemModifiers": [
{
"dogmaAttributeID": 271
},
{
"dogmaAttributeID": 272
},
{
"dogmaAttributeID": 273
},
{
"dogmaAttributeID": 274
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowInverted"
},
"9": {
"aggregateMode": "Minimum",
"developerDescription": "PANIC: Shield Recharge time",
"displayName": "Shield recharge time bonus",
"displayNameID": 518606,
"itemModifiers": [
{
"dogmaAttributeID": 479
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"10": {
"aggregateMode": "Minimum",
"developerDescription": "Shield Burst: Shield Harmonizing: Shield Resistance",
@@ -66,43 +204,6 @@
"operationName": "PostPercent",
"showOutputValueInUI": "ShowInverted"
},
"100": {
"aggregateMode": "Maximum",
"developerDescription": "Weather_caustic_toxin_scan_resolution_bonus",
"displayName": "Scan Resolution bonus",
"displayNameID": 535079,
"itemModifiers": [
{
"dogmaAttributeID": 564
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"101": {
"aggregateMode": "Minimum",
"developerDescription": "Industrial Core Mining Drone Signal Interference",
"displayName": "Reduced Industrial Core Mining Drone Bonus",
"displayNameID": 546343,
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [
{
"dogmaAttributeID": 2585,
"skillID": 28585
},
{
"dogmaAttributeID": 2586,
"skillID": 28585
}
],
"operationName": "PostMul",
"showOutputValueInUI": "ShowNormal"
},
"11": {
"aggregateMode": "Minimum",
"developerDescription": "Shield Burst: Active Shielding: Repair Duration/Capacitor",
@@ -395,20 +496,6 @@
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"2": {
"aggregateMode": "Maximum",
"developerDescription": "[PROTOTYPE]Test Boost Speed",
"itemModifiers": [
{
"dogmaAttributeID": 37
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"20": {
"aggregateMode": "Minimum",
"developerDescription": "Skirmish Burst: Evasive Maneuvers: Signature Radius",
@@ -442,59 +529,6 @@
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"2103": {
"aggregateMode": "Maximum",
"developerDescription": "Damage Bonus",
"displayName": "Damage bonus",
"displayNameID": 551552,
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [
{
"dogmaAttributeID": 64,
"skillID": 3300
},
{
"dogmaAttributeID": 64,
"skillID": 3436
},
{
"dogmaAttributeID": 114,
"skillID": 3319
},
{
"dogmaAttributeID": 116,
"skillID": 3319
},
{
"dogmaAttributeID": 117,
"skillID": 3319
},
{
"dogmaAttributeID": 118,
"skillID": 3319
}
],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"2104": {
"aggregateMode": "Maximum",
"developerDescription": "Wreck Warp Scramble",
"displayName": "Wreck Proximity Disrupting Warp Drives",
"displayNameID": 553815,
"itemModifiers": [
{
"dogmaAttributeID": 104
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "ModAdd",
"showOutputValueInUI": "Hide"
},
"22": {
"aggregateMode": "Maximum",
"developerDescription": "Skirmish Burst: Rapid Deployment: AB/MWD Speed Increase",
@@ -665,22 +699,6 @@
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"3": {
"aggregateMode": "Minimum",
"developerDescription": "Velocity penalty",
"displayName": "Velocity penalty",
"displayNameID": 517442,
"itemModifiers": [
{
"dogmaAttributeID": 37
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"30": {
"aggregateMode": "Minimum",
"developerDescription": "Weapon Disruption Burst: Turret Tracking",
@@ -846,22 +864,6 @@
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"4": {
"aggregateMode": "Maximum",
"developerDescription": "Warp penalty",
"displayName": "Warp penalty",
"displayNameID": 517444,
"itemModifiers": [
{
"dogmaAttributeID": 104
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "ModAdd",
"showOutputValueInUI": "Hide"
},
"40": {
"aggregateMode": "Minimum",
"developerDescription": "Avatar Effect Generator : Kinetic resistance bonus",
@@ -1064,22 +1066,6 @@
"operationName": "PostPercent",
"showOutputValueInUI": "ShowInverted"
},
"5": {
"aggregateMode": "Maximum",
"developerDescription": "Disallow Cloak",
"displayName": "Disallow Cloak",
"displayNameID": 517760,
"itemModifiers": [
{
"dogmaAttributeID": 2454
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "ModAdd",
"showOutputValueInUI": "Hide"
},
"50": {
"aggregateMode": "Maximum",
"developerDescription": "Leviathan Effect Generator : Kinetic resistance penalty",
@@ -1262,25 +1248,6 @@
"operationName": "PostAssignment",
"showOutputValueInUI": "Hide"
},
"6": {
"aggregateMode": "Maximum",
"developerDescription": "Disallow jump/dock",
"displayName": "Disallow jump/dock",
"displayNameID": 517825,
"itemModifiers": [
{
"dogmaAttributeID": 2354
},
{
"dogmaAttributeID": 2453
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "ModAdd",
"showOutputValueInUI": "Hide"
},
"60": {
"aggregateMode": "Minimum",
"developerDescription": "Skirmish Burst: Evasive Maneuvers: Agility",
@@ -1314,22 +1281,6 @@
"operationName": "PostAssignment",
"showOutputValueInUI": "Hide"
},
"7": {
"aggregateMode": "Minimum",
"developerDescription": "QA Anti-targeting debuff",
"displayName": "QA Anti-targeting debuff",
"displayNameID": 517856,
"itemModifiers": [
{
"dogmaAttributeID": 192
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostAssignment",
"showOutputValueInUI": "ShowNormal"
},
"79": {
"aggregateMode": "Maximum",
"developerDescription": "AOE_Beacon_bioluminescence_cloud",
@@ -1346,66 +1297,35 @@
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"8": {
"80": {
"aggregateMode": "Minimum",
"developerDescription": "PANIC: Shield Resistance",
"displayName": "Shield Resistance",
"displayNameID": 518605,
"developerDescription": "AOE_Beacon_caustic_cloud_inertia",
"displayName": "Inertia Bonus",
"displayNameID": 532902,
"itemModifiers": [
{
"dogmaAttributeID": 271
},
{
"dogmaAttributeID": 272
},
{
"dogmaAttributeID": 273
},
{
"dogmaAttributeID": 274
"dogmaAttributeID": 70
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowInverted"
},
"80": {
"aggregateMode": "Minimum",
"developerDescription": "AOE_Beacon_caustic_cloud_local_repair",
"displayName": "Local Armor Repairer penalty",
"displayNameID": 532902,
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [
{
"dogmaAttributeID": 84,
"skillID": 3393
}
],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"81": {
"aggregateMode": "Minimum",
"developerDescription": "AOE_Beacon_caustic_cloud_remote_repair",
"displayName": "Remote Armor Repairer penalty",
"developerDescription": "AOE_Beacon_caustic_cloud_velocity",
"displayName": "Max Velocity Bonus",
"displayNameID": 532901,
"itemModifiers": [
{
"dogmaAttributeID": 84
"dogmaAttributeID": 37
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [
{
"dogmaAttributeID": 84,
"skillID": 16069
}
],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
@@ -1472,22 +1392,6 @@
"operationName": "PostPercent",
"showOutputValueInUI": "ShowInverted"
},
"9": {
"aggregateMode": "Minimum",
"developerDescription": "PANIC: Shield Recharge time",
"displayName": "Shield recharge time bonus",
"displayNameID": 518606,
"itemModifiers": [
{
"dogmaAttributeID": 479
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"90": {
"aggregateMode": "Maximum",
"developerDescription": "Weather_electric_storm_EM_resistance_penalty",
@@ -1667,5 +1571,95 @@
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowInverted"
},
"100": {
"aggregateMode": "Maximum",
"developerDescription": "Weather_caustic_toxin_scan_resolution_bonus",
"displayName": "Scan Resolution bonus",
"displayNameID": 535079,
"itemModifiers": [
{
"dogmaAttributeID": 564
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"101": {
"aggregateMode": "Minimum",
"developerDescription": "Industrial Core Mining Drone Signal Interference",
"displayName": "Reduced Industrial Core Mining Drone Bonus",
"displayNameID": 546343,
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [
{
"dogmaAttributeID": 2585,
"skillID": 28585
},
{
"dogmaAttributeID": 2586,
"skillID": 28585
}
],
"operationName": "PostMul",
"showOutputValueInUI": "ShowNormal"
},
"2103": {
"aggregateMode": "Maximum",
"developerDescription": "Damage Bonus",
"displayName": "Damage bonus",
"displayNameID": 551552,
"itemModifiers": [],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [
{
"dogmaAttributeID": 64,
"skillID": 3300
},
{
"dogmaAttributeID": 64,
"skillID": 3436
},
{
"dogmaAttributeID": 114,
"skillID": 3319
},
{
"dogmaAttributeID": 116,
"skillID": 3319
},
{
"dogmaAttributeID": 117,
"skillID": 3319
},
{
"dogmaAttributeID": 118,
"skillID": 3319
}
],
"operationName": "PostPercent",
"showOutputValueInUI": "ShowNormal"
},
"2104": {
"aggregateMode": "Maximum",
"developerDescription": "Wreck Warp Scramble",
"displayName": "Wreck Proximity Disrupting Warp Drives",
"displayNameID": 553815,
"itemModifiers": [
{
"dogmaAttributeID": 104
}
],
"locationGroupModifiers": [],
"locationModifiers": [],
"locationRequiredSkillModifiers": [],
"operationName": "ModAdd",
"showOutputValueInUI": "Hide"
}
}

View File

@@ -11,6 +11,58 @@
"categoryNameID": 63540,
"published": false
},
"2": {
"categoryID": 2,
"categoryName": "Celestial",
"categoryNameID": 63541,
"published": true
},
"3": {
"categoryID": 3,
"categoryName": "Station",
"categoryNameID": 63542,
"published": false
},
"4": {
"categoryID": 4,
"categoryName": "Material",
"categoryNameID": 63543,
"iconID": 22,
"published": true
},
"5": {
"categoryID": 5,
"categoryName": "Accessories",
"categoryNameID": 63560,
"iconID": 33,
"published": true
},
"6": {
"categoryID": 6,
"categoryName": "Ship",
"categoryNameID": 63544,
"published": true
},
"7": {
"categoryID": 7,
"categoryName": "Module",
"categoryNameID": 63545,
"iconID": 67,
"published": true
},
"8": {
"categoryID": 8,
"categoryName": "Charge",
"categoryNameID": 63546,
"published": true
},
"9": {
"categoryID": 9,
"categoryName": "Blueprint",
"categoryNameID": 63547,
"iconID": 21,
"published": true
},
"10": {
"categoryID": 10,
"categoryName": "Trading",
@@ -52,12 +104,6 @@
"published": true,
"sofBuildClass": "ship"
},
"2": {
"categoryID": 2,
"categoryName": "Celestial",
"categoryNameID": 63541,
"published": true
},
"20": {
"categoryID": 20,
"categoryName": "Implant",
@@ -104,12 +150,6 @@
"categoryNameID": 63559,
"published": false
},
"3": {
"categoryID": 3,
"categoryName": "Station",
"categoryNameID": 63542,
"published": false
},
"30": {
"categoryID": 30,
"categoryName": "Apparel",
@@ -134,25 +174,12 @@
"categoryNameID": 63563,
"published": true
},
"350001": {
"categoryID": 350001,
"categoryName": "Infantry",
"categoryNameID": 267649,
"published": false
},
"39": {
"categoryID": 39,
"categoryName": "Infrastructure Upgrades",
"categoryNameID": 63565,
"published": true
},
"4": {
"categoryID": 4,
"categoryName": "Material",
"categoryNameID": 63543,
"iconID": 22,
"published": true
},
"40": {
"categoryID": 40,
"categoryName": "Sovereignty Structures",
@@ -189,13 +216,6 @@
"categoryNameID": 63571,
"published": false
},
"5": {
"categoryID": 5,
"categoryName": "Accessories",
"categoryNameID": 63560,
"iconID": 33,
"published": true
},
"53": {
"categoryID": 53,
"categoryName": "Effects",
@@ -214,12 +234,6 @@
"categoryNameID": 235965,
"published": false
},
"6": {
"categoryID": 6,
"categoryName": "Ship",
"categoryNameID": 63544,
"published": true
},
"63": {
"categoryID": 63,
"categoryName": "Special Edition Assets",
@@ -238,36 +252,22 @@
"categoryNameID": 308340,
"published": true
},
"7": {
"categoryID": 7,
"categoryName": "Module",
"categoryNameID": 63545,
"iconID": 67,
"published": true
},
"8": {
"categoryID": 8,
"categoryName": "Charge",
"categoryNameID": 63546,
"published": true
},
"87": {
"categoryID": 87,
"categoryName": "Fighter",
"categoryNameID": 510368,
"published": true
},
"9": {
"categoryID": 9,
"categoryName": "Blueprint",
"categoryNameID": 63547,
"iconID": 21,
"published": true
},
"91": {
"categoryID": 91,
"categoryName": "SKINs",
"categoryNameID": 531338,
"published": true
},
"350001": {
"categoryID": 350001,
"categoryName": "Infantry",
"categoryNameID": 267649,
"published": false
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,10 @@
[
{
"field_name": "client_build",
"field_value": 1788518
"field_value": 1822159
},
{
"field_name": "dump_time",
"field_value": 1597688381
"field_value": 1602577754
}
]

View File

@@ -5634,6 +5634,9 @@
},
{
"text": "·While this structure has at least one online service module it enters full power mode and will gain increased shield and armor hitpoints and an extra reinforcement cycle"
},
{
"text": "·This structure requires an Astrahus Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -5688,6 +5691,9 @@
},
{
"text": "·While this structure has at least one online service module it enters full power mode and will gain increased shield and armor hitpoints and an extra reinforcement cycle"
},
{
"text": "·This structure requires a Keepstar Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -5715,6 +5721,9 @@
},
{
"text": "·While this structure has at least one online service module it enters full power mode and will gain increased shield and armor hitpoints and an extra reinforcement cycle."
},
{
"text": "·This structure requires an Athanor Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -5750,6 +5759,9 @@
},
{
"text": "·While this structure has at least one online service module it enters full power mode and will gain increased shield and armor hitpoints and an extra reinforcement cycle."
},
{
"text": "·This structure requires a Tatara Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -9676,7 +9688,7 @@
},
{
"number": "7.5%",
"text": "bonus to Armor Repairer amount"
"text": "bonus to Armor Repairer and Capacitor Booster amount"
},
{
"number": "1%",
@@ -9730,7 +9742,7 @@
},
{
"number": "7.5%",
"text": "bonus to Shield Booster amount"
"text": "bonus to Shield Booster and Capacitor Booster amount"
},
{
"number": "1%",
@@ -10331,6 +10343,9 @@
},
{
"text": "·This structure is able to maintain a low-power state indefinitely, and so will not lapse to into an abandoned state."
},
{
"text": "·This structure requires a Fortizar Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -10367,6 +10382,9 @@
},
{
"text": "·This structure is able to maintain a low-power state indefinitely, and so will not lapse to into an abandoned state."
},
{
"text": "·This structure requires a Fortizar Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -10399,6 +10417,9 @@
},
{
"text": "·This structure is able to maintain a low-power state indefinitely, and so will not lapse to into an abandoned state."
},
{
"text": "·This structure requires a Fortizar Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -10435,6 +10456,9 @@
},
{
"text": "·This structure is able to maintain a low-power state indefinitely, and so will not lapse to into an abandoned state."
},
{
"text": "·This structure requires a Fortizar Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -10463,6 +10487,9 @@
},
{
"text": "·This structure is able to maintain a low-power state indefinitely, and so will not lapse to into an abandoned state."
},
{
"text": "·This structure requires a Fortizar Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -12092,6 +12119,9 @@
},
{
"text": "·While this structure has at least one online service module it enters full power mode and will gain increased shield and armor hitpoints and an extra reinforcement cycle"
},
{
"text": "·This structure requires a Fortizar Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -16308,6 +16338,9 @@
},
{
"text": "·Only one Upwell Palatine Keepstar may be deployed at a time in New Eden"
},
{
"text": "·This structure requires a Keepstar Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -20830,6 +20863,9 @@
},
{
"text": "·While this structure has at least one online service module it enters full power mode and will gain increased shield and armor hitpoints and an extra reinforcement cycle."
},
{
"text": "·This structure requires a Sotiyo Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -20863,6 +20899,9 @@
},
{
"text": "·While this structure has at least one online service module it enters full power mode and will gain increased shield and armor hitpoints and an extra reinforcement cycle."
},
{
"text": "·This structure requires an Azbel Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"
@@ -20892,6 +20931,9 @@
},
{
"text": "·While this structure has at least one online service module it enters full power mode and will gain increased shield and armor hitpoints and an extra reinforcement cycle."
},
{
"text": "·This structure requires a Raitaru Upwell Quantum Core to be installed for anchoring to complete"
}
],
"header": "Role Bonus:"

View File

@@ -1 +1 @@
version: v2.25.1dev2
version: v2.29.0