Merge branch 'master' into charImplants

# Conflicts:
#	gui/characterEditor.py
This commit is contained in:
blitzmann
2016-03-12 23:20:26 -05:00
1260 changed files with 3684 additions and 676 deletions

View File

@@ -1,5 +1,7 @@
# pyfa
[![Join the chat at https://gitter.im/pyfa-org/Pyfa](https://badges.gitter.im/pyfa-org/Pyfa.svg)](https://gitter.im/pyfa-org/Pyfa?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
![pyfa](https://cloud.githubusercontent.com/assets/3904767/10271512/af385ef2-6ade-11e5-8f67-52b8b1e4c797.PNG)
## What is it?
@@ -12,16 +14,24 @@ The latest version along with release notes can always be found on the projects
## Installing
Windows and OS X users are supplied self-contained builds of pyfa that can be run without additional software. An `.exe` installer is also available for the Windows builds. There is no self-contained package for Linux users, which are expected to run pyfa through their distributions Python interpreter. However, there are a number of third-party packages available that handle the dependencies and updates for pyfa (for example, [pyfa for Arch Linux](https://aur.archlinux.org/packages/pyfa/)). Please check your distributions repositories.
## Requirements
### Requirements
If you wish to help with development or simply need to run pyfa through a Python interpreter, the following software is required:
* Python >= 2.6
* Python 2.7
* `wxPython` 2.8/3.0
* `sqlalchemy` >= 0.6
* `dateutil`
* `matplotlib` (for some Linux distributions, you may need to install separate wxPython bindings, such as `python-matplotlib-wx`)
* `requests`
### Linux Distro-specific Packages
The following is a list of pyfa packages available for certain distros. Please note that these packages are maintained by third-parties and are not evaluated by the pyfa developers.
* Debian/Ubuntu/derivitives: https://github.com/AdamMajer/Pyfa/releases
* Arch: https://aur.archlinux.org/packages/pyfa/
* openSUSE: https://build.opensuse.org/package/show/home:rmk2/pyfa
* FreeBSD: http://www.freshports.org/games/pyfa/ (see #484 for instructions)
## Bug Reporting
The preferred method of reporting bugs is through the projects GitHub Issues interface. Alternatively, posting a report in the pyfa thread on the official EVE Online forums is acceptable. Guidelines for bug reporting can be found on [this wiki page](https://github.com/DarkFenX/Pyfa/wiki/Bug-Reporting).

View File

@@ -18,10 +18,10 @@ debug = False
saveInRoot = False
# Version data
version = "1.16.2"
version = "1.20.0"
tag = "Stable"
expansionName = "Parallax"
expansionVersion = "1.1"
expansionName = "March 2016"
expansionVersion = "1.0"
evemonMinVersion = "4081"
pyfaPath = None
@@ -60,7 +60,7 @@ def __createDirs(path):
if not os.path.exists(path):
os.makedirs(path)
def defPaths():
def defPaths(customSavePath):
global debug
global pyfaPath
global savePath
@@ -87,13 +87,17 @@ def defPaths():
else:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
if customSavePath is None: # customSavePath is not overriden
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
sys.getfilesystemencoding())
else:
savePath = customSavePath
__createDirs(savePath)
if isFrozen():
os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(pyfaPath, "cacert.pem")
os.environ["SSL_CERT_FILE"] = os.path.join(pyfaPath, "cacert.pem")
format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s'
logging.basicConfig(format=format, level=logLevel)

View File

@@ -0,0 +1,116 @@
"""
Migration 11
- Converts modules based on December Release 2015 Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
"""
CONVERSIONS = {
16467: ( # Medium Gremlin Compact Energy Neutralizer
16471, # Medium Unstable Power Fluctuator I
),
22947: ( # 'Beatnik' Small Remote Armor Repairer
23414, # 'Brotherhood' Small Remote Armor Repairer
),
8295: ( # Type-D Restrained Shield Flux Coil
8293, # Beta Reactor Control: Shield Flux I
),
16499: ( # Heavy Knave Scoped Energy Nosferatu
16501, # E500 Prototype Energy Vampire
),
16477: ( # Heavy Infectious Scoped Energy Neutralizer
16473, # Heavy Rudimentary Energy Destabilizer I
),
16475: ( # Heavy Gremlin Compact Energy Neutralizer
16479, # Heavy Unstable Power Fluctuator I
),
16447: ( # Medium Solace Scoped Remote Armor Repairer
16445, # Medium 'Arup' Remote Armor Repairer
),
508: ( # 'Basic' Shield Flux Coil
8325, # Alpha Reactor Shield Flux
8329, # Marked Generator Refitting: Shield Flux
8323, # Partial Power Plant Manager: Shield Flux
8327, # Type-E Power Core Modification: Shield Flux
),
1419: ( # 'Basic' Shield Power Relay
8341, # Alpha Reactor Shield Power Relay
8345, # Marked Generator Refitting: Shield Power Relay
8339, # Partial Power Plant Manager: Shield Power Relay
8343, # Type-E Power Core Modification: Shield Power Relay
),
16439: ( # Small Solace Scoped Remote Armor Repairer
16437, # Small 'Arup' Remote Armor Repairer
),
16505: ( # Medium Ghoul Compact Energy Nosferatu
16511, # Medium Diminishing Power System Drain I
),
8297: ( # Mark I Compact Shield Flux Coil
8291, # Local Power Plant Manager: Reaction Shield Flux I
),
16455: ( # Large Solace Scoped Remote Armor Repairer
16453, # Large 'Arup' Remote Armor Repairer
),
6485: ( # M51 Benefactor Compact Shield Recharger
6491, # Passive Barrier Compensator I
6489, # 'Benefactor' Ward Reconstructor
6487, # Supplemental Screen Generator I
),
5137: ( # Small Knave Scoped Energy Nosferatu
5135, # E5 Prototype Energy Vampire
),
8579: ( # Medium Murky Compact Remote Shield Booster
8581, # Medium 'Atonement' Remote Shield Booster
),
8531: ( # Small Murky Compact Remote Shield Booster
8533, # Small 'Atonement' Remote Shield Booster
),
16497: ( # Heavy Ghoul Compact Energy Nosferatu
16503, # Heavy Diminishing Power System Drain I
),
4477: ( # Small Gremlin Compact Energy Neutralizer
4475, # Small Unstable Power Fluctuator I
),
8337: ( # Mark I Compact Shield Power Relay
8331, # Local Power Plant Manager: Reaction Shield Power Relay I
),
23416: ( # 'Peace' Large Remote Armor Repairer
22951, # 'Pacifier' Large Remote Armor Repairer
),
5141: ( # Small Ghoul Compact Energy Nosferatu
5139, # Small Diminishing Power System Drain I
),
4471: ( # Small Infectious Scoped Energy Neutralizer
4473, # Small Rudimentary Energy Destabilizer I
),
16469: ( # Medium Infectious Scoped Energy Neutralizer
16465, # Medium Rudimentary Energy Destabilizer I
),
8335: ( # Type-D Restrained Shield Power Relay
8333, # Beta Reactor Control: Shield Power Relay I
),
405: ( # 'Micro' Remote Shield Booster
8631, # Micro Asymmetric Remote Shield Booster
8627, # Micro Murky Remote Shield Booster
8629, # Micro 'Atonement' Remote Shield Booster
8633, # Micro S95a Remote Shield Booster
),
8635: ( # Large Murky Compact Remote Shield Booster
8637, # Large 'Atonement' Remote Shield Booster
),
16507: ( # Medium Knave Scoped Energy Nosferatu
16509, # E50 Prototype Energy Vampire
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,340 @@
"""
Migration 12
- Converts modules based on March 2016 Module Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
"""
CONVERSIONS = {
16457: ( # Crosslink Compact Ballistic Control System
16459, # Muon Coil Bolt Array I
16461, # Multiphasic Bolt Array I
16463, # 'Pandemonium' Ballistic Enhancement
),
5281: ( # Coadjunct Scoped Remote Sensor Booster
7218, # Piercing ECCM Emitter I
),
5365: ( # Cetus Scoped Burst Jammer
5359, # 1Z-3 Subversive ECM Eruption
),
1973: ( # Sensor Booster I
1947, # ECCM - Radar I
2002, # ECCM - Ladar I
2003, # ECCM - Magnetometric I
2004, # ECCM - Gravimetric I
2005, # ECCM - Omni I
),
1951: ( # 'Basic' Tracking Enhancer
6322, # Beta-Nought Tracking Mode
6323, # Azimuth Descalloping Tracking Enhancer
6324, # F-AQ Delay-Line Scan Tracking Subroutines
6321, # Beam Parallax Tracking Program
),
521: ( # 'Basic' Damage Control
5829, # GLFF Containment Field
5831, # Interior Force Field Array
5835, # F84 Local Damage System
5833, # Systematic Damage Control
),
22925: ( # 'Bootleg' Remote Sensor Booster
22939, # 'Boss' Remote Sensor Booster
22941, # 'Entrepreneur' Remote Sensor Booster
),
5443: ( # Faint Epsilon Scoped Warp Scrambler
5441, # Fleeting Progressive Warp Scrambler I
),
1963: ( # Remote Sensor Booster I
1959, # ECCM Projector I
),
6325: ( # Fourier Compact Tracking Enhancer
6326, # Sigma-Nought Tracking Mode I
6327, # Auto-Gain Control Tracking Enhancer I
6328, # F-aQ Phase Code Tracking Subroutines
),
21486: ( # 'Kindred' Gyrostabilizer
21488, # Monophonic Stabilization Actuator I
),
19927: ( # Hypnos Scoped Magnetometric ECM
9518, # Initiated Ion Field ECM I
),
10188: ( # 'Basic' Magnetic Field Stabilizer
11111, # Insulated Stabilizer Array
11109, # Linear Flux Stabilizer
11115, # Gauss Field Balancer
11113, # Magnetic Vortex Stabilizer
),
22919: ( # 'Monopoly' Magnetic Field Stabilizer
22917, # 'Capitalist' Magnetic Field Stabilizer I
),
5839: ( # IFFA Compact Damage Control
5841, # Emergency Damage Control I
5843, # F85 Peripheral Damage System I
5837, # Pseudoelectron Containment Field I
),
522: ( # 'Micro' Cap Battery
4747, # Micro Ld-Acid Capacitor Battery I
4751, # Micro Ohm Capacitor Reserve I
4745, # Micro F-4a Ld-Sulfate Capacitor Charge Unit
4749, # Micro Peroxide Capacitor Power Cell
3480, # Micro Capacitor Battery II
),
518: ( # 'Basic' Gyrostabilizer
5915, # Lateral Gyrostabilizer
5919, # F-M2 Weapon Inertial Suspensor
5913, # Hydraulic Stabilization Actuator
5917, # Stabilized Weapon Mounts
),
19931: ( # Compulsive Scoped Multispectral ECM
19933, # 'Hypnos' Multispectral ECM I
),
5403: ( # Faint Scoped Warp Disruptor
5401, # Fleeting Warp Disruptor I
),
23902: ( # 'Trebuchet' Heat Sink I
23900, # 'Mangonel' Heat Sink I
),
1893: ( # 'Basic' Heat Sink
5845, # Heat Exhaust System
5856, # C3S Convection Thermal Radiator
5855, # 'Boreas' Coolant System
5854, # Stamped Heat Sink
),
6160: ( # F-90 Compact Sensor Booster
20214, # Extra Radar ECCM Scanning Array I
20220, # Extra Ladar ECCM Scanning Array I
20226, # Extra Gravimetric ECCM Scanning Array I
20232, # Extra Magnetometric ECCM Scanning Array I
7948, # Gravimetric Positional ECCM Sensor System I
7964, # Radar Positional ECCM Sensor System I
7965, # Omni Positional ECCM Sensor System I
7966, # Ladar Positional ECCM Sensor System I
7970, # Magnetometric Positional ECCM Sensor System I
20218, # Conjunctive Radar ECCM Scanning Array I
20224, # Conjunctive Ladar ECCM Scanning Array I
20230, # Conjunctive Gravimetric ECCM Scanning Array I
20236, # Conjunctive Magnetometric ECCM Scanning Array I
6157, # Supplemental Scanning CPU I
),
23418: ( # 'Radical' Damage Control
22893, # 'Gonzo' Damage Control I
),
19952: ( # Umbra Scoped Radar ECM
9520, # 'Penumbra' White Noise ECM
),
1952: ( # Sensor Booster II
2258, # ECCM - Omni II
2259, # ECCM - Gravimetric II
2260, # ECCM - Ladar II
2261, # ECCM - Magnetometric II
2262, # ECCM - Radar II
),
5282: ( # Linked Enduring Sensor Booster
7219, # Scattering ECCM Projector I
),
1986: ( # Signal Amplifier I
2579, # Gravimetric Backup Array I
2583, # Ladar Backup Array I
2587, # Magnetometric Backup Array I
2591, # Multi Sensor Backup Array I
4013, # RADAR Backup Array I
),
4871: ( # Large Compact Pb-Acid Cap Battery
4875, # Large Ohm Capacitor Reserve I
4869, # Large F-4a Ld-Sulfate Capacitor Charge Unit
4873, # Large Peroxide Capacitor Power Cell
),
1964: ( # Remote Sensor Booster II
1960, # ECCM Projector II
),
5933: ( # Counterbalanced Compact Gyrostabilizer
5931, # Cross-Lateral Gyrostabilizer I
5935, # F-M3 Munition Inertial Suspensor
5929, # Pneumatic Stabilization Actuator I
),
4025: ( # X5 Enduring Stasis Webifier
4029, # 'Langour' Drive Disruptor I
),
4027: ( # Fleeting Compact Stasis Webifier
4031, # Patterned Stasis Web I
),
22937: ( # 'Enterprise' Remote Tracking Computer
22935, # 'Tycoon' Remote Tracking Computer
),
22929: ( # 'Marketeer' Tracking Computer
22927, # 'Economist' Tracking Computer I
),
1987: ( # Signal Amplifier II
2580, # Gravimetric Backup Array II
2584, # Ladar Backup Array II
2588, # Magnetometric Backup Array II
2592, # Multi Sensor Backup Array II
4014, # RADAR Backup Array II
),
19939: ( # Enfeebling Scoped Ladar ECM
9522, # Faint Phase Inversion ECM I
),
5340: ( # P-S Compact Remote Tracking Computer
5341, # 'Prayer' Remote Tracking Computer
),
19814: ( # Phased Scoped Target Painter
19808, # Partial Weapon Navigation
),
1949: ( # 'Basic' Signal Amplifier
1946, # Basic RADAR Backup Array
1982, # Basic Ladar Backup Array
1983, # Basic Gravimetric Backup Array
1984, # Basic Magnetometric Backup Array
1985, # Basic Multi Sensor Backup Array
6193, # Emergency Magnetometric Scanners
6194, # Emergency Multi-Frequency Scanners
6202, # Emergency RADAR Scanners
6216, # Emergency Ladar Scanners
6217, # Emergency Gravimetric Scanners
6225, # Sealed RADAR Backup Cluster
6238, # Sealed Magnetometric Backup Cluster
6239, # Sealed Multi-Frequency Backup Cluster
6241, # Sealed Ladar Backup Cluster
6242, # Sealed Gravimetric Backup Cluster
6257, # Surplus RADAR Reserve Array
6258, # F-42 Reiterative RADAR Backup Sensors
6283, # Surplus Magnetometric Reserve Array
6284, # F-42 Reiterative Magnetometric Backup Sensors
6285, # Surplus Multi-Frequency Reserve Array
6286, # F-42 Reiterative Multi-Frequency Backup Sensors
6289, # Surplus Ladar Reserve Array
6290, # F-42 Reiterative Ladar Backup Sensors
6291, # Surplus Gravimetric Reserve Array
6292, # F-42 Reiterative Gravimetric Backup Sensors
6309, # Amplitude Signal Enhancer
6310, # 'Acolyth' Signal Booster
6311, # Type-E Discriminative Signal Augmentation
6312, # F-90 Positional Signal Amplifier
),
21527: ( # 'Firewall' Signal Amplifier
21521, # Gravimetric Firewall
21523, # Ladar Firewall
21525, # Magnetometric Firewall
21527, # Multi Sensor Firewall
21529, # RADAR Firewall
),
23416: ( # 'Peace' Large Remote Armor Repairer
None, # 'Pacifier' Large Remote Armor Repairer
),
6176: ( # F-12 Enduring Tracking Computer
6174, # Monopulse Tracking Mechanism I
),
6159: ( # Alumel-Wired Enduring Sensor Booster
7917, # Alumel Radar ECCM Sensor Array I
7918, # Alumel Ladar ECCM Sensor Array I
7922, # Alumel Gravimetric ECCM Sensor Array I
7926, # Alumel Omni ECCM Sensor Array I
7937, # Alumel Magnetometric ECCM Sensor Array I
7867, # Supplemental Ladar ECCM Scanning Array I
7869, # Supplemental Gravimetric ECCM Scanning Array I
7870, # Supplemental Omni ECCM Scanning Array I
7887, # Supplemental Radar ECCM Scanning Array I
7889, # Supplemental Magnetometric ECCM Scanning Array I
20216, # Incremental Radar ECCM Scanning Array I
20222, # Incremental Ladar ECCM Scanning Array I
20228, # Incremental Gravimetric ECCM Scanning Array I
20234, # Incremental Magnetometric ECCM Scanning Array I
7892, # Prototype ECCM Radar Sensor Cluster
7893, # Prototype ECCM Ladar Sensor Cluster
7895, # Prototype ECCM Gravimetric Sensor Cluster
7896, # Prototype ECCM Omni Sensor Cluster
7914, # Prototype ECCM Magnetometric Sensor Cluster
6158, # Prototype Sensor Booster
),
5849: ( # Extruded Compact Heat Sink
5846, # Thermal Exhaust System I
5858, # C4S Coiled Circuit Thermal Radiator
5857, # 'Skadi' Coolant System I
),
22895: ( # 'Shady' Sensor Booster
22897, # 'Forger' ECCM - Magnetometric I
),
11105: ( # Vortex Compact Magnetic Field Stabilizer
11103, # Insulated Stabilizer Array I
11101, # Linear Flux Stabilizer I
11107, # Gauss Field Balancer I
),
22945: ( # 'Executive' Remote Sensor Dampener
22943, # 'Broker' Remote Sensor Dampener I
),
6173: ( # Optical Compact Tracking Computer
6175, # 'Orion' Tracking CPU I
),
5279: ( # F-23 Compact Remote Sensor Booster
7217, # Spot Pulsing ECCM I
7220, # Phased Muon ECCM Caster I
5280, # Connected Remote Sensor Booster
),
4787: ( # Small Compact Pb-Acid Cap Battery
4791, # Small Ohm Capacitor Reserve I
4785, # Small F-4a Ld-Sulfate Capacitor Charge Unit
4789, # Small Peroxide Capacitor Power Cell
),
19946: ( # BZ-5 Scoped Gravimetric ECM
9519, # FZ-3 Subversive Spatial Destabilizer ECM
),
6073: ( # Medium Compact Pb-Acid Cap Battery
6097, # Medium Ohm Capacitor Reserve I
6111, # Medium F-4a Ld-Sulfate Capacitor Charge Unit
6083, # Medium Peroxide Capacitor Power Cell
),
21484: ( # 'Full Duplex' Ballistic Control System
21482, # Ballistic 'Purge' Targeting System I
),
6296: ( # F-89 Compact Signal Amplifier
6218, # Protected Gravimetric Backup Cluster I
6222, # Protected Ladar Backup Cluster I
6226, # Protected Magnetometric Backup Cluster I
6230, # Protected Multi-Frequency Backup Cluster I
6234, # Protected RADAR Backup Cluster I
6195, # Reserve Gravimetric Scanners
6199, # Reserve Ladar Scanners
6203, # Reserve Magnetometric Scanners
6207, # Reserve Multi-Frequency Scanners
6212, # Reserve RADAR Scanners
20238, # Secure Gravimetric Backup Cluster I
20244, # Secure Ladar Backup Cluster I
20250, # Secure Magnetometric Backup Cluster I
20260, # Secure Radar Backup Cluster I
6244, # F-43 Repetitive Gravimetric Backup Sensors
6252, # F-43 Repetitive Ladar Backup Sensors
6260, # F-43 Repetitive Magnetometric Backup Sensors
6268, # F-43 Repetitive Multi-Frequency Backup Sensors
6276, # F-43 Repetitive RADAR Backup Sensors
20240, # Shielded Gravimetric Backup Cluster I
20246, # Shielded Ladar Backup Cluster I
20252, # Shielded Magnetometric Backup Cluster I
20262, # Shielded Radar Backup Cluster I
6243, # Surrogate Gravimetric Reserve Array I
6251, # Surrogate Ladar Reserve Array I
6259, # Surrogate Magnetometric Reserve Array I
6267, # Surrogate Multi-Frequency Reserve Array I
6275, # Surrogate RADAR Reserve Array I
20242, # Warded Gravimetric Backup Cluster I
20248, # Warded Ladar Backup Cluster I
20254, # Warded Magnetometric Backup Cluster I
20264, # Warded Radar Backup Cluster I
6294, # 'Mendicant' Signal Booster I
6293, # Wavelength Signal Enhancer I
6295, # Type-D Attenuation Signal Augmentation
),
5302: ( # Phased Muon Scoped Sensor Dampener
5300, # Indirect Scanning Dampening Unit I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -131,6 +131,10 @@ class HandledModuleList(HandledList):
self.remove(mod)
return
# fix for #529, where a module may be in incorrect state after CCP changes mechanics of module
if not mod.isValidState(mod.state):
mod.state = eos.types.State.ONLINE
mod.position = len(self)
HandledList.append(self, mod)
if mod.isInvalid:

View File

@@ -1,7 +1,7 @@
# ammoInfluenceCapNeed
#
# Used by:
# Items from category: Charge (458 of 831)
# Items from category: Charge (458 of 851)
type = "passive"
def handler(fit, module, context):
# Dirty hack to work around cap charges setting cap booster

View File

@@ -1,7 +1,7 @@
# ammoInfluenceRange
#
# Used by:
# Items from category: Charge (559 of 831)
# Items from category: Charge (559 of 851)
type = "passive"
def handler(fit, module, context):
module.multiplyItemAttr("maxRange", module.getModifiedChargeAttr("weaponRangeMultiplier"))

View File

@@ -2,6 +2,7 @@
#
# Used by:
# Implants named like: Exile Booster (4 of 4)
# Implant: Antipharmakon Kosybo
type = "passive"
def handler(fit, booster, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Capital Repair Systems"),

View File

@@ -0,0 +1,11 @@
# armorRepairProjectorFalloffBonus
#
# Used by:
# Variations of ship: Navitas (2 of 2)
# Ship: Augoror
# Ship: Deacon
# Ship: Exequror
# Ship: Inquisitor
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer", "falloffEffectiveness", src.getModifiedItemAttr("falloffBonus"))

View File

@@ -1,10 +1,11 @@
# armorRepairProjectorMaxRangeBonus
#
# Used by:
# Variations of ship: Navitas (2 of 2)
# Ship: Augoror
# Ship: Deacon
# Ship: Exequror
# Ship: Inquisitor
# Ship: Navitas
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",

View File

@@ -1,7 +1,7 @@
# boosterArmorHpPenalty
#
# Used by:
# Implants from group: Booster (12 of 37)
# Implants from group: Booster (12 of 42)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.ship.boostItemAttr("armorHP", booster.getModifiedItemAttr("boosterArmorHPPenalty"))

View File

@@ -1,7 +1,7 @@
# boosterArmorRepairAmountPenalty
#
# Used by:
# Implants from group: Booster (9 of 37)
# Implants from group: Booster (9 of 42)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",

View File

@@ -1,7 +1,7 @@
# boosterMaxVelocityPenalty
#
# Used by:
# Implants from group: Booster (12 of 37)
# Implants from group: Booster (12 of 42)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.ship.boostItemAttr("maxVelocity", booster.getModifiedItemAttr("boosterMaxVelocityPenalty"))

View File

@@ -1,7 +1,7 @@
# boosterShieldCapacityPenalty
#
# Used by:
# Implants from group: Booster (12 of 37)
# Implants from group: Booster (12 of 42)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.ship.boostItemAttr("shieldCapacity", booster.getModifiedItemAttr("boosterShieldCapacityPenalty"))

View File

@@ -1,7 +1,7 @@
# boosterTurretOptimalRangePenalty
#
# Used by:
# Implants from group: Booster (9 of 37)
# Implants from group: Booster (9 of 42)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),

View File

@@ -4,5 +4,5 @@
# Ship: Scorpion
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Jammer",
"ecmBurstRange", ship.getModifiedItemAttr("shipBonusCB3"), skill="Caldari Battleship")

View File

@@ -1,7 +1,8 @@
# caldariShipEwCapacitorNeedCF2
#
# Used by:
# Variations of ship: Griffin (2 of 2)
# Ship: Griffin
# Ship: Kitsune
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
"falloff", ship.getModifiedItemAttr("shipBonusCB3"), skill="Caldari Battleship")
"falloffEffectiveness", ship.getModifiedItemAttr("shipBonusCB3"), skill="Caldari Battleship")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM",
"falloff", ship.getModifiedItemAttr("shipBonusCC2"), skill="Caldari Cruiser")
"falloffEffectiveness", ship.getModifiedItemAttr("shipBonusCC2"), skill="Caldari Cruiser")

View File

@@ -1,7 +1,7 @@
# capacitorCapacityBonus
#
# Used by:
# Modules from group: Capacitor Battery (27 of 27)
# Modules from group: Capacitor Battery (22 of 22)
type = "passive"
def handler(fit, ship, context):
fit.ship.increaseItemAttr("capacitorCapacity", ship.getModifiedItemAttr("capacitorBonus"))

View File

@@ -6,8 +6,6 @@
# Modules from group: Power Diagnostic System (23 of 23)
# Modules from group: Propulsion Module (114 of 114)
# Modules from group: Reactor Control Unit (22 of 22)
# Modules from group: Shield Flux Coil (11 of 11)
# Modules from group: Shield Power Relay (11 of 11)
type = "passive"
def handler(fit, module, context):
fit.ship.multiplyItemAttr("capacitorCapacity", module.getModifiedItemAttr("capacitorCapacityMultiplier"))

View File

@@ -2,9 +2,9 @@
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes
# Skill: XL Torpedoes
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"),
"emDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)

View File

@@ -2,9 +2,9 @@
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes
# Skill: XL Torpedoes
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"),
"explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)

View File

@@ -2,9 +2,9 @@
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes
# Skill: XL Torpedoes
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"),
"kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)

View File

@@ -2,9 +2,9 @@
#
# Used by:
# Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6)
# Skill: Citadel Torpedoes
# Skill: XL Torpedoes
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"),
"thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level)

View File

@@ -1,8 +1,8 @@
# capitalLauncherSkillCruiseCitadelEmDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
# Skill: XL Cruise Missiles
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"),
"emDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)

View File

@@ -1,8 +1,8 @@
# capitalLauncherSkillCruiseCitadelExplosiveDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
# Skill: XL Cruise Missiles
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"),
"explosiveDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)

View File

@@ -1,8 +1,8 @@
# capitalLauncherSkillCruiseCitadelKineticDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
# Skill: XL Cruise Missiles
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"),
"kineticDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)

View File

@@ -1,8 +1,8 @@
# capitalLauncherSkillCruiseCitadelThermalDamage1
#
# Used by:
# Skill: Citadel Cruise Missiles
# Skill: XL Cruise Missiles
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"),
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"),
"thermalDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level)

View File

@@ -0,0 +1,8 @@
# carrierAmarrArmorTransferFalloff3
#
# Used by:
# Ship: Aeon
# Ship: Archon
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierAmarrBonus3"), skill="Amarr Carrier")

View File

@@ -7,6 +7,6 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
"shieldTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")
"maxRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"),
"powerTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")

View File

@@ -0,0 +1,9 @@
# carrierCaldariShieldTransferFalloff3
#
# Used by:
# Ship: Chimera
# Ship: Revenant
# Ship: Wyvern
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier")

View File

@@ -0,0 +1,8 @@
# carrierGallenteArmor&ShieldTransferFalloff3
#
# Used by:
# Ship: Nyx
# Ship: Thanatos
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems") or mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier")

View File

@@ -6,6 +6,6 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
"shieldTransferRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier")
"maxRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
"maxRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier")

