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

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