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

combattargets.py (2997B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\conditions\combattargets.py
      2 from behaviors.const.combat import COMBAT_MIN_EFFECTIVE_RANGE
      3 from behaviors.tasks import Task
      4 from behaviors.utility.ballparks import is_ball_in_range, is_coordinate_in_range
      5 from behaviors.utility.roles import is_logistic_role
      6 from ccpProfile import TimedFunction
      7 MAX_DISTANCE_FROM_COMMANDER = 50000
      8 
      9 class HasPendingTarget(Task):
     10 
     11     @TimedFunction('behaviors::conditions::combattargets::HasPendingTarget::OnEnter')
     12     def OnEnter(self):
     13         if self.context.dogmaLM.HasPendingTarget(self.context.myItemId, self._get_my_target()):
     14             self.SetStatusToSuccess()
     15         else:
     16             self.SetStatusToFailed()
     17 
     18     def _get_my_target(self):
     19         return self.GetLastBlackboardValue(self.attributes.targetAddress)
     20 
     21 
     22 class AmIWithinMyEffectiveCombatRangeOfMyTarget(Task):
     23 
     24     @TimedFunction('behaviors::conditions::combattargets::AmIWithinMyEffectiveCombatRangeOfMyTarget::OnEnter')
     25     def OnEnter(self):
     26         self.SetStatusToFailed()
     27         max_effective_combat_range = self.get_my_max_effective_combat_range()
     28         if self._is_within_range(max_effective_combat_range):
     29             self.SetStatusToSuccess()
     30 
     31     def get_my_max_effective_combat_range(self):
     32         max_effective_combat_range = self.GetLastBlackboardValue(self.attributes.maxEffectiveCombatRangeAddress)
     33         return max(max_effective_combat_range, COMBAT_MIN_EFFECTIVE_RANGE)
     34 
     35     def _is_within_range(self, max_effective_combat_range):
     36         target_id = self.GetLastBlackboardValue(self.attributes.targetAddress)
     37         orbit_target_id = self.GetLastBlackboardValue(self.attributes.orbitTargetAddress)
     38         commander_id = self.GetLastBlackboardValue(self.attributes.commanderAddress)
     39         if orbit_target_id != commander_id:
     40             return is_ball_in_range(self, self.context.myBall.id, target_id, max_effective_combat_range)
     41         elif is_logistic_role(self, self.context.myItemId):
     42             return is_ball_in_range(self, self.context.myBall.id, orbit_target_id, max_effective_combat_range)
     43         else:
     44             return is_ball_in_range(self, self.context.myBall.id, orbit_target_id, MAX_DISTANCE_FROM_COMMANDER)
     45 
     46 
     47 class IsCoordinateWithinMyEffectiveCombatRange(AmIWithinMyEffectiveCombatRangeOfMyTarget):
     48 
     49     def _is_within_range(self, max_effective_combat_range):
     50         coordinate = self.GetLastBlackboardValue(self.attributes.coordinateAddress)
     51         return is_coordinate_in_range(self, coordinate, max_effective_combat_range)
     52 
     53 
     54 class IsTargeting(Task):
     55 
     56     @TimedFunction('behaviors::conditions::combattargets::IsTargeting::OnEnter')
     57     def OnEnter(self):
     58         if self.context.dogmaLM.IsTargeting(self.context.myItemId, self._get_my_target()):
     59             self.SetStatusToSuccess()
     60         else:
     61             self.SetStatusToFailed()
     62 
     63     def _get_my_target(self):
     64         return self.GetLastBlackboardValue(self.attributes.targetAddress)