Example #1
0
    def GetShipsAndGroups(self, filterTextLower, fittings):
        fittingsByGroupID = defaultdict(list)
        fittingsByGroupAndRaceIDs = defaultdict(lambda: defaultdict(set))
        if not fittings:
            shipGroups, shipsByGroupID, shipsByGroupAndRaceIDs = self.GetAllShipGroupsAndShipsByGroupID(
                filterTextLower)
        else:
            shipGroups = set()
            shipsByGroupID = defaultdict(set)
            shipsByGroupAndRaceIDs = defaultdict(lambda: defaultdict(set))
        for fittingID, fitting in fittings.iteritems():
            shipTypeID = fitting.shipTypeID
            if not evetypes.Exists(shipTypeID):
                log.LogError(
                    'Ship in stored fittings does not exist, shipID=%s, fittingID=%s'
                    % (shipTypeID, fittingID))
                continue
            groupID = evetypes.GetGroupID(shipTypeID)
            fittingsByGroupID[groupID].append(fitting)
            groupName = evetypes.GetGroupName(shipTypeID)
            shipGroups.add((groupName, groupID))
            raceID = evetypes.GetRaceID(shipTypeID)
            shipsByGroupAndRaceIDs[groupID][raceID].add(shipTypeID)
            fittingsByGroupAndRaceIDs[groupID][raceID].add(fitting)

        return (fittingsByGroupID, shipsByGroupID, shipGroups,
                shipsByGroupAndRaceIDs, fittingsByGroupAndRaceIDs)
Example #2
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()
Example #3
0
 def __init__(self,
              typeID,
              itemID=None,
              materialSetID=None,
              scenePath=None):
     if scenePath is None:
         raceID = evetypes.GetRaceID(typeID)
         scenePath = gfxutils.GetPreviewScenePath(raceID)
     self.typeID = typeID
     self.itemID = itemID
     self.materialSetID = materialSetID
     self.scenePath = scenePath
Example #4
0
 def UpdateText(self):
     context = self.previewContainer.context
     if not hasattr(context, 'typeID'):
         return
     groupID = evetypes.GetGroupID(context.typeID)
     categoryID = evetypes.GetCategoryID(context.typeID)
     title = evetypes.GetName(context.typeID)
     if hasattr(context, 'itemID'):
         bp = sm.GetService('michelle').GetBallpark()
         if bp:
             slim = bp.GetInvItem(context.itemID)
             if slim:
                 title = slim.name
     self.title.text = title
     subtitle = ''
     if categoryID != invconst.categoryApparel:
         scene = self.previewContainer.sceneContainer.scene
         model = first_or_default(getattr(scene, 'objects', []), None)
         if model:
             radius = round(model.GetBoundingSphereRadius() * 2, 0)
             if groupID in invconst.turretModuleGroups or groupID in invconst.turretAmmoGroups:
                 subtitle = localization.GetByLabel(
                     'UI/Preview/ShipSubLabelNoRace',
                     groupName=evetypes.GetGroupName(context.typeID),
                     length=FmtDist(radius))
             else:
                 raceID = evetypes.GetRaceID(context.typeID)
                 race = cfg.races.Get(
                     raceID) if raceID in cfg.races else None
                 if race is None:
                     subtitle = localization.GetByLabel(
                         'UI/Preview/ShipSubLabelNoRace',
                         groupName=evetypes.GetGroupName(context.typeID),
                         length=FmtDist(radius))
                 else:
                     raceName = localization.GetByMessageID(race.raceNameID)
                     subtitle = localization.GetByLabel(
                         'UI/Preview/ShipSubLabel',
                         raceName=raceName,
                         groupName=evetypes.GetGroupName(context.typeID),
                         length=FmtDist(radius))
     self.subtitle.text = subtitle
     if categoryID == invconst.categoryApparel:
         self.descCont.Show()
         description = evetypes.GetDescription(context.typeID) or ''
         description = re.sub('<b>|</b>|\\r', '', description)
         description = re.sub('\\n', '<br>', description)
         self.desc.text = description
