예제 #1
0
    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
예제 #2
0
파일: eft.py 프로젝트: zzwpower/Pyfa
    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
예제 #3
0
 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)
예제 #4
0
    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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
    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