From a2c00494889f3ee9794286e28cb1fc64ed1ba15e Mon Sep 17 00:00:00 2001 From: Ebag333 Date: Sun, 17 Jul 2016 13:43:52 -0700 Subject: [PATCH] Moved neut reduction logic into fit.py --- eos/effects/energydestabilizationnew.py | 13 +++++---- eos/effects/energyneutralizerentity.py | 27 +------------------ eos/effects/energyneutralizerfalloff.py | 27 +------------------ eos/effects/energynosferatufalloff.py | 27 +------------------ eos/effects/energytransfer.py | 8 +++--- eos/effects/entityenergyneutralizerfalloff.py | 27 +------------------ .../fighterabilityenergyneutralizer.py | 27 +------------------ eos/effects/remoteenergytransferfalloff.py | 8 +++--- eos/saveddata/fit.py | 18 ++++++++++++- 9 files changed, 36 insertions(+), 146 deletions(-) diff --git a/eos/effects/energydestabilizationnew.py b/eos/effects/energydestabilizationnew.py index d2c3b8e03..fdde53f92 100644 --- a/eos/effects/energydestabilizationnew.py +++ b/eos/effects/energydestabilizationnew.py @@ -1,10 +1,9 @@ # Not used by any item from eos.types import State type = "active", "projected" -def handler(fit, container, context): - if "projected" in context and ((hasattr(container, "state") \ - and container.state >= State.ACTIVE) or hasattr(container, "amountActive")): - multiplier = container.amountActive if hasattr(container, "amountActive") else 1 - amount = container.getModifiedItemAttr("energyNeutralizerAmount") - time = container.getModifiedItemAttr("duration") - fit.addDrain(time, amount * multiplier, 0) +def handler(fit, src, context): + if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or hasattr(src, "amountActive")): + multiplier = src.amountActive if hasattr(src, "amountActive") else 1 + amount = src.getModifiedItemAttr("energyNeutralizerAmount") + time = src.getModifiedItemAttr("duration") + fit.addDrain(src, time, amount * multiplier, 0) diff --git a/eos/effects/energyneutralizerentity.py b/eos/effects/energyneutralizerentity.py index 14817a94b..37ab5ad05 100644 --- a/eos/effects/energyneutralizerentity.py +++ b/eos/effects/energyneutralizerentity.py @@ -10,30 +10,5 @@ def handler(fit, src, context): if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or hasattr(src, "amountActive")): amount = src.getModifiedItemAttr("energyNeutralizerAmount") time = src.getModifiedItemAttr("duration") - rigSize = fit.ship.getModifiedItemAttr("rigSize") - modifierLarge = src.getModifiedItemAttr("entityCapacitorLevelModifierLarge") - modifierMedium = src.getModifiedItemAttr("entityCapacitorLevelModifierMedium") - modifierSmall = src.getModifiedItemAttr("entityCapacitorLevelModifierSmall") - energyNeutralizerSignatureResolution = src.getModifiedItemAttr("energyNeutralizerSignatureResolution") - signatureRadius = fit.ship.getModifiedItemAttr("signatureRadius") - #Signature reduction, uses the bomb formula as per CCP Larrikin - if energyNeutralizerSignatureResolution: - sigRatio = signatureRadius/energyNeutralizerSignatureResolution - - sigReductionList = [1, sigRatio] - amount = amount*min(sigReductionList) - - #Small rigged ships - if (rigSize == 1) and modifierSmall: - amount = amount*modifierSmall - - #Medium rigged ships - if (rigSize == 2) and modifierMedium: - amount = amount*modifierMedium - - #Large rigged ships - if (rigSize == 3) and modifierLarge: - amount = amount*modifierLarge - - fit.addDrain(time, amount, 0) + fit.addDrain(src, time, amount, 0) diff --git a/eos/effects/energyneutralizerfalloff.py b/eos/effects/energyneutralizerfalloff.py index c4933be59..5a58dce48 100644 --- a/eos/effects/energyneutralizerfalloff.py +++ b/eos/effects/energyneutralizerfalloff.py @@ -10,30 +10,5 @@ def handler(fit, src, context): if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or hasattr(src, "amountActive")): amount = src.getModifiedItemAttr("energyNeutralizerAmount") time = src.getModifiedItemAttr("duration") - rigSize = fit.ship.getModifiedItemAttr("rigSize") - modifierLarge = src.getModifiedItemAttr("entityCapacitorLevelModifierLarge") - modifierMedium = src.getModifiedItemAttr("entityCapacitorLevelModifierMedium") - modifierSmall = src.getModifiedItemAttr("entityCapacitorLevelModifierSmall") - energyNeutralizerSignatureResolution = src.getModifiedItemAttr("energyNeutralizerSignatureResolution") - signatureRadius = fit.ship.getModifiedItemAttr("signatureRadius") - #Signature reduction, uses the bomb formula as per CCP Larrikin - if energyNeutralizerSignatureResolution: - sigRatio = signatureRadius/energyNeutralizerSignatureResolution - - sigReductionList = [1, sigRatio] - amount = amount*min(sigReductionList) - - #Small rigged ships - if (rigSize == 1) and modifierSmall: - amount = amount*modifierSmall - - #Medium rigged ships - if (rigSize == 2) and modifierMedium: - amount = amount*modifierMedium - - #Large rigged ships - if (rigSize == 3) and modifierLarge: - amount = amount*modifierLarge - - fit.addDrain(time, amount, 0) + fit.addDrain(src, time, amount, 0) diff --git a/eos/effects/energynosferatufalloff.py b/eos/effects/energynosferatufalloff.py index 8dad1ea3d..a0a79273e 100644 --- a/eos/effects/energynosferatufalloff.py +++ b/eos/effects/energynosferatufalloff.py @@ -9,33 +9,8 @@ runTime = "late" def handler(fit, src, context): amount = src.getModifiedItemAttr("powerTransferAmount") time = src.getModifiedItemAttr("duration") - rigSize = fit.ship.getModifiedItemAttr("rigSize") - modifierLarge = src.getModifiedItemAttr("entityCapacitorLevelModifierLarge") - modifierMedium = src.getModifiedItemAttr("entityCapacitorLevelModifierMedium") - modifierSmall = src.getModifiedItemAttr("entityCapacitorLevelModifierSmall") - energyNeutralizerSignatureResolution = src.getModifiedItemAttr("energyNeutralizerSignatureResolution") - signatureRadius = fit.ship.getModifiedItemAttr("signatureRadius") if "projected" in context: - # Signature reduction, uses the bomb formula as per CCP Larrikin - if energyNeutralizerSignatureResolution: - sigRatio = signatureRadius / energyNeutralizerSignatureResolution - - sigReductionList = [1, sigRatio] - amount = amount * min(sigReductionList) - - #Small rigged ships - if (rigSize == 1) and modifierSmall: - amount = amount*modifierSmall - - #Medium rigged ships - if (rigSize == 2) and modifierMedium: - amount = amount*modifierMedium - - #Large rigged ships - if (rigSize == 3) and modifierLarge: - amount = amount*modifierLarge - - fit.addDrain(time, amount, 0) + fit.addDrain(src, time, amount, 0) elif "module" in context: src.itemModifiedAttributes.force("capacitorNeed", -amount) \ No newline at end of file diff --git a/eos/effects/energytransfer.py b/eos/effects/energytransfer.py index 8390cf52c..d004628bc 100644 --- a/eos/effects/energytransfer.py +++ b/eos/effects/energytransfer.py @@ -1,7 +1,7 @@ # Not used by any item type = "projected", "active" -def handler(fit, module, context): +def handler(fit, src, context): if "projected" in context: - amount = module.getModifiedItemAttr("powerTransferAmount") - duration = module.getModifiedItemAttr("duration") - fit.addDrain(duration, -amount, 0) + amount = src.getModifiedItemAttr("powerTransferAmount") + duration = src.getModifiedItemAttr("duration") + fit.addDrain(src, duration, -amount, 0) diff --git a/eos/effects/entityenergyneutralizerfalloff.py b/eos/effects/entityenergyneutralizerfalloff.py index 06da16b45..342598ebf 100644 --- a/eos/effects/entityenergyneutralizerfalloff.py +++ b/eos/effects/entityenergyneutralizerfalloff.py @@ -10,30 +10,5 @@ def handler(fit, src, context): if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or hasattr(src, "amountActive")): amount = src.getModifiedItemAttr("energyNeutralizerAmount") time = src.getModifiedItemAttr("energyNeutralizerDuration") - rigSize = fit.ship.getModifiedItemAttr("rigSize") - modifierLarge = src.getModifiedItemAttr("entityCapacitorLevelModifierLarge") - modifierMedium = src.getModifiedItemAttr("entityCapacitorLevelModifierMedium") - modifierSmall = src.getModifiedItemAttr("entityCapacitorLevelModifierSmall") - energyNeutralizerSignatureResolution = src.getModifiedItemAttr("energyNeutralizerSignatureResolution") - signatureRadius = fit.ship.getModifiedItemAttr("signatureRadius") - #Signature reduction, uses the bomb formula as per CCP Larrikin - if energyNeutralizerSignatureResolution: - sigRatio = signatureRadius/energyNeutralizerSignatureResolution - - sigReductionList = [1, sigRatio] - amount = amount*min(sigReductionList) - - #Small rigged ships - if (rigSize == 1) and modifierSmall: - amount = amount*modifierSmall - - #Medium rigged ships - if (rigSize == 2) and modifierMedium: - amount = amount*modifierMedium - - #Large rigged ships - if (rigSize == 3) and modifierLarge: - amount = amount*modifierLarge - - fit.addDrain(time, amount, 0) + fit.addDrain(src, time, amount, 0) diff --git a/eos/effects/fighterabilityenergyneutralizer.py b/eos/effects/fighterabilityenergyneutralizer.py index 4eeaeb633..bad275c32 100644 --- a/eos/effects/fighterabilityenergyneutralizer.py +++ b/eos/effects/fighterabilityenergyneutralizer.py @@ -13,30 +13,5 @@ def handler(fit, src, context): if "projected" in context: amount = src.getModifiedItemAttr("{}Amount".format(prefix)) time = src.getModifiedItemAttr("{}Duration".format(prefix)) - rigSize = fit.ship.getModifiedItemAttr("rigSize") - modifierLarge = src.getModifiedItemAttr("entityCapacitorLevelModifierLarge") - modifierMedium = src.getModifiedItemAttr("entityCapacitorLevelModifierMedium") - modifierSmall = src.getModifiedItemAttr("entityCapacitorLevelModifierSmall") - energyNeutralizerSignatureResolution = src.getModifiedItemAttr("energyNeutralizerSignatureResolution") - signatureRadius = fit.ship.getModifiedItemAttr("signatureRadius") - #Signature reduction, uses the bomb formula as per CCP Larrikin - if energyNeutralizerSignatureResolution: - sigRatio = signatureRadius/energyNeutralizerSignatureResolution - - sigReductionList = [1, sigRatio] - amount = amount*min(sigReductionList) - - # Small rigged ships - if (rigSize == 1) and modifierSmall: - amount = amount * modifierSmall - - # Medium rigged ships - if (rigSize == 2) and modifierMedium: - amount = amount * modifierMedium - - # Large rigged ships - if (rigSize == 3) and modifierLarge: - amount = amount * modifierLarge - - fit.addDrain(time, amount, 0) \ No newline at end of file + fit.addDrain(src, time, amount, 0) \ No newline at end of file diff --git a/eos/effects/remoteenergytransferfalloff.py b/eos/effects/remoteenergytransferfalloff.py index ddb6fab9a..f618d3d3c 100644 --- a/eos/effects/remoteenergytransferfalloff.py +++ b/eos/effects/remoteenergytransferfalloff.py @@ -3,8 +3,8 @@ # Used by: # Modules from group: Remote Capacitor Transmitter (41 of 41) type = "projected", "active" -def handler(fit, module, context): +def handler(fit, src, context): if "projected" in context: - amount = module.getModifiedItemAttr("powerTransferAmount") - duration = module.getModifiedItemAttr("duration") - fit.addDrain(duration, -amount, 0) + amount = src.getModifiedItemAttr("powerTransferAmount") + duration = src.getModifiedItemAttr("duration") + fit.addDrain(src, duration, -amount, 0) diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 3ab32c7d4..bc63595eb 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -873,8 +873,24 @@ class Fit(object): rechargeRate = self.ship.getModifiedItemAttr("shieldRechargeRate") / 1000.0 return 10 / rechargeRate * sqrt(percent) * (1 - sqrt(percent)) * capacity - def addDrain(self, cycleTime, capNeed, clipSize=0): + def addDrain(self, src, cycleTime, capNeed, clipSize=0): """ Used for both cap drains and cap fills (fills have negative capNeed) """ + + rigSize = self.ship.getModifiedItemAttr("rigSize") + energyNeutralizerSignatureResolution = src.getModifiedItemAttr("energyNeutralizerSignatureResolution") + signatureRadius = self.ship.getModifiedItemAttr("signatureRadius") + neutSizes = {1.0: 'Small', 2.0: 'Medium', 3.0: 'Large', 4.0: 'Capital'} + + #Signature reduction, uses the bomb formula as per CCP Larrikin + if energyNeutralizerSignatureResolution: + capNeed = capNeed*min(1, signatureRadius/energyNeutralizerSignatureResolution) + + #Size reduction, reduces neuts based off ship rig size + for sizeInt, sizeName in neutSizes.iteritems(): + capacitorLevelModifier = src.getModifiedItemAttr("entityCapacitorLevelModifier{}".format(sizeName)) + if (rigSize == sizeInt) and capacitorLevelModifier: + capNeed = capNeed*capacitorLevelModifier + resistance = self.ship.getModifiedItemAttr("energyWarfareResistance") or 1 if capNeed > 0 else 1 self.__extraDrains.append((cycleTime, capNeed * resistance, clipSize))