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()