################################################################################################### # Network import os import app import chr import dbg import net import snd import chr import chrmgr import background import player import playerSettingModule import ui import uiPhaseCurtain import localeInfo def _GetHeadlessScenario(): return os.environ.get("M2_HEADLESS_SCENARIO", "").strip().lower() def _WriteHeadlessTrace(message): scenario = _GetHeadlessScenario() if scenario == "map_load": tracePath = "log/headless_map_load_trace.txt" elif scenario == "gm_teleport": tracePath = "log/headless_gm_teleport_trace.txt" else: return try: open(tracePath, "a").write("%s\n" % message) except: pass class PopupDialog(ui.ScriptWindow): # MR-15: Multiline dialog messages BASE_HEIGHT = 105 BASE_WIDTH = 280 BUTTON_Y = 63 LINE_HEIGHT = 12 # MR-15: -- END OF -- Multiline dialog messages def __init__(self): print("NEW POPUP DIALOG ----------------------------------------------------------------------------") ui.ScriptWindow.__init__(self) self.CloseEvent = 0 def __del__(self): print("---------------------------------------------------------------------------- DELETE POPUP DIALOG ") ui.ScriptWindow.__del__(self) def LoadDialog(self): PythonScriptLoader = ui.PythonScriptLoader() PythonScriptLoader.LoadScriptFile(self, "UIScript/PopupDialog.py") def Open(self, Message, event = 0, ButtonName = None): if ButtonName is None: ButtonName = localeInfo.UI_CANCEL if True == self.IsShow(): self.Close() self.Lock() self.SetTop() self.CloseEvent = event AcceptButton = self.GetChild("accept") AcceptButton.SetText(ButtonName) AcceptButton.SetEvent(ui.__mem_func__(self.Close)) # MR-15: Multiline dialog messages messageWidget = self.GetChild("message") messageWidget.SetText(Message) extraH = len(messageWidget.extraLines) * self.LINE_HEIGHT + 2 newH = self.BASE_HEIGHT + extraH self.SetSize(self.BASE_WIDTH, newH) self.GetChild("board").SetSize(self.BASE_WIDTH, newH) AcceptButton.SetPosition(0, self.BUTTON_Y + extraH) self.SetCenterPosition() self.UpdateRect() # MR-15: -- END OF -- Multiline dialog messages self.Show() def Close(self): if False == self.IsShow(): self.CloseEvent = 0 return self.Unlock() self.Hide() if 0 != self.CloseEvent: self.CloseEvent() self.CloseEvent = 0 def Destroy(self): self.Close() self.ClearDictionary() def OnPressEscapeKey(self): self.Close() return True def OnIMEReturn(self): self.Close() return True ## ## Main Stream ## class MainStream(object): isChrData=0 def __init__(self): print("NEWMAIN STREAM ----------------------------------------------------------------------------") net.SetHandler(self) net.SetTCPRecvBufferSize(128*1024) net.SetTCPSendBufferSize(4096) self.id="" self.pwd="" self.addr="" self.port=0 self.account_addr=0 self.account_port=0 self.slot=0 self.isAutoSelect=0 self.isAutoLogin=0 self.curtain = 0 self.curPhaseWindow = 0 self.newPhaseWindow = 0 def __del__(self): print("---------------------------------------------------------------------------- DELETE MAIN STREAM ") def Destroy(self): if self.curPhaseWindow: self.curPhaseWindow.Close() self.curPhaseWindow = 0 if self.newPhaseWindow: self.newPhaseWindow.Close() self.newPhaseWindow = 0 self.popupWindow.Destroy() self.popupWindow = 0 self.curtain = 0 def Create(self): self.CreatePopupDialog() self.curtain = uiPhaseCurtain.PhaseCurtain() def SetPhaseWindow(self, newPhaseWindow): if self.newPhaseWindow: #print "Already in the process of changing to a new phase, skip", newPhaseWindow self.__ChangePhaseWindow() self.newPhaseWindow=newPhaseWindow if self.curPhaseWindow: #print "Change after fade out" self.curtain.FadeOut(self.__ChangePhaseWindow) else: #print "Change immediately if there's no current phase" self.__ChangePhaseWindow() def __ChangePhaseWindow(self): oldPhaseWindow=self.curPhaseWindow newPhaseWindow=self.newPhaseWindow self.curPhaseWindow=0 self.newPhaseWindow=0 if oldPhaseWindow: oldPhaseWindow.Close() if newPhaseWindow: newPhaseWindow.Open() _WriteHeadlessTrace("MainStream.ChangePhase opened=%s" % newPhaseWindow.__class__.__name__) self.curPhaseWindow=newPhaseWindow if self.curPhaseWindow: self.curtain.FadeIn() else: app.Exit() def CreatePopupDialog(self): self.popupWindow = PopupDialog() self.popupWindow.LoadDialog() self.popupWindow.SetCenterPosition() self.popupWindow.Hide() ## SelectPhase ########################################################################################## def SetLoginPhase(self): net.Disconnect() import introLogin self.SetPhaseWindow(introLogin.LoginWindow(self)) def SameLogin_SetLoginPhase(self): net.Disconnect() import introLogin introInst = introLogin.LoginWindow(self) self.SetPhaseWindow(introInst) introInst.SameLogin_OpenUI() def SetSelectEmpirePhase(self): try: import introEmpire self.SetPhaseWindow(introEmpire.SelectEmpireWindow(self)) except: import exception exception.Abort("networkModule.SetSelectEmpirePhase") def SetReselectEmpirePhase(self): try: import introEmpire self.SetPhaseWindow(introEmpire.ReselectEmpireWindow(self)) except: import exception exception.Abort("networkModule.SetReselectEmpirePhase") def SetSelectCharacterPhase(self): try: localeInfo.LoadLocaleData() import introSelect self.popupWindow.Close() self.SetPhaseWindow(introSelect.SelectCharacterWindow(self)) except: import exception exception.Abort("networkModule.SetSelectCharacterPhase") def SetCreateCharacterPhase(self): try: import introCreate self.SetPhaseWindow(introCreate.CreateCharacterWindow(self)) except: import exception exception.Abort("networkModule.SetCreateCharacterPhase") def SetTestGamePhase(self, x, y): try: import introLoading loadingPhaseWindow=introLoading.LoadingWindow(self) loadingPhaseWindow.DEBUG_LoadData(x, y) self.SetPhaseWindow(loadingPhaseWindow) except: import exception exception.Abort("networkModule.SetLoadingPhase") def SetLoadingPhase(self): try: import introLoading self.SetPhaseWindow(introLoading.LoadingWindow(self)) except: import exception exception.Abort("networkModule.SetLoadingPhase") def SetGamePhase(self): try: import game _WriteHeadlessTrace("MainStream.SetGamePhase begin current_map=%s" % background.GetCurrentMapName()) self.popupWindow.Close() self.SetPhaseWindow(game.GameWindow(self)) _WriteHeadlessTrace("MainStream.SetGamePhase queued current_map=%s" % background.GetCurrentMapName()) except: raise import exception exception.Abort("networkModule.SetGamePhase") ################################ # Functions used in python ## Login def Connect(self): import constInfo if constInfo.KEEP_ACCOUNT_CONNETION_ENABLE: net.ConnectToAccountServer(self.addr, self.port, self.account_addr, self.account_port) else: net.ConnectTCP(self.addr, self.port) #net.ConnectUDP(IP, Port) def SetConnectInfo(self, addr, port, account_addr=0, account_port=0): self.addr = addr self.port = port self.account_addr = account_addr self.account_port = account_port def GetConnectAddr(self): return self.addr def SetLoginInfo(self, id, pwd): self.id = id self.pwd = pwd net.SetLoginInfo(id, pwd) def CancelEnterGame(self): pass ## Select def SetCharacterSlot(self, slot): self.slot=slot def GetCharacterSlot(self): return self.slot ## Empty def EmptyFunction(self): pass