Ejemplo n.º 1
0
    def IsItemIDLocked(self, itemID, locationID=None, typeID=None):
        stationID = None
        if locationID is not None:
            if eve.session.stationid:
                office = self.corp__locations.GetOffice()
                if office is not None:
                    if locationID == office.itemID:
                        stationID = eve.session.stationid
            if stationID is None:
                rows = self.corp__locations.GetMyCorporationsOffices(
                ).SelectByUniqueColumnValues('officeID', [locationID])
                if rows and len(rows):
                    for row in rows:
                        if locationID == row.officeID and util.IsStation(
                                row.locationID):
                            stationID = row.locationID
                            break

        if typeID is not None:
            if stationID is None and evetypes.GetCategoryID(
                    typeID) == const.categoryStation:
                stationID = locationID
        if stationID is None:
            stationID = eve.session.stationid or eve.session.solarsystemid
        if stationID is not None:
            return self.GetLockedItemsByLocation(stationID).has_key(itemID)
        return 0
Ejemplo n.º 2
0
    def TryFitModuleToOneSlot(self, moduleTypeID, preview=False):
        fittingSvc = sm.GetService('fittingSvc')
        shipID = self.fittingDogmaLocation.shipID
        if not fittingSvc.IsShipSimulated():
            return
        if evetypes.GetCategoryID(moduleTypeID) == const.categoryDrone:
            return self.FitADroneToShip(moduleTypeID,
                                        raiseError=False,
                                        sendUpdateEvent=True)
        flagIDs = GetSlotListForTypeID(moduleTypeID)
        dogmaItemFitted = None
        for flagID in flagIDs:
            oldGhostFittedItem = self.fittingDogmaLocation.GetModuleFromShipFlag(
                flagID)
            if oldGhostFittedItem and getattr(oldGhostFittedItem,
                                              'isPreviewItem', None):
                self.UnfitModule(oldGhostFittedItem.itemID)
            dogmaItemFitted = self.FitModuleToShipAndChangeState(
                shipID, flagID, moduleTypeID, preview=preview)
            if dogmaItemFitted:
                break

        if dogmaItemFitted:
            self.SendFittingSlotsChangedEvent()
        return dogmaItemFitted
Ejemplo n.º 3
0
 def LoadScene(self, sceneContainer):
     sceneContainer.PrepareSpaceScene(scenePath=self.scenePath)
     resFile = inventorycommon.typeHelpers.GetGraphicFile(self.typeID)
     modelDNA = None
     if evetypes.GetCategoryID(
             self.typeID) == invconst.categoryStation and self.itemID:
         stations = cfg.mapSolarSystemContentCache.npcStations
         npcStation = stations.get(self.itemID, None)
         if npcStation:
             graphicID = npcStation.graphicID
             modelDNA = gfxutils.BuildSOFDNAFromGraphicID(graphicID)
     if modelDNA is None:
         modelDNA = gfxutils.BuildSOFDNAFromTypeID(
             self.typeID, materialSetID=self.materialSetID)
     if modelDNA is not None:
         spaceObjectFactory = sm.GetService('sofService').spaceObjectFactory
         model = spaceObjectFactory.BuildFromDNA(modelDNA)
     else:
         model = trinity.Load(resFile)
     if model is None:
         raise InvalidPreviewType(
             '%s (%s) failed to load associated model' %
             (evetypes.GetName(self.typeID), self.typeID))
     if getattr(model, 'boosters', None) is not None:
         model.boosters = None
     if getattr(model, 'modelRotationCurve', None) is not None:
         model.modelRotationCurve = None
     if getattr(model, 'modelTranslationCurve', None) is not None:
         model.modelTranslationCurve = None
     SetupAnimations(model, self.typeID)
     model.FreezeHighDetailMesh()
     trinity.WaitForResourceLoads()
     sceneContainer.AddToScene(model)
     SetupSpaceCamera(sceneContainer, model)
