def DoFormSubmit(self, *args): for formField in [self.min, self.max, self.number, self.volume]: configFieldName = formField.name self.config[configFieldName] = formField.GetValue() loc = self.spawnlocation if isinstance(loc, types.TupleType): loc, flag = loc else: flag = None if self.config['categoryID'] == 'random': ids = set([ evetypes.GetCategoryIDByGroup(groupID) for groupID in evetypes.IterateGroups() ]) want = list(ids) categories = True groups = False elif self.config['groupID'] == 'random': ids = evetypes.GetGroupIDsByCategory(self.config['categoryID']) want = list(ids) categories = False groups = True else: want = [self.config['groupID']] categories = False groups = True publishedFlags = {0: (False, True), 1: (True, False), -1: (False, False)} onlyPublished, onlyUnpublished = publishedFlags[self.config['published']] if self.prepCorpHangar is True: sm.GetService('window').OpenCorpHangar(None, None, 1) sm.StartService('invtools').SpawnRandom(loc=loc, flag=flag, minQty=self.config['minQty'], maxQty=self.config['maxQty'], iterations=self.config['number'], categories=categories, groups=groups, want=want, onlyPublished=onlyPublished, onlyUnpublished=onlyUnpublished, useMultiMove=self.config['multimove'], volume=self.config['volume'])
def GetSubSystemsByGroup(self): godma = sm.StartService('godma') if self.isPreview: subSystemsByGroupID = {} for groupID in evetypes.GetGroupIDsByCategory( const.categorySubSystem): if groupID not in subSystemsByGroupID: subSystemsByGroupID[groupID] = [] for typeID in evetypes.GetTypeIDsByGroup(groupID): if evetypes.IsPublished(typeID) and godma.GetTypeAttribute( typeID, const.attributeFitsToShipType) == self.ship.typeID: subSystemsByGroupID[groupID].append((typeID, typeID)) else: if not util.IsDocked(): return inv = sm.GetService('invCache').GetInventory(const.containerHangar) subSystemsByGroupID = {} for item in inv.List(const.flagHangar): if item.categoryID != const.categorySubSystem: continue if godma.GetTypeAttribute( item.typeID, const.attributeFitsToShipType) != self.ship.typeID: continue if item.groupID not in subSystemsByGroupID: subSystemsByGroupID[item.groupID] = [] subSystemsByGroupID[item.groupID].append( (item.typeID, item.itemID)) return subSystemsByGroupID
def Load(self): with bluepy.Timer('LoadAttributes'): self.LoadAttributes() with bluepy.Timer('LoadTypeAttributes'): self.LoadTypeAttributes() with bluepy.Timer('LoadEffects'): self.LoadEffects() with bluepy.Timer('LoadTypeEffects'): self.LoadTypeEffects(run=True) self.crystalGroupIDs = cfg.GetCrystalGroups() self.controlBunkersByFactionID = {} for typeID in evetypes.GetTypeIDsByGroup(const.groupControlBunker): factionID = int(self.GetTypeAttribute2(typeID, const.attributeFactionID)) self.controlBunkersByFactionID[factionID] = typeID import re cgre = re.compile('chargeGroup\\d{1,2}') cgattrs = tuple([ a.attributeID for a in cfg.dgmattribs if cgre.match(a.attributeName) is not None ]) self.chargeGroupAttributes = cgattrs self.crystalModuleGroupIDs = {} for categoryID in (const.categoryModule, const.categoryStructureModule, const.categoryStarbase): for groupID in evetypes.GetGroupIDsByCategory(categoryID): typeIDs = evetypes.GetTypeIDsByGroup(groupID) if len(typeIDs) > 0: typeID = typeIDs.pop() for attributeID in cgattrs: v = self.GetTypeAttribute(typeID, attributeID) if v is not None and v in self.crystalGroupIDs: self.crystalModuleGroupIDs[groupID] = True break
def CreateUpgradeCache(self): upgradeGroups = {} sovSvc = sm.GetService('sov') itemData = sovSvc.GetInfrastructureHubItemData(self.hubID) self.billingCost = self.GetBillingCost(itemData) potentialGroupIDs = evetypes.GetGroupIDsByCategory( categoryInfrastructureUpgrade) groupIDsToAdd = set() for groupID in potentialGroupIDs: if evetypes.IsGroupPublishedByGroup(groupID): groupIDsToAdd.add(groupID) for eachGroupID in groupIDsToAdd: groupName = evetypes.GetGroupNameByGroup(eachGroupID) potentialTypeIDs = evetypes.GetTypeIDsByGroup(eachGroupID) typesForGroup = [] for eachTypeID in potentialTypeIDs: if evetypes.IsPublished(eachTypeID): typeInfo = self.GetTypeInfo(eachTypeID, itemData, sovSvc) typesForGroup.append(typeInfo) upgradeGroups[eachGroupID] = util.KeyVal(groupID=eachGroupID, groupName=groupName, types=typesForGroup) self.upgradeGroups = upgradeGroups.values() self.upgradeGroups.sort(key=lambda g: g.groupName) for groupInfo in self.upgradeGroups: groupInfo.types.sort(key=lambda t: t.typeName)
def GetBlueprintsByProductCategory(categoryID): blueprints = set() for groupID in evetypes.GetGroupIDsByCategory(categoryID): for typeIDInGroup in evetypes.GetTypeIDsByGroup(groupID): for typeID in cfg.blueprints.filter_keys('productTypeID', typeIDInGroup): blueprints.add(typeID) blueprints.discard(None) return blueprints
def PreviewType(self, typeID, subsystems=None): evetypes.RaiseIFNotExists(typeID) godma = sm.GetService('godma') if IsModularShip(typeID): if subsystems is None: subsystems = {} subSystemsForType = {} for groupID in evetypes.GetGroupIDsByCategory( const.categorySubSystem): if groupID not in subSystemsForType: subSystemsForType[groupID] = [] for typeID in evetypes.GetTypeIDsByGroup(groupID): if evetypes.IsPublished( typeID) and godma.GetTypeAttribute( typeID, const.attributeFitsToShipType) == typeID: subSystemsForType[groupID].append(typeID) for k, v in subSystemsForType.iteritems(): subsystems[k] = random.choice(v) model = sm.StartService('t3ShipSvc').GetTech3ShipFromDict( typeID, subsystems) else: dna = gfxutils.BuildSOFDNAFromTypeID(typeID) if dna is not None: spaceObjectFactory = sm.GetService( 'sofService').spaceObjectFactory model = spaceObjectFactory.BuildFromDNA(dna) else: fileName = inventorycommon.typeHelpers.GetGraphicFile(typeID) if fileName == '': log.LogWarn('type', typeID, 'has no graphicFile') return model = trinity.Load(fileName) if model is None: self.sceneContainer.ClearScene() raise UserError('PreviewNoModel') 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 if hasattr(model, 'ChainAnimationEx'): model.ChainAnimationEx('NormalLoop', 0, 0, 1.0) self._CreateRotationCurve(model) self.sceneContainer.AddToScene(model) camera = self.sceneContainer.camera if camera is not None: rad = model.GetBoundingSphereRadius() minZoom = rad + camera.frontClip camera.translationFromParent = minZoom * 2 self.sceneContainer.UpdateViewPort()
def _InitShipTypeIDDict(self): self.shipTypeIDsByFactionIDAndGroupID = defaultdict(list) for groupID in evetypes.GetGroupIDsByCategory(const.categoryShip): if not evetypes.IsGroupPublishedByGroup(groupID): continue for typeID in evetypes.GetTypeIDsByGroup(groupID): try: key = (evetypes.GetFactionID(typeID), evetypes.GetIsisGroupID(typeID)) self.shipTypeIDsByFactionIDAndGroupID[key].append(typeID) except (KeyError, AttributeError): pass
def GetAllSkillGroups(self): if not self.skillGroups: skillgroups = [ util.KeyVal(groupID=groupID, groupName=evetypes.GetGroupNameByGroup(groupID)) for groupID in evetypes.GetGroupIDsByCategory( const.categorySkill) if groupID not in [const.groupFakeSkills] ] skillgroups = localization.util.Sort( skillgroups, key=operator.attrgetter('groupName')) self.skillGroups = skillgroups return self.skillGroups
def PopulateGroupCombo(self, isSel = False): categoryID = self.sr.fltCategories.GetValue() groups = [(localization.GetByLabel('UI/Common/All'), None)] if categoryID: if evetypes.CategoryExists(categoryID): for groupID in evetypes.GetGroupIDsByCategory(categoryID): if evetypes.IsGroupPublishedByGroup(groupID): groups.append((evetypes.GetGroupNameByGroup(groupID), groupID)) sel = None if isSel: sel = settings.user.ui.Get('contracts_filter_groups', None) self.sr.fltGroups.LoadOptions(groups, sel)
def GetContent(self, node, newitems=0): rows = [] if node is None: for categoryID in evetypes.IterateCategories(): rows.append((categoryID, evetypes.GetCategoryNameByCategory(categoryID))) level = 0 elif node.sublevel == 0: for groupID in evetypes.GetGroupIDsByCategory(node.id[1]): rows.append((groupID, evetypes.GetGroupNameByGroup(groupID))) level = 1 else: for typeID in evetypes.GetTypeIDsByGroup(node.id[1]): rows.append((typeID, evetypes.GetName(typeID))) level = 2 stuff = [] if level != 2: rows = sorted(rows, key=lambda row: row[1]) for row in rows: data = { 'GetSubContent': self.GetContent, 'MenuFunction': self.Menu, 'label': row[1], 'id': (row[1], row[0]), 'groupItems': [], 'showlen': False, 'sublevel': level, 'state': 'locked', 'selected': 0, 'hideExpander': True, 'BlockOpenWindow': 1, 'hideFill': True } stuff.append(listentry.Get('Group', data)) else: for row in rows: data = util.KeyVal() data.sublevel = 2 data.label = '%s<t>%d' % (row[1], row[0]) data.invtype = row data.showinfo = 1 data.typeID = row[0] stuff.append(listentry.Get('TypeDBEntry', data=data)) return stuff
def GetRandomSubsystems(self, typeID): def CheckSubsystemValid(subsystemTypeID): fitsToType = sm.GetService('godma').GetTypeAttribute( subsystemTypeID, const.attributeFitsToShipType) return evetypes.IsPublished(typeID) and fitsToType == typeID subsystems = {} subsystemGroups = evetypes.GetGroupIDsByCategory( const.categorySubSystem) for groupID in subsystemGroups: subsystemsInGroup = evetypes.GetTypeIDsByGroup(groupID) validSubsystems = filter(CheckSubsystemValid, subsystemsInGroup) subsystems[groupID] = random.choice(validSubsystems) return subsystems
def GetAmmo(self): if getattr(self, 'ammo', None): return groups = {} for groupID in evetypes.GetGroupIDsByCategory(const.categoryCharge): groups[groupID] = True self.ammo = {} godma = sm.GetService('godma') for typeID in evetypes.GetTypeIDsByGroups(groups.keys()): groupID = evetypes.GetGroupID(typeID) if groupID in self.ammo: self.ammo[groupID].append(godma.GetType(typeID)) else: self.ammo[groupID] = [godma.GetType(typeID)]
def LoadScrollList(self): scrolllist = [] subSystemsByGroupID = self.GetSubSystemsByGroup() godma = sm.GetService('godma') for groupID in evetypes.GetGroupIDsByCategory(const.categorySubSystem): if self.groupIDs is not None and groupID in self.groupIDs: continue scrolllist.append( listentry.Get( 'Header', {'label': evetypes.GetGroupNameByGroup(groupID)})) types = [] typeIDs = [] if groupID in subSystemsByGroupID: for subSystemTypeID, subSystemItemID in subSystemsByGroupID[ groupID]: if subSystemTypeID not in typeIDs: types.append((subSystemTypeID, evetypes.GetName(subSystemTypeID), subSystemItemID)) typeIDs.append(subSystemTypeID) types.sort() first = True for typeID, typeName, itemID in types: data = util.KeyVal() data.typeID = typeID data.label = typeName data.showinfo = 1 data.itemID = itemID data.OnClick = self.ClickEntry if groupID in self.startSubSystems and typeID == self.startSubSystems[ groupID] or not self.startSubSystems and first: data.isSelected = 1 else: data.isSelected = 0 if data.isSelected: slotFlag = int( godma.GetTypeAttribute(typeID, const.attributeSubSystemSlot)) self.subSystems[slotFlag] = itemID self.selectedSubSystemsByFlag[slotFlag] = itemID first = False scrolllist.append(listentry.Get('AssembleShipEntry', data=data)) self.UpdateHint() self.scroll.Load(contentList=scrolllist, scrolltotop=0)
def InitSkills(self): if self.skillGroups: return self.skillGroups = [] for groupID in evetypes.GetGroupIDsByCategory(const.categorySkill): groupName = evetypes.GetGroupNameByGroup(groupID) if groupName[ 0] != '*' and groupName != 'NOT USED SKILLS' and groupName != 'Fake Skills': self.skillGroups.append(groupID) for typeID in evetypes.GetTypeIDsByGroups(self.skillGroups): groupID = evetypes.GetGroupID(typeID) if groupID in self.skillsByGroupID: self.skillsByGroupID[groupID].append(typeID) else: self.skillsByGroupID[groupID] = [typeID]
def FightersMenu(self): def SpawnFighterInBay(fighterTypeID): self.LogInfo('Spawning fighter via /fit', fighterTypeID, evetypes.GetEnglishName(fighterTypeID)) sm.RemoteSvc('slash').SlashCmd('/fit me %d %d' % (fighterTypeID, 1)) groupMenu = [] for fighterGroupID in evetypes.GetGroupIDsByCategory(categoryFighter): groupName = evetypes.GetGroupNameByGroup(fighterGroupID) typeMenu = [] for fighterTypeID in evetypes.GetTypeIDsByGroup(fighterGroupID): fighterName = evetypes.GetEnglishName(fighterTypeID) typeMenu.append((fighterName, SpawnFighterInBay, (fighterTypeID,))) typeMenu.sort() groupMenu.append((groupName, typeMenu)) groupMenu.sort() return [('NEW FIGHTERS', groupMenu)]
def GetModuleLists(self): test = {} groups = dict.fromkeys([ groupID for groupID in evetypes.GetGroupIDsByCategory(const.categoryModule) ]) for k in cfg.invmetatypesByParent.iterkeys(): rowset = cfg.invmetatypesByParent[k] for row in rowset: if row.metaGroupID == 2: typeID = row.typeID if evetypes.Exists(typeID) and evetypes.GetMarketGroupID( typeID) and evetypes.GetCategoryID( typeID) == const.categoryModule: test[evetypes.GetGroupID(typeID)] = typeID for typeID in evetypes.Iterate(): groupID = evetypes.GetGroupID(typeID) if groupID not in test and groupID in groups: if not cfg.invmetatypesByParent.has_key(typeID): if evetypes.GetMarketGroupID(typeID): test[groupID] = typeID targeted = [] activated = [] passive = [] for typeID in test.values(): effects = [ cfg.dgmeffects.Get(row.effectID) for row in cfg.dgmtypeeffects.get(typeID, []) ] effectCategories = [ eff.effectCategory for eff in effects if eff.effectName != 'online' ] if const.dgmEffTarget in effectCategories: targeted.append((typeID, effects)) elif const.dgmEffActivation in effectCategories: activated.append((typeID, effects)) else: passive.append((typeID, effects)) return (targeted, activated, passive)