Example #5
0
 def __init__(self, typeID, subsystems=None, scenePath=None):
     if not IsModularShip(typeID):
         raise InvalidPreviewType('%s (%s) is not a tech 3 ship' %
                                  (evetypes.GetName(typeID), typeID))
     subsystems = subsystems or {}
     randomSubsystems = sm.GetService('t3ShipSvc').GetRandomSubsystems(
         typeID)
     subsystems = {
         k: subsystems.get(k, v)
         for k, v in randomSubsystems.iteritems()
     }
     if scenePath is None:
         raceID = evetypes.GetRaceID(typeID)
         scenePath = gfxutils.GetPreviewScenePath(raceID)
     self.typeID = typeID
     self.subsystems = subsystems
     self.scenePath = scenePath
Example #6
0
def GetHangarType(stationTypeID, shipTypeID):
    if USE_CITADEL_HANGAR or evetypes.GetCategoryID(stationTypeID) == const.categoryStructure:
        hangarType = CITADEL_NORMAL_HANGAR_SIZE
        if shipTypeID and ShipNeedsBigHangar(shipTypeID):
            hangarType = CITADEL_CAPITAL_HANGAR_SIZE
    else:
        raceID = evetypes.GetRaceID(stationTypeID)
        if raceID == const.raceAmarr:
            hangarType = AMARR_NORMAL_HANGAR_SIZE
        elif raceID == const.raceCaldari:
            hangarType = CALDARI_NORMAL_HANGAR_SIZE
        elif raceID == const.raceGallente:
            hangarType = GALLENTE_NORMAL_HANGAR_SIZE
        elif raceID == const.raceMinmatar:
            hangarType = MINMATAR_NORMAL_HANGAR_SIZE
        else:
            hangarType = GALLENTE_NORMAL_HANGAR_SIZE
    return hangarType
Example #7
0
def ApplyWorldspaceCustomization():
    if not eve.stationItem or session.worldspaceid != session.stationid2:
        return
    stationTypeID = eve.stationItem.stationTypeID
    stationRace = evetypes.GetRaceID(stationTypeID)
    if stationRace not in worldspaceCustomizationDefinitions.themeSettings:
        return
    if eve.stationItem.ownerID not in worldspaceCustomizationDefinitions.themeSettings[stationRace]:
        return
    changes = worldspaceCustomizationDefinitions.themeSettings[stationRace][eve.stationItem.ownerID]
    UpdateShaderParameters(changes.shaderParameters)
    if changes.flares:
        UpdateFlares(*changes.flares)
    if changes.pointLights:
        UpdateSpotPointLights(*changes.pointLights)
    if changes.cylendricalLights:
        UpdateCylendricalLights(*changes.cylendricalLights)
    UpdateEnlightenTexture()
Example #8
0
    def GetImage(self,
                 itemID,
                 size,
                 handler,
                 sprite=None,
                 orderIfMissing=True,
                 callback=None,
                 defaultIcon='res:/UI/Texture/notavailable.dds',
                 isAlliance=False):
        if uicore.desktop.dpiScaling > 1.0 and not isAlliance:
            size = size * 2
        if not isinstance(itemID, numbers.Integral):
            return defaultIcon
        if util.IsDustCharacter(itemID):
            try:
                character = cfg.eveowners.Get(itemID)
                path = const.dustCharacterPortraits[int(
                    character.gender)][evetypes.GetRaceID(character.typeID)]
                isFresh = True
            except KeyError:
                return defaultIcon

        else:
            path, isFresh = handler.GetCachedImage(itemID, size)
        if sprite is not None:
            sprite.LoadTexture(path or defaultIcon)
        if not isFresh and orderIfMissing and not handler.MissingFromServer(
                itemID):
            if (itemID, size, handler) in self.currentlyFetching:
                self.currentlyFetching[itemID, size,
                                       handler].append([sprite, callback])
            else:
                self.imageServerQueue[itemID, size,
                                      handler].append([sprite, callback])
            if len(
                    self.imageServerQueue
            ) > self.fetchingFromImageServer and self.fetchingFromImageServer < MAX_PORTRAIT_THREADS:
                self.fetchingFromImageServer += 1
                uthread.pool('photo::FetchRemoteImages',
                             self.__FetchFromImageServer)
        elif handler.MissingFromServer(itemID) and path is None:
            return defaultIcon
        if isFresh:
            return path
