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

corruptionSuppressionSvc.py (8787B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\corruptionSuppressionSvc.py
      2 from caching import Memoize
      3 from carbon.common.script.sys.service import Service
      4 from eve.client.script.ui.services.insurgency.messenger import InsurgencyMessenger, SystemData
      5 from fractions import Fraction
      6 from fwwarzone.heroNotifications import FullSuppression, FullCorruption
      7 from pirateinsurgency.client.utils import CalculateCurrentStageFromFraction
      8 
      9 class CorruptionSuppressionSvc(Service):
     10     __displayname__ = 'CorruptionSuppression svc'
     11     __guid__ = 'svc.corruptionSuppressionSvc'
     12     __notifyevents__ = ['OnSessionChanged']
     13     __startupdependencies__ = ['publicGatewaySvc', 'heroNotification']
     14 
     15     def __init__(self):
     16         super(CorruptionSuppressionSvc, self).__init__()
     17 
     18     def Run(self, memStream = None):
     19         super(CorruptionSuppressionSvc, self).Run(memStream=memStream)
     20         self.messenger = InsurgencyMessenger(self.publicGatewaySvc)
     21         self.localCorruptionValue = None
     22         self.localSuppressionValue = None
     23         self.messenger.SubscribeToCorruptionValueUpdates(self._OnCorruptionValueChanged)
     24         self.messenger.SubscribeToSuppressionValueUpdates(self._OnSuppressionValueChanged)
     25 
     26     def OnSessionChanged(self, isRemove, sess, change):
     27         if 'solarsystemid2' in change:
     28             _oldSolarSystemID, newSolarSystemID = change['solarsystemid2']
     29             self.localCorruptionValue = None
     30             self.localSuppressionValue = None
     31             self.GetSystemCorruption.clear_memoized(self, newSolarSystemID)
     32             self.GetSystemSuppression.clear_memoized(self, newSolarSystemID)
     33 
     34     def IsCurrentSystemFullyCorrupted(self):
     35         currentStage = self.GetSystemCorruptionStage(session.solarsystemid2)
     36         thresholds = self.GetCorruptionStages()
     37         if currentStage is None or thresholds is None:
     38             return False
     39         return currentStage >= len(thresholds) - 1
     40 
     41     @Memoize(720)
     42     def GetCorruptionStages(self):
     43         return self.messenger.GetCorruptionStages()
     44 
     45     @Memoize(720)
     46     def GetSuppressionStages(self):
     47         return self.messenger.GetSuppressionStages()
     48 
     49     def GetCurrentSystemCorruptionStage(self):
     50         currentStageData = self.GetCurrentSystemCorruption_Cached()
     51         if currentStageData is None:
     52             return
     53         currentStage = currentStageData.stage
     54         return currentStage
     55 
     56     def GetSystemCorruptionStage(self, systemID):
     57         currentStageData = self.GetSystemCorruption(systemID)
     58         if currentStageData is None:
     59             return
     60         currentStage = currentStageData.stage
     61         return currentStage
     62 
     63     def GetCurrentSystemCorruption_Cached(self):
     64         if self.localCorruptionValue is not None:
     65             return self.localCorruptionValue
     66         systemID = session.solarsystemid2
     67         data = self.GetSystemCorruption(systemID)
     68         self.localCorruptionValue = data
     69         return data
     70 
     71     @Memoize(5)
     72     def GetSystemCorruption(self, systemID):
     73         data = self.messenger.GetCorruption(systemID)
     74         if systemID == session.solarsystemid2:
     75             self.localCorruptionValue = data
     76         return data
     77 
     78     def GetCurrentSystemSuppressionStage(self):
     79         currentStageData = self.GetCurrentSystemSuppression_Cached()
     80         if currentStageData is None:
     81             return
     82         currentStage = currentStageData.stage
     83         return currentStage
     84 
     85     def GetSystemSuppressionStage(self, systemID):
     86         currentStageData = self.GetSystemSuppression(systemID)
     87         if currentStageData is None:
     88             return
     89         currentStage = currentStageData.stage
     90         return currentStage
     91 
     92     def GetCurrentSystemSuppression_Cached(self):
     93         if self.localSuppressionValue is not None:
     94             return self.localSuppressionValue
     95         systemID = session.solarsystemid2
     96         data = self.GetSystemSuppression(systemID)
     97         self.localSuppressionValue = data
     98         return data
     99 
    100     @Memoize(5)
    101     def GetSystemSuppression(self, systemID):
    102         data = self.messenger.GetSuppression(systemID)
    103         if systemID == session.solarsystemid2:
    104             self.localSuppressionValue = data
    105         return data
    106 
    107     def _OnCorruptionValueChanged(self, systemID, value):
    108         if systemID != session.solarsystemid2:
    109             return
    110         newStage = CalculateCurrentStageFromFraction(value.newNumerator, value.newDenominator, self.GetCorruptionStages())
    111         self._UpdateLocalCorruptionCacheEntry(systemID, value.newNumerator, value.newDenominator, newStage, value.vanguardInstigated)
    112         if systemID == session.solarsystemid2:
    113             numerator = value.newNumerator
    114             denominator = value.newDenominator
    115             if numerator and numerator == denominator:
    116                 self.ShowCorruptionHeroNotification(systemID)
    117         sm.ScatterEvent('OnCorruptionValueChanged_Local', systemID, self.localCorruptionValue)
    118 
    119     def _UpdateLocalCorruptionCacheEntry(self, systemID, newNumerator, newDenominator, newStage, vanguardInitiated = False):
    120         if self.localCorruptionValue is not None:
    121             if vanguardInitiated:
    122                 currentNumerator = self.localCorruptionValue.numerator
    123                 currentDenominator = self.localCorruptionValue.denominator
    124                 currentVanguardNumerator = self.localCorruptionValue.vanguardNumerator
    125                 currentVanguardDenominator = self.localCorruptionValue.vanguardDenominator
    126                 diffFraction = Fraction(newNumerator, newDenominator) - Fraction(currentNumerator, currentDenominator)
    127                 vanguardFraction = Fraction(currentVanguardNumerator, currentVanguardDenominator) + diffFraction
    128                 self.localCorruptionValue.vanguardNumerator = vanguardFraction.numerator
    129                 self.localCorruptionValue.vanguardDenominator = vanguardFraction.denominator
    130             self.localCorruptionValue.numerator = newNumerator
    131             self.localCorruptionValue.denominator = newDenominator
    132             self.localCorruptionValue.stage = newStage
    133         else:
    134             systemData = SystemData(systemID, newNumerator, newDenominator, newStage, vanguard_numerator=0, vanguard_denominator=0)
    135             self.localCorruptionValue = systemData
    136 
    137     def _OnSuppressionValueChanged(self, systemID, value):
    138         if systemID != session.solarsystemid2:
    139             return
    140         newStage = CalculateCurrentStageFromFraction(value.newNumerator, value.newDenominator, self.GetSuppressionStages())
    141         self._UpdateLocalSuppressionCacheEntry(systemID, value.newNumerator, value.newDenominator, newStage, value.vanguardInstigated)
    142         if systemID == session.solarsystemid2:
    143             numerator = value.newNumerator
    144             denominator = value.newDenominator
    145             if numerator and numerator == denominator:
    146                 self.ShowSuppressionHeroNotification(systemID)
    147         sm.ScatterEvent('OnSuppressionValueChanged_Local', systemID, self.localSuppressionValue)
    148 
    149     def _UpdateLocalSuppressionCacheEntry(self, systemID, newNumerator, newDenominator, newStage, vanguardInitiated = False):
    150         if self.localSuppressionValue is not None:
    151             if vanguardInitiated:
    152                 currentNumerator = self.localSuppressionValue.numerator
    153                 currentDenominator = self.localSuppressionValue.denominator
    154                 currentVanguardNumerator = self.localSuppressionValue.vanguardNumerator
    155                 currentVanguardDenominator = self.localSuppressionValue.vanguardDenominator
    156                 diffFraction = Fraction(newNumerator, newDenominator) - Fraction(currentNumerator, currentDenominator)
    157                 vanguardFraction = Fraction(currentVanguardNumerator, currentVanguardDenominator) + diffFraction
    158                 self.localSuppressionValue.vanguardNumerator = vanguardFraction.numerator
    159                 self.localSuppressionValue.vanguardDenominator = vanguardFraction.denominator
    160             self.localSuppressionValue.numerator = newNumerator
    161             self.localSuppressionValue.denominator = newDenominator
    162             self.localSuppressionValue.stage = newStage
    163         else:
    164             systemData = SystemData(systemID, newNumerator, newDenominator, newStage, vanguard_numerator=0, vanguard_denominator=0)
    165             self.localSuppressionValue = systemData
    166 
    167     def ShowCorruptionHeroNotification(self, systemID):
    168 
    169         def PlayVideo(parent, cancellation_token):
    170             FullCorruption(parent, systemID)
    171 
    172         self.heroNotification.play(PlayVideo, 0)
    173 
    174     def ShowSuppressionHeroNotification(self, systemID):
    175 
    176         def PlayVideo(parent, cancellation_token):
    177             FullSuppression(parent, systemID)
    178 
    179         self.heroNotification.play(PlayVideo, 0)