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

factions.py (3653B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\characterdata\factions.py
      2 from collections import namedtuple
      3 from caching import Memoize
      4 from eveprefs import boot
      5 from fsdBuiltData.common.base import BuiltDataLoader
      6 from inventorycommon.const import ownerNone
      7 from npcs.npccorporations import get_corporation_faction_id
      8 try:
      9     import factionsLoader
     10 except ImportError:
     11     factionsLoader = None
     12 
     13 Faction = namedtuple('Faction', ['nameID',
     14  'descriptionID',
     15  'shortDescriptionID',
     16  'corporationID',
     17  'iconID',
     18  'uniqueName',
     19  'militiaCorporationID',
     20  'sizeFactor',
     21  'solarSystemID',
     22  'memberRaces',
     23  'npcTag'])
     24 
     25 class FactionsLoader(BuiltDataLoader):
     26     __resBuiltFile__ = 'res:/staticData/factions.fsdbinary'
     27     __clientAutobuildBuiltFile__ = 'eve/autobuild/staticData/client/factions.fsdbinary'
     28     __serverAutobuildBuiltFile__ = 'eve/autobuild/staticData/server/factions.fsdbinary'
     29     __loader__ = factionsLoader
     30 
     31 
     32 def get_factions():
     33     return FactionsLoader.GetData()
     34 
     35 
     36 def get_faction_data(faction_id):
     37     return get_factions()[faction_id]
     38 
     39 
     40 def get_faction(faction_id):
     41     faction = get_factions()[faction_id]
     42     return Faction(faction.nameID, faction.descriptionID, faction.shortDescriptionID, faction.corporationID or ownerNone, faction.iconID, faction.uniqueName, faction.militiaCorporationID, faction.sizeFactor, faction.solarSystemID, faction.memberRaces, faction.npcTag)
     43 
     44 
     45 def iter_factions():
     46     for faction_id in iter_faction_ids():
     47         yield (faction_id, get_faction(faction_id))
     48 
     49 
     50 def iter_faction_ids():
     51     for faction_id in get_factions().iterkeys():
     52         yield faction_id
     53 
     54 
     55 def get_faction_ids():
     56     return get_factions().keys()
     57 
     58 
     59 def faction_exists(faction_id):
     60     return faction_id in get_factions()
     61 
     62 
     63 def get_faction_races(faction_id):
     64     faction = get_faction(faction_id)
     65     return faction.memberRaces
     66 
     67 
     68 @Memoize
     69 def get_station_count(faction_id):
     70     return len({station.stationID for station in cfg.stations if get_corporation_faction_id(station.ownerID) == faction_id})
     71 
     72 
     73 @Memoize
     74 def get_station_system_count(faction_id):
     75     return len({station.solarSystemID for station in cfg.stations if get_corporation_faction_id(station.ownerID) == faction_id})
     76 
     77 
     78 def get_faction_name(faction_id, faction = None, language_id = None, important = False):
     79     if not faction:
     80         faction = get_faction(faction_id)
     81     return _get_message(faction.nameID, language_id, important)
     82 
     83 
     84 def get_faction_description(faction_id, faction = None):
     85     if not faction:
     86         faction = get_faction(faction_id)
     87     return _get_message(faction.descriptionID)
     88 
     89 
     90 def get_faction_short_description(faction_id, faction = None):
     91     if not faction:
     92         faction = get_faction(faction_id)
     93     if faction.shortDescriptionID:
     94         return _get_message(faction.shortDescriptionID)
     95 
     96 
     97 def get_faction_logo_flat(faction_id):
     98     import eveicon
     99     if not faction_id:
    100         return
    101     logo_id = get_faction_data(faction_id).flatLogo
    102     if logo_id:
    103         return eveicon.get(logo_id)
    104 
    105 
    106 def get_faction_logo_flat_with_name(faction_id, fallback_without_name = True):
    107     import eveicon
    108     if not faction_id:
    109         return
    110     faction_data = get_faction_data(faction_id)
    111     logo_id = faction_data.flatLogoWithName or (faction_data.flatLogo if fallback_without_name else None)
    112     if logo_id:
    113         return eveicon.get(logo_id)
    114 
    115 
    116 def _get_message(message_id, language_id = None, important = False):
    117     import localization
    118     if important and boot.role == 'client':
    119         return localization.GetImportantByMessageID(message_id)
    120     return localization.GetByMessageID(message_id, language_id)