Example #9
0
 def GetWorldSpaceTypeIDFromWorldSpaceID(self, worldSpaceID):
     if util.IsStation(worldSpaceID):
         stationRace = evetypes.GetRaceID(eve.stationItem.stationTypeID)
         configVals = sm.GetService('machoNet').GetGlobalConfig()
         if stationRace == const.raceCaldari:
             if configVals.get('CaldariCQEnabled', '1') == '1':
                 return const.typeCaldariCaptainsQuarters
         else:
             if stationRace == const.raceMinmatar:
                 return const.typeMinmatarCaptainsQuarters
             if stationRace == const.raceAmarr:
                 if configVals.get('AmarrCQEnabled', '1') == '1':
                     return const.typeAmarrCaptainsQuarters
             elif stationRace == const.raceGallente:
                 if configVals.get('GallenteCQEnabled', '1') == '1':
                     return const.typeGallenteCaptainsQuarters
             elif stationRace == const.raceJove:
                 if configVals.get('GallenteCQEnabled', '1') == '1':
                     return const.typeGallenteCaptainsQuarters
         return const.typeMinmatarCaptainsQuarters
     return sm.RemoteSvc('worldSpaceServer').GetWorldSpaceTypeIDFromWorldSpaceID(worldSpaceID)
Example #10
0
 def GetShipExposureTemplateData(self):
     if not eve.stationItem:
         return
     racialShips = {
         const.raceAmarr: [2006, 20183, 24696, 24692, 597, 1944, 624],
         const.raceCaldari: [621, 20185, 24698, 640, 602, 648, 623],
         const.raceGallente: [627, 20187, 24700, 641, 593, 650, 626],
         const.raceMinmatar: [629, 20189, 24702, 644, 587, 653, 622]
     }
     oreShipsList = [17478, 17476, 2998]
     racialIntroVideos = {
         const.raceAmarr: 'res:/video/cq/LOGO_AMARR.webm',
         const.raceCaldari: 'res:/video/cq/LOGO_CALDARI.webm',
         const.raceGallente: 'res:/video/cq/LOGO_GALLENTE.webm',
         const.raceMinmatar: 'res:/video/cq/LOGO_MINMATAR.webm'
     }
     data = util.KeyVal()
     if random.random() <= 0.3:
         data.introVideoPath = 'res:/video/cq/LOGO_ORE.webm'
         data.shipTypeID = random.choice(oreShipsList)
     else:
         stationRace = evetypes.GetRaceID(eve.stationItem.stationTypeID)
         if stationRace not in racialShips:
             stationRace = const.raceGallente
         data.introVideoPath = racialIntroVideos[stationRace]
         data.shipTypeID = random.choice(racialShips[stationRace])
     data.shipName = evetypes.GetName(data.shipTypeID)
     data.shipGroupName = evetypes.GetGroupName(data.shipTypeID)
     data.buttonText = localization.GetByLabel(
         'UI/Station/Holoscreen/Common/AvailableOnMarketNow')
     data.mainText = '<fontsize=30>' + localization.GetByLabel(
         'UI/Station/Holoscreen/Ship/ShipDetailsTitle')
     data.mainText += '\n<fontsize=25>' + evetypes.GetDescription(
         data.shipTypeID)
     data.clickFunc = sm.GetService('marketutils').ShowMarketDetails
     data.clickArgs = (data.shipTypeID, None)
     data.clickFuncLabel = localization.GetByLabel(
         'UI/Station/Holoscreen/Ship/OpenMarketForShip',
         ship=data.shipTypeID)
     return data