View File

@@ -0,0 +1,8 @@
# carrierMinmatarArmor&ShieldTransferFalloff3
#
# Used by:
# Ship: Hel
# Ship: Nidhoggur
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems") or mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier")

View File

@@ -6,6 +6,6 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"),
"shieldTransferRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier")
"maxRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
"maxRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier")

View File

@@ -5,6 +5,8 @@
gangBonus = "commandBonusECM"
gangBoost = "ewarStrECM"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
for scanType in ("Magnetometric", "Radar", "Ladar", "Gravimetric"):

View File

@@ -5,6 +5,8 @@
gangBonus = "commandBonusRSD"
gangBoost = "ewarStrRSD"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Sensor Linking"),

View File

@@ -5,8 +5,18 @@
gangBonus = "commandBonusTD"
gangBoost = "ewarStrTD"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
for bonus in ("maxRangeBonus", "falloffBonus", "trackingSpeedBonus"):
for bonus in (
"missileVelocityBonus",
"explosionDelayBonus",
"aoeVelocityBonus",
"falloffBonus",
"maxRangeBonus",
"aoeCloudSizeBonus",
"trackingSpeedBonus"
):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"),
bonus, module.getModifiedItemAttr("commandBonusTD"))

View File

@@ -5,8 +5,10 @@
gangBonus = "commandBonusTP"
gangBoost = "ewarStrTP"
type = "active", "gang"
runTime = "late"
def handler(fit, module, context):
if "gang" not in context: return
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Target Painting"),
"signatureRadiusBonus", module.getModifiedItemAttr("commandBonusTP"),
stackingPenalties = True)

