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 ]