Change how ECM chance is calculated so that sensor strength links are considered
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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()):
|
||||
|
||||
Reference in New Issue
Block a user