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

paperDollCommonFunctions.py (2413B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\common\script\paperDoll\paperDollCommonFunctions.py
      2 import logging
      3 import re
      4 import yaml
      5 import blue
      6 import log
      7 import stackless
      8 import telemetry
      9 logger = logging.getLogger(__name__)
     10 
     11 def WaitForAll(iterable, condition):
     12     while any(map(condition, iterable)):
     13         Yield(frameNice=False)
     14 
     15     BeFrameNice()
     16 
     17 
     18 def Yield(frameNice = True, ms = 15):
     19     try:
     20         if not stackless.current.is_main:
     21             blue.synchro.Yield()
     22             if frameNice:
     23                 return BeFrameNice(ms)
     24         else:
     25             return False
     26     except:
     27         raise
     28 
     29 
     30 def BeFrameNice(ms = 15):
     31     try:
     32         if not stackless.current.is_main:
     33             if ms < 1.0:
     34                 ms = 1.0
     35             while blue.os.GetWallclockTimeNow() - blue.os.GetWallclockTime() > ms * 10000:
     36                 blue.synchro.Yield()
     37                 ms *= 1.02
     38 
     39             return True
     40         return False
     41     except:
     42         raise
     43 
     44 
     45 def AddToDictList(d, key, item):
     46     l = d.get(key, [])
     47     l.append(item)
     48     d[key] = l
     49 
     50 
     51 def GetFromDictList(d, key):
     52     l = d.get(key, [])
     53     if type(l) != list:
     54         return []
     55     return l
     56 
     57 
     58 @telemetry.ZONE_FUNCTION
     59 def NastyYamlLoad(yamlStr):
     60     yamlStr = _replace_nasty_paper_doll_references(yamlStr)
     61     instance = None
     62     try:
     63         blue.statistics.EnterZone('yaml.load')
     64         instance = yaml.load(yamlStr, Loader=yaml.CLoader)
     65     except Exception:
     66         log.LogError('PaperDoll: Yaml parsing failed for data', yamlStr)
     67     finally:
     68         blue.statistics.LeaveZone()
     69 
     70     return instance
     71 
     72 
     73 def _replace_nasty_paper_doll_references(yaml_text):
     74     global _nasty_paper_doll_reference_pattern
     75     if _nasty_paper_doll_reference_pattern is None:
     76         _nasty_paper_doll_reference_pattern = re.compile('!!python/object:paperDoll\\.(\\w+)')
     77     replacement_template = '!!python/object:{}'
     78     return _nasty_paper_doll_reference_pattern.sub(lambda match: replacement_template.format(_get_nice_paper_doll_reference(match.group(1))), yaml_text)
     79 
     80 
     81 _nasty_paper_doll_reference_pattern = None
     82 
     83 def _get_nice_paper_doll_reference(nasty_name):
     84     return _nasty_paper_doll_class_map[nasty_name]
     85 
     86 
     87 _nasty_paper_doll_class_map = {'AvatarPartMetaData': 'eve.common.script.paperDoll.yamlPreloader.AvatarPartMetaData',
     88  'ProjectedDecal': 'eve.client.script.paperDoll.projectedDecals.ProjectedDecal'}