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

playerOwnedTargetMgr.py (3705B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\parklife\playerOwnedTargetMgr.py
      2 import sys
      3 import uthread
      4 from carbon.common.script.sys.service import Service
      5 from eve.client.script.parklife import states as state
      6 from carbonui.uicore import uicore
      7 from eveexceptions import UserError
      8 from player_messaging.client.ui_message import prompt_player_fsd_dialog
      9 
     10 class PlayerOwnedTargetMgr(Service):
     11     __guid__ = 'svc.pwntarget'
     12     __exportedcalls__ = {'OrderTarget': [],
     13      'CancelTargetOrder': []}
     14     __notifyevents__ = ['OnStateChange']
     15     __dependencies__ = ['michelle', 'godma']
     16 
     17     def Run(self, memStream = None):
     18         Service.Run(self, memStream)
     19         self.Reset()
     20 
     21     def Stop(self, stream):
     22         Service.Stop(self)
     23         self.Reset()
     24 
     25     def Reset(self):
     26         self.needtarget = []
     27 
     28     def OnStateChange(self, itemID, flag, true, *args):
     29         if flag == state.selected and true and self.needtarget:
     30             clearCursor = False
     31             for each in self.needtarget:
     32                 if hasattr(each, 'sr') and hasattr(each.sr, 'sourceID'):
     33                     if not self.IsTargetForStructure(each.sr.sourceID, itemID):
     34                         uthread.pool('TargetManager::OnStateChange-->LockTarget', self.LockTargetOBO, each.sr.sourceID, itemID, each)
     35                         clearCursor = True
     36 
     37             if clearCursor:
     38                 self.HideTargetingCursor()
     39             self.needtarget = []
     40 
     41     def IsTargetForStructure(self, sid, tid):
     42         targetID = sm.GetService('pwn').GetCurrentTarget(sid)
     43         if targetID == tid:
     44             return 1
     45         return 0
     46 
     47     def OrderTarget(self, who):
     48         if who not in self.needtarget[:]:
     49             self.needtarget.append(who)
     50         self.ShowTargetingCursor()
     51 
     52     def CancelTargetOrder(self, who = None):
     53         if not who and len(self.needtarget):
     54             for each in self.needtarget:
     55                 if each and not each.destroyed:
     56                     each.waitingForActiveTarget = 0
     57 
     58             self.needtarget = []
     59         elif who in self.needtarget:
     60             self.needtarget.remove(who)
     61             who.waitingForActiveTarget = 0
     62         if not len(self.needtarget):
     63             self.HideTargetingCursor()
     64 
     65     def ShowTargetingCursor(self):
     66         uicore.layer.inflight.sr.tcursor.display = True
     67 
     68     def HideTargetingCursor(self):
     69         uicore.layer.inflight.sr.tcursor.display = False
     70 
     71     def LockTargetOBO(self, sid, tid, who):
     72         self.StartLockTarget(sid, tid, who)
     73         try:
     74             flag, targetList = self.godma.GetDogmaLM().AddTargetOBO(sid, tid)
     75             if not flag:
     76                 self.OnTargetAdded(sid, tid)
     77         except UserError as e:
     78             self.FailLockTarget(tid, who)
     79             if e.msg == 'DeniedShipChanged':
     80                 sys.exc_clear()
     81                 return
     82             prompt_player_fsd_dialog(e.msg, e.dict)
     83             sys.exc_clear()
     84 
     85         self.LogInfo('PlayerOwned targetMgr: Locking Target for ', tid, ' done')
     86 
     87     def UnLockTargetOBO(self, sid, tid):
     88         self.godma.GetDogmaLM().RemoveTargetOBO(sid, tid)
     89 
     90     def StartLockTarget(self, sid, tid, who):
     91         uthread.new(who.CountDown, tid)
     92 
     93     def FailLockTarget(self, tid, who):
     94         if not who or who.destroyed:
     95             return
     96         if not hasattr(who, 'countDown') or not hasattr(who, 'waitingForActiveTarget'):
     97             return
     98         who.countDown = False
     99         who.waitingForActiveTarget = 0
    100 
    101     def OnTargetAdded(self, sid, tid):
    102         sm.ScatterEvent('OnStructureTargetAdded', sid, tid)
    103 
    104     def OnTargetRemoved(self, sid, tid):
    105         sm.ScatterEvent('OnStructureTargetAdded', sid, tid)