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

util.py (4068B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\expertSystems\client\util.py
      2 import functools
      3 import evetypes
      4 from carbon.common.script.sys.serviceManager import ServiceManager
      5 from carbonui.uicore import uicore
      6 from eveexceptions import UserError
      7 from journey.tracker import get_journey_id
      8 import localization.util
      9 from logmodule import LogException
     10 from expertSystems import get_expert_system
     11 from expertSystems.client.service import ExpertSystemService
     12 from expertSystems.client.eventlogging.eventLoggers import event_logger
     13 from skills.client.util import get_skill_service, buy_and_train_skills
     14 
     15 def get_active_expert_systems_unlocking_type(type_id):
     16     skill_service = get_skill_service()
     17     expert_system_service = ExpertSystemService.instance()
     18     relevant_expert_systems = []
     19     for expert_system_id in expert_system_service.GetMyExpertSystems():
     20         expert_system = get_expert_system(expert_system_id)
     21         required_skills = skill_service.GetRequiredSkills(type_id)
     22         for skill_id, required_level in required_skills.iteritems():
     23             trained_level = skill_service.GetMyLevel(skill_id)
     24             provided_level = expert_system.skills.get(skill_id, 0)
     25             if required_level > provided_level or trained_level >= provided_level:
     26                 break
     27         else:
     28             relevant_expert_systems.append(expert_system_id)
     29 
     30     return relevant_expert_systems
     31 
     32 
     33 def is_unlocked_with_expert_system(type_id):
     34     return get_skill_service().IsUnlockedWithExpertSystem(type_id)
     35 
     36 
     37 def expert_system_benefits_player(type_id):
     38     skill_service = get_skill_service()
     39     expert_system = get_expert_system(type_id)
     40     for skill_type_id in expert_system.skills:
     41         skill = skill_service.GetSkill(skill_type_id)
     42         if not skill or skill.trainedSkillLevel < expert_system.skills[skill_type_id]:
     43             return True
     44 
     45     return False
     46 
     47 
     48 def browse_expert_systems(expert_system_type_id = None):
     49     try:
     50         sm = ServiceManager.Instance()
     51         typeIds = [expert_system_type_id] if expert_system_type_id else None
     52         sm.GetService('vgsService').OpenStore(categoryTag='expert system', typeIds=typeIds)
     53     except Exception:
     54         LogException('Failed to open new eden store to view expert system')
     55         raise UserError('FailedToOpenExpertSystemsInStore')
     56 
     57     event_logger.log_store_button_clicked()
     58 
     59 
     60 def get_active_expert_systems_providing_skill(skill_type_id):
     61     return [ expert_system_type_id for expert_system_type_id in ExpertSystemService.instance().GetMyExpertSystems() if does_expert_system_provide_skill(expert_system_type_id, skill_type_id) ]
     62 
     63 
     64 def does_expert_system_provide_skill(expert_system_type_id, skill_type_id):
     65     return any((granted_skill_type_id == skill_type_id for granted_skill_type_id in get_expert_system(expert_system_type_id).skills))
     66 
     67 
     68 def get_sorted_expert_system_provided_skills(expert_system_type_id):
     69     expert_system = get_expert_system(expert_system_type_id)
     70     skill_service = get_skill_service()
     71     skills = []
     72     for skill_type_id, level in expert_system.skills.iteritems():
     73         skill = skill_service.GetSkill(skill_type_id)
     74         if skill is None or not skill.trainedSkillLevel:
     75             order = 0
     76         elif skill.trainedSkillLevel < level:
     77             order = 1
     78         else:
     79             order = 2
     80         name = get_localized_sort_key(evetypes.GetName(skill_type_id))
     81         skills.append(((order, name), skill_type_id))
     82 
     83     return [ skill_type_id for _, skill_type_id in sorted(skills, key=lambda x: x[0]) ]
     84 
     85 
     86 def get_localized_sort_key(text):
     87     localized_cmp = localization.util.GetSortFunc(localization.util.GetLanguageID())
     88     localized_key = functools.cmp_to_key(localized_cmp)
     89     return localized_key(text)
     90 
     91 
     92 def sorted_by_name(expert_systems):
     93     return sorted(expert_systems, key=lambda expert_system: get_localized_sort_key(expert_system.name))
     94 
     95 
     96 def train_expert_system_skills(expert_system_type_id):
     97     skills = get_expert_system(expert_system_type_id).skills
     98     buy_and_train_skills(skills)