Guest User

Untitled

a guest
Jun 3rd, 2020
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 43.53 KB | None | 0 0
  1. import dbg
  2. import app
  3. import net
  4. import ui
  5. import ime
  6. import snd
  7. import wndMgr
  8. import musicInfo
  9. import serverInfo
  10. import systemSetting
  11. import ServerStateChecker
  12. import localeInfo
  13. import constInfo
  14. import uiCommon
  15. import time
  16. import serverCommandParser
  17. import ime
  18. import uiScriptLocale
  19. import uiSelectCredentials
  20. import base64
  21. import _winreg
  22. import os
  23. import string
  24. import random
  25.  
  26. RUNUP_MATRIX_AUTH = False
  27. NEWCIBN_PASSPOD_AUTH = False
  28.  
  29. LOGIN_DELAY_SEC = 0.0
  30. SKIP_LOGIN_PHASE = False
  31. SKIP_LOGIN_PHASE_SUPPORT_CHANNEL = False
  32. FULL_BACK_IMAGE = False
  33.  
  34. PASSPOD_MSG_DICT = {}
  35.  
  36. VIRTUAL_KEYBOARD_NUM_KEYS = 46
  37. VIRTUAL_KEYBOARD_RAND_KEY = True
  38.  
  39. def Suffle(src):
  40.     if VIRTUAL_KEYBOARD_RAND_KEY:
  41.         items = [item for item in src]
  42.  
  43.         itemCount = len(items)
  44.         for oldPos in xrange(itemCount):
  45.             newPos = app.GetRandom(0, itemCount-1)
  46.             items[newPos], items[oldPos] = items[oldPos], items[newPos]
  47.  
  48.         return "".join(items)
  49.     else:
  50.         return src
  51.  
  52. if localeInfo.IsNEWCIBN() or localeInfo.IsCIBN10():
  53.     LOGIN_DELAY_SEC = 60.0
  54.     FULL_BACK_IMAGE = True
  55.     NEWCIBN_PASSPOD_AUTH = True
  56.     PASSPOD_MSG_DICT = {
  57.         "PASERR1"   : localeInfo.LOGIN_FAILURE_PASERR1,
  58.         "PASERR2"   : localeInfo.LOGIN_FAILURE_PASERR2,
  59.         "PASERR3"   : localeInfo.LOGIN_FAILURE_PASERR3,
  60.         "PASERR4"   : localeInfo.LOGIN_FAILURE_PASERR4,
  61.         "PASERR5"   : localeInfo.LOGIN_FAILURE_PASERR5,
  62.     }
  63.  
  64. elif localeInfo.IsYMIR() or localeInfo.IsCHEONMA():
  65.     FULL_BACK_IMAGE = True
  66.  
  67. elif localeInfo.IsHONGKONG():
  68.     FULL_BACK_IMAGE = True
  69.     RUNUP_MATRIX_AUTH = True
  70.     PASSPOD_MSG_DICT = {
  71.         "NOTELE"    : localeInfo.LOGIN_FAILURE_NOTELEBLOCK,
  72.     }
  73.  
  74. elif localeInfo.IsJAPAN():
  75.     FULL_BACK_IMAGE = True
  76.    
  77. elif localeInfo.IsBRAZIL():
  78.     LOGIN_DELAY_SEC = 60.0
  79.  
  80. def IsFullBackImage():
  81.     global FULL_BACK_IMAGE
  82.     return FULL_BACK_IMAGE
  83.  
  84. def IsLoginDelay():
  85.     global LOGIN_DELAY_SEC
  86.     if LOGIN_DELAY_SEC > 0.0:
  87.         return True
  88.     else:
  89.         return False
  90.  
  91. def IsRunupMatrixAuth():
  92.     global RUNUP_MATRIX_AUTH
  93.     return RUNUP_MATRIX_AUTH   
  94.  
  95. def IsNEWCIBNPassPodAuth():
  96.     global NEWCIBN_PASSPOD_AUTH
  97.     return NEWCIBN_PASSPOD_AUTH
  98.  
  99. def GetLoginDelay():
  100.     global LOGIN_DELAY_SEC
  101.     return LOGIN_DELAY_SEC
  102.  
  103. app.SetGuildMarkPath("test")
  104.  
  105. class ConnectingDialog(ui.ScriptWindow):
  106.  
  107.     def __init__(self):
  108.         ui.ScriptWindow.__init__(self)
  109.         self.__LoadDialog()
  110.         self.eventTimeOver = lambda *arg: None
  111.         self.eventExit = lambda *arg: None
  112.  
  113.     def __del__(self):
  114.         ui.ScriptWindow.__del__(self)
  115.  
  116.     def __LoadDialog(self):
  117.         try:
  118.             PythonScriptLoader = ui.PythonScriptLoader()
  119.             PythonScriptLoader.LoadScriptFile(self, "UIScript/ConnectingDialog.py")
  120.  
  121.             self.board = self.GetChild("board")
  122.             self.message = self.GetChild("message")
  123.             self.countdownMessage = self.GetChild("countdown_message")
  124.  
  125.         except:
  126.             import exception
  127.             exception.Abort("ConnectingDialog.LoadDialog.BindObject")
  128.  
  129.     def Open(self, waitTime):
  130.         curTime = time.clock()
  131.         self.endTime = curTime + waitTime
  132.  
  133.         self.Lock()
  134.         self.SetCenterPosition()
  135.         self.SetTop()
  136.         self.Show()    
  137.  
  138.     def Close(self):
  139.         self.Unlock()
  140.         self.Hide()
  141.  
  142.     def Destroy(self):
  143.         self.Hide()
  144.         self.ClearDictionary()
  145.  
  146.     def SetText(self, text):
  147.         self.message.SetText(text)
  148.  
  149.     def SetCountDownMessage(self, waitTime):
  150.         self.countdownMessage.SetText("%.0f%s" % (waitTime, localeInfo.SECOND))
  151.  
  152.     def SAFE_SetTimeOverEvent(self, event):
  153.         self.eventTimeOver = ui.__mem_func__(event)
  154.  
  155.     def SAFE_SetExitEvent(self, event):
  156.         self.eventExit = ui.__mem_func__(event)
  157.  
  158.     def OnUpdate(self):
  159.         lastTime = max(0, self.endTime - time.clock())
  160.         if 0 == lastTime:
  161.             self.Close()
  162.             self.eventTimeOver()
  163.         else:
  164.             self.SetCountDownMessage(self.endTime - time.clock())
  165.  
  166.     def OnPressExitKey(self):
  167.         #self.eventExit()
  168.         return True
  169.  
  170. class LoginWindow(ui.ScriptWindow):
  171.  
  172.     IS_TEST = net.IsTest()
  173.  
  174.     def __init__(self, stream):
  175.         print "NEW LOGIN WINDOW  ----------------------------------------------------------------------------"
  176.         ui.ScriptWindow.__init__(self)
  177.         net.SetPhaseWindow(net.PHASE_WINDOW_LOGIN, self)
  178.         net.SetAccountConnectorHandler(self)
  179.  
  180.         self.matrixInputChanceCount = 0
  181.         self.lastLoginTime = 0
  182.         self.inputDialog = None
  183.         self.connectingDialog = None
  184.         self.stream=stream
  185.         self.isNowCountDown=False
  186.         self.isStartError=False
  187.         self.timeOutMsg=False
  188.  
  189.         self.xServerBoard = 0
  190.         self.yServerBoard = 0
  191.        
  192.         self.loadingImage = None
  193.  
  194.         self.virtualKeyboard = None
  195.         self.virtualKeyboardMode = "ALPHABET"
  196.         self.virtualKeyboardIsUpper = False
  197.        
  198.     def __del__(self):
  199.         net.ClearPhaseWindow(net.PHASE_WINDOW_LOGIN, self)
  200.         net.SetAccountConnectorHandler(0)
  201.         ui.ScriptWindow.__del__(self)
  202.         print "---------------------------------------------------------------------------- DELETE LOGIN WINDOW"
  203.  
  204.     def Open(self):
  205.         ServerStateChecker.Create(self)
  206.  
  207.         print "LOGIN WINDOW OPEN ----------------------------------------------------------------------------"
  208.  
  209.         self.loginFailureMsgDict={
  210.             #"DEFAULT" : localeInfo.LOGIN_FAILURE_UNKNOWN,
  211.  
  212.             "ALREADY"   : localeInfo.LOGIN_FAILURE_ALREAY,
  213.             "NOID"      : localeInfo.LOGIN_FAILURE_NOT_EXIST_ID,
  214.             "WRONGPWD"  : localeInfo.LOGIN_FAILURE_WRONG_PASSWORD,
  215.             "FULL"      : localeInfo.LOGIN_FAILURE_TOO_MANY_USER,
  216.             "SHUTDOWN"  : localeInfo.LOGIN_FAILURE_SHUTDOWN,
  217.             "REPAIR"    : localeInfo.LOGIN_FAILURE_REPAIR_ID,
  218.             "BLOCK"     : localeInfo.LOGIN_FAILURE_BLOCK_ID,
  219.             "WRONGMAT"  : localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER,
  220.             "QUIT"      : localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE,
  221.             "BESAMEKEY" : localeInfo.LOGIN_FAILURE_BE_SAME_KEY,
  222.             "NOTAVAIL"  : localeInfo.LOGIN_FAILURE_NOT_AVAIL,
  223.             "NOBILL"    : localeInfo.LOGIN_FAILURE_NOBILL,
  224.             "BLKLOGIN"  : localeInfo.LOGIN_FAILURE_BLOCK_LOGIN,
  225.             "WEBBLK"    : localeInfo.LOGIN_FAILURE_WEB_BLOCK,
  226.             "BADSCLID"  : localeInfo.LOGIN_FAILURE_WRONG_SOCIALID,
  227.             "AGELIMIT"  : localeInfo.LOGIN_FAILURE_SHUTDOWN_TIME,
  228.         }
  229.  
  230.         self.loginFailureFuncDict = {
  231.             "WRONGPWD"  : self.__DisconnectAndInputPassword,
  232.             "WRONGMAT"  : self.__DisconnectAndInputMatrix,
  233.             "QUIT"      : app.Exit,
  234.         }
  235.  
  236.         self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
  237.         self.SetWindowName("LoginWindow")
  238.  
  239.         if not self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "LoginWindow.py"):
  240.             dbg.TraceError("LoginWindow.Open - __LoadScript Error")
  241.             return
  242.        
  243.         self.__LoadLoginInfo("loginInfo.xml")
  244.        
  245.         if app.loggined:
  246.             self.loginFailureFuncDict = {
  247.             "WRONGPWD"  : app.Exit,
  248.             "WRONGMAT"  : app.Exit,
  249.             "QUIT"      : app.Exit,
  250.             }
  251.  
  252.         if musicInfo.loginMusic != "":
  253.             snd.SetMusicVolume(systemSetting.GetMusicVolume())
  254.             snd.FadeInMusic("BGM/"+musicInfo.loginMusic)
  255.  
  256.         snd.SetSoundVolume(systemSetting.GetSoundVolume())
  257.  
  258.         # pevent key "[" "]"
  259.         ime.AddExceptKey(91)
  260.         ime.AddExceptKey(93)
  261.            
  262.         self.Show()
  263.  
  264.         global SKIP_LOGIN_PHASE
  265.         if SKIP_LOGIN_PHASE:
  266.             if self.isStartError:
  267.                 self.connectBoard.Hide()
  268.                 self.loginBoard.Hide()
  269.                 self.serverBoard.Hide()
  270.                 self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)
  271.                 return
  272.  
  273.             if self.loginInfo:
  274.                 self.serverBoard.Hide()
  275.             else:
  276.                 self.__RefreshServerList()
  277.                 self.__OpenServerBoard()
  278.         else:
  279.             connectingIP = self.stream.GetConnectAddr()
  280.             if connectingIP:
  281.                 if app.USE_OPENID and not app.OPENID_TEST :
  282.                     self.__RefreshServerList()
  283.                     self.__OpenServerBoard()
  284.                 else:
  285.                     self.__OpenLoginBoard()
  286.                     if IsFullBackImage():
  287.                         self.GetChild("bg1").Hide()
  288.                         self.GetChild("bg2").Show()
  289.  
  290.             else:
  291.                 self.__RefreshServerList()
  292.                 self.__OpenServerBoard()
  293.  
  294.         app.ShowCursor()
  295.  
  296.     def Close(self):
  297.  
  298.         if self.connectingDialog:
  299.             self.connectingDialog.Close()
  300.         self.connectingDialog = None
  301.  
  302.         ServerStateChecker.Initialize(self)
  303.  
  304.         print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW "
  305.         #
  306.         # selectMusic? ??? BGM? ???? ?? ? ????.
  307.         #
  308.         if musicInfo.loginMusic != "" and musicInfo.selectMusic != "":
  309.             snd.FadeOutMusic("BGM/"+musicInfo.loginMusic)
  310.  
  311.         ## NOTE : idEditLine? pwdEditLine? ???? ?? ?? ?????
  312.         ##        Event? ??? ??? ????? ??? - [levites]
  313.         self.idEditLine.SetTabEvent(0)
  314.         self.idEditLine.SetReturnEvent(0)
  315.         self.pwdEditLine.SetReturnEvent(0)
  316.         self.pwdEditLine.SetTabEvent(0)
  317.  
  318.         self.connectBoard = None
  319.         self.loginBoard = None
  320.         self.idEditLine = None
  321.         self.pwdEditLine = None
  322.         self.inputDialog = None
  323.         self.connectingDialog = None
  324.         self.loadingImage = None
  325.  
  326.         self.serverBoard                = None
  327.         self.serverList                 = None
  328.         self.channelList                = None
  329.  
  330.         # RUNUP_MATRIX_AUTH
  331.         self.matrixQuizBoard    = None
  332.         self.matrixAnswerInput  = None
  333.         self.matrixAnswerOK = None
  334.         self.matrixAnswerCancel = None
  335.         # RUNUP_MATRIX_AUTH_END
  336.  
  337.         # NEWCIBN_PASSPOD_AUTH
  338.         self.passpodBoard   = None
  339.         self.passpodAnswerInput = None
  340.         self.passpodAnswerOK    = None
  341.         self.passpodAnswerCancel = None
  342.         # NEWCIBN_PASSPOD_AUTH_END
  343.  
  344.         self.VIRTUAL_KEY_ALPHABET_LOWERS = None
  345.         self.VIRTUAL_KEY_ALPHABET_UPPERS = None
  346.         self.VIRTUAL_KEY_SYMBOLS = None
  347.         self.VIRTUAL_KEY_NUMBERS = None
  348.  
  349.         # VIRTUAL_KEYBOARD_BUG_FIX
  350.         if self.virtualKeyboard:
  351.             for keyIndex in xrange(0, VIRTUAL_KEYBOARD_NUM_KEYS+1):
  352.                 key = self.GetChild2("key_%d" % keyIndex)
  353.                 if key:
  354.                     key.SetEvent(None)
  355.  
  356.             self.GetChild("key_space").SetEvent(None)
  357.             self.GetChild("key_backspace").SetEvent(None)
  358.             self.GetChild("key_enter").SetEvent(None)
  359.             self.GetChild("key_shift").SetToggleDownEvent(None)
  360.             self.GetChild("key_shift").SetToggleUpEvent(None)
  361.             self.GetChild("key_at").SetToggleDownEvent(None)
  362.             self.GetChild("key_at").SetToggleUpEvent(None)
  363.  
  364.             self.virtualKeyboard = None
  365.  
  366.         self.KillFocus()
  367.         self.Hide()
  368.  
  369.         self.stream.popupWindow.Close()
  370.         self.loginFailureFuncDict=None
  371.  
  372.         ime.ClearExceptKey()
  373.  
  374.         app.HideCursor()
  375.  
  376.     def __SaveChannelInfo(self):
  377.         try:
  378.             file=open("channel.inf", "w")
  379.             file.write("%d %d %d" % (self.__GetServerID(), self.__GetChannelID(), self.__GetRegionID()))
  380.         except:
  381.             print "LoginWindow.__SaveChannelInfo - SaveError"
  382.  
  383.     def __LoadChannelInfo(self):
  384.         try:
  385.             file=open("channel.inf")
  386.             lines=file.readlines()
  387.            
  388.             if len(lines)>0:
  389.                 tokens=lines[0].split()
  390.  
  391.                 selServerID=int(tokens[0])
  392.                 selChannelID=int(tokens[1])
  393.                
  394.                 if len(tokens) == 3:
  395.                     regionID = int(tokens[2])
  396.  
  397.                 return regionID, selServerID, selChannelID
  398.  
  399.         except:
  400.             print "LoginWindow.__LoadChannelInfo - OpenError"
  401.             return -1, -1, -1
  402.  
  403.     def __ExitGame(self):
  404.         app.Exit()
  405.  
  406.     def SetIDEditLineFocus(self):
  407.         if self.idEditLine != None:
  408.             self.idEditLine.SetFocus()
  409.  
  410.     def SetPasswordEditLineFocus(self):
  411.         if localeInfo.IsEUROPE():
  412.             if self.idEditLine != None: #0000862: [M2EU] ???? ?? ??: ??? ?? None ???
  413.                 self.idEditLine.SetText("")
  414.                 self.idEditLine.SetFocus() #0000685: [M2EU] ???/???? ?? ?? ?? ??: ??? ???? ???? ?? ???
  415.  
  416.             if self.pwdEditLine != None: #0000862: [M2EU] ???? ?? ??: ??? ?? None ???
  417.                 self.pwdEditLine.SetText("")
  418.         else:
  419.             if self.pwdEditLine != None:
  420.                 self.pwdEditLine.SetFocus()                            
  421.  
  422.     def OnEndCountDown(self):
  423.         self.isNowCountDown = False
  424.         if localeInfo.IsBRAZIL():
  425.             self.timeOutMsg = True
  426.         else:
  427.             self.timeOutMsg = False
  428.         self.OnConnectFailure()
  429.  
  430.     def OnConnectFailure(self):
  431.  
  432.         if self.isNowCountDown:
  433.             return
  434.  
  435.         snd.PlaySound("sound/ui/loginfail.wav")
  436.  
  437.         if self.connectingDialog:
  438.             self.connectingDialog.Close()
  439.         self.connectingDialog = None
  440.  
  441.         if app.loggined:
  442.             self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)
  443.         elif self.timeOutMsg:
  444.             self.PopupNotifyMessage(localeInfo.LOGIN_FAILURE_TIMEOUT, self.SetPasswordEditLineFocus)
  445.         else:
  446.             self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.SetPasswordEditLineFocus)
  447.  
  448.     def OnHandShake(self):
  449.         if not IsLoginDelay():
  450.             snd.PlaySound("sound/ui/loginok.wav")
  451.             self.PopupDisplayMessage(localeInfo.LOGIN_CONNECT_SUCCESS)
  452.  
  453.     def OnLoginStart(self):
  454.         if not IsLoginDelay():
  455.             self.PopupDisplayMessage(localeInfo.LOGIN_PROCESSING)
  456.  
  457.     def OnLoginFailure(self, error):
  458.         if self.connectingDialog:
  459.             self.connectingDialog.Close()
  460.         self.connectingDialog = None
  461.  
  462.         try:
  463.             loginFailureMsg = self.loginFailureMsgDict[error]
  464.         except KeyError:
  465.             if PASSPOD_MSG_DICT:
  466.                 try:
  467.                     loginFailureMsg = PASSPOD_MSG_DICT[error]
  468.                 except KeyError:
  469.                     loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + error
  470.             else:
  471.                 loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN  + error
  472.  
  473.  
  474.         #0000685: [M2EU] ???/???? ?? ?? ?? ??: ??? ????? ???? ?? ???
  475.         loginFailureFunc=self.loginFailureFuncDict.get(error, self.SetPasswordEditLineFocus)
  476.  
  477.         if app.loggined:
  478.             self.PopupNotifyMessage(loginFailureMsg, self.__ExitGame)
  479.         else:
  480.             self.PopupNotifyMessage(loginFailureMsg, loginFailureFunc)
  481.  
  482.         snd.PlaySound("sound/ui/loginfail.wav")
  483.  
  484.     def __DisconnectAndInputID(self):
  485.         if self.connectingDialog:
  486.             self.connectingDialog.Close()
  487.         self.connectingDialog = None
  488.  
  489.         self.SetIDEditLineFocus()
  490.         net.Disconnect()
  491.  
  492.     def __DisconnectAndInputPassword(self):
  493.         if self.connectingDialog:
  494.             self.connectingDialog.Close()
  495.         self.connectingDialog = None
  496.  
  497.         self.SetPasswordEditLineFocus()
  498.         net.Disconnect()
  499.  
  500.     def __DisconnectAndInputMatrix(self):
  501.         if self.connectingDialog:
  502.             self.connectingDialog.Close()
  503.         self.connectingDialog = None
  504.  
  505.         self.stream.popupWindow.Close()
  506.         self.matrixInputChanceCount -= 1
  507.  
  508.         if self.matrixInputChanceCount <= 0:
  509.             self.__OnCloseInputDialog()
  510.  
  511.         elif self.inputDialog:
  512.             self.inputDialog.Show()
  513.  
  514.     def __LoadScript(self, fileName):
  515.         import dbg
  516.         try:
  517.             pyScrLoader = ui.PythonScriptLoader()
  518.             pyScrLoader.LoadScriptFile(self, fileName)
  519.         except:
  520.             import exception
  521.             exception.Abort("LoginWindow.__LoadScript.LoadObject")
  522.         try:
  523.             GetObject=self.GetChild
  524.             self.serverBoard            = GetObject("ServerBoard")
  525.             self.serverList             = GetObject("ServerList")
  526.             self.channelList            = GetObject("ChannelList")
  527.             self.serverSelectButton     = GetObject("ServerSelectButton")
  528.             self.serverExitButton       = GetObject("ServerExitButton")
  529.             self.connectBoard           = GetObject("ConnectBoard")
  530.             self.loginBoard             = GetObject("LoginBoard")
  531.             self.idEditLine             = GetObject("ID_EditLine")
  532.             self.pwdEditLine            = GetObject("Password_EditLine")
  533.             self.serverInfo             = GetObject("ConnectName")
  534.             self.selectConnectButton    = GetObject("SelectConnectButton")
  535.             self.loginButton            = GetObject("LoginButton")
  536.             self.loginExitButton        = GetObject("LoginExitButton")
  537.             self.saveLoginButton        = GetObject("SaveLoginButton")
  538.             self.loadCredentialButton   = GetObject("LoadCredentials")
  539.             self.loginCredentialButton  = GetObject("LoginCredentials")
  540.            
  541.             if localeInfo.IsVIETNAM():
  542.                 self.checkButton = GetObject("CheckButton")            
  543.                 self.checkButton.Down()
  544.            
  545.             # RUNUP_MATRIX_AUTH
  546.             if IsRunupMatrixAuth():
  547.                 self.matrixQuizBoard    = GetObject("RunupMatrixQuizBoard")
  548.                 self.matrixAnswerInput  = GetObject("RunupMatrixAnswerInput")
  549.                 self.matrixAnswerOK = GetObject("RunupMatrixAnswerOK")
  550.                 self.matrixAnswerCancel = GetObject("RunupMatrixAnswerCancel")
  551.             # RUNUP_MATRIX_AUTH_END
  552.  
  553.             # NEWCIBN_PASSPOD_AUTH
  554.             if IsNEWCIBNPassPodAuth():
  555.                 self.passpodBoard   = GetObject("NEWCIBN_PASSPOD_BOARD")
  556.                 self.passpodAnswerInput = GetObject("NEWCIBN_PASSPOD_INPUT")
  557.                 self.passpodAnswerOK    = GetObject("NEWCIBN_PASSPOD_OK")
  558.                 self.passpodAnswerCancel= GetObject("NEWCIBN_PASSPOD_CANCEL")
  559.             # NEWCIBN_PASSPOD_AUTH_END
  560.  
  561.             self.virtualKeyboard        = self.GetChild2("VirtualKeyboard")
  562.  
  563.             if self.virtualKeyboard:
  564.                 self.VIRTUAL_KEY_ALPHABET_UPPERS = Suffle(localeInfo.VIRTUAL_KEY_ALPHABET_UPPERS)
  565.                 self.VIRTUAL_KEY_ALPHABET_LOWERS = "".join([localeInfo.VIRTUAL_KEY_ALPHABET_LOWERS[localeInfo.VIRTUAL_KEY_ALPHABET_UPPERS.index(e)] for e in self.VIRTUAL_KEY_ALPHABET_UPPERS])
  566.                 if localeInfo.IsBRAZIL():
  567.                     self.VIRTUAL_KEY_SYMBOLS_BR = Suffle(localeInfo.VIRTUAL_KEY_SYMBOLS_BR)
  568.                 else:
  569.                     self.VIRTUAL_KEY_SYMBOLS = Suffle(localeInfo.VIRTUAL_KEY_SYMBOLS)
  570.                 self.VIRTUAL_KEY_NUMBERS = Suffle(localeInfo.VIRTUAL_KEY_NUMBERS)
  571.                 self.__VirtualKeyboard_SetAlphabetMode()
  572.            
  573.                 self.GetChild("key_space").SetEvent(lambda : self.__VirtualKeyboard_PressKey(' '))
  574.                 self.GetChild("key_backspace").SetEvent(lambda : self.__VirtualKeyboard_PressBackspace())
  575.                 self.GetChild("key_enter").SetEvent(lambda : self.__VirtualKeyboard_PressReturn())
  576.                 self.GetChild("key_shift").SetToggleDownEvent(lambda : self.__VirtualKeyboard_SetUpperMode())
  577.                 self.GetChild("key_shift").SetToggleUpEvent(lambda : self.__VirtualKeyboard_SetLowerMode())
  578.                 self.GetChild("key_at").SetToggleDownEvent(lambda : self.__VirtualKeyboard_SetSymbolMode())
  579.                 self.GetChild("key_at").SetToggleUpEvent(lambda : self.__VirtualKeyboard_SetAlphabetMode())
  580.  
  581.         except:
  582.             import exception
  583.             exception.Abort("LoginWindow.__LoadScript.BindObject")
  584.  
  585.         if self.IS_TEST:
  586.             self.selectConnectButton.Hide()
  587.         else:
  588.             self.selectConnectButton.SetEvent(ui.__mem_func__(self.__OnClickSelectConnectButton))
  589.  
  590.         self.serverBoard.OnKeyUp = ui.__mem_func__(self.__ServerBoard_OnKeyUp)
  591.         self.xServerBoard, self.yServerBoard = self.serverBoard.GetLocalPosition()
  592.  
  593.         self.serverSelectButton.SetEvent(ui.__mem_func__(self.__OnClickSelectServerButton))
  594.         self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitButton))
  595.  
  596.         self.loginButton.SetEvent(ui.__mem_func__(self.__OnClickLoginButton))
  597.         self.loginExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitButton))
  598.  
  599.         self.saveLoginButton.SetEvent(ui.__mem_func__(self.__OnClickSaveLoginButton))
  600.         self.loadCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoadInfoButton))
  601.         self.loginCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoginAutoButton))
  602.  
  603.  
  604.         self.serverList.SetEvent(ui.__mem_func__(self.__OnSelectServer))
  605.        
  606.         self.idEditLine.SetReturnEvent(ui.__mem_func__(self.pwdEditLine.SetFocus))
  607.         self.idEditLine.SetTabEvent(ui.__mem_func__(self.pwdEditLine.SetFocus))
  608.  
  609.         self.pwdEditLine.SetReturnEvent(ui.__mem_func__(self.__OnClickLoginButton))
  610.         self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus))
  611.  
  612.         # RUNUP_MATRIX_AUTH
  613.         if IsRunupMatrixAuth():        
  614.             self.matrixAnswerOK.SAFE_SetEvent(self.__OnClickMatrixAnswerOK)
  615.             self.matrixAnswerCancel.SAFE_SetEvent(self.__OnClickMatrixAnswerCancel)
  616.             self.matrixAnswerInput.SAFE_SetReturnEvent(self.__OnClickMatrixAnswerOK)
  617.         # RUNUP_MATRIX_AUTH_END
  618.  
  619.         # NEWCIBN_PASSPOD_AUTH
  620.         if IsNEWCIBNPassPodAuth():
  621.             self.passpodAnswerOK.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerOK)
  622.             self.passpodAnswerCancel.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerCancel)
  623.             self.passpodAnswerInput.SAFE_SetReturnEvent(self.__OnClickNEWCIBNPasspodAnswerOK)
  624.  
  625.         # NEWCIBN_PASSPOD_AUTH_END
  626.  
  627.  
  628.         if IsFullBackImage():
  629.             self.GetChild("bg1").Show()
  630.             self.GetChild("bg2").Hide()
  631.         return 1
  632.  
  633.     def __VirtualKeyboard_SetKeys(self, keyCodes):
  634.         uiDefFontBackup = localeInfo.UI_DEF_FONT
  635.         localeInfo.UI_DEF_FONT = localeInfo.UI_DEF_FONT_LARGE
  636.  
  637.         keyIndex = 1
  638.         for keyCode in keyCodes:                   
  639.             key = self.GetChild2("key_%d" % keyIndex)
  640.             if key:
  641.                 key.SetEvent(lambda x=keyCode: self.__VirtualKeyboard_PressKey(x))
  642.                 key.SetText(keyCode)
  643.                 key.ButtonText.SetFontColor(0, 0, 0)
  644.                 keyIndex += 1
  645.            
  646.         for keyIndex in xrange(keyIndex, VIRTUAL_KEYBOARD_NUM_KEYS+1):
  647.             key = self.GetChild2("key_%d" % keyIndex)
  648.             if key:
  649.                 key.SetEvent(lambda x=' ': self.__VirtualKeyboard_PressKey(x))
  650.                 key.SetText(' ')
  651.        
  652.         localeInfo.UI_DEF_FONT = uiDefFontBackup
  653.  
  654.     def __VirtualKeyboard_PressKey(self, code):
  655.         ime.PasteString(code)
  656.        
  657.         #if self.virtualKeyboardMode == "ALPHABET" and self.virtualKeyboardIsUpper:
  658.         #   self.__VirtualKeyboard_SetLowerMode()
  659.            
  660.     def __VirtualKeyboard_PressBackspace(self):
  661.         ime.PasteBackspace()
  662.        
  663.     def __VirtualKeyboard_PressReturn(self):
  664.         ime.PasteReturn()      
  665.  
  666.     def __VirtualKeyboard_SetUpperMode(self):
  667.         self.virtualKeyboardIsUpper = True
  668.        
  669.         if self.virtualKeyboardMode == "ALPHABET":
  670.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_UPPERS)
  671.         elif self.virtualKeyboardMode == "NUMBER":
  672.             if localeInfo.IsBRAZIL():
  673.                 self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  674.             else:  
  675.                 self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  676.         else:
  677.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  678.            
  679.     def __VirtualKeyboard_SetLowerMode(self):
  680.         self.virtualKeyboardIsUpper = False
  681.        
  682.         if self.virtualKeyboardMode == "ALPHABET":
  683.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)
  684.         elif self.virtualKeyboardMode == "NUMBER":
  685.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)           
  686.         else:
  687.             if localeInfo.IsBRAZIL():
  688.                 self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  689.             else:  
  690.                 self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  691.            
  692.     def __VirtualKeyboard_SetAlphabetMode(self):
  693.         self.virtualKeyboardIsUpper = False
  694.         self.virtualKeyboardMode = "ALPHABET"      
  695.         self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)   
  696.  
  697.     def __VirtualKeyboard_SetNumberMode(self):         
  698.         self.virtualKeyboardIsUpper = False
  699.         self.virtualKeyboardMode = "NUMBER"
  700.         self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  701.                    
  702.     def __VirtualKeyboard_SetSymbolMode(self):     
  703.         self.virtualKeyboardIsUpper = False
  704.         self.virtualKeyboardMode = "SYMBOL"
  705.         if localeInfo.IsBRAZIL():
  706.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  707.         else:  
  708.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  709.                
  710.     def Connect(self, id, pwd):
  711.  
  712.         if constInfo.SEQUENCE_PACKET_ENABLE:
  713.             net.SetPacketSequenceMode()
  714.  
  715.         if IsLoginDelay():
  716.             loginDelay = GetLoginDelay()
  717.             self.connectingDialog = ConnectingDialog()
  718.             self.connectingDialog.Open(loginDelay)
  719.             self.connectingDialog.SAFE_SetTimeOverEvent(self.OnEndCountDown)
  720.             self.connectingDialog.SAFE_SetExitEvent(self.OnPressExitKey)
  721.             self.isNowCountDown = True
  722.  
  723.         else:
  724.             self.stream.popupWindow.Close()
  725.             self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.SetPasswordEditLineFocus, localeInfo.UI_CANCEL)
  726.            
  727.         self.stream.SetLoginInfo(id, pwd)
  728.         self.stream.Connect()
  729.  
  730.     def __OnClickExitButton(self):
  731.         self.stream.SetPhaseWindow(0)
  732.  
  733.     def __SetServerInfo(self, name):
  734.         net.SetServerInfo(name.strip())
  735.         self.serverInfo.SetText(name)
  736.        
  737.     def __LoadLoginInfo(self, loginInfoFileName):
  738.  
  739.         try:
  740.             loginInfo={}
  741.             execfile(loginInfoFileName, loginInfo)
  742.         except IOError:
  743.             print(\
  744.                 "?? ???? ????" + loginInfoFileName + "??? ??????\n"\
  745.                 "\n"\
  746.                 "??:\n"\
  747.                 "================================================================\n"\
  748.                 "addr=??\n"\
  749.                 "port=??\n"\
  750.                 "id=???\n"\
  751.                 "pwd=????\n"\
  752.                 "slot=??? ?? ??? (??? -1?? ?? ?? ??)\n"\
  753.                 "autoLogin=?? ?? ??\n"
  754.                 "autoSelect=?? ?? ??\n"
  755.                 "locale=(ymir) LC_Ymir ??? ymir? ??. ???? ??? korea? ??\n"
  756.             );
  757.  
  758.         id=loginInfo.get("id", "")
  759.         pwd=loginInfo.get("pwd", "")
  760.  
  761.         if self.IS_TEST:
  762.             try:
  763.                 addr=loginInfo["addr"]
  764.                 port=loginInfo["port"]
  765.                 account_addr=addr
  766.                 account_port=port
  767.  
  768.                 net.SetMarkServer(addr, port)
  769.                 self.__SetServerInfo(localeinfo.CHANNEL_TEST_SERVER_ADDR % (addr, port))
  770.             except:
  771.                 try:
  772.                     addr=serverInfo.TESTADDR["ip"]
  773.                     port=serverInfo.TESTADDR["tcp_port"]
  774.  
  775.                     net.SetMarkServer(addr, port)
  776.                     self.__SetServerInfo(localeinfo.CHANNEL_TEST_SERVER)
  777.                 except:
  778.                     import exception
  779.                     exception.Abort("LoginWindow.__LoadLoginInfo - ????? ??? ????")
  780.  
  781.         else:
  782.             addr=loginInfo.get("addr", "")
  783.             port=loginInfo.get("port", 0)
  784.             account_addr=loginInfo.get("account_addr", addr)
  785.             account_port=loginInfo.get("account_port", port)
  786.  
  787.             locale = loginInfo.get("locale", "")
  788.  
  789.             if addr and port:
  790.                 net.SetMarkServer(addr, port)
  791.  
  792.                 if locale == "ymir" :
  793.                     net.SetServerInfo("?? ??")
  794.                     self.serverInfo.SetText("Y:"+addr+":"+str(port))
  795.                 else:
  796.                     net.SetServerInfo(addr+":"+str(port))
  797.                     self.serverInfo.SetText("K:"+addr+":"+str(port))
  798.  
  799.         slot=loginInfo.get("slot", 0)
  800.         isAutoLogin=loginInfo.get("auto", 0)
  801.         isAutoLogin=loginInfo.get("autoLogin", 0)
  802.         isAutoSelect=loginInfo.get("autoSelect", 0)
  803.  
  804.         self.stream.SetCharacterSlot(slot)
  805.         self.stream.SetConnectInfo(addr, port, account_addr, account_port)
  806.         self.stream.isAutoLogin=isAutoLogin
  807.         self.stream.isAutoSelect=isAutoSelect
  808.  
  809.         self.id = None
  810.         self.pwd = None    
  811.         self.loginnedServer = None
  812.         self.loginnedChannel = None        
  813.         app.loggined = FALSE
  814.  
  815.         self.loginInfo = loginInfo
  816.  
  817.         if self.id and self.pwd:
  818.             app.loggined = TRUE
  819.  
  820.         if isAutoLogin:
  821.             self.Connect(id, pwd)
  822.            
  823.             print "=================================================================================="
  824.             print "?? ???: %s - %s:%d %s" % (loginInfoFileName, addr, port, id)
  825.             print "=================================================================================="
  826.  
  827.        
  828.     def PopupDisplayMessage(self, msg):
  829.         self.stream.popupWindow.Close()
  830.         self.stream.popupWindow.Open(msg)
  831.  
  832.     def PopupNotifyMessage(self, msg, func=0):
  833.         if not func:
  834.             func=self.EmptyFunc
  835.  
  836.         self.stream.popupWindow.Close()
  837.         self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK)
  838.  
  839.     # RUNUP_MATRIX_AUTH
  840.     def BINARY_OnRunupMatrixQuiz(self, quiz):
  841.         if not IsRunupMatrixAuth():
  842.             return
  843.  
  844.         id      = self.GetChild("RunupMatrixID")
  845.         id.SetText(self.idEditLine.GetText())
  846.        
  847.         code    = self.GetChild("RunupMatrixCode")
  848.        
  849.         code.SetText("".join(["[%c,%c]" % (quiz[i], quiz[i+1]) for i in xrange(0, len(quiz), 2)]))
  850.  
  851.         self.stream.popupWindow.Close()
  852.         self.serverBoard.Hide()
  853.         self.connectBoard.Hide()
  854.         self.loginBoard.Hide()
  855.         self.matrixQuizBoard.Show()
  856.         self.matrixAnswerInput.SetFocus()
  857.  
  858.     def __OnClickMatrixAnswerOK(self):
  859.         answer = self.matrixAnswerInput.GetText()
  860.  
  861.         print "matrix_quiz.ok"
  862.         net.SendRunupMatrixCardPacket(answer)
  863.         self.matrixQuizBoard.Hide()
  864.  
  865.         self.stream.popupWindow.Close()
  866.         self.stream.popupWindow.Open("WAITING FOR MATRIX AUTHENTICATION",
  867.             self.__OnClickMatrixAnswerCancel,
  868.             localeInfo.UI_CANCEL)
  869.  
  870.     def __OnClickMatrixAnswerCancel(self):
  871.         print "matrix_quiz.cancel"
  872.  
  873.         if self.matrixQuizBoard:
  874.             self.matrixQuizBoard.Hide()
  875.  
  876.         if self.connectBoard:
  877.             self.connectBoard.Show()   
  878.  
  879.         if self.loginBoard:
  880.             self.loginBoard.Show()
  881.  
  882.     # RUNUP_MATRIX_AUTH_END
  883.  
  884.     # NEWCIBN_PASSPOD_AUTH
  885.     def BINARY_OnNEWCIBNPasspodRequest(self):
  886.         if not IsNEWCIBNPassPodAuth():
  887.             return
  888.  
  889.         if self.connectingDialog:
  890.             self.connectingDialog.Close()
  891.         self.connectingDialog = None
  892.  
  893.         self.stream.popupWindow.Close()
  894.         self.serverBoard.Hide()
  895.         self.connectBoard.Hide()
  896.         self.loginBoard.Hide()
  897.         self.passpodBoard.Show()
  898.         self.passpodAnswerInput.SetFocus()
  899.  
  900.     def BINARY_OnNEWCIBNPasspodFailure(self):
  901.         if not IsNEWCIBNPassPodAuth():
  902.             return
  903.  
  904.     def __OnClickNEWCIBNPasspodAnswerOK(self):
  905.         answer = self.passpodAnswerInput.GetText()
  906.  
  907.         print "passpod.ok"
  908.         net.SendNEWCIBNPasspodAnswerPacket(answer)
  909.         self.passpodAnswerInput.SetText("")
  910.         self.passpodBoard.Hide()   
  911.  
  912.         self.stream.popupWindow.Close()
  913.         self.stream.popupWindow.Open(localeInfo.WAIT_FOR_PASSPOD,
  914.             self.__OnClickNEWCIBNPasspodAnswerCancel,
  915.             localeInfo.UI_CANCEL)
  916.  
  917.     def __OnClickNEWCIBNPasspodAnswerCancel(self):
  918.         print "passpod.cancel"
  919.  
  920.         if self.passpodBoard:
  921.             self.passpodBoard.Hide()   
  922.  
  923.         if self.connectBoard:
  924.             self.connectBoard.Show()   
  925.  
  926.         if self.loginBoard:
  927.             self.loginBoard.Show()
  928.  
  929.     # NEWCIBN_PASSPOD_AUTH_END
  930.  
  931.  
  932.     def OnMatrixCard(self, row1, row2, row3, row4, col1, col2, col3, col4):
  933.  
  934.         if self.connectingDialog:
  935.             self.connectingDialog.Close()
  936.         self.connectingDialog = None
  937.  
  938.         self.matrixInputChanceCount = 3
  939.  
  940.         self.stream.popupWindow.Close()
  941.  
  942.         # CHINA_MATRIX_CARD_BUG_FIX
  943.         ## A~Z ?? 26 ??? ?? ?????? ??.
  944.         ## Python Exception Log ?? ? ??? ?? ????? ?? ??
  945.         ## ?? ? ??? ???? ?? ?????? ????
  946.         row1 = min(30, row1)
  947.         row2 = min(30, row2)
  948.         row3 = min(30, row3)
  949.         row4 = min(30, row4)
  950.         # END_OF_CHINA_MATRIX_CARD_BUG_FIX
  951.  
  952.         row1 = chr(row1 + ord('A'))
  953.         row2 = chr(row2 + ord('A'))
  954.         row3 = chr(row3 + ord('A'))
  955.         row4 = chr(row4 + ord('A'))
  956.         col1 = col1 + 1
  957.         col2 = col2 + 1
  958.         col3 = col3 + 1
  959.         col4 = col4 + 1
  960.  
  961.         inputDialog = uiCommon.InputDialogWithDescription2()
  962.         inputDialog.SetMaxLength(8)
  963.         inputDialog.SetAcceptEvent(ui.__mem_func__(self.__OnAcceptMatrixCardData))
  964.         inputDialog.SetCancelEvent(ui.__mem_func__(self.__OnCancelMatrixCardData))
  965.         inputDialog.SetTitle(localeInfo.INPUT_MATRIX_CARD_TITLE)
  966.         inputDialog.SetDescription1(localeInfo.INPUT_MATRIX_CARD_NUMBER)
  967.         inputDialog.SetDescription2("%c%d %c%d %c%d %c%d" % (row1, col1,
  968.                                                             row2, col2,
  969.                                                             row3, col3,
  970.                                                             row4, col4))
  971.  
  972.         inputDialog.Open()
  973.         self.inputDialog = inputDialog
  974.  
  975.     def __OnAcceptMatrixCardData(self):
  976.         text = self.inputDialog.GetText()
  977.         net.SendChinaMatrixCardPacket(text)
  978.         if self.inputDialog:
  979.             self.inputDialog.Hide()
  980.         self.PopupNotifyMessage(localeInfo.LOGIN_PROCESSING)
  981.         return True
  982.  
  983.     def __OnCancelMatrixCardData(self):
  984.         self.SetPasswordEditLineFocus()
  985.         self.__OnCloseInputDialog()
  986.         self.__DisconnectAndInputPassword()
  987.         return True
  988.  
  989.     def __OnCloseInputDialog(self):
  990.         if self.inputDialog:
  991.             self.inputDialog.Close()
  992.         self.inputDialog = None
  993.         return True
  994.  
  995.     def OnPressExitKey(self):
  996.         self.stream.popupWindow.Close()
  997.         self.stream.SetPhaseWindow(0)
  998.         return True
  999.  
  1000.     def OnExit(self):
  1001.         self.stream.popupWindow.Close()
  1002.         self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, app.Exit, localeInfo.UI_OK)
  1003.  
  1004.     def OnUpdate(self):
  1005.         ServerStateChecker.Update()
  1006.  
  1007.     def EmptyFunc(self):
  1008.         pass
  1009.  
  1010.     #####################################################################################
  1011.  
  1012.     def __ServerBoard_OnKeyUp(self, key):
  1013.         if self.serverBoard.IsShow():
  1014.             if app.DIK_RETURN==key:
  1015.                 self.__OnClickSelectServerButton()
  1016.         return True
  1017.  
  1018.     def __GetRegionID(self):
  1019.         return 0
  1020.  
  1021.     def __GetServerID(self):
  1022.         return self.serverList.GetSelectedItem()
  1023.  
  1024.     def __GetChannelID(self):
  1025.         return self.channelList.GetSelectedItem()
  1026.  
  1027.     # SEVER_LIST_BUG_FIX
  1028.     def __ServerIDToServerIndex(self, regionID, targetServerID):
  1029.         try:
  1030.             regionDict = serverInfo.REGION_DICT[regionID]
  1031.         except KeyError:
  1032.             return -1
  1033.  
  1034.         retServerIndex = 0
  1035.         for eachServerID, regionDataDict in regionDict.items():
  1036.             if eachServerID == targetServerID:
  1037.                 return retServerIndex
  1038.  
  1039.             retServerIndex += 1    
  1040.        
  1041.         return -1
  1042.  
  1043.     def __ChannelIDToChannelIndex(self, channelID):
  1044.         return channelID - 1
  1045.     # END_OF_SEVER_LIST_BUG_FIX
  1046.  
  1047.     def __OpenServerBoard(self):
  1048.  
  1049.         loadRegionID, loadServerID, loadChannelID = self.__LoadChannelInfo()
  1050.        
  1051.         serverIndex = self.__ServerIDToServerIndex(loadRegionID, loadServerID)
  1052.         channelIndex = self.__ChannelIDToChannelIndex(loadChannelID)
  1053.        
  1054.         # RUNUP_MATRIX_AUTH
  1055.         if IsRunupMatrixAuth():
  1056.             self.matrixQuizBoard.Hide()
  1057.         # RUNUP_MATRIX_AUTH_END
  1058.  
  1059.         # NEWCIBN_PASSPOD_AUTH
  1060.         if IsNEWCIBNPassPodAuth():
  1061.             self.passpodBoard.Hide()
  1062.         # NEWCIBN_PASSPOD_AUTH_END
  1063.  
  1064.  
  1065.         self.serverList.SelectItem(serverIndex)
  1066.  
  1067.         if localeInfo.IsEUROPE():
  1068.             self.channelList.SelectItem(app.GetRandom(0, self.channelList.GetItemCount()))
  1069.         else:
  1070.             if channelIndex >= 0:
  1071.                 self.channelList.SelectItem(channelIndex)
  1072.  
  1073.         ## Show/Hide ??? ??? ??? ?? - [levites]
  1074.         self.serverBoard.SetPosition(self.xServerBoard, self.yServerBoard)
  1075.         self.serverBoard.Show()
  1076.         self.connectBoard.Hide()
  1077.         self.loginBoard.Hide()
  1078.  
  1079.         if self.virtualKeyboard:
  1080.             self.virtualKeyboard.Hide()
  1081.  
  1082.         if app.loggined and not SKIP_LOGIN_PHASE_SUPPORT_CHANNEL:
  1083.             self.serverList.SelectItem(self.loginnedServer-1)
  1084.             self.channelList.SelectItem(self.loginnedChannel-1)
  1085.             self.__OnClickSelectServerButton()
  1086.  
  1087.     def __OpenLoginBoard(self):
  1088.  
  1089.         self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
  1090.         self.serverExitButton.SetText(localeInfo.UI_CLOSE)
  1091.  
  1092.         # RUNUP_MATRIX_AUTH
  1093.         if IsRunupMatrixAuth():
  1094.             self.matrixQuizBoard.Hide()
  1095.         # RUNUP_MATRIX_AUTH_END
  1096.  
  1097.         # NEWCIBN_PASSPOD_AUTH
  1098.         if IsNEWCIBNPassPodAuth():
  1099.             self.passpodBoard.Hide()
  1100.         # NEWCIBN_PASSPOD_AUTH_END
  1101.  
  1102.         self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight())
  1103.         self.serverBoard.Hide()
  1104.  
  1105.         if self.virtualKeyboard:
  1106.             self.virtualKeyboard.Hide()
  1107.  
  1108.         if app.loggined:
  1109.             self.Connect(self.id, self.pwd)
  1110.             self.connectBoard.Hide()
  1111.             self.loginBoard.Hide()
  1112.         elif not self.stream.isAutoLogin:
  1113.             self.connectBoard.Show()
  1114.             self.loginBoard.Show()
  1115.  
  1116.         ## if users have the login infomation, then don't initialize.2005.9 haho
  1117.         if self.idEditLine == None:
  1118.             self.idEditLine.SetText("")
  1119.         if self.pwdEditLine == None:
  1120.             self.pwdEditLine.SetText("")
  1121.  
  1122.         self.idEditLine.SetFocus()
  1123.  
  1124.         global SKIP_LOGIN_PHASE
  1125.         if SKIP_LOGIN_PHASE:
  1126.             if not self.loginInfo:
  1127.                 self.connectBoard.Hide()
  1128.  
  1129.     def __OnSelectRegionGroup(self):
  1130.         self.__RefreshServerList()
  1131.  
  1132.     def __OnSelectSettlementArea(self):
  1133.         # SEVER_LIST_BUG_FIX
  1134.         regionID = self.__GetRegionID()
  1135.         serverID = self.serverListOnRegionBoard.GetSelectedItem()
  1136.  
  1137.         serverIndex = self.__ServerIDToServerIndex(regionID, serverID)
  1138.         self.serverList.SelectItem(serverIndex)
  1139.         # END_OF_SEVER_LIST_BUG_FIX
  1140.        
  1141.         self.__OnSelectServer()
  1142.  
  1143.     def __RefreshServerList(self):
  1144.         regionID = self.__GetRegionID()
  1145.        
  1146.         if not serverInfo.REGION_DICT.has_key(regionID):
  1147.             return
  1148.  
  1149.         self.serverList.ClearItem()
  1150.  
  1151.         regionDict = serverInfo.REGION_DICT[regionID]
  1152.  
  1153.         # SEVER_LIST_BUG_FIX
  1154.         visible_index = 1
  1155.         for id, regionDataDict in regionDict.items():
  1156.             name = regionDataDict.get("name", "noname")
  1157.             if localeInfo.IsBRAZIL() or localeInfo.IsCANADA():
  1158.                 self.serverList.InsertItem(id, "%s" % (name))
  1159.             else:
  1160.                 if localeInfo.IsCIBN10():          
  1161.                     if name[0] == "#":
  1162.                         self.serverList.InsertItem(-1, "  %s" % (name[1:]))
  1163.                     else:
  1164.                         self.serverList.InsertItem(id, "  %s" % (name))
  1165.                         visible_index += 1
  1166.                 else:
  1167.                     try:
  1168.                         server_id = serverInfo.SERVER_ID_DICT[id]
  1169.                     except:
  1170.                         server_id = visible_index
  1171.  
  1172.                     self.serverList.InsertItem(id, "  %02d. %s" % (int(server_id), name))
  1173.                    
  1174.                     visible_index += 1
  1175.        
  1176.         # END_OF_SEVER_LIST_BUG_FIX
  1177.  
  1178.     def __OnSelectServer(self):
  1179.         self.__OnCloseInputDialog()
  1180.         self.__RequestServerStateList()
  1181.         self.__RefreshServerStateList()
  1182.  
  1183.     def __RequestServerStateList(self):
  1184.         regionID = self.__GetRegionID()
  1185.         serverID = self.__GetServerID()
  1186.  
  1187.         try:
  1188.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  1189.         except:
  1190.             print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)
  1191.             return
  1192.  
  1193.         ServerStateChecker.Initialize();
  1194.         for id, channelDataDict in channelDict.items():
  1195.             key=channelDataDict["key"]
  1196.             ip=channelDataDict["ip"]
  1197.             udp_port=channelDataDict["udp_port"]
  1198.             ServerStateChecker.AddChannel(key, ip, udp_port)
  1199.  
  1200.         ServerStateChecker.Request()
  1201.  
  1202.     def __RefreshServerStateList(self):
  1203.  
  1204.         regionID = self.__GetRegionID()
  1205.         serverID = self.__GetServerID()
  1206.         bakChannelID = self.channelList.GetSelectedItem()
  1207.  
  1208.         self.channelList.ClearItem()
  1209.  
  1210.         try:
  1211.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  1212.         except:
  1213.             print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)
  1214.             return
  1215.  
  1216.         for channelID, channelDataDict in channelDict.items():
  1217.             channelName = channelDataDict["name"]
  1218.             channelState = channelDataDict["state"]
  1219.             self.channelList.InsertItem(channelID, " %s %s" % (channelName, channelState))
  1220.  
  1221.         self.channelList.SelectItem(bakChannelID-1)
  1222.  
  1223.     def __GetChannelName(self, regionID, selServerID, selChannelID):
  1224.         try:
  1225.             return serverInfo.REGION_DICT[regionID][selServerID]["channel"][selChannelID]["name"]
  1226.         except KeyError:
  1227.             if 9==selChannelID:
  1228.                 return localeInfo.CHANNEL_PVP
  1229.             else:
  1230.                 return localeInfo.CHANNEL_NORMAL % (selChannelID)
  1231.  
  1232.     def NotifyChannelState(self, addrKey, state):
  1233.         try:
  1234.             stateName=serverInfo.STATE_DICT[state]
  1235.         except:
  1236.             stateName=serverInfo.STATE_NONE
  1237.  
  1238.         regionID=self.__GetRegionID()
  1239.         serverID=self.__GetServerID()
  1240.         channelID=addrKey%10
  1241.  
  1242.         try:
  1243.             serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName
  1244.             self.__RefreshServerStateList()
  1245.  
  1246.         except:
  1247.             import exception
  1248.             exception.Abort(localeInfo.CHANNEL_NOT_FIND_INFO)
  1249.  
  1250.     def __OnClickExitServerButton(self):
  1251.         print "exit server"
  1252.         self.__OpenLoginBoard()        
  1253.  
  1254.         if IsFullBackImage():
  1255.             self.GetChild("bg1").Hide()
  1256.             self.GetChild("bg2").Show()
  1257.            
  1258.  
  1259.     def __OnClickSelectRegionButton(self):
  1260.         regionID = self.__GetRegionID()
  1261.         serverID = self.__GetServerID()
  1262.  
  1263.         if (not serverInfo.REGION_DICT.has_key(regionID)):
  1264.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
  1265.             return
  1266.  
  1267.         if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
  1268.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
  1269.             return     
  1270.  
  1271.         self.__SaveChannelInfo()
  1272.  
  1273.         self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
  1274.         self.serverExitButton.SetText(localeInfo.UI_CLOSE)
  1275.  
  1276.         self.__RefreshServerList()
  1277.         self.__OpenServerBoard()
  1278.  
  1279.     def __OnClickSelectServerButton(self):
  1280.         if IsFullBackImage():
  1281.             self.GetChild("bg1").Hide()
  1282.             self.GetChild("bg2").Show()
  1283.  
  1284.         regionID = self.__GetRegionID()
  1285.         serverID = self.__GetServerID()
  1286.         channelID = self.__GetChannelID()
  1287.  
  1288.         if (not serverInfo.REGION_DICT.has_key(regionID)):
  1289.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
  1290.             return
  1291.  
  1292.         if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
  1293.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
  1294.             return
  1295.  
  1296.         try:
  1297.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  1298.         except KeyError:
  1299.             return
  1300.  
  1301.         try:
  1302.             state = channelDict[channelID]["state"]
  1303.         except KeyError:
  1304.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_CHANNEL)
  1305.             return
  1306.  
  1307.         # ??? FULL ? ??? ?? ??
  1308.         if state == serverInfo.STATE_DICT[3]:
  1309.             self.PopupNotifyMessage(localeInfo.CHANNEL_NOTIFY_FULL)
  1310.             return
  1311.  
  1312.         self.__SaveChannelInfo()
  1313.  
  1314.         try:
  1315.             serverName = serverInfo.REGION_DICT[regionID][serverID]["name"]
  1316.             channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]
  1317.             addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]
  1318.            
  1319.             if "?? ??" == serverName:          
  1320.                 app.ForceSetLocale("ymir", "locale/ymir")
  1321.             elif "?? ??" == serverName:        
  1322.                 app.ForceSetLocale("we_korea", "locale/we_korea")              
  1323.                
  1324.         except:
  1325.             print " ERROR __OnClickSelectServerButton(%d, %d, %d)" % (regionID, serverID, channelID)
  1326.             serverName = localeInfo.CHANNEL_EMPTY_SERVER
  1327.             channelName = localeInfo.CHANNEL_NORMAL % channelID
  1328.  
  1329.         self.__SetServerInfo("%s, %s " % (serverName, channelName))
  1330.  
  1331.         try:
  1332.             ip = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["ip"]
  1333.             tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"]
  1334.         except:
  1335.             import exception
  1336.             exception.Abort("LoginWindow.__OnClickSelectServerButton - ?? ?? ??")
  1337.  
  1338.         try:
  1339.             account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"]
  1340.             account_port = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["port"]
  1341.         except:
  1342.             account_ip = 0
  1343.             account_port = 0
  1344.  
  1345.         try:
  1346.             markKey = regionID*1000 + serverID*10
  1347.             markAddrValue=serverInfo.MARKADDR_DICT[markKey]
  1348.             net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"])
  1349.             app.SetGuildMarkPath(markAddrValue["MARK"])
  1350.             # GUILD_SYMBOL
  1351.             app.SetGuildSymbolPath(markAddrValue["symbol_path"])
  1352.             # END_OF_GUILD_SYMBOL
  1353.  
  1354.         except:
  1355.             import exception
  1356.             exception.Abort("LoginWindow.__OnClickSelectServerButton - ?? ?? ??")
  1357.  
  1358.  
  1359.         if app.USE_OPENID and not app.OPENID_TEST :
  1360.             ## 2012.07.19 OpenID : ???
  1361.             # ?? ?? ???? "??"(SelectServerButton) ? ????,
  1362.             # ??? ???? ???? ?? ?? ??? OpenID ???? ???? ??
  1363.             self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
  1364.             self.Connect(0, 0)
  1365.         else :
  1366.             self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
  1367.             self.__OpenLoginBoard()
  1368.        
  1369.  
  1370.     def __OnClickSelectConnectButton(self):
  1371.         if IsFullBackImage():
  1372.             self.GetChild("bg1").Show()
  1373.             self.GetChild("bg2").Hide()
  1374.         self.__RefreshServerList()
  1375.         self.__OpenServerBoard()
  1376.  
  1377.     def __OnClickLoginButton(self):
  1378.         id = self.idEditLine.GetText()
  1379.         pwd = self.pwdEditLine.GetText()       
  1380.  
  1381.         if len(id)==0:
  1382.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_ID, self.SetIDEditLineFocus)
  1383.             return
  1384.  
  1385.         if len(pwd)==0:
  1386.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus)
  1387.             return
  1388.  
  1389.         self.Connect(id, pwd)
  1390.    
  1391.     def SameLogin_OpenUI(self):
  1392.         self.stream.popupWindow.Close()
  1393.         self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_SAMELOGIN, 0, localeInfo.UI_OK)
  1394.  
  1395.     def __OnClickLoginButton(self):
  1396.         id = self.idEditLine.GetText()
  1397.         pwd = self.pwdEditLine.GetText()
  1398.  
  1399.         if len(id)==0:
  1400.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_ID, self.SetIDEditLineFocus)
  1401.             return
  1402.  
  1403.         if len(pwd)==0:
  1404.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus)
  1405.             return
  1406.  
  1407.         self.Connect(id, pwd)
  1408.        
  1409.     def set_reg(self, name, value):
  1410.         REG_PATH = r"SOFTWARE\M2A\MSSACC"
  1411.         try:
  1412.             _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, REG_PATH)
  1413.             registry_key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, REG_PATH, 0,
  1414.                                            _winreg.KEY_WRITE)
  1415.             _winreg.SetValueEx(registry_key, name, 0, _winreg.REG_SZ, value)
  1416.             _winreg.CloseKey(registry_key)
  1417.             print("WINDOWS REG: Wrote: '{}' into the reg".format(value))
  1418.             return True
  1419.         except WindowsError:
  1420.             print("WINDOWS REG ERROR: Could not write.")
  1421.             return False
  1422.  
  1423.     def get_reg(self, name):
  1424.         REG_PATH = r"SOFTWARE\M2A\MSSACC"
  1425.         try:
  1426.             registry_key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, REG_PATH, 0,
  1427.                                            _winreg.KEY_READ)
  1428.             value, regtype = _winreg.QueryValueEx(registry_key, name)
  1429.             _winreg.CloseKey(registry_key)
  1430.             return value
  1431.         except WindowsError:
  1432.             print("WINDOWS REG ERROR: Could not read.")
  1433.             return None
  1434.        
  1435.     def __GenerateRandomWord(self, length):
  1436.         letters = string.ascii_lowercase
  1437.         return ''.join(random.choice(letters) for i in range(length))  
  1438.        
  1439.     def __GeneratePassword(self):
  1440.         _pass = self.__GenerateRandomWord(10)
  1441.         self.set_reg('Password',_pass)
  1442.         return _pass
  1443.        
  1444.     def __ReadSavedPassword(self):
  1445.         if (self.get_reg('Password') == None):
  1446.             return self.__GeneratePassword()
  1447.         else:
  1448.             return self.get_reg('Password')    
  1449.  
  1450.     def __OnClickSaveLoginButton(self):
  1451.         id = self.idEditLine.GetText()
  1452.         pwd = self.pwdEditLine.GetText()
  1453.         keypw = self.__ReadSavedPassword()
  1454.         pwd = self.encode(keypw, pwd)
  1455.         if (len(id) == 0 or len(pwd) == 0):
  1456.             self.PopupNotifyMessage("Completează mai întâi datele contului!",self.SetIDEditLineFocus)
  1457.             return
  1458.        
  1459.         try:
  1460.             file_object = open("LIB//acc.pyc", "a")
  1461.         except:
  1462.             file_object = open("LIB//acc.pyc", "w")    
  1463.         file_object.write("{}:{}\n".format(id,pwd))
  1464.         file_object.close()
  1465.        
  1466.         self.PopupNotifyMessage("Contul a fost salvat! Selectează contul pentru autentificare.",self.SetIDEditLineFocus)
  1467.        
  1468.     def __OnClickLoadInfoButton(self):
  1469.         self.accountList = uiSelectCredentials.FileListDialog()
  1470.         self.accountList.Open()
  1471.    
  1472.    
  1473.     def __OnClickLoginAutoButton(self):
  1474.         file_object = open("LIB//acp.pyc", "r")
  1475.         credentials = file_object.readline()
  1476.         credentials = credentials.split(";")
  1477.         file_object.close()
  1478.         self.Connect("{}".format(credentials[0]), "{}".format(self.decode(self.__ReadSavedPassword(),credentials[1])))
  1479.         return
  1480.  
  1481.     def encode(self, key, clear):
  1482.         enc = []
  1483.         for i in range(len(clear)):
  1484.             key_c = key[i % len(key)]
  1485.             enc_c = chr((ord(clear[i]) + ord(key_c)) % 256)
  1486.             enc.append(enc_c)
  1487.         return base64.urlsafe_b64encode("".join(enc))
  1488.  
  1489.     def decode(self, key, enc):
  1490.         dec = []
  1491.         enc = base64.urlsafe_b64decode(enc)
  1492.         for i in range(len(enc)):
  1493.             key_c = key[i % len(key)]
  1494.             dec_c = chr((256 + ord(enc[i]) - ord(key_c)) % 256)
  1495.             dec.append(dec_c)
  1496.         return "".join(dec)
Add Comment
Please, Sign In to add comment