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

certificateSvc.py (7980B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\certificateSvc.py
      2 from collections import defaultdict
      3 import localization
      4 import log
      5 from carbon.common.script.sys.service import Service
      6 from skills.certificates.certificateConst import CERTIFICATE_GRADES_LABELS
      7 
      8 class Certificate(object):
      9 
     10     def __init__(self, certificateID, groupID, nameID, descriptionID, skillTypes, recommendedFor):
     11         self.skillSvc = sm.GetService('skills')
     12         self.certificateID = certificateID
     13         self.groupID = groupID
     14         self.nameID = nameID
     15         self.descriptionID = descriptionID
     16         self._SetupSkills(skillTypes)
     17         self.recommendedFor = recommendedFor
     18         self.currentLevel = None
     19 
     20     def __str__(self):
     21         return 'Certificate: %s (%d)' % (self.GetName(), self.certificateID)
     22 
     23     def _SetupSkills(self, skillTypes):
     24         skills = {}
     25         for skillTypeID, level in skillTypes.iteritems():
     26             skills[skillTypeID] = {}
     27             skills[skillTypeID][1] = level.basic
     28             skills[skillTypeID][2] = level.standard
     29             skills[skillTypeID][3] = level.improved
     30             skills[skillTypeID][4] = level.advanced
     31             skills[skillTypeID][5] = level.elite
     32 
     33         self.skills = skills
     34 
     35     def GetName(self):
     36         return localization.GetByMessageID(self.nameID)
     37 
     38     def GetDescription(self):
     39         return localization.GetByMessageID(self.descriptionID)
     40 
     41     def GetLabel(self, level):
     42         return localization.GetByLabel('UI/InfoWindow/CertificateNameWithProgress', certificateName=self.GetName(), skillsTrained=self.CountCompletedSkills(level), skillsTotal=self.CountSkills(level))
     43 
     44     def GetSkills(self):
     45         return self.skills
     46 
     47     def SkillsByTypeAndLevel(self, level):
     48         return [ (typeID, levelData[level]) for typeID, levelData in self.skills.iteritems() if levelData[level] > 0 ]
     49 
     50     def GetLevel(self):
     51         if self.currentLevel is None:
     52             self.currentLevel = 0
     53             for i in xrange(5, 0, -1):
     54                 for typeID in self.skills.iterkeys():
     55                     charLevel = self.skillSvc.MySkillLevel(typeID)
     56                     reqLevel = self.skills[typeID][i]
     57                     if reqLevel > 0 and charLevel < reqLevel:
     58                         break
     59                 else:
     60                     self.currentLevel = i
     61                     break
     62 
     63         return self.currentLevel
     64 
     65     def HasAllSkills(self, level):
     66         for typeID, levels in self.skills.iteritems():
     67             if levels[level] > 0 and not self.skillSvc.HasSkill(typeID):
     68                 return False
     69 
     70         return True
     71 
     72     def CountCompletedSkills(self, level):
     73         count = 0
     74         for typeID, levels in self.skills.iteritems():
     75             if levels[level] > 0 and self.skillSvc.MySkillLevel(typeID) >= levels[level]:
     76                 count += 1
     77 
     78         return count
     79 
     80     def CountSkills(self, level):
     81         count = 0
     82         for typeID, levels in self.skills.iteritems():
     83             if levels[level] > 0:
     84                 count += 1
     85 
     86         return count
     87 
     88     def ClearCache(self):
     89         self.currentLevel = None
     90 
     91 
     92 class Certificates(Service):
     93     __notifyevents__ = ['OnSkillsChanged', 'OnSessionReset']
     94     __guid__ = 'svc.certificates'
     95     __servicename__ = 'certificates'
     96     __displayname__ = 'Certificate Service'
     97     __startupdependencies__ = ['settings', 'godma']
     98 
     99     def __init__(self):
    100         super(Certificates, self).__init__()
    101         self.certificates = {}
    102         try:
    103             for key, value in cfg.certificates['certificates'].iteritems():
    104                 if hasattr(value, 'recommendedFor'):
    105                     recommendedFor = value.recommendedFor
    106                 else:
    107                     recommendedFor = []
    108                 self.certificates[key] = Certificate(key, value.groupID, value.nameID, value.descriptionID, value.skillTypes, recommendedFor)
    109 
    110         except KeyError:
    111             log.LogException()
    112 
    113     def OnSessionReset(self):
    114         self.OnSkillsChanged()
    115 
    116     def OnSkillsChanged(self, *args):
    117         for certificate in self.certificates.itervalues():
    118             certificate.ClearCache()
    119 
    120     def GetCertificate(self, certificateID):
    121         return self.certificates[certificateID]
    122 
    123     def GetAllCertificatesByCategoryID(self):
    124         return self._GroupByCategoryID(self.certificates.values())
    125 
    126     def GetMyCertificates(self):
    127         myCertificates = {}
    128         for certificateID, certificate in self.certificates.iteritems():
    129             if certificate.GetLevel() > 0:
    130                 myCertificates[certificateID] = certificate
    131 
    132         return myCertificates
    133 
    134     def GetMyCertificatesByCategoryID(self):
    135         certs = self.GetMyCertificates().values()
    136         return self._GroupByCategoryID(certs)
    137 
    138     def _GroupByCategoryID(self, certificates):
    139         ret = defaultdict(list)
    140         for cert in certificates:
    141             ret[cert.groupID].append(cert)
    142 
    143         return ret
    144 
    145     def GetCertificatesByGroupID(self, groupID):
    146         return [ cert for cert in self.certificates.values() if cert.groupID == groupID ]
    147 
    148     def GetCurrCharMasteryLevel(self, shipTypeID):
    149         for i in xrange(5, 0, -1):
    150             certificates = self.GetCertificatesForShipByMasteryLevel(shipTypeID, i)
    151             levels = set()
    152             for certificate in certificates:
    153                 levels.add(certificate.GetLevel())
    154 
    155             for level in levels:
    156                 if level < i:
    157                     break
    158                 else:
    159                     return i
    160 
    161         return 0
    162 
    163     def GetMasteryIconForLevel(self, masteryLevel):
    164         if masteryLevel == 0:
    165             return 'res:/UI/Texture/Classes/Mastery/masterySmall0.png'
    166         if masteryLevel == 1:
    167             return 'res:/UI/Texture/Classes/Mastery/masterySmall1.png'
    168         if masteryLevel == 2:
    169             return 'res:/UI/Texture/Classes/Mastery/masterySmall2.png'
    170         if masteryLevel == 3:
    171             return 'res:/UI/Texture/Classes/Mastery/masterySmall3.png'
    172         if masteryLevel == 4:
    173             return 'res:/UI/Texture/Classes/Mastery/masterySmall4.png'
    174         if masteryLevel == 5:
    175             return 'res:/UI/Texture/Classes/Mastery/masterySmall5.png'
    176 
    177     def GetCertificatesForShipByMasteryLevel(self, typeID, masteryLevel):
    178         if typeID in cfg.certificates['masteries'] and masteryLevel > 0:
    179             certificates = cfg.certificates['masteries'][typeID][masteryLevel - 1]
    180             return [ self.certificates[certificateID] for certificateID in certificates ]
    181         return []
    182 
    183     def GetSkillsRequiredForMasteryLevel(self, typeID, masteryLevel):
    184         skills = {}
    185         for certificate in self.GetCertificatesForShipByMasteryLevel(typeID, masteryLevel):
    186             for skillID, level in certificate.SkillsByTypeAndLevel(masteryLevel):
    187                 skills[skillID] = max(skills.get(skillID, 0), level)
    188 
    189         return skills
    190 
    191     def GetShipTrainingTimeForMasteryLevel(self, typeID, masteryLevel):
    192         skills = self.GetSkillsRequiredForMasteryLevel(typeID, masteryLevel)
    193         return sm.GetService('skills').GetTrainingTimeForSkills(skills)
    194 
    195     def GetCertificateTrainingTimeForMasteryLevel(self, certificateID, masteryLevel):
    196         certificate = self.certificates[certificateID]
    197         skills = {}
    198         for skillID, level in certificate.SkillsByTypeAndLevel(masteryLevel):
    199             skills[skillID] = max(skills.get(skillID, 0), level)
    200 
    201         return sm.GetService('skills').GetTrainingTimeForSkills(skills)
    202 
    203     def GetCertificateRecommendationsFromCertificateID(self, certificateID):
    204         return self.certificates[certificateID].recommendedFor
    205 
    206     def GetCertificateLabel(self, certificateID):
    207         certificate = self.certificates[certificateID]
    208         levelPath = CERTIFICATE_GRADES_LABELS.get(certificate.GetLevel())
    209         level = localization.GetByLabel(levelPath)
    210         return (certificate.GetName(), level, certificate.GetDescription())