slot_configuration.py (3075B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\common\ships\skins\static_data\slot_configuration.py 2 import evetypes 3 import shipgroup 4 from eve.common.lib import appConst 5 from fsdBuiltData.common.base import BuiltDataLoader 6 try: 7 import ship_cosmetic_slot_configurationsLoader 8 except ImportError: 9 ship_cosmetic_slot_configurationsLoader = None 10 11 class SlotConfigurationsDataLoader(BuiltDataLoader): 12 __resBuiltFile__ = 'res:/staticdata/ship_cosmetic_slot_configurations.fsdbinary' 13 __clientAutobuildBuiltFile__ = 'eve/autobuild/staticData/client/ship_cosmetic_slot_configurations.fsdbinary' 14 __serverAutobuildBuiltFile__ = 'eve/autobuild/staticData/server/ship_cosmetic_slot_configurations.fsdbinary' 15 __loader__ = ship_cosmetic_slot_configurationsLoader 16 _slot_configurations = None 17 18 @classmethod 19 def _check_init_slot_configurations(cls): 20 if cls._slot_configurations: 21 return 22 configs = [ (SlotConfiguration.build_from_fsd(data), data.priority) for data in cls.GetData().values() ] 23 cls._slot_configurations = [ a for a, b in sorted(configs, key=lambda x: x[1], reverse=False) ] 24 25 @classmethod 26 def get_for_ship(cls, type_id): 27 cls._check_init_slot_configurations() 28 for config in cls._slot_configurations: 29 if config.is_ship_type_allowed(type_id): 30 return config 31 32 @classmethod 33 def get_type_ids_with_empty_slot_configuration(cls): 34 cls._check_init_slot_configurations() 35 ship_list = [] 36 for config in cls._slot_configurations: 37 if len(config.slots) == 0: 38 ship_list.extend(config.allowed_ship_types) 39 40 return ship_list 41 42 @classmethod 43 def ReloadDataFromDisk(cls): 44 super(SlotConfigurationsDataLoader, cls).ReloadDataFromDisk() 45 cls._slot_configurations = None 46 47 48 class SlotConfiguration(object): 49 50 def __init__(self, slot_ids, allowed_ship_types, priority): 51 self._slots = slot_ids 52 self._allowed_ship_types = allowed_ship_types 53 self._priority = priority 54 55 def is_ship_type_allowed(self, ship_type_id): 56 if self._allowed_ship_types is None or ship_type_id in self._allowed_ship_types: 57 return True 58 else: 59 return False 60 61 @property 62 def slots(self): 63 return self._slots 64 65 @property 66 def allowed_ship_types(self): 67 return self._allowed_ship_types 68 69 @staticmethod 70 def build_from_fsd(fsd_data): 71 slot_ids = fsd_data.config 72 allowed_ship_types = None if fsd_data.allow_all_ships else fsd_data.ships 73 priority = fsd_data.priority 74 return SlotConfiguration(slot_ids, allowed_ship_types, priority) 75 76 77 def is_skinnable_ship(type_id): 78 if evetypes.GetCategoryID(type_id) != appConst.categoryShip: 79 return False 80 if type_id in SlotConfigurationsDataLoader.get_type_ids_with_empty_slot_configuration(): 81 return False 82 if shipgroup.get_ship_group_id(type_id) is None: 83 return False 84 return True