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

battlefield.py (2965B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\conditions\battlefield.py
      2 from behaviors.exceptions import BehaviorAuthoringException
      3 from behaviors.groups.mixin import GroupTaskMixin
      4 from behaviors.tasks import Task
      5 from behaviors.utility.awareness import get_spawn_pool_id, get_fleet_awareness_members_ids
      6 from behaviors.utility.battlefield import get_npc_cost_by_group_id, get_player_cost_for_item_ids
      7 from ccpProfile import TimedFunction
      8 import logging
      9 logger = logging.getLogger(__name__)
     10 
     11 class IsFleetTypeEqualTo(Task):
     12 
     13     @TimedFunction('behaviors::conditions::battlefield::IsFleetTypeEqualTo::OnEnter')
     14     def OnEnter(self):
     15         fleet_type = self.GetLastBlackboardValue(self.attributes.fleetTypeToCounterAddress)
     16         is_equal = fleet_type == self.attributes.fleetType
     17         self.SetStatusToSuccessIfTrueElseToFailed(is_equal)
     18 
     19 
     20 class IsAnyFleetMemberMemberAggressed(Task):
     21 
     22     @TimedFunction('behaviors::conditions::battlefield::IsAnyFleetMemberMemberAggressed::OnEnter')
     23     def OnEnter(self):
     24         member_ids = get_fleet_awareness_members_ids(self, get_spawn_pool_id(self))
     25         for member_id in member_ids:
     26             member_object_state = self.get_aggression_object_state(member_id)
     27             if member_object_state.IsAggressed():
     28                 self.SetStatusToSuccess()
     29                 return
     30 
     31         self.SetStatusToFailed()
     32 
     33     def get_aggression_object_state(self, member_id):
     34         return self.context.ballpark.dogmaLM.aggressionLM.GetObjectState(member_id)
     35 
     36 
     37 class IsPlayerFleetRelativeStrengthToHigh(Task, GroupTaskMixin):
     38 
     39     @TimedFunction('behaviors::conditions::battlefield::IsPlayerFleetRelativeStrengthToHigh::OnEnter')
     40     def OnEnter(self):
     41         self.SetStatusToFailed()
     42         relative_strength = self._get_relative_strength()
     43         if relative_strength > self.attributes.relativeStrengthThreshold:
     44             self.SetStatusToSuccess()
     45 
     46     def _get_relative_strength(self):
     47         spawn_table_id = self._get_spawn_table_id()
     48         if spawn_table_id is None:
     49             raise BehaviorAuthoringException('Behavior=%s is not spawned from spawn table and should not have IsPlayerFleetRelativeStrengthToHigh task assigned', self.behaviorTree.GetBehaviorId())
     50         npc_fleet_cost = self._get_npc_fleet_cost(spawn_table_id)
     51         player_fleet_cost = self._get_player_fleet_cost()
     52         return float(player_fleet_cost) / float(npc_fleet_cost)
     53 
     54     def _get_spawn_table_id(self):
     55         return getattr(self.context, 'mySpawnTableId', None)
     56 
     57     def _get_player_fleet_cost(self):
     58         item_ids = self._get_player_item_ids()
     59         return get_player_cost_for_item_ids(self, item_ids)
     60 
     61     def _get_player_item_ids(self):
     62         return self.GetLastBlackboardValue(self.attributes.playerItemIdsAddress)
     63 
     64     def _get_npc_fleet_cost(self, spawn_table_id):
     65         return get_npc_cost_by_group_id(self, self.context.myEntityGroupId, spawn_table_id)