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

util.py (3966B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\characterskills\util.py
      2 import collections
      3 import math
      4 import characterskills
      5 from dogma.const import attributeSkillTimeConstant
      6 from inventorycommon.const import categorySkill, groupFakeSkills
      7 DIVCONSTANT = math.log(2) * 2.5
      8 
      9 def GetLevelProgress(skillPoints, skillTimeConstant):
     10     level = GetSkillLevelRaw(skillPoints, skillTimeConstant)
     11     if level >= characterskills.MAX_SKILL_LEVEL:
     12         return 0.0
     13     baseLevelPoints = GetSPForLevelRaw(skillTimeConstant, level)
     14     nextLevelPoints = GetSPForLevelRaw(skillTimeConstant, level + 1)
     15     return (skillPoints - baseLevelPoints) / float(nextLevelPoints - baseLevelPoints)
     16 
     17 
     18 def GetSkillLevelRaw(skillPoints, skillTimeConstant):
     19     baseSkillLevelConstant = float(skillTimeConstant) * characterskills.SKILL_POINT_MULTIPLIER
     20     if baseSkillLevelConstant > skillPoints or baseSkillLevelConstant == 0:
     21         return 0
     22     level = 1 + int(math.log(skillPoints / baseSkillLevelConstant) / DIVCONSTANT)
     23     return min(level, characterskills.MAX_SKILL_LEVEL)
     24 
     25 
     26 def GetSkillPointsPerMinute(primaryAttributeValue, secondaryAttributeValue):
     27     return primaryAttributeValue + secondaryAttributeValue / 2.0
     28 
     29 
     30 def GetSPForAllLevels(skillTimeConstant):
     31     levelList = []
     32     for i in range(characterskills.MAX_SKILL_LEVEL + 1):
     33         levelList.append(GetSPForLevelRaw(skillTimeConstant, i))
     34 
     35     return levelList
     36 
     37 
     38 def GetSPForLevelRaw(skillTimeConstant, level):
     39     if level <= 0:
     40         return 0
     41     if level > characterskills.MAX_SKILL_LEVEL:
     42         level = characterskills.MAX_SKILL_LEVEL
     43     preMultipliedSkillPoints = float(skillTimeConstant) * characterskills.SKILL_POINT_MULTIPLIER
     44     return int(math.ceil(preMultipliedSkillPoints * 2 ** (2.5 * (level - 1))))
     45 
     46 
     47 def GetAllSkillGroups():
     48     import evetypes
     49     all_groups = evetypes.GetGroupIDsByCategory(categorySkill)
     50     if groupFakeSkills in all_groups:
     51         all_groups.remove(groupFakeSkills)
     52     return all_groups
     53 
     54 
     55 def GetSkillTimeConstant(typeID):
     56     import dogma.data as dogma_data
     57     return dogma_data.get_type_attribute(typeID, attributeSkillTimeConstant)
     58 
     59 
     60 def GetProgressRatioForSkillLevels(requiredSkills):
     61     spTotal = GetTotalSkillPoints(requiredSkills)
     62     if not spTotal:
     63         return 0
     64     else:
     65         spTrained = GetTrainedSkillPoints(requiredSkills)
     66         return float(spTrained) / spTotal
     67 
     68 
     69 def GetTotalSkillPoints(requiredSkills):
     70     return sum((GetSPForLevelRaw(GetSkillTimeConstant(typeID), level) for typeID, level in requiredSkills.iteritems()))
     71 
     72 
     73 def GetTrainedSkillPoints(requiredSkills):
     74     spTrained = 0
     75     for typeID, level in requiredSkills.iteritems():
     76         spRequiredForLevel = GetSPForLevelRaw(GetSkillTimeConstant(typeID), level)
     77         spTrained += min(spRequiredForLevel, sm.GetService('skillqueue').GetEstimatedSkillPointsTrained(typeID))
     78 
     79     return spTrained
     80 
     81 
     82 def GetInTrainingSkillPoints(requiredSkills):
     83     inQueueSkills = sm.GetService('skillqueue').GetSkillLevelsInQueue()
     84     sp = 0
     85     for typeID, level in requiredSkills.iteritems():
     86         if typeID not in inQueueSkills:
     87             continue
     88         level = min(level, inQueueSkills[typeID])
     89         spRequiredForLevel = GetSPForLevelRaw(GetSkillTimeConstant(typeID), level)
     90         trained = min(spRequiredForLevel, sm.GetService('skillqueue').GetEstimatedSkillPointsTrained(typeID))
     91         sp += spRequiredForLevel - trained
     92 
     93     return sp
     94 
     95 
     96 def GetInTrainingRatioForSkillLevels(requiredSkills):
     97     spTotal = GetTotalSkillPoints(requiredSkills)
     98     if not spTotal:
     99         return 0
    100     else:
    101         spInTraining = GetInTrainingSkillPoints(requiredSkills)
    102         return float(spInTraining) / spTotal
    103 
    104 
    105 def GetSkillRequirementsDictFromSkillLevels(skillLevels):
    106     requiredSkills = collections.defaultdict(int)
    107     for typeID, level in skillLevels:
    108         requiredSkills[typeID] = max(level, requiredSkills[typeID])
    109 
    110     return requiredSkills