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

itemDamage.py (3957B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\tooltip\itemDamage.py
      2 from eve.client.script.ui import eveColor
      3 from localization.formatters.timeIntervalFormatters import GetByLabel
      4 import dogma.const as dogmaConst
      5 from dogma.data import get_type_attribute_or_default
      6 import uthread2
      7 from carbonui import Align, TextColor
      8 from eve.client.script.ui.control.eveLoadingWheel import LoadingWheel
      9 from inventorycommon.util import MAX_NUM_CRYSTAL_DAMAGE
     10 CRYSTAL_LOADING_DELAY_SECONDS = 1.0
     11 
     12 def AddItemDamage(tooltipPanel, item):
     13     if _ShouldShowCrystalDamage(item):
     14         _AddCrystalDamage(tooltipPanel, item)
     15 
     16 
     17 def _AddCrystalDamage(tooltipPanel, item):
     18     tracker = sm.GetService('inv').crystalDamageTracker
     19     cachedDamage = tracker.GetCachedCrystalDamage(item.itemID)
     20     damageLabel = tooltipPanel.AddTextDetailsLabel(color=TextColor.SECONDARY, colSpan=tooltipPanel.columns)
     21     tooltipPanel.FillRow()
     22     if cachedDamage == tracker.NOT_CACHED:
     23         damageLabel.text = GetByLabel('UI/Inventory/LoadingCrystalDamage')
     24         damageLabel.left = 20
     25         loadingWheel = LoadingWheel(parent=damageLabel.parent, align=Align.CENTERLEFT, pos=(0, 0, 16, 16))
     26         uthread2.call_after_wallclocktime_delay(ShowDamage, CRYSTAL_LOADING_DELAY_SECONDS, damageLabel, loadingWheel, item)
     27     else:
     28         text, color = _GetDamageTextAndColor(cachedDamage)
     29         damageLabel.text = text
     30         damageLabel.SetRGBA(*color)
     31 
     32 
     33 def _ShouldShowCrystalDamage(item):
     34     if item.ownerID != session.charid:
     35         return False
     36     if not _DoesTakeCrystalDamage(item.typeID):
     37         return False
     38     if item.quantity > 0:
     39         return False
     40     return True
     41 
     42 
     43 def _DoesTakeCrystalDamage(typeID):
     44     if get_type_attribute_or_default(typeID, dogmaConst.attributeCrystalsGetDamaged):
     45         return True
     46     return False
     47 
     48 
     49 def _GetDamageTextAndColor(damage):
     50     if not damage:
     51         return (GetByLabel('UI/Inventory/UndamagedCrystal'), eveColor.SUCCESS_GREEN)
     52     percentDamage = int(round(damage * 100))
     53     text = GetByLabel('UI/Inventory/EstimatedCrystalDamage', damage=percentDamage)
     54     if percentDamage < 40:
     55         color = eveColor.SAND_YELLOW
     56     else:
     57         color = eveColor.CHERRY_RED
     58     return (text, color)
     59 
     60 
     61 def ShowDamage(damageLabel, loadingWheel, item):
     62     if damageLabel.destroyed:
     63         return
     64     dmgTracker = sm.GetService('inv').crystalDamageTracker
     65     cachedDamage = dmgTracker.GetCachedCrystalDamage(item.itemID)
     66     if cachedDamage != dmgTracker.NOT_CACHED:
     67         text, color = _GetDamageTextAndColor(cachedDamage)
     68         damageLabel.text = (text,)
     69         damageLabel.SetRGBA(*color)
     70         return
     71     _PrimeCrystalsInLocation(item, dmgTracker)
     72     loadingWheel.Hide()
     73     damageLabel.left = 0
     74     cachedDamage = dmgTracker.GetCachedCrystalDamage(item.itemID)
     75     if cachedDamage == dmgTracker.NOT_CACHED:
     76         damageLabel.text = GetByLabel('UI/Inventory/CrystalDamageUnknown')
     77     else:
     78         text, color = _GetDamageTextAndColor(cachedDamage)
     79         damageLabel.text = text
     80         damageLabel.SetRGBA(*color)
     81 
     82 
     83 def _PrimeCrystalsInLocation(item, crystalDamageTracker):
     84     maxNum = MAX_NUM_CRYSTAL_DAMAGE
     85     invCacheSvc = sm.GetService('invCache')
     86     if item.flagID == const.flagHangar:
     87         inv = invCacheSvc.GetInventory(const.containerHangar)
     88     else:
     89         inv = invCacheSvc.GetInventoryFromId(item.locationID, True)
     90     if inv is None:
     91         return
     92     crystalsToPrime = {item.itemID}
     93     for eachItem in inv.List(flag=item.flagID):
     94         if len(crystalsToPrime) >= maxNum:
     95             break
     96         if not _ShouldShowCrystalDamage(eachItem):
     97             continue
     98         cachedDamage = crystalDamageTracker.GetCachedCrystalDamage(eachItem.itemID)
     99         if cachedDamage == crystalDamageTracker.NOT_CACHED:
    100             crystalsToPrime.add(eachItem.itemID)
    101 
    102     crystalDamageTracker.PrimeCrystals(crystalsToPrime)
    103     return crystalsToPrime