diff --git a/eos/effects.py b/eos/effects.py index 8761d8a74..7e06f8568 100644 --- a/eos/effects.py +++ b/eos/effects.py @@ -614,8 +614,7 @@ class Effect101(BaseEffect): # Lockbreaker Bombs ecmStrengthBonus = src.getModifiedChargeAttr('scan{0}StrengthBonus'.format(fit.scanType)) if ecmStrengthBonus: - strModifier = 1 - min(1, ecmStrengthBonus / fit.scanStrength) - fit.ecmProjectedStr *= strModifier + fit.addProjectedEcm(ecmStrengthBonus) elif src.item.group.name == 'Interdiction Sphere Launcher': speedFactor = src.getModifiedChargeAttr('speedFactor') if speedFactor: @@ -9638,11 +9637,10 @@ class Effect3182(BaseEffect): @staticmethod def handler(fit, module, context, projectionRange, **kwargs): - if 'projected' not in context: - for scanType in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'): - module.boostItemAttr('scan{0}StrengthBonus'.format(scanType), - module.getModifiedItemAttr('overloadECMStrengthBonus'), - stackingPenalties=True, **kwargs) + for scanType in ('Gravimetric', 'Magnetometric', 'Radar', 'Ladar'): + module.boostItemAttr('scan{0}StrengthBonus'.format(scanType), + module.getModifiedItemAttr('overloadECMStrengthBonus'), + stackingPenalties=True, **kwargs) class Effect3196(BaseEffect): @@ -27265,8 +27263,7 @@ class Effect6437(BaseEffect): if 'effect' in kwargs: from eos.modifiedAttributeDict import ModifiedAttributeDict strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect']) - chanceModifier = 1 - min(1, strength / fit.scanStrength) - fit.ecmProjectedStr *= chanceModifier + fit.addProjectedEcm(strength) class Effect6439(BaseEffect): @@ -27460,8 +27457,7 @@ class Effect6470(BaseEffect): if 'effect' in kwargs: from eos.modifiedAttributeDict import ModifiedAttributeDict strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect']) - chanceModifier = 1 - min(1, strength / fit.scanStrength) - fit.ecmProjectedStr *= chanceModifier + fit.addProjectedEcm(strength) class Effect6472(BaseEffect): @@ -27954,8 +27950,7 @@ class Effect6513(BaseEffect): if 'effect' in kwargs: from eos.modifiedAttributeDict import ModifiedAttributeDict strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect']) - chanceModifier = 1 - min(1, strength / fit.scanStrength) - fit.ecmProjectedStr *= chanceModifier + fit.addProjectedEcm(strength) class Effect6526(BaseEffect): @@ -30586,8 +30581,7 @@ class Effect6685(BaseEffect): if 'effect' in kwargs: from eos.modifiedAttributeDict import ModifiedAttributeDict strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect']) - chanceModifier = 1 - min(1, strength / fit.scanStrength) - fit.ecmProjectedStr *= chanceModifier + fit.addProjectedEcm(strength) class Effect6686(BaseEffect): @@ -30846,8 +30840,7 @@ class Effect6695(BaseEffect): if 'effect' in kwargs: from eos.modifiedAttributeDict import ModifiedAttributeDict strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect']) - chanceModifier = 1 - min(1, strength / fit.scanStrength) - fit.ecmProjectedStr *= chanceModifier + fit.addProjectedEcm(strength) class Effect6697(BaseEffect): @@ -31133,6 +31126,7 @@ class Effect6714(BaseEffect): """ type = 'projected', 'active' + runTime = 'late' @staticmethod def handler(fit, module, context, projectionRange, **kwargs): @@ -31146,8 +31140,7 @@ class Effect6714(BaseEffect): if 'effect' in kwargs: from eos.modifiedAttributeDict import ModifiedAttributeDict strength *= ModifiedAttributeDict.getResistance(fit, kwargs['effect']) - chanceModifier = 1 - min(1, strength / fit.scanStrength) - fit.ecmProjectedStr *= chanceModifier + fit.addProjectedEcm(strength) class Effect6717(BaseEffect): diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index cdcc624de..8bd37b872 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -155,7 +155,7 @@ class Fit: self.factorReload = False self.boostsFits = set() self.gangBoosts = None - self.ecmProjectedStr = 1 + self.__ecmProjectedList = [] self.commandBonuses = {} def clearFactorReloadDependentData(self): @@ -411,7 +411,11 @@ class Fit: @property def jamChance(self): - return (1 - self.ecmProjectedStr) * 100 + sensors = self.scanStrength + retainLockChance = 1 + for jamStr in self.__ecmProjectedList: + retainLockChance *= 1 - min(1, jamStr / sensors) + return (1 - retainLockChance) * 100 @property def maxSpeed(self): @@ -499,7 +503,7 @@ class Fit: self.__capUsed = None self.__capRecharge = None self.__savedCapSimData.clear() - self.ecmProjectedStr = 1 + self.__ecmProjectedList = [] # self.commandBonuses = {} del self.__calculatedTargets[:] @@ -562,6 +566,9 @@ class Fit: if warfareBuffID not in self.commandBonuses or abs(self.commandBonuses[warfareBuffID][1]) < abs(value): self.commandBonuses[warfareBuffID] = (runTime, value, module, effect) + def addProjectedEcm(self, strength): + self.__ecmProjectedList.append(strength) + def __runCommandBoosts(self, runTime="normal"): pyfalog.debug("Applying gang boosts for {0}", repr(self)) for warfareBuffID in list(self.commandBonuses.keys()):