dungeon.py (4232B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\actions\dungeon.py 2 from behaviors.groups.mixin import GroupTaskMixin 3 from behaviors.tasks import Task 4 import logging 5 logger = logging.getLogger(__name__) 6 7 class SelectTeamMembersInRange(Task): 8 9 def OnEnter(self): 10 self.SetStatusToFailed() 11 max_distance = self.GetLastBlackboardValue(self.attributes.maxDistanceAddress) 12 reference_item_id = self.GetLastBlackboardValue(self.attributes.referenceItemIdAddress) 13 groups_by_team = self.GetLastBlackboardValue(self.attributes.entityGroupsByTeamNameAddress) 14 if not groups_by_team: 15 logger.debug('cant find any groups by team') 16 return 17 team_name = self.GetLastBlackboardValue(self.attributes.teamNameAddress) 18 group_ids = groups_by_team.get(team_name) 19 if not group_ids: 20 logger.debug('cant find any registered groups for team %s', team_name) 21 return 22 selected_ids = [] 23 group_manager = self.context.groupManager 24 ballpark = self.context.ballpark 25 for group_id in group_ids: 26 group = group_manager.GetGroup(group_id) 27 if group is None: 28 continue 29 group_member_ids = group.GetGroupMembers() 30 for group_member_id in group_member_ids: 31 distance = ballpark.GetSurfaceDist(reference_item_id, group_member_id) 32 if distance <= max_distance: 33 selected_ids.append(group_member_id) 34 35 self.SendBlackboardValue(self.attributes.selectedItemsAddress, selected_ids) 36 if not selected_ids: 37 logger.debug('cant find any members to select from team %s with in range', team_name) 38 return 39 self.SetStatusToSuccess() 40 41 42 class RegisterEntityGroupsByTeamName(Task, GroupTaskMixin): 43 44 def OnEnter(self): 45 self.SetStatusToSuccess() 46 team_name = self.GetLastBlackboardValue(self.attributes.teamNameAddress) 47 entities_by_group = self.GetLastBlackboardValue(self.attributes.entityGroupsByTeamNameAddress) or {} 48 group_ids_in_team = entities_by_group.get(team_name, set()) 49 group_id = self.context.myEntityGroupId 50 if group_id not in group_ids_in_team: 51 group_ids_in_team.add(group_id) 52 entities_by_group[team_name] = group_ids_in_team 53 self.SendBlackboardValue(self.attributes.entityGroupsByTeamNameAddress, entities_by_group) 54 55 56 class GetDungeonSpawnEntryPoint(Task): 57 58 def OnEnter(self): 59 self.SetStatusToFailed() 60 spawn_id = self.GetLastBlackboardValue(self.attributes.dungeonSpawnIdAddress) 61 if not spawn_id: 62 logger.debug('Spawn ID not found in blackboard: %s', spawn_id) 63 return 64 if not self.context.keeper.DoesSpawnExist(spawn_id): 65 logger.debug('Spawn %s does not exist', spawn_id) 66 return 67 spawn = self.context.keeper.GetSpawn(spawn_id) 68 self.SendBlackboardValue(self.attributes.dungeonEntryCoordinatesAddress, spawn.entryPos) 69 self.SetStatusToSuccess() 70 71 72 class SetContextDungeonSpawnId(Task): 73 74 def OnEnter(self): 75 spawn_id = self.GetLastBlackboardValue(self.attributes.dungeonSpawnIdAddress) 76 self.context.myDungeonSpawnId = spawn_id 77 self.ResetBlackboardAddressCache() 78 self.SetStatusToSuccess() 79 80 81 class GetItemIdForDungeonObject(Task): 82 83 def OnEnter(self): 84 object_id = self.GetLastBlackboardValue(self.attributes.objectIdAddress) 85 if not object_id: 86 logger.debug('No object Id found to in blackboard for dungeon spawn %s', self.context.myDungeonSpawnId) 87 self.SetStatusToFailed() 88 return 89 dungeon_spawn = self.context.keeper.GetSpawn(self.context.myDungeonSpawnId) 90 item_id = self.context.keeper.GetItemIdForObject(dungeon_spawn, object_id) 91 if not item_id: 92 logger.debug('No item id found for object Id %s found in dungeon spawn %s', object_id, self.context.myDungeonSpawnId) 93 self.SetStatusToFailed() 94 return 95 self.SendBlackboardValue(self.attributes.itemIdAddress, item_id) 96 self.SetStatusToSuccess()