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)