Ejemplo n.º 4
0
 def UpdateDamage(self):
     if self.destroyed:
         self.sr.dmgTimer = None
         return
     if not util.InBubble(self.GetShipID()):
         self.HideDamageDisplay()
         return False
     d = self.sr.node
     if not getattr(d, 'slimItem', None):
         categoryID = evetypes.GetCategoryID(d.typeID)
     else:
         slimItem = d.slimItem()
         if not slimItem:
             self.HideDamageDisplay()
             return False
         categoryID = slimItem.categoryID
     shipID = self.GetShipID()
     ret = False
     if shipID and categoryID in (const.categoryShip, const.categoryDrone):
         dmg = self.GetDamage(shipID)
         if dmg is not None:
             ret = self.SetDamageState(dmg)
             if self.sr.dmgTimer is None:
                 self.sr.dmgTimer = base.AutoTimer(1000, self.UpdateDamage)
         else:
             self.HideDamageDisplay()
     return ret
Ejemplo n.º 5
0
    def LoadT3Ship(self):
        modules = self.typeData.get('slimItem').modules
        subsystems = {}
        self._LockT3Loading()
        self.loadingModel = True
        oldModel = self.model
        try:
            for _, typeID, _ in modules:
                if evetypes.GetCategoryID(typeID) == const.categorySubSystem:
                    subsystems[evetypes.GetGroupID(typeID)] = typeID

            t3ShipSvc = self.sm.GetService('t3ShipSvc')
            model = t3ShipSvc.GetTech3ShipFromDict(self.typeID, subsystems, self.typeData.get('sofRaceName', None))
            if self.released:
                return
            if model is not None:
                SpaceObject.LoadModel(self, None, loadedModel=model)
                self.Assemble()
            self.Display(1)
        finally:
            self.loadingModel = False
            self._UnlockT3Loading()

        if oldModel is not None:
            self.RemoveAndClearModel(oldModel)
Ejemplo n.º 6
0
    def AddEntry(self, nodes):
        if self.compareinited:
            if type(nodes) != type([]):
                nodes = [nodes]
            current = [node.typeID for node in self.typeIDs]
            valid = [node for node in nodes if node not in current]
            hasNew = False
            for typeID in valid:
                topLevelMarketGroupID = self.GetTopLevelMarketGroupID(typeID)
                if topLevelMarketGroupID == -1:
                    eve.Message('CannotCompareNoneItem')
                    break
                categoryID = evetypes.GetCategoryID(typeID)
                if categoryID not in compareCategories:
                    eve.Message('CannotCompareFromCategory', {
                        'category':
                        evetypes.GetCategoryNameByCategory(categoryID)
                    })
                    break
                if hasattr(
                        self, 'topLevelMarketGroup'
                ) and self.topLevelMarketGroup != topLevelMarketGroupID:
                    self.CompareErrorMessage(topLevelMarketGroupID)
                    break
                else:
                    typeID = self.GetPreparedTypeData(typeID)
                    if typeID not in self.typeIDs:
                        hasNew = True
                        self.typeIDs.append(typeID)

            if hasNew:
                self.OnColumnChanged()
Ejemplo n.º 7
0
    def VerifyFitting(self, fitting):
        if fitting.name.find('@@') != -1 or fitting.description.find('@@') != -1:
            raise UserError('InvalidFittingInvalidCharacter')
        if fitting.shipTypeID is None:
            raise UserError('InvalidFittingDataTypeID', {'typeName': fitting.shipTypeID})
        shipTypeName = evetypes.GetNameOrNone(fitting.shipTypeID)
        if shipTypeName is None:
            raise UserError('InvalidFittingDataTypeID', {'typeName': fitting.shipTypeID})
        if evetypes.GetCategoryID(fitting.shipTypeID) not in (const.categoryShip, const.categoryStructure):
            raise UserError('InvalidFittingDataShipNotShip', {'typeName': shipTypeName})
        if len(fitting.fitData) == 0:
            raise UserError('ParseFittingFittingDataEmpty')
        for typeID, flag, qty in fitting.fitData:
            if not evetypes.Exists(typeID):
                raise UserError('InvalidFittingDataTypeID', {'typeID': typeID})
            try:
                int(flag)
            except TypeError:
                raise UserError('InvalidFittingDataInvalidFlag', {'type': typeID})

            if not (IsShipFittingFlag(flag) or flag in (const.flagDroneBay, const.flagCargo, const.flagFighterBay)):
                raise UserError('InvalidFittingDataInvalidFlag', {'type': typeID})
            try:
                int(qty)
            except TypeError:
                raise UserError('InvalidFittingDataInvalidQuantity', {'type': typeID})

            if qty == 0:
                raise UserError('InvalidFittingDataInvalidQuantity', {'type': typeID})

        return True
