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

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