data.py (4325B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\eveagent\data.py 2 from collections import defaultdict 3 from logging import getLogger 4 from characterdata.npccharacters import get_npc_character 5 from characterdata.npccharacters import iter_npc_characters 6 from eve.common.lib.appConst import agentTypeCONCORDAgent 7 from eve.common.lib.appConst import agentTypeEventMissionAgent 8 from eve.common.lib.appConst import agentTypeTutorialAgent 9 from eve.common.lib.appConst import factionCONCORDAssembly 10 from eve.common.lib.appConst import factionJoveEmpire 11 from eve.common.lib.appConst import factionSocietyOfConsciousThought 12 from eve.common.script.sys.idCheckers import IsStation 13 from fsdBuiltData.common.base import BuiltDataLoader 14 from npcs.npccorporations import get_corporation_faction_id 15 try: 16 import agentsInSpaceLoader 17 except ImportError: 18 agentsInSpaceLoader = None 19 20 try: 21 import agentTypesLoader 22 except ImportError: 23 agentTypesLoader = None 24 25 logger = getLogger(__name__) 26 27 class AgentsInSpace(BuiltDataLoader): 28 __resBuiltFile__ = 'res:/staticdata/agentsInSpace.fsdbinary' 29 __serverAutobuildBuiltFile__ = 'eve/autobuild/staticData/server/agentsInSpace.fsdbinary' 30 __clientAutobuildBuiltFile__ = 'eve/autobuild/staticdata/client/agentsInSpace.fsdbinary' 31 __loader__ = agentsInSpaceLoader 32 33 34 class AgentTypes(BuiltDataLoader): 35 __resBuiltFile__ = 'res:/staticdata/agentTypes.fsdbinary' 36 __clientAutobuildBuiltFile__ = 'eve/autobuild/staticdata/client/agentTypes.fsdbinary' 37 __serverAutobuildBuiltFile__ = 'eve/autobuild/staticData/server/agentTypes.fsdbinary' 38 __loader__ = agentTypesLoader 39 40 41 def get_agents_in_space(): 42 return AgentsInSpace.GetData() 43 44 45 def get_agent_in_space(agent_id): 46 return get_agents_in_space().get(agent_id, None) 47 48 49 def get_agent(agent_id): 50 character = get_npc_character(agent_id) 51 if character and character.agent: 52 return character.agent 53 logger.error('Failed to load agent with id: %d, returning None.', agent_id) 54 55 56 def iter_agents(): 57 for character_id, character in iter_npc_characters(): 58 if character.agent: 59 yield (character_id, character, character.agent) 60 61 62 def get_agent_type_id(character, agent): 63 faction_id = get_agent_faction_id(character) 64 if agent.agentType in (agentTypeTutorialAgent, agentTypeCONCORDAgent) or agent.agentLevel == 6 or faction_id in (factionCONCORDAssembly, factionJoveEmpire, factionSocietyOfConsciousThought): 65 return agentTypeEventMissionAgent 66 return agent.agentType 67 68 69 def get_agent_faction_id(character): 70 return get_corporation_faction_id(character.corporationID) 71 72 73 def get_agent_solar_system_id(character_id, station): 74 agent_in_space = get_agent_in_space(character_id) 75 if agent_in_space: 76 return agent_in_space.solarSystemID 77 if station: 78 return station.solarSystemID 79 80 81 def get_agent_station_id(character_id, character, agents_in_space): 82 if character_id in agents_in_space: 83 return None 84 if character.stationID and IsStation(character.stationID): 85 return character.stationID 86 87 88 def get_agent_count_by_corporation(agent_type = None): 89 agent_count = defaultdict(int) 90 for _, character, agent in iter_agents(): 91 agent_type_id = get_agent_type_id(character, agent) 92 if not agent_type or agent_type == agent_type_id: 93 agent_count[character.corporationID] += 1 94 95 return agent_count 96 97 98 def get_agents_by_corporation_id(corporation_id): 99 return [ (agent_id, agent, get_agent_type_id(character, agent)) for agent_id, character, agent in iter_agents() if character.corporationID == corporation_id ] 100 101 102 def get_agent_ids_by_agent_type(agent_type): 103 return [ character_id for character_id, _, agent in iter_agents() if agent.agentType == agent_type ] 104 105 106 def get_agent_config(agent_id): 107 agent = get_agent(agent_id) 108 if agent: 109 return {'level': agent.agentLevel, 110 'agent.LocateCharacterService.enabled': int(agent.agentLocateCharacter)} 111 return {} 112 113 114 def iter_agents_in_stations(): 115 for agent_id, character, agent in iter_agents(): 116 if character.stationID: 117 yield (agent_id, agent, character.stationID) 118 119 120 def get_agent_type_name(agent_type_id, default = None): 121 return AgentTypes.GetData().get(agent_type_id, default)