Beispiel #1
0
    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'])
Beispiel #2
0
    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
Beispiel #4
0
    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)
Beispiel #5
0
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
Beispiel #6
0
    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()
Beispiel #7
0
 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
Beispiel #8
0
 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
Beispiel #9
0
    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)
Beispiel #10
0
    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
Beispiel #11
0
    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
Beispiel #12
0
    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)]
Beispiel #13
0
    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)
Beispiel #14
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]
Beispiel #15
0
    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)]
Beispiel #16
0
    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)