oh god this isn't gonna work

Merge branch 'ebag_importchanges' into test_import

Conflicts:
	config.py
	eos/db/saveddata/queries.py
	eos/effects/chargebonuswarfarecharge.py
	eos/effects/elitebonuscommandshipinformationhiddencs3.py
	eos/effects/elitebonuslogisticremotearmorrepairoptimalfalloff1.py
	eos/effects/energydestabilizationnew.py
	eos/effects/iceharvestingdroneoperationdurationbonus.py
	eos/effects/miningforemanstrengthbonus.py
	eos/effects/modulebonuswarfarelinkarmor.py
	eos/effects/modulebonuswarfarelinkinfo.py
	eos/effects/modulebonuswarfarelinkmining.py
	eos/effects/modulebonuswarfarelinkshield.py
	eos/effects/modulebonuswarfarelinkskirmish.py
	eos/effects/moduletitaneffectgenerator.py
	eos/effects/remotehullrepair.py
	eos/effects/rolebonusremotearmorrepairoptimalfalloff.py
	eos/effects/shipbonusforceauxiliarya4warfarelinksbonus.py
	eos/effects/shipmodesmallmissiledamagepostdiv.py
	eos/effects/structureenergyneutralizerfalloff.py
	eos/effects/structuremoduleeffectstasiswebifier.py
	eos/effects/structurerigmaxtargets.py
	eos/effects/subsystembonusamarrdefensiveinformationwarfarehidden.py
	eos/effects/subsystembonuscaldaridefensiveinformationwarfarehidden.py
	eos/effects/subsystembonusgallentedefensiveinformationwarfarehidden.py
	eos/effects/techtwocommandburstbonus.py
	eos/saveddata/fighter.py
	eos/saveddata/fit.py
	eos/saveddata/module.py
	eve.db
	gui/bitmapLoader.py
	gui/builtinContextMenus/itemStats.py
	gui/builtinStatsViews/miningyieldViewFull.py
	gui/builtinViewColumns/misc.py
	gui/builtinViews/__init__.py
	gui/builtinViews/fittingView.py
	gui/contextMenu.py
	gui/graphFrame.py
	gui/itemStats.py
	gui/mainFrame.py
	gui/marketBrowser.py
	service/__init__.py
	service/character.py
	service/fit.py
	service/port.py
	service/prefetch.py
	service/pycrest/eve.py
	service/settings.py
This commit is contained in:
blitzman
2017-01-23 21:06:12 -05:00
284 changed files with 8161 additions and 7135 deletions

26
.codecov.yml Normal file
View File

@@ -0,0 +1,26 @@
codecov:
notify:
require_ci_to_pass: yes
coverage:
precision: 2
round: down
range: "70...100"
status:
project: yes
patch: yes
changes: no
parsers:
gcov:
branch_detection:
conditional: yes
loop: yes
method: no
macro: no
comment:
layout: "header, diff"
behavior: default
require_changes: no

40
.gitattributes vendored Normal file
View File

@@ -0,0 +1,40 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
# *.c text
# *.h text
# Declare files that will always have CRLF line endings on checkout.
# Source files
# ============
*.pxd text eol=crlf
*.py text eol=crlf
*.py3 text eol=crlf
*.pyw text eol=crlf
*.pyx text eol=crlf
# Denote all files that are truly binary and should not be modified.
# Binary files
# ============
*.db binary
*.p binary
*.pkl binary
*.pyc binary
*.pyd binary
*.pyo binary
# Note: .db, .p, and .pkl files are associated
# with the python modules ``pickle``, ``dbm.*``,
# ``shelve``, ``marshal``, ``anydbm``, & ``bsddb``
# (among others).
# Denote all files that are truly binary and should not be modified.
# Image files
# ============
*.png binary
*.jpg binary
*.icns binary
*.ico binary

25
.travis.yml Normal file
View File

@@ -0,0 +1,25 @@
language: python
python:
- '2.7'
env:
- TOXENV=pep8
addons:
apt:
packages:
# for wxPython:
- python-wxgtk2.8
- python-wxtools
- wx2.8-doc
- wx2.8-examples
- wx2.8-headers
- wx2.8-i18n
before_install:
- pip install -U tox
install:
- pip install -r requirements.txt
- pip install -r requirements_test.txt
script:
- tox
- py.test --cov=./
after_success:
- bash <(curl -s https://codecov.io/bash)

View File

@@ -124,7 +124,7 @@ def defPaths(customSavePath):
# maintenance script # maintenance script
gameDB = getPyfaPath("eve.db") gameDB = getPyfaPath("eve.db")
## DON'T MODIFY ANYTHING BELOW ## # DON'T MODIFY ANYTHING BELOW!
import eos.config import eos.config
# Caching modifiers, disable all gamedata caching, its unneeded. # Caching modifiers, disable all gamedata caching, its unneeded.

View File

@@ -4,10 +4,12 @@ from os.path import realpath, join, dirname, abspath
debug = False debug = False
gamedataCache = True gamedataCache = True
saveddataCache = True saveddataCache = True
gamedata_version = ""
gamedata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "eve.db")), gamedata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "eve.db")),
sys.getfilesystemencoding()) sys.getfilesystemencoding())
saveddata_connectionstring = 'sqlite:///' + unicode( saveddata_connectionstring = 'sqlite:///' + unicode(
realpath(join(dirname(abspath(__file__)), "..", "saveddata", "saveddata.db")), sys.getfilesystemencoding()) realpath(join(dirname(abspath(__file__)), "..", "saveddata", "saveddata.db")), sys.getfilesystemencoding())
# Autodetect path, only change if the autodetection bugs out. # Autodetect path, only change if the autodetection bugs out.
path = dirname(unicode(__file__, sys.getfilesystemencoding())) path = dirname(unicode(__file__, sys.getfilesystemencoding()))

View File

@@ -39,8 +39,8 @@ items_table = Table("invtypes", gamedata_meta,
Column("iconID", Integer, ForeignKey("icons.iconID")), Column("iconID", Integer, ForeignKey("icons.iconID")),
Column("groupID", Integer, ForeignKey("invgroups.groupID"), index=True)) Column("groupID", Integer, ForeignKey("invgroups.groupID"), index=True))
from .metaGroup import metatypes_table from .metaGroup import metatypes_table # noqa
from .traits import traits_table from .traits import traits_table # noqa
mapper(Item, items_table, mapper(Item, items_table,
properties={"group": relation(Group, backref="items"), properties={"group": relation(Group, backref="items"),

View File

@@ -21,6 +21,9 @@ from sqlalchemy.orm import join, exc
from sqlalchemy.sql import and_, or_, select from sqlalchemy.sql import and_, or_, select
import eos.config import eos.config
# TODO: Unsure which item the code below needs :(
# from eos.gamedata import Item
from eos.gamedata import Attribute
from eos.db import gamedata_session from eos.db import gamedata_session
from eos.db.gamedata.metaGroup import metatypes_table, items_table from eos.db.gamedata.metaGroup import metatypes_table, items_table
from eos.db.util import processEager, processWhere from eos.db.util import processEager, processWhere
@@ -280,9 +283,9 @@ def directAttributeRequest(itemIDs, attrIDs):
if not isinstance(itemID, int): if not isinstance(itemID, int):
raise TypeError("All itemIDs must be integer") raise TypeError("All itemIDs must be integer")
q = select((eos.types.Item.typeID, eos.types.Attribute.attributeID, eos.types.Attribute.value), q = select((Item.typeID, Attribute.attributeID, Attribute.value),
and_(eos.types.Attribute.attributeID.in_(attrIDs), eos.types.Item.typeID.in_(itemIDs)), and_(Attribute.attributeID.in_(attrIDs), Item.typeID.in_(itemIDs)),
from_obj=[join(eos.types.Attribute, eos.types.Item)]) from_obj=[join(Attribute, Item)])
result = gamedata_session.execute(q).fetchall() result = gamedata_session.execute(q).fetchall()
return result return result

View File

@@ -45,7 +45,7 @@ CONVERSIONS = {
8746, # Quantum Co-Processor 8746, # Quantum Co-Processor
8745, # Photonic CPU Enhancer 8745, # Photonic CPU Enhancer
15425, # Naiyon's Modified Co-Processor (never existed but convert 15425, # Naiyon's Modified Co-Processor (never existed but convert
# anyway as some fits may include it) # anyway as some fits may include it)
], ],
8748: [ # Upgraded Co-Processor 8748: [ # Upgraded Co-Processor
8747, # Nanomechanical CPU Enhancer I 8747, # Nanomechanical CPU Enhancer I
@@ -70,7 +70,7 @@ CONVERSIONS = {
16543, # Micro 'Vigor' Core Augmentation 16543, # Micro 'Vigor' Core Augmentation
], ],
8089: [ # Compact Light Missile Launcher 8089: [ # Compact Light Missile Launcher
8093, # Prototype 'Arbalest' Light Missile Launcher 8093, # Prototype 'Arbalest' Light Missile Launcher
], ],
8091: [ # Ample Light Missile Launcher 8091: [ # Ample Light Missile Launcher
7993, # Experimental TE-2100 Light Missile Launcher 7993, # Experimental TE-2100 Light Missile Launcher
@@ -82,6 +82,7 @@ CONVERSIONS = {
] ]
} }
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
# Update fits schema to include target resists attribute # Update fits schema to include target resists attribute
try: try:
@@ -92,6 +93,7 @@ def upgrade(saveddata_engine):
# Convert modules # Convert modules
for replacement_item, list in CONVERSIONS.iteritems(): for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list: for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -6,6 +6,7 @@ Migration 10
import sqlalchemy import sqlalchemy
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
# Update projectedFits schema to include active attribute # Update projectedFits schema to include active attribute
try: try:

View File

