Compare commits

...

25 Commits

Author SHA1 Message Date
DarkPhoenix
5e37b5ef77 Bump version 2025-05-24 04:00:06 +02:00
DarkPhoenix
78bb5e7cc0 Add effects for new ships 2025-05-24 03:40:32 +02:00
DarkPhoenix
96c248f477 Update effects for existing ships 2025-05-24 03:14:56 +02:00
DarkPhoenix
696b195bb5 Update icons 2025-05-24 02:41:25 +02:00
DarkPhoenix
b0fa8f1b8c Fix civilian missile launcher in graph 2025-05-24 02:38:28 +02:00
DarkPhoenix
6e173551ed Update RR stacking constant 2025-05-24 02:10:16 +02:00
DarkPhoenix
2fccc7487b Update static data and effects 2025-05-24 02:07:21 +02:00
DarkPhoenix
2f5b674b75 Make "fill cargo" context menu disablable 2025-05-24 01:24:40 +02:00
DarkPhoenix
80ced86ace Put bombing view before prices 2025-05-24 01:18:45 +02:00
DarkPhoenix
de93777f99 Fix comparison to string 2025-05-24 01:14:57 +02:00
Anton Vorobyov
f23d1e4921 Merge pull request #2501 from StormDelay/master
New stats view: bombing resistance
2025-05-24 01:13:52 +02:00
StormDelay
e8e22017cd Merge branch 'pyfa-org:master' into master 2025-05-20 18:33:48 +02:00
StormDelay
e79f97964a Bombing: always round up the number of bomb to the higher first decimal place to avoid misleading display i.e. 7.03 displays 7.1 and not 7.0 2025-05-20 18:30:08 +02:00
StormDelay
138e7cd706 Changed visibility of Bombing panel to None by default 2025-05-20 14:35:37 +02:00
Anton Vorobyov
ce6fd4bd3a Merge pull request #2673 from NicolasKion/master
Add "Fill cargo" feature to item context menu
2025-05-17 02:40:37 +02:00
Nicolas Kion
6e4ca641d7 Allow usage of existing item to fill cargo 2025-05-11 20:28:12 +02:00
Nicolas Kion
46c6381cd9 Add "Fill cargo" menu item 2025-05-11 20:28:02 +02:00
DarkPhoenix
126105cd0d Bump version 2025-04-15 16:41:19 +02:00
DarkPhoenix
fedaa70d9d Update icons 2025-04-15 16:40:56 +02:00
DarkPhoenix
d1707a0dca Update effects 2025-04-15 16:38:48 +02:00
DarkPhoenix
9065d348d3 Update static data 2025-04-15 16:16:22 +02:00
StormDelay
370cb7eae6 Merge branch 'master' into master 2023-05-23 17:37:09 +02:00
StormDelay
d883935d8c Pulls bomb damage and application from the item statistics and look for Red Giant wormhole effects in the effects applied to the fit 2023-04-08 01:11:43 +02:00
StormDelay
235ca94dba Bombing stat view: added Skill icon for the first column of the table, fixed tooltips to better clarify the information displayed 2023-04-05 21:14:43 +02:00
StormDelay
2dabfe4c79 Created new view for the stats panel that displays a table of the number of damage bomb required to kill the ship, depending on the type of bomb and the covert op skill level of the bomber. 2023-04-05 04:30:01 +02:00
224 changed files with 42229 additions and 16624 deletions

View File

@@ -602,7 +602,7 @@ def update_db():
eos.gamedata.Item.name.like('%mutated%'),
eos.gamedata.Item.name.like('%_PLACEHOLDER%'),
# Drifter weapons are published for some reason
eos.gamedata.Item.name.in_(('Lux Kontos', 'Lux Xiphos'))
eos.gamedata.Item.name.in_(('Lux Kontos', 'Lux Xiphos', 'Lux Ballistra', 'Lux Kopis'))
)).all():
if 'Asteroid Mining Crystal' in item.name:
continue

View File

