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

pvptradesvc.py (4048B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\station\pvptrade\pvptradesvc.py
      2 from carbon.common.script.sys.service import Service
      3 from carbonui.control.window import Window
      4 from eve.client.script.ui.station.pvptrade.pvptradewnd import PVPTrade
      5 from eveexceptions import UserError
      6 from localization import GetByLabel
      7 from player_messaging.client.ui_message import prompt_player_fsd_dialog
      8 
      9 class PVPTradeService(Service):
     10     __guid__ = 'svc.pvptrade'
     11     __notifyevents__ = ['OnTradeInitiate',
     12      'OnTradeCancel',
     13      'OnTradeOffer',
     14      'OnTradeOfferReset',
     15      'OnTradeMoneyOffer',
     16      'OnTradeComplete',
     17      'OnPrimingNeededForTradeItems']
     18 
     19     def _ShowTradeSessionWindow(self, tradeSession, charID, tradeItems):
     20         windowID = self.GetWindowID()
     21         tradeContainerID = tradeSession.List().tradeContainerID
     22         existingWindow = Window.GetIfOpen(windowID=windowID, windowInstanceID=tradeContainerID)
     23         if existingWindow and not existingWindow.destroyed:
     24             existingWindow.Maximize()
     25         else:
     26             self.OnTradeInitiate(charID, tradeSession, tradeItems)
     27 
     28     def StartTradeSession(self, charID, tradeItems = None):
     29         tradeSession = sm.RemoteSvc('trademgr').InitiateTrade(charID)
     30         self._ShowTradeSessionWindow(tradeSession, charID, tradeItems)
     31 
     32     def GetWindowID(self):
     33         return 'tradeWnd'
     34 
     35     def OnTradeInitiate(self, charID, tradeSession, tradeItems = None):
     36         self.LogInfo('OnInitiate', charID, tradeSession)
     37         windowID = self.GetWindowID()
     38         tradeContainerID = tradeSession.List().tradeContainerID
     39         existingWindow = Window.GetIfOpen(windowID=windowID, windowInstanceID=tradeContainerID)
     40         if existingWindow:
     41             return
     42         showIfInStack = self.ShouldShowIfInStack(windowID)
     43         PVPTrade.Open(windowID=windowID, windowInstanceID=tradeContainerID, tradeSession=tradeSession, tradeItems=tradeItems, showIfInStack=showIfInStack)
     44 
     45     def ShouldShowIfInStack(self, windowID):
     46         defaultValue = True
     47         otherTradeWnd = Window.GetIfOpen(windowID=windowID)
     48         if not otherTradeWnd:
     49             return defaultValue
     50         stackID = PVPTrade.GetRegisteredOrDefaultStackID(windowID)
     51         if not stackID:
     52             return defaultValue
     53         from carbonui.uicore import uicore
     54         stack = uicore.registry.GetWindow(stackID)
     55         if not stack:
     56             return defaultValue
     57         if not isinstance(stack.GetActiveWindow(), PVPTrade):
     58             return defaultValue
     59         stack.ForceUpdateSelectedTabSetting()
     60         return False
     61 
     62     def OnTradeCancel(self, containerID):
     63         windowID = self.GetWindowID()
     64         w = Window.GetIfOpen(windowID=windowID, windowInstanceID=containerID)
     65         if w:
     66             w.OnCancel()
     67 
     68     def OnTradeOffer(self, containerID, state):
     69         windowID = self.GetWindowID()
     70         w = Window.GetIfOpen(windowID=windowID, windowInstanceID=containerID)
     71         if w:
     72             w.OnStateToggle(state)
     73 
     74     def OnTradeOfferReset(self, containerID, manifestError = None):
     75         windowID = self.GetWindowID()
     76         w = Window.GetIfOpen(windowID=windowID, windowInstanceID=containerID)
     77         if w:
     78             w.OnTradeOfferReset()
     79             if manifestError:
     80                 prompt_player_fsd_dialog('CustomNotify', {'notify': GetByLabel('UI/Messages/DirectTradeManifestMismatch')})
     81             else:
     82                 raise UserError('ItemExchangeFailed')
     83 
     84     def OnTradeMoneyOffer(self, containerID, money):
     85         windowID = self.GetWindowID()
     86         w = Window.GetIfOpen(windowID=windowID, windowInstanceID=containerID)
     87         if w:
     88             w.OnMoneyOffer(money)
     89 
     90     def OnTradeComplete(self, containerID, items = None):
     91         windowID = self.GetWindowID()
     92         w = Window.GetIfOpen(windowID=windowID, windowInstanceID=containerID)
     93         if w:
     94             w.OnTradeComplete(items)
     95 
     96     def OnPrimingNeededForTradeItems(self, itemIDsToPrime):
     97         cfg.evelocations.Prime(itemIDsToPrime)