@@ -7,7 +7,6 @@ Migration 11
modules with their new replacements modules with their new replacements
""" """
CONVERSIONS = { CONVERSIONS = {
16467: ( # Medium Gremlin Compact Energy Neutralizer 16467: ( # Medium Gremlin Compact Energy Neutralizer
16471, # Medium Unstable Power Fluctuator I 16471, # Medium Unstable Power Fluctuator I
@@ -106,11 +105,12 @@ CONVERSIONS = {
), ),
} }
def upgrade(saveddata_engine):
def upgrade(saveddata_engine):
# Convert modules # Convert modules
for replacement_item, list in CONVERSIONS.iteritems(): for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list: for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -7,7 +7,6 @@ Migration 12
modules with their new replacements modules with their new replacements
""" """
CONVERSIONS = { CONVERSIONS = {
16457: ( # Crosslink Compact Ballistic Control System 16457: ( # Crosslink Compact Ballistic Control System
16459, # Muon Coil Bolt Array I 16459, # Muon Coil Bolt Array I
@@ -330,11 +329,12 @@ CONVERSIONS = {
), ),
} }
def upgrade(saveddata_engine):
def upgrade(saveddata_engine):
# Convert modules # Convert modules
for replacement_item, list in CONVERSIONS.iteritems(): for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list: for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -6,10 +6,11 @@ Migration 13
import sqlalchemy import sqlalchemy
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
# Update fits schema to include implant location attribute # Update fits schema to include implant location attribute
try: try:
saveddata_engine.execute("SELECT implantLocation FROM fits LIMIT 1") saveddata_engine.execute("SELECT implantLocation FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError: except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN implantLocation INTEGER;") saveddata_engine.execute("ALTER TABLE fits ADD COLUMN implantLocation INTEGER;")
saveddata_engine.execute("UPDATE fits SET implantLocation = 0") saveddata_engine.execute("UPDATE fits SET implantLocation = 0")

View File

@@ -6,8 +6,10 @@ Migration 14
import sqlalchemy import sqlalchemy
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
if saveddata_engine.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='fighters'").scalar() == 'fighters': if saveddata_engine.execute(
"SELECT name FROM sqlite_master WHERE type='table' AND name='fighters'").scalar() == 'fighters':
# Fighters table exists # Fighters table exists
try: try:
saveddata_engine.execute("SELECT active FROM fighters LIMIT 1") saveddata_engine.execute("SELECT active FROM fighters LIMIT 1")
@@ -16,4 +18,4 @@ def upgrade(saveddata_engine):
# (they will be recreated) # (they will be recreated)
saveddata_engine.execute("DROP TABLE fighters") saveddata_engine.execute("DROP TABLE fighters")
saveddata_engine.execute("DROP TABLE fightersAbilities") saveddata_engine.execute("DROP TABLE fightersAbilities")

View File

@@ -6,8 +6,8 @@ Migration 15
import sqlalchemy import sqlalchemy
def upgrade(saveddata_engine):
def upgrade(saveddata_engine):
sql = """ sql = """
DELETE FROM modules WHERE ID IN DELETE FROM modules WHERE ID IN
( (

View File

@@ -6,6 +6,7 @@ Migration 16
import sqlalchemy import sqlalchemy
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
# Update fits schema to include notes attribute # Update fits schema to include notes attribute
try: try:

View File

@@ -33,7 +33,8 @@ def upgrade(saveddata_engine):
inserts.append({"boosterID": value, "boostedID": boosted, "active": 1}) inserts.append({"boosterID": value, "boostedID": boosted, "active": 1})
try: try:
saveddata_session.execute(commandFits_table.insert(), {"boosterID": value, "boostedID": boosted, "active": 1}) saveddata_session.execute(commandFits_table.insert(),
except Exception, e: {"boosterID": value, "boostedID": boosted, "active": 1})
except Exception:
pass pass
saveddata_session.commit() saveddata_session.commit()

View File

@@ -4,27 +4,26 @@ Migration 8
- Converts modules from old Warfare Links to Command Modules - Converts modules from old Warfare Links to Command Modules
""" """
CONVERSIONS = { CONVERSIONS = {
42526: ( # Armor Command Burst I 42526: ( # Armor Command Burst I
20069, # Armored Warfare Link - Damage Control I 20069, # Armored Warfare Link - Damage Control I
20409, # Armored Warfare Link - Passive Defense I 20409, # Armored Warfare Link - Passive Defense I
22227, # Armored Warfare Link - Rapid Repair I 22227, # Armored Warfare Link - Rapid Repair I
), ),
43552: ( # Armor Command Burst II 43552: ( # Armor Command Burst II
4264, # Armored Warfare Link - Damage Control II 4264, # Armored Warfare Link - Damage Control II
4266, # Armored Warfare Link - Passive Defense II 4266, # Armored Warfare Link - Passive Defense II
4266, # Armored Warfare Link - Rapid Repair II 4266, # Armored Warfare Link - Rapid Repair II
), ),
42527: ( # Information Command Burst I 42527: ( # Information Command Burst I
11052, # Information Warfare Link - Sensor Integrity I 11052, # Information Warfare Link - Sensor Integrity I
20405, # Information Warfare Link - Recon Operation I 20405, # Information Warfare Link - Recon Operation I
20406, # Information Warfare Link - Electronic Superiority I 20406, # Information Warfare Link - Electronic Superiority I
), ),
43554: ( # Information Command Burst II 43554: ( # Information Command Burst II
4268, # Information Warfare Link - Electronic Superiority II 4268, # Information Warfare Link - Electronic Superiority II
4270, # Information Warfare Link - Recon Operation II 4270, # Information Warfare Link - Recon Operation II
4272, # Information Warfare Link - Sensor Integrity II 4272, # Information Warfare Link - Sensor Integrity II
), ),
42529: ( # Shield Command Burst I 42529: ( # Shield Command Burst I
20124, # Siege Warfare Link - Active Shielding I 20124, # Siege Warfare Link - Active Shielding I
@@ -34,17 +33,17 @@ CONVERSIONS = {
43555: ( # Shield Command Burst II 43555: ( # Shield Command Burst II
4280, # Siege Warfare Link - Active Shielding II 4280, # Siege Warfare Link - Active Shielding II
4282, # Siege Warfare Link - Shield Efficiency II 4282, # Siege Warfare Link - Shield Efficiency II
4284 # Siege Warfare Link - Shield Harmonizing II 4284 # Siege Warfare Link - Shield Harmonizing II
), ),
42530: ( # Skirmish Command Burst I 42530: ( # Skirmish Command Burst I
11017, # Skirmish Warfare Link - Interdiction Maneuvers I 11017, # Skirmish Warfare Link - Interdiction Maneuvers I
20070, # Skirmish Warfare Link - Evasive Maneuvers I 20070, # Skirmish Warfare Link - Evasive Maneuvers I
20408, # Skirmish Warfare Link - Rapid Deployment I 20408, # Skirmish Warfare Link - Rapid Deployment I
), ),
43556: ( # Skirmish Command Burst II 43556: ( # Skirmish Command Burst II
4286, # Skirmish Warfare Link - Evasive Maneuvers II 4286, # Skirmish Warfare Link - Evasive Maneuvers II
4288, # Skirmish Warfare Link - Interdiction Maneuvers II 4288, # Skirmish Warfare Link - Interdiction Maneuvers II
4290 # Skirmish Warfare Link - Rapid Deployment II 4290 # Skirmish Warfare Link - Rapid Deployment II
), ),
42528: ( # Mining Foreman Burst I 42528: ( # Mining Foreman Burst I
22553, # Mining Foreman Link - Harvester Capacitor Efficiency I 22553, # Mining Foreman Link - Harvester Capacitor Efficiency I
@@ -54,15 +53,16 @@ CONVERSIONS = {
43551: ( # Mining Foreman Burst II 43551: ( # Mining Foreman Burst II
4274, # Mining Foreman Link - Harvester Capacitor Efficiency II 4274, # Mining Foreman Link - Harvester Capacitor Efficiency II
4276, # Mining Foreman Link - Laser Optimization II 4276, # Mining Foreman Link - Laser Optimization II
4278 # Mining Foreman Link - Mining Laser Field Enhancement II 4278 # Mining Foreman Link - Mining Laser Field Enhancement II
), ),
} }
def upgrade(saveddata_engine):
def upgrade(saveddata_engine):
# Convert modules # Convert modules
for replacement_item, list in CONVERSIONS.iteritems(): for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list: for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -11,10 +11,10 @@ def upgrade(saveddata_engine):
from eos.db import saveddata_session from eos.db import saveddata_session
sql = """ sql = """
DELETE FROM commandFits DELETE FROM commandFits
WHERE boosterID NOT IN (select ID from fits) WHERE boosterID NOT IN (select ID from fits)
OR boostedID NOT IN (select ID from fits) OR boostedID NOT IN (select ID from fits)
""" """
saveddata_session.execute(sql) saveddata_session.execute(sql)
saveddata_session.commit() saveddata_session.commit()

View File

@@ -6,6 +6,7 @@ Migration 2
import sqlalchemy import sqlalchemy
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
# Update characters schema to include default chars # Update characters schema to include default chars
try: try:

View File

@@ -6,6 +6,7 @@ Migration 3
import sqlalchemy import sqlalchemy
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
try: try:
saveddata_engine.execute("SELECT modeID FROM fits LIMIT 1") saveddata_engine.execute("SELECT modeID FROM fits LIMIT 1")

View File

@@ -10,7 +10,6 @@ Migration 4
and output of itemDiff.py and output of itemDiff.py
""" """
CONVERSIONS = { CONVERSIONS = {
506: ( # 'Basic' Capacitor Power Relay 506: ( # 'Basic' Capacitor Power Relay
8205, # Alpha Reactor Control: Capacitor Power Relay 8205, # Alpha Reactor Control: Capacitor Power Relay
@@ -131,11 +130,12 @@ CONVERSIONS = {
), ),
} }
def upgrade(saveddata_engine):
def upgrade(saveddata_engine):
# Convert modules # Convert modules
for replacement_item, list in CONVERSIONS.iteritems(): for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list: for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -4,5 +4,6 @@ Migration 5
Simply deletes damage profiles with a blank name. See GH issue #256 Simply deletes damage profiles with a blank name. See GH issue #256
""" """
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ?', ("",)) saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ?', ("",))

View File