View File

@@ -4,12 +4,12 @@
# Ships from group: Black Ops (4 of 4)
# Ships from group: Blockade Runner (4 of 4)
# Ships from group: Covert Ops (5 of 5)
# Ships from group: Expedition Frigate (2 of 2)
# Ships from group: Force Recon Ship (6 of 6)
# Ships from group: Stealth Bomber (4 of 4)
# Ships named like: Stratios (2 of 2)
# Subsystems named like: Offensive Covert Reconfiguration (4 of 4)
# Ship: Astero
# Ship: Prospect
type = "passive"
def handler(fit, container, context):
fit.modules.filteredItemForce(lambda mod: mod.item.requiresSkill("Cloaking"),

View File

@@ -5,5 +5,5 @@
type = "passive"
runTime = "early"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cloaking Device",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"),
"cpu", ship.getModifiedItemAttr("eliteBonusCoverOps1"), skill="Covert Ops")

View File

@@ -1,8 +1,8 @@
# covertOpsCloakCPUPercentBonusPirateFaction
#
# Used by:
# Ships from group: Expedition Frigate (2 of 2)
# Ship: Astero
# Ship: Prospect
# Ship: Victorieux Luxury Yacht
type = "passive"
runTime = "early"

View File

@@ -4,6 +4,7 @@
# Ships from group: Black Ops (4 of 4)
# Ships from group: Stealth Bomber (4 of 4)
# Ship: Chremoas
# Ship: Endurance
# Ship: Etana
type = "passive"
def handler(fit, ship, context):