Ejemplo n.º 8
0
    def GetStringForFitting(self, fitting):
        typesDict = defaultdict(int)
        drones = {}
        fighters = {}
        charges = {}
        ice = {}
        for typeID, flag, qty in fitting.fitData:
            categoryID = evetypes.GetCategoryID(typeID)
            groupID = evetypes.GetGroupID(typeID)
            if IsShipFittable(categoryID):
                typesDict[typeID] += 1
            elif categoryID == const.categoryDrone:
                drones[typeID] = qty
            elif categoryID == const.categoryFighter:
                fighters[typeID] = qty
            elif categoryID == const.categoryCharge:
                charges[typeID] = qty
            elif groupID == const.groupIceProduct:
                ice[typeID] = qty

        retList = []
        subString = str(fitting.shipTypeID)
        retList.append(subString)
        for eachDict in [typesDict,
         drones,
         fighters,
         charges,
         ice]:
            for typeID, qty in eachDict.iteritems():
                subString = '%s;%s' % (typeID, qty)
                retList.append(subString)

        ret = ':'.join(retList)
        ret += '::'
        return ret
Ejemplo n.º 9
0
    def InitializeData(self):
        for typeID in evetypes.Iterate():
            self.typeData[typeID] = (evetypes.GetGroupID(typeID),
                                     evetypes.GetCategoryID(typeID),
                                     evetypes.GetRaceID(typeID))

        self.blueprints = industry.BlueprintStorage()
 def UnFitItem(self, ghostItem):
     if ghostItem:
         ghostFittingSvc = sm.GetService('ghostFittingSvc')
         if evetypes.GetCategoryID(ghostItem.typeID) == const.categoryDrone:
             ghostFittingSvc.UnfitDrone(ghostItem.itemID)
         else:
             ghostFittingSvc.UnfitModule(ghostItem.itemID)
Ejemplo n.º 11
0
def SetName(invOrSlimItem, invCacheSvc):
    invCacheSvc.TryLockItem(invOrSlimItem.itemID, 'lockItemRenaming',
                            {'itemType': invOrSlimItem.typeID}, 1)
    try:
        cfg.evelocations.Prime([invOrSlimItem.itemID])
        categoryID = evetypes.GetCategoryID(invOrSlimItem.typeID)
        if categoryID == const.categoryStructure:
            return _SetStructureName(
                invOrSlimItem.itemID, invOrSlimItem.locationID
                or session.solarsystemid2)
        try:
            setval = cfg.evelocations.Get(invOrSlimItem.itemID).name
        except StandardError:
            setval = ''
            sys.exc_clear()

        maxLength = 100
        if categoryID == const.categoryShip:
            maxLength = 20
        elif categoryID == const.categoryStarbase:
            maxLength = 32
        nameRet = uiutil.NamePopup(
            localization.GetByLabel('UI/Menusvc/SetName'),
            localization.GetByLabel('UI/Menusvc/TypeInNewName'),
            setvalue=setval,
            maxLength=maxLength)
        if nameRet:
            invCacheSvc.GetInventoryMgr().SetLabel(invOrSlimItem.itemID,
                                                   nameRet.replace('\n', ' '))
            sm.ScatterEvent('OnItemNameChange')
    finally:
        invCacheSvc.UnlockItem(invOrSlimItem.itemID)
Ejemplo n.º 12
0
def ItemLocationFlag(location):
    if location.typeID == const.typeOffice:
        return location.flagID
    if evetypes.GetCategoryID(location.typeID) == const.categoryStarbase:
        return location.flagID
    if evetypes.GetGroupID(location.typeID) == const.groupStation:
        return location.flagID
Ejemplo n.º 13
0
def GetReprocessingOptions(types):
    options = []
    optionTypes = {}
    noneTypes = [const.typeCredits, const.typeBookmark, const.typeBiomass]
    noneGroups = [const.groupRookieship, const.groupMineral]
    noneCategories = [const.categoryBlueprint, const.categoryReaction]
    for key in types.iterkeys():
        typeID = key
        isRecyclable = 0
        isRefinable = 0
        groupID = evetypes.GetGroupID(typeID)
        categoryID = evetypes.GetCategoryID(typeID)
        if typeID not in noneTypes and groupID not in noneGroups and categoryID not in noneCategories:
            if typeID in cfg.invtypematerials:
                materials = cfg.invtypematerials[typeID]
                if len(materials) > 0:
                    if categoryID == const.categoryAsteroid or groupID == const.groupHarvestableCloud:
                        isRefinable = 1
                    else:
                        isRecyclable = 1
        options.append(
            utillib.KeyVal(typeID=typeID,
                           isRecyclable=isRecyclable,
                           isRefinable=isRefinable))

    for option in options:
        optionTypes[option.typeID] = option

    return optionTypes