@@ -4,6 +4,8 @@ Migration 6
Overwrites damage profile 0 to reset bad uniform values (bad values set with bug) Overwrites damage profile 0 to reset bad uniform values (bad values set with bug)
""" """
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ? OR ID LIKE ?', ("Uniform", "1")) saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ? OR ID LIKE ?', ("Uniform", "1"))
saveddata_engine.execute('INSERT INTO damagePatterns VALUES (?, ?, ?, ?, ?, ?, ?)', (1, "Uniform", 25, 25, 25, 25, None)) saveddata_engine.execute('INSERT INTO damagePatterns VALUES (?, ?, ?, ?, ?, ?, ?)',
(1, "Uniform", 25, 25, 25, 25, None))

View File

@@ -8,17 +8,16 @@ Migration 7
Pyfa. Pyfa.
""" """
CONVERSIONS = { CONVERSIONS = {
640: ( # Scorpion 640: ( # Scorpion
4005, # Scorpion Ishukone Watch 4005, # Scorpion Ishukone Watch
) )
} }
def upgrade(saveddata_engine):
def upgrade(saveddata_engine):
# Convert ships # Convert ships
for replacement_item, list in CONVERSIONS.iteritems(): for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list: for retired_item in list:
saveddata_engine.execute('UPDATE "fits" SET "shipID" = ? WHERE "shipID" = ?', (replacement_item, retired_item)) saveddata_engine.execute('UPDATE "fits" SET "shipID" = ? WHERE "shipID" = ?',
(replacement_item, retired_item))

View File

@@ -7,7 +7,6 @@ Migration 8
modules with their new replacements modules with their new replacements
""" """
CONVERSIONS = { CONVERSIONS = {
8529: ( # Large F-S9 Regolith Compact Shield Extender 8529: ( # Large F-S9 Regolith Compact Shield Extender
8409, # Large Subordinate Screen Stabilizer I 8409, # Large Subordinate Screen Stabilizer I
@@ -71,15 +70,16 @@ CONVERSIONS = {
11321, # 800mm Reinforced Nanofiber Plates I 11321, # 800mm Reinforced Nanofiber Plates I
), ),
11317: ( # 800mm Rolled Tungsten Compact Plates 11317: ( # 800mm Rolled Tungsten Compact Plates
11315, # 800mm Reinforced Titanium Plates I 11315, # 800mm Reinforced Titanium Plates I
), ),
} }
def upgrade(saveddata_engine):
def upgrade(saveddata_engine):
# Convert modules # Convert modules
for replacement_item, list in CONVERSIONS.iteritems(): for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list: for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -16,8 +16,10 @@ CREATE TABLE boostersTemp (
) )
""" """
def upgrade(saveddata_engine): def upgrade(saveddata_engine):
saveddata_engine.execute(tmpTable) saveddata_engine.execute(tmpTable)
saveddata_engine.execute("INSERT INTO boostersTemp (ID, itemID, fitID, active) SELECT ID, itemID, fitID, active FROM boosters") saveddata_engine.execute(
"INSERT INTO boostersTemp (ID, itemID, fitID, active) SELECT ID, itemID, fitID, active FROM boosters")
saveddata_engine.execute("DROP TABLE boosters") saveddata_engine.execute("DROP TABLE boosters")
saveddata_engine.execute("ALTER TABLE boostersTemp RENAME TO boosters") saveddata_engine.execute("ALTER TABLE boostersTemp RENAME TO boosters")

View File

@@ -18,7 +18,7 @@
# =============================================================================== # ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean
from sqlalchemy.orm import * from sqlalchemy.orm import mapper, relation
from eos.db import saveddata_meta from eos.db import saveddata_meta
from eos.types import Fighter, Fit from eos.types import Fighter, Fit

View File

@@ -17,20 +17,22 @@
# along with eos. If not, see <http://www.gnu.org/licenses/>. # along with eos. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================== # ===============================================================================
from sqlalchemy import *
from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import *
from sqlalchemy.orm.collections import attribute_mapped_collection from sqlalchemy.orm.collections import attribute_mapped_collection
from sqlalchemy.sql import and_ from sqlalchemy.sql import and_
from sqlalchemy.orm import relation, reconstructor, mapper, relationship
from sqlalchemy import ForeignKey, Column, Integer, String, Table, Boolean
from eos.db import saveddata_meta from eos.db import saveddata_meta
from eos.db import saveddata_session
from eos.db.saveddata.cargo import cargo_table from eos.db.saveddata.cargo import cargo_table
from eos.db.saveddata.drone import drones_table from eos.db.saveddata.drone import drones_table
from eos.db.saveddata.fighter import fighters_table from eos.db.saveddata.fighter import fighters_table
from eos.db.saveddata.implant import fitImplants_table from eos.db.saveddata.implant import fitImplants_table
from eos.db.saveddata.module import modules_table from eos.db.saveddata.module import modules_table
from eos.effectHandlerHelpers import * from eos.effectHandlerHelpers import HandledModuleList, HandledImplantBoosterList, HandledProjectedModList, \
from eos.types import Fit, Module, User, Booster, Drone, Fighter, Cargo, Implant, Character, DamagePattern, \ HandledDroneCargoList, HandledProjectedDroneList
from eos.types import Fit as es_Fit, Module, User, Booster, Drone, Fighter, Cargo, Implant, Character, DamagePattern, \
TargetResists, ImplantLocation TargetResists, ImplantLocation
fits_table = Table("fits", saveddata_meta, fits_table = Table("fits", saveddata_meta,
@@ -45,7 +47,7 @@ fits_table = Table("fits", saveddata_meta,
Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True), Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True),
Column("modeID", Integer, nullable=True), Column("modeID", Integer, nullable=True),
Column("implantLocation", Integer, nullable=False, default=ImplantLocation.FIT), Column("implantLocation", Integer, nullable=False, default=ImplantLocation.FIT),
Column("notes", String, nullable = True), Column("notes", String, nullable=True),
) )
projectedFits_table = Table("projectedFits", saveddata_meta, projectedFits_table = Table("projectedFits", saveddata_meta,
@@ -61,6 +63,7 @@ commandFits_table = Table("commandFits", saveddata_meta,
Column("active", Boolean, nullable=False, default=1) Column("active", Boolean, nullable=False, default=1)
) )
class ProjectedFit(object): class ProjectedFit(object):
def __init__(self, sourceID, source_fit, amount=1, active=True): def __init__(self, sourceID, source_fit, amount=1, active=True):
self.sourceID = sourceID self.sourceID = sourceID
@@ -72,9 +75,9 @@ class ProjectedFit(object):
def init(self): def init(self):
if self.source_fit.isInvalid: if self.source_fit.isInvalid:
# Very rare for this to happen, but be prepared for it # Very rare for this to happen, but be prepared for it
eos.db.saveddata_session.delete(self.source_fit) saveddata_session.delete(self.source_fit)
eos.db.saveddata_session.flush() saveddata_session.flush()
eos.db.saveddata_session.refresh(self.victim_fit) saveddata_session.refresh(self.victim_fit)
# We have a series of setters and getters here just in case someone # We have a series of setters and getters here just in case someone
# downgrades and screws up the table with NULL values # downgrades and screws up the table with NULL values
@@ -91,6 +94,7 @@ class ProjectedFit(object):
self.sourceID, self.victimID, self.amount, self.active, hex(id(self)) self.sourceID, self.victimID, self.amount, self.active, hex(id(self))
) )
class CommandFit(object): class CommandFit(object):
def __init__(self, boosterID, booster_fit, active=True): def __init__(self, boosterID, booster_fit, active=True):
self.boosterID = boosterID self.boosterID = boosterID
@@ -101,125 +105,126 @@ class CommandFit(object):
def init(self): def init(self):
if self.booster_fit.isInvalid: if self.booster_fit.isInvalid:
# Very rare for this to happen, but be prepared for it # Very rare for this to happen, but be prepared for it
eos.db.saveddata_session.delete(self.booster_fit) saveddata_session.delete(self.booster_fit)
eos.db.saveddata_session.flush() saveddata_session.flush()
eos.db.saveddata_session.refresh(self.boosted_fit) saveddata_session.refresh(self.boosted_fit)
def __repr__(self): def __repr__(self):
return "CommandFit(boosterID={}, boostedID={}, active={}) at {}".format( return "CommandFit(boosterID={}, boostedID={}, active={}) at {}".format(
self.boosterID, self.boostedID, self.active, hex(id(self)) self.boosterID, self.boostedID, self.active, hex(id(self))
) )
Fit._Fit__projectedFits = association_proxy(
es_Fit._Fit__projectedFits = association_proxy(
"victimOf", # look at the victimOf association... "victimOf", # look at the victimOf association...
"source_fit", # .. and return the source fits "source_fit", # .. and return the source fits
creator=lambda sourceID, source_fit: ProjectedFit(sourceID, source_fit) creator=lambda sourceID, source_fit: ProjectedFit(sourceID, source_fit)
) )
Fit._Fit__commandFits = association_proxy( es_Fit._Fit__commandFits = association_proxy(
"boostedOf", # look at the boostedOf association... "boostedOf", # look at the boostedOf association...
"booster_fit", # .. and return the booster fit "booster_fit", # .. and return the booster fit
creator=lambda boosterID, booster_fit: CommandFit(boosterID, booster_fit) creator=lambda boosterID, booster_fit: CommandFit(boosterID, booster_fit)
) )
mapper(Fit, fits_table, mapper(es_Fit, fits_table,
properties={ properties={
"_Fit__modules": relation( "_Fit__modules": relation(
Module, Module,
collection_class=HandledModuleList, collection_class=HandledModuleList,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False), primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False), # noqa
order_by=modules_table.c.position, order_by=modules_table.c.position,
cascade='all, delete, delete-orphan'), cascade='all, delete, delete-orphan'),
"_Fit__projectedModules": relation( "_Fit__projectedModules": relation(
Module, Module,
collection_class=HandledProjectedModList, collection_class=HandledProjectedModList,
cascade='all, delete, delete-orphan', cascade='all, delete, delete-orphan',
single_parent=True, single_parent=True,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)), primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)), # noqa
"owner": relation( "owner": relation(
User, User,
backref="fits"), backref="fits"),
"itemID": fits_table.c.shipID, "itemID": fits_table.c.shipID,
"shipID": fits_table.c.shipID, "shipID": fits_table.c.shipID,
"_Fit__boosters": relation( "_Fit__boosters": relation(
Booster, Booster,
collection_class=HandledImplantBoosterList, collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan', cascade='all, delete, delete-orphan',
single_parent=True), single_parent=True),
"_Fit__drones": relation( "_Fit__drones": relation(
Drone, Drone,
collection_class=HandledDroneCargoList, collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan', cascade='all, delete, delete-orphan',
single_parent=True, single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)), primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)), # noqa
"_Fit__fighters": relation( "_Fit__fighters": relation(
Fighter, Fighter,
collection_class=HandledDroneCargoList, collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan', cascade='all, delete, delete-orphan',
single_parent=True, single_parent=True,
primaryjoin=and_(fighters_table.c.fitID == fits_table.c.ID, fighters_table.c.projected == False)), primaryjoin=and_(fighters_table.c.fitID == fits_table.c.ID, fighters_table.c.projected == False)), # noqa
"_Fit__cargo": relation( "_Fit__cargo": relation(
Cargo, Cargo,
collection_class=HandledDroneCargoList, collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan', cascade='all, delete, delete-orphan',
single_parent=True, single_parent=True,
primaryjoin=and_(cargo_table.c.fitID == fits_table.c.ID)), primaryjoin=and_(cargo_table.c.fitID == fits_table.c.ID)),
"_Fit__projectedDrones": relation( "_Fit__projectedDrones": relation(
Drone, Drone,
collection_class=HandledProjectedDroneList, collection_class=HandledProjectedDroneList,
cascade='all, delete, delete-orphan', cascade='all, delete, delete-orphan',
single_parent=True, single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)), primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)), # noqa
"_Fit__projectedFighters": relation( "_Fit__projectedFighters": relation(
Fighter, Fighter,
collection_class=HandledProjectedDroneList, collection_class=HandledProjectedDroneList,
cascade='all, delete, delete-orphan', cascade='all, delete, delete-orphan',
single_parent=True, single_parent=True,
primaryjoin=and_(fighters_table.c.fitID == fits_table.c.ID, fighters_table.c.projected == True)), primaryjoin=and_(fighters_table.c.fitID == fits_table.c.ID, fighters_table.c.projected == True)), # noqa
"_Fit__implants": relation( "_Fit__implants": relation(
Implant, Implant,
collection_class=HandledImplantBoosterList, collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan', cascade='all, delete, delete-orphan',
backref='fit', backref='fit',
single_parent=True, single_parent=True,
primaryjoin=fitImplants_table.c.fitID == fits_table.c.ID, primaryjoin=fitImplants_table.c.fitID == fits_table.c.ID,
secondaryjoin=fitImplants_table.c.implantID == Implant.ID, secondaryjoin=fitImplants_table.c.implantID == Implant.ID,
secondary=fitImplants_table), secondary=fitImplants_table),
"_Fit__character": relation( "_Fit__character": relation(
Character, Character,
backref="fits"), backref="fits"),
"_Fit__damagePattern": relation(DamagePattern), "_Fit__damagePattern": relation(DamagePattern),
"_Fit__targetResists": relation(TargetResists), "_Fit__targetResists": relation(TargetResists),
"projectedOnto": relationship( "projectedOnto": relationship(
ProjectedFit, ProjectedFit,
primaryjoin=projectedFits_table.c.sourceID == fits_table.c.ID, primaryjoin=projectedFits_table.c.sourceID == fits_table.c.ID,
backref='source_fit', backref='source_fit',
collection_class=attribute_mapped_collection('victimID'), collection_class=attribute_mapped_collection('victimID'),
cascade='all, delete, delete-orphan'), cascade='all, delete, delete-orphan'),
"victimOf": relationship( "victimOf": relationship(
ProjectedFit, ProjectedFit,
primaryjoin=fits_table.c.ID == projectedFits_table.c.victimID, primaryjoin=fits_table.c.ID == projectedFits_table.c.victimID,
backref='victim_fit', backref='victim_fit',
collection_class=attribute_mapped_collection('sourceID'), collection_class=attribute_mapped_collection('sourceID'),
cascade='all, delete, delete-orphan'), cascade='all, delete, delete-orphan'),
"boostedOnto": relationship( "boostedOnto": relationship(
CommandFit, CommandFit,
primaryjoin=commandFits_table.c.boosterID == fits_table.c.ID, primaryjoin=commandFits_table.c.boosterID == fits_table.c.ID,
backref='booster_fit', backref='booster_fit',
collection_class=attribute_mapped_collection('boostedID'), collection_class=attribute_mapped_collection('boostedID'),
cascade='all, delete, delete-orphan'), cascade='all, delete, delete-orphan'),
"boostedOf": relationship( "boostedOf": relationship(
CommandFit, CommandFit,
primaryjoin=fits_table.c.ID == commandFits_table.c.boostedID, primaryjoin=fits_table.c.ID == commandFits_table.c.boostedID,
backref='boosted_fit', backref='boosted_fit',
collection_class=attribute_mapped_collection('boosterID'), collection_class=attribute_mapped_collection('boosterID'),
cascade='all, delete, delete-orphan'), cascade='all, delete, delete-orphan'),
} }
) )
mapper(ProjectedFit, projectedFits_table, mapper(ProjectedFit, projectedFits_table,
properties={ properties={
"_ProjectedFit__amount": projectedFits_table.c.amount, "_ProjectedFit__amount": projectedFits_table.c.amount,
} }
) )
mapper(CommandFit, commandFits_table) mapper(CommandFit, commandFits_table)

