From 2d9dcc624c4e0224dc3313c0f8750a9804dff699 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 10 Dec 2018 14:53:46 +0300 Subject: [PATCH] Make sure spoolup function works with non-spoolup arguments passed to it --- eos/saveddata/module.py | 23 ++++++++--------------- eos/utils/spoolSupport.py | 6 ++++++ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index e6e1bb1bb..16af7affc 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -433,22 +433,14 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): func = self.getModifiedItemAttr cycleTime = self.cycleTime + spoolMultMax = self.getModifiedItemAttr("damageMultiplierBonusMax") or 0 + spoolMultPerCycle = self.getModifiedItemAttr("damageMultiplierBonusPerCycle") or 0 # Base volley volleyBase = sum([(func("%sDamage" % attr) or 0) * (1 - getattr(targetResists, "%sAmount" % attr, 0)) for attr in self.DAMAGE_TYPES]) volleyBase *= self.getModifiedItemAttr("damageMultiplier") or 1 - spoolMultMax = self.getModifiedItemAttr("damageMultiplierBonusMax") or 0 - spoolMultPerCycle = self.getModifiedItemAttr("damageMultiplierBonusPerCycle") or 0 - # Volley affected by module-specific spoolup - if spoolMultMax: - volley = volleyBase * (1 + calculateSpoolup(spoolMultMax, spoolMultPerCycle, cycleTime, self.spoolType, self.spoolAmount)) - else: - volley = volleyBase - # Full spoolup - if spoolMultMax: - volleySpoolFull = volleyBase * (1 + calculateSpoolup(spoolMultMax, spoolMultPerCycle, cycleTime, SpoolType.SCALE, 1)) - else: - volleySpoolFull = volleyBase + volleySpoolDefault = volleyBase * (1 + calculateSpoolup(spoolMultMax, spoolMultPerCycle, cycleTime / 1000, self.spoolType, self.spoolAmount)) + volleySpoolFull = volleyBase * (1 + calculateSpoolup(spoolMultMax, spoolMultPerCycle, cycleTime / 1000, SpoolType.SCALE, 1)) if volleyBase: # Some weapons repeat multiple times in one cycle (think doomsdays) # Get the number of times it fires off @@ -457,10 +449,12 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): 1 ) - self.__volley = volley + self.__volley = volleySpoolDefault + self.__volleySpoolZero = volleyBase self.__volleySpoolFull = volleySpoolFull dpsFactor = weaponDoT / (cycleTime / 1000.0) - self.__dps = volley * dpsFactor + self.__dps = volleySpoolDefault * dpsFactor + self.__dpsSpoolZero = volleyBase * dpsFactor self.__dpsSpoolFull = volleySpoolFull * dpsFactor return self.__dps, self.__dpsSpoolFull, self.__volley, self.__volleySpoolFull @@ -754,7 +748,6 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.__volleySpoolZero = None self.__volleySpoolFull = None self.__miningyield = None - self.__volley = None self.__reloadTime = None self.__reloadForce = None self.__chargeCycles = None diff --git a/eos/utils/spoolSupport.py b/eos/utils/spoolSupport.py index b7b260d8b..b91e90d40 100644 --- a/eos/utils/spoolSupport.py +++ b/eos/utils/spoolSupport.py @@ -31,6 +31,12 @@ class SpoolType(IntEnum): def calculateSpoolup(modMaxValue, modStepValue, modCycleTime, spoolType, spoolAmount): + """ + Calculate damage multiplier increment based on passed parameters. Module cycle time + is specified in seconds. + """ + if not modMaxValue or not modStepValue: + return 0 if spoolType == SpoolType.SCALE: return int(floatUnerr(spoolAmount * modMaxValue / modStepValue)) * modStepValue elif spoolType == SpoolType.TIME: