guard.py (1821B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\actions\guard.py 2 from behaviors.groups.mixin import GroupTaskMixin 3 from behaviors.tasks import Task 4 from behaviors.utility.components import get_proximity_sensor, create_proximity_sensor 5 from npcs.server.tags import entity_group_tag, try_add_behavior_context_tags 6 7 class PlaceProximitySensor(Task): 8 9 def OnEnter(self): 10 item_id = self.GetLastBlackboardValue(self.attributes.itemIdAddress) 11 self._UpdateSensor(item_id) 12 self.SetStatusToSuccess() 13 14 def _UpdateSensor(self, item_id): 15 try: 16 self._ReplaceSensor(item_id) 17 except KeyError: 18 self._InstallSensor(item_id) 19 20 def _InstallSensor(self, item_id): 21 aggression_range = self.GetLastBlackboardValue(self.attributes.rangeAddress) 22 proximitySensor = create_proximity_sensor(self, item_id, aggression_range) 23 self.SetTags(proximitySensor) 24 sensor_ball_id = proximitySensor.RegisterSensor(self.context.ballpark) 25 return sensor_ball_id 26 27 def SetTags(self, proximitySensor): 28 try_add_behavior_context_tags(proximitySensor, self.context) 29 tags = getattr(self.attributes, 'tags', None) 30 if tags: 31 for tag in tags: 32 proximitySensor.AddTag(tag) 33 34 def _ReplaceSensor(self, item_id): 35 proximitySensor = get_proximity_sensor(self, item_id) 36 if proximitySensor.GetDistanceTo(item_id) > self.attributes.sensorReplacementRange: 37 proximitySensor.ReplaceSensor() 38 39 40 class PlaceProximitySensorForGroup(PlaceProximitySensor, GroupTaskMixin): 41 42 def OnEnter(self): 43 item_ids = self.GetMemberIdList() 44 for item_id in item_ids: 45 self._UpdateSensor(item_id) 46 47 self.SetStatusToSuccess()