View File

@@ -18,7 +18,8 @@
# =============================================================================== # ===============================================================================
import eos.db import eos.db
import eos.types from eos.saveddata.damagePattern import DamagePattern as es_DamagePattern
from eos.saveddata.targetResists import TargetResists as es_TargetResists
class ImportError(Exception): class ImportError(Exception):
@@ -118,7 +119,7 @@ class DefaultDatabaseValues():
name, em, therm, kin, exp = damageProfileRow name, em, therm, kin, exp = damageProfileRow
damageProfile = eos.db.getDamagePattern(name) damageProfile = eos.db.getDamagePattern(name)
if damageProfile is None: if damageProfile is None:
damageProfile = eos.types.DamagePattern(em, therm, kin, exp) damageProfile = es_DamagePattern(em, therm, kin, exp)
damageProfile.name = name damageProfile.name = name
eos.db.save(damageProfile) eos.db.save(damageProfile)
@@ -180,7 +181,7 @@ class DefaultDatabaseValues():
name, em, therm, kin, exp = targetResistProfileRow name, em, therm, kin, exp = targetResistProfileRow
resistsProfile = eos.db.eos.db.getTargetResists(name) resistsProfile = eos.db.eos.db.getTargetResists(name)
if resistsProfile is None: if resistsProfile is None:
resistsProfile = eos.types.TargetResists(em, therm, kin, exp) resistsProfile = es_TargetResists(em, therm, kin, exp)
resistsProfile.name = name resistsProfile.name = name
eos.db.save(resistsProfile) eos.db.save(resistsProfile)
@@ -192,6 +193,6 @@ class DefaultDatabaseValues():
name, em, therm, kin, exp = damageProfileRow name, em, therm, kin, exp = damageProfileRow
damageProfile = eos.db.getDamagePattern(name) damageProfile = eos.db.getDamagePattern(name)
if damageProfile is None: if damageProfile is None:
damageProfile = eos.types.DamagePattern(em, therm, kin, exp) damageProfile = es_DamagePattern(em, therm, kin, exp)
damageProfile.name = name damageProfile.name = name
eos.db.save(damageProfile) eos.db.save(damageProfile)

View File

@@ -17,6 +17,10 @@
# along with eos. If not, see <http://www.gnu.org/licenses/>. # along with eos. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================== # ===============================================================================
from sqlalchemy.sql import and_
from eos.db import saveddata_session, sd_lock
from eos.db.saveddata.fit import projectedFits_table
from eos.db.util import processEager, processWhere from eos.db.util import processEager, processWhere
from eos.db import saveddata_session, sd_lock from eos.db import saveddata_session, sd_lock
@@ -32,7 +36,6 @@ if configVal is True:
itemCache = {} itemCache = {}
queryCache = {} queryCache = {}
def cachedQuery(type, amount, *keywords): def cachedQuery(type, amount, *keywords):
itemCache[type] = localItemCache = weakref.WeakValueDictionary() itemCache[type] = localItemCache = weakref.WeakValueDictionary()
queryCache[type] = typeQueryCache = {} queryCache[type] = typeQueryCache = {}
@@ -91,7 +94,6 @@ if configVal is True:
return deco return deco
def removeCachedEntry(type, ID): def removeCachedEntry(type, ID):
if type not in queryCache: if type not in queryCache:
return return
@@ -121,7 +123,6 @@ else:
return deco return deco
def removeCachedEntry(*args, **kwargs): def removeCachedEntry(*args, **kwargs):
return return
@@ -210,6 +211,7 @@ def getFit(lookfor, eager=None):
return fit return fit
def getFitsWithShip(shipID, ownerID=None, where=None, eager=None): def getFitsWithShip(shipID, ownerID=None, where=None, eager=None):
""" """
Get all the fits using a certain ship. Get all the fits using a certain ship.
@@ -293,6 +295,7 @@ def getFitList(eager=None):
return fits return fits
@cachedQuery(Price, 1, "typeID") @cachedQuery(Price, 1, "typeID")
def getPrice(typeID): def getPrice(typeID):
if isinstance(typeID, int): if isinstance(typeID, int):
@@ -416,6 +419,7 @@ def searchFits(nameLike, where=None, eager=None):
return fits return fits
def getProjectedFits(fitID): def getProjectedFits(fitID):
if isinstance(fitID, int): if isinstance(fitID, int):
with sd_lock: with sd_lock:

View File

@@ -21,7 +21,6 @@
import logging import logging
import eos.db import eos.db
import eos.types
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -8,13 +8,15 @@ logger = logging.getLogger(__name__)
runTime = "late" runTime = "late"
type = "active" type = "active"
def handler(fit, module, context): def handler(fit, module, context):
damagePattern = fit.damagePattern damagePattern = fit.damagePattern
# Skip if there is no damage pattern. Example: projected ships or fleet boosters # Skip if there is no damage pattern. Example: projected ships or fleet boosters
if damagePattern: if damagePattern:
#logger.debug("Damage Pattern: %f/%f/%f/%f", damagePattern.emAmount, damagePattern.thermalAmount, damagePattern.kineticAmount, damagePattern.explosiveAmount) # logger.debug("Damage Pattern: %f/%f/%f/%f", damagePattern.emAmount, damagePattern.thermalAmount, damagePattern.kineticAmount, damagePattern.explosiveAmount)
#logger.debug("Original Armor Resists: %f/%f/%f/%f", fit.ship.getModifiedItemAttr('armorEmDamageResonance'), fit.ship.getModifiedItemAttr('armorThermalDamageResonance'), fit.ship.getModifiedItemAttr('armorKineticDamageResonance'), fit.ship.getModifiedItemAttr('armorExplosiveDamageResonance')) # logger.debug("Original Armor Resists: %f/%f/%f/%f", fit.ship.getModifiedItemAttr('armorEmDamageResonance'), fit.ship.getModifiedItemAttr('armorThermalDamageResonance'), fit.ship.getModifiedItemAttr('armorKineticDamageResonance'), fit.ship.getModifiedItemAttr('armorExplosiveDamageResonance'))
# Populate a tuple with the damage profile modified by current armor resists. # Populate a tuple with the damage profile modified by current armor resists.
baseDamageTaken = ( baseDamageTaken = (
@@ -23,35 +25,36 @@ def handler(fit, module, context):
damagePattern.kineticAmount * fit.ship.getModifiedItemAttr('armorKineticDamageResonance'), damagePattern.kineticAmount * fit.ship.getModifiedItemAttr('armorKineticDamageResonance'),
damagePattern.explosiveAmount * fit.ship.getModifiedItemAttr('armorExplosiveDamageResonance'), damagePattern.explosiveAmount * fit.ship.getModifiedItemAttr('armorExplosiveDamageResonance'),
) )
#logger.debug("Damage Adjusted for Armor Resists: %f/%f/%f/%f", baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3]) # logger.debug("Damage Adjusted for Armor Resists: %f/%f/%f/%f", baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3])
resistanceShiftAmount = module.getModifiedItemAttr('resistanceShiftAmount') / 100 # The attribute is in percent and we want a fraction resistanceShiftAmount = module.getModifiedItemAttr(
'resistanceShiftAmount') / 100 # The attribute is in percent and we want a fraction
RAHResistance = [ RAHResistance = [
module.getModifiedItemAttr('armorEmDamageResonance'), module.getModifiedItemAttr('armorEmDamageResonance'),
module.getModifiedItemAttr('armorThermalDamageResonance'), module.getModifiedItemAttr('armorThermalDamageResonance'),
module.getModifiedItemAttr('armorKineticDamageResonance'), module.getModifiedItemAttr('armorKineticDamageResonance'),
module.getModifiedItemAttr('armorExplosiveDamageResonance'), module.getModifiedItemAttr('armorExplosiveDamageResonance'),
] ]
# Simulate RAH cycles until the RAH either stops changing or enters a loop. # Simulate RAH cycles until the RAH either stops changing or enters a loop.
# The number of iterations is limited to prevent an infinite loop if something goes wrong. # The number of iterations is limited to prevent an infinite loop if something goes wrong.
cycleList = [] cycleList = []
loopStart = -20 loopStart = -20
for num in range(50): for num in range(50):
#logger.debug("Starting cycle %d.", num) # logger.debug("Starting cycle %d.", num)
# The strange order is to emulate the ingame sorting when different types have taken the same amount of damage. # The strange order is to emulate the ingame sorting when different types have taken the same amount of damage.
# This doesn't take into account stacking penalties. In a few cases fitting a Damage Control causes an inaccurate result. # This doesn't take into account stacking penalties. In a few cases fitting a Damage Control causes an inaccurate result.
damagePattern_tuples = [ damagePattern_tuples = [
(0, baseDamageTaken[0] * RAHResistance[0], RAHResistance[0]), (0, baseDamageTaken[0] * RAHResistance[0], RAHResistance[0]),
(3, baseDamageTaken[3] * RAHResistance[3], RAHResistance[3]), (3, baseDamageTaken[3] * RAHResistance[3], RAHResistance[3]),
(2, baseDamageTaken[2] * RAHResistance[2], RAHResistance[2]), (2, baseDamageTaken[2] * RAHResistance[2], RAHResistance[2]),
(1, baseDamageTaken[1] * RAHResistance[1], RAHResistance[1]), (1, baseDamageTaken[1] * RAHResistance[1], RAHResistance[1]),
] ]
#logger.debug("Damage taken this cycle: %f/%f/%f/%f", damagePattern_tuples[0][1], damagePattern_tuples[3][1], damagePattern_tuples[2][1], damagePattern_tuples[1][1]) # logger.debug("Damage taken this cycle: %f/%f/%f/%f", damagePattern_tuples[0][1], damagePattern_tuples[3][1], damagePattern_tuples[2][1], damagePattern_tuples[1][1])
# Sort the tuple to drop the highest damage value to the bottom # Sort the tuple to drop the highest damage value to the bottom
sortedDamagePattern_tuples = sorted(damagePattern_tuples, key=lambda damagePattern: damagePattern[1]) sortedDamagePattern_tuples = sorted(damagePattern_tuples, key=lambda damagePattern: damagePattern[1])
if sortedDamagePattern_tuples[2][1] == 0: if sortedDamagePattern_tuples[2][1] == 0:
# One damage type: the top damage type takes from the other three # One damage type: the top damage type takes from the other three
# Since the resistances not taking damage will end up going to the type taking damage we just do the whole thing at once. # Since the resistances not taking damage will end up going to the type taking damage we just do the whole thing at once.
@@ -72,41 +75,47 @@ def handler(fit, module, context):
change1 = min(resistanceShiftAmount, 1 - sortedDamagePattern_tuples[1][2]) change1 = min(resistanceShiftAmount, 1 - sortedDamagePattern_tuples[1][2])
change2 = -(change0 + change1) / 2 change2 = -(change0 + change1) / 2
change3 = -(change0 + change1) / 2 change3 = -(change0 + change1) / 2
RAHResistance[sortedDamagePattern_tuples[0][0]] = sortedDamagePattern_tuples[0][2] + change0 RAHResistance[sortedDamagePattern_tuples[0][0]] = sortedDamagePattern_tuples[0][2] + change0
RAHResistance[sortedDamagePattern_tuples[1][0]] = sortedDamagePattern_tuples[1][2] + change1 RAHResistance[sortedDamagePattern_tuples[1][0]] = sortedDamagePattern_tuples[1][2] + change1
RAHResistance[sortedDamagePattern_tuples[2][0]] = sortedDamagePattern_tuples[2][2] + change2 RAHResistance[sortedDamagePattern_tuples[2][0]] = sortedDamagePattern_tuples[2][2] + change2
RAHResistance[sortedDamagePattern_tuples[3][0]] = sortedDamagePattern_tuples[3][2] + change3 RAHResistance[sortedDamagePattern_tuples[3][0]] = sortedDamagePattern_tuples[3][2] + change3
#logger.debug("Resistances shifted to %f/%f/%f/%f", RAHResistance[0], RAHResistance[1], RAHResistance[2], RAHResistance[3]) # logger.debug("Resistances shifted to %f/%f/%f/%f", RAHResistance[0], RAHResistance[1], RAHResistance[2], RAHResistance[3])
# See if the current RAH profile has been encountered before, indicating a loop. # See if the current RAH profile has been encountered before, indicating a loop.
for i, val in enumerate(cycleList): for i, val in enumerate(cycleList):
tolerance = 1e-06 tolerance = 1e-06
if abs(RAHResistance[0] - val[0]) <= tolerance and abs(RAHResistance[1] - val[1]) <= tolerance and abs(RAHResistance[2] - val[2]) <= tolerance and abs(RAHResistance[3] - val[3]) <= tolerance: if abs(RAHResistance[0] - val[0]) <= tolerance and \
abs(RAHResistance[1] - val[1]) <= tolerance and \
abs(RAHResistance[2] - val[2]) <= tolerance and \
abs(RAHResistance[3] - val[3]) <= tolerance:
loopStart = i loopStart = i
#logger.debug("Loop found: %d-%d", loopStart, num) # logger.debug("Loop found: %d-%d", loopStart, num)
break break
if loopStart >= 0: break if loopStart >= 0:
break
cycleList.append(list(RAHResistance)) cycleList.append(list(RAHResistance))
if loopStart < 0: if loopStart < 0:
logger.error("Reactive Armor Hardener failed to find equilibrium. Damage profile after armor: %f/%f/%f/%f", baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3]) logger.error("Reactive Armor Hardener failed to find equilibrium. Damage profile after armor: %f/%f/%f/%f",
baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3])
# Average the profiles in the RAH loop, or the last 20 if it didn't find a loop.
# Average the profiles in the RAH loop, or the last 20 if it didn't find a loop.
loopCycles = cycleList[loopStart:] loopCycles = cycleList[loopStart:]
numCycles = len(loopCycles) numCycles = len(loopCycles)
average = [0, 0, 0, 0] average = [0, 0, 0, 0]
for cycle in loopCycles: for cycle in loopCycles:
for i in range(4): for i in range(4):
average[i] += cycle[i] average[i] += cycle[i]
for i in range(4): for i in range(4):
average[i] = round(average[i] / numCycles, 3) average[i] = round(average[i] / numCycles, 3)
# Set the new resistances # Set the new resistances
#logger.debug("Setting new resist profile: %f/%f/%f/%f", average[0], average[1], average[2],average[3]) # logger.debug("Setting new resist profile: %f/%f/%f/%f", average[0], average[1], average[2],average[3])
for i, attr in enumerate(('armorEmDamageResonance', 'armorThermalDamageResonance', 'armorKineticDamageResonance', 'armorExplosiveDamageResonance')): for i, attr in enumerate((
'armorEmDamageResonance', 'armorThermalDamageResonance', 'armorKineticDamageResonance',
'armorExplosiveDamageResonance')):
module.increaseItemAttr(attr, average[i] - module.getModifiedItemAttr(attr)) module.increaseItemAttr(attr, average[i] - module.getModifiedItemAttr(attr))
fit.ship.multiplyItemAttr(attr, average[i], stackingPenalties=True, penaltyGroup="preMul") fit.ship.multiplyItemAttr(attr, average[i], stackingPenalties=True, penaltyGroup="preMul")