Example #11
0
 def StartTransition(self, fromView, toView):
     viewstate.Transition.StartTransition(self, fromView, toView)
     viewState = sm.GetService('viewState')
     self.fadeLayer = uiprimitives.Container(name='transition_overlay', parent=viewState.overlayLayerParent, pickState=uiconst.TR2_SPS_OFF, bgColor=util.Color.BLACK, opacity=0.0)
     height = uicore.desktop.height
     width = uicore.desktop.width
     self.loadingText = uicontrols.Label(parent=self.fadeLayer, text=localization.GetByLabel('UI/Worldspaces/Common/Loading'), fontsize=50, align=uiconst.CENTER, top=100, color=util.Color.WHITE, glowFactor=1.0, glowColor=(1.0, 1.0, 1.0, 0.1), uppercase=uiconst.WINHEADERUPPERCASE)
     stationRace = evetypes.GetRaceID(eve.stationItem.stationTypeID)
     backgroundToUse = self.racialLoadingBackgrounds[stationRace]
     uiprimitives.Sprite(name='aura', parent=self.fadeLayer, texturePath=backgroundToUse, align=uiconst.CENTER, width=width, height=height)
     if fromView is not None:
         if getattr(fromView, 'cachedPlayerPos', None) is not None and getattr(fromView, 'cachedPlayerRot', None) is not None:
             toView.cachedPlayerPos = fromView.cachedPlayerPos
             toView.cachedPlayerRot = fromView.cachedPlayerRot
         if getattr(fromView, 'cachedCameraYaw', None) is not None and getattr(fromView, 'cachedCameraPitch', None) is not None and getattr(fromView, 'cachedCameraZoom', None) is not None:
             toView.cachedCameraYaw = fromView.cachedCameraYaw
             toView.cachedCameraPitch = fromView.cachedCameraPitch
             toView.cachedCameraZoom = fromView.cachedCameraZoom
     uicore.animations.FadeIn(self.fadeLayer, duration=self.fadeInTimeMS / 1000.0, sleep=True)
     lobby = GetLobbyClass().GetIfOpen()
     if lobby is not None and not lobby.destroyed:
         lobby.LockUndockButton()
Example #12
0
    def GetAllShipGroupsAndShipsByGroupID(self, filterTextLower):
        shipGroups = set()
        shipsByGroupID = defaultdict(set)
        shipsByGroupAndRaceIDs = defaultdict(lambda: defaultdict(set))
        grouplist = sm.GetService('marketutils').GetMarketGroups()[
            const.marketCategoryShips]
        shipTypesIDsFromMarket = {
            i
            for i in itertools.chain.from_iterable(
                [x.types for x in grouplist])
        }
        for shipTypeID in shipTypesIDsFromMarket:
            shipName = evetypes.GetName(shipTypeID)
            if filterTextLower and shipName.lower().find(filterTextLower) < 0:
                continue
            groupID = evetypes.GetGroupID(shipTypeID)
            groupName = evetypes.GetGroupName(shipTypeID)
            shipGroups.add((groupName, groupID))
            shipsByGroupID[groupID].add(shipTypeID)
            raceID = evetypes.GetRaceID(shipTypeID)
            shipsByGroupAndRaceIDs[groupID][raceID].add(shipTypeID)

        return (shipGroups, shipsByGroupID, shipsByGroupAndRaceIDs)
Example #13
0
def GetPictureFileName(typeID, graphicID, size):
    shaderModel = trinity.GetShaderModel()
    name = '%s_%s_%s_%s_%s.dds' % (shaderModel, graphicID
                                   or 0, evetypes.GetIconID(typeID)
                                   or 0, evetypes.GetRaceID(typeID) or 0, size)
    return name
