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

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