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

skin_tier.py (3765B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\common\ships\skins\static_data\skin_tier.py
      2 import shipgroup
      3 from fsdBuiltData.common.base import BuiltDataLoader
      4 try:
      5     import ship_skin_design_tier_thresholdsLoader
      6 except ImportError:
      7     ship_skin_design_tier_thresholdsLoader = None
      8 
      9 class _ShipSkinTierThresholdsDataLoader(BuiltDataLoader):
     10     __resBuiltFile__ = 'res:/staticdata/ship_skin_design_tier_thresholds.fsdbinary'
     11     __clientAutobuildBuiltFile__ = 'eve/autobuild/staticData/client/ship_skin_design_tier_thresholds.fsdbinary'
     12     __serverAutobuildBuiltFile__ = 'eve/autobuild/staticData/server/ship_skin_design_tier_thresholds.fsdbinary'
     13     __loader__ = ship_skin_design_tier_thresholdsLoader
     14 
     15 
     16 def get_tier_thresholds_data():
     17     return _ShipSkinTierThresholdsDataLoader.GetData()
     18 
     19 
     20 class ShipSkinTierThresholdsSet(object):
     21 
     22     def __init__(self, info_group_id, thresholds_per_tier_level):
     23         self._info_group_id = info_group_id
     24         self._thresholds = []
     25         self._build_thresholds_list(thresholds_per_tier_level)
     26 
     27     def _build_thresholds_list(self, thresholds_per_tier_level):
     28         max_tier = max(thresholds_per_tier_level.keys()) + 1
     29         self._thresholds.append(0)
     30         for tier_level in range(1, max_tier):
     31             if tier_level not in thresholds_per_tier_level:
     32                 raise Exception('The list of SKIN tier thresholds for info group id %s is missing a value for tier %s' % (self._info_group_id, tier_level))
     33             self._thresholds.append(thresholds_per_tier_level[tier_level])
     34 
     35         previous = -1
     36         for x in self._thresholds:
     37             if x <= previous:
     38                 raise Exception('The list of SKIN tier thresholds for info group id %s is not strictly ascending' % self._info_group_id)
     39             previous = x
     40 
     41     def get_tier_level(self, points_value):
     42         if points_value > self._thresholds[-1]:
     43             return self.get_max_tier()
     44         if self.get_max_tier() <= 1 or points_value <= self._thresholds[1]:
     45             return 1
     46         for tier_level in range(2, len(self._thresholds)):
     47             if self._thresholds[tier_level - 1] < points_value <= self._thresholds[tier_level]:
     48                 return tier_level
     49 
     50     def get_max_tier(self):
     51         return len(self._thresholds)
     52 
     53     def get_threshold_for_tier(self, tier_level):
     54         if tier_level < 0:
     55             tier_level = 0
     56         if tier_level >= self.get_max_tier():
     57             return None
     58         return self._thresholds[tier_level]
     59 
     60 
     61 class ShipSkinTierTable(object):
     62 
     63     def __init__(self):
     64         self._tier_thresholds_sets = None
     65 
     66     @property
     67     def tier_thresholds_sets(self):
     68         if self._tier_thresholds_sets is None:
     69             self._load_thresholds()
     70         return self._tier_thresholds_sets
     71 
     72     def _load_thresholds(self):
     73         self._tier_thresholds_sets = {}
     74         fsd_data = get_tier_thresholds_data()
     75         for info_group_id, thresholds in fsd_data.iteritems():
     76             self._tier_thresholds_sets[info_group_id] = ShipSkinTierThresholdsSet(info_group_id, thresholds)
     77 
     78     def get_thresholds_for_ship_type(self, ship_type_id):
     79         ship_group_id = shipgroup.get_ship_group_id(ship_type_id)
     80         if ship_group_id is None:
     81             return
     82         return self.tier_thresholds_sets.get(ship_group_id, None)
     83 
     84     def get_tier_level_for_design(self, skin_design):
     85         return self.get_tier_level(skin_design.ship_type_id, skin_design.compute_current_points_value())
     86 
     87     def get_tier_level(self, ship_type_id, points_value):
     88         thresholds_set = self.get_thresholds_for_ship_type(ship_type_id)
     89         if thresholds_set is None:
     90             return 1
     91         return thresholds_set.get_tier_level(points_value)