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)