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

dronesUtil.py (4281B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\drones\dronesUtil.py
      2 import evetypes
      3 import itertoolsext
      4 from carbonui import uiconst
      5 from carbonui.uicore import uicore
      6 from carbonui.util.bunch import Bunch
      7 from carbonui.window.settings import GetRegisteredState
      8 from eve.client.script.ui.inflight.drones.dronesConst import DRONESTATE_INSPACE, DRONESTATE_INBAY
      9 from eve.client.script.ui.services.menuSvcExtras.droneFunctions import ReturnToDroneBay
     10 from eve.common.lib import appConst
     11 from eveservices.menu import GetMenuService
     12 from localization import GetByLabel
     13 
     14 def GetDronesInBay():
     15     if session.shipid:
     16         return sm.GetService('invCache').GetInventoryFromId(session.shipid).ListDroneBay()
     17     return []
     18 
     19 
     20 def GetDronesInLocalSpace():
     21     ballpark = sm.GetService('michelle').GetBallpark()
     22     if ballpark is None:
     23         return []
     24     drones = sm.GetService('michelle').GetDrones()
     25     return [ drones[droneID] for droneID in drones if drones[droneID].ownerID == session.charid or drones[droneID].controllerID == session.shipid ]
     26 
     27 
     28 def GetDroneIDsInSpace():
     29     inBayIDs = GetDroneIDsInBay()
     30     droneIDs = [ drone.droneID for drone in GetDronesInLocalSpace() if drone.droneID not in inBayIDs ]
     31     return sorted(droneIDs)
     32 
     33 
     34 def GetDroneIDsInBay():
     35     droneIDs = [ drone.itemID for drone in GetDronesInBay() ]
     36     return sorted(droneIDs)
     37 
     38 
     39 def GetNumberOfDronesInBay():
     40     return sum([ invItem.stacksize for invItem in GetDronesInBay() ])
     41 
     42 
     43 def stop_and_recall_drones():
     44     uicore.cmd.GetCommandAndExecute('CmdStopShip')
     45     ReturnToDroneBay([ drone.droneID for drone in GetDronesInLocalSpace() ])
     46 
     47 
     48 def GetTypeIDForManyDrones(droneState, droneData):
     49     if not droneData:
     50         return None
     51     if droneState == DRONESTATE_INBAY:
     52         firstDroneData = droneData[0]
     53         invItem, viewOnly, voucher = firstDroneData
     54         return invItem.typeID
     55     if droneState == DRONESTATE_INSPACE:
     56         lowPriorityDrones = [const.groupMiningDrone, const.groupSalvageDrone, const.groupUnanchoringDrone]
     57 
     58         def IsHigherPrioritySpaceDrone(droneData):
     59             droneID, typeID, ownerID, locationID = droneData
     60             if evetypes.GetGroupID(typeID) in lowPriorityDrones:
     61                 return False
     62             return True
     63 
     64         priorityDrone = itertoolsext.first_or_default(droneData, predicate=IsHigherPrioritySpaceDrone, default=droneData[0])
     65         droneSlimItem = sm.GetService('michelle').GetItem(priorityDrone[0])
     66         if droneSlimItem:
     67             return droneSlimItem.typeID
     68 
     69 
     70 def ExpandRadialMenuForInSpaceGroup(clickedObject, displayName, droneData):
     71     manyItemsData = Bunch(menuFunction=GetMenuService().DroneMenu, itemData=droneData, displayName='<b>%s</b>' % displayName)
     72     typeID = GetTypeIDForManyDrones(DRONESTATE_INSPACE, droneData)
     73     GetMenuService().TryExpandActionMenu(itemID=None, typeID=typeID, clickedObject=clickedObject, manyItemsData=manyItemsData)
     74 
     75 
     76 def ExpandRadialMenuForInBayGroup(clickedObject, displayName, droneData):
     77     manyItemsData = Bunch(menuFunction=GetMenuService().InvItemMenu, itemData=droneData, displayName='<b>%s</b>' % displayName)
     78     typeID = GetTypeIDForManyDrones(DRONESTATE_INBAY, droneData)
     79     GetMenuService().TryExpandActionMenu(itemID=None, typeID=typeID, clickedObject=clickedObject, manyItemsData=manyItemsData)
     80 
     81 
     82 def LoadShortcutTooltip(tooltipPanel, commandName):
     83     tooltipPanel.LoadGeneric2ColumnTemplate()
     84     command = uicore.cmd.commandMap.GetCommandByName(commandName)
     85     tooltipPanel.AddLabelShortcut(command.GetName(), command.GetShortcutAsString())
     86     detailedDescription = command.GetDetailedDescription()
     87     if detailedDescription:
     88         tooltipPanel.AddLabelMedium(text=detailedDescription, align=uiconst.TOPLEFT, wrapWidth=200, colSpan=tooltipPanel.columns)
     89 
     90 
     91 def GetMaxDronesInSpace():
     92     return int(sm.GetService('godma').GetItem(session.charid).maxActiveDrones) or 0
     93 
     94 
     95 def GetPrimaryActionName(typeID):
     96     groupID = evetypes.GetGroupID(typeID)
     97     if groupID == appConst.groupMiningDrone:
     98         return GetByLabel('UI/Drones/MineWithDrone')
     99     elif groupID == appConst.groupSalvageDrone:
    100         return GetByLabel('UI/Drones/Salvage')
    101     else:
    102         return GetByLabel('UI/Drones/EngageTarget')