effects.py (1753B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\monitors\effects.py 2 from behaviors.tasks import Task 3 from ccpProfile import TimedFunction 4 5 class EffectUsageMonitor(Task): 6 7 def OnEnter(self): 8 self.SubscribeOnEffect() 9 self.SetStatusToFailed() 10 11 def CleanUp(self): 12 self.UnsubscribeOnEffect() 13 self.SetStatusToInvalid() 14 15 @TimedFunction('behaviors::monitors::EffectUsageMonitor::OnEffect') 16 def OnEffect(self, effect, start, active, env, otherTypeID, duration, repeat, error): 17 if self.IsInvalid(): 18 return 19 if not self.IsEffectMatch(effect): 20 return 21 if not self.IsShipEffect(env): 22 return 23 if not self.IsSameBubble(env): 24 return 25 self.UpdateShipIdSet(env) 26 27 def SubscribeOnEffect(self): 28 self.context.dogmaLM.RegisterEffectCallback(('OnEffect', self)) 29 30 def UnsubscribeOnEffect(self): 31 self.context.dogmaLM.UnregisterEffectCallback(('OnEffect', self)) 32 33 def UpdateShipIdSet(self, dogmaEnvironment): 34 shipSet = self.GetLastBlackboardValue(self.attributes.shipIdSetAddress) or set() 35 if dogmaEnvironment.shipID in shipSet: 36 return 37 shipSet.add(dogmaEnvironment.shipID) 38 self.SendBlackboardValue(self.attributes.shipIdSetAddress, shipSet) 39 40 def IsEffectMatch(self, effect): 41 return effect.effectID == self.attributes.effectId 42 43 def IsSameBubble(self, dogmaEnvironment): 44 shipBall = self.context.ballpark.GetBall(dogmaEnvironment.shipID) 45 return shipBall.newBubbleId == self.context.myBall.newBubbleId 46 47 def IsShipEffect(self, dogmaEnvironment): 48 return dogmaEnvironment.shipID is not None