diff --git a/eos/gamedata.py b/eos/gamedata.py index ac984eedc..35016fac3 100644 --- a/eos/gamedata.py +++ b/eos/gamedata.py @@ -184,14 +184,15 @@ class Item(EqBase): attr.value = val self.__attributes[info.name] = attr try: - self.__overrides = __import__('overrides.' + str(self.ID), fromlist=True) + mod = __import__('overrides.' + str(self.ID), fromlist=True) + self.overrides = {} + for key in dir(mod): + if key[:2] != "__": + self.overrides[key] = getattr(mod, key) except ImportError: - self.__overrides = None + self.overrides = {} + - if self.__overrides: - for key in dir(self.__overrides): - if key in self.__attributes: - self.__attributes[key].value = getattr(self.__overrides, key) @reconstructor def init(self): diff --git a/eos/modifiedAttributeDict.py b/eos/modifiedAttributeDict.py index de63420d1..76ef86007 100644 --- a/eos/modifiedAttributeDict.py +++ b/eos/modifiedAttributeDict.py @@ -51,6 +51,8 @@ class ModifiedAttributeDict(collections.MutableMapping): self.__modified = {} # Affected by entities self.__affectedBy = {} + # Overrides + self.__overrides = {} # Dictionaries for various value modification types self.__forced = {} self.__preAssigns = {} @@ -79,6 +81,14 @@ class ModifiedAttributeDict(collections.MutableMapping): self.__original = val self.__modified.clear() + @property + def overrides(self): + return self.__overrides + + @overrides.setter + def overrides(self, val): + self.__overrides = val + def __getitem__(self, key): # Check if we have final calculated value if key in self.__modified: diff --git a/eos/saveddata/booster.py b/eos/saveddata/booster.py index c0874fe94..9d0e98ae0 100644 --- a/eos/saveddata/booster.py +++ b/eos/saveddata/booster.py @@ -58,6 +58,7 @@ class Booster(HandledItem, ItemAttrShortcut): self.__sideEffects = [] self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides self.__slot = self.__calculateSlot(self.__item) for effect in self.__item.effects.itervalues(): diff --git a/eos/saveddata/cargo.py b/eos/saveddata/cargo.py index 26509d525..676b7cebf 100644 --- a/eos/saveddata/cargo.py +++ b/eos/saveddata/cargo.py @@ -34,6 +34,7 @@ class Cargo(HandledItem, ItemAttrShortcut): self.amount = 0 self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = item.attributes + self.__itemModifiedAttributes.overrides = item.overrides @reconstructor def init(self): @@ -48,6 +49,7 @@ class Cargo(HandledItem, ItemAttrShortcut): self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides @property def itemModifiedAttributes(self): diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py index 1a63d57a3..2fcb6a908 100644 --- a/eos/saveddata/drone.py +++ b/eos/saveddata/drone.py @@ -67,6 +67,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.__miningyield = None self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides self.__chargeModifiedAttributes = ModifiedAttributeDict() chargeID = self.getModifiedItemAttr("entityMissileTypeID") @@ -74,6 +75,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): charge = eos.db.getItem(int(chargeID)) self.__charge = charge self.__chargeModifiedAttributes.original = charge.attributes + self.__chargeModifiedAttributes.overrides = charge.overrides @property def itemModifiedAttributes(self): diff --git a/eos/saveddata/implant.py b/eos/saveddata/implant.py index 64670d769..b5be77986 100644 --- a/eos/saveddata/implant.py +++ b/eos/saveddata/implant.py @@ -56,6 +56,7 @@ class Implant(HandledItem, ItemAttrShortcut): """ Build object. Assumes proper and valid item already set """ self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides self.__slot = self.__calculateSlot(self.__item) @property diff --git a/eos/saveddata/mode.py b/eos/saveddata/mode.py index 3a344d74d..91fbaf6eb 100644 --- a/eos/saveddata/mode.py +++ b/eos/saveddata/mode.py @@ -30,6 +30,7 @@ class Mode(ItemAttrShortcut, HandledItem): self.__item = item self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.item.attributes + self.__itemModifiedAttributes.overrides = self.item.overrides @property def item(self): diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index e5468553a..5fbb75e1c 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -113,10 +113,13 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): if self.__item: self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides self.__hardpoint = self.__calculateHardpoint(self.__item) self.__slot = self.__calculateSlot(self.__item) if self.__charge: self.__chargeModifiedAttributes.original = self.__charge.attributes + self.__chargeModifiedAttributes.overrides = self.__charge.overrides + @classmethod def buildEmpty(cls, slot): @@ -283,9 +286,11 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): if charge is not None: self.chargeID = charge.ID self.__chargeModifiedAttributes.original = charge.attributes + self.__chargeModifiedAttributes.overrides = charge.overrides else: self.chargeID = None self.__chargeModifiedAttributes.original = None + self.__chargeModifiedAttributes.overrides = {} self.__itemModifiedAttributes.clear() diff --git a/eos/saveddata/ship.py b/eos/saveddata/ship.py index daa5e99ec..0a0e13c45 100644 --- a/eos/saveddata/ship.py +++ b/eos/saveddata/ship.py @@ -51,6 +51,7 @@ class Ship(ItemAttrShortcut, HandledItem): self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = dict(self.item.attributes) self.__itemModifiedAttributes.original.update(self.EXTRA_ATTRIBUTES) + self.__itemModifiedAttributes.overrides = self.item.overrides self.commandBonus = 0