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