View File

@@ -1,8 +1,8 @@
# damageControl
#
# Used by:
# Modules from group: Damage Control (14 of 14)
type = "active"
# Modules from group: Damage Control (17 of 17)
type = "passive"
def handler(fit, module, context):
for layer, attrPrefix in (('shield', 'shield'), ('armor', 'armor'), ('hull', '')):
for damageType in ('Kinetic', 'Thermal', 'Explosive', 'Em'):

View File

@@ -2,7 +2,6 @@
#
# Used by:
# Drones from group: Stasis Webifying Drone (3 of 3)
# Modules from group: Stasis Web (19 of 19)
type = "active", "projected"
def handler(fit, module, context):
if "projected" not in context:

View File

@@ -1,9 +1,8 @@
# droneArmorDamageBonusEffect
#
# Used by:
# Ships from group: Logistics (5 of 5)
# Ship: Exequror
# Ship: Guardian
# Ship: Oneiros
# Ship: Scythe
type = "passive"
def handler(fit, ship, context):

View File

@@ -1,7 +1,7 @@
# droneDamageBonusOnline
#
# Used by:
# Modules from group: Drone Damage Modules (10 of 10)
# Modules from group: Drone Damage Modules (11 of 11)
type = "passive"
def handler(fit, module, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

View File

@@ -1,7 +1,7 @@
# droneDmgBonus
#
# Used by:
# Skills from group: Drones (8 of 21)
# Skills from group: Drones (8 of 23)
# Skills named like: Drone Specialization (4 of 4)
type = "passive"
def handler(fit, skill, context):

View File

@@ -0,0 +1,9 @@
# droneHullRepairBonusEffect
#
# Used by:
# Ships from group: Logistics (5 of 5)
# Ship: Exequror
# Ship: Scythe
type = "passive"
def handler(fit, src, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Logistic Drone", "structureDamageAmount", src.getModifiedItemAttr("droneArmorDamageAmountBonus"))

View File

@@ -1,7 +1,7 @@
# droneShieldBonusBonusEffect
#
# Used by:
# Ships from group: Logistics (3 of 5)
# Ships from group: Logistics (5 of 5)
# Ship: Exequror
# Ship: Scythe
type = "passive"

View File

@@ -1,7 +1,7 @@
# droneTrackingComputerBonus
#
# Used by:
# Modules from group: Drone Tracking Modules (8 of 8)
# Modules from group: Drone Tracking Modules (10 of 10)
type = "active"
def handler(fit, module, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

View File

@@ -1,7 +1,7 @@
# droneTrackingEnhancerBonus
#
# Used by:
# Modules from group: Drone Tracking Enhancer (9 of 9)
# Modules from group: Drone Tracking Enhancer (10 of 10)
type = "passive"
def handler(fit, module, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

View File

@@ -1,7 +1,7 @@
# ecmBurst
#
# Used by:
# Modules from group: ECM Burst (7 of 7)
# Modules from group: Burst Jammer (11 of 11)
type = "active"
def handler(fit, module, context):
pass

View File

@@ -6,5 +6,5 @@ type = "passive"
def handler(fit, ship, context):
sensorTypes = ("Gravimetric", "Ladar", "Magnetometric", "Radar")
for type in sensorTypes:
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst", "scan{0}StrengthBonus".format(type),
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Jammer", "scan{0}StrengthBonus".format(type),
ship.getModifiedItemAttr("eliteBonusBlackOps1"), skill="Black Ops")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerArmored1
#
# Used by:
# Ship: Magus
# Ship: Pontifex
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerInfo1
#
# Used by:
# Ship: Pontifex
# Ship: Stork
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerInfoHidden1
#
# Used by:
# Ship: Pontifex
# Ship: Stork
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"), "commandBonusHidden", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -0,0 +1,7 @@
# eliteBonusCommandDestroyerMJFGspool2
#
# Used by:
# Ships from group: Command Destroyers (4 of 4)
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Micro Jump Drive Operation"), "duration", src.getModifiedItemAttr("eliteBonusCommandDestroyer2"), skill="Command Destroyers")

View File

@@ -0,0 +1,7 @@
# eliteBonusCommandDestroyerMWDSigRadius3
#
# Used by:
# Ships from group: Command Destroyers (4 of 4)
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"), "signatureRadiusBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer3"), skill="Command Destroyers")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerSiege1
#
# Used by:
# Ship: Bifrost
# Ship: Stork
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Siege Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -0,0 +1,8 @@
# eliteBonusCommandDestroyerSkirmish1
#
# Used by:
# Ship: Bifrost
# Ship: Magus
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -1,8 +0,0 @@
# eliteBonusElectronicAttackShipEnergyNeutRange1
#
# Used by:
# Ship: Sentinel
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
"energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1"), skill="Electronic Attack Ships")

View File

@@ -1,8 +0,0 @@
# eliteBonusElectronicAttackShipEnergyVampireRange1
#
# Used by:
# Ship: Sentinel
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
"powerTransferRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1"), skill="Electronic Attack Ships")