Ejemplo n.º 14
0
    def LoadResult(self, cargoList):
        scrolllist = []
        for typeID, quantity in cargoList:
            qty = quantity if quantity > 0 else 1
            data = util.KeyVal()
            isCopy = False
            param = {'qty': qty, 'typeID': typeID}
            categoryID = evetypes.GetCategoryID(typeID)
            if categoryID == const.categoryBlueprint:
                if quantity == -const.singletonBlueprintCopy:
                    typeName = 'UI/Ship/ShipScan/BlueprintCopy'
                    quantity = 1
                    isCopy = True
                else:
                    typeName = 'UI/Ship/ShipScan/BlueprintOriginal'
            else:
                typeName = 'UI/Ship/ShipScan/FoundTypes'
            data.label = localization.GetByLabel(typeName, **param)
            data.itemID = None
            data.typeID = typeID
            data.isCopy = isCopy
            data.getIcon = True
            if categoryID == const.categoryBlueprint:
                data.abstractinfo = util.KeyVal(
                    categoryID=const.categoryBlueprint, isCopy=data.isCopy)
            scrolllist.append(listentry.Get('Item', data=data))

        self.sr.scroll.Load(contentList=scrolllist,
                            noContentHint=localization.GetByLabel(
                                'UI/Ship/ShipScan/NoBookmarksFound'))
Ejemplo n.º 15
0
    def GetStandardLinkHint(self, url):
        if url.startswith('showinfo'):
            parsedArgs = BaseLink().ParseShowInfo(url[9:])
            if not parsedArgs:
                return localization.GetByLabel('UI/Commands/ShowInfo')
            typeID, itemID, data = parsedArgs
            if evetypes.Exists(typeID):
                if evetypes.GetCategoryID(typeID) == const.categorySkill:
                    hintText = localization.GetByLabel('UI/Common/ShowTypeInfo', groupName=evetypes.GetCategoryName(typeID))
                else:
                    hintText = localization.GetByLabel('UI/Common/ShowTypeInfo', groupName=evetypes.GetGroupName(typeID))
            else:
                hintText = localization.GetByLabel('UI/Common/ShowInfo')
            return hintText
        if url.startswith('podGuideLink'):
            podGuideID = int(url[len('podGuideLink:'):])
            return localization.GetByMessageID(GetTermShortText(podGuideID))
        if url.startswith('accessGroup'):
            return ''
        for k, v in HINTLABELS.iteritems():
            if url.startswith('%s:' % k):
                if v is None:
                    return v
                return localization.GetByLabel(v)

        return url
Ejemplo n.º 16
0
 def IsFighter(self, typeID):
     try:
         return self.isFighter[typeID]
     except KeyError:
         categoryID = evetypes.GetCategoryID(typeID)
         isFighter = categoryID == const.categoryFighter
         self.isFighter[typeID] = isFighter
         return isFighter
Ejemplo n.º 17
0
 def IsDrone(self, typeID):
     try:
         return self.isDrone[typeID]
     except KeyError:
         categoryID = evetypes.GetCategoryID(typeID)
         isDrone = categoryID == const.categoryDrone
         self.isDrone[typeID] = isDrone
         return isDrone
Ejemplo n.º 18
0
 def SetGhostFittedItem(self, ghostItem = None):
     if ghostItem and evetypes.GetCategoryID(ghostItem.typeID) not in GHOST_FITTABLE_GROUPS:
         return
     if self.IsSwitchingShips():
         return
     self.ghostFittedItem = ghostItem
     self.on_item_ghost_fitted()
     self.on_stats_changed()
Ejemplo n.º 19
0
 def __init__(self, typeID, gender=None, background=None):
     if evetypes.GetCategoryID(typeID) != invconst.categoryApparel:
         raise InvalidPreviewType('%s (%s) is not an apparel item' %
                                  (evetypes.GetName(typeID), typeID))
     self.typeID = typeID
     self.gender = gender
     self.background = background
     self.mannequin = None
