diff --git a/eos/effects/citadelrigbonus.py b/eos/effects/citadelrigbonus.py new file mode 100644 index 000000000..a04c6f479 --- /dev/null +++ b/eos/effects/citadelrigbonus.py @@ -0,0 +1,21 @@ +# Not used by any item +type = "passive" +runTime = "early" + + +def handler(fit, src, context): + + for attr in [ + "structureRigDoomsdayDamageLossTargetBonus", + "structureRigScanResBonus", + "structureRigPDRangeBonus", + "structureRigPDCapUseBonus", + "structureRigMissileExploVeloBonus", + "structureRigMissileVelocityBonus", + "structureRigEwarOptimalBonus", + "structureRigEwarFalloffBonus", + "structureRigEwarCapUseBonus", + "structureRigMissileExplosionRadiusBonus" + ]: + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Jury Rigging"), + attr, src.getModifiedItemAttr("structureRoleBonus")) diff --git a/eos/effects/doomsdayaoedamp.py b/eos/effects/doomsdayaoedamp.py new file mode 100644 index 000000000..f943c9153 --- /dev/null +++ b/eos/effects/doomsdayaoedamp.py @@ -0,0 +1,16 @@ +# doomsdayAOEDamp +# +# Used by: +# Module: Sensor Dampening Burst Projector +type = "projected", "active" + + +def handler(fit, module, context, *args, **kwargs): + if "projected" not in context: + return + + fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"), + stackingPenalties=True, *args, **kwargs) + + fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"), + stackingPenalties=True, *args, **kwargs) diff --git a/eos/effects/doomsdayaoeneut.py b/eos/effects/doomsdayaoeneut.py new file mode 100644 index 000000000..c132a470a --- /dev/null +++ b/eos/effects/doomsdayaoeneut.py @@ -0,0 +1,21 @@ +# doomsdayAOENeut +# +# Used by: +# Module: Energy Neutralization Burst Projector +from eos.saveddata.module import State +from eos.modifiedAttributeDict import ModifiedAttributeDict + +type = "active", "projected" + + +def handler(fit, src, context, **kwargs): + if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or + hasattr(src, "amountActive")): + amount = src.getModifiedItemAttr("energyNeutralizerAmount") + + if 'effect' in kwargs: + amount *= ModifiedAttributeDict.getResistance(fit, kwargs['effect']) + + time = src.getModifiedItemAttr("duration") + + fit.addDrain(src, time, amount, 0) diff --git a/eos/effects/doomsdayaoepaint.py b/eos/effects/doomsdayaoepaint.py new file mode 100644 index 000000000..b02f68e38 --- /dev/null +++ b/eos/effects/doomsdayaoepaint.py @@ -0,0 +1,11 @@ +# doomsdayAOEPaint +# +# Used by: +# Module: Target Illumination Burst Projector +type = "projected", "active" + + +def handler(fit, container, context, *args, **kwargs): + if "projected" in context: + fit.ship.boostItemAttr("signatureRadius", container.getModifiedItemAttr("signatureRadiusBonus"), + stackingPenalties=True, *args, **kwargs) diff --git a/eos/effects/doomsdayaoetrack.py b/eos/effects/doomsdayaoetrack.py new file mode 100644 index 000000000..910ec7ae5 --- /dev/null +++ b/eos/effects/doomsdayaoetrack.py @@ -0,0 +1,29 @@ +# doomsdayAOETrack +# +# Used by: +# Module: Weapon Disruption Burst Projector + +type = "active", "projected" + + +def handler(fit, module, context, *args, **kwargs): + if "projected" in context: + for srcAttr, tgtAttr in ( + ("aoeCloudSizeBonus", "aoeCloudSize"), + ("aoeVelocityBonus", "aoeVelocity"), + ("missileVelocityBonus", "maxVelocity"), + ("explosionDelayBonus", "explosionDelay"), + ): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), + tgtAttr, module.getModifiedItemAttr(srcAttr), + stackingPenalties=True, *args, **kwargs) + + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"), + "trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"), + stackingPenalties=True, *args, **kwargs) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"), + "maxRange", module.getModifiedItemAttr("maxRangeBonus"), + stackingPenalties=True, *args, **kwargs) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"), + "falloff", module.getModifiedItemAttr("falloffBonus"), + stackingPenalties=True, *args, **kwargs) diff --git a/eos/effects/doomsdayaoeweb.py b/eos/effects/doomsdayaoeweb.py new file mode 100644 index 000000000..913288b93 --- /dev/null +++ b/eos/effects/doomsdayaoeweb.py @@ -0,0 +1,12 @@ +# doomsdayAOEWeb +# +# Used by: +# Module: Stasis Webification Burst Projector +type = "active", "projected" + + +def handler(fit, module, context, *args, **kwargs): + if "projected" not in context: + return + fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"), + stackingPenalties=True, *args, **kwargs) diff --git a/eos/effects/scriptscangravimetricstrengthbonusbonus.py b/eos/effects/scriptscangravimetricstrengthbonusbonus.py new file mode 100644 index 000000000..e9003c77d --- /dev/null +++ b/eos/effects/scriptscangravimetricstrengthbonusbonus.py @@ -0,0 +1,10 @@ +# scriptscanGravimetricStrengthBonusBonus +# +# Used by: +# Charges from group: Structure ECM script (4 of 4) +type = "passive" +runTime = "early" + + +def handler(fit, src, context, *args, **kwargs): + src.boostItemAttr("scanGravimetricStrengthBonus", src.getModifiedChargeAttr("scanGravimetricStrengthBonusBonus")) diff --git a/eos/effects/scriptscanladarstrengthbonusbonus.py b/eos/effects/scriptscanladarstrengthbonusbonus.py new file mode 100644 index 000000000..9300e4cca --- /dev/null +++ b/eos/effects/scriptscanladarstrengthbonusbonus.py @@ -0,0 +1,10 @@ +# scriptscanLadarStrengthBonusBonus +# +# Used by: +# Charges from group: Structure ECM script (4 of 4) +type = "passive" +runTime = "early" + + +def handler(fit, src, context, *args, **kwargs): + src.boostItemAttr("scanLadarStrengthBonus", src.getModifiedChargeAttr("scanLadarStrengthBonusBonus")) diff --git a/eos/effects/scriptscanmagnetometricstrengthbonusbonus.py b/eos/effects/scriptscanmagnetometricstrengthbonusbonus.py new file mode 100644 index 000000000..99e18d3c3 --- /dev/null +++ b/eos/effects/scriptscanmagnetometricstrengthbonusbonus.py @@ -0,0 +1,10 @@ +# scriptscanMagnetometricStrengthBonusBonus +# +# Used by: +# Charges from group: Structure ECM script (4 of 4) +type = "passive" +runTime = "early" + + +def handler(fit, src, context, *args, **kwargs): + src.boostItemAttr("scanMagnetometricStrengthBonus", src.getModifiedChargeAttr("scanMagnetometricStrengthBonusBonus")) diff --git a/eos/effects/scriptscanradarstrengthbonusbonus.py b/eos/effects/scriptscanradarstrengthbonusbonus.py new file mode 100644 index 000000000..d747d6510 --- /dev/null +++ b/eos/effects/scriptscanradarstrengthbonusbonus.py @@ -0,0 +1,10 @@ +# scriptscanRadarStrengthBonusBonus +# +# Used by: +# Charges from group: Structure ECM script (4 of 4) +type = "passive" +runTime = "early" + + +def handler(fit, src, context, *args, **kwargs): + src.boostItemAttr("scanRadarStrengthBonus", src.getModifiedChargeAttr("scanRadarStrengthBonusBonus")) diff --git a/eos/effects/servicemodulefullpowerhitpointpostassign.py b/eos/effects/servicemodulefullpowerhitpointpostassign.py new file mode 100644 index 000000000..a6d2dbd3c --- /dev/null +++ b/eos/effects/servicemodulefullpowerhitpointpostassign.py @@ -0,0 +1,7 @@ +# Not used by any item +type = "passive" +runTime = "early" + + +def handler(fit, src, context): + fit.ship.multiplyItemAttr("structureFullPowerStateHitpointMultiplier", src.getModifiedItemAttr("serviceModuleFullPowerStateHitpointMultiplier")) diff --git a/eos/effects/shipbonusdronetrackingelitegunship2.py b/eos/effects/shipbonusdronetrackingelitegunship2.py index 636cc4547..20c82238a 100644 --- a/eos/effects/shipbonusdronetrackingelitegunship2.py +++ b/eos/effects/shipbonusdronetrackingelitegunship2.py @@ -1,3 +1,10 @@ +# shipBonusDroneTrackingEliteGunship2 +# +# Used by: +# Ship: Ishkur type = "passive" + + def handler(fit, src, context): - fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "trackingSpeed", src.getModifiedItemAttr("eliteBonusGunship2"), skill="Assault Frigates") + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "trackingSpeed", + src.getModifiedItemAttr("eliteBonusGunship2"), skill="Assault Frigates") diff --git a/eos/effects/structureaoerofrolebonus.py b/eos/effects/structureaoerofrolebonus.py new file mode 100644 index 000000000..78b3205ab --- /dev/null +++ b/eos/effects/structureaoerofrolebonus.py @@ -0,0 +1,11 @@ +# Not used by any item +type = "passive" + + +def handler(fit, ship, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Structure Guided Bomb Launcher", + "speed", ship.getModifiedItemAttr("structureAoERoFRoleBonus")) + for attr in ["duration", "durationTargetIlluminationBurstProjector", "durationWeaponDisruptionBurstProjector", + "durationECMJammerBurstProjector", "durationSensorDampeningBurstProjector", "capacitorNeed"]: + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Structure Burst Projector", + attr, ship.getModifiedItemAttr("structureAoERoFRoleBonus")) diff --git a/eos/effects/structurearmorhpmultiply.py b/eos/effects/structurearmorhpmultiply.py new file mode 100644 index 000000000..1e34232ed --- /dev/null +++ b/eos/effects/structurearmorhpmultiply.py @@ -0,0 +1,7 @@ +# Not used by any item +type = "passive" +runTime = "early" + + +def handler(fit, src, context): + fit.ship.multiplyItemAttr("hiddenArmorHPMultiplier", src.getModifiedItemAttr("armorHPMultiplier")) diff --git a/eos/effects/structurecapacitorcapacitybonus.py b/eos/effects/structurecapacitorcapacitybonus.py new file mode 100644 index 000000000..df4384f5b --- /dev/null +++ b/eos/effects/structurecapacitorcapacitybonus.py @@ -0,0 +1,6 @@ +# Not used by any item +type = "passive" + + +def handler(fit, ship, context): + fit.ship.increaseItemAttr("capacitorCapacity", ship.getModifiedItemAttr("capacitorBonus")) diff --git a/eos/effects/structurefullpowerstatehitpointmodifier.py b/eos/effects/structurefullpowerstatehitpointmodifier.py new file mode 100644 index 000000000..54f9ce7b6 --- /dev/null +++ b/eos/effects/structurefullpowerstatehitpointmodifier.py @@ -0,0 +1,7 @@ +# Not used by any item +type = "passive" + + +def handler(fit, src, context): + fit.ship.multiplyItemAttr("shieldCapacity", src.getModifiedItemAttr("structureFullPowerStateHitpointMultiplier") or 0) + fit.ship.multiplyItemAttr("armorHP", src.getModifiedItemAttr("structureFullPowerStateHitpointMultiplier") or 0) diff --git a/eos/effects/structurehiddenarmorhpmultiplier.py b/eos/effects/structurehiddenarmorhpmultiplier.py new file mode 100644 index 000000000..09e2d31c7 --- /dev/null +++ b/eos/effects/structurehiddenarmorhpmultiplier.py @@ -0,0 +1,6 @@ +# Not used by any item +type = "passive" + + +def handler(fit, src, context): + fit.ship.multiplyItemAttr("armorHP", src.getModifiedItemAttr("hiddenArmorHPMultiplier") or 0) diff --git a/eos/effects/structurehiddenmissiledamagemultiplier.py b/eos/effects/structurehiddenmissiledamagemultiplier.py new file mode 100644 index 000000000..bd8d79366 --- /dev/null +++ b/eos/effects/structurehiddenmissiledamagemultiplier.py @@ -0,0 +1,10 @@ +# Not used by any item +type = "passive" + + +def handler(fit, src, context): + groups = ("Structure Anti-Subcapital Missile", "Structure Anti-Capital Missile") + for dmgType in ("em", "kinetic", "explosive", "thermal"): + fit.modules.filteredChargeMultiply(lambda mod: mod.item.group.name in groups, + "%sDamage" % dmgType, + src.getModifiedItemAttr("hiddenMissileDamageMultiplier")) diff --git a/eos/effects/structuremissileguidanceenhancer.py b/eos/effects/structuremissileguidanceenhancer.py new file mode 100644 index 000000000..d422bb1b6 --- /dev/null +++ b/eos/effects/structuremissileguidanceenhancer.py @@ -0,0 +1,14 @@ +# Not used by any item +type = "active" + + +def handler(fit, container, context): + for srcAttr, tgtAttr in ( + ("aoeCloudSizeBonus", "aoeCloudSize"), + ("aoeVelocityBonus", "aoeVelocity"), + ("missileVelocityBonus", "maxVelocity"), + ("explosionDelayBonus", "explosionDelay"), + ): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), + tgtAttr, container.getModifiedItemAttr(srcAttr), + stackingPenalties=True) diff --git a/eos/effects/structuremodifypowerrechargerate.py b/eos/effects/structuremodifypowerrechargerate.py new file mode 100644 index 000000000..ed8e9c074 --- /dev/null +++ b/eos/effects/structuremodifypowerrechargerate.py @@ -0,0 +1,6 @@ +# Not used by any item +type = "passive" + + +def handler(fit, module, context): + fit.ship.multiplyItemAttr("rechargeRate", module.getModifiedItemAttr("capacitorRechargeRateMultiplier")) diff --git a/eos/effects/structurerigmaxtargetrange.py b/eos/effects/structurerigmaxtargetrange.py new file mode 100644 index 000000000..95fee8a55 --- /dev/null +++ b/eos/effects/structurerigmaxtargetrange.py @@ -0,0 +1,6 @@ +# Not used by any item +type = "passive" + + +def handler(fit, module, context): + fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("structureRigMaxTargetRangeBonus")) diff --git a/eos/saveddata/fighter.py b/eos/saveddata/fighter.py index de550111e..12e1a7f7e 100644 --- a/eos/saveddata/fighter.py +++ b/eos/saveddata/fighter.py @@ -107,7 +107,7 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): "Heavy" : Slot.F_HEAVY, "StandupLight": Slot.FS_LIGHT, "StandupSupport": Slot.FS_SUPPORT, - "StandupHeavy":Slot.FS_HEAVY + "StandupHeavy": Slot.FS_HEAVY } for t, slot in types.iteritems(): diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index e75d8b075..7d70045db 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -61,6 +61,7 @@ class Slot(Enum): FS_SUPPORT = 14 FS_HEAVY = 15 + class Hardpoint(Enum): NONE = 0 MISSILE = 1