def __makeModule(self, itemSpec): # Mutate item if needed m = None if itemSpec.mutationIdx in self.mutations: mutaItem, mutaAttrs = self.mutations[itemSpec.mutationIdx] mutaplasmid = getDynamicItem(mutaItem.ID) if mutaplasmid: try: m = Module(mutaplasmid.resultingItem, itemSpec.item, mutaplasmid) except ValueError: pass else: for attrID, mutator in m.mutators.items(): if attrID in mutaAttrs: mutator.value = mutaAttrs[attrID] # If we still don't have item (item is not mutated or we # failed to construct mutated item), try to make regular item if m is None: try: m = Module(itemSpec.item) except ValueError: return None if itemSpec.charge is not None and m.isValidCharge(itemSpec.charge): m.charge = itemSpec.charge if itemSpec.offline and m.isValidState(FittingModuleState.OFFLINE): m.state = FittingModuleState.OFFLINE elif m.isValidState(FittingModuleState.ACTIVE): m.state = activeStateLimit(m.item) return m
def addDrone(self, itemSpec): if itemSpec is None: return drone = None if itemSpec.mutationIdx in self.mutations: mutaItem, mutaAttrs = self.mutations[itemSpec.mutationIdx] mutaplasmid = getDynamicItem(mutaItem.ID) if mutaplasmid: try: drone = Drone(mutaplasmid.resultingItem, itemSpec.item, mutaplasmid) except ValueError: pass else: for attrID, mutator in drone.mutators.items(): if attrID in mutaAttrs: mutator.value = mutaAttrs[attrID] if drone is None: try: drone = Drone(itemSpec.item) except ValueError: return drone.amount = itemSpec.amount if drone.isMutated: self.drones.append(drone) else: for fitDrone in self.drones: if fitDrone.item.ID == itemSpec.item.ID: fitDrone.amount += drone.amount break else: self.drones.append(drone)
def Do(self): sFit = Fit.getInstance() fitID = self.fitID fit = eos.db.getFit(fitID) if self.baseItem is None: pyfalog.warning("Unable to build non-mutated module: no base item to build from") return False try: mutaTypeID = self.mutaItem.ID except AttributeError: mutaplasmid = None else: mutaplasmid = getDynamicItem(mutaTypeID) # Try to build simple item even though no mutaplasmid found if mutaplasmid is None: try: module = Module(self.baseItem) except ValueError: pyfalog.warning("Unable to build non-mutated module: {}", self.baseItem) return False # Build mutated module otherwise else: try: module = Module(mutaplasmid.resultingItem, self.baseItem, mutaplasmid) except ValueError: pyfalog.warning("Unable to build mutated module: {} {}", self.baseItem, self.mutaItem) return False else: for attrID, mutator in module.mutators.items(): if attrID in self.attrMap: mutator.value = self.attrMap[attrID] # this is essentially the same as the FitAddModule command. possibly look into centralizing this functionality somewhere? if module.fits(fit): pyfalog.debug("Adding {} as module for fit {}", module, fit) module.owner = fit numSlots = len(fit.modules) fit.modules.append(module) if module.isValidState(FittingModuleState.ACTIVE): module.state = FittingModuleState.ACTIVE # todo: fix these # As some items may affect state-limiting attributes of the ship, calculate new attributes first # self.recalc(fit) # Then, check states of all modules and change where needed. This will recalc if needed sFit.checkStates(fit, module) # fit.fill() eos.db.commit() self.change = numSlots != len(fit.modules) self.new_position = module.modPosition else: return False return True
def fetchDynamicItem(dynamicItemData): typeID, itemID = dynamicItemData esiData = EsiAccess().getDynamicItem(typeID, itemID).json() baseItemID = esiData['source_type_id'] mutaplasmidID = esiData['mutator_type_id'] attrs = { i['attribute_id']: i['value'] for i in esiData['dogma_attributes'] } baseItem = fetchItem(baseItemID) mutaplasmid = getDynamicItem(mutaplasmidID) return baseItem, mutaplasmid, attrs
def parseMutant(lines): # Fetch base item type try: baseItemName = lines[0] except IndexError: return None baseItem = fetchItem(baseItemName.strip()) if baseItem is None: return None, None, {} # Fetch mutaplasmid item type and actual item try: mutaplasmidName = lines[1] except IndexError: return baseItem, None, {} mutaplasmidItem = fetchItem(mutaplasmidName.strip()) if mutaplasmidItem is None: return baseItem, None, {} mutaplasmidItem = getDynamicItem(mutaplasmidItem.ID) # Process mutated attribute values try: mutationsLine = lines[2] except IndexError: return baseItem, mutaplasmidItem, {} mutations = {} pairs = [p.strip() for p in mutationsLine.split(',')] for pair in pairs: try: attrName, value = pair.split(' ') except ValueError: continue try: value = float(value) except (ValueError, TypeError): continue attrInfo = getAttributeInfo(attrName.strip()) if attrInfo is None: continue mutations[attrInfo.ID] = value return baseItem, mutaplasmidItem, mutations
def Do(self): sFit = Fit.getInstance() fitID = self.fitID fit = eos.db.getFit(fitID) if self.baseItem is None: pyfalog.warning( "Unable to build non-mutated module: no base item to build from" ) return False try: mutaTypeID = self.mutaItem.ID except AttributeError: mutaplasmid = None else: mutaplasmid = getDynamicItem(mutaTypeID) # Try to build simple item even though no mutaplasmid found if mutaplasmid is None: try: module = Module(self.baseItem) except ValueError: pyfalog.warning("Unable to build non-mutated module: {}", self.baseItem) return False # Build mutated module otherwise else: try: module = Module(mutaplasmid.resultingItem, self.baseItem, mutaplasmid) except ValueError: pyfalog.warning("Unable to build mutated module: {} {}", self.baseItem, self.mutaItem) return False else: for attrID, mutator in module.mutators.items(): if attrID in self.attrMap: mutator.value = self.attrMap[attrID] # this is essentially the same as the FitAddModule command. possibly look into centralizing this functionality somewhere? if module.fits(fit): pyfalog.debug("Adding {} as module for fit {}", module, fit) module.owner = fit numSlots = len(fit.modules) fit.modules.append(module) if module.isValidState(FittingModuleState.ACTIVE): module.state = FittingModuleState.ACTIVE # todo: fix these # As some items may affect state-limiting attributes of the ship, calculate new attributes first # self.recalc(fit) # Then, check states of all modules and change where needed. This will recalc if needed sFit.checkStates(fit, module) # fit.fill() eos.db.commit() self.change = numSlots != len(fit.modules) self.new_position = module.modPosition else: return False return True