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)