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

schools.py (3926B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\characterdata\schools.py
      2 import logging
      3 import random
      4 from collections import defaultdict
      5 from monolithconfig import get_value
      6 from fsdBuiltData.common.base import BuiltDataLoader
      7 from npcs.npccorporations import get_corporation_station_id
      8 try:
      9     import schoolsLoader
     10 except ImportError:
     11     schoolsLoader = None
     12 
     13 logger = logging.getLogger(__name__)
     14 
     15 class SchoolsLoader(BuiltDataLoader):
     16     __resBuiltFile__ = 'res:/staticData/schools.fsdbinary'
     17     __clientAutobuildBuiltFile__ = 'eve/autobuild/staticData/client/schools.fsdbinary'
     18     __serverAutobuildBuiltFile__ = 'eve/autobuild/staticData/server/schools.fsdbinary'
     19     __loader__ = schoolsLoader
     20 
     21 
     22 def _get_schools():
     23     return SchoolsLoader.GetData()
     24 
     25 
     26 def iter_schools():
     27     for school_id, data in _get_schools().iteritems():
     28         yield (school_id, data)
     29 
     30 
     31 def get_school(school_id):
     32     return _get_schools()[school_id]
     33 
     34 
     35 def get_school_race_id(school_id):
     36     return get_school(school_id).raceID
     37 
     38 
     39 def get_school_corporation_id(school_id):
     40     return get_school(school_id).corporationID
     41 
     42 
     43 def get_school_agent_ids(school_id):
     44     school = get_school(school_id)
     45     return school.careerAgents or []
     46 
     47 
     48 def get_all_school_ids():
     49     return _get_schools().keys()
     50 
     51 
     52 def get_all_school_race_ids():
     53     return [ school.raceID for school in _get_schools().itervalues() ]
     54 
     55 
     56 def get_all_schools_by_race():
     57     schools_by_race = defaultdict(list)
     58     for school_id, school in _get_schools().iteritems():
     59         schools_by_race[school.raceID].append(school_id)
     60 
     61     return schools_by_race
     62 
     63 
     64 def get_all_school_corporation_ids():
     65     return [ school.corporationID for school in _get_schools().itervalues() ]
     66 
     67 
     68 def get_career_id(school_id):
     69     return get_school(school_id).careerID
     70 
     71 
     72 def get_school_ids_by_race_id(race_id):
     73     return [ school_id for school_id, school in iter_schools() if school.raceID == race_id and not school.is_starter_space_school ]
     74 
     75 
     76 def school_exists(school_id):
     77     return school_id in _get_schools()
     78 
     79 
     80 def get_school_name(school_id, school = None, language_id = None):
     81     if not school:
     82         school = get_school(school_id)
     83     return _get_message(school.nameID, language_id=language_id)
     84 
     85 
     86 def get_school_description(school_id, school = None, language_id = None):
     87     if not school:
     88         school = get_school(school_id)
     89     return _get_message(school.descriptionID, language_id=language_id)
     90 
     91 
     92 def get_school_title(school_id, school = None, language_id = None):
     93     if not school:
     94         school = get_school(school_id)
     95     return _get_message(school.titleID, language_id=language_id)
     96 
     97 
     98 def get_school_character_description(school_id, school = None, language_id = None):
     99     if not school:
    100         school = get_school(school_id)
    101     return _get_message(school.characterDescriptionID, language_id=language_id)
    102 
    103 
    104 def _get_message(message_id, language_id = None):
    105     import localization
    106     return localization.GetByMessageID(message_id, language_id=language_id)
    107 
    108 
    109 def get_school_starting_station(school_id):
    110     try:
    111         stations = get_school(school_id).startingStations or []
    112         number_of_newbie_systems = get_value('Newbie-System-Count', 'Character') or 1
    113         station_index = random.randint(0, int(number_of_newbie_systems) - 1)
    114         return stations[station_index]
    115     except IndexError:
    116         corporation_id = get_school_corporation_id(school_id)
    117         return get_corporation_station_id(corporation_id)
    118     except KeyError:
    119         logger.error('Failed to load school with id: %s', school_id)
    120         raise
    121 
    122 
    123 def is_starter_space_school(school_id):
    124     school = get_school(school_id)
    125     return bool(getattr(school, 'is_starter_space_school', False))
    126 
    127 
    128 def get_starting_space_schools_for_race(race_id):
    129     return [ school_id for school_id, school in iter_schools() if school.is_starter_space_school and school.raceID == race_id ]