View File

@@ -8,7 +8,7 @@ type = "passive"
def handler(fit, implant, context): def handler(fit, implant, context):
fit.appliedImplants.filteredItemMultiply( fit.appliedImplants.filteredItemMultiply(
lambda lambda implant: "signatureRadiusBonus" in implant.itemModifiedAttributes and
implant: "signatureRadiusBonus" in implant.itemModifiedAttributes and "implantSetAngel" in implant.itemModifiedAttributes, "implantSetAngel" in implant.itemModifiedAttributes,
"signatureRadiusBonus", "signatureRadiusBonus",
implant.getModifiedItemAttr("implantSetAngel")) implant.getModifiedItemAttr("implantSetAngel"))

View File

@@ -3,6 +3,9 @@
# Used by: # Used by:
# Skill: Armored Command # Skill: Armored Command
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "buffDuration", src.getModifiedItemAttr("durationBonus") * lvl) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "buffDuration",
src.getModifiedItemAttr("durationBonus") * lvl)

View File

@@ -5,9 +5,16 @@
# Implant: Federation Navy Command Mindlink # Implant: Federation Navy Command Mindlink
# Implant: Imperial Navy Command Mindlink # Implant: Imperial Navy Command Mindlink
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff2Multiplier", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff2Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff1Multiplier", src.getModifiedItemAttr("mindlinkBonus")) src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff4Multiplier", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff1Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff3Multiplier", src.getModifiedItemAttr("mindlinkBonus")) src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "buffDuration", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff4Multiplier",
src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff3Multiplier",
src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "buffDuration",
src.getModifiedItemAttr("mindlinkBonus"))

View File

@@ -3,9 +3,15 @@
# Used by: # Used by:
# Skill: Armored Command Specialist # Skill: Armored Command Specialist
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff1Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff1Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff2Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff4Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff2Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff3Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff4Multiplier",
src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff3Multiplier",
src.getModifiedItemAttr("commandStrengthBonus") * lvl)

View File

@@ -7,5 +7,7 @@ type = "passive"
def handler(fit, ship, context): def handler(fit, ship, context):
for sensorType in ("Gravimetric", "Ladar", "Magnetometric", "Radar"): for sensorType in ("Gravimetric", "Ladar", "Magnetometric", "Radar"):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Electronic Warfare"), "scan{0}StrengthBonus".format(sensorType), fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Electronic Warfare"),
ship.getModifiedItemAttr("shipBonusCB"), stackingPenalties=True, skill="Caldari Battleship") "scan{0}StrengthBonus".format(sensorType),
ship.getModifiedItemAttr("shipBonusCB"), stackingPenalties=True,
skill="Caldari Battleship")

View File

@@ -5,6 +5,8 @@
# Skill: Leadership # Skill: Leadership
# Skill: Wing Command # Skill: Wing Command
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Leadership"), fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Leadership"),
"maxRange", "maxRange",

View File

@@ -11,5 +11,8 @@
# Ship: Orca # Ship: Orca
# Ship: Rorqual # Ship: Rorqual
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Leadership"), "maxRange", src.getModifiedItemAttr("roleBonusCommandBurstAoERange")) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Leadership"), "maxRange",
src.getModifiedItemAttr("roleBonusCommandBurstAoERange"))

View File

@@ -3,6 +3,8 @@
# Used by: # Used by:
# Skill: Command Burst Specialist # Skill: Command Burst Specialist
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Leadership"), fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Leadership"),

View File

@@ -3,6 +3,10 @@
# Used by: # Used by:
# Modules named like: Command Processor I (4 of 4) # Modules named like: Command Processor I (4 of 4)
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"), "maxGroupActive", src.getModifiedItemAttr("maxGangModules")) fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"), "maxGroupActive",
fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"), "maxGroupOnline", src.getModifiedItemAttr("maxGangModules")) src.getModifiedItemAttr("maxGangModules"))
fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"), "maxGroupOnline",
src.getModifiedItemAttr("maxGangModules"))

View File

@@ -6,6 +6,9 @@
# Ship: Rorqual # Ship: Rorqual
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"), "maxGroupActive", src.getModifiedItemAttr("maxGangModules")) fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"), "maxGroupActive",
fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"), "maxGroupOnline", src.getModifiedItemAttr("maxGangModules")) src.getModifiedItemAttr("maxGangModules"))
fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Leadership"), "maxGroupOnline",
src.getModifiedItemAttr("maxGangModules"))

View File

@@ -4,9 +4,16 @@
# Ship: Magus # Ship: Magus
# Ship: Pontifex # Ship: Pontifex
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff2Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff2Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff3Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "buffDuration", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff3Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff4Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff1Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "buffDuration",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff4Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff1Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -4,9 +4,16 @@
# Ship: Pontifex # Ship: Pontifex
# Ship: Stork # Ship: Stork
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff1Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff1Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff3Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff2Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff3Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "buffDuration", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff4Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff2Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "buffDuration",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff4Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -4,9 +4,16 @@
# Ship: Bifrost # Ship: Bifrost
# Ship: Stork # Ship: Stork
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -4,9 +4,16 @@
# Ship: Bifrost # Ship: Bifrost
# Ship: Magus # Ship: Magus
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff3Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff3Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "buffDuration", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff1Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "buffDuration",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff4Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff2Value", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff1Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff4Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff2Value",
src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers")

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Ships from group: Command Ship (4 of 8) # Ships from group: Command Ship (4 of 8)
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff3Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff3Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff1Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff2Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff1Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "buffDuration", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff4Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff2Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "buffDuration",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command"), "warfareBuff4Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Ships from group: Command Ship (4 of 8) # Ships from group: Command Ship (4 of 8)
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "buffDuration", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "buffDuration",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff3Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff2Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff3Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff1Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff4Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff2Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff1Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff4Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Ships from group: Command Ship (4 of 8) # Ships from group: Command Ship (4 of 8)
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Ships from group: Command Ship (4 of 8) # Ships from group: Command Ship (4 of 8)
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff2Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff2Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff1Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff3Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff1Value",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff4Value", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "buffDuration", src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff3Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "warfareBuff4Value",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command"), "buffDuration",
src.getModifiedItemAttr("eliteBonusCommandShips3"), skill="Command Ships")

View File

@@ -3,7 +3,9 @@
# Used by: # Used by:
# Ship: Caedes # Ship: Caedes
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ("Energy Nosferatu", "Energy Neutralizer"), fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in ("Energy Nosferatu", "Energy Neutralizer"),
"falloffEffectiveness", src.getModifiedItemAttr("eliteBonusCoverOps1"), stackingPenalties=True, skill="Covert Ops") "falloffEffectiveness", src.getModifiedItemAttr("eliteBonusCoverOps1"),
stackingPenalties=True, skill="Covert Ops")

View File

@@ -3,5 +3,8 @@
# Used by: # Used by:
# Ship: Rabisu # Ship: Rabisu
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("eliteBonusLogistics3"), skill="Logistics Cruisers") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "duration",
src.getModifiedItemAttr("eliteBonusLogistics3"), skill="Logistics Cruisers")

View File

@@ -8,8 +8,8 @@ type = "active", "projected"
def handler(fit, src, context): def handler(fit, src, context):
if "projected" in context and ( if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or
(hasattr(src, "state") and src.state >= State.ACTIVE) or hasattr(src, "amountActive")): hasattr(src, "amountActive")):
amount = src.getModifiedItemAttr("energyNeutralizerAmount") amount = src.getModifiedItemAttr("energyNeutralizerAmount")
time = src.getModifiedItemAttr("duration") time = src.getModifiedItemAttr("duration")

View File

@@ -8,8 +8,8 @@ type = "active", "projected"
def handler(fit, src, context): def handler(fit, src, context):
if "projected" in context and ( if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or
(hasattr(src, "state") and src.state >= State.ACTIVE) or hasattr(src, "amountActive")): hasattr(src, "amountActive")):
amount = src.getModifiedItemAttr("energyNeutralizerAmount") amount = src.getModifiedItemAttr("energyNeutralizerAmount")
time = src.getModifiedItemAttr("energyNeutralizerDuration") time = src.getModifiedItemAttr("energyNeutralizerDuration")

View File

@@ -3,7 +3,11 @@
# Used by: # Used by:
# Skill: Ice Harvesting Drone Specialization # Skill: Ice Harvesting Drone Specialization
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting Drone Specialization"), "duration", src.getModifiedItemAttr("rofBonus") * lvl) fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting Drone Specialization"), "duration",
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting Drone Specialization"), "maxVelocity", src.getModifiedItemAttr("maxVelocityBonus") * lvl) src.getModifiedItemAttr("rofBonus") * lvl)
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting Drone Specialization"),
"maxVelocity", src.getModifiedItemAttr("maxVelocityBonus") * lvl)

View File

@@ -11,8 +11,8 @@
# Ship: Rorqual # Ship: Rorqual
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
"damageMultiplier", "damageMultiplier",
src.getModifiedItemAttr("industrialBonusDroneDamage")) src.getModifiedItemAttr("industrialBonusDroneDamage"))

View File

