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

util.py (2667B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\crimewatch\util.py
      2 import collections
      3 import hashlib
      4 import math
      5 import evetypes
      6 from eve.common.lib import appConst as const
      7 from inventorycommon.const import categoryDrone, categoryFighter
      8 try:
      9     from carbon.common.script.sys.basesession import FindSessions
     10 except ImportError:
     11     FindSession = lambda x, y: None
     12 
     13 def GetShipIDForCharID(charID):
     14     sessions = FindSessions('charid', [charID])
     15     if sessions:
     16         return sessions[0].shipid
     17 
     18 
     19 def GetAggressorIdFromEffectData(effect_key, effect_info):
     20     category_id = evetypes.GetCategoryID(effect_info.moduleTypeID)
     21     source_owner_id = effect_info.sourceOwnerID
     22     aggressor_id = effect_key.shipID
     23     return GetAggressorId(category_id, source_owner_id, aggressor_id)
     24 
     25 
     26 def GetAggressorId(category_id, source_owner_id, aggressor_id):
     27     if category_id in (categoryDrone, categoryFighter):
     28         ship_id = GetShipIDForCharID(source_owner_id)
     29         if ship_id:
     30             return ship_id
     31     return aggressor_id
     32 
     33 
     34 def CalculateTagRequirementsForSecIncrease(startSecStatus, requestedSecStatus):
     35     if not const.characterSecurityStatusMin < requestedSecStatus <= const.characterSecurityStatusMax:
     36         raise RuntimeError('CalculateTagRequirementsForSecIncrease called with out-of-range requestedSecStatus', requestedSecStatus)
     37     if requestedSecStatus <= startSecStatus:
     38         raise RuntimeError('CalculateTagRequirementsForSecIncrease: requestedSecStatus must be higher than startSecStatus', requestedSecStatus, startSecStatus)
     39     requiredTags = collections.OrderedDict()
     40     secStatus = startSecStatus
     41     while secStatus < requestedSecStatus:
     42         for tagTypeID, (minSecStatus, maxSecStatus) in const.securityLevelsPerTagType.iteritems():
     43             if minSecStatus <= secStatus < maxSecStatus:
     44                 numTagsRequired = int(math.ceil((min(requestedSecStatus, maxSecStatus) - secStatus) / const.securityGainPerTag))
     45                 requiredTags[tagTypeID] = numTagsRequired
     46                 secStatus += numTagsRequired * const.securityGainPerTag
     47                 break
     48         else:
     49             raise RuntimeError('CalculateTagRequirementsForSecIncrease: No tags available for reaching requestedSecStatus', requestedSecStatus, secStatus, startSecStatus)
     50 
     51     return requiredTags
     52 
     53 
     54 def IsItemFreeForAggression(targetGroupID):
     55     return targetGroupID in const.targetGroupsWithNoPenalties
     56 
     57 
     58 def GetKillReportHashValue(kill):
     59     string = '%s%s%s%s' % (kill.victimCharacterID,
     60      kill.finalCharacterID,
     61      kill.victimShipTypeID,
     62      kill.killTime)
     63     return hashlib.sha1(string).hexdigest()