From a0db235e5abce9bf2aaeb83608a01410f2b0626f Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 30 Sep 2019 03:17:21 +0300 Subject: [PATCH] Add support for projection range to bunch of effects --- eos/effects.py | 88 ++++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/eos/effects.py b/eos/effects.py index 65cf00538..e16733f06 100644 --- a/eos/effects.py +++ b/eos/effects.py @@ -204,8 +204,11 @@ class Effect39(BaseEffect): @staticmethod def handler(fit, module, context, projectionRange, **kwargs): - if 'projected' in context and module.getModifiedItemAttr('maxRange', 0) >= (projectionRange or 0): - fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs) + if 'projected' not in context: + return + if module.getModifiedItemAttr('maxRange', 0) < (projectionRange or 0): + return + fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs) class Effect48(BaseEffect): @@ -545,25 +548,21 @@ class Effect101(BaseEffect): def handler(fit, src, context, projectionRange, **kwargs): # Set reload time to 10 seconds src.reloadTime = 10000 - - if 'projected' in context: - if src.item.group.name == 'Missile Launcher Bomb': - # Bomb Launcher Cooldown Timer - moduleReactivationDelay = src.getModifiedItemAttr('moduleReactivationDelay') - speed = src.getModifiedItemAttr('speed') - - # Void and Focused Void Bombs - neutAmount = src.getModifiedChargeAttr('energyNeutralizerAmount') - - if moduleReactivationDelay and neutAmount and speed: - fit.addDrain(src, speed + moduleReactivationDelay, neutAmount, 0) - - # Lockbreaker Bombs - ecmStrengthBonus = src.getModifiedChargeAttr('scan{0}StrengthBonus'.format(fit.scanType)) - - if ecmStrengthBonus: - strModifier = 1 - ecmStrengthBonus / fit.scanStrength - fit.ecmProjectedStr *= strModifier + if 'projected' not in context: + return + if src.item.group.name == 'Missile Launcher Bomb': + # Bomb Launcher Cooldown Timer + moduleReactivationDelay = src.getModifiedItemAttr('moduleReactivationDelay') + speed = src.getModifiedItemAttr('speed') + # Void and Focused Void Bombs + neutAmount = src.getModifiedChargeAttr('energyNeutralizerAmount') + if moduleReactivationDelay and neutAmount and speed: + fit.addDrain(src, speed + moduleReactivationDelay, neutAmount, 0) + # Lockbreaker Bombs + ecmStrengthBonus = src.getModifiedChargeAttr('scan{0}StrengthBonus'.format(fit.scanType)) + if ecmStrengthBonus: + strModifier = 1 - ecmStrengthBonus / fit.scanStrength + fit.ecmProjectedStr *= strModifier class Effect118(BaseEffect): @@ -10135,22 +10134,26 @@ class Effect3380(BaseEffect): @staticmethod def handler(fit, module, context, projectionRange, **kwargs): if 'projected' in context: - if module.charge is not None: - if module.charge.ID in (29003, 45010): - fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs) - if module.charge.ID == 45010: - fit.modules.filteredItemIncrease( - lambda mod: mod.item.requiresSkill('High Speed Maneuvering') or mod.item.requiresSkill('Micro Jump Drive Operation'), - 'activationBlocked', 1, **kwargs) + if module.charge is None: + return + if module.getModifiedItemAttr('warpScrambleRange', 0) < (projectionRange or 0): + return + if module.charge.ID in (29003, 45010): + fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs) + if module.charge.ID == 45010: + fit.modules.filteredItemIncrease( + lambda mod: mod.item.requiresSkill('High Speed Maneuvering') or mod.item.requiresSkill('Micro Jump Drive Operation'), + 'activationBlocked', 1, **kwargs) else: fit.ship.forceItemAttr('disallowAssistance', 1, **kwargs) - if module.charge is None: - fit.ship.boostItemAttr('mass', module.getModifiedItemAttr('massBonusPercentage'), **kwargs) - fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusBonus'), **kwargs) - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module', - 'speedBoostFactor', module.getModifiedItemAttr('speedBoostFactorBonus'), **kwargs) - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module', - 'speedFactor', module.getModifiedItemAttr('speedFactorBonus'), **kwargs) + if module.charge is not None: + return + fit.ship.boostItemAttr('mass', module.getModifiedItemAttr('massBonusPercentage'), **kwargs) + fit.ship.boostItemAttr('signatureRadius', module.getModifiedItemAttr('signatureRadiusBonus'), **kwargs) + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module', + 'speedBoostFactor', module.getModifiedItemAttr('speedBoostFactorBonus'), **kwargs) + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == 'Propulsion Module', + 'speedFactor', module.getModifiedItemAttr('speedFactorBonus'), **kwargs) class Effect3392(BaseEffect): @@ -11116,6 +11119,7 @@ class Effect3648(BaseEffect): Charges from group: Warp Disruption Script (2 of 2) """ + runTime = 'early' type = 'passive' @staticmethod @@ -27166,8 +27170,11 @@ class Effect6425(BaseEffect): @staticmethod def handler(fit, container, context, projectionRange, **kwargs): if 'projected' in context: - fit.ship.boostItemAttr('signatureRadius', container.getModifiedItemAttr('signatureRadiusBonus'), - stackingPenalties=True, **kwargs) + appliedBoost = container.getModifiedItemAttr('signatureRadiusBonus') * calculateRangeFactor( + srcOptimalRange=container.getModifiedItemAttr('maxRange'), + srcFalloffRange=container.getModifiedItemAttr('falloffEffectiveness'), + distance=projectionRange) + fit.ship.boostItemAttr('signatureRadius', appliedBoost, stackingPenalties=True, **kwargs) class Effect6426(BaseEffect): @@ -30541,8 +30548,11 @@ class Effect6683(BaseEffect): @staticmethod def handler(fit, container, context, projectionRange, **kwargs): if 'projected' in context: - fit.ship.boostItemAttr('signatureRadius', container.getModifiedItemAttr('signatureRadiusBonus'), - stackingPenalties=True, **kwargs) + appliedBoost = container.getModifiedItemAttr('signatureRadiusBonus') * calculateRangeFactor( + srcOptimalRange=container.getModifiedItemAttr('maxRange'), + srcFalloffRange=container.getModifiedItemAttr('falloffEffectiveness'), + distance=projectionRange) + fit.ship.boostItemAttr('signatureRadius', appliedBoost, stackingPenalties=True, **kwargs) class Effect6684(BaseEffect):