From bcc77f11cd68fa15e94d98af6f30f87e0b78d0ca Mon Sep 17 00:00:00 2001 From: blitzmann Date: Wed, 1 Jul 2015 14:50:08 -0400 Subject: [PATCH] Handle invalid projected drones --- eos/effectHandlerHelpers.py | 6 ++- eos/saveddata/drone.py | 77 +++++++++++++++++-------------------- eos/saveddata/module.py | 5 ++- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/eos/effectHandlerHelpers.py b/eos/effectHandlerHelpers.py index 0266df4ea..98997e8da 100644 --- a/eos/effectHandlerHelpers.py +++ b/eos/effectHandlerHelpers.py @@ -297,7 +297,11 @@ class HandledProjectedModList(HandledList): class HandledProjectedDroneList(HandledDroneList): def append(self, proj): proj.projected = True - list.append(self, proj) + HandledList.append(self, proj) + + # Remove invalid or non-projectable drones + if proj.isInvalid or not proj.item.isType("projected"): + self.remove(proj) class HandledProjectedFitList(HandledList): def append(self, proj): diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py index 289674f1e..0c7f9a541 100644 --- a/eos/saveddata/drone.py +++ b/eos/saveddata/drone.py @@ -20,81 +20,76 @@ from eos.modifiedAttributeDict import ModifiedAttributeDict, ItemAttrShortcut, ChargeAttrShortcut from eos.effectHandlerHelpers import HandledItem, HandledCharge from sqlalchemy.orm import validates, reconstructor +import eos.db class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): DAMAGE_TYPES = ("em", "kinetic", "explosive", "thermal") MINING_ATTRIBUTES = ("miningAmount",) def __init__(self, item): - if item.category.name != "Drone": - raise ValueError("Passed item is not a drone") - + """Initialize a drone from the program""" self.__item = item - self.__charge = None - self.itemID = item.ID + self.__invalid = False + self.itemID = item.ID if item is not None else None self.amount = 0 self.amountActive = 0 - self.__dps = None - self.__volley = None - self.__miningyield = None self.projected = False - self.__itemModifiedAttributes = ModifiedAttributeDict() - self.itemModifiedAttributes.original = self.item.attributes + self.build() + @reconstructor def init(self): + """Initialize a drone from the database and validate""" + self.__item = None + self.__invalid = False + + if self.itemID: + # if item does not exist, set invalid + item = eos.db.getItem(self.itemID) + if item is None: + self.__invalid = True + self.__item = item + + self.build() + + def build(self): + if self.__item and self.__item.category.name != "Drone": + self.__invalid = True + + self.__charge = None self.__dps = None self.__volley = None self.__miningyield = None - self.__item = None - self.__charge = None - - def __fetchItemInfo(self): - import eos.db - self.__item = eos.db.getItem(self.itemID) - self.__charge = None self.__itemModifiedAttributes = ModifiedAttributeDict() - self.__itemModifiedAttributes.original = self.item.attributes - - def __fetchChargeInfo(self): - chargeID = self.getModifiedItemAttr("entityMissileTypeID") self.__chargeModifiedAttributes = ModifiedAttributeDict() - if chargeID is not None: - import eos.db - charge = eos.db.getItem(int(chargeID)) - self.__charge = charge - self.chargeModifiedAttributes.original = charge.attributes - else: - self.__charge = 0 + if self.__item: + self.__itemModifiedAttributes.original = self.__item.attributes + chargeID = self.getModifiedItemAttr("entityMissileTypeID") + if chargeID is not None: + charge = eos.db.getItem(int(chargeID)) + self.__charge = charge + self.__chargeModifiedAttributes.original = charge.attributes @property def itemModifiedAttributes(self): - if self.__item is None: - self.__fetchItemInfo() - return self.__itemModifiedAttributes @property def chargeModifiedAttributes(self): - if self.__charge is None: - self.__fetchChargeInfo() - return self.__chargeModifiedAttributes @property - def item(self): - if self.__item is None: - self.__fetchItemInfo() + def isInvalid(self): + return self.__invalid + @property + def item(self): return self.__item @property def charge(self): - if self.__charge is None: - self.__fetchChargeInfo() - - return self.__charge if self.__charge != 0 else None + return self.__charge @property def dealsDamage(self): diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index 3fea48593..c472c0927 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -61,7 +61,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): @reconstructor def init(self): - """Initialize a module form the database and validate""" + """Initialize a module from the database and validate""" self.__item = None self.__charge = None self.__invalid = False @@ -128,9 +128,11 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): @property def hardpoint(self): return self.__hardpoint + @property def isInvalid(self): return self.__invalid + @property def numCharges(self): if self.charge is None: @@ -481,7 +483,6 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): def getValidCharges(self): validCharges = set() - import eos.db for i in range(5): itemChargeGroup = self.getModifiedItemAttr('chargeGroup' + str(i)) if itemChargeGroup is not None: