diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 77b44ffd2c..1c56b303a4 100755 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -319,17 +319,8 @@ def calculateModifiedAttributes(self, targetFit=None, withBoosters=False, dirtyS else: c = chain((self.character, self.ship), self.drones, self.boosters, self.appliedImplants, self.modules, self.projectedDrones, self.projectedModules) - - for item in c: - # Registering the item about to affect the fit allows us to track "Affected By" relations correctly - if item is not None: - self.register(item) - item.calculateModifiedAttributes(self, runTime, False) - if forceProjected is True: - targetFit.register(item) - item.calculateModifiedAttributes(targetFit, runTime, True) + if self.gangBoosts is not None: - #print self.gangBoosts contextMap = {Skill: "skill", Ship: "ship", Module: "module", @@ -344,17 +335,27 @@ def calculateModifiedAttributes(self, targetFit=None, withBoosters=False, dirtyS (effect.isType("active") and thing.state >= State.ACTIVE): # Run effect, and get proper bonuses applied try: - effect.handler(targetFit, thing, context) + effect.handler(self, thing, context) except: pass else: # Run effect, and get proper bonuses applied try: - effect.handler(targetFit, thing, context) + effect.handler(self, thing, context) except: pass + + for item in c: + # Registering the item about to affect the fit allows us to track "Affected By" relations correctly + if item is not None: + self.register(item) + item.calculateModifiedAttributes(self, runTime, False) + if forceProjected is True: + targetFit.register(item) + item.calculateModifiedAttributes(targetFit, runTime, True) + for fit in self.projectedFits: - fit.calculateModifiedAttributes(self, dirtyStorage=dirtyStorage) + fit.calculateModifiedAttributes(self, withBoosters=withBoosters, dirtyStorage=dirtyStorage) def fill(self): """ diff --git a/service/fit.py b/service/fit.py index 9af64ee769..d376848105 100644 --- a/service/fit.py +++ b/service/fit.py @@ -220,7 +220,11 @@ def switchFit(self, fitID): eos.db.commit() self.recalc(fit, withBoosters=True) - def getFit(self, fitID): + def getFit(self, fitID, projected = False): + ''' Gets fit from database, and populates fleet data. + + Projected is a recursion flag that is set to reduce recursions into projected fits + ''' if fitID is None: return None fit = eos.db.getFit(fitID) @@ -233,8 +237,13 @@ def getFit(self, fitID): fit.fleet = None else: fit.fleet = f - self.recalc(fit, withBoosters=True) - fit.fill() + + if not projected: + for fitP in fit.projectedFits: + self.getFit(fitP.ID, projected = True) + self.recalc(fit, withBoosters=True) + fit.fill() + eos.db.commit() fit.inited = True return fit