Advertisement
RawTrand

Untitled

Feb 29th, 2020
657
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 os
  20. import sys
  21. import string
  22. from _winreg import *
  23.  
  24. RUNUP_MATRIX_AUTH = False
  25. NEWCIBN_PASSPOD_AUTH = False
  26.  
  27. LOGIN_DELAY_SEC = 0.0
  28. SKIP_LOGIN_PHASE = False
  29. SKIP_LOGIN_PHASE_SUPPORT_CHANNEL = False
  30. FULL_BACK_IMAGE = False
  31.  
  32. PASSPOD_MSG_DICT = {}
  33.  
  34. VIRTUAL_KEYBOARD_NUM_KEYS = 46
  35. VIRTUAL_KEYBOARD_RAND_KEY = True
  36.  
  37. def Suffle(src):
  38.     if VIRTUAL_KEYBOARD_RAND_KEY:
  39.         items = [item for item in src]
  40.  
  41.         itemCount = len(items)
  42.         for oldPos in xrange(itemCount):
  43.             newPos = app.GetRandom(0, itemCount-1)
  44.             items[newPos], items[oldPos] = items[oldPos], items[newPos]
  45.  
  46.         return "".join(items)
  47.     else:
  48.         return src
  49.  
  50. if localeInfo.IsNEWCIBN() or localeInfo.IsCIBN10():
  51.     LOGIN_DELAY_SEC = 20.0
  52.     FULL_BACK_IMAGE = True
  53.     NEWCIBN_PASSPOD_AUTH = True
  54.     PASSPOD_MSG_DICT = {
  55.         "PASERR1"   : localeInfo.LOGIN_FAILURE_PASERR1,
  56.         "PASERR2"   : localeInfo.LOGIN_FAILURE_PASERR2,
  57.         "PASERR3"   : localeInfo.LOGIN_FAILURE_PASERR3,
  58.         "PASERR4"   : localeInfo.LOGIN_FAILURE_PASERR4,
  59.         "PASERR5"   : localeInfo.LOGIN_FAILURE_PASERR5,
  60.     }
  61.  
  62. elif localeInfo.IsYMIR() or localeInfo.IsCHEONMA():
  63.     FULL_BACK_IMAGE = True
  64.  
  65. elif localeInfo.IsHONGKONG():
  66.     FULL_BACK_IMAGE = True
  67.     RUNUP_MATRIX_AUTH = True
  68.     PASSPOD_MSG_DICT = {
  69.         "NOTELE"    : localeInfo.LOGIN_FAILURE_NOTELEBLOCK,
  70.     }
  71.  
  72. elif localeInfo.IsJAPAN():
  73.     FULL_BACK_IMAGE = True
  74.  
  75. elif localeInfo.IsBRAZIL():
  76.     LOGIN_DELAY_SEC = 0.0
  77.  
  78. def IsFullBackImage():
  79.     global FULL_BACK_IMAGE
  80.     return FULL_BACK_IMAGE
  81.  
  82. def IsLoginDelay():
  83.     global LOGIN_DELAY_SEC
  84.     if LOGIN_DELAY_SEC > 0.0:
  85.         return True
  86.     else:
  87.         return False
  88.  
  89. def IsRunupMatrixAuth():
  90.     global RUNUP_MATRIX_AUTH
  91.     return RUNUP_MATRIX_AUTH
  92.  
  93. def IsNEWCIBNPassPodAuth():
  94.     global NEWCIBN_PASSPOD_AUTH
  95.     return NEWCIBN_PASSPOD_AUTH
  96.  
  97. def GetLoginDelay():
  98.     global LOGIN_DELAY_SEC
  99.     return LOGIN_DELAY_SEC
  100.  
  101. app.SetGuildMarkPath("test")
  102.  
  103. class ConnectingDialog(ui.ScriptWindow):
  104.  
  105.     def __init__(self):
  106.         ui.ScriptWindow.__init__(self)
  107.         self.__LoadDialog()
  108.         self.eventTimeOver = lambda *arg: None
  109.         self.eventExit = lambda *arg: None
  110.  
  111.     def __del__(self):
  112.         ui.ScriptWindow.__del__(self)
  113.  
  114.     def __LoadDialog(self):
  115.         try:
  116.             PythonScriptLoader = ui.PythonScriptLoader()
  117.             PythonScriptLoader.LoadScriptFile(self, "UIScript/ConnectingDialog.py")
  118.  
  119.             self.board = self.GetChild("board")
  120.             self.message = self.GetChild("message")
  121.             self.countdownMessage = self.GetChild("countdown_message")
  122.  
  123.         except:
  124.             import exception
  125.             exception.Abort("ConnectingDialog.LoadDialog.BindObject")
  126.  
  127.     def Open(self, waitTime):
  128.         curTime = time.clock()
  129.         self.endTime = curTime + waitTime
  130.  
  131.         self.Lock()
  132.         self.SetCenterPosition()
  133.         self.SetTop()
  134.         self.Show()
  135.  
  136.     def Close(self):
  137.         self.Unlock()
  138.         self.Hide()
  139.  
  140.     def Destroy(self):
  141.         self.Hide()
  142.         self.ClearDictionary()
  143.  
  144.     def SetText(self, text):
  145.         self.message.SetText(text)
  146.  
  147.     def SetCountDownMessage(self, waitTime):
  148.         self.countdownMessage.SetText("%.0f%s" % (waitTime, localeInfo.SECOND))
  149.  
  150.     def SAFE_SetTimeOverEvent(self, event):
  151.         self.eventTimeOver = ui.__mem_func__(event)
  152.  
  153.     def SAFE_SetExitEvent(self, event):
  154.         self.eventExit = ui.__mem_func__(event)
  155.  
  156.     def OnUpdate(self):
  157.         lastTime = max(0, self.endTime - time.clock())
  158.         if 0 == lastTime:
  159.             self.Close()
  160.             self.eventTimeOver()
  161.         else:
  162.             self.SetCountDownMessage(self.endTime - time.clock())
  163.  
  164.     def OnPressExitKey(self):
  165.         #self.eventExit()
  166.         return True
  167.  
  168. class LoginWindow(ui.ScriptWindow):
  169.  
  170.     IS_TEST = net.IsTest()
  171.  
  172.     def __init__(self, stream):
  173.         print "NEW LOGIN WINDOW  ----------------------------------------------------------------------------"
  174.         ui.ScriptWindow.__init__(self)
  175.         net.SetPhaseWindow(net.PHASE_WINDOW_LOGIN, self)
  176.         net.SetAccountConnectorHandler(self)
  177.  
  178.         self.matrixInputChanceCount = 0
  179.         self.lastLoginTime = 0
  180.         self.inputDialog = None
  181.         self.connectingDialog = None
  182.         self.stream=stream
  183.         self.isNowCountDown=False
  184.         self.isStartError=False
  185.  
  186.         self.xServerBoard = 0
  187.         self.yServerBoard = 0
  188.  
  189.         self.loadingImage = None
  190.  
  191.         self.virtualKeyboard = None
  192.         self.virtualKeyboardMode = "ALPHABET"
  193.         self.virtualKeyboardIsUpper = False
  194.  
  195.         # fix
  196.         self.timeOutMsg = 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.             "YMIR_WORK" : "Sterge d://ymir work !",
  229.             "VERSION"   : "Versiune incorecta! Ruleaza patcherul.",
  230.         }
  231.  
  232.         self.loginFailureFuncDict = {
  233.             "WRONGPWD"  : self.__DisconnectAndInputPassword,
  234.             "WRONGMAT"  : self.__DisconnectAndInputMatrix,
  235.             "QUIT"      : app.Exit,
  236.         }
  237.  
  238.         self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
  239.         self.SetWindowName("LoginWindow")
  240.  
  241.         if not self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "LoginWindow.py"):
  242.             dbg.TraceError("LoginWindow.Open - __LoadScript Error")
  243.             return
  244.  
  245.         self.__LoadLoginInfo("loginInfo.xml")
  246.  
  247.         if app.loggined:
  248.             self.loginFailureFuncDict = {
  249.             "WRONGPWD"  : app.Exit,
  250.             "WRONGMAT"  : app.Exit,
  251.             "QUIT"      : app.Exit,
  252.             }
  253.  
  254.         if musicInfo.loginMusic != "":
  255.             snd.SetMusicVolume(systemSetting.GetMusicVolume())
  256.             snd.FadeInMusic("BGM/"+musicInfo.loginMusic)
  257.  
  258.         snd.SetSoundVolume(systemSetting.GetSoundVolume())
  259.  
  260.         # pevent key "[" "]"
  261.         ime.AddExceptKey(91)
  262.         ime.AddExceptKey(93)
  263.  
  264.         self.Show()
  265.  
  266.         global SKIP_LOGIN_PHASE
  267.         if SKIP_LOGIN_PHASE:
  268.             if self.isStartError:
  269.                 self.connectBoard.Hide()
  270.                 self.loginBoard.Hide()
  271.                 self.serverBoard.Hide()
  272.                 self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)
  273.                 return
  274.  
  275.             if self.loginInfo:
  276.                 self.serverBoard.Hide()
  277.             else:
  278.                 self.__RefreshServerList()
  279.                 self.__OpenServerBoard()
  280.         else:
  281.             connectingIP = self.stream.GetConnectAddr()
  282.             if connectingIP:
  283.                 if app.USE_OPENID and not app.OPENID_TEST :
  284.                     self.__RefreshServerList()
  285.                     self.__OpenServerBoard()
  286.                 else:
  287.                     self.__OpenLoginBoard()
  288.                     if IsFullBackImage():
  289.                         self.GetChild("bg1").Hide()
  290.                         self.GetChild("bg2").Show()
  291.  
  292.             else:
  293.                 self.__RefreshServerList()
  294.                 self.__OpenServerBoard()
  295.  
  296.         app.ShowCursor()
  297.  
  298.     def Close(self):
  299.  
  300.         if self.connectingDialog:
  301.             self.connectingDialog.Close()
  302.         self.connectingDialog = None
  303.  
  304.         ServerStateChecker.Initialize(self)
  305.  
  306.         print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW "
  307.         #
  308.         # selectMusic이 없으면 BGM이 끊기므로 두개 다 체크한다.
  309.         #
  310.         if musicInfo.loginMusic != "" and musicInfo.selectMusic != "":
  311.             snd.FadeOutMusic("BGM/"+musicInfo.loginMusic)
  312.  
  313.         ## NOTE : idEditLine와 pwdEditLine은 이벤트가 서로 연결 되어있어서
  314.         ##        Event를 강제로 초기화 해주어야만 합니다 - [levites]
  315.         self.idEditLine.SetTabEvent(0)
  316.         self.idEditLine.SetReturnEvent(0)
  317.         self.pwdEditLine.SetReturnEvent(0)
  318.         self.pwdEditLine.SetTabEvent(0)
  319.  
  320.         self.connectBoard = None
  321.         self.loginBoard = None
  322.         self.idEditLine = None
  323.         self.pwdEditLine = None
  324.         self.inputDialog = None
  325.         self.connectingDialog = None
  326.         self.loadingImage = None
  327.  
  328.         self.serverBoard                = None
  329.         self.serverList                 = None
  330.         self.channelList                = None
  331.  
  332.         # RUNUP_MATRIX_AUTH
  333.         self.matrixQuizBoard    = None
  334.         self.matrixAnswerInput  = None
  335.         self.matrixAnswerOK = None
  336.         self.matrixAnswerCancel = None
  337.         # RUNUP_MATRIX_AUTH_END
  338.  
  339.         # NEWCIBN_PASSPOD_AUTH
  340.         self.passpodBoard   = None
  341.         self.passpodAnswerInput = None
  342.         self.passpodAnswerOK    = None
  343.         self.passpodAnswerCancel = None
  344.         # NEWCIBN_PASSPOD_AUTH_END
  345.  
  346.         self.VIRTUAL_KEY_ALPHABET_LOWERS = None
  347.         self.VIRTUAL_KEY_ALPHABET_UPPERS = None
  348.         self.VIRTUAL_KEY_SYMBOLS = None
  349.         self.VIRTUAL_KEY_NUMBERS = None
  350.  
  351.         # VIRTUAL_KEYBOARD_BUG_FIX
  352.         if self.virtualKeyboard:
  353.             for keyIndex in xrange(0, VIRTUAL_KEYBOARD_NUM_KEYS+1):
  354.                 key = self.GetChild2("key_%d" % keyIndex)
  355.                 if key:
  356.                     key.SetEvent(None)
  357.  
  358.             self.GetChild("key_space").SetEvent(None)
  359.             self.GetChild("key_backspace").SetEvent(None)
  360.             self.GetChild("key_enter").SetEvent(None)
  361.             self.GetChild("key_shift").SetToggleDownEvent(None)
  362.             self.GetChild("key_shift").SetToggleUpEvent(None)
  363.             self.GetChild("key_at").SetToggleDownEvent(None)
  364.             self.GetChild("key_at").SetToggleUpEvent(None)
  365.  
  366.             self.virtualKeyboard = None
  367.  
  368.         self.KillFocus()
  369.         self.Hide()
  370.  
  371.         self.stream.popupWindow.Close()
  372.         self.loginFailureFuncDict=None
  373.  
  374.         ime.ClearExceptKey()
  375.  
  376.         app.HideCursor()
  377.  
  378.     def __SaveChannelInfo(self):
  379.         try:
  380.             file=old_open("channel.inf", "w")
  381.             file.write("%d %d %d" % (self.__GetServerID(), self.__GetChannelID(), self.__GetRegionID()))
  382.         except:
  383.             print "LoginWindow.__SaveChannelInfo - SaveError"
  384.  
  385.     def __LoadChannelInfo(self):
  386.         try:
  387.             file=old_open("channel.inf")
  388.             lines=file.readlines()
  389.  
  390.             if len(lines)>0:
  391.                 tokens=lines[0].split()
  392.  
  393.                 selServerID=int(tokens[0])
  394.                 selChannelID=int(tokens[1])
  395.  
  396.                 if len(tokens) == 3:
  397.                     regionID = int(tokens[2])
  398.  
  399.                 return regionID, selServerID, selChannelID
  400.  
  401.         except:
  402.             print "LoginWindow.__LoadChannelInfo - OpenError"
  403.             return -1, -1, -1
  404.  
  405.     def __ExitGame(self):
  406.         app.Exit()
  407.  
  408.     def SetIDEditLineFocus(self):
  409.         if self.idEditLine != None:
  410.             self.idEditLine.SetFocus()
  411.  
  412.     def SetPasswordEditLineFocus(self):
  413.         if constInfo.ENABLE_CLEAN_DATA_IF_FAIL_LOGIN:
  414.             if self.idEditLine != None: #0000862: [M2EU] 로그인창 팝업 에러: 종료시 먼저 None 설정됨
  415.                 self.idEditLine.SetText("")
  416.                 self.idEditLine.SetFocus() #0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 아이디로 포커스가 가게 만든다
  417.  
  418.             if self.pwdEditLine != None: #0000862: [M2EU] 로그인창 팝업 에러: 종료시 먼저 None 설정됨
  419.                 self.pwdEditLine.SetText("")
  420.         else:
  421.             if self.pwdEditLine != None:
  422.                 self.pwdEditLine.SetFocus()
  423.  
  424.     def OnEndCountDown(self):
  425.         self.isNowCountDown = False
  426.         if localeInfo.IsBRAZIL():
  427.             self.timeOutMsg = True
  428.         else:
  429.             self.timeOutMsg = False
  430.         self.OnConnectFailure()
  431.  
  432.     def OnConnectFailure(self):
  433.  
  434.         if self.isNowCountDown:
  435.             return
  436.  
  437.         snd.PlaySound("sound/ui/loginfail.wav")
  438.  
  439.         if self.connectingDialog:
  440.             self.connectingDialog.Close()
  441.         self.connectingDialog = None
  442.  
  443.         if app.loggined:
  444.             self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)
  445.         elif self.timeOutMsg:
  446.             self.PopupNotifyMessage(localeInfo.LOGIN_FAILURE_TIMEOUT, self.SetPasswordEditLineFocus)
  447.         else:
  448.             self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.SetPasswordEditLineFocus)
  449.  
  450.     def OnHandShake(self):
  451.         if not IsLoginDelay():
  452.             snd.PlaySound("sound/ui/loginok.wav")
  453.             self.PopupDisplayMessage(localeInfo.LOGIN_CONNECT_SUCCESS)
  454.  
  455.     def OnLoginStart(self):
  456.         if not IsLoginDelay():
  457.             self.PopupDisplayMessage(localeInfo.LOGIN_PROCESSING)
  458.  
  459.     def OnLoginFailure(self, error):
  460.         if self.connectingDialog:
  461.             self.connectingDialog.Close()
  462.         self.connectingDialog = None
  463.  
  464.         try:
  465.             loginFailureMsg = self.loginFailureMsgDict[error]
  466.         except KeyError:
  467.             if PASSPOD_MSG_DICT:
  468.                 try:
  469.                     loginFailureMsg = PASSPOD_MSG_DICT[error]
  470.                 except KeyError:
  471.                     loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + error
  472.             else:
  473.                 loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN  + error
  474.  
  475.  
  476.         #0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 패스워드로 포커스가 가게 만든다
  477.         loginFailureFunc=self.loginFailureFuncDict.get(error, self.SetPasswordEditLineFocus)
  478.  
  479.         if app.loggined:
  480.             self.PopupNotifyMessage(loginFailureMsg, self.__ExitGame)
  481.         else:
  482.             self.PopupNotifyMessage(loginFailureMsg, loginFailureFunc)
  483.  
  484.         snd.PlaySound("sound/ui/loginfail.wav")
  485.  
  486.     def __DisconnectAndInputID(self):
  487.         if self.connectingDialog:
  488.             self.connectingDialog.Close()
  489.         self.connectingDialog = None
  490.  
  491.         self.SetIDEditLineFocus()
  492.         net.Disconnect()
  493.  
  494.     def __DisconnectAndInputPassword(self):
  495.         if self.connectingDialog:
  496.             self.connectingDialog.Close()
  497.         self.connectingDialog = None
  498.  
  499.         self.SetPasswordEditLineFocus()
  500.         net.Disconnect()
  501.  
  502.     def __DisconnectAndInputMatrix(self):
  503.         if self.connectingDialog:
  504.             self.connectingDialog.Close()
  505.         self.connectingDialog = None
  506.  
  507.         self.stream.popupWindow.Close()
  508.         self.matrixInputChanceCount -= 1
  509.  
  510.         if self.matrixInputChanceCount <= 0:
  511.             self.__OnCloseInputDialog()
  512.  
  513.         elif self.inputDialog:
  514.             self.inputDialog.Show()
  515.  
  516.     def __LoadScript(self, fileName):
  517.         import dbg
  518.         try:
  519.             pyScrLoader = ui.PythonScriptLoader()
  520.             pyScrLoader.LoadScriptFile(self, fileName)
  521.         except:
  522.             import exception
  523.             exception.Abort("LoginWindow.__LoadScript.LoadObject")
  524.         try:
  525.             GetObject=self.GetChild
  526.             self.serverBoard            = GetObject("ServerBoard")
  527.             self.serverList             = GetObject("ServerList")
  528.             self.channelList            = GetObject("ChannelList")
  529.             self.serverSelectButton     = GetObject("ServerSelectButton")
  530.             self.serverExitButton       = GetObject("ServerExitButton")
  531.             self.connectBoard           = GetObject("ConnectBoard")
  532.             self.loginBoard             = GetObject("LoginBoard")
  533.             self.idEditLine             = GetObject("ID_EditLine")
  534.             self.pwdEditLine            = GetObject("Password_EditLine")
  535.             self.serverInfo             = GetObject("ConnectName")
  536.             self.selectConnectButton    = GetObject("SelectConnectButton")
  537.             self.loginButton            = GetObject("LoginButton")
  538.             self.loginExitButton        = GetObject("LoginExitButton")
  539.             self.ButonSalvare           = GetObject("ButonSalvareDate")
  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.ButonSalvare.SetEvent(ui.__mem_func__(self.__ApasareButonSalvare))
  600.  
  601.         self.serverList.SetEvent(ui.__mem_func__(self.__OnSelectServer))
  602.  
  603.         self.idEditLine.SetReturnEvent(ui.__mem_func__(self.pwdEditLine.SetFocus))
  604.         self.idEditLine.SetTabEvent(ui.__mem_func__(self.pwdEditLine.SetFocus))
  605.  
  606.         self.pwdEditLine.SetReturnEvent(ui.__mem_func__(self.__OnClickLoginButton))
  607.         self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus))
  608.  
  609.         # RUNUP_MATRIX_AUTH
  610.         if IsRunupMatrixAuth():
  611.             self.matrixAnswerOK.SAFE_SetEvent(self.__OnClickMatrixAnswerOK)
  612.             self.matrixAnswerCancel.SAFE_SetEvent(self.__OnClickMatrixAnswerCancel)
  613.             self.matrixAnswerInput.SAFE_SetReturnEvent(self.__OnClickMatrixAnswerOK)
  614.         # RUNUP_MATRIX_AUTH_END
  615.  
  616.         # NEWCIBN_PASSPOD_AUTH
  617.         if IsNEWCIBNPassPodAuth():
  618.             self.passpodAnswerOK.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerOK)
  619.             self.passpodAnswerCancel.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerCancel)
  620.             self.passpodAnswerInput.SAFE_SetReturnEvent(self.__OnClickNEWCIBNPasspodAnswerOK)
  621.  
  622.         # NEWCIBN_PASSPOD_AUTH_END
  623.  
  624.  
  625.         if IsFullBackImage():
  626.             self.GetChild("bg1").Show()
  627.             self.GetChild("bg2").Hide()
  628.         return 1
  629.  
  630.     def __VirtualKeyboard_SetKeys(self, keyCodes):
  631.         uiDefFontBackup = localeInfo.UI_DEF_FONT
  632.         localeInfo.UI_DEF_FONT = localeInfo.UI_DEF_FONT_LARGE
  633.  
  634.         keyIndex = 1
  635.         for keyCode in keyCodes:
  636.             key = self.GetChild2("key_%d" % keyIndex)
  637.             if key:
  638.                 key.SetEvent(lambda x=keyCode: self.__VirtualKeyboard_PressKey(x))
  639.                 key.SetText(keyCode)
  640.                 key.ButtonText.SetFontColor(0, 0, 0)
  641.                 keyIndex += 1
  642.  
  643.         for keyIndex in xrange(keyIndex, VIRTUAL_KEYBOARD_NUM_KEYS+1):
  644.             key = self.GetChild2("key_%d" % keyIndex)
  645.             if key:
  646.                 key.SetEvent(lambda x=' ': self.__VirtualKeyboard_PressKey(x))
  647.                 key.SetText(' ')
  648.  
  649.         localeInfo.UI_DEF_FONT = uiDefFontBackup
  650.  
  651.     def __VirtualKeyboard_PressKey(self, code):
  652.         ime.PasteString(code)
  653.  
  654.         #if self.virtualKeyboardMode == "ALPHABET" and self.virtualKeyboardIsUpper:
  655.         #   self.__VirtualKeyboard_SetLowerMode()
  656.  
  657.     def __VirtualKeyboard_PressBackspace(self):
  658.         ime.PasteBackspace()
  659.  
  660.     def __VirtualKeyboard_PressReturn(self):
  661.         ime.PasteReturn()
  662.  
  663.     def __VirtualKeyboard_SetUpperMode(self):
  664.         self.virtualKeyboardIsUpper = True
  665.  
  666.         if self.virtualKeyboardMode == "ALPHABET":
  667.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_UPPERS)
  668.         elif self.virtualKeyboardMode == "NUMBER":
  669.             if localeInfo.IsBRAZIL():
  670.                 self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  671.             else:
  672.                 self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  673.         else:
  674.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  675.  
  676.     def __VirtualKeyboard_SetLowerMode(self):
  677.         self.virtualKeyboardIsUpper = False
  678.  
  679.         if self.virtualKeyboardMode == "ALPHABET":
  680.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)
  681.         elif self.virtualKeyboardMode == "NUMBER":
  682.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  683.         else:
  684.             if localeInfo.IsBRAZIL():
  685.                 self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  686.             else:
  687.                 self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  688.  
  689.     def __VirtualKeyboard_SetAlphabetMode(self):
  690.         self.virtualKeyboardIsUpper = False
  691.         self.virtualKeyboardMode = "ALPHABET"
  692.         self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)
  693.  
  694.     def __VirtualKeyboard_SetNumberMode(self):
  695.         self.virtualKeyboardIsUpper = False
  696.         self.virtualKeyboardMode = "NUMBER"
  697.         self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  698.  
  699.     def __VirtualKeyboard_SetSymbolMode(self):
  700.         self.virtualKeyboardIsUpper = False
  701.         self.virtualKeyboardMode = "SYMBOL"
  702.         if localeInfo.IsBRAZIL():
  703.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  704.         else:
  705.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  706.  
  707.     def Connect(self, id, pwd):
  708.         import os
  709.         if os.path.exists('D:\\ymir work'):
  710.             self.OnLoginFailure("YMIR_WORK")
  711.             return
  712.                
  713.         if constInfo.SEQUENCE_PACKET_ENABLE:
  714.             net.SetPacketSequenceMode()
  715.  
  716.         if IsLoginDelay():
  717.             loginDelay = GetLoginDelay()
  718.             self.connectingDialog = ConnectingDialog()
  719.             self.connectingDialog.Open(loginDelay)
  720.             self.connectingDialog.SAFE_SetTimeOverEvent(self.OnEndCountDown)
  721.             self.connectingDialog.SAFE_SetExitEvent(self.OnPressExitKey)
  722.             self.isNowCountDown = True
  723.  
  724.         else:
  725.             self.stream.popupWindow.Close()
  726.             self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.SetPasswordEditLineFocus, localeInfo.UI_CANCEL)
  727.  
  728.         self.stream.SetLoginInfo(id, pwd)
  729.         self.stream.Connect()
  730.  
  731.     def __OnClickExitButton(self):
  732.         self.stream.SetPhaseWindow(0)
  733.  
  734.     def __SetServerInfo(self, name):
  735.         net.SetServerInfo(name.strip())
  736.         self.serverInfo.SetText(name)
  737.  
  738.     def __LoadLoginInfo(self, loginInfoFileName):
  739.         def getValue(element, name, default):
  740.             if [] != element.getElementsByTagName(name):
  741.                 return element.getElementsByTagName(name).item(0).firstChild.nodeValue
  742.             else:
  743.                 return default
  744.  
  745.         self.id = None
  746.         self.pwd = None
  747.         self.loginnedServer = None
  748.         self.loginnedChannel = None
  749.         app.loggined = False
  750.  
  751.         self.loginInfo = True
  752.  
  753.         from xml.dom.minidom import parse
  754.         try:
  755.             f = old_open(loginInfoFileName, "r")
  756.             dom = parse(f)
  757.         except:
  758.             return
  759.         serverLst = dom.getElementsByTagName("server")
  760.         if [] != dom.getElementsByTagName("logininfo"):
  761.             logininfo = dom.getElementsByTagName("logininfo")[0]
  762.         else:
  763.             return
  764.  
  765.         try:
  766.             server_name = logininfo.getAttribute("name")
  767.             channel_idx = int(logininfo.getAttribute("channel_idx"))
  768.         except:
  769.             return
  770.  
  771.         try:
  772.             matched = False
  773.  
  774.             for k, v in serverInfo.REGION_DICT[0].iteritems():
  775.                 if v["name"] == server_name:
  776.                     account_addr = serverInfo.REGION_AUTH_SERVER_DICT[0][k]["ip"]
  777.                     account_port = serverInfo.REGION_AUTH_SERVER_DICT[0][k]["port"]
  778.  
  779.                     channel_info = v["channel"][channel_idx]
  780.                     channel_name = channel_info["name"]
  781.                     addr = channel_info["ip"]
  782.                     port = channel_info["tcp_port"]
  783.  
  784.                     net.SetMarkServer(addr, port)
  785.                     self.stream.SetConnectInfo(addr, port, account_addr, account_port)
  786.  
  787.                     matched = True
  788.                     break
  789.  
  790.             if False == matched:
  791.                 return
  792.         except:
  793.             return
  794.  
  795.         self.__SetServerInfo("%s, %s " % (server_name, channel_name))
  796.         id = getValue(logininfo, "id", "")
  797.         pwd = getValue(logininfo, "pwd", "")
  798.         self.idEditLine.SetText(id)
  799.         self.pwdEditLine.SetText(pwd)
  800.         slot = getValue(logininfo, "slot", "0")
  801.         locale = getValue(logininfo, "locale", "")
  802.         locale_dir = getValue(logininfo, "locale_dir", "")
  803.         is_auto_login = int(getValue(logininfo, "auto_login", "0"))
  804.  
  805.         self.stream.SetCharacterSlot(int(slot))
  806.         self.stream.isAutoLogin=is_auto_login
  807.         self.stream.isAutoSelect=is_auto_login
  808.  
  809.         if locale and locale_dir:
  810.             app.ForceSetLocale(locale, locale_dir)
  811.  
  812.         if 0 != is_auto_login:
  813.             self.Connect(id, pwd)
  814.  
  815.         return
  816.  
  817.  
  818.     def PopupDisplayMessage(self, msg):
  819.         self.stream.popupWindow.Close()
  820.         self.stream.popupWindow.Open(msg)
  821.  
  822.     def PopupNotifyMessage(self, msg, func=0):
  823.         if not func:
  824.             func=self.EmptyFunc
  825.  
  826.         self.stream.popupWindow.Close()
  827.         self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK)
  828.  
  829.     # RUNUP_MATRIX_AUTH
  830.     def BINARY_OnRunupMatrixQuiz(self, quiz):
  831.         if not IsRunupMatrixAuth():
  832.             return
  833.  
  834.         id      = self.GetChild("RunupMatrixID")
  835.         id.SetText(self.idEditLine.GetText())
  836.  
  837.         code    = self.GetChild("RunupMatrixCode")
  838.  
  839.         code.SetText("".join(["[%c,%c]" % (quiz[i], quiz[i+1]) for i in xrange(0, len(quiz), 2)]))
  840.  
  841.         self.stream.popupWindow.Close()
  842.         self.serverBoard.Hide()
  843.         self.connectBoard.Hide()
  844.         self.loginBoard.Hide()
  845.         self.matrixQuizBoard.Show()
  846.         self.matrixAnswerInput.SetFocus()
  847.         self.__ObtinereDateSalvate()
  848.  
  849.     def __OnClickMatrixAnswerOK(self):
  850.         answer = self.matrixAnswerInput.GetText()
  851.  
  852.         print "matrix_quiz.ok"
  853.         net.SendRunupMatrixCardPacket(answer)
  854.         self.matrixQuizBoard.Hide()
  855.  
  856.         self.stream.popupWindow.Close()
  857.         self.stream.popupWindow.Open("WAITING FOR MATRIX AUTHENTICATION",
  858.             self.__OnClickMatrixAnswerCancel,
  859.             localeInfo.UI_CANCEL)
  860.  
  861.     def __OnClickMatrixAnswerCancel(self):
  862.         print "matrix_quiz.cancel"
  863.  
  864.         if self.matrixQuizBoard:
  865.             self.matrixQuizBoard.Hide()
  866.  
  867.         if self.connectBoard:
  868.             self.connectBoard.Show()
  869.  
  870.         if self.loginBoard:
  871.             self.loginBoard.Show()
  872.  
  873.     # RUNUP_MATRIX_AUTH_END
  874.  
  875.     # NEWCIBN_PASSPOD_AUTH
  876.     def BINARY_OnNEWCIBNPasspodRequest(self):
  877.         if not IsNEWCIBNPassPodAuth():
  878.             return
  879.  
  880.         if self.connectingDialog:
  881.             self.connectingDialog.Close()
  882.         self.connectingDialog = None
  883.  
  884.         self.stream.popupWindow.Close()
  885.         self.serverBoard.Hide()
  886.         self.connectBoard.Hide()
  887.         self.loginBoard.Hide()
  888.         self.passpodBoard.Show()
  889.         self.passpodAnswerInput.SetFocus()
  890.  
  891.     def BINARY_OnNEWCIBNPasspodFailure(self):
  892.         if not IsNEWCIBNPassPodAuth():
  893.             return
  894.  
  895.     def __OnClickNEWCIBNPasspodAnswerOK(self):
  896.         answer = self.passpodAnswerInput.GetText()
  897.  
  898.         print "passpod.ok"
  899.         net.SendNEWCIBNPasspodAnswerPacket(answer)
  900.         self.passpodAnswerInput.SetText("")
  901.         self.passpodBoard.Hide()
  902.  
  903.         self.stream.popupWindow.Close()
  904.         self.stream.popupWindow.Open(localeInfo.WAIT_FOR_PASSPOD,
  905.             self.__OnClickNEWCIBNPasspodAnswerCancel,
  906.             localeInfo.UI_CANCEL)
  907.  
  908.     def __OnClickNEWCIBNPasspodAnswerCancel(self):
  909.         print "passpod.cancel"
  910.  
  911.         if self.passpodBoard:
  912.             self.passpodBoard.Hide()
  913.  
  914.         if self.connectBoard:
  915.             self.connectBoard.Show()
  916.  
  917.         if self.loginBoard:
  918.             self.loginBoard.Show()
  919.  
  920.     # NEWCIBN_PASSPOD_AUTH_END
  921.  
  922.  
  923.     def OnMatrixCard(self, row1, row2, row3, row4, col1, col2, col3, col4):
  924.  
  925.         if self.connectingDialog:
  926.             self.connectingDialog.Close()
  927.         self.connectingDialog = None
  928.  
  929.         self.matrixInputChanceCount = 3
  930.  
  931.         self.stream.popupWindow.Close()
  932.  
  933.         # CHINA_MATRIX_CARD_BUG_FIX
  934.         ## A~Z 까지 26 이내의 값이 들어있어야만 한다.
  935.         ## Python Exception Log 에서 그 이상의 값이 들어있어서 에러 방지
  936.         ## 헌데 왜 한국쪽 로그에서 이게 활용되는지는 모르겠음
  937.         row1 = min(30, row1)
  938.         row2 = min(30, row2)
  939.         row3 = min(30, row3)
  940.         row4 = min(30, row4)
  941.         # END_OF_CHINA_MATRIX_CARD_BUG_FIX
  942.  
  943.         row1 = chr(row1 + ord('A'))
  944.         row2 = chr(row2 + ord('A'))
  945.         row3 = chr(row3 + ord('A'))
  946.         row4 = chr(row4 + ord('A'))
  947.         col1 = col1 + 1
  948.         col2 = col2 + 1
  949.         col3 = col3 + 1
  950.         col4 = col4 + 1
  951.  
  952.         inputDialog = uiCommon.InputDialogWithDescription2()
  953.         inputDialog.SetMaxLength(8)
  954.         inputDialog.SetAcceptEvent(ui.__mem_func__(self.__OnAcceptMatrixCardData))
  955.         inputDialog.SetCancelEvent(ui.__mem_func__(self.__OnCancelMatrixCardData))
  956.         inputDialog.SetTitle(localeInfo.INPUT_MATRIX_CARD_TITLE)
  957.         inputDialog.SetDescription1(localeInfo.INPUT_MATRIX_CARD_NUMBER)
  958.         inputDialog.SetDescription2("%c%d %c%d %c%d %c%d" % (row1, col1,
  959.                                                             row2, col2,
  960.                                                             row3, col3,
  961.                                                             row4, col4))
  962.  
  963.         inputDialog.Open()
  964.         self.inputDialog = inputDialog
  965.  
  966.     def __OnAcceptMatrixCardData(self):
  967.         text = self.inputDialog.GetText()
  968.         net.SendChinaMatrixCardPacket(text)
  969.         if self.inputDialog:
  970.             self.inputDialog.Hide()
  971.         self.PopupNotifyMessage(localeInfo.LOGIN_PROCESSING)
  972.         return True
  973.  
  974.     def __OnCancelMatrixCardData(self):
  975.         self.SetPasswordEditLineFocus()
  976.         self.__OnCloseInputDialog()
  977.         self.__DisconnectAndInputPassword()
  978.         return True
  979.  
  980.     def __OnCloseInputDialog(self):
  981.         if self.inputDialog:
  982.             self.inputDialog.Close()
  983.         self.inputDialog = None
  984.         return True
  985.  
  986.     def OnPressExitKey(self):
  987.         self.stream.popupWindow.Close()
  988.         self.stream.SetPhaseWindow(0)
  989.         return True
  990.  
  991.     def OnExit(self):
  992.         self.stream.popupWindow.Close()
  993.         self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, app.Exit, localeInfo.UI_OK)
  994.  
  995.     def OnUpdate(self):
  996.         ServerStateChecker.Update()
  997.  
  998.     def EmptyFunc(self):
  999.         pass
  1000.  
  1001.     #####################################################################################
  1002.  
  1003.     def __ServerBoard_OnKeyUp(self, key):
  1004.         if self.serverBoard.IsShow():
  1005.             if app.DIK_RETURN==key:
  1006.                 self.__OnClickSelectServerButton()
  1007.         return True
  1008.  
  1009.     def __GetRegionID(self):
  1010.         return 0
  1011.  
  1012.     def __GetServerID(self):
  1013.         return self.serverList.GetSelectedItem()
  1014.  
  1015.     def __GetChannelID(self):
  1016.         return self.channelList.GetSelectedItem()
  1017.  
  1018.     # SEVER_LIST_BUG_FIX
  1019.     def __ServerIDToServerIndex(self, regionID, targetServerID):
  1020.         try:
  1021.             regionDict = serverInfo.REGION_DICT[regionID]
  1022.         except KeyError:
  1023.             return -1
  1024.  
  1025.         retServerIndex = 0
  1026.         for eachServerID, regionDataDict in regionDict.items():
  1027.             if eachServerID == targetServerID:
  1028.                 return retServerIndex
  1029.  
  1030.             retServerIndex += 1
  1031.  
  1032.         return -1
  1033.  
  1034.     def __ChannelIDToChannelIndex(self, channelID):
  1035.         return channelID - 1
  1036.     # END_OF_SEVER_LIST_BUG_FIX
  1037.  
  1038.     def __OpenServerBoard(self):
  1039.  
  1040.         loadRegionID, loadServerID, loadChannelID = self.__LoadChannelInfo()
  1041.  
  1042.         serverIndex = self.__ServerIDToServerIndex(loadRegionID, loadServerID)
  1043.         channelIndex = self.__ChannelIDToChannelIndex(loadChannelID)
  1044.  
  1045.         # RUNUP_MATRIX_AUTH
  1046.         if IsRunupMatrixAuth():
  1047.             self.matrixQuizBoard.Hide()
  1048.         # RUNUP_MATRIX_AUTH_END
  1049.  
  1050.         # NEWCIBN_PASSPOD_AUTH
  1051.         if IsNEWCIBNPassPodAuth():
  1052.             self.passpodBoard.Hide()
  1053.         # NEWCIBN_PASSPOD_AUTH_END
  1054.  
  1055.  
  1056.         self.serverList.SelectItem(serverIndex)
  1057.  
  1058.         if constInfo.ENABLE_RANDOM_CHANNEL_SEL:
  1059.             self.channelList.SelectItem(app.GetRandom(0, self.channelList.GetItemCount()))
  1060.         else:
  1061.             if channelIndex >= 0:
  1062.                 self.channelList.SelectItem(channelIndex)
  1063.  
  1064.         ## Show/Hide 코드에 문제가 있어서 임시 - [levites]
  1065.         self.serverBoard.SetPosition(self.xServerBoard, self.yServerBoard)
  1066.         self.serverBoard.Show()
  1067.         self.connectBoard.Hide()
  1068.         self.loginBoard.Hide()
  1069.  
  1070.         if self.virtualKeyboard:
  1071.             self.virtualKeyboard.Hide()
  1072.  
  1073.         if app.loggined and not SKIP_LOGIN_PHASE_SUPPORT_CHANNEL:
  1074.             self.serverList.SelectItem(self.loginnedServer-1)
  1075.             self.channelList.SelectItem(self.loginnedChannel-1)
  1076.             self.__OnClickSelectServerButton()
  1077.  
  1078.     def __OpenLoginBoard(self):
  1079.  
  1080.         self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
  1081.         self.serverExitButton.SetText(localeInfo.UI_CLOSE)
  1082.  
  1083.         # RUNUP_MATRIX_AUTH
  1084.         if IsRunupMatrixAuth():
  1085.             self.matrixQuizBoard.Hide()
  1086.         # RUNUP_MATRIX_AUTH_END
  1087.  
  1088.         # NEWCIBN_PASSPOD_AUTH
  1089.         if IsNEWCIBNPassPodAuth():
  1090.             self.passpodBoard.Hide()
  1091.         # NEWCIBN_PASSPOD_AUTH_END
  1092.  
  1093.         self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight())
  1094.         self.serverBoard.Hide()
  1095.  
  1096.         if self.virtualKeyboard:
  1097.             self.virtualKeyboard.Hide()
  1098.  
  1099.         if app.loggined:
  1100.             self.Connect(self.id, self.pwd)
  1101.             self.connectBoard.Hide()          
  1102.             self.loginBoard.Hide()
  1103.         elif not self.stream.isAutoLogin:
  1104.             self.connectBoard.Show()
  1105.             self.loginBoard.Show()            
  1106.  
  1107.         ## if users have the login infomation, then don't initialize.2005.9 haho
  1108.         if self.idEditLine == None:
  1109.             self.idEditLine.SetText("")
  1110.         if self.pwdEditLine == None:
  1111.             self.pwdEditLine.SetText("")
  1112.  
  1113.         self.idEditLine.SetFocus()
  1114.  
  1115.         global SKIP_LOGIN_PHASE
  1116.         if SKIP_LOGIN_PHASE:
  1117.             if not self.loginInfo:
  1118.                 self.connectBoard.Hide()
  1119.                
  1120.         self.__ObtinereDateSalvate()                
  1121.  
  1122.     def __OnSelectRegionGroup(self):
  1123.         self.__RefreshServerList()
  1124.  
  1125.     def __OnSelectSettlementArea(self):
  1126.         # SEVER_LIST_BUG_FIX
  1127.         regionID = self.__GetRegionID()
  1128.         serverID = self.serverListOnRegionBoard.GetSelectedItem()
  1129.  
  1130.         serverIndex = self.__ServerIDToServerIndex(regionID, serverID)
  1131.         self.serverList.SelectItem(serverIndex)
  1132.         # END_OF_SEVER_LIST_BUG_FIX
  1133.  
  1134.         self.__OnSelectServer()
  1135.  
  1136.     def __RefreshServerList(self):
  1137.         regionID = self.__GetRegionID()
  1138.  
  1139.         if not serverInfo.REGION_DICT.has_key(regionID):
  1140.             return
  1141.  
  1142.         self.serverList.ClearItem()
  1143.  
  1144.         regionDict = serverInfo.REGION_DICT[regionID]
  1145.  
  1146.         # SEVER_LIST_BUG_FIX
  1147.         visible_index = 1
  1148.         for id, regionDataDict in regionDict.items():
  1149.             name = regionDataDict.get("name", "noname")
  1150.             if localeInfo.IsBRAZIL() or localeInfo.IsCANADA():
  1151.                 self.serverList.InsertItem(id, "%s" % (name))
  1152.             else:
  1153.                 if localeInfo.IsCIBN10():
  1154.                     if name[0] == "#":
  1155.                         self.serverList.InsertItem(-1, "  %s" % (name[1:]))
  1156.                     else:
  1157.                         self.serverList.InsertItem(id, "  %s" % (name))
  1158.                         visible_index += 1
  1159.                 else:
  1160.                     try:
  1161.                         server_id = serverInfo.SERVER_ID_DICT[id]
  1162.                     except:
  1163.                         server_id = visible_index
  1164.  
  1165.                     self.serverList.InsertItem(id, "  %02d. %s" % (int(server_id), name))
  1166.  
  1167.                     visible_index += 1
  1168.  
  1169.         # END_OF_SEVER_LIST_BUG_FIX
  1170.  
  1171.     def __OnSelectServer(self):
  1172.         self.__OnCloseInputDialog()
  1173.         self.__RequestServerStateList()
  1174.         self.__RefreshServerStateList()
  1175.  
  1176.     def __RequestServerStateList(self):
  1177.         regionID = self.__GetRegionID()
  1178.         serverID = self.__GetServerID()
  1179.  
  1180.         try:
  1181.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  1182.         except:
  1183.             print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)
  1184.             return
  1185.  
  1186.         ServerStateChecker.Initialize();
  1187.         for id, channelDataDict in channelDict.items():
  1188.             key=channelDataDict["key"]
  1189.             ip=channelDataDict["ip"]
  1190.             udp_port=channelDataDict["udp_port"]
  1191.             ServerStateChecker.AddChannel(key, ip, udp_port)
  1192.  
  1193.         ServerStateChecker.Request()
  1194.  
  1195.     def __RefreshServerStateList(self):
  1196.  
  1197.         regionID = self.__GetRegionID()
  1198.         serverID = self.__GetServerID()
  1199.         bakChannelID = self.channelList.GetSelectedItem()
  1200.  
  1201.         self.channelList.ClearItem()
  1202.  
  1203.         try:
  1204.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  1205.         except:
  1206.             print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)
  1207.             return
  1208.  
  1209.         for channelID, channelDataDict in channelDict.items():
  1210.             channelName = channelDataDict["name"]
  1211.             channelState = channelDataDict["state"]
  1212.             self.channelList.InsertItem(channelID, " %s %s" % (channelName, channelState))
  1213.  
  1214.         self.channelList.SelectItem(bakChannelID-1)
  1215.  
  1216.     def __GetChannelName(self, regionID, selServerID, selChannelID):
  1217.         try:
  1218.             return serverInfo.REGION_DICT[regionID][selServerID]["channel"][selChannelID]["name"]
  1219.         except KeyError:
  1220.             if 9==selChannelID:
  1221.                 return localeInfo.CHANNEL_PVP
  1222.             else:
  1223.                 return localeInfo.CHANNEL_NORMAL % (selChannelID)
  1224.  
  1225.     def NotifyChannelState(self, addrKey, state):
  1226.         try:
  1227.             stateName=serverInfo.STATE_DICT[state]
  1228.         except:
  1229.             stateName=serverInfo.STATE_NONE
  1230.  
  1231.         regionID=int(addrKey/1000)
  1232.         serverID=int(addrKey/10) % 100
  1233.         channelID=addrKey%10
  1234.  
  1235.         try:
  1236.             serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName
  1237.             self.__RefreshServerStateList()
  1238.  
  1239.         except:
  1240.             import exception
  1241.             exception.Abort(localeInfo.CHANNEL_NOT_FIND_INFO)
  1242.  
  1243.     def __OnClickExitServerButton(self):
  1244.         print "exit server"
  1245.         self.__OpenLoginBoard()
  1246.  
  1247.         if IsFullBackImage():
  1248.             self.GetChild("bg1").Hide()
  1249.             self.GetChild("bg2").Show()
  1250.  
  1251.  
  1252.     def __OnClickSelectRegionButton(self):
  1253.         regionID = self.__GetRegionID()
  1254.         serverID = self.__GetServerID()
  1255.  
  1256.         if (not serverInfo.REGION_DICT.has_key(regionID)):
  1257.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
  1258.             return
  1259.  
  1260.         if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
  1261.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
  1262.             return
  1263.  
  1264.         self.__SaveChannelInfo()
  1265.  
  1266.         self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
  1267.         self.serverExitButton.SetText(localeInfo.UI_CLOSE)
  1268.  
  1269.         self.__RefreshServerList()
  1270.         self.__OpenServerBoard()
  1271.  
  1272.     def __OnClickSelectServerButton(self):
  1273.         if IsFullBackImage():
  1274.             self.GetChild("bg1").Hide()
  1275.             self.GetChild("bg2").Show()
  1276.  
  1277.         regionID = self.__GetRegionID()
  1278.         serverID = self.__GetServerID()
  1279.         channelID = self.__GetChannelID()
  1280.  
  1281.         if (not serverInfo.REGION_DICT.has_key(regionID)):
  1282.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
  1283.             return
  1284.  
  1285.         if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
  1286.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
  1287.             return
  1288.  
  1289.         try:
  1290.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  1291.         except KeyError:
  1292.             return
  1293.  
  1294.         try:
  1295.             state = channelDict[channelID]["state"]
  1296.         except KeyError:
  1297.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_CHANNEL)
  1298.             return
  1299.  
  1300.         # 상태가 FULL 과 같으면 진입 금지
  1301.         if state == serverInfo.STATE_DICT[3]:
  1302.             self.PopupNotifyMessage(localeInfo.CHANNEL_NOTIFY_FULL)
  1303.             return
  1304.  
  1305.         self.__SaveChannelInfo()
  1306.  
  1307.         try:
  1308.             serverName = serverInfo.REGION_DICT[regionID][serverID]["name"]
  1309.             channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]
  1310.             addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]
  1311.  
  1312.             if "천마 서버" == serverName:
  1313.                 app.ForceSetLocale("ymir", "locale/ymir")
  1314.             elif "쾌도 서버" == serverName:
  1315.                 app.ForceSetLocale("we_korea", "locale/we_korea")
  1316.  
  1317.         except:
  1318.             print " ERROR __OnClickSelectServerButton(%d, %d, %d)" % (regionID, serverID, channelID)
  1319.             serverName = localeInfo.CHANNEL_EMPTY_SERVER
  1320.             channelName = localeInfo.CHANNEL_NORMAL % channelID
  1321.  
  1322.         self.__SetServerInfo("%s, %s " % (serverName, channelName))
  1323.  
  1324.         try:
  1325.             ip = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["ip"]
  1326.             tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"]
  1327.         except:
  1328.             import exception
  1329.             exception.Abort("LoginWindow.__OnClickSelectServerButton - 서버 선택 실패")
  1330.  
  1331.         try:
  1332.             account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"]
  1333.             account_port = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["port"]
  1334.         except:
  1335.             account_ip = 0
  1336.             account_port = 0
  1337.  
  1338.         try:
  1339.             markKey = regionID*1000 + serverID*10
  1340.             markAddrValue=serverInfo.MARKADDR_DICT[markKey]
  1341.             net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"])
  1342.             app.SetGuildMarkPath(markAddrValue["mark"])
  1343.             # GUILD_SYMBOL
  1344.             app.SetGuildSymbolPath(markAddrValue["symbol_path"])
  1345.             # END_OF_GUILD_SYMBOL
  1346.  
  1347.         except:
  1348.             import exception
  1349.             exception.Abort("LoginWindow.__OnClickSelectServerButton - 마크 정보 없음")
  1350.  
  1351.  
  1352.         if app.USE_OPENID and not app.OPENID_TEST :
  1353.             ## 2012.07.19 OpenID : 김용욱
  1354.             # 채널 선택 화면에서 "확인"(SelectServerButton) 을 눌렀을때,
  1355.             # 로그인 화면으로 넘어가지 않고 바로 서버에 OpenID 인증키를 보내도록 수정
  1356.             self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
  1357.             self.Connect(0, 0)
  1358.         else :
  1359.             self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
  1360.             self.__OpenLoginBoard()
  1361.  
  1362.  
  1363.     def __OnClickSelectConnectButton(self):
  1364.         if IsFullBackImage():
  1365.             self.GetChild("bg1").Show()
  1366.             self.GetChild("bg2").Hide()
  1367.         self.__RefreshServerList()
  1368.         self.__OpenServerBoard()
  1369.  
  1370.     def __OnClickLoginButton(self):
  1371.         id = self.idEditLine.GetText()
  1372.         pwd = self.pwdEditLine.GetText()
  1373.  
  1374.         if len(id)==0:
  1375.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_ID, self.SetIDEditLineFocus)
  1376.             return
  1377.  
  1378.         if len(pwd)==0:
  1379.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus)
  1380.             return
  1381.  
  1382.         self.Connect(id, pwd)
  1383.  
  1384.     def __ApasareButonSalvare(self):  
  1385.         id = self.idEditLine.GetText()
  1386.         parola = self.pwdEditLine.GetText()
  1387.         self.__SalvareDateCont(id, parola)
  1388.  
  1389.     def __SalvareDateCont(self, id, parola):
  1390.         try:
  1391.             id_criptat = self.__Criptare(id).replace(' ', '-')
  1392.             parola_criptata = self.__Criptare(parola).replace(' ', '-')
  1393.             Registru = ConnectRegistry(None, HKEY_CURRENT_USER)
  1394.             Cheie = CreateKey(Registru, "Software\\Metin2.Party\\")
  1395.             SetValueEx(Cheie, "utilizator", 0, REG_SZ, id_criptat)
  1396.             SetValueEx(Cheie, "parola", 0, REG_SZ, parola_criptata)
  1397.             CloseKey(Cheie)
  1398.             CloseKey(Registru)
  1399.             self.PopupNotifyMessage("Datele de logare au fost salvate.")
  1400.         except:
  1401.             self.PopupNotifyMessage("A aparut o eroare la salvarea datelor.")
  1402.             return
  1403.            
  1404.     def __ObtinereDateSalvate(self):
  1405.         try:   
  1406.             id_criptat = os.popen('reg QUERY "HKEY_CURRENT_USER\software\Metin2.Party" /v utilizator').readlines()
  1407.             id_criptat_s = id_criptat[2].split()
  1408.             valoare_id_criptat = id_criptat_s[2].replace('-', ' ').strip()
  1409.             parola_criptata = os.popen('reg QUERY "HKEY_CURRENT_USER\software\Metin2.Party" /v parola').readlines()
  1410.             parola_criptata_s = parola_criptata[2].split()
  1411.             valoare_parola_criptata = parola_criptata_s[2].replace('-', ' ').strip()
  1412.  
  1413.             self.idEditLine.SetText(self.__Decriptare(valoare_id_criptat))
  1414.             self.pwdEditLine.SetText(self.__Decriptare(valoare_parola_criptata))
  1415.         except:
  1416.             print "LoginWindow.__LoadAccountInfo - OpenError"
  1417.             return -1, -1
  1418.  
  1419.     def __Criptare(self, data_necriptata):
  1420.         Registru = ConnectRegistry(None, HKEY_CURRENT_USER)
  1421.         try:
  1422.             Cheie = OpenKey(Registru, "software\\Metin2.Party\\")
  1423.         except WindowsError:
  1424.             try:
  1425.                 numar1 = app.GetRandom(1,127)
  1426.                 numar2 = app.GetRandom(1,32768)
  1427.                 Cheie = CreateKey(Registru, "software\\Metin2.Party\\")
  1428.                 SetValueEx(Cheie, "numar1", 0, REG_DWORD, numar1)
  1429.                 SetValueEx(Cheie, "numar2", 0, REG_DWORD, numar2)
  1430.                 CloseKey(Cheie)
  1431.                 CloseKey(Registru)
  1432.             except:
  1433.                 CloseKey(Registru)
  1434.                 return
  1435.                
  1436.         numar1 = os.popen('reg QUERY "HKEY_CURRENT_USER\software\Metin2.Party" /v numar1').readlines()
  1437.         numar1_s = numar1[2].split()
  1438.         valoare_numar1 = int(numar1_s[2], 16)
  1439.         numar2 = os.popen('reg QUERY "HKEY_CURRENT_USER\software\Metin2.Party" /v numar2').readlines()
  1440.         numar2_s = numar2[2].split()
  1441.         valoare_numar2 = int(numar2_s[2], 16)
  1442.  
  1443.         cuvant = data_necriptata
  1444.         data_criptata = ''
  1445.         for l in cuvant:
  1446.             data_criptata = data_criptata+str(int(ord(l) + valoare_numar1) * valoare_numar2)+' '
  1447.            
  1448.         return data_criptata
  1449.        
  1450.     def __Decriptare(self, data_criptata):
  1451.         Registru = ConnectRegistry(None, HKEY_CURRENT_USER)
  1452.         try:
  1453.             Cheie = OpenKey(Registru, "software\\Metin2.Party\\")
  1454.         except WindowsError:
  1455.             CloseKey(Registru)
  1456.             return
  1457.            
  1458.         CloseKey(Cheie)
  1459.         CloseKey(Registru)
  1460.         numar1 = os.popen('reg QUERY "HKEY_CURRENT_USER\software\Metin2.Party" /v numar1').readlines()
  1461.         numar1_s = numar1[2].split()
  1462.         valoare_numar1 = int(numar1_s[2], 16)
  1463.         numar2 = os.popen('reg QUERY "HKEY_CURRENT_USER\software\Metin2.Party" /v numar2').readlines()
  1464.         numar2_s = numar2[2].split()
  1465.         valoare_numar2 = int(numar2_s[2], 16)
  1466.        
  1467.         cuvant = data_criptata
  1468.         data_necriptata = ''
  1469.         cuvant1 = cuvant.split()
  1470.         for l in cuvant1:
  1471.             data_necriptata = data_necriptata+chr((int(l) / valoare_numar2) - valoare_numar1)
  1472.            
  1473.         return data_necriptata
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement