Change how ECM chance is calculated so that sensor strength links are considered

This commit is contained in:
DarkPhoenix
2021-10-21 16:02:04 +03:00
parent d9b0d2e72a
commit 8497d1f1bb
2 changed files with 22 additions and 22 deletions

View File

@@ -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):

View File

@@ -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()):