diff --git a/eos/db/gamedata/effect.py b/eos/db/gamedata/effect.py
index 861c3fa64..5ea5bb457 100644
--- a/eos/db/gamedata/effect.py
+++ b/eos/db/gamedata/effect.py
@@ -22,7 +22,7 @@ from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import mapper, synonym, relation, deferred
from eos.db import gamedata_meta
-from eos.gamedata import Effect, EffectInfo
+from eos.gamedata import Effect, ItemEffect
typeeffects_table = Table("dgmtypeeffects", gamedata_meta,
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True, index=True),
@@ -34,21 +34,15 @@ effects_table = Table("dgmeffects", gamedata_meta,
Column("description", String),
Column("published", Boolean),
Column("isAssistance", Boolean),
- Column("isOffensive", Boolean))
+ Column("isOffensive", Boolean),
+ Column("resistanceID", Integer))
-mapper(EffectInfo, effects_table,
+mapper(Effect, effects_table,
properties={
"ID" : synonym("effectID"),
"name" : synonym("effectName"),
"description": deferred(effects_table.c.description)
})
-mapper(Effect, typeeffects_table,
- properties={
- "ID" : synonym("effectID"),
- "info": relation(EffectInfo, lazy=False)
- })
+mapper(ItemEffect, typeeffects_table)
-Effect.name = association_proxy("info", "name")
-Effect.description = association_proxy("info", "description")
-Effect.published = association_proxy("info", "published")
diff --git a/eos/db/gamedata/item.py b/eos/db/gamedata/item.py
index 1e5d7421a..ad6882435 100644
--- a/eos/db/gamedata/item.py
+++ b/eos/db/gamedata/item.py
@@ -21,6 +21,7 @@ from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, Table, Floa
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import relation, mapper, synonym, deferred
from sqlalchemy.orm.collections import attribute_mapped_collection
+from eos.db.gamedata.effect import typeeffects_table
from eos.db import gamedata_meta
from eos.gamedata import Attribute, Effect, Group, Icon, Item, MetaType, Traits
@@ -47,7 +48,7 @@ mapper(Item, items_table,
"group" : relation(Group, backref="items"),
"icon" : relation(Icon),
"_Item__attributes": relation(Attribute, collection_class=attribute_mapped_collection('name')),
- "effects" : relation(Effect, collection_class=attribute_mapped_collection('name')),
+ "effects": relation(Effect, secondary=typeeffects_table, collection_class=attribute_mapped_collection('name')),
"metaGroup" : relation(MetaType,
primaryjoin=metatypes_table.c.typeID == items_table.c.typeID,
uselist=False),
diff --git a/eos/db/migrations/upgrade23.py b/eos/db/migrations/upgrade23.py
new file mode 100644
index 000000000..809262d4d
--- /dev/null
+++ b/eos/db/migrations/upgrade23.py
@@ -0,0 +1,14 @@
+"""
+Migration 23
+
+- Adds a sec status field to the character table
+"""
+import sqlalchemy
+
+
+def upgrade(saveddata_engine):
+ try:
+ saveddata_engine.execute("SELECT secStatus FROM characters LIMIT 1")
+ except sqlalchemy.exc.DatabaseError:
+ saveddata_engine.execute("ALTER TABLE characters ADD COLUMN secStatus FLOAT;")
+
diff --git a/eos/db/saveddata/character.py b/eos/db/saveddata/character.py
index 61c57b827..b96ca93cc 100644
--- a/eos/db/saveddata/character.py
+++ b/eos/db/saveddata/character.py
@@ -17,7 +17,7 @@
# along with eos. If not, see .
# ===============================================================================
-from sqlalchemy import Table, Column, Integer, ForeignKey, String, DateTime
+from sqlalchemy import Table, Column, Integer, ForeignKey, String, DateTime, Float
from sqlalchemy.orm import relation, mapper
import sqlalchemy.sql.functions as func
@@ -38,6 +38,7 @@ characters_table = Table("characters", saveddata_meta,
Column("defaultLevel", Integer, nullable=True),
Column("alphaCloneID", Integer, nullable=True),
Column("ownerID", ForeignKey("users.ID"), nullable=True),
+ Column("secStatus", Float, nullable=True, default=0.0),
Column("created", DateTime, nullable=True, default=func.now()),
Column("modified", DateTime, nullable=True, onupdate=func.now()))
diff --git a/eos/effects/ammoinfluencecapneed.py b/eos/effects/ammoinfluencecapneed.py
index c30a91bd1..ee8a2229d 100644
--- a/eos/effects/ammoinfluencecapneed.py
+++ b/eos/effects/ammoinfluencecapneed.py
@@ -1,7 +1,7 @@
# ammoInfluenceCapNeed
#
# Used by:
-# Items from category: Charge (465 of 912)
+# Items from category: Charge (466 of 913)
# Charges from group: Frequency Crystal (185 of 185)
# Charges from group: Hybrid Charge (209 of 209)
type = "passive"
diff --git a/eos/effects/ammoinfluencerange.py b/eos/effects/ammoinfluencerange.py
index ea6860bbe..2a42d411c 100644
--- a/eos/effects/ammoinfluencerange.py
+++ b/eos/effects/ammoinfluencerange.py
@@ -1,7 +1,7 @@
# ammoInfluenceRange
#
# Used by:
-# Items from category: Charge (571 of 912)
+# Items from category: Charge (571 of 913)
type = "passive"
diff --git a/eos/effects/commandburstaoerolebonus.py b/eos/effects/commandburstaoerolebonus.py
index 63de8ca87..99576c074 100644
--- a/eos/effects/commandburstaoerolebonus.py
+++ b/eos/effects/commandburstaoerolebonus.py
@@ -4,9 +4,9 @@
# Ships from group: Carrier (4 of 4)
# Ships from group: Combat Battlecruiser (13 of 13)
# Ships from group: Command Ship (8 of 8)
-# Ships from group: Force Auxiliary (4 of 4)
+# Ships from group: Force Auxiliary (5 of 5)
# Ships from group: Supercarrier (6 of 6)
-# Ships from group: Titan (5 of 5)
+# Ships from group: Titan (6 of 6)
# Subsystems named like: Defensive Warfare Processor (4 of 4)
# Ship: Orca
# Ship: Rorqual
diff --git a/eos/effects/concordsecstatustankbonus.py b/eos/effects/concordsecstatustankbonus.py
new file mode 100644
index 000000000..aee24cf95
--- /dev/null
+++ b/eos/effects/concordsecstatustankbonus.py
@@ -0,0 +1,15 @@
+type = "passive"
+def handler(fit, src, context):
+
+ # Get pilot sec status bonus directly here, instead of going through the intermediary effects
+ # via https://forums.eveonline.com/default.aspx?g=posts&t=515826
+ try:
+ bonus = max(0, min(50.0, (src.parent.character.secStatus * 10)))
+ except:
+ bonus = None
+
+ if bonus is not None:
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"),
+ "armorDamageAmount", bonus, stackingPenalties=True)
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"),
+ "shieldBonus", bonus, stackingPenalties=True)
diff --git a/eos/effects/covertopsandreconopscloakmoduledelaybonus.py b/eos/effects/covertopsandreconopscloakmoduledelaybonus.py
index 0a3e341c3..3718c9101 100644
--- a/eos/effects/covertopsandreconopscloakmoduledelaybonus.py
+++ b/eos/effects/covertopsandreconopscloakmoduledelaybonus.py
@@ -3,9 +3,9 @@
# Used by:
# Ships from group: Black Ops (4 of 4)
# Ships from group: Blockade Runner (4 of 4)
-# Ships from group: Covert Ops (6 of 6)
+# Ships from group: Covert Ops (7 of 7)
# Ships from group: Expedition Frigate (2 of 2)
-# Ships from group: Force Recon Ship (6 of 6)
+# Ships from group: Force Recon Ship (7 of 7)
# Ships from group: Stealth Bomber (4 of 4)
# Ships named like: Stratios (2 of 2)
# Subsystems named like: Offensive Covert Reconfiguration (4 of 4)
diff --git a/eos/effects/covertopscloakcpupercentbonus1.py b/eos/effects/covertopscloakcpupercentbonus1.py
index 7ac0f5523..e7763ec56 100644
--- a/eos/effects/covertopscloakcpupercentbonus1.py
+++ b/eos/effects/covertopscloakcpupercentbonus1.py
@@ -1,7 +1,7 @@
# covertOpsCloakCpuPercentBonus1
#
# Used by:
-# Ships from group: Covert Ops (5 of 6)
+# Ships from group: Covert Ops (5 of 7)
type = "passive"
runTime = "early"
diff --git a/eos/effects/covertopscloakcpupercentbonuspiratefaction.py b/eos/effects/covertopscloakcpupercentrolebonus.py
similarity index 78%
rename from eos/effects/covertopscloakcpupercentbonuspiratefaction.py
rename to eos/effects/covertopscloakcpupercentrolebonus.py
index 6feae8252..fea79b8e2 100644
--- a/eos/effects/covertopscloakcpupercentbonuspiratefaction.py
+++ b/eos/effects/covertopscloakcpupercentrolebonus.py
@@ -1,8 +1,10 @@
-# covertOpsCloakCPUPercentBonusPirateFaction
+# covertOpsCloakCPUPercentRoleBonus
#
# Used by:
# Ships from group: Expedition Frigate (2 of 2)
# Ship: Astero
+# Ship: Enforcer
+# Ship: Pacifier
# Ship: Victorieux Luxury Yacht
type = "passive"
runTime = "early"
@@ -10,4 +12,4 @@ runTime = "early"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"),
- "cpu", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "cpu", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/cynosuraldurationbonus.py b/eos/effects/cynosuraldurationbonus.py
index 743d13d9e..388e64125 100644
--- a/eos/effects/cynosuraldurationbonus.py
+++ b/eos/effects/cynosuraldurationbonus.py
@@ -1,7 +1,7 @@
# cynosuralDurationBonus
#
# Used by:
-# Ships from group: Force Recon Ship (5 of 6)
+# Ships from group: Force Recon Ship (6 of 7)
type = "passive"
diff --git a/eos/effects/cynosuraltheoryconsumptionbonus.py b/eos/effects/cynosuraltheoryconsumptionbonus.py
index 0f66b0152..3d1be5194 100644
--- a/eos/effects/cynosuraltheoryconsumptionbonus.py
+++ b/eos/effects/cynosuraltheoryconsumptionbonus.py
@@ -1,7 +1,7 @@
# cynosuralTheoryConsumptionBonus
#
# Used by:
-# Ships from group: Force Recon Ship (5 of 6)
+# Ships from group: Force Recon Ship (6 of 7)
# Skill: Cynosural Field Theory
type = "passive"
diff --git a/eos/effects/elitebonuscoveropsscanprobestrength2.py b/eos/effects/elitebonuscoveropsscanprobestrength2.py
index 5d6dfc8c6..7b3df9a4b 100644
--- a/eos/effects/elitebonuscoveropsscanprobestrength2.py
+++ b/eos/effects/elitebonuscoveropsscanprobestrength2.py
@@ -1,7 +1,7 @@
# eliteBonusCoverOpsScanProbeStrength2
#
# Used by:
-# Ships from group: Covert Ops (6 of 6)
+# Ships from group: Covert Ops (7 of 7)
type = "passive"
diff --git a/eos/effects/elitebonuscoveropswarpvelocity1.py b/eos/effects/elitebonuscoveropswarpvelocity1.py
new file mode 100644
index 000000000..6a661ae0f
--- /dev/null
+++ b/eos/effects/elitebonuscoveropswarpvelocity1.py
@@ -0,0 +1,7 @@
+# eliteBonusCoverOpsWarpVelocity1
+#
+# Used by:
+# Ship: Pacifier
+type = "passive"
+def handler(fit, src, context):
+ fit.ship.boostItemAttr("warpSpeedMultiplier", src.getModifiedItemAttr("eliteBonusCoverOps1"), skill="Covert Ops")
diff --git a/eos/effects/elitebonusreconwarpvelocity3.py b/eos/effects/elitebonusreconwarpvelocity3.py
new file mode 100644
index 000000000..9d7f98dfc
--- /dev/null
+++ b/eos/effects/elitebonusreconwarpvelocity3.py
@@ -0,0 +1,7 @@
+# eliteBonusReconWarpVelocity3
+#
+# Used by:
+# Ship: Enforcer
+type = "passive"
+def handler(fit, src, context):
+ fit.ship.boostItemAttr("warpSpeedMultiplier", src.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships")
diff --git a/eos/effects/elitereconjumpscramblerrangebonus2.py b/eos/effects/elitereconscramblerrangebonus2.py
similarity index 85%
rename from eos/effects/elitereconjumpscramblerrangebonus2.py
rename to eos/effects/elitereconscramblerrangebonus2.py
index b9bebe9a9..d308a56ba 100644
--- a/eos/effects/elitereconjumpscramblerrangebonus2.py
+++ b/eos/effects/elitereconscramblerrangebonus2.py
@@ -1,7 +1,8 @@
-# eliteReconJumpScramblerRangeBonus2
+# eliteReconScramblerRangeBonus2
#
# Used by:
# Ship: Arazu
+# Ship: Enforcer
# Ship: Lachesis
type = "passive"
diff --git a/eos/effects/elitereconstasiswebbonus1.py b/eos/effects/elitereconstasiswebbonus1.py
new file mode 100644
index 000000000..0a05274f4
--- /dev/null
+++ b/eos/effects/elitereconstasiswebbonus1.py
@@ -0,0 +1,7 @@
+# eliteReconStasisWebBonus1
+#
+# Used by:
+# Ship: Enforcer
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web", "maxRange", src.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships")
diff --git a/eos/effects/entosisdurationmultiply.py b/eos/effects/entosisdurationmultiply.py
index 410ff6312..10d519002 100644
--- a/eos/effects/entosisdurationmultiply.py
+++ b/eos/effects/entosisdurationmultiply.py
@@ -1,12 +1,7 @@
# entosisDurationMultiply
#
# Used by:
-# Ships from group: Carrier (4 of 4)
-# Ships from group: Dreadnought (5 of 5)
-# Ships from group: Force Auxiliary (4 of 4)
-# Ships from group: Supercarrier (6 of 6)
-# Ships from group: Titan (5 of 5)
-# Ship: Rorqual
+# Items from market group: Ships > Capital Ships (28 of 37)
type = "passive"
diff --git a/eos/effects/minigamevirusstrengthbonus.py b/eos/effects/minigamevirusstrengthbonus.py
index 63c42ffdb..f346d387a 100644
--- a/eos/effects/minigamevirusstrengthbonus.py
+++ b/eos/effects/minigamevirusstrengthbonus.py
@@ -1,7 +1,7 @@
# minigameVirusStrengthBonus
#
# Used by:
-# Ships from group: Covert Ops (6 of 6)
+# Ships from group: Covert Ops (7 of 7)
# Ships named like: Stratios (2 of 2)
# Subsystems named like: Electronics Emergent Locus Analyzer (4 of 4)
# Ship: Astero
diff --git a/eos/effects/miningforemanburstbonusorecapital2.py b/eos/effects/miningforemanburstbonusorecapital2.py
index b1e7f4b57..29d55819e 100644
--- a/eos/effects/miningforemanburstbonusorecapital2.py
+++ b/eos/effects/miningforemanburstbonusorecapital2.py
@@ -6,13 +6,13 @@ type = "passive"
def handler(fit, src, context):
- fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff1Multiplier",
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff1Value",
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"), "warfareBuff2Value",
src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships")
- fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff4Multiplier",
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff4Value",
src.getModifiedItemAttr("shipBonusORECapital2"), skill="Capital Industrial Ships")
- fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff3Multiplier",
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining Foreman"), "warfareBuff3Value",
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")
diff --git a/eos/effects/npcentityweapondisruptor.py b/eos/effects/npcentityweapondisruptor.py
index e2fb7bf4a..28661af18 100644
--- a/eos/effects/npcentityweapondisruptor.py
+++ b/eos/effects/npcentityweapondisruptor.py
@@ -5,14 +5,14 @@
type = "projected", "active"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" in context:
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"maxRange", module.getModifiedItemAttr("maxRangeBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"falloff", module.getModifiedItemAttr("falloffBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/reconshipcloakcpubonus1.py b/eos/effects/reconshipcloakcpubonus1.py
index 602efab28..4032baabc 100644
--- a/eos/effects/reconshipcloakcpubonus1.py
+++ b/eos/effects/reconshipcloakcpubonus1.py
@@ -1,7 +1,7 @@
# reconShipCloakCpuBonus1
#
# Used by:
-# Ships from group: Force Recon Ship (6 of 6)
+# Ships from group: Force Recon Ship (6 of 7)
type = "passive"
runTime = "early"
diff --git a/eos/effects/remotesensordampentity.py b/eos/effects/remotesensordampentity.py
index adb0b1ac3..642b55411 100644
--- a/eos/effects/remotesensordampentity.py
+++ b/eos/effects/remotesensordampentity.py
@@ -5,12 +5,12 @@
type = "projected", "active"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" not in context:
return
fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/remotesensordampfalloff.py b/eos/effects/remotesensordampfalloff.py
index e04b573c1..81ae5dfa1 100644
--- a/eos/effects/remotesensordampfalloff.py
+++ b/eos/effects/remotesensordampfalloff.py
@@ -5,12 +5,12 @@
type = "projected", "active"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" not in context:
return
fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/remotetargetpaintentity.py b/eos/effects/remotetargetpaintentity.py
index 4ee7c9fc0..07b8c9169 100644
--- a/eos/effects/remotetargetpaintentity.py
+++ b/eos/effects/remotetargetpaintentity.py
@@ -5,7 +5,7 @@
type = "projected", "active"
-def handler(fit, container, context):
+def handler(fit, container, context, *args, **kwargs):
if "projected" in context:
fit.ship.boostItemAttr("signatureRadius", container.getModifiedItemAttr("signatureRadiusBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/remotetargetpaintfalloff.py b/eos/effects/remotetargetpaintfalloff.py
index b9f5a6ef1..0e80806ca 100644
--- a/eos/effects/remotetargetpaintfalloff.py
+++ b/eos/effects/remotetargetpaintfalloff.py
@@ -5,7 +5,7 @@
type = "projected", "active"
-def handler(fit, container, context):
+def handler(fit, container, context, *args, **kwargs):
if "projected" in context:
fit.ship.boostItemAttr("signatureRadius", container.getModifiedItemAttr("signatureRadiusBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/remotewebifierentity.py b/eos/effects/remotewebifierentity.py
index cf9905405..ca4b34de7 100644
--- a/eos/effects/remotewebifierentity.py
+++ b/eos/effects/remotewebifierentity.py
@@ -5,8 +5,8 @@
type = "active", "projected"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" not in context:
return
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/remotewebifierfalloff.py b/eos/effects/remotewebifierfalloff.py
index 1db5eb858..4d5bc770c 100644
--- a/eos/effects/remotewebifierfalloff.py
+++ b/eos/effects/remotewebifierfalloff.py
@@ -6,8 +6,8 @@
type = "active", "projected"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" not in context:
return
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/scriptdurationbonus.py b/eos/effects/scriptdurationbonus.py
index 5b3081529..23361f87b 100644
--- a/eos/effects/scriptdurationbonus.py
+++ b/eos/effects/scriptdurationbonus.py
@@ -1,7 +1,7 @@
# scriptDurationBonus
#
# Used by:
-# Charge: Focused Warp Disruption Script
+# Charges from group: Warp Disruption Script (2 of 2)
type = "passive"
diff --git a/eos/effects/scriptmassbonuspercentagebonus.py b/eos/effects/scriptmassbonuspercentagebonus.py
index e6d42eee4..dcf4a6c02 100644
--- a/eos/effects/scriptmassbonuspercentagebonus.py
+++ b/eos/effects/scriptmassbonuspercentagebonus.py
@@ -1,7 +1,7 @@
# scriptMassBonusPercentageBonus
#
# Used by:
-# Charge: Focused Warp Disruption Script
+# Charges from group: Warp Disruption Script (2 of 2)
type = "passive"
runTime = "early"
diff --git a/eos/effects/scriptsignatureradiusbonusbonus.py b/eos/effects/scriptsignatureradiusbonusbonus.py
index 29b60408a..34ee9918f 100644
--- a/eos/effects/scriptsignatureradiusbonusbonus.py
+++ b/eos/effects/scriptsignatureradiusbonusbonus.py
@@ -1,7 +1,7 @@
# scriptSignatureRadiusBonusBonus
#
# Used by:
-# Charge: Focused Warp Disruption Script
+# Charges from group: Warp Disruption Script (2 of 2)
type = "passive"
runTime = "early"
diff --git a/eos/effects/scriptspeedboostfactorbonusbonus.py b/eos/effects/scriptspeedboostfactorbonusbonus.py
index e7795bc1a..7ead7eb03 100644
--- a/eos/effects/scriptspeedboostfactorbonusbonus.py
+++ b/eos/effects/scriptspeedboostfactorbonusbonus.py
@@ -1,7 +1,7 @@
# scriptSpeedBoostFactorBonusBonus
#
# Used by:
-# Charge: Focused Warp Disruption Script
+# Charges from group: Warp Disruption Script (2 of 2)
type = "passive"
runTime = "early"
diff --git a/eos/effects/scriptspeedfactorbonusbonus.py b/eos/effects/scriptspeedfactorbonusbonus.py
index 3df351500..f3d560d76 100644
--- a/eos/effects/scriptspeedfactorbonusbonus.py
+++ b/eos/effects/scriptspeedfactorbonusbonus.py
@@ -1,7 +1,7 @@
# scriptSpeedFactorBonusBonus
#
# Used by:
-# Charge: Focused Warp Disruption Script
+# Charges from group: Warp Disruption Script (2 of 2)
type = "passive"
runTime = "early"
diff --git a/eos/effects/scriptwarpdisruptionfieldgeneratorsetdisallowinempirespace.py b/eos/effects/scriptwarpdisruptionfieldgeneratorsetdisallowinempirespace.py
index 4e9f29bd9..4c224a0ef 100644
--- a/eos/effects/scriptwarpdisruptionfieldgeneratorsetdisallowinempirespace.py
+++ b/eos/effects/scriptwarpdisruptionfieldgeneratorsetdisallowinempirespace.py
@@ -1,7 +1,7 @@
# scriptWarpDisruptionFieldGeneratorSetDisallowInEmpireSpace
#
# Used by:
-# Charge: Focused Warp Disruption Script
+# Charges from group: Warp Disruption Script (2 of 2)
type = "passive"
diff --git a/eos/effects/scriptwarpscramblerangebonus.py b/eos/effects/scriptwarpscramblerangebonus.py
index adbcbc88e..cc253590b 100644
--- a/eos/effects/scriptwarpscramblerangebonus.py
+++ b/eos/effects/scriptwarpscramblerangebonus.py
@@ -1,7 +1,7 @@
# scriptWarpScrambleRangeBonus
#
# Used by:
-# Charge: Focused Warp Disruption Script
+# Charges from group: Warp Disruption Script (2 of 2)
type = "passive"
diff --git a/eos/effects/shieldcommandburstbonusorecapital3.py b/eos/effects/shieldcommandburstbonusorecapital3.py
index 5972f2044..8ad4a3462 100644
--- a/eos/effects/shieldcommandburstbonusorecapital3.py
+++ b/eos/effects/shieldcommandburstbonusorecapital3.py
@@ -6,13 +6,13 @@ type = "passive"
def handler(fit, src, context):
- fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Multiplier",
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff4Value",
src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "buffDuration",
src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
- fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Multiplier",
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff1Value",
src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
- fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Multiplier",
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff3Value",
src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
- fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Multiplier",
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Command"), "warfareBuff2Value",
src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships")
diff --git a/eos/effects/shieldmanagementshieldcapacitybonuspostpercentcapacitylocationshipgroupshield.py b/eos/effects/shieldmanagementshieldcapacitybonuspostpercentcapacitylocationshipgroupshield.py
index 9e2f091fe..d9209c608 100644
--- a/eos/effects/shieldmanagementshieldcapacitybonuspostpercentcapacitylocationshipgroupshield.py
+++ b/eos/effects/shieldmanagementshieldcapacitybonuspostpercentcapacitylocationshipgroupshield.py
@@ -3,7 +3,6 @@
# Used by:
# Implants named like: Zainou 'Gnome' Shield Management SM (6 of 6)
# Modules named like: Core Defense Field Extender (8 of 8)
-# Modules named like: QA Multiship Module Players (4 of 4)
# Implant: Genolution Core Augmentation CA-3
# Implant: Sansha Modified 'Gnome' Implant
# Skill: Shield Management
diff --git a/eos/effects/shipadvancedspaceshipcommandagilitybonus.py b/eos/effects/shipadvancedspaceshipcommandagilitybonus.py
index 725dfb43d..d7e58addf 100644
--- a/eos/effects/shipadvancedspaceshipcommandagilitybonus.py
+++ b/eos/effects/shipadvancedspaceshipcommandagilitybonus.py
@@ -1,7 +1,7 @@
# shipAdvancedSpaceshipCommandAgilityBonus
#
# Used by:
-# Items from market group: Ships > Capital Ships (34 of 34)
+# Items from market group: Ships > Capital Ships (37 of 37)
type = "passive"
diff --git a/eos/effects/shipbonusdreadnoughta1energywarfareamountbonus.py b/eos/effects/shipbonusdreadnoughta1energywarfareamountbonus.py
new file mode 100644
index 000000000..527eba0c2
--- /dev/null
+++ b/eos/effects/shipbonusdreadnoughta1energywarfareamountbonus.py
@@ -0,0 +1,8 @@
+# shipBonusDreadnoughtA1EnergyWarfareAmountBonus
+#
+# Used by:
+# Ship: Chemosh
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", src.getModifiedItemAttr("shipBonusDreadnoughtA1"), skill="Amarr Dreadnought")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyNeutralizerAmount", src.getModifiedItemAttr("shipBonusDreadnoughtA1"), skill="Amarr Dreadnought")
diff --git a/eos/effects/shipbonusdreadnoughtm1webrangebonus.py b/eos/effects/shipbonusdreadnoughtm1webrangebonus.py
new file mode 100644
index 000000000..d258b3efc
--- /dev/null
+++ b/eos/effects/shipbonusdreadnoughtm1webrangebonus.py
@@ -0,0 +1,7 @@
+# shipBonusDreadnoughtM1WebRangeBonus
+#
+# Used by:
+# Ship: Chemosh
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web", "maxRange", src.getModifiedItemAttr("shipBonusDreadnoughtM1"), skill="Minmatar Dreadnought")
diff --git a/eos/effects/shipbonusdreadnoughtm1webbonus.py b/eos/effects/shipbonusdreadnoughtm1webstrengthbonus.py
similarity index 87%
rename from eos/effects/shipbonusdreadnoughtm1webbonus.py
rename to eos/effects/shipbonusdreadnoughtm1webstrengthbonus.py
index 040ce5086..c822336ba 100644
--- a/eos/effects/shipbonusdreadnoughtm1webbonus.py
+++ b/eos/effects/shipbonusdreadnoughtm1webstrengthbonus.py
@@ -1,4 +1,4 @@
-# shipBonusDreadnoughtM1WebBonus
+# shipBonusDreadnoughtM1WebStrengthBonus
#
# Used by:
# Ship: Vehement
diff --git a/eos/effects/shipbonusdronemwdboostrole.py b/eos/effects/shipbonusdronemwdboostrole.py
index 6b342b2b0..a9960c71a 100644
--- a/eos/effects/shipbonusdronemwdboostrole.py
+++ b/eos/effects/shipbonusdronemwdboostrole.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
- "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusforceauxiliarya1nosferatudrainamount.py b/eos/effects/shipbonusforceauxiliarya1nosferatudrainamount.py
new file mode 100644
index 000000000..9544149f1
--- /dev/null
+++ b/eos/effects/shipbonusforceauxiliarya1nosferatudrainamount.py
@@ -0,0 +1,7 @@
+# shipBonusForceAuxiliaryA1NosferatuDrainAmount
+#
+# Used by:
+# Ship: Dagon
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", src.getModifiedItemAttr("shipBonusForceAuxiliaryA1"), skill="Amarr Carrier")
diff --git a/eos/effects/shipbonusforceauxiliarya1nosferaturangebonus.py b/eos/effects/shipbonusforceauxiliarya1nosferaturangebonus.py
new file mode 100644
index 000000000..aabd0b7fb
--- /dev/null
+++ b/eos/effects/shipbonusforceauxiliarya1nosferaturangebonus.py
@@ -0,0 +1,8 @@
+# shipBonusForceAuxiliaryA1NosferatuRangeBonus
+#
+# Used by:
+# Ship: Dagon
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("shipBonusForceAuxiliaryA1"), skill="Amarr Carrier")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("shipBonusForceAuxiliaryA1"), skill="Amarr Carrier")
diff --git a/eos/effects/shipbonusforceauxiliarym1remotearmorrepairduration.py b/eos/effects/shipbonusforceauxiliarym1remotearmorrepairduration.py
new file mode 100644
index 000000000..cec5a745e
--- /dev/null
+++ b/eos/effects/shipbonusforceauxiliarym1remotearmorrepairduration.py
@@ -0,0 +1,7 @@
+# shipBonusForceAuxiliaryM1RemoteArmorRepairDuration
+#
+# Used by:
+# Ship: Dagon
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM1"), skill="Minmatar Carrier")
diff --git a/eos/effects/shipbonusforceauxiliarym1remotecycletime.py b/eos/effects/shipbonusforceauxiliarym1remoteduration.py
similarity index 94%
rename from eos/effects/shipbonusforceauxiliarym1remotecycletime.py
rename to eos/effects/shipbonusforceauxiliarym1remoteduration.py
index 9ab5ae04c..71d8d8e07 100644
--- a/eos/effects/shipbonusforceauxiliarym1remotecycletime.py
+++ b/eos/effects/shipbonusforceauxiliarym1remoteduration.py
@@ -1,4 +1,4 @@
-# shipBonusForceAuxiliaryM1RemoteCycleTime
+# shipBonusForceAuxiliaryM1RemoteDuration
#
# Used by:
# Ship: Lif
diff --git a/eos/effects/shipbonusheavydronearmorhppiratefaction.py b/eos/effects/shipbonusheavydronearmorhppiratefaction.py
index c5dc193ab..369005a2d 100644
--- a/eos/effects/shipbonusheavydronearmorhppiratefaction.py
+++ b/eos/effects/shipbonusheavydronearmorhppiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Heavy Drone Operation"),
- "armorHP", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "armorHP", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusheavydronedamagemultiplierpiratefaction.py b/eos/effects/shipbonusheavydronedamagemultiplierpiratefaction.py
index b1a03b0f4..6682948a8 100644
--- a/eos/effects/shipbonusheavydronedamagemultiplierpiratefaction.py
+++ b/eos/effects/shipbonusheavydronedamagemultiplierpiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Heavy Drone Operation"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusheavydronehppiratefaction.py b/eos/effects/shipbonusheavydronehppiratefaction.py
index 58a3c7eb4..9c12a7101 100644
--- a/eos/effects/shipbonusheavydronehppiratefaction.py
+++ b/eos/effects/shipbonusheavydronehppiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Heavy Drone Operation"),
- "hp", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "hp", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusheavydroneshieldhppiratefaction.py b/eos/effects/shipbonusheavydroneshieldhppiratefaction.py
index 60d10086f..f2575bf91 100644
--- a/eos/effects/shipbonusheavydroneshieldhppiratefaction.py
+++ b/eos/effects/shipbonusheavydroneshieldhppiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Heavy Drone Operation"),
- "shieldCapacity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "shieldCapacity", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonushybridtrackinggf2.py b/eos/effects/shipbonushybridtrackinggf2.py
index dabf163d6..77b58a6d6 100644
--- a/eos/effects/shipbonushybridtrackinggf2.py
+++ b/eos/effects/shipbonushybridtrackinggf2.py
@@ -3,6 +3,7 @@
# Used by:
# Ship: Ares
# Ship: Federation Navy Comet
+# Ship: Pacifier
# Ship: Tristan
type = "passive"
diff --git a/eos/effects/shipbonusletoptimalrangepiratefaction.py b/eos/effects/shipbonusletoptimalrangepiratefaction.py
index d2f044b5f..680c7ef2d 100644
--- a/eos/effects/shipbonusletoptimalrangepiratefaction.py
+++ b/eos/effects/shipbonusletoptimalrangepiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
- "maxRange", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "maxRange", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonuslightdronearmorhppiratefaction.py b/eos/effects/shipbonuslightdronearmorhppiratefaction.py
index aaefc8119..7f4706023 100644
--- a/eos/effects/shipbonuslightdronearmorhppiratefaction.py
+++ b/eos/effects/shipbonuslightdronearmorhppiratefaction.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Light Drone Operation"),
- "armorHP", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "armorHP", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonuslightdronedamagemultiplierpiratefaction.py b/eos/effects/shipbonuslightdronedamagemultiplierpiratefaction.py
index e5a9b340c..75451999c 100644
--- a/eos/effects/shipbonuslightdronedamagemultiplierpiratefaction.py
+++ b/eos/effects/shipbonuslightdronedamagemultiplierpiratefaction.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Light Drone Operation"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonuslightdronehppiratefaction.py b/eos/effects/shipbonuslightdronehppiratefaction.py
index af6b5dae4..2511b9736 100644
--- a/eos/effects/shipbonuslightdronehppiratefaction.py
+++ b/eos/effects/shipbonuslightdronehppiratefaction.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Light Drone Operation"),
- "hp", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "hp", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonuslightdroneshieldhppiratefaction.py b/eos/effects/shipbonuslightdroneshieldhppiratefaction.py
index 8bbff53f2..0e7b7b147 100644
--- a/eos/effects/shipbonuslightdroneshieldhppiratefaction.py
+++ b/eos/effects/shipbonuslightdroneshieldhppiratefaction.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Light Drone Operation"),
- "shieldCapacity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "shieldCapacity", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusmediumdronearmorhppiratefaction.py b/eos/effects/shipbonusmediumdronearmorhppiratefaction.py
index e48c99319..2d5373b43 100644
--- a/eos/effects/shipbonusmediumdronearmorhppiratefaction.py
+++ b/eos/effects/shipbonusmediumdronearmorhppiratefaction.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Medium Drone Operation"),
- "armorHP", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "armorHP", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusmediumdronedamagemultiplierpiratefaction.py b/eos/effects/shipbonusmediumdronedamagemultiplierpiratefaction.py
index 6adbcb51b..627698037 100644
--- a/eos/effects/shipbonusmediumdronedamagemultiplierpiratefaction.py
+++ b/eos/effects/shipbonusmediumdronedamagemultiplierpiratefaction.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Medium Drone Operation"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusmediumdronehppiratefaction.py b/eos/effects/shipbonusmediumdronehppiratefaction.py
index 287bd32ad..3a41ee95c 100644
--- a/eos/effects/shipbonusmediumdronehppiratefaction.py
+++ b/eos/effects/shipbonusmediumdronehppiratefaction.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Medium Drone Operation"),
- "hp", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "hp", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusmediumdroneshieldhppiratefaction.py b/eos/effects/shipbonusmediumdroneshieldhppiratefaction.py
index eb68ee3fb..593009a33 100644
--- a/eos/effects/shipbonusmediumdroneshieldhppiratefaction.py
+++ b/eos/effects/shipbonusmediumdroneshieldhppiratefaction.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Medium Drone Operation"),
- "shieldCapacity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "shieldCapacity", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusmediumenergyturretdamagepiratefaction.py b/eos/effects/shipbonusmediumenergyturretdamagepiratefaction.py
index 428e548a0..8e3662ced 100644
--- a/eos/effects/shipbonusmediumenergyturretdamagepiratefaction.py
+++ b/eos/effects/shipbonusmediumenergyturretdamagepiratefaction.py
@@ -10,4 +10,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusmedmissileflighttimecc2.py b/eos/effects/shipbonusmedmissileflighttimecc2.py
new file mode 100644
index 000000000..7bf6a461f
--- /dev/null
+++ b/eos/effects/shipbonusmedmissileflighttimecc2.py
@@ -0,0 +1,8 @@
+# shipBonusMedMissileFlightTimeCC2
+#
+# Used by:
+# Ship: Enforcer
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"), "explosionDelay", src.getModifiedItemAttr("shipBonusCC2"), skill="Caldari Cruiser")
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"), "explosionDelay", src.getModifiedItemAttr("shipBonusCC2"), skill="Caldari Cruiser")
diff --git a/eos/effects/shipbonusmetoptimalac2.py b/eos/effects/shipbonusmetoptimalac2.py
index 50d9ce4a4..758ede0d7 100644
--- a/eos/effects/shipbonusmetoptimalac2.py
+++ b/eos/effects/shipbonusmetoptimalac2.py
@@ -1,6 +1,7 @@
# shipBonusMETOptimalAC2
#
# Used by:
+# Ship: Enforcer
# Ship: Omen Navy Issue
type = "passive"
diff --git a/eos/effects/shipbonusmetoptimalrangepiratefaction.py b/eos/effects/shipbonusmetoptimalrangepiratefaction.py
index 5380edc07..10451c94f 100644
--- a/eos/effects/shipbonusmetoptimalrangepiratefaction.py
+++ b/eos/effects/shipbonusmetoptimalrangepiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
- "maxRange", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "maxRange", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonuspiratefrigateprojdamage.py b/eos/effects/shipbonuspiratefrigateprojdamage.py
index 406b847e9..e3710e611 100644
--- a/eos/effects/shipbonuspiratefrigateprojdamage.py
+++ b/eos/effects/shipbonuspiratefrigateprojdamage.py
@@ -10,4 +10,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonuspiratesmallhybriddmg.py b/eos/effects/shipbonuspiratesmallhybriddmg.py
index 596934d24..a9a7fb9eb 100644
--- a/eos/effects/shipbonuspiratesmallhybriddmg.py
+++ b/eos/effects/shipbonuspiratesmallhybriddmg.py
@@ -9,4 +9,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Hybrid Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusremoterepairamountpiratefaction.py b/eos/effects/shipbonusremoterepairamountpiratefaction.py
index f8152a605..3ac0e69fb 100644
--- a/eos/effects/shipbonusremoterepairamountpiratefaction.py
+++ b/eos/effects/shipbonusremoterepairamountpiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"),
- "armorDamageAmount", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "armorDamageAmount", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonusdreadnoughtrole1damagebonus.py b/eos/effects/shipbonusrole1capitalhybriddamagebonus.py
similarity index 87%
rename from eos/effects/shipbonusdreadnoughtrole1damagebonus.py
rename to eos/effects/shipbonusrole1capitalhybriddamagebonus.py
index 0cba1617a..4144b30b4 100644
--- a/eos/effects/shipbonusdreadnoughtrole1damagebonus.py
+++ b/eos/effects/shipbonusrole1capitalhybriddamagebonus.py
@@ -1,4 +1,4 @@
-# shipBonusDreadnoughtRole1DamageBonus
+# shipBonusRole1CapitalHybridDamageBonus
#
# Used by:
# Ship: Vehement
diff --git a/eos/effects/shipbonusforceauxiliaryrole1cpubonus.py b/eos/effects/shipbonusrole1commandburstcpubonus.py
similarity index 73%
rename from eos/effects/shipbonusforceauxiliaryrole1cpubonus.py
rename to eos/effects/shipbonusrole1commandburstcpubonus.py
index cda897b72..1959f3821 100644
--- a/eos/effects/shipbonusforceauxiliaryrole1cpubonus.py
+++ b/eos/effects/shipbonusrole1commandburstcpubonus.py
@@ -1,7 +1,7 @@
-# shipBonusForceAuxiliaryRole1CPUBonus
+# shipBonusRole1CommandBurstCPUBonus
#
# Used by:
-# Ships from group: Force Auxiliary (4 of 4)
+# Ships from group: Force Auxiliary (5 of 5)
type = "passive"
diff --git a/eos/effects/shipbonustitanrole1numwarfarelinks.py b/eos/effects/shipbonusrole1numwarfarelinks.py
similarity index 77%
rename from eos/effects/shipbonustitanrole1numwarfarelinks.py
rename to eos/effects/shipbonusrole1numwarfarelinks.py
index 67a017e32..23ca99188 100644
--- a/eos/effects/shipbonustitanrole1numwarfarelinks.py
+++ b/eos/effects/shipbonusrole1numwarfarelinks.py
@@ -1,7 +1,7 @@
-# shipBonusTitanRole1NumWarfareLinks
+# shipBonusRole1NumWarfareLinks
#
# Used by:
-# Ships from group: Titan (5 of 5)
+# Ships from group: Titan (6 of 6)
type = "passive"
diff --git a/eos/effects/shipbonustitanrole2armorshieldmodulebonus.py b/eos/effects/shipbonusrole2armorplatesshieldextendersbonus.py
similarity index 83%
rename from eos/effects/shipbonustitanrole2armorshieldmodulebonus.py
rename to eos/effects/shipbonusrole2armorplatesshieldextendersbonus.py
index a964d0635..5711fd4e4 100644
--- a/eos/effects/shipbonustitanrole2armorshieldmodulebonus.py
+++ b/eos/effects/shipbonusrole2armorplatesshieldextendersbonus.py
@@ -1,7 +1,7 @@
-# shipBonusTitanRole2ArmorShieldModuleBonus
+# shipBonusRole2ArmorPlates&ShieldExtendersBonus
#
# Used by:
-# Ships from group: Titan (5 of 5)
+# Ships from group: Titan (6 of 6)
type = "passive"
diff --git a/eos/effects/shipbonusforceauxiliaryrole2logisticdronebonus.py b/eos/effects/shipbonusrole2logisticdronebonus.py
similarity index 87%
rename from eos/effects/shipbonusforceauxiliaryrole2logisticdronebonus.py
rename to eos/effects/shipbonusrole2logisticdronebonus.py
index 53bb50f5f..7bd585081 100644
--- a/eos/effects/shipbonusforceauxiliaryrole2logisticdronebonus.py
+++ b/eos/effects/shipbonusrole2logisticdronebonus.py
@@ -1,7 +1,7 @@
-# shipBonusForceAuxiliaryRole2LogisticDroneBonus
+# shipBonusRole2LogisticDroneBonus
#
# Used by:
-# Ships from group: Force Auxiliary (4 of 4)
+# Ships from group: Force Auxiliary (5 of 5)
type = "passive"
diff --git a/eos/effects/shipbonusrole3capitalenergydamagebonus.py b/eos/effects/shipbonusrole3capitalenergydamagebonus.py
new file mode 100644
index 000000000..2baf7a3cf
--- /dev/null
+++ b/eos/effects/shipbonusrole3capitalenergydamagebonus.py
@@ -0,0 +1,8 @@
+# shipBonusRole3CapitalEnergyDamageBonus
+#
+# Used by:
+# Ship: Chemosh
+# Ship: Molok
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Turret"), "damageMultiplier", src.getModifiedItemAttr("shipBonusRole3"))
diff --git a/eos/effects/shipbonustitanrole3damagebonus.py b/eos/effects/shipbonusrole3capitalhybriddamagebonus.py
similarity index 87%
rename from eos/effects/shipbonustitanrole3damagebonus.py
rename to eos/effects/shipbonusrole3capitalhybriddamagebonus.py
index 1bb3e16a6..c79148d3e 100644
--- a/eos/effects/shipbonustitanrole3damagebonus.py
+++ b/eos/effects/shipbonusrole3capitalhybriddamagebonus.py
@@ -1,4 +1,4 @@
-# shipBonusTitanRole3DamageBonus
+# shipBonusRole3CapitalHybridDamageBonus
#
# Used by:
# Ship: Vanquisher
diff --git a/eos/effects/shipbonusforceauxiliaryrole3numwarfarelinks.py b/eos/effects/shipbonusrole3numwarfarelinks.py
similarity index 73%
rename from eos/effects/shipbonusforceauxiliaryrole3numwarfarelinks.py
rename to eos/effects/shipbonusrole3numwarfarelinks.py
index 69a19a64b..28f769880 100644
--- a/eos/effects/shipbonusforceauxiliaryrole3numwarfarelinks.py
+++ b/eos/effects/shipbonusrole3numwarfarelinks.py
@@ -1,7 +1,7 @@
-# shipBonusForceAuxiliaryRole3NumWarfareLinks
+# shipBonusRole3NumWarfareLinks
#
# Used by:
-# Ships from group: Force Auxiliary (4 of 4)
+# Ships from group: Force Auxiliary (5 of 5)
type = "passive"
diff --git a/eos/effects/shipbonusrole4nosferatucpubonus.py b/eos/effects/shipbonusrole4nosferatucpubonus.py
new file mode 100644
index 000000000..1d4de3a3b
--- /dev/null
+++ b/eos/effects/shipbonusrole4nosferatucpubonus.py
@@ -0,0 +1,8 @@
+# shipBonusRole4NosferatuCPUBonus
+#
+# Used by:
+# Ship: Dagon
+# Ship: Rabisu
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "cpu", src.getModifiedItemAttr("shipBonusRole4"))
diff --git a/eos/effects/shipbonusrole5capitalremotearmorrepairpowergridbonus.py b/eos/effects/shipbonusrole5capitalremotearmorrepairpowergridbonus.py
new file mode 100644
index 000000000..89c87168b
--- /dev/null
+++ b/eos/effects/shipbonusrole5capitalremotearmorrepairpowergridbonus.py
@@ -0,0 +1,7 @@
+# shipBonusRole5CapitalRemoteArmorRepairPowergridBonus
+#
+# Used by:
+# Ship: Dagon
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "power", src.getModifiedItemAttr("shipBonusRole5"))
diff --git a/eos/effects/remotearmorpowerneedbonuseffect.py b/eos/effects/shipbonusrole5remotearmorrepairpowergridbonus.py
similarity index 63%
rename from eos/effects/remotearmorpowerneedbonuseffect.py
rename to eos/effects/shipbonusrole5remotearmorrepairpowergridbonus.py
index f8f7b1661..3f764d908 100644
--- a/eos/effects/remotearmorpowerneedbonuseffect.py
+++ b/eos/effects/shipbonusrole5remotearmorrepairpowergridbonus.py
@@ -1,4 +1,4 @@
-# remoteArmorPowerNeedBonusEffect
+# shipBonusRole5RemoteArmorRepairPowergridBonus
#
# Used by:
# Ships from group: Logistics (3 of 6)
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "power",
- src.getModifiedItemAttr("remoteArmorPowerNeedBonus"))
+ src.getModifiedItemAttr("shipBonusRole5"))
diff --git a/eos/effects/shipbonussentrydronearmorhppiratefaction.py b/eos/effects/shipbonussentrydronearmorhppiratefaction.py
index b2cf85c49..a1f49486f 100644
--- a/eos/effects/shipbonussentrydronearmorhppiratefaction.py
+++ b/eos/effects/shipbonussentrydronearmorhppiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Sentry Drone Interfacing"),
- "armorHP", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "armorHP", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonussentrydronedamagemultiplierpiratefaction.py b/eos/effects/shipbonussentrydronedamagemultiplierpiratefaction.py
index 27da3b576..f218f02ed 100644
--- a/eos/effects/shipbonussentrydronedamagemultiplierpiratefaction.py
+++ b/eos/effects/shipbonussentrydronedamagemultiplierpiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Sentry Drone Interfacing"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonussentrydronehppiratefaction.py b/eos/effects/shipbonussentrydronehppiratefaction.py
index 0399ccfc8..fab5592b9 100644
--- a/eos/effects/shipbonussentrydronehppiratefaction.py
+++ b/eos/effects/shipbonussentrydronehppiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Sentry Drone Interfacing"),
- "hp", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "hp", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonussentrydroneshieldhppiratefaction.py b/eos/effects/shipbonussentrydroneshieldhppiratefaction.py
index d69820fca..42db4065f 100644
--- a/eos/effects/shipbonussentrydroneshieldhppiratefaction.py
+++ b/eos/effects/shipbonussentrydroneshieldhppiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Sentry Drone Interfacing"),
- "shieldCapacity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "shieldCapacity", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonussmallenergyturretdamagepiratefaction.py b/eos/effects/shipbonussmallenergyturretdamagepiratefaction.py
index 76eedd0b3..f4b2ccfca 100644
--- a/eos/effects/shipbonussmallenergyturretdamagepiratefaction.py
+++ b/eos/effects/shipbonussmallenergyturretdamagepiratefaction.py
@@ -12,4 +12,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipbonussmallmissileflighttimecf1.py b/eos/effects/shipbonussmallmissileflighttimecf1.py
new file mode 100644
index 000000000..2f755750c
--- /dev/null
+++ b/eos/effects/shipbonussmallmissileflighttimecf1.py
@@ -0,0 +1,8 @@
+# shipBonusSmallMissileFlightTimeCF1
+#
+# Used by:
+# Ship: Pacifier
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"), "explosionDelay", src.getModifiedItemAttr("shipBonusCF"), skill="Caldari Frigate")
+ fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"), "explosionDelay", src.getModifiedItemAttr("shipBonusCF"), skill="Caldari Frigate")
diff --git a/eos/effects/shipmissilespeedbonuscf.py b/eos/effects/shipbonussmallmissilerofcf2.py
similarity index 86%
rename from eos/effects/shipmissilespeedbonuscf.py
rename to eos/effects/shipbonussmallmissilerofcf2.py
index c73d8a7db..9849ecc4b 100644
--- a/eos/effects/shipmissilespeedbonuscf.py
+++ b/eos/effects/shipbonussmallmissilerofcf2.py
@@ -1,8 +1,9 @@
-# shipMissileSpeedBonusCF
+# shipBonusSmallMissileRoFCF2
#
# Used by:
# Ship: Buzzard
# Ship: Hawk
+# Ship: Pacifier
type = "passive"
diff --git a/eos/effects/shipbonussptfalloffmf2.py b/eos/effects/shipbonussptfalloffmf2.py
index 9ec05f2c4..abc07cbca 100644
--- a/eos/effects/shipbonussptfalloffmf2.py
+++ b/eos/effects/shipbonussptfalloffmf2.py
@@ -1,6 +1,7 @@
# shipBonusSPTFalloffMF2
#
# Used by:
+# Ship: Pacifier
# Ship: Rifter
type = "passive"
diff --git a/eos/effects/shipbonussptrofmf.py b/eos/effects/shipbonussptrofmf.py
new file mode 100644
index 000000000..6b226c3bf
--- /dev/null
+++ b/eos/effects/shipbonussptrofmf.py
@@ -0,0 +1,7 @@
+# shipBonusSPTRoFMF
+#
+# Used by:
+# Ship: Pacifier
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Projectile Turret"), "speed", src.getModifiedItemAttr("shipBonusMF"), skill="Minmatar Frigate")
diff --git a/eos/effects/shipbonussurveyprobeexplosiondelayskillsurveycovertops3.py b/eos/effects/shipbonussurveyprobeexplosiondelayskillsurveycovertops3.py
index 47e1b063b..08f67f3ab 100644
--- a/eos/effects/shipbonussurveyprobeexplosiondelayskillsurveycovertops3.py
+++ b/eos/effects/shipbonussurveyprobeexplosiondelayskillsurveycovertops3.py
@@ -1,7 +1,7 @@
# shipBonusSurveyProbeExplosionDelaySkillSurveyCovertOps3
#
# Used by:
-# Ships from group: Covert Ops (4 of 6)
+# Ships from group: Covert Ops (5 of 7)
type = "passive"
diff --git a/eos/effects/shipbonustitana1energywarfareamountbonus.py b/eos/effects/shipbonustitana1energywarfareamountbonus.py
new file mode 100644
index 000000000..c61632b44
--- /dev/null
+++ b/eos/effects/shipbonustitana1energywarfareamountbonus.py
@@ -0,0 +1,8 @@
+# shipBonusTitanA1EnergyWarfareAmountBonus
+#
+# Used by:
+# Ship: Molok
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", src.getModifiedItemAttr("shipBonusTitanA1"), skill="Amarr Titan")
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyNeutralizerAmount", src.getModifiedItemAttr("shipBonusTitanA1"), skill="Amarr Titan")
diff --git a/eos/effects/shipbonustitana3warpstrength.py b/eos/effects/shipbonustitana3warpstrength.py
index c7c5bfca5..e5fee5ffc 100644
--- a/eos/effects/shipbonustitana3warpstrength.py
+++ b/eos/effects/shipbonustitana3warpstrength.py
@@ -2,6 +2,7 @@
#
# Used by:
# Ship: Avatar
+# Ship: Molok
type = "passive"
diff --git a/eos/effects/shipbonustitanm1webrangebonus.py b/eos/effects/shipbonustitanm1webrangebonus.py
new file mode 100644
index 000000000..0fd26a1b7
--- /dev/null
+++ b/eos/effects/shipbonustitanm1webrangebonus.py
@@ -0,0 +1,7 @@
+# shipBonusTitanM1WebRangeBonus
+#
+# Used by:
+# Ship: Molok
+type = "passive"
+def handler(fit, src, context):
+ fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web", "maxRange", src.getModifiedItemAttr("shipBonusTitanM1"), skill="Minmatar Titan")
diff --git a/eos/effects/shipbonustitanm1webbonus.py b/eos/effects/shipbonustitanm1webstrengthbonus.py
similarity index 89%
rename from eos/effects/shipbonustitanm1webbonus.py
rename to eos/effects/shipbonustitanm1webstrengthbonus.py
index 6abfca9dd..54ba011c7 100644
--- a/eos/effects/shipbonustitanm1webbonus.py
+++ b/eos/effects/shipbonustitanm1webstrengthbonus.py
@@ -1,4 +1,4 @@
-# shipBonusTitanM1WebBonus
+# shipBonusTitanM1WebStrengthBonus
#
# Used by:
# Ship: Vanquisher
diff --git a/eos/effects/shipbonustitanm3warpstrength.py b/eos/effects/shipbonustitanm3warpstrength.py
index de59fc61e..7fba2f0da 100644
--- a/eos/effects/shipbonustitanm3warpstrength.py
+++ b/eos/effects/shipbonustitanm3warpstrength.py
@@ -1,8 +1,7 @@
# shipBonusTitanM3WarpStrength
#
# Used by:
-# Ship: Ragnarok
-# Ship: Vanquisher
+# Ships from group: Titan (3 of 6)
type = "passive"
diff --git a/eos/effects/shipcapitalagilitybonus.py b/eos/effects/shipcapitalagilitybonus.py
index 71c8e0ca4..4313eb4b4 100644
--- a/eos/effects/shipcapitalagilitybonus.py
+++ b/eos/effects/shipcapitalagilitybonus.py
@@ -1,12 +1,7 @@
# shipCapitalAgilityBonus
#
# Used by:
-# Ships from group: Carrier (4 of 4)
-# Ships from group: Dreadnought (5 of 5)
-# Ships from group: Force Auxiliary (4 of 4)
-# Ships from group: Supercarrier (6 of 6)
-# Ships from group: Titan (5 of 5)
-# Ship: Rorqual
+# Items from market group: Ships > Capital Ships (28 of 37)
type = "passive"
diff --git a/eos/effects/shipetdamageaf.py b/eos/effects/shipetdamageaf.py
index bc11bd6b9..939e163fa 100644
--- a/eos/effects/shipetdamageaf.py
+++ b/eos/effects/shipetdamageaf.py
@@ -4,6 +4,7 @@
# Ship: Crucifier Navy Issue
# Ship: Crusader
# Ship: Imperial Navy Slicer
+# Ship: Pacifier
type = "passive"
diff --git a/eos/effects/shipetoptimalrange2af.py b/eos/effects/shipetoptimalrange2af.py
index 49602fd47..99b829ab7 100644
--- a/eos/effects/shipetoptimalrange2af.py
+++ b/eos/effects/shipetoptimalrange2af.py
@@ -2,6 +2,7 @@
#
# Used by:
# Ship: Imperial Navy Slicer
+# Ship: Pacifier
type = "passive"
diff --git a/eos/effects/shipheavyassaultmissileemdmgpiratecruiser.py b/eos/effects/shipheavyassaultmissileemdmgpiratecruiser.py
index 50aecade1..4aff9d4a1 100644
--- a/eos/effects/shipheavyassaultmissileemdmgpiratecruiser.py
+++ b/eos/effects/shipheavyassaultmissileemdmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
- "emDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "emDamage", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipheavyassaultmissileexpdmgpiratecruiser.py b/eos/effects/shipheavyassaultmissileexpdmgpiratecruiser.py
index 089ec066b..be21d8f51 100644
--- a/eos/effects/shipheavyassaultmissileexpdmgpiratecruiser.py
+++ b/eos/effects/shipheavyassaultmissileexpdmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
- "explosiveDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipheavyassaultmissilekindmgpiratecruiser.py b/eos/effects/shipheavyassaultmissilekindmgpiratecruiser.py
index 81706525a..bbc9b2a43 100644
--- a/eos/effects/shipheavyassaultmissilekindmgpiratecruiser.py
+++ b/eos/effects/shipheavyassaultmissilekindmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
- "kineticDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipheavyassaultmissilethermdmgpiratecruiser.py b/eos/effects/shipheavyassaultmissilethermdmgpiratecruiser.py
index 15d354e63..928d0a52c 100644
--- a/eos/effects/shipheavyassaultmissilethermdmgpiratecruiser.py
+++ b/eos/effects/shipheavyassaultmissilethermdmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"),
- "thermalDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipheavymissileemdmgpiratecruiser.py b/eos/effects/shipheavymissileemdmgpiratecruiser.py
index 567d8a110..2b3003818 100644
--- a/eos/effects/shipheavymissileemdmgpiratecruiser.py
+++ b/eos/effects/shipheavymissileemdmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
- "emDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "emDamage", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipheavymissileexpdmgpiratecruiser.py b/eos/effects/shipheavymissileexpdmgpiratecruiser.py
index b2f3179cb..73ca9bf7f 100644
--- a/eos/effects/shipheavymissileexpdmgpiratecruiser.py
+++ b/eos/effects/shipheavymissileexpdmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
- "explosiveDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "explosiveDamage", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipheavymissilekindmgpiratecruiser.py b/eos/effects/shipheavymissilekindmgpiratecruiser.py
index 0d3543ddd..e1efd07ec 100644
--- a/eos/effects/shipheavymissilekindmgpiratecruiser.py
+++ b/eos/effects/shipheavymissilekindmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
- "kineticDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "kineticDamage", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipheavymissilethermdmgpiratecruiser.py b/eos/effects/shipheavymissilethermdmgpiratecruiser.py
index f50b05771..28990be6a 100644
--- a/eos/effects/shipheavymissilethermdmgpiratecruiser.py
+++ b/eos/effects/shipheavymissilethermdmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"),
- "thermalDamage", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "thermalDamage", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shiphtdmgbonusfixedgc.py b/eos/effects/shiphtdmgbonusfixedgc.py
index 39ebd7b33..e6dfd16a2 100644
--- a/eos/effects/shiphtdmgbonusfixedgc.py
+++ b/eos/effects/shiphtdmgbonusfixedgc.py
@@ -4,6 +4,7 @@
# Ship: Adrestia
# Ship: Arazu
# Ship: Deimos
+# Ship: Enforcer
# Ship: Exequror Navy Issue
# Ship: Guardian-Vexor
# Ship: Thorax
diff --git a/eos/effects/shiphybriddmgpiratebattleship.py b/eos/effects/shiphybriddmgpiratebattleship.py
index dd959b187..417ed58aa 100644
--- a/eos/effects/shiphybriddmgpiratebattleship.py
+++ b/eos/effects/shiphybriddmgpiratebattleship.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Hybrid Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shiphybriddmgpiratecruiser.py b/eos/effects/shiphybriddmgpiratecruiser.py
index b0987b4b4..7d01b20c6 100644
--- a/eos/effects/shiphybriddmgpiratecruiser.py
+++ b/eos/effects/shiphybriddmgpiratecruiser.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shiphybridtrackinggc2.py b/eos/effects/shiphybridtrackinggc2.py
index 5f2eac55a..4169cca0d 100644
--- a/eos/effects/shiphybridtrackinggc2.py
+++ b/eos/effects/shiphybridtrackinggc2.py
@@ -1,6 +1,7 @@
# shipHybridTrackingGC2
#
# Used by:
+# Ship: Enforcer
# Ship: Thorax
type = "passive"
diff --git a/eos/effects/shiplaserdamagepiratebattleship.py b/eos/effects/shiplaserdamagepiratebattleship.py
index 7625b2383..ff1e9558a 100644
--- a/eos/effects/shiplaserdamagepiratebattleship.py
+++ b/eos/effects/shiplaserdamagepiratebattleship.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipmetcdamagebonusac.py b/eos/effects/shipmetcdamagebonusac.py
index 485d71457..8cdb47763 100644
--- a/eos/effects/shipmetcdamagebonusac.py
+++ b/eos/effects/shipmetcdamagebonusac.py
@@ -2,6 +2,7 @@
#
# Used by:
# Ship: Augoror Navy Issue
+# Ship: Enforcer
# Ship: Maller
# Ship: Omen Navy Issue
type = "passive"
diff --git a/eos/effects/shipmissilerofcc.py b/eos/effects/shipmissilerofcc.py
index 785726f9c..bda638ace 100644
--- a/eos/effects/shipmissilerofcc.py
+++ b/eos/effects/shipmissilerofcc.py
@@ -2,6 +2,7 @@
#
# Used by:
# Ships named like: Caracal (2 of 2)
+# Ship: Enforcer
type = "passive"
diff --git a/eos/effects/shipmissilevelocitypiratefactionfrigate.py b/eos/effects/shipmissilevelocitypiratefactionfrigate.py
index 4e4e03685..16c3df09c 100644
--- a/eos/effects/shipmissilevelocitypiratefactionfrigate.py
+++ b/eos/effects/shipmissilevelocitypiratefactionfrigate.py
@@ -9,4 +9,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
- "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipmissilevelocitypiratefactionlight.py b/eos/effects/shipmissilevelocitypiratefactionlight.py
index ece99d75b..1cea02ec3 100644
--- a/eos/effects/shipmissilevelocitypiratefactionlight.py
+++ b/eos/effects/shipmissilevelocitypiratefactionlight.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"),
- "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipmissilevelocitypiratefactionrocket.py b/eos/effects/shipmissilevelocitypiratefactionrocket.py
index 23cf6f34b..cc6e55c5d 100644
--- a/eos/effects/shipmissilevelocitypiratefactionrocket.py
+++ b/eos/effects/shipmissilevelocitypiratefactionrocket.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"),
- "maxVelocity", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "maxVelocity", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipmoduleguidancedisruptor.py b/eos/effects/shipmoduleguidancedisruptor.py
index 1588d52d7..a48eb6e78 100644
--- a/eos/effects/shipmoduleguidancedisruptor.py
+++ b/eos/effects/shipmoduleguidancedisruptor.py
@@ -5,7 +5,7 @@
type = "active", "projected"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" in context:
for srcAttr, tgtAttr in (
("aoeCloudSizeBonus", "aoeCloudSize"),
@@ -15,4 +15,4 @@ def handler(fit, module, context):
):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
tgtAttr, module.getModifiedItemAttr(srcAttr),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/shipmoduletrackingdisruptor.py b/eos/effects/shipmoduletrackingdisruptor.py
index e970dae3c..1ddd85f94 100644
--- a/eos/effects/shipmoduletrackingdisruptor.py
+++ b/eos/effects/shipmoduletrackingdisruptor.py
@@ -5,14 +5,14 @@
type = "projected", "active"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" in context:
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"maxRange", module.getModifiedItemAttr("maxRangeBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"falloff", module.getModifiedItemAttr("falloffBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/shipprojectiledmgpiratecruiser.py b/eos/effects/shipprojectiledmgpiratecruiser.py
index 6753262b9..f8c60bd63 100644
--- a/eos/effects/shipprojectiledmgpiratecruiser.py
+++ b/eos/effects/shipprojectiledmgpiratecruiser.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipprojectilerofpiratebattleship.py b/eos/effects/shipprojectilerofpiratebattleship.py
index dac3c2544..9b0a7168f 100644
--- a/eos/effects/shipprojectilerofpiratebattleship.py
+++ b/eos/effects/shipprojectilerofpiratebattleship.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Projectile Turret"),
- "speed", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "speed", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipprojectilerofpiratecruiser.py b/eos/effects/shipprojectilerofpiratecruiser.py
index fae33e206..25a500674 100644
--- a/eos/effects/shipprojectilerofpiratecruiser.py
+++ b/eos/effects/shipprojectilerofpiratecruiser.py
@@ -8,4 +8,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
- "speed", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "speed", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shippturretfalloffbonusmc2.py b/eos/effects/shippturretfalloffbonusmc2.py
index b47f36f1d..85f4a70f8 100644
--- a/eos/effects/shippturretfalloffbonusmc2.py
+++ b/eos/effects/shippturretfalloffbonusmc2.py
@@ -1,6 +1,7 @@
# shipPTurretFalloffBonusMC2
#
# Used by:
+# Ship: Enforcer
# Ship: Stabber
type = "passive"
diff --git a/eos/effects/shippturretspeedbonusmc.py b/eos/effects/shippturretspeedbonusmc.py
index 713a2b7de..1f360a87a 100644
--- a/eos/effects/shippturretspeedbonusmc.py
+++ b/eos/effects/shippturretspeedbonusmc.py
@@ -3,6 +3,7 @@
# Used by:
# Variations of ship: Rupture (3 of 3)
# Variations of ship: Stabber (3 of 3)
+# Ship: Enforcer
# Ship: Huginn
# Ship: Scythe Fleet Issue
type = "passive"
diff --git a/eos/effects/shipscanprobestrengthbonuspiratefaction.py b/eos/effects/shipscanprobestrengthbonuspiratefaction.py
index c5146f252..26ccc7c2c 100644
--- a/eos/effects/shipscanprobestrengthbonuspiratefaction.py
+++ b/eos/effects/shipscanprobestrengthbonuspiratefaction.py
@@ -7,4 +7,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Astrometrics"),
- "baseSensorStrength", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "baseSensorStrength", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipshtdmgbonusgf.py b/eos/effects/shipshtdmgbonusgf.py
index 3162880ba..d99426da0 100644
--- a/eos/effects/shipshtdmgbonusgf.py
+++ b/eos/effects/shipshtdmgbonusgf.py
@@ -5,6 +5,7 @@
# Ship: Atron
# Ship: Federation Navy Comet
# Ship: Helios
+# Ship: Pacifier
# Ship: Taranis
type = "passive"
diff --git a/eos/effects/shipsmallmissiledmgpiratefaction.py b/eos/effects/shipsmallmissiledmgpiratefaction.py
index db9e10202..3a21076cc 100644
--- a/eos/effects/shipsmallmissiledmgpiratefaction.py
+++ b/eos/effects/shipsmallmissiledmgpiratefaction.py
@@ -10,4 +10,4 @@ def handler(fit, ship, context):
for damageType in ("em", "explosive", "kinetic", "thermal"):
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill("Rockets") or mod.charge.requiresSkill("Light Missiles"),
- "{0}Damage".format(damageType), ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "{0}Damage".format(damageType), ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/shipxlprojectiledamagerole.py b/eos/effects/shipxlprojectiledamagerole.py
index 62f670f18..eaa09058e 100644
--- a/eos/effects/shipxlprojectiledamagerole.py
+++ b/eos/effects/shipxlprojectiledamagerole.py
@@ -4,4 +4,4 @@ type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Projectile Turret"),
- "damageMultiplier", ship.getModifiedItemAttr("shipBonusPirateFaction"))
+ "damageMultiplier", ship.getModifiedItemAttr("shipBonusRole7"))
diff --git a/eos/effects/structuremoduleeffectremotesensordampener.py b/eos/effects/structuremoduleeffectremotesensordampener.py
index 7260ef623..08aa61e57 100644
--- a/eos/effects/structuremoduleeffectremotesensordampener.py
+++ b/eos/effects/structuremoduleeffectremotesensordampener.py
@@ -3,12 +3,12 @@
type = "projected", "active"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" not in context:
return
fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/structuremoduleeffectstasiswebifier.py b/eos/effects/structuremoduleeffectstasiswebifier.py
index 0aa907fc6..aa0b0d553 100644
--- a/eos/effects/structuremoduleeffectstasiswebifier.py
+++ b/eos/effects/structuremoduleeffectstasiswebifier.py
@@ -2,8 +2,8 @@
type = "active", "projected"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" not in context:
return
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/structuremoduleeffecttargetpainter.py b/eos/effects/structuremoduleeffecttargetpainter.py
index aac9005ba..7c15140e3 100644
--- a/eos/effects/structuremoduleeffecttargetpainter.py
+++ b/eos/effects/structuremoduleeffecttargetpainter.py
@@ -2,7 +2,7 @@
type = "projected", "active"
-def handler(fit, container, context):
+def handler(fit, container, context, *args, **kwargs):
if "projected" in context:
fit.ship.boostItemAttr("signatureRadius", container.getModifiedItemAttr("signatureRadiusBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/effects/structuremoduleeffectweapondisruption.py b/eos/effects/structuremoduleeffectweapondisruption.py
index 82e67797e..3b6365e37 100644
--- a/eos/effects/structuremoduleeffectweapondisruption.py
+++ b/eos/effects/structuremoduleeffectweapondisruption.py
@@ -3,7 +3,7 @@
type = "active", "projected"
-def handler(fit, module, context):
+def handler(fit, module, context, *args, **kwargs):
if "projected" in context:
for srcAttr, tgtAttr in (
("aoeCloudSizeBonus", "aoeCloudSize"),
@@ -13,14 +13,14 @@ def handler(fit, module, context):
):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
tgtAttr, module.getModifiedItemAttr(srcAttr),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"maxRange", module.getModifiedItemAttr("maxRangeBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"falloff", module.getModifiedItemAttr("falloffBonus"),
- stackingPenalties=True, remoteResists=True)
+ stackingPenalties=True, *args, **kwargs)
diff --git a/eos/gamedata.py b/eos/gamedata.py
index f6ea5183c..6b82423a1 100644
--- a/eos/gamedata.py
+++ b/eos/gamedata.py
@@ -33,8 +33,6 @@ except ImportError:
from logbook import Logger
pyfalog = Logger(__name__)
-# Keep a list of handlers that fail to import so we don't keep trying repeatedly.
-badHandlers = []
class Effect(EqBase):
@@ -162,51 +160,41 @@ class Effect(EqBase):
Grab the handler, type and runTime from the effect code if it exists,
if it doesn't, set dummy values and add a dummy handler
"""
- global badHandlers
- # Skip if we've tried to import before and failed
- if self.handlerName not in badHandlers:
- try:
- self.__effectModule = effectModule = __import__('eos.effects.' + self.handlerName, fromlist=True)
- self.__handler = getattr(effectModule, "handler", effectDummy)
- self.__runTime = getattr(effectModule, "runTime", "normal")
- self.__activeByDefault = getattr(effectModule, "activeByDefault", True)
- t = getattr(effectModule, "type", None)
+ pyfalog.debug("Generate effect handler for {}".format(self.name))
- t = t if isinstance(t, tuple) or t is None else (t,)
- self.__type = t
- except (ImportError) as e:
- # Effect probably doesn't exist, so create a dummy effect and flag it with a warning.
- self.__handler = effectDummy
- self.__runTime = "normal"
- self.__activeByDefault = True
- self.__type = None
- pyfalog.debug("ImportError generating handler: {0}", e)
- badHandlers.append(self.handlerName)
- except (AttributeError) as e:
- # Effect probably exists but there is an issue with it. Turn it into a dummy effect so we can continue, but flag it with an error.
- self.__handler = effectDummy
- self.__runTime = "normal"
- self.__activeByDefault = True
- self.__type = None
- pyfalog.error("AttributeError generating handler: {0}", e)
- badHandlers.append(self.handlerName)
- except Exception as e:
- self.__handler = effectDummy
- self.__runTime = "normal"
- self.__activeByDefault = True
- self.__type = None
- pyfalog.critical("Exception generating handler:")
- pyfalog.critical(e)
- badHandlers.append(self.handlerName)
+ try:
+ self.__effectModule = effectModule = __import__('eos.effects.' + self.handlerName, fromlist=True)
+ self.__handler = getattr(effectModule, "handler", effectDummy)
+ self.__runTime = getattr(effectModule, "runTime", "normal")
+ self.__activeByDefault = getattr(effectModule, "activeByDefault", True)
+ t = getattr(effectModule, "type", None)
- self.__generated = True
- else:
- # We've already failed on this one, just pass a dummy effect back
+ t = t if isinstance(t, tuple) or t is None else (t,)
+ self.__type = t
+ except (ImportError) as e:
+ # Effect probably doesn't exist, so create a dummy effect and flag it with a warning.
self.__handler = effectDummy
self.__runTime = "normal"
self.__activeByDefault = True
self.__type = None
+ pyfalog.debug("ImportError generating handler: {0}", e)
+ except (AttributeError) as e:
+ # Effect probably exists but there is an issue with it. Turn it into a dummy effect so we can continue, but flag it with an error.
+ self.__handler = effectDummy
+ self.__runTime = "normal"
+ self.__activeByDefault = True
+ self.__type = None
+ pyfalog.error("AttributeError generating handler: {0}", e)
+ except Exception as e:
+ self.__handler = effectDummy
+ self.__runTime = "normal"
+ self.__activeByDefault = True
+ self.__type = None
+ pyfalog.critical("Exception generating handler:")
+ pyfalog.critical(e)
+
+ self.__generated = True
def getattr(self, key):
if not self.__generated:
@@ -471,7 +459,7 @@ class MetaData(EqBase):
pass
-class EffectInfo(EqBase):
+class ItemEffect(EqBase):
pass
diff --git a/eos/modifiedAttributeDict.py b/eos/modifiedAttributeDict.py
index 9658d6855..c8482f15e 100644
--- a/eos/modifiedAttributeDict.py
+++ b/eos/modifiedAttributeDict.py
@@ -325,7 +325,7 @@ class ModifiedAttributeDict(collections.MutableMapping):
self.__placehold(attributeName)
self.__afflict(attributeName, "+", increase, increase != 0)
- def multiply(self, attributeName, multiplier, stackingPenalties=False, penaltyGroup="default", skill=None):
+ def multiply(self, attributeName, multiplier, stackingPenalties=False, penaltyGroup="default", skill=None, resist=True, *args, **kwargs):
"""Multiply value of given attribute by given factor"""
if multiplier is None: # See GH issue 397
return
@@ -349,27 +349,44 @@ class ModifiedAttributeDict(collections.MutableMapping):
self.__multipliers[attributeName] *= multiplier
self.__placehold(attributeName)
- self.__afflict(attributeName, "%s*" % ("s" if stackingPenalties else ""), multiplier, multiplier != 1)
- def boost(self, attributeName, boostFactor, skill=None, remoteResists=False, *args, **kwargs):
+ afflictPenal = ""
+ if stackingPenalties:
+ afflictPenal += "s"
+ if resist:
+ afflictPenal += "r"
+
+ self.__afflict(attributeName, "%s*" % (afflictPenal), multiplier, multiplier != 1)
+
+ def boost(self, attributeName, boostFactor, skill=None, *args, **kwargs):
"""Boost value by some percentage"""
if skill:
boostFactor *= self.__handleSkill(skill)
- if remoteResists:
- # @todo: this is such a disgusting hack. Look into sending these checks to the module class before the
- # effect is applied.
- mod = self.fit.getModifier()
- remoteResistID = mod.getModifiedItemAttr("remoteResistanceID") or None
+ resist = None
- # We really don't have a way of getting a ships attribute by ID. Fail.
- resist = next((x for x in self.fit.ship.item.attributes.values() if x.ID == remoteResistID), None)
+ # Goddammit CCP, make up you mind where you want this information >.< See #1139
+ if 'effect' in kwargs:
+ remoteResistID = kwargs['effect'].resistanceID
- if remoteResistID and resist:
- boostFactor *= resist.value
+ # If it doesn't exist on the effect, check the modifying modules attributes. If it's there, set it on the
+ # effect for this session so that we don't have to look here again (won't always work when it's None, but
+ # will catch most)
+ if not remoteResistID:
+ mod = self.fit.getModifier()
+ kwargs['effect'].resistanceID = int(mod.getModifiedItemAttr("remoteResistanceID")) or None
+ remoteResistID = kwargs['effect'].resistanceID
+
+ attrInfo = getAttributeInfo(remoteResistID)
+
+ # Get the attribute of the resist
+ resist = self.fit.ship.itemModifiedAttributes[attrInfo.attributeName] or None
+
+ if resist:
+ boostFactor *= resist
# We just transform percentage boost into multiplication factor
- self.multiply(attributeName, 1 + boostFactor / 100.0, *args, **kwargs)
+ self.multiply(attributeName, 1 + boostFactor / 100.0, resist=(True if resist else False), *args, **kwargs)
def force(self, attributeName, value):
"""Force value to attribute and prohibit any changes to it"""
diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py
index f962e891a..bb316e01d 100644
--- a/eos/saveddata/character.py
+++ b/eos/saveddata/character.py
@@ -43,6 +43,7 @@ class Character(object):
self.__skillIdMap = {}
self.dirtySkills = set()
self.alphaClone = None
+ self.secStatus = 0.0
if initSkills:
for item in self.getSkillList():
@@ -116,11 +117,12 @@ class Character(object):
return all0
- def apiUpdateCharSheet(self, skills):
+ def apiUpdateCharSheet(self, skills, secStatus):
del self.__skills[:]
self.__skillIdMap.clear()
for skillRow in skills:
self.addSkill(Skill(skillRow["typeID"], skillRow["level"]))
+ self.secStatus = secStatus
@property
def ro(self):
diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py
index 8734c268d..2ce1b52ab 100644
--- a/eos/saveddata/drone.py
+++ b/eos/saveddata/drone.py
@@ -100,6 +100,10 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
def charge(self):
return self.__charge
+ @property
+ def cycleTime(self):
+ return max(self.getModifiedItemAttr("duration"), 0)
+
@property
def dealsDamage(self):
for attr in ("emDamage", "kineticDamage", "explosiveDamage", "thermalDamage"):
diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py
index 014c69fa6..30119250e 100644
--- a/eos/saveddata/fit.py
+++ b/eos/saveddata/fit.py
@@ -29,6 +29,7 @@ from eos import capSim
from eos.effectHandlerHelpers import HandledModuleList, HandledDroneCargoList, HandledImplantBoosterList, HandledProjectedDroneList, HandledProjectedModList
from eos.enum import Enum
from eos.saveddata.ship import Ship
+from eos.saveddata.drone import Drone
from eos.saveddata.character import Character
from eos.saveddata.citadel import Citadel
from eos.saveddata.module import Module, State, Slot, Hardpoint
@@ -1230,24 +1231,33 @@ class Fit(object):
if force_recalc is False:
return self.__remoteReps
- # We are rerunning the recalcs. Explicitly set to 0 to make sure we don't duplicate anything and correctly set all values to 0.
+ # We are rerunning the recalcs. Explicitly set to 0 to make sure we don't duplicate anything and correctly set
+ # all values to 0.
for remote_type in self.__remoteReps:
self.__remoteReps[remote_type] = 0
- for module in self.modules:
- # Skip empty and non-Active modules
- if module.isEmpty or module.state < State.ACTIVE:
+ for stuff in chain(self.modules, self.drones):
+ remote_type = None
+
+ # Only apply the charged multiplier if we have a charge in our ancil reppers (#1135)
+ if stuff.charge:
+ modifier = stuff.getModifiedItemAttr("chargedArmorDamageMultiplier", 1)
+ else:
+ modifier = 1
+
+ if isinstance(stuff, Module) and (stuff.isEmpty or stuff.state < State.ACTIVE):
continue
+ elif isinstance(stuff, Drone):
+ # drones don't have fueled charges, so simply override modifier with the amount of drones active
+ modifier = stuff.amountActive
# Covert cycleTime to seconds
- duration = module.cycleTime / 1000
+ duration = stuff.cycleTime / 1000
# Skip modules with no duration.
if not duration:
continue
- fueledMultiplier = module.getModifiedItemAttr("chargedArmorDamageMultiplier", 1)
-
remote_module_groups = {
"Remote Armor Repairer" : "Armor",
"Ancillary Remote Armor Repairer": "Armor",
@@ -1257,26 +1267,38 @@ class Fit(object):
"Remote Capacitor Transmitter" : "Capacitor",
}
- module_group = module.item.group.name
+ module_group = stuff.item.group.name
if module_group in remote_module_groups:
remote_type = remote_module_groups[module_group]
- else:
+ elif not isinstance(stuff, Drone):
# Module isn't in our list of remote rep modules, bail
continue
if remote_type == "Hull":
- hp = module.getModifiedItemAttr("structureDamageAmount", 0)
+ hp = stuff.getModifiedItemAttr("structureDamageAmount", 0)
elif remote_type == "Armor":
- hp = module.getModifiedItemAttr("armorDamageAmount", 0)
+ hp = stuff.getModifiedItemAttr("armorDamageAmount", 0)
elif remote_type == "Shield":
- hp = module.getModifiedItemAttr("shieldBonus", 0)
+ hp = stuff.getModifiedItemAttr("shieldBonus", 0)
elif remote_type == "Capacitor":
- hp = module.getModifiedItemAttr("powerTransferAmount", 0)
+ hp = stuff.getModifiedItemAttr("powerTransferAmount", 0)
else:
- hp = 0
-
- self.__remoteReps[remote_type] += (hp * fueledMultiplier) / duration
+ droneShield = stuff.getModifiedItemAttr("shieldBonus", 0)
+ droneArmor = stuff.getModifiedItemAttr("armorDamageAmount", 0)
+ droneHull = stuff.getModifiedItemAttr("structureDamageAmount", 0)
+ if droneShield:
+ remote_type = "Shield"
+ hp = droneShield
+ elif droneArmor:
+ remote_type = "Armor"
+ hp = droneArmor
+ elif droneHull:
+ remote_type = "Hull"
+ hp = droneHull
+ else:
+ hp = 0
+ self.__remoteReps[remote_type] += (hp * modifier) / duration
return self.__remoteReps
diff --git a/eve.db b/eve.db
index f0717cc7c..4b5bd1001 100644
Binary files a/eve.db and b/eve.db differ
diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py
index c1e12f29c..e4130f2fe 100644
--- a/gui/builtinViewColumns/misc.py
+++ b/gui/builtinViewColumns/misc.py
@@ -27,6 +27,7 @@ from gui.viewColumn import ViewColumn
from gui.bitmapLoader import BitmapLoader
from gui.utils.numberFormatter import formatAmount
from gui.utils.listFormatter import formatList
+from eos.saveddata.drone import Drone
class Miscellanea(ViewColumn):
@@ -417,7 +418,11 @@ class Miscellanea(ViewColumn):
cycleTime = stuff.getModifiedItemAttr("duration")
if not repAmount or not cycleTime:
return "", None
- repPerSec = float(repAmount) * 1000 / cycleTime
+ repPerSecPerDrone = repPerSec = float(repAmount) * 1000 / cycleTime
+
+ if isinstance(stuff, Drone):
+ repPerSec *= stuff.amount
+
text = "{0}/s".format(formatAmount(repPerSec, 3, 0, 3))
ttEntries = []
if hullAmount is not None and repAmount == hullAmount:
@@ -426,7 +431,8 @@ class Miscellanea(ViewColumn):
ttEntries.append("armor")
if shieldAmount is not None and repAmount == shieldAmount:
ttEntries.append("shield")
- tooltip = "{0} repaired per second".format(formatList(ttEntries)).capitalize()
+
+ tooltip = "{0} HP repaired per second\n{1} HP/s per drone".format(formatList(ttEntries).capitalize(), repPerSecPerDrone)
return text, tooltip
elif itemGroup == "Energy Neutralizer Drone":
neutAmount = stuff.getModifiedItemAttr("energyNeutralizerAmount")
diff --git a/gui/characterEditor.py b/gui/characterEditor.py
index 8006fa56a..00963f6c9 100644
--- a/gui/characterEditor.py
+++ b/gui/characterEditor.py
@@ -657,14 +657,19 @@ class APIView(wx.Panel):
def fetchSkills(self, event):
charName = self.charChoice.GetString(self.charChoice.GetSelection())
if charName:
- try:
- sChar = Character.getInstance()
- activeChar = self.charEditor.entityEditor.getActiveEntity()
- sChar.apiFetch(activeChar.ID, charName)
- self.stStatus.SetLabel("Successfully fetched %s\'s skills from EVE API." % charName)
- except Exception, e:
- pyfalog.error("Unable to retrieve {0}\'s skills. Error message:\n{1}", charName, e)
- self.stStatus.SetLabel("Unable to retrieve %s\'s skills. Error message:\n%s" % (charName, e))
+ sChar = Character.getInstance()
+ activeChar = self.charEditor.entityEditor.getActiveEntity()
+ sChar.apiFetch(activeChar.ID, charName, self.__fetchCallback)
+ self.stStatus.SetLabel("Getting skills for {}".format(charName))
+
+ def __fetchCallback(self, e=None):
+ charName = self.charChoice.GetString(self.charChoice.GetSelection())
+ if e is None:
+ self.stStatus.SetLabel("Successfully fetched {}\'s skills from EVE API.".format(charName))
+ else:
+ exc_type, exc_obj, exc_trace = e
+ pyfalog.error("Unable to retrieve {0}\'s skills. Error message:\n{1}".format(charName, exc_obj))
+ self.stStatus.SetLabel("Unable to retrieve {}\'s skills. Error message:\n{}".format(charName, exc_obj))
class SaveCharacterAs(wx.Dialog):
diff --git a/gui/characterSelection.py b/gui/characterSelection.py
index 4b6fddc73..6faead513 100644
--- a/gui/characterSelection.py
+++ b/gui/characterSelection.py
@@ -25,6 +25,7 @@ import gui.mainFrame
from service.character import Character
from service.fit import Fit
from logbook import Logger
+
pyfalog = Logger(__name__)
@@ -109,16 +110,24 @@ class CharacterSelection(wx.Panel):
event.Skip()
def refreshApi(self, event):
+ self.btnRefresh.Enable(False)
sChar = Character.getInstance()
ID, key, charName, chars = sChar.getApiDetails(self.getActiveCharacter())
if charName:
- try:
- sChar.apiFetch(self.getActiveCharacter(), charName)
- except Exception as e:
- # can we do a popup, notifying user of API error?
- pyfalog.error("API fetch error")
- pyfalog.error(e)
- self.refreshCharacterList()
+ sChar.apiFetch(self.getActiveCharacter(), charName, self.refreshAPICallback)
+
+ def refreshAPICallback(self, e=None):
+ self.btnRefresh.Enable(True)
+ if e is None:
+ self.refreshCharacterList()
+ else:
+ exc_type, exc_obj, exc_trace = e
+ pyfalog.warn("Error fetching API information for character")
+ pyfalog.warn(exc_obj)
+
+ wx.MessageBox(
+ "Error fetching API information, please check your API details in the character editor and try again later",
+ "Error", wx.ICON_ERROR | wx.STAY_ON_TOP)
def charChanged(self, event):
fitID = self.mainFrame.getActiveFit()
diff --git a/gui/itemStats.py b/gui/itemStats.py
index 788414292..0a49b3846 100644
--- a/gui/itemStats.py
+++ b/gui/itemStats.py
@@ -1144,11 +1144,13 @@ class ItemAffectedBy(wx.Panel):
if projected:
displayStr += " (projected)"
- if attrModifier == "s*":
- attrModifier = "*"
- penalized = "(penalized)"
- else:
- penalized = ""
+ penalized = ""
+ if '*' in attrModifier:
+ if 's' in attrModifier:
+ penalized += "(penalized)"
+ if 'r' in attrModifier:
+ penalized += "(resisted)"
+ attrModifier = "*"
# this is the Module node, the attribute will be attached to this
display = "%s %s %.2f %s" % (displayStr, attrModifier, attrAmount, penalized)
@@ -1274,11 +1276,13 @@ class ItemAffectedBy(wx.Panel):
else:
attrIcon = self.imageList.Add(BitmapLoader.getBitmap("7_15", "icons"))
- if attrModifier == "s*":
- attrModifier = "*"
- penalized = "(penalized)"
- else:
- penalized = ""
+ penalized = ""
+ if '*' in attrModifier:
+ if 's' in attrModifier:
+ penalized += "(penalized)"
+ if 'r' in attrModifier:
+ penalized += "(resisted)"
+ attrModifier = "*"
attributes.append((attrName, (displayName if displayName != "" else attrName), attrModifier,
attrAmount, penalized, attrIcon))
diff --git a/service/character.py b/service/character.py
index 1e5185b69..602bcb273 100644
--- a/service/character.py
+++ b/service/character.py
@@ -17,9 +17,11 @@
# along with pyfa. If not, see .
# =============================================================================
+import sys
import copy
import itertools
import json
+
from logbook import Logger
import threading
from codecs import open
@@ -350,26 +352,13 @@ class Character(object):
char.chars = json.dumps(charList)
return charList
- @staticmethod
- def apiFetch(charID, charName):
- dbChar = eos.db.getCharacter(charID)
- dbChar.defaultChar = charName
+ def apiFetch(self, charID, charName, callback):
+ thread = UpdateAPIThread(charID, charName, (self.apiFetchCallback, callback))
+ thread.start()
- api = EVEAPIConnection()
- auth = api.auth(keyID=dbChar.apiID, vCode=dbChar.apiKey)
- apiResult = auth.account.Characters()
- charID = None
- for char in apiResult.characters:
- if char.name == charName:
- charID = char.characterID
-
- if charID is None:
- return
-
- sheet = auth.character(charID).CharacterSheet()
-
- dbChar.apiUpdateCharSheet(sheet.skills)
+ def apiFetchCallback(self, guiCallback, e=None):
eos.db.commit()
+ wx.CallAfter(guiCallback, e)
@staticmethod
def apiUpdateCharSheet(charID, skills):
@@ -458,3 +447,38 @@ class Character(object):
self._checkRequirements(fit, char, req, subs)
return reqs
+
+
+class UpdateAPIThread(threading.Thread):
+ def __init__(self, charID, charName, callback):
+ threading.Thread.__init__(self)
+
+ self.name = "CheckUpdate"
+ self.callback = callback
+ self.charID = charID
+ self.charName = charName
+
+ def run(self):
+ try:
+ dbChar = eos.db.getCharacter(self.charID)
+ dbChar.defaultChar = self.charName
+
+ api = EVEAPIConnection()
+ auth = api.auth(keyID=dbChar.apiID, vCode=dbChar.apiKey)
+ apiResult = auth.account.Characters()
+ charID = None
+ for char in apiResult.characters:
+ if char.name == self.charName:
+ charID = char.characterID
+ break
+
+ if charID is None:
+ return
+
+ sheet = auth.character(charID).CharacterSheet()
+ charInfo = api.eve.CharacterInfo(characterID=charID)
+
+ dbChar.apiUpdateCharSheet(sheet.skills, charInfo.securityStatus)
+ self.callback[0](self.callback[1])
+ except Exception:
+ self.callback[0](self.callback[1], sys.exc_info())