@@ -82,7 +82,7 @@ class Effect10(BaseEffect):
Used by:
Celestials from group: Destructible Effect Beacon (6 of 6)
Drones from group: Combat Drone (80 of 80)
Modules from group: Energy Weapon (216 of 218)
Modules from group: Energy Weapon (216 of 220)
Celestial: BH Sentry Gun
Celestial: EDENCOM Stockpile Non-Interactable (Do not translate)
Celestial: Liberation Games Firework Sentry ( DO NOT TRANSLATE)
@@ -527,7 +527,7 @@ class Effect91(BaseEffect):
energyWeaponDamageMultiply
Used by:
Modules from group: Heat Sink (19 of 19)
Modules from group: Heat Sink (20 of 20)
"""
type = 'passive'
@@ -578,7 +578,7 @@ class Effect95(BaseEffect):
energyWeaponSpeedMultiply
Used by:
Modules from group: Heat Sink (19 of 19)
Modules from group: Heat Sink (20 of 20)
"""
type = 'passive'
@@ -985,6 +985,7 @@ class Effect272(BaseEffect):
repairSystemsDurationBonusPostPercentDurationLocationShipModulesRequiringRepairSystems
Used by:
Implants named like: Calyx Repair Booster (3 of 3)
Implants named like: Inherent Implants 'Noble' Repair Systems RS (6 of 6)
Modules named like: Nanobot Accelerator (8 of 8)
Implant: AIR Repairer Booster III
@@ -1041,6 +1042,7 @@ class Effect279(BaseEffect):
shieldEmmisionSystemsCapNeedBonusPostPercentCapacitorNeedLocationShipModulesRequiringShieldEmmisionSystems
Used by:
Implants named like: Asclepius Remote Repair Booster (3 of 3)
Implants named like: Zainou 'Gnome' Shield Emission Systems SE (6 of 6)
Skill: Shield Emission Systems
"""
@@ -1080,6 +1082,7 @@ class Effect290(BaseEffect):
Used by:
Implants named like: Frentix Booster (4 of 4)
Implants named like: Halcyon B Booster (5 of 5)
Implants named like: Oxybeles Turret Booster (3 of 3)
Implants named like: Zainou 'Deadeye' Sharpshooter ST (6 of 6)
Skill: Sharpshooter
"""
@@ -1134,8 +1137,8 @@ class Effect391(BaseEffect):
astrogeologyMiningAmountBonusPostPercentMiningAmountLocationShipModulesRequiringMining
Used by:
Implants named like: AIR Mining Yield Booster (3 of 3)
Implants named like: Inherent Implants 'Highwall' Mining MX (3 of 3)
Implants named like: Mining Booster (6 of 8)
Implants named like: ORE 'Harvester' Efficiency (2 of 2)
Implants named like: Serenity Limited 'Efficiency' Dose (3 of 3)
Implants named like: Serenity Poteque 'Prospector' Harvesting MC (3 of 3)
@@ -1794,6 +1797,7 @@ class Effect584(BaseEffect):
Implants named like: 'Pyrolancea' Dose (7 of 7)
Implants named like: Eifyr and Co. 'Gunslinger' Surgical Strike SS (6 of 6)
Implants named like: Halcyon Y Booster (5 of 5)
Implants named like: Oxybeles Turret Booster (3 of 3)
Implant: AIR Pyrolancea Booster II
"""
@@ -1957,7 +1961,6 @@ class Effect602(BaseEffect):
Ship: Cobra
Ship: Enforcer
Ship: Huginn
Ship: Rupture
Ship: Scythe Fleet Issue
"""
@@ -2839,7 +2842,6 @@ class Effect968(BaseEffect):
Ship: Broadsword
Ship: Cynabal
Ship: Moracha
Ship: Rupture
"""
type = 'passive'
@@ -3299,6 +3301,7 @@ class Effect1030(BaseEffect):
remoteArmorSystemsCapNeedBonusPostPercentCapacitorNeedLocationShipModulesRequiringRemoteArmorSystems
Used by:
Implants named like: Asclepius Remote Repair Booster (3 of 3)
Implants named like: Inherent Implants 'Noble' Remote Armor Repair Systems RA (6 of 6)
Modules named like: Remote Repair Augmentor (6 of 8)
Skill: Remote Armor Repair Systems
@@ -4783,6 +4786,7 @@ class Effect1595(BaseEffect):
Used by:
Implants named like: 'Pyrolancea' Dose (7 of 7)
Implants named like: Eidolon Missile Booster (3 of 3)
Implants named like: Halcyon Y Booster (5 of 5)
Implant: AIR Pyrolancea Booster II
Skill: Warhead Upgrades
@@ -4803,6 +4807,7 @@ class Effect1596(BaseEffect):
Used by:
Implants named like: 'Pyrolancea' Dose (7 of 7)
Implants named like: Eidolon Missile Booster (3 of 3)
Implants named like: Halcyon Y Booster (5 of 5)
Implant: AIR Pyrolancea Booster II
Skill: Warhead Upgrades
@@ -4823,6 +4828,7 @@ class Effect1597(BaseEffect):
Used by:
Implants named like: 'Pyrolancea' Dose (7 of 7)
Implants named like: Eidolon Missile Booster (3 of 3)
Implants named like: Halcyon Y Booster (5 of 5)
Implant: AIR Pyrolancea Booster II
Skill: Warhead Upgrades
@@ -4842,7 +4848,7 @@ class Effect1615(BaseEffect):
shipAdvancedSpaceshipCommandAgilityBonus
Used by:
Items from market group: Ships > Capital Ships (51 of 51)
Items from market group: Ships > Capital Ships (52 of 52)
"""
type = 'passive'
@@ -4876,7 +4882,7 @@ class Effect1617(BaseEffect):
Used by:
Ships from group: Carrier (4 of 4)
Ships from group: Dreadnought (12 of 12)
Ships from group: Dreadnought (13 of 13)
Ships from group: Force Auxiliary (6 of 6)
Ships from group: Lancer Dreadnought (4 of 4)
Ships from group: Supercarrier (6 of 6)
@@ -4915,6 +4921,7 @@ class Effect1635(BaseEffect):
capitalRepairSystemsSkillDurationBonus
Used by:
Implants named like: Calyx Repair Booster (3 of 3)
Modules named like: Nanobot Accelerator (8 of 8)
Implant: AIR Repairer Booster III
Skill: Capital Repair Systems
@@ -5070,6 +5077,7 @@ class Effect1657(BaseEffect):
Used by:
Implants named like: 'Pyrolancea' Dose (7 of 7)
Implants named like: Eidolon Missile Booster (3 of 3)
Implants named like: Halcyon Y Booster (5 of 5)
Implant: AIR Pyrolancea Booster II
Skill: Warhead Upgrades
@@ -5292,6 +5300,7 @@ class Effect1764(BaseEffect):
missileSkillMissileProjectileVelocityBonus
Used by:
Implants named like: Eidolon Missile Booster (3 of 3)
Implants named like: Zainou 'Deadeye' Missile Projection MP (6 of 6)
Modules named like: Hydraulic Bay Thrusters (8 of 8)
Skill: Missile Projection
@@ -6805,6 +6814,7 @@ class Effect2296(BaseEffect):
Used by:
Implants named like: Halcyon Y Booster (5 of 5)
Implants named like: Phylax Armor Booster (3 of 3)
"""
type = 'passive'
@@ -6827,6 +6837,7 @@ class Effect2297(BaseEffect):
Used by:
Implants named like: Halcyon B Booster (5 of 5)
Implants named like: Pelte Shield Booster (3 of 3)
"""
type = 'passive'
@@ -6962,6 +6973,7 @@ class Effect2402(BaseEffect):
skillSuperWeaponDmgBonus
Used by:
Skill: Advanced Doomsday Operation
Skill: Doomsday Operation
"""
@@ -7001,6 +7013,7 @@ class Effect2432(BaseEffect):
Implants named like: Halcyon B Booster (5 of 5)
Implants named like: Halcyon Y Booster (5 of 5)
Implants named like: Inherent Implants 'Squire' Capacitor Management EM (6 of 6)
Implants named like: Kausis Capacitor Booster (3 of 3)
Implants named like: Mindflood Booster (4 of 4)
Modules named like: Semiconductor Memory Cell (8 of 8)
Implant: Aegytica Volatile Booster
@@ -9279,7 +9292,7 @@ class Effect3001(BaseEffect):
Used by:
Modules from group: Missile Launcher Torpedo (22 of 22)
Items from market group: Ship Equipment > Turrets & Launchers (446 of 928)
Items from market group: Ship Equipment > Turrets & Launchers (446 of 930)
Module: Interdiction Sphere Launcher I
"""
@@ -9296,18 +9309,15 @@ class Effect3002(BaseEffect):
overloadSelfDurationBonus
Used by:
Modules from group: Ancillary Remote Shield Booster (4 of 4)
Modules from group: Armor Resistance Shift Hardener (2 of 2)
Modules from group: Capacitor Booster (43 of 43)
Modules from group: Energy Neutralizer (57 of 57)
Modules from group: Energy Nosferatu (58 of 58)
Modules from group: Hull Repair Unit (25 of 25)
Modules from group: Remote Armor Repairer (43 of 43)
Modules from group: Remote Capacitor Transmitter (37 of 37)
Modules from group: Remote Shield Booster (42 of 42)
Modules from group: Remote Hull Repairer (8 of 8)
Modules from group: Smart Bomb (137 of 137)
Modules from group: Warp Disrupt Field Generator (8 of 8)
Modules named like: Remote Repairer (60 of 60)
Module: Reactive Armor Hardener
"""
type = 'overheat'
@@ -9340,7 +9350,7 @@ class Effect3025(BaseEffect):
overloadSelfDamageBonus
Used by:
Modules from group: Energy Weapon (105 of 218)
Modules from group: Energy Weapon (105 of 220)
Modules from group: Hybrid Weapon (107 of 223)
Modules from group: Precursor Weapon (19 of 19)
Modules from group: Projectile Weapon (101 of 167)
@@ -9479,7 +9489,7 @@ class Effect3035(BaseEffect):
Used by:
Modules named like: Capital Flex Hardener (9 of 9)
Variations of module: Multispectrum Shield Hardener I (18 of 18)
Variations of module: Multispectrum Shield Hardener I (19 of 19)
"""
type = 'overheat'
@@ -9685,8 +9695,10 @@ class Effect3200(BaseEffect):
overloadSelfArmorDamageAmountDurationBonus
Used by:
Modules from group: Ancillary Armor Repairer (8 of 8)
Modules from group: Ancillary Armor Repairer (12 of 12)
Modules from group: Armor Repair Unit (105 of 105)
Modules from group: Remote Armor Repairer (43 of 43)
Modules named like: Remote Armor Repairer (52 of 52)
"""
type = 'overheat'
@@ -9703,7 +9715,9 @@ class Effect3201(BaseEffect):
overloadSelfShieldBonusDurationBonus
Used by:
Modules from group: Ancillary Shield Booster (9 of 9)
Modules from group: Ancillary Remote Shield Booster (4 of 4)
Modules from group: Ancillary Shield Booster (14 of 14)
Modules from group: Remote Shield Booster (42 of 42)
Modules from group: Shield Booster (94 of 94)
"""
@@ -10353,7 +10367,7 @@ class Effect3427(BaseEffect):
eliteBonusViolatorsTractorBeamMaxRangeRole2
Used by:
Ships from group: Marauder (4 of 4)
Ships from group: Marauder (5 of 5)
"""
type = 'passive'
@@ -10453,7 +10467,7 @@ class Effect3473(BaseEffect):
eliteBonusViolatorsTractorBeamMaxTractorVelocityRole3
Used by:
Ships from group: Marauder (4 of 4)
Ships from group: Marauder (5 of 5)
"""
type = 'passive'
@@ -11576,6 +11590,7 @@ class Effect3706(BaseEffect):
shipBonusProjectileTrackingMC2
Used by:
Ship: Rupture
Ship: Stabber Fleet Issue
"""
@@ -11776,7 +11791,7 @@ class Effect3782(BaseEffect):
powerOutputAddPassive
Used by:
Subsystems from group: Offensive Subsystem (8 of 12)
Subsystems from group: Offensive Subsystem (12 of 12)
"""
type = 'passive'
@@ -14859,6 +14874,7 @@ class Effect4472(BaseEffect):
Used by:
Ship: Mimir
Ship: Rupture
"""
type = 'passive'
@@ -16375,7 +16391,7 @@ class Effect4921(BaseEffect):
microJumpDrive
Used by:
Modules named like: Micro Jump Drive (3 of 3)
Modules named like: Micro Jump Drive (6 of 6)
"""
type = 'active'
@@ -16406,7 +16422,7 @@ class Effect4928(BaseEffect):
adaptiveArmorHardener
Used by:
Module: Reactive Armor Hardener
Modules from group: Armor Resistance Shift Hardener (2 of 2)
"""
runTime = 'late'
@@ -16551,7 +16567,7 @@ class Effect4936(BaseEffect):
fueledShieldBoosting
Used by:
Modules from group: Ancillary Shield Booster (9 of 9)
Modules from group: Ancillary Shield Booster (14 of 14)
"""
runTime = 'late'
@@ -16659,6 +16675,7 @@ class Effect4967(BaseEffect):
shieldBoosterDurationBonusShieldSkills
Used by:
Implants named like: Calyx Repair Booster (3 of 3)
Modules named like: Core Defense Operational Solidifier (8 of 8)
Implant: AIR Repairer Booster III
"""
@@ -18470,7 +18487,7 @@ class Effect5230(BaseEffect):
Used by:
Modules from group: Flex Shield Hardener (5 of 5)
Modules from group: Shield Hardener (102 of 102)
Modules from group: Shield Hardener (103 of 103)
"""
type = 'active'
@@ -18660,7 +18677,7 @@ class Effect5264(BaseEffect):
warfareLinkCPUAddition
Used by:
Modules from group: Command Burst (10 of 10)
Modules from group: Command Burst (12 of 12)
Modules from group: Gang Coordinator (6 of 6)
"""
@@ -18744,7 +18761,7 @@ class Effect5275(BaseEffect):
fueledArmorRepair
Used by:
Modules from group: Ancillary Armor Repairer (8 of 8)
Modules from group: Ancillary Armor Repairer (12 of 12)
"""
runTime = 'late'
@@ -19668,8 +19685,7 @@ class Effect5365(BaseEffect):
eliteBonusViolatorsRepairSystemsArmorDamageAmount2
Used by:
Ship: Kronos
Ship: Paladin
Ships from group: Marauder (3 of 5)
"""
type = 'passive'
@@ -19908,6 +19924,7 @@ class Effect5397(BaseEffect):
Used by:
Variations of module: Scan Pinpointing Array I (3 of 3)
Module: Triplot Scan Acqusition Array
"""
type = 'passive'
@@ -19925,7 +19942,7 @@ class Effect5398(BaseEffect):
systemScanDurationModuleModifier
Used by:
Modules from group: Scanning Upgrade Time (3 of 3)
Modules from group: Scanning Upgrade Time (4 of 4)
"""
type = 'passive'
@@ -19942,6 +19959,7 @@ class Effect5399(BaseEffect):
Used by:
Variations of module: Scan Rangefinding Array I (3 of 3)
Module: Triplot Scan Acqusition Array
"""
type = 'passive'
@@ -19993,6 +20011,7 @@ class Effect5410(BaseEffect):
Used by:
Ship: Absolution
Ship: Harbinger Navy Issue
"""
type = 'passive'
@@ -20213,6 +20232,7 @@ class Effect5437(BaseEffect):
Used by:
Implants named like: Halcyon Y Booster (5 of 5)
Implants named like: Mnemon Relic Coherence Booster (3 of 3)
Modules named like: Emission Scope Sharpener (8 of 8)
Implant: Poteque 'Prospector' Archaeology AC-905
Implant: Poteque 'Prospector' Environmental Analysis EY-1005
@@ -20918,7 +20938,7 @@ class Effect5560(BaseEffect):
roleBonusMarauderMJDRReactivationDelayBonus
Used by:
Ships from group: Marauder (4 of 4)
Ships from group: Marauder (5 of 5)
"""
type = 'passive'
@@ -24138,7 +24158,7 @@ class Effect6104(BaseEffect):
Used by:
Ships from group: Carrier (4 of 4)
Ships from group: Dreadnought (12 of 12)
Ships from group: Dreadnought (13 of 13)
Ships from group: Force Auxiliary (6 of 6)
Ships from group: Lancer Dreadnought (4 of 4)
Ships from group: Supercarrier (6 of 6)
@@ -27687,6 +27707,7 @@ class Effect6509(BaseEffect):
Used by:
Ships named like: Naglfar (2 of 2)
Ship: Sarathiel
"""
type = 'passive'
@@ -28327,7 +28348,7 @@ class Effect6566(BaseEffect):
moduleBonusFighterSupportUnit
Used by:
Modules from group: Fighter Support Unit (9 of 9)
Modules from group: Fighter Support Unit (10 of 10)
"""
type = 'passive'
@@ -28647,7 +28668,7 @@ class Effect6582(BaseEffect):
moduleBonusSiegeModule
Used by:
Modules named like: Siege Module (3 of 3)
Modules named like: Siege Module (4 of 4)
"""
runTime = 'early'
@@ -29570,8 +29591,6 @@ class Effect6635(BaseEffect):
src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'), 'kineticDamage',
src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'kineticDamage',
src.getModifiedItemAttr('shipBonusTitanC1'), skill='Caldari Titan', **kwargs)
class Effect6636(BaseEffect):
@@ -29621,8 +29640,6 @@ class Effect6638(BaseEffect):
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher XL Cruise', 'speed',
src.getModifiedItemAttr('shipBonusTitanC2'), skill='Caldari Titan', **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher Rapid Torpedo', 'speed',
src.getModifiedItemAttr('shipBonusTitanC2'), skill='Caldari Titan', **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Missile Launcher XL Torpedo', 'speed',
src.getModifiedItemAttr('shipBonusTitanC2'), skill='Caldari Titan', **kwargs)
@@ -29867,22 +29884,6 @@ class Effect6655(BaseEffect):
src.getModifiedItemAttr('shipBonusTitanM2'), skill='Minmatar Titan', **kwargs)
class Effect6656(BaseEffect):
"""
shipBonusRole3XLTorpdeoVelocityBonus
Used by:
Variations of ship: Leviathan (2 of 2)
"""
type = 'passive'
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'maxVelocity',
src.getModifiedItemAttr('shipBonusRole3'), **kwargs)
class Effect6657(BaseEffect):
"""
shipBonusTitanC5AllDamageBonus
@@ -29895,12 +29896,6 @@ class Effect6657(BaseEffect):
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'emDamage',
src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'explosiveDamage',
src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Torpedoes'), 'thermalDamage',
src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'), 'explosiveDamage',
src.getModifiedItemAttr('shipBonusTitanC5'), skill='Caldari Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('XL Cruise Missiles'), 'thermalDamage',
@@ -29941,7 +29936,8 @@ class Effect6658(BaseEffect):
# Turrets
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret') or
mod.item.requiresSkill('Large Hybrid Turret') or
mod.item.requiresSkill('Large Projectile Turret'),
mod.item.requiresSkill('Large Projectile Turret') or
mod.item.requiresSkill('Large Precursor Weapon'),
'maxRange', src.getModifiedItemAttr('maxRangeBonus'),
stackingPenalties=True, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret') or
@@ -29951,7 +29947,8 @@ class Effect6658(BaseEffect):
stackingPenalties=True, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Large Energy Turret') or
mod.item.requiresSkill('Large Hybrid Turret') or
mod.item.requiresSkill('Large Projectile Turret'),
mod.item.requiresSkill('Large Projectile Turret') or
mod.item.requiresSkill('Large Precursor Weapon'),
'speed', src.getModifiedItemAttr('bastionTurretROFBonus'),
stackingPenalties=True, penaltyGroup='postPerc', **kwargs)
@@ -31137,7 +31134,7 @@ class Effect6732(BaseEffect):
moduleBonusWarfareLinkArmor
Used by:
Variations of module: Armor Command Burst I (2 of 2)
Variations of module: Armor Command Burst I (3 of 3)
"""
type = 'active', 'gang'
@@ -31158,7 +31155,7 @@ class Effect6733(BaseEffect):
moduleBonusWarfareLinkShield
Used by:
Variations of module: Shield Command Burst I (2 of 2)
Variations of module: Shield Command Burst I (3 of 3)
"""
type = 'active', 'gang'
@@ -33111,8 +33108,10 @@ class Effect6958(BaseEffect):
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'overloadSelfDurationBonus',
src.getModifiedItemAttr('subsystemBonusAmarrOffensive3'), skill='Amarr Offensive Systems', **kwargs)
for attr in ('overloadSelfDurationBonus', 'overloadArmorDamageAmount'):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), attr,
src.getModifiedItemAttr('subsystemBonusAmarrOffensive3'), skill='Amarr Offensive Systems', **kwargs)
class Effect6959(BaseEffect):
@@ -33127,8 +33126,10 @@ class Effect6959(BaseEffect):
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'overloadSelfDurationBonus',
src.getModifiedItemAttr('subsystemBonusGallenteOffensive3'), skill='Gallente Offensive Systems', **kwargs)
for attr in ('overloadSelfDurationBonus', 'overloadArmorDamageAmount'):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), attr,
src.getModifiedItemAttr('subsystemBonusGallenteOffensive3'), skill='Gallente Offensive Systems', **kwargs)
class Effect6960(BaseEffect):
@@ -33143,9 +33144,10 @@ class Effect6960(BaseEffect):
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems'),
'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusCaldariOffensive3'),
skill='Caldari Offensive Systems', **kwargs)
for attr in ('overloadSelfDurationBonus', 'overloadShieldBonus'):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Shield Emission Systems'), attr,
src.getModifiedItemAttr('subsystemBonusCaldariOffensive3'), skill='Caldari Offensive Systems', **kwargs)
class Effect6961(BaseEffect):
@@ -33160,9 +33162,16 @@ class Effect6961(BaseEffect):
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Shield Emission Systems') or mod.item.requiresSkill('Remote Armor Repair Systems'),
'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusMinmatarOffensive3'),
skill='Minmatar Offensive Systems', **kwargs)
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Shield Emission Systems') or mod.item.requiresSkill('Remote Armor Repair Systems'),
'overloadSelfDurationBonus', src.getModifiedItemAttr('subsystemBonusMinmatarOffensive3'),
skill='Minmatar Offensive Systems', **kwargs)
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Shield Emission Systems'), 'overloadShieldBonus',
src.getModifiedItemAttr('subsystemBonusMinmatarOffensive3'), skill='Minmatar Offensive Systems', **kwargs)
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Remote Armor Repair Systems'), 'overloadArmorDamageAmount',
src.getModifiedItemAttr('subsystemBonusMinmatarOffensive3'), skill='Minmatar Offensive Systems', **kwargs)
class Effect6962(BaseEffect):
@@ -33230,32 +33239,6 @@ class Effect6965(BaseEffect):
container.getModifiedItemAttr('surveyProbeDurationBonus'), **kwargs)
class Effect6981(BaseEffect):
"""
shipBonusTitanG1KinThermDamageBonus
Used by:
Ship: Komodo
"""
type = 'passive'
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'thermalDamage',
src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'kineticDamage',
src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'thermalDamage',
src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'kineticDamage',
src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missiles'), 'thermalDamage',
src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Cruise Missiles'), 'kineticDamage',
src.getModifiedItemAttr('shipBonusTitanG1'), skill='Gallente Titan', **kwargs)
class Effect6982(BaseEffect):
"""
shipBonusTitanG2EMExplosiveDamageBonus
@@ -33268,10 +33251,6 @@ class Effect6982(BaseEffect):
@staticmethod
def handler(fit, src, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'explosiveDamage',
src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('Torpedoes'), 'emDamage',
src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'emDamage',
src.getModifiedItemAttr('shipBonusTitanG2'), skill='Gallente Titan', **kwargs)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill('XL Torpedoes'), 'explosiveDamage',
@@ -34633,10 +34612,10 @@ class Effect7092(BaseEffect):
Used by:
Variations of ship: Damavik (2 of 2)
Variations of ship: Kikimora (2 of 2)
Variations of ship: Leshak (2 of 2)
Variations of ship: Vedmak (2 of 2)
Ship: Drekavac
Ship: Hydra
Ship: Leshak
Ship: Tiamat
Ship: Zirnitra
"""
@@ -34657,11 +34636,11 @@ class Effect7093(BaseEffect):
Used by:
Variations of ship: Damavik (2 of 2)
Variations of ship: Kikimora (2 of 2)
Variations of ship: Leshak (2 of 2)
Variations of ship: Rodiva (2 of 2)
Variations of ship: Vedmak (2 of 2)
Ship: Drekavac
Ship: Hydra
Ship: Leshak
Ship: Tiamat
Ship: Zirnitra
"""
@@ -34681,10 +34660,10 @@ class Effect7094(BaseEffect):
Used by:
Variations of ship: Damavik (2 of 2)
Variations of ship: Kikimora (2 of 2)
Variations of ship: Leshak (2 of 2)
Variations of ship: Vedmak (2 of 2)
Ship: Drekavac
Ship: Hydra
Ship: Leshak
Ship: Tiamat
Ship: Zirnitra
"""
@@ -34772,10 +34751,10 @@ class Effect7112(BaseEffect):
Used by:
Variations of ship: Damavik (2 of 2)
Variations of ship: Kikimora (2 of 2)
Variations of ship: Leshak (2 of 2)
Variations of ship: Vedmak (2 of 2)
Ship: Drekavac
Ship: Hydra
Ship: Leshak
Ship: Tiamat
Ship: Zirnitra
"""
@@ -34809,19 +34788,11 @@ class Effect7117(BaseEffect):
roleBonusWarpSpeed
Used by:
Items from category: Ship (42 of 404)
Ships from group: Blockade Runner (5 of 5)
Ships from group: Covert Ops (9 of 9)
Ships from group: Hauler (5 of 18)
Ships from group: Interceptor (10 of 10)
Ships from group: Interdictor (4 of 4)
Ship: Azariel
Ship: Cynabal
Ship: Dramiel
Ship: Khizriel
Ship: Leopard
Ship: Machariel
Ship: Mekubal
Ship: Victorieux Luxury Yacht
"""
type = 'passive'
@@ -35766,12 +35737,12 @@ class Effect8017(BaseEffect):
def handler(fit, implant, context, projectionRange, **kwargs):
fit.appliedImplants.filteredItemMultiply(
lambda implant: implant.item.requiresSkill('Cybernetics'),
'remoteRepDurationBonus', implant.getModifiedItemAttr('implantSetSavior'), **kwargs)
'remoteRepDurationCapBonus', implant.getModifiedItemAttr('implantSetSavior'), **kwargs)
class Effect8018(BaseEffect):
"""
subcapRemoteArmorShieldRepDurationBonus
subcapRemoteArmorShieldRepDurationCapBonus
Used by:
Implants named like: grade Savior (15 of 18)
@@ -35781,10 +35752,11 @@ class Effect8018(BaseEffect):
@staticmethod
def handler(fit, implant, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Shield Emission Systems')
or mod.item.requiresSkill('Remote Armor Repair Systems'),
'duration', implant.getModifiedItemAttr('remoteRepDurationBonus'), **kwargs)
for attr in ('duration', 'capacitorNeed'):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Shield Emission Systems')
or mod.item.requiresSkill('Remote Armor Repair Systems'),
attr, implant.getModifiedItemAttr('remoteRepDurationCapBonus'), **kwargs)
class Effect8020(BaseEffect):
@@ -37707,6 +37679,7 @@ class Effect8270(BaseEffect):
Used by:
Implants named like: Halcyon Y Booster (5 of 5)
Implants named like: Nocturne Anti Drain Booster (3 of 3)
"""
type = 'passive'
@@ -38057,6 +38030,23 @@ class Effect8323(BaseEffect):
skill='Gallente Hauler', **kwargs)
class Effect8328(BaseEffect):
"""
relicVirusStrengthBonusPassive
Used by:
Implants named like: Palimpsest Relic Strength Booster (3 of 3)
"""
type = 'passive'
@staticmethod
def handler(fit, container, context, projectionRange, **kwargs):
fit.modules.filteredItemIncrease(
lambda mod: mod.item.requiresSkill('Archaeology'), 'virusStrength',
container.getModifiedItemAttr('virusStrengthBonus'), **kwargs)
class Effect8360(BaseEffect):
"""
shipBonusMissileReloadTimeGC2
@@ -38344,7 +38334,7 @@ class Effect11059(BaseEffect):
class Effect11060(BaseEffect):
"""
shipBonusDroneWebStrengthGBC3
shipBonusDroneWebStrengthAndHitpointsGBC3
Used by:
Ship: Myrmidon Navy Issue
@@ -38357,6 +38347,10 @@ class Effect11060(BaseEffect):
fit.drones.filteredItemBoost(
lambda drone: drone.item.requiresSkill('Drones'), 'speedFactor',
ship.getModifiedItemAttr('shipBonusGBC3'), skill='Gallente Battlecruiser', **kwargs)
for attr in ('shieldCapacity', 'armorHP', 'hp'):
fit.drones.filteredItemBoost(
lambda drone: drone.item.requiresSkill('Propulsion Jamming'), attr,
ship.getModifiedItemAttr('shipBonusGBC3'), skill='Gallente Battlecruiser', **kwargs)
class Effect11061(BaseEffect):
@@ -41291,6 +41285,58 @@ class Effect12221(BaseEffect):
skill.getModifiedItemAttr('durationBonus') * skill.level, **kwargs)
class Effect12244(BaseEffect):
"""
shipBonusRole1CapitalProjectileDamageBonus
Used by:
Ship: Sarathiel
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Capital Projectile Turret'),
'damageMultiplier', ship.getModifiedItemAttr('shipBonusRole1'), **kwargs)
class Effect12245(BaseEffect):
"""
shipBonusDreadnoughtG1FalloffBonus
Used by:
Ship: Sarathiel
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Capital Projectile Turret'), 'falloff',
ship.getModifiedItemAttr('shipBonusDreadnoughtG1'), skill='Gallente Dreadnought', **kwargs)
class Effect12246(BaseEffect):
"""
shipBonusRoleAngelDreadMoveWhileSieged
Used by:
Ship: Sarathiel
"""
runTime = 'early'
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Siege Module', 'speedFactor',
ship.getModifiedItemAttr('shipBonusSiegeSpeedMultiplier'), **kwargs)
class Effect12249(BaseEffect):
"""
shipBonusDroneDamageHeavyMediumLightMultiplierGBC1
@@ -41389,3 +41435,175 @@ class Effect12253(BaseEffect):
lambda drone: drone.item.requiresSkill('Sentry Drone Interfacing'),
'trackingSpeed', ship.getModifiedItemAttr('eliteBonusCommandShips4'),
skill='Command Ships', **kwargs)
class Effect12267(BaseEffect):
"""
shipBloodRaiderCapitalNosNeutralizationSignatureResolutionReduction
Used by:
Ship: Chemosh
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Energy Nosferatu', 'energyNeutralizerSignatureResolution',
ship.getModifiedItemAttr('shipBloodRaiderCapitalNosSignatureReductionMultiplyer'), **kwargs)
class Effect12275(BaseEffect):
"""
shipBonusArmorPlateMassEliteBonusLogistics4
Used by:
Ship: Oneiros
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Armor Plate', 'massAddition',
ship.getModifiedItemAttr('eliteBonusLogistics4'), skill='Logistics Cruisers', **kwargs)
class Effect12276(BaseEffect):
"""
shipBonusShieldExtenderSigEliteBonusLogistics4
Used by:
Ship: Scimitar
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Shield Extender', 'signatureRadiusAdd',
ship.getModifiedItemAttr('eliteBonusLogistics4'), skill='Logistics Cruisers', **kwargs)
class Effect12278(BaseEffect):
"""
shipBonusArmorPlateHitpointAmountEliteBonusLogistics4
Used by:
Ships from group: Logistics (3 of 7)
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Armor Plate', 'armorHPBonusAdd',
ship.getModifiedItemAttr('eliteBonusLogistics4'), skill='Logistics Cruisers', **kwargs)
class Effect12279(BaseEffect):
"""
shipBonusShieldExtenderCapacityBonusEliteBonusLogistics4
Used by:
Ship: Basilisk
Ship: Etana
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Shield Extender', 'capacityBonus',
ship.getModifiedItemAttr('eliteBonusLogistics4'), skill='Logistics Cruisers', **kwargs)
class Effect12283(BaseEffect):
"""
implantSetHackingVirusCoheranceEffect
Used by:
Implants named like: grade Wedge (12 of 12)
"""
runTime = 'early'
type = 'passive'
@staticmethod
def handler(fit, implant, context, projectionRange, **kwargs):
fit.appliedImplants.filteredItemMultiply(
lambda imp: imp.item.requiresSkill('Cybernetics'), 'implantSetHackingVirusCoherenceModifier',
implant.getModifiedItemAttr('implantSetHackingVirusCoherenceOmegaSetBonus'), **kwargs)
class Effect12284(BaseEffect):
"""
implantSetHackingVirusCoheranceModifierEffect
Used by:
Implants named like: grade Wedge (12 of 12)
"""
type = 'passive'
@staticmethod
def handler(fit, implant, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.group.name == 'Data Miners', 'virusCoherence',
implant.getModifiedItemAttr('implantSetHackingVirusCoherenceModifier'), **kwargs)
class Effect12286(BaseEffect):
"""
shipLPWRangeBonusPCBS1
Used by:
Ship: Babaroga
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Large Precursor Weapon'), 'maxRange',
ship.getModifiedItemAttr('shipBonusPBS1'), skill='Precursor Battleship', **kwargs)
class Effect12287(BaseEffect):
"""
shipLPWTrackingBonusPCBS1
Used by:
Ship: Babaroga
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Large Precursor Weapon'), 'trackingSpeed',
ship.getModifiedItemAttr('shipBonusPBS2'), skill='Precursor Battleship', **kwargs)
class Effect12288(BaseEffect):
"""
eliteBonusViolatorsLPWDmgMultiMax1
Used by:
Ship: Babaroga
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill('Large Precursor Weapon'), 'damageMultiplierBonusMax',
ship.getModifiedItemAttr('eliteBonusViolators1'), skill='Marauders', **kwargs)

View File

@@ -1820,7 +1820,7 @@ class Fit:
# That's right, for considerations of RR diminishing returns cycle time is rounded this way
totalRaw += amount / int(cycleTime)
RR_ADDITION = 7000
RR_MULTIPLIER = 10
RR_MULTIPLIER = 20
appliedRr = 0
for amount, cycleTime in rrList:
rrps = amount / int(cycleTime)

View File

@@ -58,7 +58,8 @@ def getApplicationPerKey(src, tgt, atkSpeed, atkAngle, distance, tgtSpeed, tgtAn
tgtSigRadius=tgtSigRadius)
else:
applicationMap[mod] = 0
elif mod.hardpoint == FittingHardpoint.MISSILE:
# Missile launcher or civilian missile launcher
elif mod.hardpoint == FittingHardpoint.MISSILE or mod.item.ID == 32461:
# FoF missiles can shoot beyond lock range
if inLockRange or (mod.charge is not None and 'fofMissileLaunching' in mod.charge.effects):
applicationMap[mod] = getLauncherMult(

View File

@@ -36,6 +36,7 @@ from gui.builtinContextMenus import skillAffectors
from gui.builtinContextMenus import itemFill
from gui.builtinContextMenus import droneAddStack
from gui.builtinContextMenus import cargoAdd
from gui.builtinContextMenus import cargoFill
from gui.builtinContextMenus import cargoAddAmmo
from gui.builtinContextMenus import itemProject
from gui.builtinContextMenus import ammoToDmgPattern

View File

@@ -0,0 +1,68 @@
import wx
import gui.fitCommands as cmd
import gui.mainFrame
from gui.contextMenu import ContextMenuSingle
from service.fit import Fit
from eos.saveddata.cargo import Cargo
_t = wx.GetTranslation
class FillCargoWithItem(ContextMenuSingle):
def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def display(self, callingWindow, srcContext, mainItem):
if srcContext not in ("marketItemGroup", "marketItemMisc", "cargoItem"):
return False
if mainItem is None:
return False
if self.mainFrame.getActiveFit() is None:
return False
if srcContext in ("marketItemGroup", "marketItemMisc"):
if not (mainItem.isCharge or mainItem.isCommodity):
return False
return True
def getText(self, callingWindow, itmContext, mainItem):
return _t("Fill Cargo With {0}").format(itmContext)
def activate(self, callingWindow, fullContext, mainItem, i):
fitID = self.mainFrame.getActiveFit()
fit = Fit.getInstance().getFit(fitID)
if isinstance(mainItem, Cargo):
itemVolume = mainItem.item.attributes['volume'].value
itemID = mainItem.itemID
else:
itemVolume = mainItem.attributes['volume'].value
itemID = int(mainItem.ID)
if itemVolume is None or itemVolume <= 0:
return
# Calculate how many items can fit in the cargo
cargoCapacity = fit.ship.getModifiedItemAttr("capacity")
currentCargoVolume = fit.cargoBayUsed
availableVolume = cargoCapacity - currentCargoVolume
if availableVolume <= 0:
return
# Calculate maximum amount that can fit
maxAmount = int(availableVolume / itemVolume)
if maxAmount <= 0:
return
# Add the items to cargo
command = cmd.GuiAddCargoCommand(fitID=fitID, itemID=itemID, amount=maxAmount)
if self.mainFrame.command.Submit(command):
self.mainFrame.additionsPane.select("Cargo", focus=False)
FillCargoWithItem.register()

View File

@@ -68,22 +68,27 @@ class PFContextMenuPref(PreferenceView):
rbSizerRow2.Add(self.rbBox5, 1, wx.ALL, 5)
self.rbBox5.Bind(wx.EVT_RADIOBOX, self.OnSetting5Change)
self.rbBox6 = wx.RadioBox(panel, -1, _t("Spoolup"), wx.DefaultPosition, wx.DefaultSize, [_t('Disabled'), _t('Enabled')], 1, wx.RA_SPECIFY_COLS)
self.rbBox6.SetSelection(self.settings.get('spoolup'))
rbSizerRow2.Add(self.rbBox6, 1, wx.ALL, 5)
self.rbBox6.Bind(wx.EVT_RADIOBOX, self.OnSetting6Change)
mainSizer.Add(rbSizerRow2, 1, wx.ALL | wx.EXPAND, 0)
# Row 3
rbSizerRow3 = wx.BoxSizer(wx.HORIZONTAL)
self.rbBox6 = wx.RadioBox(panel, -1, _t("Spoolup"), wx.DefaultPosition, wx.DefaultSize, [_t('Disabled'), _t('Enabled')], 1, wx.RA_SPECIFY_COLS)
self.rbBox6.SetSelection(self.settings.get('spoolup'))
rbSizerRow3.Add(self.rbBox6, 1, wx.ALL, 5)
self.rbBox6.Bind(wx.EVT_RADIOBOX, self.OnSetting6Change)
self.rbBox7 = wx.RadioBox(panel, -1, _t("Additions Panel Copy/Paste"), wx.DefaultPosition, wx.DefaultSize, [_t('Disabled'), _t('Enabled')], 1,
wx.RA_SPECIFY_COLS)
self.rbBox7.SetSelection(self.settings.get('additionsCopyPaste'))
rbSizerRow3.Add(self.rbBox7, 1, wx.ALL, 5)
self.rbBox7.Bind(wx.EVT_RADIOBOX, self.OnSetting7Change)
self.rbBox8 = wx.RadioBox(panel, -1, _t("Fill cargo with"), wx.DefaultPosition, wx.DefaultSize, [_t('Disabled'), _t('Enabled')], 1, wx.RA_SPECIFY_COLS)
self.rbBox8.SetSelection(self.settings.get('cargoFill'))
rbSizerRow3.Add(self.rbBox8, 1, wx.ALL, 5)
self.rbBox8.Bind(wx.EVT_RADIOBOX, self.OnSetting8Change)
mainSizer.Add(rbSizerRow3, 1, wx.ALL | wx.EXPAND, 0)
panel.SetSizer(mainSizer)
@@ -110,6 +115,9 @@ class PFContextMenuPref(PreferenceView):
def OnSetting7Change(self, event):
self.settings.set('additionsCopyPaste', event.GetInt())
def OnSetting8Change(self, event):
self.settings.set('cargoFill', event.GetInt())
def getImage(self):
return BitmapLoader.getBitmap("settings_menu", "gui")

View File

@@ -106,6 +106,14 @@ class PFStatViewPref(PreferenceView):
rbSizerRow3.Add(self.rbOutgoing, 1, wx.TOP | wx.RIGHT, 5)
self.rbOutgoing.Bind(wx.EVT_RADIOBOX, self.OnOutgoingChange)
self.rbBombing = wx.RadioBox(panel, -1, _t("Bombing"), wx.DefaultPosition, wx.DefaultSize, [_t('None'), _t('Minimal'), _t('Full')], 1,
wx.RA_SPECIFY_COLS)
# Disable minimal as we don't have a view for this yet
self.rbBombing.EnableItem(1, False)
self.rbBombing.SetSelection(self.settings.get('bombing'))
rbSizerRow3.Add(self.rbBombing, 1, wx.TOP | wx.RIGHT, 5)
self.rbBombing.Bind(wx.EVT_RADIOBOX, self.OnBombingChange)
mainSizer.Add(rbSizerRow3, 1, wx.ALL | wx.EXPAND, 0)
panel.SetSizer(mainSizer)
@@ -144,5 +152,7 @@ class PFStatViewPref(PreferenceView):
def getImage(self):
return BitmapLoader.getBitmap("settings_stats", "gui")
def OnBombingChange(self, event):
self.settings.set('bombing', event.GetInt())
PFStatViewPref.register()

View File

@@ -7,6 +7,7 @@ __all__ = [
"outgoingViewFull",
"outgoingViewMinimal",
"targetingMiscViewMinimal",
"bombingViewFull",
"priceViewFull",
"priceViewMinimal",
]

View File

@@ -0,0 +1,165 @@
# =============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of pyfa.
#
# pyfa is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# pyfa is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================
# noinspection PyPackageRequirements
import wx
import math
import gui.mainFrame
from gui.bitmap_loader import BitmapLoader
from gui.statsView import StatsView
from eos.const import FittingModuleState
from service.market import Market
_t = wx.GetTranslation
class BombingViewFull(StatsView):
name = "bombingViewFull"
def __init__(self, parent):
StatsView.__init__(self)
self.parent = parent
self._cachedValues = []
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def getHeaderText(self, fit):
return _t("Bombing")
def getTextExtentW(self, text):
width, height = self.parent.GetTextExtent(text)
return width
def populatePanel(self, contentPanel, headerPanel):
contentSizer = contentPanel.GetSizer()
self.panel = contentPanel
self.headerPanel = headerPanel
# Display table
sizerBombing = wx.FlexGridSizer(7, 5, 0, 0)
for i in range(4):
sizerBombing.AddGrowableCol(i + 1)
contentSizer.Add(sizerBombing, 0, wx.EXPAND, 0)
# first row is for icons
bitmap = BitmapLoader.getStaticBitmap("skill_big", contentPanel, "gui")
tooltip = wx.ToolTip(_t("Covert Ops level"))
bitmap.SetToolTip(tooltip)
sizerBombing.Add(bitmap, 0, wx.ALIGN_CENTER)
toolTipText = {
"em": _t("Electron Bomb"),
"thermal": _t("Scorch Bomb"),
"kinetic": _t("Concussion Bomb"),
"explosive": _t("Shrapnel Bomb")
}
for damageType in ("em", "thermal", "kinetic", "explosive"):
bitmap = BitmapLoader.getStaticBitmap("%s_big" % damageType, contentPanel, "gui")
tooltip = wx.ToolTip(toolTipText[damageType])
bitmap.SetToolTip(tooltip)
sizerBombing.Add(bitmap, 0, wx.ALIGN_CENTER)
# the other rows are for each possible level of Covert Ops skill
for covertLevel in ("0", "1", "2", "3", "4", "5"):
label = wx.StaticText(contentPanel, wx.ID_ANY, "%s" % covertLevel)
tooltip = wx.ToolTip(_t("Covert Ops level"))
label.SetToolTip(tooltip)
sizerBombing.Add(label, 0, wx.ALIGN_CENTER)
for damageType in ("em", "thermal", "kinetic", "explosive"):
label = wx.StaticText(contentPanel, wx.ID_ANY, "0.0")
setattr(self, "labelDamagetypeCovertlevel%s%s" % (damageType.capitalize(), covertLevel), label)
sizerBombing.Add(label, 0, wx.ALIGN_CENTER)
def refreshPanel(self, fit):
# If we did anything interesting, we'd update our labels to reflect the new fit's stats here
if fit is None:
return
mkt = Market.getInstance()
emBomb = mkt.getItem(27920)
thermalBomb = mkt.getItem(27916)
kineticBomb = mkt.getItem(27912)
explosiveBomb = mkt.getItem(27918)
environementBombDamageModifier = 1.0
# list all environmental effects affecting bomb damage
relevantEffects = [
'Class 6 Red Giant Effects',
'Class 5 Red Giant Effects',
'Class 4 Red Giant Effects',
'Class 3 Red Giant Effects',
'Class 2 Red Giant Effects',
'Class 1 Red Giant Effects',
]
for effect in fit.projectedModules:
if effect.state == FittingModuleState.ONLINE and effect.fullName in relevantEffects:
# note: despite the name, smartbombDamageMultiplier applies to the damage of launched bombs
environementBombDamageModifier = environementBombDamageModifier *\
effect.item.attributes['smartbombDamageMultiplier'].value
# signature radius of the current fit to calculate the application of bombs
shipSigRadius = fit.ship.getModifiedItemAttr('signatureRadius')
# get the raw values for all hp layers
hullHP = fit.ship.getModifiedItemAttr('hp')
armorHP = fit.ship.getModifiedItemAttr('armorHP')
shieldHP = fit.ship.getModifiedItemAttr('shieldCapacity')
# we calculate the total ehp for pure damage of all types based on raw hp and resonance (resonance= 1-resistance)
emEhp = hullHP / fit.ship.getModifiedItemAttr('emDamageResonance') +\
armorHP / fit.ship.getModifiedItemAttr('armorEmDamageResonance') +\
shieldHP / fit.ship.getModifiedItemAttr('shieldEmDamageResonance')
thermalEhp = hullHP / fit.ship.getModifiedItemAttr('thermalDamageResonance') +\
armorHP / fit.ship.getModifiedItemAttr('armorThermalDamageResonance') +\
shieldHP / fit.ship.getModifiedItemAttr('shieldThermalDamageResonance')
kineticEhp = hullHP / fit.ship.getModifiedItemAttr('kineticDamageResonance') +\
armorHP / fit.ship.getModifiedItemAttr('armorKineticDamageResonance') +\
shieldHP / fit.ship.getModifiedItemAttr('shieldKineticDamageResonance')
explosiveEhp = hullHP / fit.ship.getModifiedItemAttr('explosiveDamageResonance') +\
armorHP / fit.ship.getModifiedItemAttr('armorExplosiveDamageResonance') +\
shieldHP / fit.ship.getModifiedItemAttr('shieldExplosiveDamageResonance')
# updates the labels for each combination of covert op level and damage type
for covertLevel in ("0", "1", "2", "3", "4", "5"):
covertOpsBombDamageModifier = 1 + 0.05 * int(covertLevel)
for damageType, ehp, bomber, bomb in (("em", emEhp, "Purifier", emBomb),
("thermal", thermalEhp, "Nemesis", thermalBomb),
("kinetic", kineticEhp, "Manticore", kineticBomb),
("explosive", explosiveEhp, "Hound", explosiveBomb)):
baseBombDamage = (bomb.attributes['emDamage'].value + bomb.attributes['thermalDamage'].value +
bomb.attributes['kineticDamage'].value + bomb.attributes['explosiveDamage'].value)
appliedBombDamage = baseBombDamage * covertOpsBombDamageModifier * environementBombDamageModifier * \
(min(bomb.attributes['signatureRadius'].value, shipSigRadius) /
bomb.attributes['signatureRadius'].value)
label = getattr(self, "labelDamagetypeCovertlevel%s%s" % (damageType.capitalize(), covertLevel))
label.SetLabel("{:.1f}".format(math.ceil((ehp / appliedBombDamage) * 10) / 10))
if covertLevel != "0":
label.SetToolTip("Number of %s to kill a %s using a %s "
"with Covert Ops level %s" % (bomb.customName, fit.name, bomber, covertLevel))
else:
label.SetToolTip("Number of %s to kill a %s with Covert Ops level %s" %
(bomb.customName, fit.name, covertLevel))
self.panel.Layout()
self.headerPanel.Layout()
BombingViewFull.register()

View File

@@ -43,6 +43,7 @@ class StatsPane(wx.Panel):
"outgoing",
"capacitor",
"targetingMisc",
"bombing",
"price",
]

View File

@@ -51,6 +51,7 @@ from gui.builtinStatsViews import ( # noqa: E402, F401
capacitorViewFull,
rechargeViewFull,
targetingMiscViewMinimal,
bombingViewFull,
priceViewFull,
priceViewMinimal,
outgoingViewFull,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 433 B

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 944 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 804 B

After

Width:  |  Height:  |  Size: 787 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 788 B

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 818 B

After

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 808 B

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 B

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 806 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

After

Width:  |  Height:  |  Size: 816 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 B

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 821 B

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 839 B

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 819 B

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 817 B

After

Width:  |  Height:  |  Size: 790 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 847 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 841 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 840 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 850 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 B

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

After

Width:  |  Height:  |  Size: 847 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 846 B

After

Width:  |  Height:  |  Size: 853 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 848 B

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 778 B

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 835 B

After

Width:  |  Height:  |  Size: 851 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 B

After

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 829 B

After

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 802 B

After

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 769 B

After

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 818 B

After

Width:  |  Height:  |  Size: 840 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 821 B

After

Width:  |  Height:  |  Size: 844 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

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