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
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
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)
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
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)
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()
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
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
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)
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)
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
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
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'))
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
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
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
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()
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
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
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)
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
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
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')
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
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
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)
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
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)
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)