View File

@@ -0,0 +1,7 @@
# eliteBonusLogiFrigArmorHP2
#
# Used by:
# Ship: Deacon
type = "passive"
def handler(fit, src, context):
fit.ship.boostItemAttr("armorHP", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates")

View File

@@ -0,0 +1,9 @@
# eliteBonusLogiFrigArmorRepSpeedCap1
#
# Used by:
# Ship: Deacon
# Ship: Thalia
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates")

View File

@@ -0,0 +1,7 @@
# eliteBonusLogiFrigShieldHP2
#
# Used by:
# Ship: Kirin
type = "passive"
def handler(fit, src, context):
fit.ship.boostItemAttr("shieldCapacity", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates")

View File

@@ -0,0 +1,9 @@
# eliteBonusLogiFrigShieldRepSpeedCap1
#
# Used by:
# Ship: Kirin
# Ship: Scalpel
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "duration", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates")

View File

@@ -0,0 +1,8 @@
# eliteBonusLogiFrigSignature2
#
# Used by:
# Ship: Scalpel
# Ship: Thalia
type = "passive"
def handler(fit, src, context):
fit.ship.boostItemAttr("signatureRadius", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -6,4 +6,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -6,4 +6,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster",
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics")
"trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -5,4 +5,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer",
"trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics")
"trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -5,5 +5,5 @@
# Ship: Pilgrim
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu",
"powerTransferAmount", ship.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships")

View File

@@ -5,5 +5,5 @@
# Ship: Pilgrim
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer",
"energyDestabilizationAmount", ship.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships")

View File

@@ -1,8 +0,0 @@
# eliteReconBonusEnergyNeutRange1
#
# Used by:
# Ship: Curse
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
"energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships")

View File

@@ -1,8 +0,0 @@
# eliteReconBonusNeutRange3
#
# Used by:
# Ship: Pilgrim
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer",
"energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships")

