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

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