diff --git a/eos/capSim.py b/eos/capSim.py index 729a078a3..a5ed4a8d1 100644 --- a/eos/capSim.py +++ b/eos/capSim.py @@ -59,7 +59,7 @@ class CapSimulator(object): return duration, capNeed def init(self, modules): - """prepare modules. a list of (duration, capNeed, clipSize) tuples is + """prepare modules. a list of (duration, capNeed, clipSize, disableStagger) tuples is expected, with clipSize 0 if the module has infinite ammo. """ self.modules = modules @@ -72,7 +72,7 @@ class CapSimulator(object): disable_period = False # Loop over modules, clearing clipSize if applicable, and group modules based on attributes - for (duration, capNeed, clipSize) in self.modules: + for (duration, capNeed, clipSize, disableStagger) in self.modules: if self.scale: duration, capNeed = self.scale_activation(duration, capNeed) @@ -82,14 +82,14 @@ class CapSimulator(object): clipSize = 0 # Group modules based on their properties - if (duration, capNeed, clipSize) in mods: - mods[(duration, capNeed, clipSize)] += 1 + if (duration, capNeed, clipSize, disableStagger) in mods: + mods[(duration, capNeed, clipSize, disableStagger)] += 1 else: - mods[(duration, capNeed, clipSize)] = 1 + mods[(duration, capNeed, clipSize, disableStagger)] = 1 # Loop over grouped modules, configure staggering and push to the simulation state - for (duration, capNeed, clipSize), amount in mods.iteritems(): - if self.stagger: + for (duration, capNeed, clipSize, disableStagger), amount in mods.iteritems(): + if self.stagger and not disableStagger: if clipSize == 0: duration = int(duration/amount) else: diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 81a53665a..631a09648 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -847,10 +847,14 @@ class Fit(object): else: capAdded -= capNeed - drains.append((int(fullCycleTime), mod.getModifiedItemAttr("capacitorNeed") or 0, mod.numShots or 0)) + # Does the RoF attribute exist? If so, this is a turret, don't stagger activations + disableStagger = (mod.getModifiedItemAttr("speed") or 0) != 0 + + drains.append((int(fullCycleTime), mod.getModifiedItemAttr("capacitorNeed") or 0, mod.numShots or 0, disableStagger)) for fullCycleTime, capNeed, clipSize in self.iterDrains(): - drains.append((int(fullCycleTime), capNeed, clipSize)) + # Stagger incoming effects for cap simulation + drains.append((int(fullCycleTime), capNeed, clipSize, False)) if capNeed > 0: capUsed += capNeed / (fullCycleTime / 1000.0) else: