damage.py (1237B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\monitors\damage.py 2 import logging 3 import dogma.attributes.health as health 4 from ballpark.messenger.const import MESSAGE_ON_DAMAGE_CHANGED 5 from behaviors.tasks import Task 6 logger = logging.getLogger(__name__) 7 8 class ArmorDamageThresholdMonitor(Task): 9 10 def OnEnter(self): 11 self.SubscribeItem(self.context.myItemId, MESSAGE_ON_DAMAGE_CHANGED, self._OnDamageReceived) 12 self.SetStatusToSuccess() 13 14 def CleanUp(self): 15 if not self.IsInvalid(): 16 self.UnsubscribeItem(self.context.myItemId, MESSAGE_ON_DAMAGE_CHANGED, self._OnDamageReceived) 17 super(ArmorDamageThresholdMonitor, self).CleanUp() 18 19 def _OnDamageReceived(self, *args): 20 if self.IsInvalid(): 21 return 22 armorRatio = health.GetCurrentArmorRatio(self.context.dogmaLM, self.context.myItemId) 23 if armorRatio < self.attributes.armorRatioThreshold: 24 logger.debug('Damage received armor ratio=%s threshold=%s', armorRatio, self.attributes.armorRatioThreshold) 25 self.SendBlackboardValue(self.attributes.thresholdReachedAddress, True) 26 self.behaviorTree.RequestReset(requestedBy=self)