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

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)