diff --git a/eos/gamedata.py b/eos/gamedata.py index e4a4afa1c1..fca14263a7 100644 --- a/eos/gamedata.py +++ b/eos/gamedata.py @@ -243,9 +243,14 @@ def attributes(self): return self.__attributes - def getAttribute(self, key): - if key in self.attributes: - return self.attributes[key].value + def getAttribute(self, key, default=None): + try: + if key in self.attributes: + return self.attributes[key].value + else: + return default + except AttributeError: + return default def isType(self, type): for effect in self.effects.itervalues(): diff --git a/eos/modifiedAttributeDict.py b/eos/modifiedAttributeDict.py index d060eb4253..417a459c24 100644 --- a/eos/modifiedAttributeDict.py +++ b/eos/modifiedAttributeDict.py @@ -25,19 +25,25 @@ class ItemAttrShortcut(object): - def getModifiedItemAttr(self, key): - if key in self.itemModifiedAttributes: - return self.itemModifiedAttributes[key] - else: - return None + def getModifiedItemAttr(self, key, default=None): + try: + if key in self.itemModifiedAttributes: + return self.itemModifiedAttributes[key] + else: + return default + except AttributeError: + return default class ChargeAttrShortcut(object): - def getModifiedChargeAttr(self, key): - if key in self.chargeModifiedAttributes: - return self.chargeModifiedAttributes[key] - else: - return None + def getModifiedChargeAttr(self, key, default=None): + try: + if key in self.chargeModifiedAttributes: + return self.chargeModifiedAttributes[key] + else: + return default + except AttributeError: + return default class ModifiedAttributeDict(collections.MutableMapping): diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py index 080614a3b8..a5188253d5 100644 --- a/gui/builtinViewColumns/misc.py +++ b/gui/builtinViewColumns/misc.py @@ -450,30 +450,69 @@ def __getData(self, stuff): return text, item.name else: return "", None - elif itemGroup in ("Ancillary Armor Repairer", "Ancillary Shield Booster"): - hp = stuff.hpBeforeReload - cycles = stuff.numShots - cycleTime = stuff.rawCycleTime + elif itemGroup in ( + "Ancillary Armor Repairer", + "Ancillary Shield Booster", + "Capacitor Booster", + "Ancillary Remote Armor Repairer", + "Ancillary Remote Shield Booster", + ): + if "Armor" in itemGroup or "Shield" in itemGroup: + boosted_attribute = "HP" + reload_time = item.getAttribute("reloadTime", 0) / 1000 + elif "Capacitor" in itemGroup: + boosted_attribute = "Cap" + reload_time = 10 + else: + boosted_attribute = "" + reload_time = 0 + + cycles = max(stuff.numShots, 0) + cycleTime = max(stuff.rawCycleTime, 0) + + # Get HP or boosted amount + stuff_hp = max(stuff.hpBeforeReload, 0) + armor_hp = stuff.getModifiedItemAttr("armorDamageAmount", 0) + capacitor_hp = stuff.getModifiedChargeAttr("capacitorBonus", 0) + shield_hp = stuff.getModifiedItemAttr("shieldBonus", 0) + hp = max(stuff_hp, armor_hp * cycles, capacitor_hp * cycles, shield_hp * cycles, 0) + if not hp or not cycleTime or not cycles: return "", None + fit = Fit.getInstance().getFit(self.mainFrame.getActiveFit()) ehpTotal = fit.ehp hpTotal = fit.hp useEhp = self.mainFrame.statsPane.nameViewMap["resistancesViewFull"].showEffective - tooltip = "HP restored over duration using charges" - if useEhp: - if itemGroup == "Ancillary Armor Repairer": + tooltip = "{0} restored over duration using charges (plus reload)".format(boosted_attribute) + + if useEhp and boosted_attribute == "HP" and "Remote" not in itemGroup: + if "Ancillary Armor Repairer" in itemGroup: hpRatio = ehpTotal["armor"] / hpTotal["armor"] else: hpRatio = ehpTotal["shield"] / hpTotal["shield"] tooltip = "E{0}".format(tooltip) else: hpRatio = 1 - if itemGroup == "Ancillary Armor Repairer": - hpRatio *= 3 + + if "Ancillary" in itemGroup and "Armor" in itemGroup: + hpRatio *= stuff.getModifiedItemAttr("chargedArmorDamageMultiplier", 1) + ehp = hp * hpRatio + duration = cycles * cycleTime / 1000 - text = "{0} / {1}s".format(formatAmount(ehp, 3, 0, 9), formatAmount(duration, 3, 0, 3)) + for number_of_cycles in {5, 10, 25}: + tooltip = "{0}\n{1} charges lasts {2} seconds ({3} cycles)".format( + tooltip, + formatAmount(number_of_cycles*cycles, 3, 0, 3), + formatAmount((duration+reload_time)*number_of_cycles, 3, 0, 3), + formatAmount(number_of_cycles, 3, 0, 3) + ) + text = "{0} / {1}s (+{2}s)".format( + formatAmount(ehp, 3, 0, 9), + formatAmount(duration, 3, 0, 3), + formatAmount(reload_time, 3, 0, 3) + ) return text, tooltip elif itemGroup == "Armor Resistance Shift Hardener":