@@ -3,6 +3,9 @@
# Used by: # Used by:
# Skill: Information Command # Skill: Information Command
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "buffDuration", src.getModifiedItemAttr("durationBonus") * lvl) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "buffDuration",
src.getModifiedItemAttr("durationBonus") * lvl)

View File

@@ -5,9 +5,16 @@
# Implant: Imperial Navy Command Mindlink # Implant: Imperial Navy Command Mindlink
# Implant: Information Command Mindlink # Implant: Information Command Mindlink
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff4Multiplier", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff4Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff3Multiplier", src.getModifiedItemAttr("mindlinkBonus")) src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff1Multiplier", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff3Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff2Multiplier", src.getModifiedItemAttr("mindlinkBonus")) src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "buffDuration", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff1Multiplier",
src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff2Multiplier",
src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Command"), "buffDuration",
src.getModifiedItemAttr("mindlinkBonus"))

View File

@@ -3,9 +3,15 @@
# Used by: # Used by:
# Skill: Information Command Specialist # Skill: Information Command Specialist
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff2Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff2Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff1Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff3Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff1Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff4Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff3Multiplier",
src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Information Command"), "warfareBuff4Multiplier",
src.getModifiedItemAttr("commandStrengthBonus") * lvl)

View File

@@ -3,7 +3,11 @@
# Used by: # Used by:
# Skill: Invulnerability Core Operation # Skill: Invulnerability Core Operation
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Invulnerability Core Operation"), "buffDuration", src.getModifiedItemAttr("durationBonus") * lvl) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Invulnerability Core Operation"), "buffDuration",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Invulnerability Core Operation"), "duration", src.getModifiedItemAttr("durationBonus") * lvl) src.getModifiedItemAttr("durationBonus") * lvl)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Invulnerability Core Operation"), "duration",
src.getModifiedItemAttr("durationBonus") * lvl)

View File

@@ -3,7 +3,11 @@
# Used by: # Used by:
# Skill: Mining Drone Specialization # Skill: Mining Drone Specialization
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Drone Specialization"), "miningAmount", src.getModifiedItemAttr("miningAmountBonus") * lvl) fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Drone Specialization"), "miningAmount",
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Drone Specialization"), "maxVelocity", src.getModifiedItemAttr("maxVelocityBonus") * lvl) src.getModifiedItemAttr("miningAmountBonus") * lvl)
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Drone Specialization"), "maxVelocity",
src.getModifiedItemAttr("maxVelocityBonus") * lvl)

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Ships from group: Industrial Command Ship (2 of 2) # Ships from group: Industrial Command Ship (2 of 2)
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff4Multiplier", src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff4Multiplier",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff1Multiplier", src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships") src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "buffDuration", src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff1Multiplier",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff3Multiplier", src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships") src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff2Multiplier", src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "buffDuration",
src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff3Multiplier",
src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff2Multiplier",
src.getModifiedItemAttr("shipBonusICS2"), skill="Industrial Command Ships")

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Ship: Rorqual # Ship: Rorqual
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff1Multiplier", src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff1Multiplier",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff2Multiplier", src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships") src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff4Multiplier", src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff2Multiplier",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff3Multiplier", src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships") src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "buffDuration", src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff4Multiplier",
src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff3Multiplier",
src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "buffDuration",
src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships")

View File

@@ -3,6 +3,9 @@
# Used by: # Used by:
# Skill: Mining Foreman # Skill: Mining Foreman
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "buffDuration", src.getModifiedItemAttr("durationBonus") * lvl) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "buffDuration",
src.getModifiedItemAttr("durationBonus") * lvl)

View File

@@ -4,9 +4,16 @@
# Implant: Mining Foreman Mindlink # Implant: Mining Foreman Mindlink
# Implant: ORE Mining Director Mindlink # Implant: ORE Mining Director Mindlink
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff4Multiplier", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff4Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff2Multiplier", src.getModifiedItemAttr("mindlinkBonus")) src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff1Multiplier", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff2Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff3Multiplier", src.getModifiedItemAttr("mindlinkBonus")) src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "buffDuration", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff1Multiplier",
src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff3Multiplier",
src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "buffDuration",
src.getModifiedItemAttr("mindlinkBonus"))

View File

@@ -7,5 +7,6 @@ type = "passive"
def handler(fit, module, context): def handler(fit, module, context):
module.multiplyItemAttr("specialtyMiningAmount", module.getModifiedChargeAttr("specialisationAsteroidYieldMultiplier")) module.multiplyItemAttr("specialtyMiningAmount",
#module.multiplyItemAttr("miningAmount", module.getModifiedChargeAttr("specialisationAsteroidYieldMultiplier")) module.getModifiedChargeAttr("specialisationAsteroidYieldMultiplier"))
# module.multiplyItemAttr("miningAmount", module.getModifiedChargeAttr("specialisationAsteroidYieldMultiplier"))

View File

@@ -4,6 +4,7 @@
# Modules named like: Sharpshooter Mode (4 of 4) # Modules named like: Sharpshooter Mode (4 of 4)
type = "passive" type = "passive"
def handler(fit, module, context): def handler(fit, module, context):
fit.ship.multiplyItemAttr("weaponDisruptionResistance", 1 / module.getModifiedItemAttr("modeEwarResistancePostDiv")) fit.ship.multiplyItemAttr("weaponDisruptionResistance", 1 / module.getModifiedItemAttr("modeEwarResistancePostDiv"))
fit.ship.multiplyItemAttr("sensorDampenerResistance", 1 / module.getModifiedItemAttr("modeEwarResistancePostDiv")) fit.ship.multiplyItemAttr("sensorDampenerResistance", 1 / module.getModifiedItemAttr("modeEwarResistancePostDiv"))

View File

@@ -11,4 +11,4 @@ def handler(fit, module, context):
speedBoost = module.getModifiedItemAttr("speedFactor") speedBoost = module.getModifiedItemAttr("speedFactor")
mass = fit.ship.getModifiedItemAttr("mass") mass = fit.ship.getModifiedItemAttr("mass")
thrust = module.getModifiedItemAttr("speedBoostFactor") thrust = module.getModifiedItemAttr("speedBoostFactor")
fit.ship.boostItemAttr("maxVelocity", speedBoost * thrust / mass) fit.ship.boostItemAttr("maxVelocity", speedBoost * thrust / mass)

View File

@@ -7,7 +7,8 @@ type = "projected", "active"
def handler(fit, module, context): def handler(fit, module, context):
if "projected" not in context: return if "projected" not in context:
return
if module.charge and module.charge.name == "Nanite Repair Paste": if module.charge and module.charge.name == "Nanite Repair Paste":
multiplier = 3 multiplier = 3

View File

@@ -7,7 +7,8 @@ type = "projected", "active"
def handler(fit, module, context): def handler(fit, module, context):
if "projected" not in context: return if "projected" not in context:
return
amount = module.getModifiedItemAttr("shieldBonus") amount = module.getModifiedItemAttr("shieldBonus")
speed = module.getModifiedItemAttr("duration") / 1000.0 speed = module.getModifiedItemAttr("duration") / 1000.0
fit.extraAttributes.increase("shieldRepair", amount / speed) fit.extraAttributes.increase("shieldRepair", amount / speed)

View File

@@ -12,4 +12,5 @@ def handler(fit, module, context):
mass = fit.ship.getModifiedItemAttr("mass") mass = fit.ship.getModifiedItemAttr("mass")
thrust = module.getModifiedItemAttr("speedBoostFactor") thrust = module.getModifiedItemAttr("speedBoostFactor")
fit.ship.boostItemAttr("maxVelocity", speedBoost * thrust / mass) fit.ship.boostItemAttr("maxVelocity", speedBoost * thrust / mass)
fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusBonus"), stackingPenalties = True) fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusBonus"),
stackingPenalties=True)

View File

@@ -3,5 +3,8 @@
# Used by: # Used by:
# Ship: Rabisu # Ship: Rabisu
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "cpu", src.getModifiedItemAttr("nosferatuCpuNeedBonus")) fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "cpu",
src.getModifiedItemAttr("nosferatuCpuNeedBonus"))

View File

@@ -11,6 +11,7 @@ def handler(fit, module, context):
# Make so that reloads are always taken into account during clculations # Make so that reloads are always taken into account during clculations
module.forceReload = True module.forceReload = True
if module.charge is None: return if module.charge is None:
return
capAmount = module.getModifiedChargeAttr("capacitorBonus") or 0 capAmount = module.getModifiedChargeAttr("capacitorBonus") or 0
module.itemModifiedAttributes["capacitorNeed"] = -capAmount module.itemModifiedAttributes["capacitorNeed"] = -capAmount

View File

@@ -7,7 +7,8 @@ runTime = "late"
def handler(fit, module, context): def handler(fit, module, context):
if "projected" not in context: return if "projected" not in context:
return
bonus = module.getModifiedItemAttr("structureDamageAmount") bonus = module.getModifiedItemAttr("structureDamageAmount")
duration = module.getModifiedItemAttr("duration") / 1000.0 duration = module.getModifiedItemAttr("duration") / 1000.0
fit.extraAttributes.increase("hullRepair", bonus / duration) fit.extraAttributes.increase("hullRepair", bonus / duration)

View File

@@ -7,7 +7,8 @@ runTime = "late"
def handler(fit, module, context): def handler(fit, module, context):
if "projected" not in context: return if "projected" not in context:
return
bonus = module.getModifiedItemAttr("structureDamageAmount") bonus = module.getModifiedItemAttr("structureDamageAmount")
duration = module.getModifiedItemAttr("duration") / 1000.0 duration = module.getModifiedItemAttr("duration") / 1000.0
fit.extraAttributes.increase("hullRepair", bonus / duration) fit.extraAttributes.increase("hullRepair", bonus / duration)

View File

@@ -6,6 +6,7 @@ type = "active", "projected"
def handler(fit, module, context): def handler(fit, module, context):
if "projected" not in context: return if "projected" not in context:
return
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"), fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"),
stackingPenalties=True, remoteResists=True) stackingPenalties=True, remoteResists=True)

