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

controller.py (4375B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\infoPanels\essUI\controller.py
      2 import blue
      3 from carbon.common.lib.const import SEC
      4 from dynamicresources.common.ess.formulas import GetPayout
      5 MAIN_BANK_IDLE = 1
      6 MAIN_BANK_HACKING = 2
      7 RESERVE_BANK_LOCKED = 3
      8 RESERVE_BANK_UNLOCKED = 4
      9 
     10 class InfoPanelESSStateController:
     11 
     12     def __init__(self):
     13         self.dynamicResourceService = sm.GetService('dynamicResourceSvc')
     14         self._cache_manager = sm.RemoteSvc('dynamicResourceCacheMgr')
     15         self._essData = None
     16         self.essSettings = None
     17         self.RefreshEssData()
     18 
     19     def RefreshEssData(self):
     20         self._essData = self.dynamicResourceService.GetESSDataForCurrentSystem()
     21         self.essSettings = self._cache_manager.GetDynamicResourceSettings()
     22         if self._essData and self.essSettings:
     23             return True
     24         else:
     25             return False
     26 
     27     def GetEssData(self):
     28         return self._essData
     29 
     30     def Get(self, field, default = None):
     31         return self._essData.get(field, default)
     32 
     33     def GetSetting(self, field, default = None):
     34         return self.essSettings.get(field, default)
     35 
     36     def GetEnumeratedMainBankState(self):
     37         if self._is_main_bank_in_linked_state():
     38             return MAIN_BANK_HACKING
     39         else:
     40             return MAIN_BANK_IDLE
     41 
     42     def GetEnumeratedReserveBankState(self):
     43         pulsesRemaining = self._essData.get('reserveBankPulsesRemaining')
     44         if pulsesRemaining > 0:
     45             return RESERVE_BANK_UNLOCKED
     46         else:
     47             return RESERVE_BANK_LOCKED
     48 
     49     def GetMainBankLinkState(self):
     50         if not self._is_main_bank_in_linked_state():
     51             return
     52         linkedCharID = self._essData.get('mainBankLink', {}).get('characterID', None)
     53         return {'this_client': linkedCharID == session.charid,
     54          'link': self._essData.get('mainBankLink', {})}
     55 
     56     def GetTimeLeftForMainBankHack(self):
     57         currentSimTime = blue.os.GetSimTime()
     58         linkState = self._essData.get('mainBankLink', {})
     59         completesAt = linkState.get('completesAt', None)
     60         if completesAt is None:
     61             return 0
     62         return max(0, completesAt - currentSimTime)
     63 
     64     def GetProportionOfTimeLeftForMainBankHack(self):
     65         linkState = self._essData.get('mainBankLink', {})
     66         completesAt = linkState.get('completesAt', None)
     67         if completesAt is None:
     68             return 0.0
     69         currentSimTime = blue.os.GetSimTime()
     70         hackTime = float(self.GetSetting('bufferTimeSeconds')) * SEC
     71         return (completesAt - currentSimTime) / hackTime
     72 
     73     def CalculateReserveBankPayouts(self):
     74         windowAccessFactor = self.GetSetting('reserveWindowAccessFactor')
     75         exponentLead = self.GetSetting('reservePayoutExponentLead')
     76         exponentTail = self.GetSetting('reservePayoutExponentTail')
     77         payoutPaddingValue = self.GetSetting('reservePayoutPaddingValue')
     78         reserveBankMaxPayout = self.GetSetting('reserveBankMaxPayout')
     79         pulsesTotal = self.Get('reserveBankPulsesTotal')
     80         pulseValues = [ GetPayout(pulseNumber + 1, pulsesTotal, windowAccessFactor, reserveBankMaxPayout, exponentLead, exponentTail, payoutPaddingValue) for pulseNumber in xrange(pulsesTotal) ]
     81         return pulseValues
     82 
     83     def GetCurrentReserveBankPulsePayout(self):
     84         windowAccessFactor = self.GetSetting('reserveWindowAccessFactor')
     85         exponentLead = self.GetSetting('reservePayoutExponentLead')
     86         exponentTail = self.GetSetting('reservePayoutExponentTail')
     87         payoutPaddingValue = self.GetSetting('reservePayoutPaddingValue')
     88         reserveBankMaxPayout = self.GetSetting('reserveBankMaxPayout')
     89         pulsesRemaining = self.Get('reserveBankPulsesRemaining')
     90         pulsesTotal = self.Get('reserveBankPulsesTotal')
     91         currentPulseNumber = pulsesTotal - pulsesRemaining + 1
     92         amountInBank = self.Get('reserveValue', 0.0)
     93         maxPayoutThisPulse = GetPayout(currentPulseNumber, pulsesTotal, windowAccessFactor, reserveBankMaxPayout, exponentLead, exponentTail, payoutPaddingValue)
     94         return min(maxPayoutThisPulse, amountInBank)
     95 
     96     def _is_main_bank_in_linked_state(self):
     97         linkedChar = self._essData.get('mainBankLink', {}).get('characterID', None)
     98         if linkedChar:
     99             return True
    100         else:
    101             return False