View File

@@ -1,8 +0,0 @@
# eliteReconBonusVampRange3
#
# Used by:
# Ship: Pilgrim
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
"powerTransferRange", ship.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships")

View File

@@ -1,8 +0,0 @@
# eliteReconEnergyVampireRangeBonus1
#
# Used by:
# Ship: Curse
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire",
"powerTransferRange", ship.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships")

View File

@@ -1,8 +1,7 @@
# energyDestabilizationNew
#
# Used by:
# Drones from group: Cap Drain Drone (3 of 3)
# Modules from group: Energy Destabilizer (41 of 41)
# Drones from group: Energy Neutralizer Drone (3 of 3)
from eos.types import State
type = "active", "projected"
def handler(fit, container, context):

View File

@@ -4,6 +4,7 @@
# Implants named like: Inherent Implants 'Squire' Capacitor Management EM (6 of 6)
# Implants named like: Mindflood Booster (4 of 4)
# Modules named like: Semiconductor Memory Cell (8 of 8)
# Implant: Antipharmakon Aeolis
# Implant: Genolution Core Augmentation CA-1
# Skill: Capacitor Management
type = "passive"

View File

@@ -0,0 +1,13 @@
# energyNeutralizerFalloff
#
# Used by:
# Modules from group: Energy Neutralizer (45 of 45)
from eos.types import State
type = "active", "projected"
def handler(fit, container, context):
if "projected" in context and ((hasattr(container, "state") \
and container.state >= State.ACTIVE) or hasattr(container, "amountActive")):
multiplier = container.amountActive if hasattr(container, "amountActive") else 1
amount = container.getModifiedItemAttr("energyDestabilizationAmount")
time = container.getModifiedItemAttr("duration")
fit.addDrain(time, amount * multiplier, 0)

