NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

model.py (5791B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\eveclientqatools\sofpreviewer\model.py
      2 from __future__ import absolute_import
      3 import blue
      4 import evetypes
      5 from fsdBuiltData.client.groupGraphics import GetGraphicIdsFromTypeID
      6 from sofDnaLibrary.query import GetDnaStringsMatchingQuery
      7 from .modelconst import ModelConst
      8 
      9 class SofPreviewerModel(object):
     10 
     11     def __init__(self):
     12         sofDB = blue.resMan.LoadObject('res:/dx9/model/spaceobjectfactory/data.red')
     13         self.const = ModelConst()
     14         self.sofFactions = []
     15         for faction in sofDB.faction:
     16             self.sofFactions.append(faction.name)
     17 
     18         self.sofFactions.sort()
     19         self.sofHulls = []
     20         self.multihulls = {}
     21         for hull in sofDB.hull:
     22             hull = hull.name
     23             if self.IsMultiHull(hull):
     24                 baseHullName, subpart, variation = self.GetMultiHullInfo(hull)
     25                 if baseHullName not in self.multihulls:
     26                     self.multihulls[baseHullName] = []
     27                 self.multihulls[baseHullName].append((hull, subpart, variation))
     28                 if subpart == 1:
     29                     self.sofHulls.append(hull)
     30             else:
     31                 self.sofHulls.append(hull)
     32 
     33         self.sofHulls.sort()
     34         self.sofRaces = []
     35         for race in sofDB.race:
     36             self.sofRaces.append(race.name)
     37 
     38         self.sofRaces.sort()
     39         self.sofMaterials = []
     40         for material in sofDB.material:
     41             self.sofMaterials.append(material.name)
     42 
     43         self.sofMaterials.sort()
     44         self.sofMaterials.insert(0, 'None')
     45         self.sofVariants = []
     46         for i in xrange(len(sofDB.generic.variants)):
     47             self.sofVariants.append(sofDB.generic.variants[i].name)
     48 
     49         self.sofVariants.sort()
     50         self.sofVariants.insert(0, 'None')
     51         self.sofPatterns = []
     52         self.patternToHulls = {}
     53         for pattern in sofDB.pattern:
     54             self.sofPatterns.append(pattern.name)
     55             self.patternToHulls[pattern.name] = [ hull.name for hull in pattern.projections ]
     56 
     57         self.sofPatterns.sort()
     58         self.sofPatterns.insert(0, 'None')
     59         self._hullToTurretCount = self.CreateHullToTurretLocatorCountMap(sofDB)
     60         self._hiSlotItems = None
     61 
     62     def CreateHullToTurretLocatorCountMap(self, sofDB):
     63         hullToTurretCount = {}
     64         hulls = sofDB.hull
     65         for hull in hulls:
     66             uniqueTurretLocations = set()
     67             for turret in hull.locatorTurrets:
     68                 turretNumber = int(filter(str.isdigit, turret.name))
     69                 uniqueTurretLocations.add(turretNumber)
     70 
     71             hullToTurretCount[hull.name] = len(uniqueTurretLocations)
     72 
     73         return hullToTurretCount
     74 
     75     def IsMultiHull(self, hull):
     76         return len(self.const.MULTI_HULL_REGEX.findall(hull)) > 0
     77 
     78     def GetMultiHullInfo(self, hull):
     79         results = self.const.MULTI_HULL_REGEX.findall(hull)
     80         if len(results) > 0:
     81             return (hull.replace(results[0], ''), self.GetMultiHullSpecification(hull), self.GetMultiHullVariation(hull))
     82         return (None, None, None)
     83 
     84     def GetMultiHullVariation(self, hull):
     85         return int(self.const.MULTI_HULL_VARIATION_REGEX.findall(hull)[0].replace('v', ''))
     86 
     87     def GetMultiHullSpecification(self, hull):
     88         return int(self.const.MULTI_HULL_SPECIFICATION_REGEX.findall(hull)[0].replace('_s', ''))
     89 
     90     def GetMultiHullBaseName(self, hull):
     91         results = self.const.MULTI_HULL_REGEX.findall(hull)
     92         if len(results) > 0:
     93             result = results[0]
     94             return hull.replace(result, '')
     95         return ''
     96 
     97     @staticmethod
     98     def _GetDefaultFactionForT1Hull(hullName):
     99         dnaList = GetDnaStringsMatchingQuery(hullName)
    100         if len(dnaList) == 0:
    101             return ''
    102         race = dnaList[0].split(':')[2]
    103         return race + 'base'
    104 
    105     def _GetDefaultFactionForT2Hull(self, hullName):
    106         for factionName, hullList in self.const.DEFAULT_FACTION_FOR_T2HULLS.iteritems():
    107             if hullName in hullList:
    108                 return factionName
    109 
    110         return ''
    111 
    112     @staticmethod
    113     def GetDnaFromPlayerShip():
    114         michelle = sm.GetService('michelle')
    115         ship = michelle.GetBall(session.shipid)
    116         if ship is None:
    117             return 'ab1_t1:amarrbase:amarr'
    118         dna = ship.GetDNA()
    119         if dna is None:
    120             return 'ab1_t1:amarrbase:amarr'
    121         return dna
    122 
    123     @property
    124     def highSlotTypeIDs(self):
    125         dogmalocation = sm.GetService('clientDogmaIM').GetFittingDogmaLocation(force=True)
    126         dogmastaticMgr = dogmalocation.dogmaStaticMgr
    127         typeIds = evetypes.GetAllTypeIDs()
    128         if self._hiSlotItems is not None:
    129             return self._hiSlotItems
    130         self._hiSlotItems = []
    131         for type in typeIds:
    132             effectTypes = dogmastaticMgr.TypeGetEffects(type)
    133             for effectType in effectTypes:
    134                 if effectType == const.effectHiPower:
    135                     self._hiSlotItems.append(type)
    136 
    137         return self._hiSlotItems
    138 
    139     def GetHighSlotItemName(self, typeID):
    140         return evetypes.GetNameOrNone(typeID)
    141 
    142     def GetGraphicIdFromTypeId(self, typeID):
    143         return GetGraphicIdsFromTypeID(typeID)
    144 
    145     def GetTurretLocatorCountFromName(self, hullName):
    146         return self._hullToTurretCount.get(hullName, 0)
    147 
    148     def GetTurretLocatorCount(self, dna):
    149         try:
    150             from platformtools.compatibility.exposure import dnahelper
    151             parts = dnahelper.DNAParts(dna)
    152             hullName = parts.hull
    153             return self.GetTurretLocatorCountFromName(hullName)
    154         except ImportError:
    155             if ':' in dna:
    156                 return self.GetTurretLocatorCountFromName(dna.split(':')[0])
    157             else:
    158                 return 0