View File

@@ -7,6 +7,7 @@ type = "active", "projected"
def handler(fit, module, context): def handler(fit, module, context):
if "projected" not in context: return if "projected" not in context:
return
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"), fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"),
stackingPenalties=True, remoteResists=True) stackingPenalties=True, remoteResists=True)

View File

@@ -1,8 +1,8 @@
# setBonusAsklepian # setBonusAsklepian
# #
# Used by: # Used by:
# Implants named like: Asklepian Omega (3 of 3)
# Implants named like: Grade Asklepian (16 of 16) # Implants named like: Grade Asklepian (16 of 16)
# Implants named like: grade Asklepian Omega (2 of 2)
runTime = "early" runTime = "early"
type = "passive" type = "passive"

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Ship: Orca # Ship: Orca
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier", src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier", src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships") src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier", src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier", src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships") src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration", src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier",
src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier",
src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration",
src.getModifiedItemAttr("shipBonusICS3"), skill="Industrial Command Ships")

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Ship: Rorqual # Ship: Rorqual
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier", src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration", src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships") src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier", src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration",
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier", src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships") src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier", src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier",
src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier",
src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier",
src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")

View File

@@ -3,6 +3,9 @@
# Used by: # Used by:
# Skill: Shield Command # Skill: Shield Command
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration", src.getModifiedItemAttr("durationBonus") * lvl) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration",
src.getModifiedItemAttr("durationBonus") * lvl)

View File

@@ -3,9 +3,16 @@
# Used by: # Used by:
# Implants from group: Cyber Leadership (4 of 10) # Implants from group: Cyber Leadership (4 of 10)
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier", src.getModifiedItemAttr("mindlinkBonus")) src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier", src.getModifiedItemAttr("mindlinkBonus")) src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration", src.getModifiedItemAttr("mindlinkBonus")) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier",
src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier",
src.getModifiedItemAttr("mindlinkBonus"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration",
src.getModifiedItemAttr("mindlinkBonus"))

View File

@@ -3,9 +3,15 @@
# Used by: # Used by:
# Skill: Shield Command Specialist # Skill: Shield Command Specialist
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
lvl = src.level lvl = src.level
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier",
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier", src.getModifiedItemAttr("commandStrengthBonus") * lvl) src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier",
src.getModifiedItemAttr("commandStrengthBonus") * lvl)
fit.modules.filteredChargeBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier",
src.getModifiedItemAttr("commandStrengthBonus") * lvl)

View File

@@ -3,9 +3,21 @@
# Used by: # Used by:
# Ship: Archon # Ship: Archon
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "buffDuration", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "warfareBuff3Value", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier") lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "warfareBuff1Value", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier") "buffDuration", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "warfareBuff4Value", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "warfareBuff2Value", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier") lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff3Value", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff1Value", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff4Value", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff2Value", src.getModifiedItemAttr("shipBonusCarrierA4"), skill="Amarr Carrier")

View File

@@ -3,9 +3,21 @@
# Used by: # Used by:
# Ship: Chimera # Ship: Chimera
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "warfareBuff2Value", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "buffDuration", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier") lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "warfareBuff3Value", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier") "warfareBuff2Value", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "warfareBuff4Value", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "warfareBuff1Value", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier") lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
"buffDuration", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff3Value", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff4Value", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff1Value", src.getModifiedItemAttr("shipBonusCarrierC4"), skill="Caldari Carrier")

View File

@@ -3,9 +3,21 @@
# Used by: # Used by:
# Ship: Thanatos # Ship: Thanatos
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "warfareBuff2Value", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "warfareBuff3Value", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier") lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "warfareBuff4Value", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier") "warfareBuff2Value", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "buffDuration", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "warfareBuff1Value", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier") lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
"warfareBuff3Value", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
"warfareBuff4Value", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
"buffDuration", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
"warfareBuff1Value", src.getModifiedItemAttr("shipBonusCarrierG4"), skill="Gallente Carrier")

View File

@@ -3,9 +3,21 @@
# Used by: # Used by:
# Ship: Nidhoggur # Ship: Nidhoggur
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "warfareBuff4Value", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "warfareBuff2Value", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier") lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "warfareBuff3Value", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier") "warfareBuff4Value", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "warfareBuff1Value", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "buffDuration", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier") lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
"warfareBuff2Value", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
"warfareBuff3Value", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
"warfareBuff1Value", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
"buffDuration", src.getModifiedItemAttr("shipBonusCarrierM4"), skill="Minmatar Carrier")

View File

@@ -3,5 +3,8 @@
# Used by: # Used by:
# Ship: Rabisu # Ship: Rabisu
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"), "cpu", src.getModifiedItemAttr("shipBonusMC2"), skill="Minmatar Cruiser") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"), "cpu",
src.getModifiedItemAttr("shipBonusMC2"), skill="Minmatar Cruiser")

View File

@@ -3,5 +3,8 @@
# Used by: # Used by:
# Ship: Caedes # Ship: Caedes
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"), "cpu", src.getModifiedItemAttr("shipBonusMF"), skill="Minmatar Frigate") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"), "cpu",
src.getModifiedItemAttr("shipBonusMF"), skill="Minmatar Frigate")

View File

@@ -35,4 +35,3 @@ def handler(fit, src, context):
src.getModifiedItemAttr("shipBonusICS4"), src.getModifiedItemAttr("shipBonusICS4"),
skill="Industrial Command Ships" skill="Industrial Command Ships"
) )

View File

@@ -35,4 +35,3 @@ def handler(fit, src, context):
src.getModifiedItemAttr("shipBonusORECapital4"), src.getModifiedItemAttr("shipBonusORECapital4"),
skill="Capital Industrial Ships" skill="Capital Industrial Ships"
) )

View File

@@ -3,5 +3,8 @@
# Used by: # Used by:
# Ship: Orca # Ship: Orca
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting Drone Operation"), "duration", src.getModifiedItemAttr("roleBonusDroneIceHarvestingSpeed")) fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting Drone Operation"), "duration",
src.getModifiedItemAttr("roleBonusDroneIceHarvestingSpeed"))

View File

@@ -3,7 +3,12 @@
# Used by: # Used by:
# Ship: Rabisu # Ship: Rabisu
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "shieldBonus", src.getModifiedItemAttr("shipBonusMC"), skill="Minmatar Cruiser") fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "shieldBonus",
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "structureDamageAmount", src.getModifiedItemAttr("shipBonusMC"), skill="Minmatar Cruiser") src.getModifiedItemAttr("shipBonusMC"), skill="Minmatar Cruiser")
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "armorDamageAmount", src.getModifiedItemAttr("shipBonusMC"), skill="Minmatar Cruiser") fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "structureDamageAmount",
src.getModifiedItemAttr("shipBonusMC"), skill="Minmatar Cruiser")
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "armorDamageAmount",
src.getModifiedItemAttr("shipBonusMC"), skill="Minmatar Cruiser")

View File

@@ -3,9 +3,21 @@
# Used by: # Used by:
# Ship: Minokawa # Ship: Minokawa
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "warfareBuff3Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "warfareBuff4Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier") lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "warfareBuff2Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier") "warfareBuff3Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "buffDuration", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"), "warfareBuff1Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier") lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff4Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff2Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
"buffDuration", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Shield Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff1Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryC4"), skill="Caldari Carrier")

View File

@@ -3,9 +3,21 @@
# Used by: # Used by:
# Ship: Ninazu # Ship: Ninazu
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "warfareBuff3Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "warfareBuff4Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier") lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "buffDuration", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier") "warfareBuff3Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "warfareBuff2Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"), "warfareBuff1Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier") lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
"warfareBuff4Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
"buffDuration", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
"warfareBuff2Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Armored Command"),
"warfareBuff1Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryG4"), skill="Gallente Carrier")

View File

@@ -3,9 +3,21 @@
# Used by: # Used by:
# Ship: Lif # Ship: Lif
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "warfareBuff3Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "warfareBuff2Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier") lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "warfareBuff1Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier") "warfareBuff3Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "buffDuration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"), "warfareBuff4Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier") lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
"warfareBuff2Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
"warfareBuff1Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
"buffDuration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Skirmish Command") or mod.item.requiresSkill("Shield Command"),
"warfareBuff4Value", src.getModifiedItemAttr("shipBonusForceAuxiliaryM4"), skill="Minmatar Carrier")

View File

@@ -8,6 +8,5 @@ type = "passive"
def handler(fit, container, context): def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Mining Drone", fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Mining Drone",
"miningAmount", container.getModifiedItemAttr("rookieDroneBonus")) "miningAmount", container.getModifiedItemAttr("rookieDroneBonus"))

View File

@@ -3,6 +3,10 @@
# Used by: # Used by:
# Ship: Rabisu # Ship: Rabisu
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("shipBonusAC2"), skill="Amarr Cruiser") fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("shipBonusAC2"), skill="Amarr Cruiser") src.getModifiedItemAttr("shipBonusAC2"), skill="Amarr Cruiser")
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange",
src.getModifiedItemAttr("shipBonusAC2"), skill="Amarr Cruiser")

View File

@@ -3,5 +3,8 @@
# Used by: # Used by:
# Ship: Caedes # Ship: Caedes
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"), "falloff", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"), "falloff",
src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate")

View File

@@ -3,9 +3,21 @@
# Used by: # Used by:
# Ship: Aeon # Ship: Aeon
type = "passive" type = "passive"
def handler(fit, src, context): def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "warfareBuff4Value", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "warfareBuff3Value", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier") lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "buffDuration", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier") "warfareBuff4Value", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "warfareBuff2Value", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier") fit.modules.filteredItemBoost(
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"), "warfareBuff1Value", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier") lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff3Value", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
"buffDuration", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff2Value", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Armored Command") or mod.item.requiresSkill("Information Command"),
"warfareBuff1Value", src.getModifiedItemAttr("shipBonusSupercarrierA5"), skill="Amarr Carrier")

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