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

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()