Example #14
0
    def LoadHangarBackground(self):
        stationRace = evetypes.GetRaceID(eve.stationItem.stationTypeID)
        stationGraphicsID = hangarUtil.racialHangarScenes[8]
        if stationRace in hangarUtil.racialHangarScenes:
            stationGraphicsID = hangarUtil.racialHangarScenes[stationRace]
        scenePath = GetGraphicFile(stationGraphicsID)
        if stationRace == const.raceAmarr:
            shipPositionData = ReadYamlFile(
                'res:/dx9/scene/hangar/shipPlacementAmarr.yaml')
            positioning = ReadYamlFile(
                'res:/dx9/scene/hangar/amarrbalconyplacement.yaml')
            self.sceneTranslation = positioning['position']
            self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
                positioning['orientation'], 0.0, 0.0)
        elif stationRace == const.raceCaldari:
            shipPositionData = ReadYamlFile(
                'res:/dx9/scene/hangar/shipPlacementCaldari.yaml')
            positioning = ReadYamlFile(
                'res:/dx9/scene/hangar/caldaribalconyplacement.yaml')
            self.sceneTranslation = positioning['position']
            self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
                positioning['orientation'], 0.0, 0.0)
        elif stationRace == const.raceGallente:
            shipPositionData = ReadYamlFile(
                'res:/dx9/scene/hangar/shipPlacementGallente.yaml')
            positioning = ReadYamlFile(
                'res:/dx9/scene/hangar/gallentebalconyplacement.yaml')
            self.sceneTranslation = positioning['position']
            self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
                positioning['orientation'], 0.0, 0.0)
        elif stationRace == const.raceMinmatar:
            shipPositionData = ReadYamlFile(
                'res:/dx9/scene/hangar/shipPlacementMinmatar.yaml')
            positioning = ReadYamlFile(
                'res:/dx9/scene/hangar/minmatarbalconyplacement.yaml')
            self.sceneTranslation = positioning['position']
            self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
                positioning['orientation'], 0.0, 0.0)
        else:
            shipPositionData = ReadYamlFile(
                'res:/dx9/scene/hangar/shipPlacementGallente.yaml')
            positioning = ReadYamlFile(
                'res:/dx9/scene/hangar/gallentebalconyplacement.yaml')
            self.sceneTranslation = positioning['position']
            self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
                positioning['orientation'], 0.0, 0.0)
        self.hangarScene = blue.resMan.LoadObject(scenePath)
        hangarMeshes = self.hangarScene.Find('trinity.EveStation2')
        for hangarMesh in hangarMeshes:
            if hangarMesh.planeSets is not None:
                hangarMesh.planeSets.removeAt(-1)

        self.hangarTraffic.SetupScene(self.hangarScene)
        self.hangarTraffic.RemoveAudio(self.hangarScene)
        self.sceneManager.SetupIncarnaBackground(self.hangarScene,
                                                 self.sceneTranslation,
                                                 self.sceneRotation)
        self.shipPositionMinDistance = shipPositionData['minDistance']
        self.shipPositionMaxDistance = shipPositionData['maxDistance']
        self.shipPositionMaxSize = shipPositionData['shipMaxSize']
        self.shipPositionMinSize = shipPositionData['shipMinSize']
        self.shipPositionTargetHeightMin = shipPositionData[
            'shipTargetHeightMin']
        self.shipPositionTargetHeightMax = shipPositionData[
            'shipTargetHeightMax']
        self.shipPositionCurveRoot = shipPositionData['curveRoot']
        self.shipPositionRotation = shipPositionData['rotation']
        if self.hangarScene is not None:
            stationModel = self.hangarScene.objects[0]
            stationModel.enableShadow = False
