From aaa5a6ae18336afa3cf72e15daf030d8345e6b01 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Tue, 30 Jun 2015 13:51:15 -0400 Subject: [PATCH] Gracefully handle invalid boosters in database (both itemIDs that don't exist as well as non-booster items). Implants need a little more work --- eos/effectHandlerHelpers.py | 12 ++++++++---- eos/saveddata/booster.py | 10 +++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/eos/effectHandlerHelpers.py b/eos/effectHandlerHelpers.py index b3b4c75ee..ecf20d9e1 100644 --- a/eos/effectHandlerHelpers.py +++ b/eos/effectHandlerHelpers.py @@ -233,10 +233,14 @@ class HandledImplantBoosterList(HandledList): self.__slotCache = {} def append(self, implant): - if self.__slotCache.has_key(implant.slot): - raise ValueError("Implant/Booster slot already in use, remove the old one first or set replace = True") - self.__slotCache[implant.slot] = implant - HandledList.append(self, implant) + try: + if self.__slotCache.has_key(implant.slot): + raise ValueError("Implant/Booster slot already in use, remove the old one first or set replace = True") + self.__slotCache[implant.slot] = implant + HandledList.append(self, implant) + except: + # if anything goes wrong, simply remove the item + eos.db.remove(implant) def remove(self, implant): HandledList.remove(self, implant) diff --git a/eos/saveddata/booster.py b/eos/saveddata/booster.py index 001a163de..d2125404f 100644 --- a/eos/saveddata/booster.py +++ b/eos/saveddata/booster.py @@ -46,9 +46,13 @@ class Booster(HandledItem, ItemAttrShortcut): def __fetchItemInfo(self): import eos.db - self.__item = eos.db.getItem(self.itemID) - self.__slot = self.__calculateSlot(self.__item) - self.build() + item = eos.db.getItem(self.itemID) + if item: + self.__item = item + self.__slot = self.__calculateSlot(self.__item) + self.build() + else: + raise ValueError("Invalid item as Booster:", self.itemID) def iterSideEffects(self): return self.__sideEffects.__iter__()