Ejemplo n.º 20
0
 def __init__(self, locationID, flagID, typeID, ownerID=None, number=None):
     self.locationID = locationID
     self.flagID = flagID
     self.typeID = typeID
     self.number = number
     self.itemID = self.GetItemKey()
     self.categoryID = evetypes.GetCategoryID(typeID)
     self.groupID = evetypes.GetGroupID(typeID)
     self.ownerID = session.charid
Ejemplo n.º 21
0
 def PreviewSkin(self, typeID, scenePath=None):
     if evetypes.GetCategoryID(typeID) == invconst.categoryShip:
         return self.PreviewSpaceEntity(typeID, scenePath=scenePath)
     else:
         skin = sm.GetService('skinSvc').GetSkinByLicenseType(typeID)
         entityTypeID = skin.types[0]
         return self.PreviewSpaceEntity(entityTypeID,
                                        materialSetID=skin.materialSetID,
                                        scenePath=scenePath)
Ejemplo n.º 22
0
    def GetValidBookmarks(self):
        ret = []
        for bookmark in self.bookmarkCache.itervalues():
            if evetypes.GetCategoryID(
                    bookmark.typeID) not in self.validCategories:
                continue
            ret.append(bookmark)

        return ret
Ejemplo n.º 23
0
 def AddSimulatedDrones(self, nodes):
     ghostFittingSvc = sm.GetService('ghostFittingSvc')
     for eachNode in nodes:
         try:
             typeID = eachNode.typeID or eachNode.rec.typeID
             if evetypes.GetCategoryID(typeID) == const.categoryDrone:
                 ghostFittingSvc.FitDronesToShip(typeID)
         except Exception as e:
             pass
Ejemplo n.º 24
0
 def GetBlueprintType(self, blueprintTypeID, isCopy=False):
     try:
         ret = cfg.blueprints[blueprintTypeID]
         if isCopy or evetypes.GetCategoryID(
                 blueprintTypeID) == const.categoryAncientRelic:
             ret = ret.copy()
             ret.original = False
         return ret
     except KeyError:
         raise UserError('IndustryBlueprintNotFound')
Ejemplo n.º 25
0
def CanPutTypeInCustomsOffice(typeID):
    groupID = evetypes.GetGroupID(typeID)
    categoryID = evetypes.GetCategoryID(typeID)
    if categoryID not in (const.categoryCommodity,
                          const.categoryPlanetaryResources,
                          const.categoryPlanetaryCommodities):
        return False
    if categoryID == const.categoryCommodity and groupID != const.groupGeneral:
        return False
    return True
Ejemplo n.º 26
0
def GetListForFakeItemRow(item):
    line = [
        item.itemID, item.typeID, session.charid,
        evetypes.GetGroupID(item.typeID),
        evetypes.GetCategoryID(item.typeID), item.quantity,
        -item.quantity if item.quantity < 0 else 0,
        1 if item.quantity < 0 else item.quantity, item.locationID,
        item.flagID, None
    ]
    return line
Ejemplo n.º 27
0
def FindRadialMenuOptions(slimItem=None,
                          itemID=None,
                          typeID=None,
                          primaryActions=True,
                          bookmarkInfo=None,
                          manyItemsData=None,
                          siteData=None):
    filterList = []
    if not bookmarkInfo and not manyItemsData and not slimItem and itemID:
        slimItem = GetBallparkRecord(itemID)
    menuSvc = sm.GetService('menu')
    if manyItemsData:
        allMenuOptions = manyItemsData.menuFunction(manyItemsData.itemData)
    elif slimItem:
        celestialData = [(slimItem.itemID, None, slimItem, 0, None, None, None)
                         ]
        allMenuOptions = menuSvc.GetCelestialMenuForSelectedItem(
            celestialData, ignoreShipConfig=False)
        typeID = slimItem.typeID
        filterList.append('UI/Inflight/SetDestination')
    elif siteData is not None:
        allMenuOptions = siteData.GetMenu()
    elif bookmarkInfo is not None:
        allMenuOptions = menuSvc.CelestialMenu(itemID, bookmark=bookmarkInfo)
        typeID = bookmarkInfo.typeID
    elif itemID and IsCharacter(itemID):
        allMenuOptions = menuSvc.CharacterMenu(itemID) + menuSvc.FleetMenu(
            itemID, unparsed=False)
    elif typeID is not None:
        allMenuOptions = menuSvc.GetMenuFormItemIDTypeID(itemID, typeID)
    else:
        allMenuOptions = []
    if typeID is not None:
        categoryID = evetypes.GetCategoryID(typeID)
        groupID = evetypes.GetGroupID(typeID)
    else:
        categoryID = None
        groupID = None
    if primaryActions:
        allWantedMenuOptions = GetObjectsActions(categoryID,
                                                 groupID,
                                                 typeID,
                                                 itemID,
                                                 bookmarkInfo=bookmarkInfo,
                                                 siteData=siteData)
    else:
        allWantedMenuOptions = GetObjectsSecondaryActions(categoryID,
                                                          groupID,
                                                          typeID,
                                                          itemID,
                                                          bookmarkInfo,
                                                          siteData=siteData)
    return PrepareRadialMenuOptions(allMenuOptions, allWantedMenuOptions,
                                    filterList)
