schedulingSvc.py (5443B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\moonmining\schedulingSvc.py 2 import blue 3 import carbonui.const as uiconst 4 import gametime 5 import inventorycommon.const as invConst 6 import moonmining.const as extractionConst 7 from eve.common.lib.appConst import SEC, HOUR, corpRoleStationManager 8 from carbon.common.script.sys.service import Service 9 from eveexceptions import UserError 10 from player_messaging.client.ui_message import prompt_player_fsd_dialog 11 12 class SchedulingSvc(Service): 13 __guid__ = 'svc.scheduling' 14 __servicename__ = 'SchedulingSvc' 15 __notifyevents__ = ['OnMoonExtractionUpdate'] 16 17 def Run(self, memStream = None): 18 self.LogInfo('Starting Scheduling Service') 19 self.laserFiredTimestamp = None 20 21 def OpenSchedulingWndForStructure(self, structureID): 22 eventID, extraction = self.GetExtractionAndEventIDFromStructureID() 23 moonMaterialInfo = self.GetMoonResourcesForStructure() 24 moonID = self.GetMoonForStructureYourContolling(structureID) 25 structureInfo = sm.GetService('structureDirectory').GetStructureInfo(structureID) 26 from eve.client.script.ui.moonmining.scheduling import SchedulingWindow 27 SchedulingWindow.CloseIfOpen() 28 SchedulingWindow(structureID=structureID, moonID=moonID, extraction=extraction, structureOwnerID=structureInfo.ownerID, eventID=eventID) 29 30 def GetExtractionAndEventIDFromStructureID(self): 31 extraction, eventID = sm.RemoteSvc('moonExtractions').GetExtractionAndEventIDFromStructureID() 32 return (eventID, extraction) 33 34 def GetExtractionsForCorp(self): 35 if not session.corprole & corpRoleStationManager: 36 prompt_player_fsd_dialog('CantConfigureCorpStationMgrRoleLacking') 37 return [] 38 return sm.RemoteSvc('moonExtractions').GetExtractionsForCorp() 39 40 def StartMoonminingEvent(self, structureID, structureOwnerID, endtime, addToCalendar): 41 now = gametime.GetWallclockTime() 42 diff = endtime - now 43 durationSeconds = diff / SEC 44 if durationSeconds < extractionConst.MINIMUM_EXTRACTION_DURATION: 45 raise UserError('MoonminingEventTooShort') 46 if endtime > self.GetFuelExpiryTime(): 47 if prompt_player_fsd_dialog('NotEnoughFuelForExtractionDuration', {}, uiconst.YESNO) != uiconst.ID_YES: 48 return False 49 if structureOwnerID != session.corpid or not session.corprole & corpRoleStationManager: 50 if prompt_player_fsd_dialog('ConfirmStartMoonminingEventWithoutRolesToStop', {}, uiconst.YESNO, suppress=uiconst.ID_YES) != uiconst.ID_YES: 51 return False 52 sm.RemoteSvc('moonExtractions').StartNewExtraction(structureID, durationSeconds, addToCalendar) 53 return True 54 55 def FireLaser(self): 56 self.laserFiredTimestamp = gametime.GetWallclockTime() 57 try: 58 sm.ScatterEvent('OnMiningLaserFiredLocal') 59 sm.GetService('audio').SendUIEvent('moon_mining_fire_at_moon_button_play') 60 sm.RemoteSvc('moonExtractions').FractureChunkWithStructure() 61 except Exception: 62 self.laserFiredTimestamp = None 63 sm.ScatterEvent('OnMiningLaserFiredFailedLocal') 64 raise 65 66 def CancelExtraction(self): 67 if prompt_player_fsd_dialog('CancelExtraction', {}, uiconst.YESNO) != uiconst.ID_YES: 68 return 69 sm.RemoteSvc('moonExtractions').CancelExtraction() 70 71 def GetMoonResourcesForStructure(self): 72 moonResources = sm.RemoteSvc('moonExtractions').GetMoonResourcesForStructure() 73 return moonResources 74 75 def GetMoonForStructureYourContolling(ballpark, structureID): 76 if structureID != session.shipid: 77 raise RuntimeError('Trying to get the moon structure without controlling the structure') 78 bp = sm.GetService('michelle').GetBallpark() 79 if not bp: 80 return None 81 ball = bp.GetBall(structureID) 82 if not ball: 83 return None 84 structurePosition = (ball.x, ball.y, ball.z) 85 from moonmining.miningBeacons import FindMoonBeaconInRangeOfPosition 86 closestMoonID = FindMoonBeaconInRangeOfPosition(session.solarsystemid, structurePosition, extractionConst.MAXIMUM_MINING_BEACON_DISTANCE) 87 return closestMoonID 88 89 def GetFuelExpiryTime(self): 90 from shipfitting.fittingDogmaLocationUtil import GetFuelUsagePerHour 91 fuelUsagePerHour = int(GetFuelUsagePerHour(sm.GetService('clientDogmaIM').GetDogmaLocation())) 92 timeRemaining = 0 93 if fuelUsagePerHour: 94 structureInv = sm.GetService('invCache').GetInventoryFromId(session.structureid) 95 if structureInv: 96 unitsInFuelBay = sum((item.stacksize for item in structureInv.List(invConst.flagStructureFuel) if item.groupID == invConst.groupFuelBlock)) 97 remaining = min(unitsInFuelBay / fuelUsagePerHour, 876600) 98 timeRemaining = remaining * HOUR 99 now = blue.os.GetWallclockTime() 100 year, month, weekday, day, hour, _, _, _ = blue.os.GetTimeParts(now) 101 lastHourTimeStamp = blue.os.GetTimeFromParts(year, month, day, hour, 0, 0, 0) 102 fuelExpires = lastHourTimeStamp + timeRemaining 103 return fuelExpires 104 105 def OnMoonExtractionUpdate(self, extraction): 106 self.laserFiredTimestamp = None 107 108 def GetLaserFiredTimestamp(self): 109 return self.laserFiredTimestamp