View File

@@ -1,7 +1,7 @@
# leech
# energyNosferatuFalloff
#
# Used by:
# Modules from group: Energy Vampire (52 of 52)
# Modules from group: Energy Nosferatu (45 of 45)
type = "active", "projected"
runTime = "late"
def handler(fit, module, context):
@@ -10,4 +10,4 @@ def handler(fit, module, context):
if "projected" in context:
fit.addDrain(time, amount, 0)
elif "module" in context:
module.itemModifiedAttributes.force("capacitorNeed", -amount)
module.itemModifiedAttributes.force("capacitorNeed", -amount)

View File

@@ -6,4 +6,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter",
"powerTransferRange", ship.getModifiedItemAttr("maxRangeBonus"))
"powerTransferRange", ship.getModifiedItemAttr("maxRangeBonus2"))

View File

@@ -1,7 +1,7 @@
# energyWeaponDamageMultiply
#
# Used by:
# Modules from group: Heat Sink (25 of 25)
# Modules from group: Heat Sink (18 of 18)
# Modules named like: QA Multiship Module Players (4 of 4)
# Module: QA Damage Module
type = "passive"

View File

@@ -1,7 +1,7 @@
# energyWeaponSpeedMultiply
#
# Used by:
# Modules from group: Heat Sink (25 of 25)
# Modules from group: Heat Sink (18 of 18)
type = "passive"
def handler(fit, module, context):
fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Weapon",

