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

turret.py (3978B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\parklife\turret.py
      2 import blue
      3 from carbon.common.script.sys.service import Service
      4 from eve.client.script.parklife import states as state
      5 from inventorycommon.const import turretModuleGroups
      6 
      7 class TurretSvc(Service):
      8     __exportedcalls__ = {}
      9     __notifyevents__ = ['OnStateChange',
     10      'ProcessTargetChanged',
     11      'OnGodmaItemChange',
     12      'ProcessShipEffect',
     13      'ProcessActiveShipChanged',
     14      'OnChargeBeingLoadedToModule']
     15     __dependencies__ = []
     16     __guid__ = 'svc.turret'
     17     __servicename__ = 'turret'
     18     __displayname__ = 'Turret Service'
     19 
     20     def Run(self, memStream = None):
     21         self.LogInfo('Starting Turret Service')
     22 
     23     def Startup(self):
     24         pass
     25 
     26     def Stop(self, memStream = None):
     27         pass
     28 
     29     def OnStateChange(self, itemID, flag, *args):
     30         if flag == state.targeting:
     31             pass
     32         if flag != state.activeTarget:
     33             return
     34         ship = sm.GetService('michelle').GetBall(session.shipid)
     35         rest = len(sm.GetService('target').GetTargets()) == 0
     36         for turretSet in getattr(ship, 'turrets', []):
     37             if rest:
     38                 turretSet.Rest()
     39             elif not turretSet.IsShooting():
     40                 turretSet.SetTarget(itemID)
     41                 turretSet.TakeAim(itemID)
     42 
     43     def OnGodmaItemChange(self, item, change):
     44         ball = sm.GetService('michelle').GetBall(session.shipid)
     45         if ball is None:
     46             return
     47         targetSvc = sm.GetService('target')
     48         if targetSvc is None:
     49             return
     50         if item.groupID in turretModuleGroups:
     51             ball.UnfitHardpoints()
     52             ball.FitHardpoints()
     53             targets = targetSvc.GetTargets()
     54             if len(targets) > 0:
     55                 for turretSet in ball.turrets:
     56                     turretSet.SetTargetsAvailable(True)
     57                     turretSet.SetTarget(targetSvc.GetActiveTargetID())
     58 
     59     def ProcessTargetChanged(self, what, tid, reason):
     60         ship = sm.GetService('michelle').GetBall(session.shipid)
     61         if ship is None:
     62             return
     63         if not hasattr(ship, 'turrets'):
     64             return
     65         blue.synchro.Yield()
     66         targets = sm.GetService('target').GetTargets()
     67         for turretSet in ship.turrets:
     68             turretSet.SetTargetsAvailable(len(targets) != 0)
     69 
     70     def ProcessShipEffect(self, godmaStm, effectState):
     71         if effectState.effectName == 'online':
     72             ship = sm.GetService('michelle').GetBall(session.shipid)
     73             if ship is not None:
     74                 turret = None
     75                 for moduleID in getattr(ship, 'modules', []):
     76                     if moduleID == effectState.itemID:
     77                         turret = ship.modules[moduleID]
     78 
     79                 if turret is not None:
     80                     if effectState.active:
     81                         turret.Online()
     82                     else:
     83                         turret.Offline()
     84 
     85     def ProcessActiveShipChanged(self, shipID, oldShipID):
     86         bp = sm.GetService('michelle').GetBallpark()
     87         if bp:
     88             try:
     89                 ship = bp.balls[shipID]
     90             except KeyError:
     91                 return
     92 
     93             try:
     94                 if session.shipid == session.structureid and getattr(ship, 'fitted', False):
     95                     return
     96                 ship.UnfitHardpoints()
     97                 ship.FitHardpoints()
     98             except AttributeError:
     99                 self.LogInfo("Ship didn't have attribute fitted. Probably still being initialized", shipID)
    100 
    101     def OnChargeBeingLoadedToModule(self, moduleIDs, chargeTypeID, reloadTime):
    102         ship = sm.GetService('michelle').GetBall(session.shipid)
    103         if ship is not None:
    104             for launcherID in moduleIDs:
    105                 if launcherID in ship.modules:
    106                     turret = ship.modules[launcherID]
    107                     if turret is not None:
    108                         turret.Reload()