diff --git a/eos/effects/modulebonusbastionmodule.py b/eos/effects/modulebonusbastionmodule.py new file mode 100644 index 000000000..6ceb33715 --- /dev/null +++ b/eos/effects/modulebonusbastionmodule.py @@ -0,0 +1,68 @@ +# marauderModeEffect26 +# +# Used by: +# Module: Bastion Module I +type = "active" +runTime = "early" +def handler(fit, src, context): + # Resistances + for layer, attrPrefix in (('shield', 'shield'), ('armor', 'armor'), ('hull', '')): + for damageType in ('Kinetic', 'Thermal', 'Explosive', 'Em'): + bonus = "%s%sDamageResonance" % (attrPrefix, damageType) + bonus = "%s%s" % (bonus[0].lower(), bonus[1:]) + booster = "%s%sDamageResonance" % (layer, damageType) + penalize = False if layer == 'hull' else True + fit.ship.multiplyItemAttr(bonus, src.getModifiedItemAttr(booster), + stackingPenalties=penalize, penaltyGroup="preMul") + + # Turrets + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret") or \ + mod.item.requiresSkill("Large Hybrid Turret") or \ + mod.item.requiresSkill("Large Projectile Turret"), + "maxRange", src.getModifiedItemAttr("maxRangeBonus"), + stackingPenalties=True) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Large Energy Turret") or \ + mod.item.requiresSkill("Large Hybrid Turret") or \ + mod.item.requiresSkill("Large Projectile Turret"), + "falloff", src.getModifiedItemAttr("falloffBonus"), + stackingPenalties=True) + + # Missiles + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes") or \ + mod.charge.requiresSkill("Cruise Missiles") or \ + mod.charge.requiresSkill("Heavy Missiles"), + "maxVelocity", src.getModifiedItemAttr("missileVelocityBonus")) + + # Tanking + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems"), + "armorDamageAmount", src.getModifiedItemAttr("armorDamageAmountBonus"), + stackingPenalties=True) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"), + "shieldBonus", src.getModifiedItemAttr("shieldBoostMultiplier"), + stackingPenalties=True) + + # Speed penalty + fit.ship.boostItemAttr("maxVelocity", src.getModifiedItemAttr("speedFactor")) + + # @todo: test these for April 2016 release + # Max locked targets + fit.ship.forceItemAttr("maxLockedTargets", src.getModifiedItemAttr("maxLockedTargets")) + + # Block Hostile ewar + fit.ship.forceItemAttr("disallowOffensiveModifiers", src.getModifiedItemAttr("disallowOffensiveModifiers")) + + # new with April 2016 release + for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'): + fit.ship.boostItemAttr("scan{}Strength".format(scanType), + src.getModifiedItemAttr("scan{}StrengthPercent").format(scanType), + stackingPenalties=True) + + fit.ship.boostItemAttr("remoteRepairImpedance", src.getModifiedItemAttr("remoteRepairImpedanceBonus")) + fit.ship.boostItemAttr("remoteAssistanceImpedance", src.getModifiedItemAttr("remoteAssistanceImpedanceBonus")) + fit.ship.boostItemAttr("sensorDampenerResistance", src.getModifiedItemAttr("sensorDampenerResistanceBonus")) + fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Micro Jump Drive Operation"), "activationBlocked", src.getModifiedItemAttr("activationBlockedStrenght")) + fit.ship.increaseItemAttr("disallowDocking", src.getModifiedItemAttr("disallowDocking")) + fit.ship.boostItemAttr("targetPainterResistance", src.getModifiedItemAttr("targetPainterResistanceBonus")) + fit.ship.boostItemAttr("weaponDisruptionResistance", src.getModifiedItemAttr("weaponDisruptionResistanceBonus")) + fit.ship.increaseItemAttr("disallowTethering", src.getModifiedItemAttr("disallowTethering")) + fit.ship.increaseItemAttr("warpScrambleStatus", src.getModifiedItemAttr("siegeModeWarpStatus")) diff --git a/eos/effects/modulebonusnetworkedsensorarray.py b/eos/effects/modulebonusnetworkedsensorarray.py new file mode 100644 index 000000000..3d5a5d282 --- /dev/null +++ b/eos/effects/modulebonusnetworkedsensorarray.py @@ -0,0 +1,24 @@ +type = "passive" +def handler(fit, src, context): + fit.ship.increaseItemAttr("maxLockedTargets", src.getModifiedItemAttr("maxLockedTargetsBonus")) + fit.ship.multiplyItemAttr("maxTargetRange", src.getModifiedItemAttr("maxTargetRangeMultiplier"), stackingPenalties=True, penaltyGroup="postMul") + fit.ship.multiplyItemAttr("scanResolution", src.getModifiedItemAttr("scanResolutionMultiplier"), stackingPenalties=True) + + for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'): + fit.ship.boostItemAttr("scan{}Strength".format(scanType), + src.getModifiedItemAttr("scan{}StrengthPercent").format(scanType), + stackingPenalties=True) + + # EW cap need increase + groups = [ + 'Burst Jammer', + 'Weapon Disruptor', + 'ECM', + 'Sensor Dampener', + 'Target Painter'] + + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups or + mod.item.requiresSkill("Propulsion Jamming"), + "capacitorNeed", src.getModifiedItemAttr("ewCapacitorNeedBonus")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Propulsion Jamming"), + "capacitorNeed", src.getModifiedItemAttr("ewCapacitorNeedBonus")) diff --git a/eos/effects/modulebonussiegemodule.py b/eos/effects/modulebonussiegemodule.py new file mode 100644 index 000000000..f57dd9dcc --- /dev/null +++ b/eos/effects/modulebonussiegemodule.py @@ -0,0 +1,62 @@ +# Used by: +# Variations of module: Siege Module I (2 of 2) +type = "active" +runTime = "early" +def handler(fit, src, context): + #Turrets + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Energy Turret") or \ + mod.item.requiresSkill("Capital Hybrid Turret") or \ + mod.item.requiresSkill("Capital Projectile Turret"), + "damageMultiplier", src.getModifiedItemAttr("damageMultiplierBonus")) + + #Missiles + for type in ("kinetic", "thermal", "explosive", "em"): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes") or \ + mod.charge.requiresSkill("XL Cruise Missiles") or \ + mod.charge.requiresSkill("Torpedoes"), + "%sDamage" % type, src.getModifiedItemAttr("damageMultiplierBonus")) + + # Reppers + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation") or \ + mod.item.requiresSkill("Capital Repair Systems"), + "duration", src.getModifiedItemAttr("siegeLocalLogisticsDurationBonus")) + + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"), + "shieldBonus", src.getModifiedItemAttr("siegeLocalLogisticsAmountBonus"), + stackingPenalties=True) + + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"), + "armorDamageAmount", src.getModifiedItemAttr("siegeLocalLogisticsAmountBonus"), + stackingPenalties=True) + + #Speed penalty + fit.ship.boostItemAttr("maxVelocity", src.getModifiedItemAttr("speedFactor")) + + #Mass + fit.ship.multiplyItemAttr("mass", src.getModifiedItemAttr("siegeMassMultiplier"), + stackingPenalties=True, penaltyGroup="postMul") + + # @ todo: test for April 2016 release + #Block Hostile EWAR and friendly effects + fit.ship.forceItemAttr("disallowOffensiveModifiers", src.getModifiedItemAttr("disallowOffensiveModifiers")) + fit.ship.forceItemAttr("disallowAssistance", src.getModifiedItemAttr("disallowAssistance")) + + # new in April 2016 release + for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'): + fit.ship.boostItemAttr("scan{}Strength".format(scanType), + src.getModifiedItemAttr("scan{}StrengthPercent").format(scanType), + stackingPenalties=True) + + # missile ROF bonus + for group in ("Missile Launcher XL Torpedo", "Missile Launcher Rapid Torpedo", "Missile Launcher XL Cruise"): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == group, "speed", src.getModifiedItemAttr("siegeLauncherROFBonus"), stackingPenalties=True) + + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Torpedoes"), "maxVelocity", src.getModifiedItemAttr("siegeTorpedoVelocityBonus"), stackingPenalties=True) + + fit.ship.increaseItemAttr("warpScrambleStatus", src.getModifiedItemAttr("siegeModeWarpStatus")) + fit.ship.boostItemAttr("remoteRepairImpedance", src.getModifiedItemAttr("remoteRepairImpedanceBonus")) + fit.ship.increaseItemAttr("disallowTethering", src.getModifiedItemAttr("disallowTethering")) + fit.ship.boostItemAttr("sensorDampenerResistance", src.getModifiedItemAttr("sensorDampenerResistanceBonus")) + fit.ship.boostItemAttr("remoteAssistanceImpedance", src.getModifiedItemAttr("remoteAssistanceImpedanceBonus")) + fit.ship.boostItemAttr("weaponDisruptionResistance", src.getModifiedItemAttr("weaponDisruptionResistanceBonus")) + fit.ship.increaseItemAttr("disallowDocking", src.getModifiedItemAttr("disallowDocking")) diff --git a/eos/effects/modulebonustriagemodule.py b/eos/effects/modulebonustriagemodule.py new file mode 100644 index 000000000..c22cc6b46 --- /dev/null +++ b/eos/effects/modulebonustriagemodule.py @@ -0,0 +1,71 @@ +# Used by: +# Module: Triage Module I +type = "active" +runTime = "early" +def handler(fit, src, context): + # Remote effect bonuses (duration / amount / range / fallout) + for skill, amtAttr, stack in ( + ("Capital Remote Armor Repair Systems", "armorDamageAmount", True), + ("Capital Shield Emission Systems", "shieldBonus", True), + ("Capital Capacitor Emission Systems", "powerTransferAmount", False), + ("Capital Remote Hull Repair Systems", "structureDamageAmount"), False): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), "duration", src.getModifiedItemAttr("siegeRemoteLogisticsDurationBonus")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), amtAttr, src.getModifiedItemAttr("siegeRemoteLogisticsAmountBonus"), stackingPenalties=stack) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), "maxRange", src.getModifiedItemAttr("siegeRemoteLogisticsRangeBonus"), stackingPenalties=True) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), "falloffEffectiveness", src.getModifiedItemAttr("siegeRemoteLogisticsRangeBonus"), stackingPenalties=True) + + # Local armor/shield rep effects (duration / amoutn) + for skill, amtAttr in ( + ("Capital Shield Operation", "shieldBonus"), + ("Capital Repair Systems", "armorDamageAmount")): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), "duration", src.getModifiedItemAttr("siegeLocalLogisticsDurationBonus")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill), amtAttr, src.getModifiedItemAttr("siegeLocalLogisticsAmountBonus")) + + + # Speed bonus + fit.ship.boostItemAttr("maxVelocity", src.getModifiedItemAttr("speedFactor"), stackingPenalties=True) + + # Scan resolution multiplier + fit.ship.multiplyItemAttr("scanResolution", src.getModifiedItemAttr("scanResolutionMultiplier"), stackingPenalties=True) + + # Mass multiplier + fit.ship.multiplyItemAttr("mass", src.getModifiedItemAttr("siegeMassMultiplier"), stackingPenalties=True) + + # Max locked targets + fit.ship.increaseItemAttr("maxLockedTargets", src.getModifiedItemAttr("maxLockedTargetsBonus")) + + + # EW cap need increase + groups = [ + 'Burst Jammer', + 'Weapon Disruptor', + 'ECM', + 'Sensor Dampener', + 'Target Painter'] + + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups or + mod.item.requiresSkill("Propulsion Jamming"), + "capacitorNeed", src.getModifiedItemAttr("ewCapacitorNeedBonus")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Propulsion Jamming"), + "capacitorNeed", src.getModifiedItemAttr("ewCapacitorNeedBonus")) + + # todo: test for April 2016 release + # Block EWAR & projected effects + fit.ship.forceItemAttr("disallowOffensiveModifiers", src.getModifiedItemAttr("disallowOffensiveModifiers")) + fit.ship.forceItemAttr("disallowAssistance", src.getModifiedItemAttr("disallowAssistance")) + + # new in April 2016 release + + for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'): + fit.ship.boostItemAttr("scan{}Strength".format(scanType), + src.getModifiedItemAttr("scan{}StrengthPercent").format(scanType), + stackingPenalties=True) + + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "damageMultiplier", src.getModifiedItemAttr("droneDamageBonus"), stackingPenalties=True) + + fit.ship.increaseItemAttr("warpScrambleStatus", src.getModifiedItemAttr("siegeModeWarpStatus")) + fit.ship.boostItemAttr("sensorDampenerResistance", src.getModifiedItemAttr("sensorDampenerResistanceBonus")) + fit.ship.boostItemAttr("remoteAssistanceImpedance", src.getModifiedItemAttr("remoteAssistanceImpedanceBonus")) + fit.ship.increaseItemAttr("disallowDocking", src.getModifiedItemAttr("disallowDocking")) + fit.ship.boostItemAttr("remoteRepairImpedance", src.getModifiedItemAttr("remoteRepairImpedanceBonus")) + fit.ship.increaseItemAttr("disallowTethering", src.getModifiedItemAttr("disallowTethering")) \ No newline at end of file