combat.py (2481B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\conditions\combat.py 2 from behaviors import status 3 from behaviors.tasks import Task 4 from behaviors.utility.ballparks import is_ball_in_range, is_ball_cloaked, is_target_valid 5 from ccpProfile import TimedFunction 6 from dogma.const import attributeMaxLockedTargets 7 8 class HasValidTarget(Task): 9 10 @TimedFunction('behaviors::conditions::combat::HasValidTarget::OnEnter') 11 def OnEnter(self): 12 self.SetStatusToFailed() 13 selected_target = self.GetLastBlackboardValue(self.attributes.selectedTargetAddress) 14 if is_target_valid(self, selected_target): 15 self.SetStatusToSuccess() 16 17 18 class HasAvailableTargetCapacity(Task): 19 20 @TimedFunction('behaviors::conditions::combat::HasAvailableTargetCapacity::OnEnter') 21 def OnEnter(self): 22 if self.GetTargetCount() >= self.GetMaxLockedTargets(): 23 self.status = status.TaskFailureStatus 24 else: 25 self.status = status.TaskSuccessStatus 26 27 def GetMaxLockedTargets(self): 28 return self.context.dogmaLM.GetAttributeValue(self.context.myItemId, attributeMaxLockedTargets) 29 30 def GetTargetCount(self): 31 return len(self.context.dogmaLM.GetTargetsEx(self.context.myItemId)) 32 33 34 class HasItemsFromCollectionWithinRange(Task): 35 36 @TimedFunction('behaviors::conditions::combat::HasItemsFromCollectionWithinRange::OnEnter') 37 def OnEnter(self): 38 self.SetStatusToFailed() 39 item_collection = self.GetLastBlackboardValue(self.attributes.itemIdCollectionAddress) 40 if not item_collection: 41 return 42 detection_range = self.GetLastBlackboardValue(self.attributes.detectionRangeAddress) 43 reference_item_id = self.context.myItemId 44 if self.FindAnyValidItemInRange(item_collection, detection_range, reference_item_id): 45 self.SetStatusToSuccess() 46 47 @TimedFunction('behaviors::conditions::combat::HasItemsFromCollectionWithinRange::FindAnyValidItemInRange') 48 def FindAnyValidItemInRange(self, item_collection, detection_range, reference_item_id): 49 include_clocked_items = self.attributes.includeCloakedItems 50 for item_id in item_collection: 51 if not is_ball_in_range(self, reference_item_id, item_id, detection_range): 52 continue 53 if not include_clocked_items and is_ball_cloaked(self, item_id): 54 continue 55 return True 56 57 return False