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

structureDocking.py (3719B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\structure\structureDocking.py
      2 from carbon.common.lib.const import UE_LOC
      3 from carbon.common.script.sys.service import Service
      4 from carbonui import uiconst
      5 from eve.client.script.ui.shared.skillRequirementDialog import prompt_missing_skill_requirements
      6 from eve.common.script.sys.eveCfg import IsControllingStructure
      7 from eveexceptions import UserError
      8 from player_messaging.client.ui_message import prompt_player_fsd_dialog
      9 
     10 class StructureDocking(Service):
     11     __guid__ = 'svc.structureDocking'
     12     __dependencies__ = ['autoPilot',
     13      'clientDogmaIM',
     14      'gameui',
     15      'sessionMgr']
     16 
     17     @property
     18     def dogmaLocation(self):
     19         return self.clientDogmaIM.GetDogmaLocation()
     20 
     21     def Undock(self, structureID):
     22         if not self._InStateToUndock(structureID):
     23             return False
     24 
     25         def TryUndockOnServer(doIgnoreContraband):
     26             if session.shipid == session.structureid:
     27                 shipID = None
     28             else:
     29                 shipID = session.shipid
     30             sm.RemoteSvc('structureDocking').Undock(session.structureid, shipID, ignoreContraband=doIgnoreContraband)
     31 
     32         try:
     33             ignoreContraband = settings.user.suppress.Get('suppress.ShipContrabandWarningUndock', None) == uiconst.ID_OK
     34             self.sessionMgr.PerformSessionChange('undock', TryUndockOnServer, doIgnoreContraband=ignoreContraband)
     35             sm.GetService('space').PrioritizeLoadingForIDs([structureID])
     36         except UserError as e:
     37             if e.msg == 'ShipContrabandWarningUndock':
     38                 if prompt_player_fsd_dialog(e.msg, e.dict, uiconst.OKCANCEL, suppress=uiconst.ID_OK) == uiconst.ID_OK:
     39                     self.sessionMgr.PerformSessionChange('undock', TryUndockOnServer, doIgnoreContraband=True)
     40                 else:
     41                     return False
     42             else:
     43                 raise
     44 
     45         self.CloseStationWindows()
     46         return True
     47 
     48     def _InStateToUndock(self, structureID):
     49         if not session.structureid:
     50             return False
     51         if not session.solarsystemid:
     52             return False
     53         if structureID != session.structureid:
     54             return False
     55         return True
     56 
     57     def Dock(self, structureID):
     58 
     59         def RequestDocking():
     60             if session.shipid and session.solarsystemid:
     61                 try:
     62                     sm.RemoteSvc('structureDocking').Dock(structureID, session.shipid)
     63                 except UserError as e:
     64                     if e.msg == 'DockingRequestDenied':
     65                         reason = e.dict.get('reason')
     66                         if reason != (UE_LOC, 'UI/Station/StationManagment/ShipTooLarge'):
     67                             sm.ScatterEvent('OnDockingRequestWasDenied', structureID)
     68                     raise
     69 
     70         sm.ScatterEvent('OnClientEvent_DockCmdExecuted', structureID)
     71         self.autoPilot.NavigateSystemTo(structureID, 2500, RequestDocking)
     72 
     73     def ActivateShip(self, shipID):
     74         if session.structureid and not IsControllingStructure():
     75             typeID = sm.GetService('invCache').GetInventoryFromId(shipID).typeID
     76             if len(self.dogmaLocation.GetMissingSkills(typeID)) > 0:
     77                 prompt_missing_skill_requirements(typeID)
     78                 return
     79             self.dogmaLocation.MakeShipActive(shipID)
     80 
     81     def LeaveShip(self, shipID):
     82         if session.structureid:
     83             capsuleID = self.gameui.GetShipAccess().LeaveShip(shipID)
     84             self.dogmaLocation.MakeShipActive(capsuleID)
     85 
     86     def CloseStationWindows(self):
     87         from reprocessing.ui.reprocessingWnd import ReprocessingWnd
     88         ReprocessingWnd.CloseIfOpen()