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())