View File

@@ -1,7 +1,7 @@
# entosisCPUAddition
#
# Used by:
# Modules from group: Entosis Link (2 of 2)
# Modules from group: Entosis Link (6 of 6)
type = "passive"
def handler(fit, module, context):
module.increaseItemAttr("cpu", module.getModifiedItemAttr("entosisCPUAdd"))

View File

@@ -1,7 +1,7 @@
# entosisLink
#
# Used by:
# Modules from group: Entosis Link (2 of 2)
# Modules from group: Entosis Link (6 of 6)
type = "active"
def handler(fit, module, context):
fit.ship.forceItemAttr("disallowAssistance", module.getModifiedItemAttr("disallowAssistance"))

View File

@@ -4,5 +4,5 @@
# Implants named like: grade Centurion (10 of 12)
type = "passive"
def handler(fit, implant, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener",
"maxRange", implant.getModifiedItemAttr("rangeSkillBonus"))

View File

@@ -4,5 +4,5 @@
# Implants named like: grade Centurion (10 of 12)
type = "passive"
def handler(fit, implant, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor",
"maxRange", implant.getModifiedItemAttr("rangeSkillBonus"))

View File

@@ -7,5 +7,5 @@
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Jammer",
"capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level)

View File

@@ -1,8 +0,0 @@
# ewSkillEcmBurstFalloffBonus
#
# Used by:
# Skill: Frequency Modulation
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst",
"falloff", skill.getModifiedItemAttr("falloffBonus") * skill.level)

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