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

effectsCont.py (5689B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\squadrons\effectsCont.py
      2 import carbonui.const as uiconst
      3 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      4 from eve.client.script.ui.control.eveIcon import Icon
      5 from eve.common.script.mgt.buffBarConst import BUFF_SLOT_HINTS
      6 from eve.client.script.ui.inflight.squadrons.shipFighterState import GetShipFighterState
      7 import evetypes
      8 from localization import GetByLabel
      9 from localization.util import Sort
     10 from eveservices.menu import GetMenuService
     11 
     12 class EffectsCont(ContainerAutoSize):
     13     default_width = 20
     14     default_align = uiconst.TOPLEFT
     15     default_state = uiconst.UI_PICKCHILDREN
     16     MAXNUMBERINHINT = 6
     17 
     18     def ApplyAttributes(self, attributes):
     19         ContainerAutoSize.ApplyAttributes(self, attributes)
     20         self.fighterID = attributes.fighterID
     21         self.tubeFlagID = attributes.tubeFlagID
     22         self.effectsOnFighter = None
     23         self.shipFighterState = GetShipFighterState()
     24         self.ewarIcons = {}
     25         self.controller = attributes.controller
     26         self.BuildEffectsData()
     27 
     28     def BuildEffectsData(self):
     29         effectsOnFighter = self.controller.GetIncomingEwarEffects(self.fighterID)
     30         graphicIDs = []
     31         stateSvc = sm.GetService('stateSvc')
     32         for effect in effectsOnFighter:
     33             sourceModuleID, sourceShipID, jammingType = effect
     34             graphicID = stateSvc.GetEwarGraphicID(jammingType)
     35             graphicIDs.append((graphicID, jammingType))
     36 
     37         self.AddEffects(graphicIDs)
     38 
     39     def AddEffects(self, graphicIDs):
     40         for graphicID, icon in self.ewarIcons.iteritems():
     41             if not graphicIDs or graphicID not in graphicIDs:
     42                 icon.display = False
     43 
     44         if graphicIDs:
     45             for graphicID, jammingType in graphicIDs:
     46                 if graphicID in self.ewarIcons:
     47                     icon = self.ewarIcons[graphicID]
     48                     icon.display = True
     49                 else:
     50                     icon = self.MakeIcon(graphicID)
     51                     self.ewarIcons[graphicID] = icon
     52                 icon.hint = self.GetIconHint(jammingType)
     53                 icon.GetMenu = (self.GetIconMenu, jammingType)
     54 
     55     def MakeIcon(self, graphicID):
     56         return Icon(parent=self, align=uiconst.TOBOTTOM, state=uiconst.UI_NORMAL, width=20, height=20, graphicID=graphicID, ignoreSize=True)
     57 
     58     def GetIconMenu(self, jammingType, *args):
     59         attackers = self.FindWhoIsJammingMe(jammingType)
     60         m = []
     61         svc = sm.GetService('michelle')
     62         menuSvc = GetMenuService()
     63         for shipID, num in attackers.iteritems():
     64             invItem = svc.GetBallpark().GetInvItem(shipID)
     65             if invItem:
     66                 if invItem.charID:
     67                     attackerName = cfg.eveowners.Get(invItem.charID).name
     68                 else:
     69                     attackerName = evetypes.GetName(invItem.typeID)
     70                 m += [[attackerName, ('isDynamic', menuSvc.CelestialMenu, (invItem.itemID,
     71                     None,
     72                     invItem,
     73                     invItem.typeID))]]
     74 
     75         m = Sort(m, key=lambda x: x[0])
     76         return m
     77 
     78     def HideEffects(self):
     79         self.display = False
     80 
     81     def ShowEffects(self):
     82         self.display = True
     83 
     84     def UpdateFighterID(self, fighterID):
     85         self.fighterID = fighterID
     86         self.BuildEffectsData()
     87 
     88     def GetIconHint(self, jammingType):
     89         hintList = self.GetEwarHintList(jammingType)
     90         hint = '<br>'.join(hintList)
     91         return hint
     92 
     93     def GetEwarHintList(self, jammingType):
     94         attackers = self.FindWhoIsJammingMe(jammingType)
     95         hintList = []
     96         extraAttackers = 0
     97         for shipID, num in attackers.iteritems():
     98             if len(hintList) >= self.MAXNUMBERINHINT:
     99                 extraAttackers = len(attackers) - len(hintList)
    100                 break
    101             self.AddEwarAttackerText(hintList, shipID, num)
    102 
    103         hintList = Sort(hintList)
    104         self.AddExtraAttackers(hintList, extraAttackers)
    105         ewarHint = self.GetEwarHintCaption(jammingType)
    106         hintList.insert(0, ewarHint)
    107         return hintList
    108 
    109     def GetEwarHintCaption(self, jammingType):
    110         ewarHintPath = BUFF_SLOT_HINTS.get(jammingType, None)
    111         if ewarHintPath is not None:
    112             ewarHint = GetByLabel(ewarHintPath)
    113         else:
    114             ewarHint = ''
    115         return ewarHint
    116 
    117     def AddEwarAttackerText(self, hintList, sourceID, numModules):
    118         invItem = sm.GetService('michelle').GetBallpark().GetInvItem(sourceID)
    119         if invItem:
    120             attackerShipTypeID = invItem.typeID
    121             if invItem.charID:
    122                 attackerID = invItem.charID
    123                 hintList.append(GetByLabel('UI/Inflight/EwarAttacker', attackerID=attackerID, attackerShipID=attackerShipTypeID, num=numModules))
    124             else:
    125                 hintList.append(GetByLabel('UI/Inflight/EwarAttackerNPC', attackerShipID=attackerShipTypeID, num=numModules))
    126 
    127     def AddExtraAttackers(self, hintList, extraAttackers):
    128         if extraAttackers > 0:
    129             hintList.append(GetByLabel('UI/Inflight/AndMorewarAttackers', num=extraAttackers))
    130 
    131     def FindWhoIsJammingMe(self, jammingType):
    132         effectsOnFighter = self.controller.GetIncomingEwarEffects(self.fighterID)
    133         attackers = {}
    134         for effect in effectsOnFighter:
    135             sourceModuleID, sourceShipID, _jammingType = effect
    136             if jammingType != _jammingType:
    137                 continue
    138             numberOfTimes = attackers.get(sourceShipID, 0)
    139             numberOfTimes += 1
    140             attackers[sourceShipID] = numberOfTimes
    141 
    142         return attackers