Ejemplo n.º 28
0
def GetRefiningYieldPercentageForType(charID, dogmaIM, dogmaLM, skillHandler, typeID):
    if evetypes.GetCategoryID(typeID) == invconst.categoryAsteroid:
        refiningYieldPercentage = dogmaLM.GetCharacterAttribute(charID, dgmconst.attributeRefiningYieldPercentage)
        skillTypeID = dogmaIM.GetTypeAttribute(typeID, dgmconst.attributeReprocessingSkillType)
    else:
        refiningYieldPercentage = 1.0
        skillTypeID = invconst.typeScrapmetalProcessing
    skillLevel = skillHandler.GetSkillLevel(skillTypeID)
    percentagePerLevel = dogmaIM.GetTypeAttribute2(skillTypeID, dgmconst.attributeRefiningYieldMutator)
    refiningYieldPercentage *= (100 + skillLevel * float(percentagePerLevel)) / 100
    return refiningYieldPercentage
Ejemplo n.º 29
0
def GetTypeVolume(typeID, qty=-1):
    if typeID == typePlasticWrap:
        raise RuntimeError(
            'GetTypeVolume: cannot determine volume of plastic from type alone'
        )
    item = Bundle(typeID=typeID,
                  groupID=evetypes.GetGroupID(typeID),
                  categoryID=evetypes.GetCategoryID(typeID),
                  quantity=qty,
                  singleton=-qty if qty < 0 else 0,
                  stacksize=qty if qty >= 0 else 1)
    return GetItemVolume(item)
Ejemplo n.º 30
0
def GetSearchResults(conditions, itemRowset, searchtype):
    stations = defaultdict(list)
    itemsByContainerID = defaultdict(set)
    allContainersByItemIDs = {}
    failedTypeCheck = set()
    containerGroups = set([
        const.groupSecureCargoContainer, const.groupAuditLogSecureContainer,
        const.groupFreightContainer, const.groupCargoContainer
    ])
    containerTypesIDs = set([const.typeAssetSafetyWrap])
    containerFlags = (const.flagNone, const.flagLocked, const.flagUnlocked)
    LogNotice('Asset search - find containers')
    for item in itemRowset:
        if item.groupID in containerGroups or item.typeID in containerTypesIDs:
            allContainersByItemIDs[item.itemID] = item

    def AddStationIDToFakeRow(locationID, row):
        containerItem = allContainersByItemIDs.get(locationID)
        if containerItem:
            stationID = containerItem.locationID
        elif row.flagID in (const.flagHangar, const.flagAssetSafety):
            stationID = locationID
        else:
            return
        setattr(row, 'stationID', stationID)

    LogNotice('Asset Search - start search')
    for item in itemRowset:
        typeID = item.typeID
        if not evetypes.Exists(typeID):
            continue
        if item.stacksize == 0:
            continue
        if searchtype:
            if typeID in failedTypeCheck:
                continue
            elif not MatchesTypeChecks(typeID, evetypes.GetGroupID(typeID),
                                       evetypes.GetCategoryID(typeID),
                                       searchtype):
                failedTypeCheck.add(typeID)
                continue
            AddStationIDToFakeRow(item.locationID, item)
        else:
            AddStationIDToFakeRow(item.locationID, item)
            if not MatchesSearchCriteria(item, conditions):
                continue
        if item.locationID in allContainersByItemIDs:
            itemsByContainerID[item.locationID].add(item)
        else:
            stations[item.locationID].append(item)

    LogNotice('Asset Search - Searching done')
    return (allContainersByItemIDs, itemsByContainerID, stations)