Example #15
0
 def LoadHangarBackground(self):
     stationRace = evetypes.GetRaceID(eve.stationItem.stationTypeID)
     if stationRace == const.raceAmarr:
         scenePath = 'res:/dx9/model/hangar/amarr/ah1/ah1_fis.red'
         shipPositionData = ReadYamlFile(
             'res:/dx9/scene/hangar/shipPlacementAmarr.yaml')
         positioning = ReadYamlFile(
             'res:/dx9/scene/hangar/amarrbalconyplacement.yaml')
         self.sceneTranslation = positioning['position']
         self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
             positioning['orientation'], 0.0, 0.0)
     elif stationRace == const.raceCaldari:
         scenePath = 'res:/dx9/model/hangar/caldari/ch1/ch1_fis.red'
         shipPositionData = ReadYamlFile(
             'res:/dx9/scene/hangar/shipPlacementCaldari.yaml')
         positioning = ReadYamlFile(
             'res:/dx9/scene/hangar/caldaribalconyplacement.yaml')
         self.sceneTranslation = positioning['position']
         self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
             positioning['orientation'], 0.0, 0.0)
     elif stationRace == const.raceGallente:
         scenePath = 'res:/dx9/model/hangar/gallente/gh1/gh1_fis.red'
         shipPositionData = ReadYamlFile(
             'res:/dx9/scene/hangar/shipPlacementGallente.yaml')
         positioning = ReadYamlFile(
             'res:/dx9/scene/hangar/gallentebalconyplacement.yaml')
         self.sceneTranslation = positioning['position']
         self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
             positioning['orientation'], 0.0, 0.0)
     elif stationRace == const.raceMinmatar:
         scenePath = 'res:/dx9/model/hangar/minmatar/mh1/mh1_fis.red'
         shipPositionData = ReadYamlFile(
             'res:/dx9/scene/hangar/shipPlacementMinmatar.yaml')
         positioning = ReadYamlFile(
             'res:/dx9/scene/hangar/minmatarbalconyplacement.yaml')
         self.sceneTranslation = positioning['position']
         self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
             positioning['orientation'], 0.0, 0.0)
     else:
         scenePath = 'res:/dx9/model/hangar/gallente/gh1/gh1_fis.red'
         shipPositionData = ReadYamlFile(
             'res:/dx9/scene/hangar/shipPlacementGallente.yaml')
         positioning = ReadYamlFile(
             'res:/dx9/scene/hangar/gallentebalconyplacement.yaml')
         self.sceneTranslation = positioning['position']
         self.sceneRotation = geo2.QuaternionRotationSetYawPitchRoll(
             positioning['orientation'], 0.0, 0.0)
     self.hangarScene = blue.resMan.LoadObject(scenePath)
     self.sceneManager.SetupIncarnaBackground(self.hangarScene,
                                              self.sceneTranslation,
                                              self.sceneRotation)
     self.shipPositionMinDistance = shipPositionData['minDistance']
     self.shipPositionMaxDistance = shipPositionData['maxDistance']
     self.shipPositionMaxSize = shipPositionData['shipMaxSize']
     self.shipPositionMinSize = shipPositionData['shipMinSize']
     self.shipPositionTargetHeightMin = shipPositionData[
         'shipTargetHeightMin']
     self.shipPositionTargetHeightMax = shipPositionData[
         'shipTargetHeightMax']
     self.shipPositionCurveRoot = shipPositionData['curveRoot']
     self.shipPositionRotation = shipPositionData['rotation']
     if self.hangarScene is not None:
         stationModel = self.hangarScene.objects[0]
         stationModel.enableShadow = False
