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. RUNUP_MATRIX_AUTH = False
  20. NEWCIBN_PASSPOD_AUTH = False
  21. LOGIN_DELAY_SEC = 0.0
  22. SKIP_LOGIN_PHASE = False
  23. SKIP_LOGIN_PHASE_SUPPORT_CHANNEL = False
  24. FULL_BACK_IMAGE = False
  25. PASSPOD_MSG_DICT = {}
  26. VIRTUAL_KEYBOARD_NUM_KEYS = 46
  27. VIRTUAL_KEYBOARD_RAND_KEY = True
  28. def Suffle(src):
  29. if VIRTUAL_KEYBOARD_RAND_KEY:
  30. items = [item for item in src]
  31. itemCount = len(items)
  32. for oldPos in xrange(itemCount):
  33. newPos = app.GetRandom(0, itemCount-1)
  34. items[newPos], items[oldPos] = items[oldPos], items[newPos]
  35. return "".join(items)
  36. else:
  37. return src
  38. if localeInfo.IsNEWCIBN() or localeInfo.IsCIBN10():
  39. LOGIN_DELAY_SEC = 60.0
  40. FULL_BACK_IMAGE = True
  41. NEWCIBN_PASSPOD_AUTH = True
  42. PASSPOD_MSG_DICT = {
  43. "PASERR1" : localeInfo.LOGIN_FAILURE_PASERR1,
  44. "PASERR2" : localeInfo.LOGIN_FAILURE_PASERR2,
  45. "PASERR3" : localeInfo.LOGIN_FAILURE_PASERR3,
  46. "PASERR4" : localeInfo.LOGIN_FAILURE_PASERR4,
  47. "PASERR5" : localeInfo.LOGIN_FAILURE_PASERR5,
  48. }
  49. elif localeInfo.IsYMIR() or localeInfo.IsCHEONMA():
  50. FULL_BACK_IMAGE = True
  51. elif localeInfo.IsHONGKONG():
  52. FULL_BACK_IMAGE = True
  53. RUNUP_MATRIX_AUTH = True
  54. PASSPOD_MSG_DICT = {
  55. "NOTELE" : localeInfo.LOGIN_FAILURE_NOTELEBLOCK,
  56. }
  57. elif localeInfo.IsJAPAN():
  58. FULL_BACK_IMAGE = True
  59. elif localeInfo.IsBRAZIL():
  60. LOGIN_DELAY_SEC = 60.0
  61. def IsFullBackImage():
  62. global FULL_BACK_IMAGE
  63. return FULL_BACK_IMAGE
  64. def IsLoginDelay():
  65. global LOGIN_DELAY_SEC
  66. if LOGIN_DELAY_SEC > 0.0:
  67. return True
  68. else:
  69. return False
  70. def IsRunupMatrixAuth():
  71. global RUNUP_MATRIX_AUTH
  72. return RUNUP_MATRIX_AUTH
  73. def IsNEWCIBNPassPodAuth():
  74. global NEWCIBN_PASSPOD_AUTH
  75. return NEWCIBN_PASSPOD_AUTH
  76. def GetLoginDelay():
  77. global LOGIN_DELAY_SEC
  78. return LOGIN_DELAY_SEC
  79. app.SetGuildMarkPath("test")
  80. class ConnectingDialog(ui.ScriptWindow):
  81. def __init__(self):
  82. ui.ScriptWindow.__init__(self)
  83. self.__LoadDialog()
  84. self.eventTimeOver = lambda *arg: None
  85. self.eventExit = lambda *arg: None
  86. def __del__(self):
  87. ui.ScriptWindow.__del__(self)
  88. def __LoadDialog(self):
  89. try:
  90. PythonScriptLoader = ui.PythonScriptLoader()
  91. PythonScriptLoader.LoadScriptFile(self, "UIScript/ConnectingDialog.py")
  92. self.board = self.GetChild("board")
  93. self.message = self.GetChild("message")
  94. self.countdownMessage = self.GetChild("countdown_message")
  95. except:
  96. import exception
  97. exception.Abort("ConnectingDialog.LoadDialog.BindObject")
  98. def Open(self, waitTime):
  99. curTime = time.clock()
  100. self.endTime = curTime + waitTime
  101. self.Lock()
  102. self.SetCenterPosition()
  103. self.SetTop()
  104. self.Show()
  105. def Close(self):
  106. self.Unlock()
  107. self.Hide()
  108. def Destroy(self):
  109. self.Hide()
  110. self.ClearDictionary()
  111. def SetText(self, text):
  112. self.message.SetText(text)
  113. def SetCountDownMessage(self, waitTime):
  114. self.countdownMessage.SetText("%.0f%s" % (waitTime, localeInfo.SECOND))
  115. def SAFE_SetTimeOverEvent(self, event):
  116. self.eventTimeOver = ui.__mem_func__(event)
  117. def SAFE_SetExitEvent(self, event):
  118. self.eventExit = ui.__mem_func__(event)
  119. def OnUpdate(self):
  120. lastTime = max(0, self.endTime - time.clock())
  121. if 0 == lastTime:
  122. self.Close()
  123. self.eventTimeOver()
  124. else:
  125. self.SetCountDownMessage(self.endTime - time.clock())
  126. def OnPressExitKey(self):
  127. #self.eventExit()
  128. return True
  129. class LoginWindow(ui.ScriptWindow):
  130. IS_TEST = net.IsTest()
  131. def __init__(self, stream):
  132. print "NEW LOGIN WINDOW ----------------------------------------------------------------------------"
  133. ui.ScriptWindow.__init__(self)
  134. net.SetPhaseWindow(net.PHASE_WINDOW_LOGIN, self)
  135. net.SetAccountConnectorHandler(self)
  136. self.matrixInputChanceCount = 0
  137. self.lastLoginTime = 0
  138. self.inputDialog = None
  139. self.connectingDialog = None
  140. self.stream=stream
  141. self.isNowCountDown=False
  142. self.isStartError=False
  143. self.xServerBoard = 0
  144. self.yServerBoard = 0
  145. self.loadingImage = None
  146. self.virtualKeyboard = None
  147. self.virtualKeyboardMode = "ALPHABET"
  148. self.virtualKeyboardIsUpper = False
  149. def __del__(self):
  150. net.ClearPhaseWindow(net.PHASE_WINDOW_LOGIN, self)
  151. net.SetAccountConnectorHandler(0)
  152. ui.ScriptWindow.__del__(self)
  153. print "---------------------------------------------------------------------------- DELETE LOGIN WINDOW"
  154. def Open(self):
  155. ServerStateChecker.Create(self)
  156. print "LOGIN WINDOW OPEN ----------------------------------------------------------------------------"
  157. self.loginFailureMsgDict={
  158. #"DEFAULT" : localeInfo.LOGIN_FAILURE_UNKNOWN,
  159. "ALREADY" : localeInfo.LOGIN_FAILURE_ALREAY,
  160. "NOID" : localeInfo.LOGIN_FAILURE_NOT_EXIST_ID,
  161. "WRONGPWD" : localeInfo.LOGIN_FAILURE_WRONG_PASSWORD,
  162. "FULL" : localeInfo.LOGIN_FAILURE_TOO_MANY_USER,
  163. "SHUTDOWN" : localeInfo.LOGIN_FAILURE_SHUTDOWN,
  164. "REPAIR" : localeInfo.LOGIN_FAILURE_REPAIR_ID,
  165. "BLOCK" : localeInfo.LOGIN_FAILURE_BLOCK_ID,
  166. "WRONGMAT" : localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER,
  167. "QUIT" : localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE,
  168. "BESAMEKEY" : localeInfo.LOGIN_FAILURE_BE_SAME_KEY,
  169. "NOTAVAIL" : localeInfo.LOGIN_FAILURE_NOT_AVAIL,
  170. "NOBILL" : localeInfo.LOGIN_FAILURE_NOBILL,
  171. "BLKLOGIN" : localeInfo.LOGIN_FAILURE_BLOCK_LOGIN,
  172. "WEBBLK" : localeInfo.LOGIN_FAILURE_WEB_BLOCK,
  173. "BADSCLID" : localeInfo.LOGIN_FAILURE_WRONG_SOCIALID,
  174. "AGELIMIT" : localeInfo.LOGIN_FAILURE_SHUTDOWN_TIME,
  175. }
  176. self.loginFailureFuncDict = {
  177. "WRONGPWD" : self.__DisconnectAndInputPassword,
  178. "WRONGMAT" : self.__DisconnectAndInputMatrix,
  179. "QUIT" : app.Exit,
  180. }
  181. self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
  182. self.SetWindowName("LoginWindow")
  183. if not self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "LoginWindow.py"):
  184. dbg.TraceError("LoginWindow.Open - __LoadScript Error")
  185. return
  186. self.__LoadLoginInfo("loginInfo.xml")
  187. if app.loggined:
  188. self.loginFailureFuncDict = {
  189. "WRONGPWD" : app.Exit,
  190. "WRONGMAT" : app.Exit,
  191. "QUIT" : app.Exit,
  192. }
  193. if musicInfo.loginMusic != "":
  194. snd.SetMusicVolume(systemSetting.GetMusicVolume())
  195. snd.FadeInMusic("BGM/"+musicInfo.loginMusic)
  196. snd.SetSoundVolume(systemSetting.GetSoundVolume())
  197. # pevent key "[" "]"
  198. ime.AddExceptKey(91)
  199. ime.AddExceptKey(93)
  200. self.Show()
  201. global SKIP_LOGIN_PHASE
  202. if SKIP_LOGIN_PHASE:
  203. if self.isStartError:
  204. self.connectBoard.Hide()
  205. self.loginBoard.Hide()
  206. self.serverBoard.Hide()
  207. self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)
  208. return
  209. if self.loginInfo:
  210. self.serverBoard.Hide()
  211. else:
  212. self.__RefreshServerList()
  213. self.__OpenServerBoard()
  214. else:
  215. connectingIP = self.stream.GetConnectAddr()
  216. if connectingIP:
  217. if app.USE_OPENID and not app.OPENID_TEST :
  218. self.__RefreshServerList()
  219. self.__OpenServerBoard()
  220. else:
  221. self.__OpenLoginBoard()
  222. if IsFullBackImage():
  223. self.GetChild("bg1").Hide()
  224. self.GetChild("bg2").Show()
  225. else:
  226. self.__RefreshServerList()
  227. self.__OpenServerBoard()
  228. app.ShowCursor()
  229. def Close(self):
  230. if self.connectingDialog:
  231. self.connectingDialog.Close()
  232. self.connectingDialog = None
  233. ServerStateChecker.Initialize(self)
  234. print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW "
  235. #
  236. # selectMusic이 없으면 BGM이 끊기므로 두개 다 체크한다.
  237. #
  238. if musicInfo.loginMusic != "" and musicInfo.selectMusic != "":
  239. snd.FadeOutMusic("BGM/"+musicInfo.loginMusic)
  240. ## NOTE : idEditLine와 pwdEditLine은 이벤트가 서로 연결 되어있어서
  241. ## Event를 강제로 초기화 해주어야만 합니다 - [levites]
  242. self.idEditLine.SetTabEvent(0)
  243. self.idEditLine.SetReturnEvent(0)
  244. self.pwdEditLine.SetReturnEvent(0)
  245. self.pwdEditLine.SetTabEvent(0)
  246. self.connectBoard = None
  247. self.loginBoard = None
  248. self.idEditLine = None
  249. self.pwdEditLine = None
  250. self.inputDialog = None
  251. self.connectingDialog = None
  252. self.loadingImage = None
  253. self.serverBoard = None
  254. self.serverList = None
  255. self.channelList = None
  256. # RUNUP_MATRIX_AUTH
  257. self.matrixQuizBoard = None
  258. self.matrixAnswerInput = None
  259. self.matrixAnswerOK = None
  260. self.matrixAnswerCancel = None
  261. # RUNUP_MATRIX_AUTH_END
  262. # NEWCIBN_PASSPOD_AUTH
  263. self.passpodBoard = None
  264. self.passpodAnswerInput = None
  265. self.passpodAnswerOK = None
  266. self.passpodAnswerCancel = None
  267. # NEWCIBN_PASSPOD_AUTH_END
  268. self.VIRTUAL_KEY_ALPHABET_LOWERS = None
  269. self.VIRTUAL_KEY_ALPHABET_UPPERS = None
  270. self.VIRTUAL_KEY_SYMBOLS = None
  271. self.VIRTUAL_KEY_NUMBERS = None
  272. # VIRTUAL_KEYBOARD_BUG_FIX
  273. if self.virtualKeyboard:
  274. for keyIndex in xrange(0, VIRTUAL_KEYBOARD_NUM_KEYS+1):
  275. key = self.GetChild2("key_%d" % keyIndex)
  276. if key:
  277. key.SetEvent(None)
  278. self.GetChild("key_space").SetEvent(None)
  279. self.GetChild("key_backspace").SetEvent(None)
  280. self.GetChild("key_enter").SetEvent(None)
  281. self.GetChild("key_shift").SetToggleDownEvent(None)
  282. self.GetChild("key_shift").SetToggleUpEvent(None)
  283. self.GetChild("key_at").SetToggleDownEvent(None)
  284. self.GetChild("key_at").SetToggleUpEvent(None)
  285. self.virtualKeyboard = None
  286. self.KillFocus()
  287. self.Hide()
  288. self.stream.popupWindow.Close()
  289. self.loginFailureFuncDict=None
  290. ime.ClearExceptKey()
  291. app.HideCursor()
  292. def __SaveChannelInfo(self):
  293. try:
  294. file=open("channel.inf", "w")
  295. file.write("%d %d %d" % (self.__GetServerID(), self.__GetChannelID(), self.__GetRegionID()))
  296. except:
  297. print "LoginWindow.__SaveChannelInfo - SaveError"
  298. def __LoadChannelInfo(self):
  299. try:
  300. file=open("channel.inf")
  301. lines=file.readlines()
  302. if len(lines)>0:
  303. tokens=lines[0].split()
  304. selServerID=int(tokens[0])
  305. selChannelID=int(tokens[1])
  306. if len(tokens) == 3:
  307. regionID = int(tokens[2])
  308. return regionID, selServerID, selChannelID
  309. except:
  310. print "LoginWindow.__LoadChannelInfo - OpenError"
  311. return -1, -1, -1
  312. def __ExitGame(self):
  313. app.Exit()
  314. def SetIDEditLineFocus(self):
  315. if self.idEditLine != None:
  316. self.idEditLine.SetFocus()
  317. def SetPasswordEditLineFocus(self):
  318. if localeInfo.IsEUROPE():
  319. if self.idEditLine != None: #0000862: [M2EU] 로그인창 팝업 에러: 종료시 먼저 None 설정됨
  320. self.idEditLine.SetText("")
  321. self.idEditLine.SetFocus() #0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 아이디로 포커스가 가게 만든다
  322. if self.pwdEditLine != None: #0000862: [M2EU] 로그인창 팝업 에러: 종료시 먼저 None 설정됨
  323. self.pwdEditLine.SetText("")
  324. else:
  325. if self.pwdEditLine != None:
  326. self.pwdEditLine.SetFocus()
  327. def OnEndCountDown(self):
  328. self.isNowCountDown = False
  329. if localeInfo.IsBRAZIL():
  330. self.timeOutMsg = True
  331. else:
  332. self.timeOutMsg = False
  333. self.OnConnectFailure()
  334. def OnConnectFailure(self):
  335. if self.isNowCountDown:
  336. return
  337. snd.PlaySound("sound/ui/loginfail.wav")
  338. if self.connectingDialog:
  339. self.connectingDialog.Close()
  340. self.connectingDialog = None
  341. if app.loggined:
  342. self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)
  343. else:
  344. self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.SetPasswordEditLineFocus)
  345. def OnHandShake(self):
  346. if not IsLoginDelay():
  347. snd.PlaySound("sound/ui/loginok.wav")
  348. constInfo.ACCOUNT_NAME = str(self.idEditLine.GetText())
  349. self.PopupDisplayMessage(localeInfo.LOGIN_CONNECT_SUCCESS)
  350. def OnLoginStart(self):
  351. if not IsLoginDelay():
  352. self.PopupDisplayMessage(localeInfo.LOGIN_PROCESSING)
  353. def OnLoginFailure(self, error):
  354. if self.connectingDialog:
  355. self.connectingDialog.Close()
  356. self.connectingDialog = None
  357. try:
  358. loginFailureMsg = self.loginFailureMsgDict[error]
  359. except KeyError:
  360. if PASSPOD_MSG_DICT:
  361. try:
  362. loginFailureMsg = PASSPOD_MSG_DICT[error]
  363. except KeyError:
  364. loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + error
  365. else:
  366. loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + error
  367. #0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 패스워드로 포커스가 가게 만든다
  368. loginFailureFunc=self.loginFailureFuncDict.get(error, self.SetPasswordEditLineFocus)
  369. if app.loggined:
  370. self.PopupNotifyMessage(loginFailureMsg, self.__ExitGame)
  371. else:
  372. self.PopupNotifyMessage(loginFailureMsg, loginFailureFunc)
  373. snd.PlaySound("sound/ui/loginfail.wav")
  374. def __DisconnectAndInputID(self):
  375. if self.connectingDialog:
  376. self.connectingDialog.Close()
  377. self.connectingDialog = None
  378. self.SetIDEditLineFocus()
  379. net.Disconnect()
  380. def __DisconnectAndInputPassword(self):
  381. if self.connectingDialog:
  382. self.connectingDialog.Close()
  383. self.connectingDialog = None
  384. self.SetPasswordEditLineFocus()
  385. net.Disconnect()
  386. def __DisconnectAndInputMatrix(self):
  387. if self.connectingDialog:
  388. self.connectingDialog.Close()
  389. self.connectingDialog = None
  390. self.stream.popupWindow.Close()
  391. self.matrixInputChanceCount -= 1
  392. if self.matrixInputChanceCount <= 0:
  393. self.__OnCloseInputDialog()
  394. elif self.inputDialog:
  395. self.inputDialog.Show()
  396. def __LoadScript(self, fileName):
  397. import dbg
  398. try:
  399. pyScrLoader = ui.PythonScriptLoader()
  400. pyScrLoader.LoadScriptFile(self, fileName)
  401. except:
  402. import exception
  403. exception.Abort("LoginWindow.__LoadScript.LoadObject")
  404. try:
  405. GetObject=self.GetChild
  406. self.serverBoard = GetObject("ServerBoard")
  407. self.serverList = GetObject("ServerList")
  408. self.channelList = GetObject("ChannelList")
  409. self.serverSelectButton = GetObject("ServerSelectButton")
  410. self.serverExitButton = GetObject("ServerExitButton")
  411. self.connectBoard = GetObject("ConnectBoard")
  412. self.loginBoard = GetObject("LoginBoard")
  413. self.idEditLine = GetObject("ID_EditLine")
  414. self.pwdEditLine = GetObject("Password_EditLine")
  415. self.serverInfo = GetObject("ConnectName")
  416. self.selectConnectButton = GetObject("SelectConnectButton")
  417. self.loginButton = GetObject("LoginButton")
  418. self.loginExitButton = GetObject("LoginExitButton")
  419. if localeInfo.IsVIETNAM():
  420. self.checkButton = GetObject("CheckButton")
  421. self.checkButton.Down()
  422. # RUNUP_MATRIX_AUTH
  423. if IsRunupMatrixAuth():
  424. self.matrixQuizBoard = GetObject("RunupMatrixQuizBoard")
  425. self.matrixAnswerInput = GetObject("RunupMatrixAnswerInput")
  426. self.matrixAnswerOK = GetObject("RunupMatrixAnswerOK")
  427. self.matrixAnswerCancel = GetObject("RunupMatrixAnswerCancel")
  428. # RUNUP_MATRIX_AUTH_END
  429. # NEWCIBN_PASSPOD_AUTH
  430. if IsNEWCIBNPassPodAuth():
  431. self.passpodBoard = GetObject("NEWCIBN_PASSPOD_BOARD")
  432. self.passpodAnswerInput = GetObject("NEWCIBN_PASSPOD_INPUT")
  433. self.passpodAnswerOK = GetObject("NEWCIBN_PASSPOD_OK")
  434. self.passpodAnswerCancel= GetObject("NEWCIBN_PASSPOD_CANCEL")
  435. # NEWCIBN_PASSPOD_AUTH_END
  436. self.virtualKeyboard = self.GetChild2("VirtualKeyboard")
  437. if self.virtualKeyboard:
  438. self.VIRTUAL_KEY_ALPHABET_UPPERS = Suffle(localeInfo.VIRTUAL_KEY_ALPHABET_UPPERS)
  439. 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])
  440. if localeInfo.IsBRAZIL():
  441. self.VIRTUAL_KEY_SYMBOLS_BR = Suffle(localeInfo.VIRTUAL_KEY_SYMBOLS_BR)
  442. else:
  443. self.VIRTUAL_KEY_SYMBOLS = Suffle(localeInfo.VIRTUAL_KEY_SYMBOLS)
  444. self.VIRTUAL_KEY_NUMBERS = Suffle(localeInfo.VIRTUAL_KEY_NUMBERS)
  445. self.__VirtualKeyboard_SetAlphabetMode()
  446. self.GetChild("key_space").SetEvent(lambda : self.__VirtualKeyboard_PressKey(' '))
  447. self.GetChild("key_backspace").SetEvent(lambda : self.__VirtualKeyboard_PressBackspace())
  448. self.GetChild("key_enter").SetEvent(lambda : self.__VirtualKeyboard_PressReturn())
  449. self.GetChild("key_shift").SetToggleDownEvent(lambda : self.__VirtualKeyboard_SetUpperMode())
  450. self.GetChild("key_shift").SetToggleUpEvent(lambda : self.__VirtualKeyboard_SetLowerMode())
  451. self.GetChild("key_at").SetToggleDownEvent(lambda : self.__VirtualKeyboard_SetSymbolMode())
  452. self.GetChild("key_at").SetToggleUpEvent(lambda : self.__VirtualKeyboard_SetAlphabetMode())
  453. except:
  454. import exception
  455. exception.Abort("LoginWindow.__LoadScript.BindObject")
  456. if self.IS_TEST:
  457. self.selectConnectButton.Hide()
  458. else:
  459. self.selectConnectButton.SetEvent(ui.__mem_func__(self.__OnClickSelectConnectButton))
  460. self.serverBoard.OnKeyUp = ui.__mem_func__(self.__ServerBoard_OnKeyUp)
  461. self.xServerBoard, self.yServerBoard = self.serverBoard.GetLocalPosition()
  462. self.serverSelectButton.SetEvent(ui.__mem_func__(self.__OnClickSelectServerButton))
  463. self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitButton))
  464. self.loginButton.SetEvent(ui.__mem_func__(self.__OnClickLoginButton))
  465. self.loginExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitButton))
  466. self.serverList.SetEvent(ui.__mem_func__(self.__OnSelectServer))
  467. self.idEditLine.SetReturnEvent(ui.__mem_func__(self.pwdEditLine.SetFocus))
  468. self.idEditLine.SetTabEvent(ui.__mem_func__(self.pwdEditLine.SetFocus))
  469. self.pwdEditLine.SetReturnEvent(ui.__mem_func__(self.__OnClickLoginButton))
  470. self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus))
  471. # RUNUP_MATRIX_AUTH
  472. if IsRunupMatrixAuth():
  473. self.matrixAnswerOK.SAFE_SetEvent(self.__OnClickMatrixAnswerOK)
  474. self.matrixAnswerCancel.SAFE_SetEvent(self.__OnClickMatrixAnswerCancel)
  475. self.matrixAnswerInput.SAFE_SetReturnEvent(self.__OnClickMatrixAnswerOK)
  476. # RUNUP_MATRIX_AUTH_END
  477. # NEWCIBN_PASSPOD_AUTH
  478. if IsNEWCIBNPassPodAuth():
  479. self.passpodAnswerOK.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerOK)
  480. self.passpodAnswerCancel.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerCancel)
  481. self.passpodAnswerInput.SAFE_SetReturnEvent(self.__OnClickNEWCIBNPasspodAnswerOK)
  482. # NEWCIBN_PASSPOD_AUTH_END
  483. if IsFullBackImage():
  484. self.GetChild("bg1").Show()
  485. self.GetChild("bg2").Hide()
  486. return 1
  487. def __VirtualKeyboard_SetKeys(self, keyCodes):
  488. uiDefFontBackup = localeInfo.UI_DEF_FONT
  489. localeInfo.UI_DEF_FONT = localeInfo.UI_DEF_FONT_LARGE
  490. keyIndex = 1
  491. for keyCode in keyCodes:
  492. key = self.GetChild2("key_%d" % keyIndex)
  493. if key:
  494. key.SetEvent(lambda x=keyCode: self.__VirtualKeyboard_PressKey(x))
  495. key.SetText(keyCode)
  496. key.ButtonText.SetFontColor(0, 0, 0)
  497. keyIndex += 1
  498. for keyIndex in xrange(keyIndex, VIRTUAL_KEYBOARD_NUM_KEYS+1):
  499. key = self.GetChild2("key_%d" % keyIndex)
  500. if key:
  501. key.SetEvent(lambda x=' ': self.__VirtualKeyboard_PressKey(x))
  502. key.SetText(' ')
  503. localeInfo.UI_DEF_FONT = uiDefFontBackup
  504. def __VirtualKeyboard_PressKey(self, code):
  505. ime.PasteString(code)
  506. #if self.virtualKeyboardMode == "ALPHABET" and self.virtualKeyboardIsUpper:
  507. # self.__VirtualKeyboard_SetLowerMode()
  508. def __VirtualKeyboard_PressBackspace(self):
  509. ime.PasteBackspace()
  510. def __VirtualKeyboard_PressReturn(self):
  511. ime.PasteReturn()
  512. def __VirtualKeyboard_SetUpperMode(self):
  513. self.virtualKeyboardIsUpper = True
  514. if self.virtualKeyboardMode == "ALPHABET":
  515. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_UPPERS)
  516. elif self.virtualKeyboardMode == "NUMBER":
  517. if localeInfo.IsBRAZIL():
  518. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  519. else:
  520. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  521. else:
  522. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  523. def __VirtualKeyboard_SetLowerMode(self):
  524. self.virtualKeyboardIsUpper = False
  525. if self.virtualKeyboardMode == "ALPHABET":
  526. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)
  527. elif self.virtualKeyboardMode == "NUMBER":
  528. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  529. else:
  530. if localeInfo.IsBRAZIL():
  531. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  532. else:
  533. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  534. def __VirtualKeyboard_SetAlphabetMode(self):
  535. self.virtualKeyboardIsUpper = False
  536. self.virtualKeyboardMode = "ALPHABET"
  537. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)
  538. def __VirtualKeyboard_SetNumberMode(self):
  539. self.virtualKeyboardIsUpper = False
  540. self.virtualKeyboardMode = "NUMBER"
  541. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  542. def __VirtualKeyboard_SetSymbolMode(self):
  543. self.virtualKeyboardIsUpper = False
  544. self.virtualKeyboardMode = "SYMBOL"
  545. if localeInfo.IsBRAZIL():
  546. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
  547. else:
  548. self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  549. def Connect(self, id, pwd):
  550. net.ACC_ID = id
  551. net.ACC_PWD = pwd
  552. if constInfo.SEQUENCE_PACKET_ENABLE:
  553. net.SetPacketSequenceMode()
  554. if IsLoginDelay():
  555. loginDelay = GetLoginDelay()
  556. self.connectingDialog = ConnectingDialog()
  557. self.connectingDialog.Open(loginDelay)
  558. self.connectingDialog.SAFE_SetTimeOverEvent(self.OnEndCountDown)
  559. self.connectingDialog.SAFE_SetExitEvent(self.OnPressExitKey)
  560. self.isNowCountDown = True
  561. else:
  562. self.stream.popupWindow.Close()
  563. self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.SetPasswordEditLineFocus, localeInfo.UI_CANCEL)
  564. self.stream.SetLoginInfo(id, pwd)
  565. self.stream.Connect()
  566. def __OnClickExitButton(self):
  567. self.stream.SetPhaseWindow(0)
  568. def __SetServerInfo(self, name):
  569. net.SetServerInfo(name.strip())
  570. self.serverInfo.SetText(name)
  571. def __LoadLoginInfo(self, loginInfoFileName):
  572. try:
  573. loginInfo={}
  574. execfile(loginInfoFileName, loginInfo)
  575. except IOError:
  576. print(\
  577. "자동 로그인을 하시려면" + loginInfoFileName + "파일을 작성해주세요\n"\
  578. "\n"\
  579. "내용:\n"\
  580. "================================================================\n"\
  581. "addr=주소\n"\
  582. "port=포트\n"\
  583. "id=아이디\n"\
  584. "pwd=비밀번호\n"\
  585. "slot=캐릭터 선택 인덱스 (없거나 -1이면 자동 선택 안함)\n"\
  586. "autoLogin=자동 접속 여부\n"
  587. "autoSelect=자동 접속 여부\n"
  588. "locale=(ymir) LC_Ymir 일경우 ymir로 작동. 지정하지 않으면 korea로 작동\n"
  589. );
  590. id=loginInfo.get("id", "")
  591. pwd=loginInfo.get("pwd", "")
  592. if self.IS_TEST:
  593. try:
  594. addr=loginInfo["addr"]
  595. port=loginInfo["port"]
  596. account_addr=addr
  597. account_port=port
  598. net.SetMarkServer(addr, port)
  599. self.__SetServerInfo(locale.CHANNEL_TEST_SERVER_ADDR % (addr, port))
  600. except:
  601. try:
  602. addr=serverInfo.TESTADDR["ip"]
  603. port=serverInfo.TESTADDR["tcp_port"]
  604. net.SetMarkServer(addr, port)
  605. self.__SetServerInfo(locale.CHANNEL_TEST_SERVER)
  606. except:
  607. import exception
  608. exception.Abort("LoginWindow.__LoadLoginInfo - 테스트서버 주소가 없습니다")
  609. else:
  610. addr=loginInfo.get("addr", "")
  611. port=loginInfo.get("port", 0)
  612. account_addr=loginInfo.get("account_addr", addr)
  613. account_port=loginInfo.get("account_port", port)
  614. locale = loginInfo.get("locale", "")
  615. if addr and port:
  616. net.SetMarkServer(addr, port)
  617. if locale == "ymir" :
  618. net.SetServerInfo("천마 서버")
  619. self.serverInfo.SetText("Y:"+addr+":"+str(port))
  620. else:
  621. net.SetServerInfo(addr+":"+str(port))
  622. self.serverInfo.SetText("K:"+addr+":"+str(port))
  623. slot=loginInfo.get("slot", 0)
  624. isAutoLogin=loginInfo.get("auto", 0)
  625. isAutoLogin=loginInfo.get("autoLogin", 0)
  626. isAutoSelect=loginInfo.get("autoSelect", 0)
  627. self.stream.SetCharacterSlot(slot)
  628. self.stream.SetConnectInfo(addr, port, account_addr, account_port)
  629. self.stream.isAutoLogin=isAutoLogin
  630. self.stream.isAutoSelect=isAutoSelect
  631. self.id = None
  632. self.pwd = None
  633. self.loginnedServer = None
  634. self.loginnedChannel = None
  635. app.loggined = False
  636. self.loginInfo = loginInfo
  637. if self.id and self.pwd:
  638. app.loggined = True
  639. if isAutoLogin:
  640. self.Connect(id, pwd)
  641. print "=================================================================================="
  642. print "자동 로그인: %s - %s:%d %s" % (loginInfoFileName, addr, port, id)
  643. print "=================================================================================="
  644. def PopupDisplayMessage(self, msg):
  645. self.stream.popupWindow.Close()
  646. self.stream.popupWindow.Open(msg)
  647. def PopupNotifyMessage(self, msg, func=0):
  648. if not func:
  649. func=self.EmptyFunc
  650. self.stream.popupWindow.Close()
  651. self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK)
  652. # RUNUP_MATRIX_AUTH
  653. def BINARY_OnRunupMatrixQuiz(self, quiz):
  654. if not IsRunupMatrixAuth():
  655. return
  656. id = self.GetChild("RunupMatrixID")
  657. id.SetText(self.idEditLine.GetText())
  658. code = self.GetChild("RunupMatrixCode")
  659. code.SetText("".join(["[%c,%c]" % (quiz[i], quiz[i+1]) for i in xrange(0, len(quiz), 2)]))
  660. self.stream.popupWindow.Close()
  661. self.serverBoard.Hide()
  662. self.connectBoard.Hide()
  663. self.loginBoard.Hide()
  664. self.matrixQuizBoard.Show()
  665. self.matrixAnswerInput.SetFocus()
  666. def __OnClickMatrixAnswerOK(self):
  667. answer = self.matrixAnswerInput.GetText()
  668. print "matrix_quiz.ok"
  669. net.SendRunupMatrixCardPacket(answer)
  670. self.matrixQuizBoard.Hide()
  671. self.stream.popupWindow.Close()
  672. self.stream.popupWindow.Open("WAITING FOR MATRIX AUTHENTICATION",
  673. self.__OnClickMatrixAnswerCancel,
  674. localeInfo.UI_CANCEL)
  675. def __OnClickMatrixAnswerCancel(self):
  676. print "matrix_quiz.cancel"
  677. if self.matrixQuizBoard:
  678. self.matrixQuizBoard.Hide()
  679. if self.connectBoard:
  680. self.connectBoard.Show()
  681. if self.loginBoard:
  682. self.loginBoard.Show()
  683. # RUNUP_MATRIX_AUTH_END
  684. # NEWCIBN_PASSPOD_AUTH
  685. def BINARY_OnNEWCIBNPasspodRequest(self):
  686. if not IsNEWCIBNPassPodAuth():
  687. return
  688. if self.connectingDialog:
  689. self.connectingDialog.Close()
  690. self.connectingDialog = None
  691. self.stream.popupWindow.Close()
  692. self.serverBoard.Hide()
  693. self.connectBoard.Hide()
  694. self.loginBoard.Hide()
  695. self.passpodBoard.Show()
  696. self.passpodAnswerInput.SetFocus()
  697. def BINARY_OnNEWCIBNPasspodFailure(self):
  698. if not IsNEWCIBNPassPodAuth():
  699. return
  700. def __OnClickNEWCIBNPasspodAnswerOK(self):
  701. answer = self.passpodAnswerInput.GetText()
  702. print "passpod.ok"
  703. net.SendNEWCIBNPasspodAnswerPacket(answer)
  704. self.passpodAnswerInput.SetText("")
  705. self.passpodBoard.Hide()
  706. self.stream.popupWindow.Close()
  707. self.stream.popupWindow.Open(localeInfo.WAIT_FOR_PASSPOD,
  708. self.__OnClickNEWCIBNPasspodAnswerCancel,
  709. localeInfo.UI_CANCEL)
  710. def __OnClickNEWCIBNPasspodAnswerCancel(self):
  711. print "passpod.cancel"
  712. if self.passpodBoard:
  713. self.passpodBoard.Hide()
  714. if self.connectBoard:
  715. self.connectBoard.Show()
  716. if self.loginBoard:
  717. self.loginBoard.Show()
  718. # NEWCIBN_PASSPOD_AUTH_END
  719. def OnMatrixCard(self, row1, row2, row3, row4, col1, col2, col3, col4):
  720. if self.connectingDialog:
  721. self.connectingDialog.Close()
  722. self.connectingDialog = None
  723. self.matrixInputChanceCount = 3
  724. self.stream.popupWindow.Close()
  725. # CHINA_MATRIX_CARD_BUG_FIX
  726. ## A~Z 까지 26 이내의 값이 들어있어야만 한다.
  727. ## Python Exception Log 에서 그 이상의 값이 들어있어서 에러 방지
  728. ## 헌데 왜 한국쪽 로그에서 이게 활용되는지는 모르겠음
  729. row1 = min(30, row1)
  730. row2 = min(30, row2)
  731. row3 = min(30, row3)
  732. row4 = min(30, row4)
  733. # END_OF_CHINA_MATRIX_CARD_BUG_FIX
  734. row1 = chr(row1 + ord('A'))
  735. row2 = chr(row2 + ord('A'))
  736. row3 = chr(row3 + ord('A'))
  737. row4 = chr(row4 + ord('A'))
  738. col1 = col1 + 1
  739. col2 = col2 + 1
  740. col3 = col3 + 1
  741. col4 = col4 + 1
  742. inputDialog = uiCommon.InputDialogWithDescription2()
  743. inputDialog.SetMaxLength(8)
  744. inputDialog.SetAcceptEvent(ui.__mem_func__(self.__OnAcceptMatrixCardData))
  745. inputDialog.SetCancelEvent(ui.__mem_func__(self.__OnCancelMatrixCardData))
  746. inputDialog.SetTitle(localeInfo.INPUT_MATRIX_CARD_TITLE)
  747. inputDialog.SetDescription1(localeInfo.INPUT_MATRIX_CARD_NUMBER)
  748. inputDialog.SetDescription2("%c%d %c%d %c%d %c%d" % (row1, col1,
  749. row2, col2,
  750. row3, col3,
  751. row4, col4))
  752. inputDialog.Open()
  753. self.inputDialog = inputDialog
  754. def __OnAcceptMatrixCardData(self):
  755. text = self.inputDialog.GetText()
  756. net.SendChinaMatrixCardPacket(text)
  757. if self.inputDialog:
  758. self.inputDialog.Hide()
  759. self.PopupNotifyMessage(localeInfo.LOGIN_PROCESSING)
  760. return True
  761. def __OnCancelMatrixCardData(self):
  762. self.SetPasswordEditLineFocus()
  763. self.__OnCloseInputDialog()
  764. self.__DisconnectAndInputPassword()
  765. return True
  766. def __OnCloseInputDialog(self):
  767. if self.inputDialog:
  768. self.inputDialog.Close()
  769. self.inputDialog = None
  770. return True
  771. def OnPressExitKey(self):
  772. self.stream.popupWindow.Close()
  773. self.stream.SetPhaseWindow(0)
  774. return True
  775. def OnExit(self):
  776. self.stream.popupWindow.Close()
  777. self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, app.Exit, localeInfo.UI_OK)
  778. def OnUpdate(self):
  779. ServerStateChecker.Update()
  780. def EmptyFunc(self):
  781. pass
  782. #####################################################################################
  783. def __ServerBoard_OnKeyUp(self, key):
  784. if self.serverBoard.IsShow():
  785. if app.DIK_RETURN==key:
  786. self.__OnClickSelectServerButton()
  787. return True
  788. def __GetRegionID(self):
  789. return 0
  790. def __GetServerID(self):
  791. return self.serverList.GetSelectedItem()
  792. def __GetChannelID(self):
  793. return self.channelList.GetSelectedItem()
  794. # SEVER_LIST_BUG_FIX
  795. def __ServerIDToServerIndex(self, regionID, targetServerID):
  796. try:
  797. regionDict = serverInfo.REGION_DICT[regionID]
  798. except KeyError:
  799. return -1
  800. retServerIndex = 0
  801. for eachServerID, regionDataDict in regionDict.items():
  802. if eachServerID == targetServerID:
  803. return retServerIndex
  804. retServerIndex += 1
  805. return -1
  806. def __ChannelIDToChannelIndex(self, channelID):
  807. return channelID - 1
  808. # END_OF_SEVER_LIST_BUG_FIX
  809. def __OpenServerBoard(self):
  810. loadRegionID, loadServerID, loadChannelID = self.__LoadChannelInfo()
  811. serverIndex = self.__ServerIDToServerIndex(loadRegionID, loadServerID)
  812. channelIndex = self.__ChannelIDToChannelIndex(loadChannelID)
  813. # RUNUP_MATRIX_AUTH
  814. if IsRunupMatrixAuth():
  815. self.matrixQuizBoard.Hide()
  816. # RUNUP_MATRIX_AUTH_END
  817. # NEWCIBN_PASSPOD_AUTH
  818. if IsNEWCIBNPassPodAuth():
  819. self.passpodBoard.Hide()
  820. # NEWCIBN_PASSPOD_AUTH_END
  821. self.serverList.SelectItem(serverIndex)
  822. if localeInfo.IsEUROPE():
  823. self.channelList.SelectItem(app.GetRandom(0, self.channelList.GetItemCount()))
  824. else:
  825. if channelIndex >= 0:
  826. self.channelList.SelectItem(channelIndex)
  827. ## Show/Hide 코드에 문제가 있어서 임시 - [levites]
  828. self.serverBoard.SetPosition(self.xServerBoard, self.yServerBoard)
  829. self.serverBoard.Show()
  830. self.connectBoard.Hide()
  831. self.loginBoard.Hide()
  832. if self.virtualKeyboard:
  833. self.virtualKeyboard.Hide()
  834. if app.loggined and not SKIP_LOGIN_PHASE_SUPPORT_CHANNEL:
  835. self.serverList.SelectItem(self.loginnedServer-1)
  836. self.channelList.SelectItem(self.loginnedChannel-1)
  837. self.__OnClickSelectServerButton()
  838. def __OpenLoginBoard(self):
  839. self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
  840. self.serverExitButton.SetText(localeInfo.UI_CLOSE)
  841. # RUNUP_MATRIX_AUTH
  842. if IsRunupMatrixAuth():
  843. self.matrixQuizBoard.Hide()
  844. # RUNUP_MATRIX_AUTH_END
  845. # NEWCIBN_PASSPOD_AUTH
  846. if IsNEWCIBNPassPodAuth():
  847. self.passpodBoard.Hide()
  848. # NEWCIBN_PASSPOD_AUTH_END
  849. self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight())
  850. self.serverBoard.Hide()
  851. if self.virtualKeyboard:
  852. self.virtualKeyboard.Show()
  853. if app.loggined:
  854. self.Connect(self.id, self.pwd)
  855. self.connectBoard.Hide()
  856. self.loginBoard.Hide()
  857. elif not self.stream.isAutoLogin:
  858. self.connectBoard.Show()
  859. self.loginBoard.Show()
  860. ## if users have the login infomation, then don't initialize.2005.9 haho
  861. if self.idEditLine == None:
  862. self.idEditLine.SetText("")
  863. if self.pwdEditLine == None:
  864. self.pwdEditLine.SetText("")
  865. self.idEditLine.SetFocus()
  866. global SKIP_LOGIN_PHASE
  867. if SKIP_LOGIN_PHASE:
  868. if not self.loginInfo:
  869. self.connectBoard.Hide()
  870. def __OnSelectRegionGroup(self):
  871. self.__RefreshServerList()
  872. def __OnSelectSettlementArea(self):
  873. # SEVER_LIST_BUG_FIX
  874. regionID = self.__GetRegionID()
  875. serverID = self.serverListOnRegionBoard.GetSelectedItem()
  876. serverIndex = self.__ServerIDToServerIndex(regionID, serverID)
  877. self.serverList.SelectItem(serverIndex)
  878. # END_OF_SEVER_LIST_BUG_FIX
  879. self.__OnSelectServer()
  880. def __RefreshServerList(self):
  881. regionID = self.__GetRegionID()
  882. if not serverInfo.REGION_DICT.has_key(regionID):
  883. return
  884. self.serverList.ClearItem()
  885. regionDict = serverInfo.REGION_DICT[regionID]
  886. # SEVER_LIST_BUG_FIX
  887. visible_index = 1
  888. for id, regionDataDict in regionDict.items():
  889. name = regionDataDict.get("name", "noname")
  890. if localeInfo.IsBRAZIL() or localeInfo.IsCANADA():
  891. self.serverList.InsertItem(id, "%s" % (name))
  892. else:
  893. if localeInfo.IsCIBN10():
  894. if name[0] == "#":
  895. self.serverList.InsertItem(-1, " %s" % (name[1:]))
  896. else:
  897. self.serverList.InsertItem(id, " %s" % (name))
  898. visible_index += 1
  899. else:
  900. try:
  901. server_id = serverInfo.SERVER_ID_DICT[id]
  902. except:
  903. server_id = visible_index
  904. self.serverList.InsertItem(id, " %02d. %s" % (int(server_id), name))
  905. visible_index += 1
  906. # END_OF_SEVER_LIST_BUG_FIX
  907. def __OnSelectServer(self):
  908. self.__OnCloseInputDialog()
  909. self.__RequestServerStateList()
  910. self.__RefreshServerStateList()
  911. def __RequestServerStateList(self):
  912. regionID = self.__GetRegionID()
  913. serverID = self.__GetServerID()
  914. try:
  915. channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  916. except:
  917. print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)
  918. return
  919. ServerStateChecker.Initialize();
  920. for id, channelDataDict in channelDict.items():
  921. key=channelDataDict["key"]
  922. ip=channelDataDict["ip"]
  923. udp_port=channelDataDict["udp_port"]
  924. ServerStateChecker.AddChannel(key, ip, udp_port)
  925. ServerStateChecker.Request()
  926. def __RefreshServerStateList(self):
  927. regionID = self.__GetRegionID()
  928. serverID = self.__GetServerID()
  929. bakChannelID = self.channelList.GetSelectedItem()
  930. self.channelList.ClearItem()
  931. try:
  932. channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  933. except:
  934. print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)
  935. return
  936. for channelID, channelDataDict in channelDict.items():
  937. channelName = channelDataDict["name"]
  938. channelState = channelDataDict["state"]
  939. self.channelList.InsertItem(channelID, " %s %s" % (channelName, channelState))
  940. self.channelList.SelectItem(bakChannelID-1)
  941. def __GetChannelName(self, regionID, selServerID, selChannelID):
  942. try:
  943. return serverInfo.REGION_DICT[regionID][selServerID]["channel"][selChannelID]["name"]
  944. except KeyError:
  945. if 9==selChannelID:
  946. return localeInfo.CHANNEL_PVP
  947. else:
  948. return localeInfo.CHANNEL_NORMAL % (selChannelID)
  949. def NotifyChannelState(self, addrKey, state):
  950. try:
  951. stateName=serverInfo.STATE_DICT[state]
  952. except:
  953. stateName=serverInfo.STATE_NONE
  954. regionID=self.__GetRegionID()
  955. serverID=self.__GetServerID()
  956. channelID=addrKey%10
  957. try:
  958. serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName
  959. self.__RefreshServerStateList()
  960. except:
  961. import exception
  962. exception.Abort(localeInfo.CHANNEL_NOT_FIND_INFO)
  963. def __OnClickExitServerButton(self):
  964. print "exit server"
  965. self.__OpenLoginBoard()
  966. if IsFullBackImage():
  967. self.GetChild("bg1").Hide()
  968. self.GetChild("bg2").Show()
  969. def __OnClickSelectRegionButton(self):
  970. regionID = self.__GetRegionID()
  971. serverID = self.__GetServerID()
  972. if (not serverInfo.REGION_DICT.has_key(regionID)):
  973. self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
  974. return
  975. if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
  976. self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
  977. return
  978. self.__SaveChannelInfo()
  979. self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
  980. self.serverExitButton.SetText(localeInfo.UI_CLOSE)
  981. self.__RefreshServerList()
  982. self.__OpenServerBoard()
  983. def __OnClickSelectServerButton(self):
  984. if IsFullBackImage():
  985. self.GetChild("bg1").Hide()
  986. self.GetChild("bg2").Show()
  987. regionID = self.__GetRegionID()
  988. serverID = self.__GetServerID()
  989. channelID = self.__GetChannelID()
  990. if (not serverInfo.REGION_DICT.has_key(regionID)):
  991. self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
  992. return
  993. if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
  994. self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
  995. return
  996. try:
  997. channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  998. except KeyError:
  999. return
  1000. try:
  1001. state = channelDict[channelID]["state"]
  1002. except KeyError:
  1003. self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_CHANNEL)
  1004. return
  1005. # 상태가 FULL 과 같으면 진입 금지
  1006. if state == serverInfo.STATE_DICT[3]:
  1007. self.PopupNotifyMessage(localeInfo.CHANNEL_NOTIFY_FULL)
  1008. return
  1009. self.__SaveChannelInfo()
  1010. try:
  1011. serverName = serverInfo.REGION_DICT[regionID][serverID]["name"]
  1012. channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]
  1013. addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]
  1014. if "천마 서버" == serverName:
  1015. app.ForceSetLocale("ymir", "locale/ymir")
  1016. elif "쾌도 서버" == serverName:
  1017. app.ForceSetLocale("we_korea", "locale/we_korea")
  1018. except:
  1019. print " ERROR __OnClickSelectServerButton(%d, %d, %d)" % (regionID, serverID, channelID)
  1020. serverName = localeInfo.CHANNEL_EMPTY_SERVER
  1021. channelName = localeInfo.CHANNEL_NORMAL % channelID
  1022. self.__SetServerInfo("%s, %s " % (serverName, channelName))
  1023. try:
  1024. ip = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["ip"]
  1025. tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"]
  1026. except:
  1027. import exception
  1028. exception.Abort("LoginWindow.__OnClickSelectServerButton - 서버 선택 실패")
  1029. try:
  1030. account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"]
  1031. account_port = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["port"]
  1032. except:
  1033. account_ip = 0
  1034. account_port = 0
  1035. try:
  1036. markKey = regionID*1000 + serverID*10
  1037. markAddrValue=serverInfo.MARKADDR_DICT[markKey]
  1038. net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"])
  1039. app.SetGuildMarkPath(markAddrValue["mark"])
  1040. # GUILD_SYMBOL
  1041. app.SetGuildSymbolPath(markAddrValue["symbol_path"])
  1042. # END_OF_GUILD_SYMBOL
  1043. except:
  1044. import exception
  1045. exception.Abort("LoginWindow.__OnClickSelectServerButton - 마크 정보 없음")
  1046. if app.USE_OPENID and not app.OPENID_TEST :
  1047. ## 2012.07.19 OpenID : 김용욱
  1048. # 채널 선택 화면에서 "확인"(SelectServerButton) 을 눌렀을때,
  1049. # 로그인 화면으로 넘어가지 않고 바로 서버에 OpenID 인증키를 보내도록 수정
  1050. self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
  1051. self.Connect(0, 0)
  1052. else :
  1053. self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
  1054. self.__OpenLoginBoard()
  1055. def __OnClickSelectConnectButton(self):
  1056. if IsFullBackImage():
  1057. self.GetChild("bg1").Show()
  1058. self.GetChild("bg2").Hide()
  1059. self.__RefreshServerList()
  1060. self.__OpenServerBoard()
  1061. def __OnClickLoginButton(self):
  1062. id = self.idEditLine.GetText()
  1063. pwd = self.pwdEditLine.GetText()
  1064. if len(id)==0:
  1065. self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_ID, self.SetIDEditLineFocus)
  1066. return
  1067. if len(pwd)==0:
  1068. self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus)
  1069. return
  1070. self.Connect(id, pwd)
  1071. def SameLogin_OpenUI(self):
  1072. self.stream.popupWindow.Close()
  1073. self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_SAMELOGIN, 0, localeInfo.UI_OK)