Example #16
0
 def GetRacialEpicArcTemplateData(self):
     epicArcList = self.holoscreenMgr.GetRuntimeCache().epicArcAgents
     if not epicArcList:
         return
     if not eve.stationItem:
         return
     epicArcData = random.choice(epicArcList)
     data = util.KeyVal()
     data.charID = epicArcData.agentID
     data.headingText = ''
     solarSystemID = sm.GetService('agents').GetSolarSystemOfAgent(
         epicArcData.agentID)
     regionID = sm.GetService('map').GetRegionForSolarSystem(solarSystemID)
     securityLevel = sm.GetService('map').GetSecurityStatus(solarSystemID)
     data.mainText = '<fontsize=30><color=WHITE>' + localization.GetByLabel(
         'UI/Station/Holoscreen/RacialEpicArc/AgentAdvert',
         system=solarSystemID,
         region=regionID,
         securityLevel=securityLevel)
     epicArcDict = {
         48: (const.factionAmarrEmpire,
              localization.GetByLabel(
                  'UI/Station/Holoscreen/RacialEpicArc/AmarrNews')),
         52: (const.factionGallenteFederation,
              localization.GetByLabel(
                  'UI/Station/Holoscreen/RacialEpicArc/GallenteNews')),
         40: (const.factionCaldariState,
              localization.GetByLabel(
                  'UI/Station/Holoscreen/RacialEpicArc/CaldariNews')),
         29: (const.factionSistersOfEVE,
              localization.GetByLabel(
                  'UI/Station/Holoscreen/RacialEpicArc/SistersNews')),
         53: (const.factionMinmatarRepublic,
              localization.GetByLabel(
                  'UI/Station/Holoscreen/RacialEpicArc/MinmatarNews')),
         56: (const.factionAngelCartel,
              localization.GetByLabel(
                  'UI/Station/Holoscreen/RacialEpicArc/AngelsNews')),
         55: (const.factionGuristasPirates,
              localization.GetByLabel(
                  'UI/Station/Holoscreen/RacialEpicArc/GuristasNews'))
     }
     if epicArcData.epicArcID not in epicArcDict:
         return
     data.factionID, data.bottomText = epicArcDict.get(
         epicArcData.epicArcID, '')
     data.factionNameText = cfg.eveowners.Get(data.factionID).ownerName
     data.introVideoPath = {
         const.factionAmarrEmpire: 'res:/video/cq/LOGO_AMARR.webm',
         const.factionCaldariState: 'res:/video/cq/LOGO_CALDARI.webm',
         const.factionGallenteFederation:
         'res:/video/cq/LOGO_GALLENTE.webm',
         const.factionMinmatarRepublic: 'res:/video/cq/LOGO_MINMATAR.webm',
         const.factionAngelCartel: 'res:/video/cq/LOGO_ANGELCARTEL.webm',
         const.factionGuristasPirates: 'res:/video/cq/LOGO_GURISTAS.webm',
         const.factionSistersOfEVE: 'res:/video/cq/LOGO_SISTERSOFEVE.webm'
     }.get(data.factionID, None)
     videoDict = {
         const.factionAmarrEmpire:
         'res:/video/cq/CQ_TEMPLATE_EPICARC_AMARR.webm',
         const.factionCaldariState:
         'res:/video/cq/CQ_TEMPLATE_EPICARC_CALDARI.webm',
         const.factionGallenteFederation:
         'res:/video/cq/CQ_TEMPLATE_EPICARC_GALLENTE.webm',
         const.factionMinmatarRepublic:
         'res:/video/cq/CQ_TEMPLATE_EPICARC_MINMATAR.webm',
         const.factionAngelCartel:
         'res:/video/cq/CQ_TEMPLATE_EPICARC_MINMATAR.webm',
         const.factionGuristasPirates:
         'res:/video/cq/CQ_TEMPLATE_EPICARC_CALDARI.webm'
     }
     factionKey = data.factionID
     if factionKey not in videoDict:
         factionKey = {
             const.raceAmarr: const.factionAmarrEmpire,
             const.raceCaldari: const.factionCaldariState,
             const.raceGallente: const.factionGallenteFederation,
             const.raceMinmatar: const.factionMinmatarRepublic
         }.get(evetypes.GetRaceID(eve.stationItem.stationTypeID),
               const.factionGallenteFederation)
     data.videoPath = videoDict.get(
         factionKey, 'res:/video/cq/CQ_TEMPLATE_EPICARC_GALLENTE.webm')
     data.clickFunc = sm.GetService('agents').InteractWith
     data.clickArgs = (data.charID, )
     data.clickFuncLabel = localization.GetByLabel(
         'UI/Station/Holoscreen/RacialEpicArc/StartAgentConversation')
     return data