ICDev 243 Posted October 30, 2017 Share Posted October 30, 2017 M2 Download Center This is the hidden content, please Sign In or Sign Up ( Internal ) Spoiler Extract root and open intrologin.py At the beginning add: import os from _winreg import * Search: self.loginExitButton = GetObject("LoginExitButton") Add: self.saveLoginButton = GetObject("SaveLoginButton") self.loadCredentialButton = GetObject("LoadCredentials") Finally at the end add: def ICDev_ECRYPT(self,data): Data = '' for l in data: Data = Data+str(int(ord(l) + 2) * 2)+' ' return Data def ICDev_DECRYPT(self,data): Data = '' data = data.split() for l in data: Data = Data+chr((int(l) / 2) - 2) return Data def __OnClickSaveLoginButton(self): id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() if (len(id) != 0 and len(pwd) != 0): if not os.path.exists("SOFTWARE\ICDev"): key = CreateKey(HKEY_CURRENT_USER,"SOFTWARE\ICDev") SetValueEx(key, "UserID", 0, REG_SZ, self.ICDev_ECRYPT(id)) SetValueEx(key, "Passwd", 0, REG_SZ, self.ICDev_ECRYPT(pwd)) CloseKey(key) self.PopupNotifyMessage("Datele au fost salvate!",self.SetIDEditLineFocus) def __OnClickLoadInfoButton(self): try: key = OpenKey(HKEY_CURRENT_USER, "SOFTWARE\ICDev", 0, KEY_ALL_ACCESS) self.Connect(self.ICDev_DECRYPT(QueryValueEx(key, "UserID")[0]),self.ICDev_DECRYPT(QueryValueEx(key, "Passwd")[0])) except: self.PopupNotifyMessage("Nu exista nici un account salvat!",self.SetIDEditLineFocus) Extract locale_xx and open loginwindow.py Search: "text" : uiScriptLocale.LOGIN_CONNECT, }, ), }, Add: ## userDataBoard { "name" : "UserDataBoard", "type" : "thinboard", "x" : (SCREEN_WIDTH - 208) / 2, "y" : (SCREEN_HEIGHT - 355), "width" : 205, "height" : 55, "children" : ( { "name" : "SaveLoginButton", "type" : "button", "x" : 10, "y" : 0, "vertical_align" : "center", "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptLocale.LOGIN_SAVE_BUTTON, }, { "name" : "LoadCredentials", "type" : "button", "x" : 105, "y" : 0, "vertical_align" : "center", "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptLocale.LOGIN_LOAD_BUTTON, }, ), }, In local_interface.txt (local_xx) add: LOGIN_SAVE_BUTTON Save LOGIN_LOAD_BUTTON Load Now add in YourClient/lib: This is the hidden content, please Sign In or Sign Up 122 3 2 1 3 1 2 2 2 1 48 5 68 Link to comment Share on other sites More sharing options...
blackList 2 Posted November 8, 2017 Share Posted November 8, 2017 didnt work, if i press save he not save it and also when i press load he not load anything Link to comment Share on other sites More sharing options...
ICDev 243 Posted November 21, 2017 Author Share Posted November 21, 2017 On 8/11/2017 at 10:29 PM, Freitag said: didnt work, if i press save he not save it and also when i press load he not load anything You must run client with administrator rights Link to comment Share on other sites More sharing options...
Newton 0 Posted November 26, 2017 Share Posted November 26, 2017 i have the error: 1126 11:28:00353 :: File " 1126 11:28:00353 :: introLogin.py 1126 11:28:00353 :: ", line 1126 11:28:00353 :: 1376 1126 11:28:00353 :: 1126 11:28:00353 :: 1126 11:28:00353 :: Data = '' 1126 11:28:00353 :: 1126 11:28:00353 :: 1126 11:28:00353 :: 1126 11:28:00353 :: 1126 11:28:00353 :: ^ 1126 11:28:00353 :: IndentationError 1126 11:28:00353 :: : 1126 11:28:00353 :: expected an indented block 1126 11:28:00353 :: Link to comment Share on other sites More sharing options...
weryoliveira 26 Posted November 28, 2017 Share Posted November 28, 2017 you tabs is wrong Link to comment Share on other sites More sharing options...
amosth 9 Posted March 15, 2018 Share Posted March 15, 2018 Does not work. Link to comment Share on other sites More sharing options...
mast210 0 Posted June 27, 2019 Share Posted June 27, 2019 Under: self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus)) Add: self.saveLoginButton.SetEvent(ui.__mem_func__(self.__OnClickSaveLoginButton)) self.loadCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoadInfoButton)) Link to comment Share on other sites More sharing options...
Historia 0 Posted January 3, 2022 Share Posted January 3, 2022 I did all the copy & paste stuff. But dont know where do I put the winreg.pyc data? 17 minutes ago, Historia said: I did all the copy & paste stuff. But dont know where do I put the winreg.pyc data? Now the Client shut downs, I did put the winreg in filezilla usr/home/game/quest.. Link to comment Share on other sites More sharing options...
Contributor TMP4 11070 Posted January 3, 2022 Contributor Share Posted January 3, 2022 (edited) 2 hours ago, Historia said: I did all the copy & paste stuff. But dont know where do I put the winreg.pyc data? Now the Client shut downs, I did put the winreg in filezilla usr/home/game/quest.. why did you put it on serverside, when it is a clientside thing? Anyway put it to the lib folder clientside (or even root should work). Edited January 3, 2022 by TMP4 Link to comment Share on other sites More sharing options...
Dedu 0 Posted February 19, 2022 Share Posted February 19, 2022 upp Link to comment Share on other sites More sharing options...
kenoZ 2 Posted March 6, 2022 Share Posted March 6, 2022 0306 07:25:00721 :: Traceback (most recent call last): 0306 07:25:00721 :: File "introLogo.py", line 60, in OnUpdate 0306 07:25:00721 :: File "networkModule.py", line 177, in SetLoginPhase 0306 07:25:00721 :: File "system.py", line 130, in __pack_import 0306 07:25:00721 :: File " 0306 07:25:00721 :: <string> 0306 07:25:00721 :: ", line 0306 07:25:00721 :: 530 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: self.saveLoginButton = GetObject("SaveLoginButton") 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00722 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00723 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00724 :: 0306 07:25:00725 :: 0306 07:25:00725 :: 0306 07:25:00725 :: 0306 07:25:00725 :: 0306 07:25:00725 :: 0306 07:25:00725 :: 0306 07:25:00725 :: ^ 0306 07:25:00725 :: IndentationError 0306 07:25:00725 :: : 0306 07:25:00725 :: unindent does not match any outer indentation level 0306 07:25:00725 :: I have blackscreen and this says my client syserr.txt Link to comment Share on other sites More sharing options...
Sparta21 0 Posted April 29, 2022 Share Posted April 29, 2022 (edited) With tabs, working for me. Spoiler Extract root and open intrologin.py At the beginning add: import os from _winreg import * Search: self.loginExitButton = GetObject("LoginExitButton") Add: self.saveLoginButton = GetObject("SaveLoginButton") self.loadCredentialButton = GetObject("LoadCredentials") Search self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus)) Add: self.saveLoginButton.SetEvent(ui.__mem_func__(self.__OnClickSaveLoginButton)) self.loadCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoadInfoButton)) Finally at the end add: def ICDev_ECRYPT(self,data): Data = '' for l in data: Data = Data+str(int(ord(l) + 2) * 2)+' ' return Data def ICDev_DECRYPT(self,data): Data = '' data = data.split() for l in data: Data = Data+chr((int(l) / 2) - 2) return Data def __OnClickSaveLoginButton(self): id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() if (len(id) != 0 and len(pwd) != 0): if not os.path.exists("SOFTWARE\ICDev"): key = CreateKey(HKEY_CURRENT_USER,"SOFTWARE\ICDev") SetValueEx(key, "UserID", 0, REG_SZ, self.ICDev_ECRYPT(id)) SetValueEx(key, "Passwd", 0, REG_SZ, self.ICDev_ECRYPT(pwd)) CloseKey(key) self.PopupNotifyMessage("Saved successfully.",self.SetIDEditLineFocus) def __OnClickLoadInfoButton(self): try: key = OpenKey(HKEY_CURRENT_USER, "SOFTWARE\ICDev", 0, KEY_ALL_ACCESS) self.Connect(self.ICDev_DECRYPT(QueryValueEx(key, "UserID")[0]),self.ICDev_DECRYPT(QueryValueEx(key, "Passwd")[0])) except: self.PopupNotifyMessage("Save before load.",self.SetIDEditLineFocus) Extract locale_xx and open loginwindow.py Search: "text" : uiScriptLocale.LOGIN_EXIT, }, ), }, Add: ## userDataBoard { "name" : "UserDataBoard", "type" : "thinboard", "x" : (SCREEN_WIDTH - 208) / 2, "y" : (SCREEN_HEIGHT - 410 - 70), "width" : 208, "height" : 35, "children" : ( { "name" : "SaveLoginButton", "type" : "button", "x" : 10, "y" : 0, "vertical_align" : "center", "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptLocale.LOGIN_SAVE_BUTTON, }, { "name" : "LoadCredentials", "type" : "button", "x" : 105, "y" : 0, "vertical_align" : "center", "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptLocale.LOGIN_LOAD_BUTTON, }, ), }, In local_interface.txt (local_xx) add: LOGIN_SAVE_BUTTON Save LOGIN_LOAD_BUTTON Load Edited August 16, 2022 by Metin2 Dev Core X - External 2 Internal Link to comment Share on other sites More sharing options...
supra 0 Posted June 9, 2022 Share Posted June 9, 2022 Hello i have this problem please help me 0609 20:19:00880 :: introLogin.py(line:533) __LoadScript ui.py(line:2704) GetChild LoginWindow.__LoadScript.BindObject - <type 'exceptions.KeyError'>:'SaveLoginButton' 0609 20:19:00880 :: ============================================================================================================ 0609 20:19:00880 :: Abort!!!! Link to comment Share on other sites More sharing options...
Active Member ReFresh 2349 Posted June 9, 2022 Active Member Share Posted June 9, 2022 @supraCheck your loginwindow.py, it looks like you did some syntax mistake. I'll be always helpful! Link to comment Share on other sites More sharing options...
Natsu Dragneel 0 Posted Sunday at 10:30 PM Share Posted Sunday at 10:30 PM hi, sorry for the late message here, if its a problem, forgive me, but i have a problem with the fliege v3 client/files, after i add all the code and the "winreg" file in root.eix/epk i got following error: 0624 00:26:00478 :: Failed to load script file : locale/de/ui/LoginWindow.py 0624 00:26:00479 :: ui.py(line:3690) LoadScriptFile system.py(line:193) execfile system.py(line:164) Run locale/de/ui/LoginWindow.py(line:645) <module> LoadScriptFile!!!!!!!!!!!!!! - <type 'exceptions.NameError'>:name 'uiScriptLocale' is not defined 0624 00:26:00479 :: ============================================================================================================ 0624 00:26:00479 :: Abort!!!! 0624 00:26:00479 :: introLogin.py(line:468) __LoadScript ui.py(line:3707) LoadScriptFile exception.py(line:36) Abort LoginWindow.__LoadScript.LoadObject - <type 'exceptions.SystemExit'>: 0624 00:26:00479 :: ============================================================================================================ 0624 00:26:00479 :: Abort!!!! 0624 00:26:00489 :: ============================================================================================================ 0624 00:26:00489 :: Abort!!!! here are my changed files intrologin.py: Spoiler import dbg import app import net import ui import ime import snd import wndMgr import musicInfo import serverInfo import systemSetting import ServerStateChecker import localeInfo import constInfo import uiCommon import time import serverCommandParser import ime import uiScriptLocale import uiGuild import sys import uiTarget import os from _winreg import * RUNUP_MATRIX_AUTH = FALSE NEWCIBN_PASSPOD_AUTH = FALSE LOGIN_DELAY_SEC = 0.0 SKIP_LOGIN_PHASE = FALSE SKIP_LOGIN_PHASE_SUPPORT_CHANNEL = FALSE FULL_BACK_IMAGE = FALSE PASSPOD_MSG_DICT = {} VIRTUAL_KEYBOARD_NUM_KEYS = 46 VIRTUAL_KEYBOARD_RAND_KEY = TRUE def Suffle(src): if VIRTUAL_KEYBOARD_RAND_KEY: items = [item for item in src] itemCount = len(items) for oldPos in xrange(itemCount): newPos = app.GetRandom(0, itemCount-1) items[newPos], items[oldPos] = items[oldPos], items[newPos] return "".join(items) else: return src def IsFullBackImage(): global FULL_BACK_IMAGE return FULL_BACK_IMAGE def IsLoginDelay(): global LOGIN_DELAY_SEC if LOGIN_DELAY_SEC > 0.0: return TRUE else: return FALSE def IsRunupMatrixAuth(): global RUNUP_MATRIX_AUTH return RUNUP_MATRIX_AUTH def IsNEWCIBNPassPodAuth(): global NEWCIBN_PASSPOD_AUTH return NEWCIBN_PASSPOD_AUTH def GetLoginDelay(): global LOGIN_DELAY_SEC return LOGIN_DELAY_SEC app.SetGuildMarkPath("test") class ConnectingDialog(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.__LoadDialog() self.eventTimeOver = lambda *arg: None self.eventExit = lambda *arg: None def __del__(self): ui.ScriptWindow.__del__(self) def __LoadDialog(self): try: PythonScriptLoader = ui.PythonScriptLoader() PythonScriptLoader.LoadScriptFile(self, "UIScript/ConnectingDialog.py") self.board = self.GetChild("board") self.message = self.GetChild("message") self.countdownMessage = self.GetChild("countdown_message") except: import exception exception.Abort("ConnectingDialog.LoadDialog.BindObject") def Open(self, waitTime): curTime = time.clock() self.endTime = curTime + waitTime self.Lock() self.SetCenterPosition() self.SetTop() self.Show() def Close(self): self.Unlock() self.Hide() def Destroy(self): self.Hide() self.ClearDictionary() def SetText(self, text): self.message.SetText(text) def SetCountDownMessage(self, waitTime): self.countdownMessage.SetText("%.0f%s" % (waitTime, localeInfo.SECOND)) def SAFE_SetTimeOverEvent(self, event): self.eventTimeOver = ui.__mem_func__(event) def SAFE_SetExitEvent(self, event): self.eventExit = ui.__mem_func__(event) def OnUpdate(self): lastTime = max(0, self.endTime - time.clock()) if 0 == lastTime: self.Close() self.eventTimeOver() else: self.SetCountDownMessage(self.endTime - time.clock()) def OnPressExitKey(self): #self.eventExit() return TRUE class LoginWindow(ui.ScriptWindow): IS_TEST = net.IsTest() def __init__(self, stream): print "NEW LOGIN WINDOW ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self) net.SetPhaseWindow(net.PHASE_WINDOW_LOGIN, self) net.SetAccountConnectorHandler(self) self.matrixInputChanceCount = 0 self.lastLoginTime = 0 self.inputDialog = None self.connectingDialog = None self.stream=stream self.isNowCountDown=FALSE self.isStartError=FALSE self.xServerBoard = 0 self.yServerBoard = 0 self.loadingImage = None self.virtualKeyboard = None self.virtualKeyboardMode = "ALPHABET" self.virtualKeyboardIsUpper = FALSE def __del__(self): net.ClearPhaseWindow(net.PHASE_WINDOW_LOGIN, self) net.SetAccountConnectorHandler(0) ui.ScriptWindow.__del__(self) print "---------------------------------------------------------------------------- DELETE LOGIN WINDOW" def Open(self): ServerStateChecker.Create(self) print "LOGIN WINDOW OPEN ----------------------------------------------------------------------------" self.loginFailureMsgDict={ #"DEFAULT" : localeInfo.LOGIN_FAILURE_UNKNOWN, "ALREADY" : localeInfo.LOGIN_FAILURE_ALREAY, "NOID" : localeInfo.LOGIN_FAILURE_NOT_EXIST_ID, "WRONGPWD" : localeInfo.LOGIN_FAILURE_WRONG_PASSWORD, "FULL" : localeInfo.LOGIN_FAILURE_TOO_MANY_USER, "SHUTDOWN" : localeInfo.LOGIN_FAILURE_SHUTDOWN, "REPAIR" : localeInfo.LOGIN_FAILURE_REPAIR_ID, "BLOCK" : localeInfo.LOGIN_FAILURE_BLOCK_ID, "WRONGMAT" : localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER, "QUIT" : localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, "BESAMEKEY" : localeInfo.LOGIN_FAILURE_BE_SAME_KEY, "NOTAVAIL" : localeInfo.LOGIN_FAILURE_NOT_AVAIL, "NOBILL" : localeInfo.LOGIN_FAILURE_NOBILL, "BLKLOGIN" : localeInfo.LOGIN_FAILURE_BLOCK_LOGIN, "WEBBLK" : localeInfo.LOGIN_FAILURE_WEB_BLOCK, "BADSCLID" : localeInfo.LOGIN_FAILURE_WRONG_SOCIALID, "AGELIMIT" : localeInfo.LOGIN_FAILURE_SHUTDOWN_TIME, "WRONGVER" : localeInfo.LOGIN_FAILURE_WRONG_VERSION, } self.loginFailureFuncDict = { "WRONGPWD" : self.__DisconnectAndInputPassword, "WRONGMAT" : self.__DisconnectAndInputMatrix, "QUIT" : app.Exit, "WRONGVER" : app.Exit, } self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight()) self.SetWindowName("LoginWindow") if not self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "LoginWindow.py"): dbg.TraceError("LoginWindow.Open - __LoadScript Error") return self.__LoadLoginInfo("loginInfo.xml") if app.loggined: self.loginFailureFuncDict = { "WRONGPWD" : app.Exit, "WRONGMAT" : app.Exit, "QUIT" : app.Exit, } if musicInfo.loginMusic != "": snd.SetMusicVolume(systemSetting.GetMusicVolume()) snd.FadeInMusic("bgm/"+musicInfo.loginMusic) snd.SetSoundVolume(systemSetting.GetSoundVolume()) # pevent key "[" "]" ime.AddExceptKey(91) ime.AddExceptKey(93) self.Show() global SKIP_LOGIN_PHASE if SKIP_LOGIN_PHASE: if self.isStartError: self.connectBoard.Hide() self.loginBoard.Hide() self.serverBoard.Hide() self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame) return if self.loginInfo: self.serverBoard.Hide() else: self.__RefreshServerList() self.__OpenServerBoard() else: connectingIP = self.stream.GetConnectAddr() if connectingIP: self.__OpenLoginBoard() if IsFullBackImage(): self.GetChild("bg1").Hide() self.GetChild("bg2").Show() else: self.__RefreshServerList() self.__OpenServerBoard() app.ShowCursor() def Close(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None ServerStateChecker.Initialize(self) print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW " if musicInfo.loginMusic != "" and musicInfo.selectMusic != "": snd.FadeOutMusic("bgm/"+musicInfo.loginMusic) self.idEditLine.SetTabEvent(0) self.idEditLine.SetReturnEvent(0) self.pwdEditLine.SetReturnEvent(0) self.pwdEditLine.SetTabEvent(0) self.connectBoard = None self.loginBoard = None self.idEditLine = None self.pwdEditLine = None self.inputDialog = None self.connectingDialog = None self.loadingImage = None self.serverBoard = None self.serverList = None self.channelList = None # RUNUP_MATRIX_AUTH self.matrixQuizBoard = None self.matrixAnswerInput = None self.matrixAnswerOK = None self.matrixAnswerCancel = None # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH self.passpodBoard = None self.passpodAnswerInput = None self.passpodAnswerOK = None self.passpodAnswerCancel = None # NEWCIBN_PASSPOD_AUTH_END self.VIRTUAL_KEY_ALPHABET_LOWERS = None self.VIRTUAL_KEY_ALPHABET_UPPERS = None self.VIRTUAL_KEY_SYMBOLS = None self.VIRTUAL_KEY_NUMBERS = None # VIRTUAL_KEYBOARD_BUG_FIX if self.virtualKeyboard: for keyIndex in xrange(0, VIRTUAL_KEYBOARD_NUM_KEYS+1): key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(None) self.GetChild("key_space").SetEvent(None) self.GetChild("key_backspace").SetEvent(None) self.GetChild("key_enter").SetEvent(None) self.GetChild("key_shift").SetToggleDownEvent(None) self.GetChild("key_shift").SetToggleUpEvent(None) self.GetChild("key_at").SetToggleDownEvent(None) self.GetChild("key_at").SetToggleUpEvent(None) self.virtualKeyboard = None self.KillFocus() self.Hide() self.stream.popupWindow.Close() self.loginFailureFuncDict=None ime.ClearExceptKey() app.HideCursor() def __SaveChannelInfo(self): try: file=open("channel.inf", "w") file.write("%d %d %d" % (self.__GetServerID(), self.__GetChannelID(), self.__GetRegionID())) except: print "LoginWindow.__SaveChannelInfo - SaveError" def __LoadChannelInfo(self): try: file=open("channel.inf") lines=file.readlines() if len(lines)>0: tokens=lines[0].split() selServerID=int(tokens[0]) selChannelID=int(tokens[1]) if len(tokens) == 3: regionID = int(tokens[2]) return regionID, selServerID, selChannelID except: print "LoginWindow.__LoadChannelInfo - OpenError" return -1, -1, -1 def __ExitGame(self): app.Exit() def SetIDEditLineFocus(self): if self.idEditLine != None: self.idEditLine.SetFocus() def SetPasswordEditLineFocus(self): if self.pwdEditLine != None: self.pwdEditLine.SetFocus() def OnEndCountDown(self): self.isNowCountDown = FALSE self.timeOutMsg = FALSE self.OnConnectFailure() def OnConnectFailure(self): if self.isNowCountDown: return snd.PlaySound("sound/ui/loginfail.wav") if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None if app.loggined: self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame) else: self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.SetPasswordEditLineFocus) def OnHandShake(self): if not IsLoginDelay(): snd.PlaySound("sound/ui/loginok.wav") self.PopupDisplayMessage(localeInfo.LOGIN_CONNECT_SUCCESS) def OnLoginStart(self): if not IsLoginDelay(): self.PopupDisplayMessage(localeInfo.LOGIN_PROCESSING) def OnLoginFailure(self, error): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None try: loginFailureMsg = self.loginFailureMsgDict[error] except KeyError: if PASSPOD_MSG_DICT: try: loginFailureMsg = PASSPOD_MSG_DICT[error] except KeyError: loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + error else: loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + error #0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 패스워드로 포커스가 가게 만든다 loginFailureFunc=self.loginFailureFuncDict.get(error, self.SetPasswordEditLineFocus) if app.loggined: self.PopupNotifyMessage(loginFailureMsg, self.__ExitGame) else: self.PopupNotifyMessage(loginFailureMsg, loginFailureFunc) snd.PlaySound("sound/ui/loginfail.wav") def __DisconnectAndInputID(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.SetIDEditLineFocus() net.Disconnect() def __DisconnectAndInputPassword(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.SetPasswordEditLineFocus() net.Disconnect() def __DisconnectAndInputMatrix(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.stream.popupWindow.Close() self.matrixInputChanceCount -= 1 if self.matrixInputChanceCount <= 0: self.__OnCloseInputDialog() elif self.inputDialog: self.inputDialog.Show() def __LoadScript(self, fileName): import dbg try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, fileName) except: import exception exception.Abort("LoginWindow.__LoadScript.LoadObject") try: GetObject=self.GetChild self.serverBoard = GetObject("ServerBoard") self.serverList = GetObject("ServerList") self.channelList = GetObject("ChannelList") self.serverSelectButton = GetObject("ServerSelectButton") self.serverExitButton = GetObject("ServerExitButton") self.connectBoard = GetObject("ConnectBoard") self.loginBoard = GetObject("LoginBoard") self.idEditLine = GetObject("ID_EditLine") self.pwdEditLine = GetObject("Password_EditLine") self.serverInfo = GetObject("ConnectName") self.selectConnectButton = GetObject("SelectConnectButton") self.loginButton = GetObject("LoginButton") self.loginExitButton = GetObject("LoginExitButton") self.saveLoginButton = GetObject("SaveLoginButton") self.loadCredentialButton = GetObject("LoadCredentials") # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard = GetObject("RunupMatrixQuizBoard") self.matrixAnswerInput = GetObject("RunupMatrixAnswerInput") self.matrixAnswerOK = GetObject("RunupMatrixAnswerOK") self.matrixAnswerCancel = GetObject("RunupMatrixAnswerCancel") # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard = GetObject("NEWCIBN_PASSPOD_BOARD") self.passpodAnswerInput = GetObject("NEWCIBN_PASSPOD_INPUT") self.passpodAnswerOK = GetObject("NEWCIBN_PASSPOD_OK") self.passpodAnswerCancel= GetObject("NEWCIBN_PASSPOD_CANCEL") # NEWCIBN_PASSPOD_AUTH_END self.virtualKeyboard = self.GetChild2("VirtualKeyboard") if self.virtualKeyboard: self.VIRTUAL_KEY_ALPHABET_UPPERS = Suffle(localeInfo.VIRTUAL_KEY_ALPHABET_UPPERS) 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]) self.VIRTUAL_KEY_SYMBOLS = Suffle(localeInfo.VIRTUAL_KEY_SYMBOLS) self.VIRTUAL_KEY_NUMBERS = Suffle(localeInfo.VIRTUAL_KEY_NUMBERS) self.__VirtualKeyboard_SetAlphabetMode() self.GetChild("key_space").SetEvent(lambda : self.__VirtualKeyboard_PressKey(' ')) self.GetChild("key_backspace").SetEvent(lambda : self.__VirtualKeyboard_PressBackspace()) self.GetChild("key_enter").SetEvent(lambda : self.__VirtualKeyboard_PressReturn()) self.GetChild("key_shift").SetToggleDownEvent(lambda : self.__VirtualKeyboard_SetUpperMode()) self.GetChild("key_shift").SetToggleUpEvent(lambda : self.__VirtualKeyboard_SetLowerMode()) self.GetChild("key_at").SetToggleDownEvent(lambda : self.__VirtualKeyboard_SetSymbolMode()) self.GetChild("key_at").SetToggleUpEvent(lambda : self.__VirtualKeyboard_SetAlphabetMode()) except: import exception exception.Abort("LoginWindow.__LoadScript.BindObject") if self.IS_TEST: self.selectConnectButton.Hide() else: self.selectConnectButton.SetEvent(ui.__mem_func__(self.__OnClickSelectConnectButton)) self.serverBoard.OnKeyUp = ui.__mem_func__(self.__ServerBoard_OnKeyUp) self.xServerBoard, self.yServerBoard = self.serverBoard.GetLocalPosition() self.serverSelectButton.SetEvent(ui.__mem_func__(self.__OnClickSelectServerButton)) self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitButton)) self.loginButton.SetEvent(ui.__mem_func__(self.__OnClickLoginButton)) self.loginExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitButton)) self.serverList.SetEvent(ui.__mem_func__(self.__OnSelectServer)) self.idEditLine.SetReturnEvent(ui.__mem_func__(self.pwdEditLine.SetFocus)) self.idEditLine.SetTabEvent(ui.__mem_func__(self.pwdEditLine.SetFocus)) self.pwdEditLine.SetReturnEvent(ui.__mem_func__(self.__OnClickLoginButton)) self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus)) self.saveLoginButton.SetEvent(ui.__mem_func__(self.__OnClickSaveLoginButton)) self.loadCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoadInfoButton)) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixAnswerOK.SAFE_SetEvent(self.__OnClickMatrixAnswerOK) self.matrixAnswerCancel.SAFE_SetEvent(self.__OnClickMatrixAnswerCancel) self.matrixAnswerInput.SAFE_SetReturnEvent(self.__OnClickMatrixAnswerOK) # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodAnswerOK.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerOK) self.passpodAnswerCancel.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerCancel) self.passpodAnswerInput.SAFE_SetReturnEvent(self.__OnClickNEWCIBNPasspodAnswerOK) # NEWCIBN_PASSPOD_AUTH_END if IsFullBackImage(): self.GetChild("bg1").Show() self.GetChild("bg2").Hide() return 1 def ClickRadioButton(self, buttonList, buttonIndex): try: selButton = buttonList[buttonIndex] except IndexError: return for eachButton in buttonList: eachButton.SetUp() selButton.Down() def __VirtualKeyboard_SetKeys(self, keyCodes): uiDefFontBackup = localeInfo.UI_DEF_FONT localeInfo.UI_DEF_FONT = localeInfo.UI_DEF_FONT_LARGE keyIndex = 1 for keyCode in keyCodes: key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(lambda x=keyCode: self.__VirtualKeyboard_PressKey(x)) key.SetText(keyCode) key.ButtonText.SetFontColor(0, 0, 0) keyIndex += 1 for keyIndex in xrange(keyIndex, VIRTUAL_KEYBOARD_NUM_KEYS+1): key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(lambda x=' ': self.__VirtualKeyboard_PressKey(x)) key.SetText(' ') localeInfo.UI_DEF_FONT = uiDefFontBackup def __VirtualKeyboard_PressKey(self, code): ime.PasteString(code) #if self.virtualKeyboardMode == "ALPHABET" and self.virtualKeyboardIsUpper: # self.__VirtualKeyboard_SetLowerMode() def __VirtualKeyboard_PressBackspace(self): ime.PasteBackspace() def __VirtualKeyboard_PressReturn(self): ime.PasteReturn() def __VirtualKeyboard_SetUpperMode(self): self.virtualKeyboardIsUpper = TRUE if self.virtualKeyboardMode == "ALPHABET": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_UPPERS) elif self.virtualKeyboardMode == "NUMBER": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) else: self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) def __VirtualKeyboard_SetLowerMode(self): self.virtualKeyboardIsUpper = FALSE if self.virtualKeyboardMode == "ALPHABET": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS) elif self.virtualKeyboardMode == "NUMBER": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) else: self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) def __VirtualKeyboard_SetAlphabetMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "ALPHABET" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS) def __VirtualKeyboard_SetNumberMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "NUMBER" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) def __VirtualKeyboard_SetSymbolMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "SYMBOL" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) def Connect(self, id, pwd): if constInfo.SEQUENCE_PACKET_ENABLE: net.SetPacketSequenceMode() if IsLoginDelay(): loginDelay = GetLoginDelay() self.connectingDialog = ConnectingDialog() self.connectingDialog.Open(loginDelay) self.connectingDialog.SAFE_SetTimeOverEvent(self.OnEndCountDown) self.connectingDialog.SAFE_SetExitEvent(self.OnPressExitKey) self.isNowCountDown = TRUE else: self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.SetPasswordEditLineFocus, localeInfo.UI_CANCEL) uiTarget.MONSTER_INFO_DATA.clear() self.stream.SetLoginInfo(id, pwd) self.stream.Connect() def __OnClickExitButton(self): self.stream.SetPhaseWindow(0) def __SetServerInfo(self, name): net.SetServerInfo(name.strip()) self.serverInfo.SetText(name) def __LoadLoginInfo(self, loginInfoFileName): try: loginInfo={} execfile(loginInfoFileName, loginInfo) except IOError: print(\ "자동 로그인을 하시려면" + loginInfoFileName + "파일을 작성해주세요\n"\ "\n"\ "내용:\n"\ "================================================================\n"\ "addr=주소\n"\ "port=포트\n"\ "id=아이디\n"\ "pwd=비밀번호\n"\ "slot=캐릭터 선택 인덱스 (없거나 -1이면 자동 선택 안함)\n"\ "autoLogin=자동 접속 여부\n" "autoSelect=자동 접속 여부\n" "locale=(ymir) LC_Ymir 일경우 ymir로 작동. 지정하지 않으면 korea로 작동\n" ); id=loginInfo.get("id", "") pwd=loginInfo.get("pwd", "") if self.IS_TEST: try: addr=loginInfo["addr"] port=loginInfo["port"] account_addr=addr account_port=port net.SetMarkServer(addr, port) self.__SetServerInfo(locale.CHANNEL_TEST_SERVER_ADDR % (addr, port)) except: try: addr=serverInfo.TESTADDR["ip"] port=serverInfo.TESTADDR["tcp_port"] net.SetMarkServer(addr, port) self.__SetServerInfo(locale.CHANNEL_TEST_SERVER) except: import exception exception.Abort("LoginWindow.__LoadLoginInfo - 테스트서버 주소가 없습니다") else: addr=loginInfo.get("addr", "") port=loginInfo.get("port", 0) account_addr=loginInfo.get("account_addr", addr) account_port=loginInfo.get("account_port", port) locale = loginInfo.get("locale", "") if addr and port: net.SetMarkServer(addr, port) if locale == "ymir" : net.SetServerInfo("천마 서버") self.serverInfo.SetText("Y:"+addr+":"+str(port)) else: net.SetServerInfo(addr+":"+str(port)) self.serverInfo.SetText("K:"+addr+":"+str(port)) slot=loginInfo.get("slot", 0) isAutoLogin=loginInfo.get("auto", 0) isAutoLogin=loginInfo.get("autoLogin", 0) isAutoSelect=loginInfo.get("autoSelect", 0) self.stream.SetCharacterSlot(slot) self.stream.SetConnectInfo(addr, port, account_addr, account_port) self.stream.isAutoLogin=isAutoLogin self.stream.isAutoSelect=isAutoSelect self.id = None self.pwd = None self.loginnedServer = None self.loginnedChannel = None app.loggined = FALSE self.loginInfo = loginInfo if self.id and self.pwd: app.loggined = TRUE if isAutoLogin: self.Connect(id, pwd) print "==================================================================================" print "자동 로그인: %s - %s:%d %s" % (loginInfoFileName, addr, port, id) print "==================================================================================" def PopupDisplayMessage(self, msg): self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg) def PopupNotifyMessage(self, msg, func=0): if not func: func=self.EmptyFunc self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK) # RUNUP_MATRIX_AUTH def BINARY_OnRunupMatrixQuiz(self, quiz): if not IsRunupMatrixAuth(): return id = self.GetChild("RunupMatrixID") id.SetText(self.idEditLine.GetText()) code = self.GetChild("RunupMatrixCode") code.SetText("".join(["[%c,%c]" % (quiz[i], quiz[i+1]) for i in xrange(0, len(quiz), 2)])) self.stream.popupWindow.Close() self.serverBoard.Hide() self.connectBoard.Hide() self.loginBoard.Hide() self.matrixQuizBoard.Show() self.matrixAnswerInput.SetFocus() def __OnClickMatrixAnswerOK(self): answer = self.matrixAnswerInput.GetText() print "matrix_quiz.ok" net.SendRunupMatrixCardPacket(answer) self.matrixQuizBoard.Hide() self.stream.popupWindow.Close() self.stream.popupWindow.Open("WAITING FOR MATRIX AUTHENTICATION", self.__OnClickMatrixAnswerCancel, localeInfo.UI_CANCEL) def __OnClickMatrixAnswerCancel(self): print "matrix_quiz.cancel" if self.matrixQuizBoard: self.matrixQuizBoard.Hide() if self.connectBoard: self.connectBoard.Show() if self.loginBoard: self.loginBoard.Show() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH def BINARY_OnNEWCIBNPasspodRequest(self): if not IsNEWCIBNPassPodAuth(): return if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.stream.popupWindow.Close() self.serverBoard.Hide() self.connectBoard.Hide() self.loginBoard.Hide() self.passpodBoard.Show() self.passpodAnswerInput.SetFocus() def BINARY_OnNEWCIBNPasspodFailure(self): if not IsNEWCIBNPassPodAuth(): return def __OnClickNEWCIBNPasspodAnswerOK(self): answer = self.passpodAnswerInput.GetText() print "passpod.ok" net.SendNEWCIBNPasspodAnswerPacket(answer) self.passpodAnswerInput.SetText("") self.passpodBoard.Hide() self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.WAIT_FOR_PASSPOD, self.__OnClickNEWCIBNPasspodAnswerCancel, localeInfo.UI_CANCEL) def __OnClickNEWCIBNPasspodAnswerCancel(self): print "passpod.cancel" if self.passpodBoard: self.passpodBoard.Hide() if self.connectBoard: self.connectBoard.Show() if self.loginBoard: self.loginBoard.Show() # NEWCIBN_PASSPOD_AUTH_END def OnMatrixCard(self, row1, row2, row3, row4, col1, col2, col3, col4): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.matrixInputChanceCount = 3 self.stream.popupWindow.Close() row1 = min(30, row1) row2 = min(30, row2) row3 = min(30, row3) row4 = min(30, row4) row1 = chr(row1 + ord('A')) row2 = chr(row2 + ord('A')) row3 = chr(row3 + ord('A')) row4 = chr(row4 + ord('A')) col1 = col1 + 1 col2 = col2 + 1 col3 = col3 + 1 col4 = col4 + 1 inputDialog = uiCommon.InputDialogWithDescription2() inputDialog.SetMaxLength(8) inputDialog.SetAcceptEvent(ui.__mem_func__(self.__OnAcceptMatrixCardData)) inputDialog.SetCancelEvent(ui.__mem_func__(self.__OnCancelMatrixCardData)) inputDialog.SetTitle(localeInfo.INPUT_MATRIX_CARD_TITLE) inputDialog.SetDescription1(localeInfo.INPUT_MATRIX_CARD_NUMBER) inputDialog.SetDescription2("%c%d %c%d %c%d %c%d" % (row1, col1, row2, col2, row3, col3, row4, col4)) inputDialog.Open() self.inputDialog = inputDialog def __OnAcceptMatrixCardData(self): text = self.inputDialog.GetText() net.SendChinaMatrixCardPacket(text) if self.inputDialog: self.inputDialog.Hide() self.PopupNotifyMessage(localeInfo.LOGIN_PROCESSING) return TRUE def __OnCancelMatrixCardData(self): self.SetPasswordEditLineFocus() self.__OnCloseInputDialog() self.__DisconnectAndInputPassword() return TRUE def __OnCloseInputDialog(self): if self.inputDialog: self.inputDialog.Close() self.inputDialog = None return TRUE def OnPressExitKey(self): self.stream.popupWindow.Close() self.stream.SetPhaseWindow(0) return TRUE def OnExit(self): self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, app.Exit, localeInfo.UI_OK) def OnUpdate(self): ServerStateChecker.Update() def EmptyFunc(self): pass def __ServerBoard_OnKeyUp(self, key): if self.serverBoard.IsShow(): if app.DIK_RETURN==key: self.__OnClickSelectServerButton() return TRUE def __GetRegionID(self): return 0 def __GetServerID(self): return self.serverList.GetSelectedItem() def __GetChannelID(self): return self.channelList.GetSelectedItem() # SEVER_LIST_BUG_FIX def __ServerIDToServerIndex(self, regionID, targetServerID): try: regionDict = serverInfo.REGION_DICT[regionID] except KeyError: return -1 retServerIndex = 0 for eachServerID, regionDataDict in regionDict.items(): if eachServerID == targetServerID: return retServerIndex retServerIndex += 1 return -1 def __ChannelIDToChannelIndex(self, channelID): return channelID - 1 # END_OF_SEVER_LIST_BUG_FIX def __OpenServerBoard(self): loadRegionID, loadServerID, loadChannelID = self.__LoadChannelInfo() serverIndex = self.__ServerIDToServerIndex(loadRegionID, loadServerID) channelIndex = self.__ChannelIDToChannelIndex(loadChannelID) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard.Hide() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard.Hide() # NEWCIBN_PASSPOD_AUTH_END self.serverList.SelectItem(serverIndex) if channelIndex >= 0: self.channelList.SelectItem(channelIndex) self.serverBoard.SetPosition(self.xServerBoard, self.yServerBoard) self.serverBoard.Show() if self.idEditLine and self.idEditLine.IsFocus(): self.idEditLine.KillFocus() if self.pwdEditLine and self.pwdEditLine.IsFocus(): self.pwdEditLine.KillFocus() self.connectBoard.Hide() self.loginBoard.Hide() if self.virtualKeyboard: self.virtualKeyboard.Hide() if app.loggined and not SKIP_LOGIN_PHASE_SUPPORT_CHANNEL: self.serverList.SelectItem(self.loginnedServer-1) self.channelList.SelectItem(self.loginnedChannel-1) self.__OnClickSelectServerButton() def __OpenLoginBoard(self): self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton)) self.serverExitButton.SetText(localeInfo.UI_CLOSE) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard.Hide() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard.Hide() # NEWCIBN_PASSPOD_AUTH_END self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight()) self.serverBoard.Hide() if self.virtualKeyboard: self.virtualKeyboard.Show() if app.loggined: self.Connect(self.id, self.pwd) self.connectBoard.Hide() self.loginBoard.Hide() elif not self.stream.isAutoLogin: self.connectBoard.Show() self.loginBoard.Show() ## if users have the login infomation, then don't initialize.2005.9 haho if self.idEditLine == None: self.idEditLine.SetText("") if self.pwdEditLine == None: self.pwdEditLine.SetText("") self.idEditLine.SetFocus() global SKIP_LOGIN_PHASE if SKIP_LOGIN_PHASE: if not self.loginInfo: self.connectBoard.Hide() def __OnSelectRegionGroup(self): self.__RefreshServerList() def __OnSelectSettlementArea(self): # SEVER_LIST_BUG_FIX regionID = self.__GetRegionID() serverID = self.serverListOnRegionBoard.GetSelectedItem() serverIndex = self.__ServerIDToServerIndex(regionID, serverID) self.serverList.SelectItem(serverIndex) # END_OF_SEVER_LIST_BUG_FIX self.__OnSelectServer() def __RefreshServerList(self): regionID = self.__GetRegionID() if not serverInfo.REGION_DICT.has_key(regionID): return self.serverList.ClearItem() regionDict = serverInfo.REGION_DICT[regionID] # SEVER_LIST_BUG_FIX visible_index = 1 for id, regionDataDict in regionDict.items(): name = regionDataDict.get("name", "noname") try: server_id = serverInfo.SERVER_ID_DICT[id] except: server_id = visible_index self.serverList.InsertItem(id, " %02d. %s" % (int(server_id), name)) visible_index += 1 # END_OF_SEVER_LIST_BUG_FIX def __OnSelectServer(self): self.__OnCloseInputDialog() self.__RequestServerStateList() self.__RefreshServerStateList() def __RequestServerStateList(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() try: channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"] except: print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID) return ServerStateChecker.Initialize(); for id, channelDataDict in channelDict.items(): key=channelDataDict["key"] ip=channelDataDict["ip"] udp_port=channelDataDict["udp_port"] ServerStateChecker.AddChannel(key, ip, udp_port) ServerStateChecker.Request() def __RefreshServerStateList(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() bakChannelID = self.channelList.GetSelectedItem() self.channelList.ClearItem() try: channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"] except: print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID) return for channelID, channelDataDict in channelDict.items(): channelName = channelDataDict["name"] channelState = channelDataDict["state"] self.channelList.InsertItem(channelID, " %s %s" % (channelName, channelState)) self.channelList.SelectItem(bakChannelID-1) def __GetChannelName(self, regionID, selServerID, selChannelID): try: return serverInfo.REGION_DICT[regionID][selServerID]["channel"][selChannelID]["name"] except KeyError: if 9==selChannelID: return localeInfo.CHANNEL_PVP else: return localeInfo.CHANNEL_NORMAL % (selChannelID) def NotifyChannelState(self, addrKey, state): try: stateName=serverInfo.STATE_DICT[state] except: stateName=serverInfo.STATE_NONE regionID=self.__GetRegionID() serverID=self.__GetServerID() channelID=addrKey%10 try: serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName self.__RefreshServerStateList() except: import exception exception.Abort(localeInfo.CHANNEL_NOT_FIND_INFO) def __OnClickExitServerButton(self): print "exit server" self.__OpenLoginBoard() if IsFullBackImage(): self.GetChild("bg1").Hide() self.GetChild("bg2").Show() def __OnClickSelectRegionButton(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() if (not serverInfo.REGION_DICT.has_key(regionID)): self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION) return if (not serverInfo.REGION_DICT[regionID].has_key(serverID)): self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER) return self.__SaveChannelInfo() self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton)) self.serverExitButton.SetText(localeInfo.UI_CLOSE) self.__RefreshServerList() self.__OpenServerBoard() def __OnClickSelectServerButton(self): if IsFullBackImage(): self.GetChild("bg1").Hide() self.GetChild("bg2").Show() regionID = self.__GetRegionID() serverID = self.__GetServerID() channelID = self.__GetChannelID() if (not serverInfo.REGION_DICT.has_key(regionID)): self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION) return if (not serverInfo.REGION_DICT[regionID].has_key(serverID)): self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER) return try: channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"] except KeyError: return try: state = channelDict[channelID]["state"] except KeyError: self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_CHANNEL) return # 상태가 FULL 과 같으면 진입 금지 if state == serverInfo.STATE_DICT[3]: self.PopupNotifyMessage(localeInfo.CHANNEL_NOTIFY_FULL) return self.__SaveChannelInfo() try: serverName = serverInfo.REGION_DICT[regionID][serverID]["name"] channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"] addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"] if "천마 서버" == serverName: app.ForceSetLocale("ymir", "locale/ymir") elif "쾌도 서버" == serverName: app.ForceSetLocale("we_korea", "locale/we_korea") except: print " ERROR __OnClickSelectServerButton(%d, %d, %d)" % (regionID, serverID, channelID) serverName = localeInfo.CHANNEL_EMPTY_SERVER channelName = localeInfo.CHANNEL_NORMAL % channelID self.__SetServerInfo("%s, %s " % (serverName, channelName)) try: ip = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["ip"] tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"] except: import exception exception.Abort("LoginWindow.__OnClickSelectServerButton - 서버 선택 실패") try: account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"] account_port = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["port"] except: account_ip = 0 account_port = 0 try: markKey = regionID*1000 + serverID*10 markAddrValue=serverInfo.MARKADDR_DICT[markKey] net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"]) app.SetGuildMarkPath(markAddrValue["mark"]) # GUILD_SYMBOL app.SetGuildSymbolPath(markAddrValue["symbol_path"]) # END_OF_GUILD_SYMBOL except: import exception exception.Abort("LoginWindow.__OnClickSelectServerButton - 마크 정보 없음") self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port) self.__OpenLoginBoard() def __OnClickSelectConnectButton(self): if IsFullBackImage(): self.GetChild("bg1").Show() self.GetChild("bg2").Hide() self.__RefreshServerList() self.__OpenServerBoard() def __OnClickLoginButton(self): id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() if len(id)==0: self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_ID, self.SetIDEditLineFocus) return if len(pwd)==0: self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus) return self.Connect(id, pwd) def SameLogin_OpenUI(self): self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_SAMELOGIN, 0, localeInfo.UI_OK) def BINARY_SetGuildBuildingList(self, obj): uiGuild.BUILDING_DATA_LIST = obj def ICDev_ECRYPT(self,data): Data = '' for l in data: Data = Data+str(int(ord(l) + 2) * 2)+' ' return Data def ICDev_DECRYPT(self,data): Data = '' data = data.split() for l in data: Data = Data+chr((int(l) / 2) - 2) return Data def __OnClickSaveLoginButton(self): id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() if (len(id) != 0 and len(pwd) != 0): if not os.path.exists("SOFTWARE\ICDev"): key = CreateKey(HKEY_CURRENT_USER,"SOFTWARE\ICDev") SetValueEx(key, "UserID", 0, REG_SZ, self.ICDev_ECRYPT(id)) SetValueEx(key, "Passwd", 0, REG_SZ, self.ICDev_ECRYPT(pwd)) CloseKey(key) self.PopupNotifyMessage("Saved successfully.",self.SetIDEditLineFocus) def __OnClickLoadInfoButton(self): try: key = OpenKey(HKEY_CURRENT_USER, "SOFTWARE\ICDev", 0, KEY_ALL_ACCESS) self.Connect(self.ICDev_DECRYPT(QueryValueEx(key, "UserID")[0]),self.ICDev_DECRYPT(QueryValueEx(key, "Passwd")[0])) except: self.PopupNotifyMessage("Save before load.",self.SetIDEditLineFocus) loginwindow.py Spoiler import uiScriptlocale LOCALE_PATH = uiScriptlocale.LOGIN_PATH SERVER_BOARD_HEIGHT = 220 + 180 SERVER_LIST_HEIGHT = 171 + 180 window = { "name" : "LoginWindow", "sytle" : ("movable",), "x" : 0, "y" : 0, "width" : SCREEN_WIDTH, "height" : SCREEN_HEIGHT, "children" : ( ## Board { "name" : "bg1", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, "image" : "locale/de/ui/serverlist.sub", }, { "name" : "bg2", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, "image" : "locale/de/ui/login.sub", }, ## VirtualKeyboard { 'name' : 'VirtualKeyboard', 'type' : 'thinboard', 'x' : (SCREEN_WIDTH - 564) / 2, 'y' : SCREEN_HEIGHT - 300, 'width' : 564, 'height' : 254, 'children' : ( { 'name' : 'key_at', 'type' : 'toggle_button', 'x' : 40, 'y' : 186, 'default_image' : 'locale/de/ui/vkey/key_at.tga', 'down_image' : 'locale/de/ui/vkey/key_at_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_at_over.tga', }, { 'name' : 'key_backspace', 'type' : 'button', 'x' : 498, 'y' : 186, 'default_image' : 'locale/de/ui/vkey/key_backspace.tga', 'down_image' : 'locale/de/ui/vkey/key_backspace_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_backspace_over.tga', }, { 'name' : 'key_enter', 'type' : 'button', 'x' : 439, 'y' : 186, 'default_image' : 'locale/de/ui/vkey/key_enter.tga', 'down_image' : 'locale/de/ui/vkey/key_enter_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_enter_over.tga', }, { 'name' : 'key_shift', 'type' : 'toggle_button', 'x' : 86, 'y' : 186, 'default_image' : 'locale/de/ui/vkey/key_shift.tga', 'down_image' : 'locale/de/ui/vkey/key_shift_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_shift_over.tga', }, { 'name' : 'key_space', 'type' : 'button', 'x' : 145, 'y' : 186, 'default_image' : 'locale/de/ui/vkey/key_space.tga', 'down_image' : 'locale/de/ui/vkey/key_space_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_space_over.tga', }, { 'name' : 'key_1', 'type' : 'button', 'x' : 40, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_2', 'type' : 'button', 'x' : 80, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_3', 'type' : 'button', 'x' : 120, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_4', 'type' : 'button', 'x' : 160, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_5', 'type' : 'button', 'x' : 200, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_6', 'type' : 'button', 'x' : 240, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_7', 'type' : 'button', 'x' : 280, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_8', 'type' : 'button', 'x' : 320, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_9', 'type' : 'button', 'x' : 360, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_10', 'type' : 'button', 'x' : 400, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_11', 'type' : 'button', 'x' : 440, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_12', 'type' : 'button', 'x' : 480, 'y' : 24, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_13', 'type' : 'button', 'x' : 40, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_14', 'type' : 'button', 'x' : 80, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_15', 'type' : 'button', 'x' : 120, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_16', 'type' : 'button', 'x' : 160, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_17', 'type' : 'button', 'x' : 200, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_18', 'type' : 'button', 'x' : 240, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_19', 'type' : 'button', 'x' : 280, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_20', 'type' : 'button', 'x' : 320, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_21', 'type' : 'button', 'x' : 360, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_22', 'type' : 'button', 'x' : 400, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_23', 'type' : 'button', 'x' : 440, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_24', 'type' : 'button', 'x' : 480, 'y' : 63, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_25', 'type' : 'button', 'x' : 60, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_26', 'type' : 'button', 'x' : 100, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_27', 'type' : 'button', 'x' : 140, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_28', 'type' : 'button', 'x' : 180, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_29', 'type' : 'button', 'x' : 220, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_30', 'type' : 'button', 'x' : 260, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_31', 'type' : 'button', 'x' : 300, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_32', 'type' : 'button', 'x' : 340, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_33', 'type' : 'button', 'x' : 380, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_34', 'type' : 'button', 'x' : 420, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_35', 'type' : 'button', 'x' : 460, 'y' : 104, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_36', 'type' : 'button', 'x' : 60, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_37', 'type' : 'button', 'x' : 100, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_38', 'type' : 'button', 'x' : 140, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_39', 'type' : 'button', 'x' : 180, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_40', 'type' : 'button', 'x' : 220, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_41', 'type' : 'button', 'x' : 260, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_42', 'type' : 'button', 'x' : 300, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_43', 'type' : 'button', 'x' : 340, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_44', 'type' : 'button', 'x' : 380, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_45', 'type' : 'button', 'x' : 420, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, { 'name' : 'key_46', 'type' : 'button', 'x' : 460, 'y' : 144, 'default_image' : 'locale/de/ui/vkey/key_normal.tga', 'down_image' : 'locale/de/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/de/ui/vkey/key_normal_over.tga', }, ) }, ## ConnectBoard { "name" : "ConnectBoard", "type" : "thinboard", "x" : (SCREEN_WIDTH - 208) / 2, "y" : (SCREEN_HEIGHT - 410 - 35), "width" : 208, "height" : 30, "children" : ( { "name" : "ConnectName", "type" : "text", "x" : 15, "y" : 0, "vertical_align" : "center", "text_vertical_align" : "center", "text" : uiScriptlocale.LOGIN_DEFAULT_SERVERADDR, }, { "name" : "SelectConnectButton", "type" : "button", "x" : 150, "y" : 0, "vertical_align" : "center", "default_image" : "d:/ymir work/ui/public/small_button_01.sub", "over_image" : "d:/ymir work/ui/public/small_button_02.sub", "down_image" : "d:/ymir work/ui/public/small_button_03.sub", "text" : uiScriptlocale.LOGIN_SELECT_BUTTON, }, ), }, ## LoginBoard { "name" : "LoginBoard", "type" : "image", "x" : (SCREEN_WIDTH - 208) / 2, "y" : (SCREEN_HEIGHT - 410), "image" : LOCALE_PATH + "loginwindow.sub", "children" : ( { "name" : "ID_EditLine", "type" : "editline", "x" : 77, "y" : 16, "width" : 120, "height" : 18, "input_limit" : 16, "enable_codepage" : 0, "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, }, { "name" : "Password_EditLine", "type" : "editline", "x" : 77, "y" : 43, "width" : 120, "height" : 18, "input_limit" : 16, "secret_flag" : 1, "enable_codepage" : 0, "r" : 1.0, "g" : 1.0, "b" : 1.0, "a" : 1.0, }, { "name" : "LoginButton", "type" : "button", "x" : 15, "y" : 65, "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptlocale.LOGIN_CONNECT, }, { "name" : "LoginExitButton", "type" : "button", "x" : 105, "y" : 65, "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptlocale.LOGIN_EXIT, }, ), }, ## userDataBoard { "name" : "UserDataBoard", "type" : "thinboard", "x" : (SCREEN_WIDTH - 208) / 2, "y" : (SCREEN_HEIGHT - 410 - 70), "width" : 208, "height" : 35, "children" : ( { "name" : "SaveLoginButton", "type" : "button", "x" : 10, "y" : 0, "vertical_align" : "center", "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptLocale.LOGIN_SAVE_BUTTON, }, { "name" : "LoadCredentials", "type" : "button", "x" : 105, "y" : 0, "vertical_align" : "center", "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptLocale.LOGIN_LOAD_BUTTON, }, ), }, ## ServerBoard { "name" : "ServerBoard", "type" : "thinboard", "x" : 0, "y" : SCREEN_HEIGHT - SERVER_BOARD_HEIGHT - 72, "width" : 375, "height" : SERVER_BOARD_HEIGHT, "horizontal_align" : "center", "children" : ( ## Title { "name" : "Title", "type" : "text", "x" : 0, "y" : 12, "horizontal_align" : "center", "text_horizontal_align" : "center", "text" : uiScriptlocale.LOGIN_SELECT_TITLE, }, ## Horizontal { "name" : "HorizontalLine1", "type" : "line", "x" : 10, "y" : 34, "width" : 354, "height" : 0, "color" : 0xff777777, }, { "name" : "HorizontalLine2", "type" : "line", "x" : 10, "y" : 35, "width" : 355, "height" : 0, "color" : 0xff111111, }, ## Vertical { "name" : "VerticalLine1", "type" : "line", "x" : 246, "y" : 38, "width" : 0, "height" : SERVER_LIST_HEIGHT + 4, "color" : 0xff777777, }, { "name" : "VerticalLine2", "type" : "line", "x" : 247, "y" : 38, "width" : 0, "height" : SERVER_LIST_HEIGHT + 4, "color" : 0xff111111, }, ## ListBox { "name" : "ServerList", "type" : "listbox2", "x" : 10, "y" : 40, "width" : 232, "height" : SERVER_LIST_HEIGHT, "item_align" : 1, }, { "name" : "ChannelList", "type" : "listbox", "x" : 255, "y" : 40, "width" : 109, "height" : SERVER_LIST_HEIGHT, "item_align" : 0, }, ## Buttons { "name" : "ServerSelectButton", "type" : "button", "x" : 267, "y" : SERVER_LIST_HEIGHT, "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptlocale.OK, }, { "name" : "ServerExitButton", "type" : "button", "x" : 267, "y" : SERVER_LIST_HEIGHT + 22, "default_image" : "d:/ymir work/ui/public/large_button_01.sub", "over_image" : "d:/ymir work/ui/public/large_button_02.sub", "down_image" : "d:/ymir work/ui/public/large_button_03.sub", "text" : uiScriptlocale.LOGIN_SELECT_EXIT, }, ), }, ), } locale_interface.txt Spoiler ACCEPT OK ACCE_ABSORB Aufnahme der Boni ACCE_COMBINE Kombination ACCE_MAIN Band 1 ACCE_RESULT Ergebnis ACCE_SERVE Band 2 ATTACH_METIN_INFO Willst du den Geiststein einsetzen? ATTACH_METIN_TITLE Geiststein einsetzen ATTENDANCE_TITLE Bossjäger-Event ATTR_67_ADD Bonus hinzufügen ATTR_67_ADD_TITLE Bonus hinzufügen ATTR_67_MATERIAL_SLOT_TITLE Fragmente ATTR_67_REGIST_SLOT_TITLE Zielitem ATTR_67_SUPPORT_SLOT_TITLE Ergänzung AURA_MAIN Auragewand AURA_SUB Material AUTO_AUTO_ATTACK Angreifen AUTO_AUTO_POSITION Tränke AUTO_AUTO_POTION Tränke AUTO_AUTO_RANGE Fokus AUTO_AUTO_RESTART Wiederbelebung AUTO_AUTO_SKILL Fertigkeiten AUTO_CLEAR Leeren AUTO_END Stop AUTO_OFF Aus AUTO_ON An AUTO_POSITION_SETTING Tränke AUTO_POTION_SETTING Tränke AUTO_SAVE Speichern AUTO_SETTING Einstellungen AUTO_SKILL_SETTING Fertigkeiten AUTO_START Start AUTO_TITLE Autojagd BANNER_ATTENDANCE_BUTTON Bossjäger-Event BANNER_BLACK_AND_WHITE_BUTTON Seherwettstreit BANNER_CATCHKING_BUTTON Schnapp den König BANNER_EASTER_BUTTON OSTERN BANNER_FISH_BUTTON FISCHPUZZLESPIEL BANNER_FLOWER_BUTTON BLUMENKINDER BANNER_FOOTBALL_BUTTON FUSSBALL BANNER_HALLOWEEN_BUTTON HALLOWEEN BANNER_LUCKY_EVENT MONSTERHATZ BANNER_MINIBOSS_BUTTON Zodiak-Apokalypse BANNER_MONSTERBACK_BUTTON Trefferpunkte einlösen BANNER_MYSTERY_BOX_BUTTON BEUTE-EVENT I BANNER_MYSTERY_BOX_BUTTON_2 BEUTE-EVENT II BANNER_NEW_XMAS_BUTTON WEIHNACHTEN BANNER_OKEY_BUTTON Okey-Event BANNER_OLYMPIC_BUTTON HELDENEVENT BANNER_RAMADAN_BUTTON RAMADAN BANNER_ROULETTE_BUTTON Ritual des Blutes BANNER_SOUL_BUTTON SEELENEVENT BANNER_SUMMER_BUTTON SOMMEREVENT BANNER_VALENTINE_BUTTON VALENTINSTAG BANNER_WORLD_BOSS_BUTTON Weltboss BANNER_YUTNORI_BUTTON Yutnori BATTLE_FIELD_INFO Kampfzone BATTLE_FIELD_OPERATION_TIME Kampfzonen-Beitritt möglich von %s:00 bis %s:00. BATTLE_FIELD_OPERATION_TIME_ALL Beitritt jederzeit möglich. BATTLE_FIELD_OPERATION_TIME_END Kampfzone noch %s h geöffnet. BATTLE_FIELD_OPERATION_TIME_NA Beitritt zurzeit nicht möglich. BATTLE_FIELD_OPERATION_TIME_OPEN Beitritt möglich in %s h für %s h. BATTLE_FILED_RANK Rang BATTLE_FILED_RANK_EMPIRE Reich BATTLE_FILED_RANK_NAME Name BATTLE_FILED_RANK_POINT Punkte BNW_GAME_UI_COM Gegner BNW_RANK_UI_COUNT Spendenzahl BNW_RANK_UI_NAME Name BNW_RANK_UI_RANK Rang CANCEL Abbruch CHANGE_ATTR_SELECT Bonus ändern CHANGE_PASSWORD_CONFIRM Passwort wiederholen CHANGE_PASSWORD_NEW Neues Passwort CHANGE_PASSWORD_OLD Altes Passwort CHANGE_PASSWORD_TITLE Passwortänderung CHARACTER_ACTION Aktionen CHARACTER_EMOTICON Emotion CHARACTER_MAIN Charakter CHARACTER_MUTUAL_ACTION Interaktive Aktionen CHARACTER_NORMAL_ACTION Normale Aktionen CHARACTER_QUEST Missionen CHARACTER_SKILL Fertigkeiten CHARACTER_SPECTIAL_ACTION Spezielle Aktionen CHAT_FILTER Chatfilter CHAT_FILTER_DICE Würfel CLOSE Schließen COMB_APPEARANCE Empfänger COMB_ATTRIBUTE Original COMB_MAIN Empfänger COMB_MATERIAL Original COMB_SKILLBOOK_TILE Bücher tauschen COMB_TITLE COSTUME_TITLE Kostüme COSTUME_WINDOW_TITLE Kostüme CREATE_ATT_GRADE STR CREATE_CREATE Erstellen CREATE_DEX_GRADE DEX CREATE_HP VIT CREATE_LAST_POINT Punkte CREATE_MAN Mann CREATE_NAME Name CREATE_NEXT Weiter CREATE_PREV Zurück CREATE_SEX Geschlecht CREATE_SHAPE Aussehen CREATE_SP INT CREATE_STAT_RESET Zurück CREATE_WOMAN Frau CUBE_INFO_TITLE Veredelungshandbuch CUBE_RENEWAL_BELT_IMPROVE Chance erhöhen CUBE_RENEWAL_TITLE Veredelung CUBE_REQUIRE_MATERIAL Erforderliche Materialien CUBE_REQUIRE_MATERIAL_OR oder CUBE_TITLE Veredelungsfenster CURRENT_POINT Aktuelle Punktanzahl: %s CZ_REWARD_WINDOW_TITLE Zodiak-Tempel DO_CHANGE_ATTR Anwenden DO_REFINE Veredeln DRAGONSOUL_ACTIVATE Aktivieren DRAGONSOUL_CHANGE_ATTR_WINDOW_TITLE Bonuswandel für mythische Drachensteine DRAGONSOUL_PAGE_BUTTON_1 Roh DRAGONSOUL_PAGE_BUTTON_2 Schliff DRAGONSOUL_PAGE_BUTTON_3 Rar DRAGONSOUL_PAGE_BUTTON_4 Antik DRAGONSOUL_PAGE_BUTTON_5 Legendär DRAGONSOUL_PAGE_BUTTON_6 Mythisch DRAGONSOUL_REFINE_WINDOW_TITLE Veredelungsfenster DRAGONSOUL_TAP_TITLE_1 Drachendiamant DRAGONSOUL_TAP_TITLE_2 Drachenrubin DRAGONSOUL_TAP_TITLE_3 Drachenjade DRAGONSOUL_TAP_TITLE_4 Drachensaphir DRAGONSOUL_TAP_TITLE_5 Drachengranat DRAGONSOUL_TAP_TITLE_6 Drachenonyx DRAGONSOUL_TITLE Drachensteinalchemie DUTCHAUCTION_BUTTON Los! DUTCHAUCTION_TITLE Blitzauktion EMPIRE_A Shinsoo EMPIRE_ALL Alle EMPIRE_B Chunjo EMPIRE_C Jinno EMPIRE_EXIT Beenden EMPIRE_NEXT Weiter EMPIRE_PREV Zurück EMPIRE_SELECT Wählen END_TIME Laufendes Event ENTER_BATTLE_FIELD Beitreten EVENT_ALARM_TITLE Eventübersicht EVENT_NAME_TITLE Name EVENT_REWARD_TITLE Belohnung EXCHANGE_ACCEPT OK EXCHANGE_TITLE Handeln EXIT_BATTLE_FIELD Möchtest du die Kampfzone wirklich verlassen? EXIT_BATTLE_FIELD_ON_DEAD Möchtest du die Kampfzone mit %d Punkt(en) verlassen? EXPIRED_TIME Event wurde beendet. FISHING_RENEWAL_TITLE Angeln FLOWER_EVENT_EXCHANGE_BUTTON_TEXT Eintauschen FLOWER_EVENT_SHOOT_CHRYSANTHEMUM_TEXT Chrysanthemensprösslinge FLOWER_EVENT_SHOOT_DAFFODIL_TEXT Narzissensprösslinge FLOWER_EVENT_SHOOT_LILY_TEXT Liliensprösslinge FLOWER_EVENT_SHOOT_MAY_BELL_TEXT Maiglöckchensprösslinge FLOWER_EVENT_SHOOT_SUNFLOWER_TEXT Sonnenblumensprösslinge FLOWER_EVENT_TITLE Sprösslinge im Inventar FRAGMENT_COMB_TITLE Fertigkeitsbücher kombinieren GAMEOPTION_TITLE Spieloptionen GAME_EXIT_OBSERVER Zuschauermodus beenden GAME_GUILD_WAR_JOIN Gildenkrieg beitreten GAME_HELP Hilfe GAME_QUEST Aufgaben GAME_SKILL_UP Fertigkeit erhöhen GAME_STAT_UP Status erhöhen GEMSHOP_LEFTTIME Verbleibende Zeit GEMSHOP_TITLA GAYAHANDEL GRADE Klasse GRADE_SELECT Klasse GRAPHICONOFF_DROP_ITEM_APPLY Anwenden GRAPHICONOFF_DROP_ITEM_LEVEL Itemdrop GRAPHICONOFF_DROP_ITEM_LEVEL1 1 GRAPHICONOFF_DROP_ITEM_LEVEL1_TOOLTIP Effekt & Name anzeigen GRAPHICONOFF_DROP_ITEM_LEVEL2 2 GRAPHICONOFF_DROP_ITEM_LEVEL2_TOOLTIP Effekt verbergen GRAPHICONOFF_DROP_ITEM_LEVEL3 3 GRAPHICONOFF_DROP_ITEM_LEVEL3_TOOLTIP Effekt & Name verbergen GRAPHICONOFF_DROP_ITEM_LEVEL4 4 GRAPHICONOFF_DROP_ITEM_LEVEL4_TOOLTIP Items verbergen & Name per Mouse-over GRAPHICONOFF_DROP_ITEM_LEVEL5 5 GRAPHICONOFF_DROP_ITEM_LEVEL5_TOOLTIP Items & Name nicht anzeigen GRAPHICONOFF_EFFECT_APPLY Anwenden GRAPHICONOFF_EFFECT_LEVEL Effekte GRAPHICONOFF_EFFECT_LEVEL1 1 GRAPHICONOFF_EFFECT_LEVEL1_TOOLTIP Alle anzeigen GRAPHICONOFF_EFFECT_LEVEL2 2 GRAPHICONOFF_EFFECT_LEVEL2_TOOLTIP Nur eigene und Monstereffekte GRAPHICONOFF_EFFECT_LEVEL3 3 GRAPHICONOFF_EFFECT_LEVEL3_TOOLTIP Nur eigene und andere Spielereffekte GRAPHICONOFF_EFFECT_LEVEL4 4 GRAPHICONOFF_EFFECT_LEVEL4_TOOLTIP Nur eigene anzeigen GRAPHICONOFF_EFFECT_LEVEL5 5 GRAPHICONOFF_EFFECT_LEVEL5_TOOLTIP Keine anzeigen GRAPHICONOFF_NPC_NAME_STATUS NPC-Namen GRAPHICONOFF_NPC_NAME_STATUS_OFF Aus GRAPHICONOFF_NPC_NAME_STATUS_OFF_TOOLTIP NPC-Namen verbergen GRAPHICONOFF_NPC_NAME_STATUS_ON An GRAPHICONOFF_NPC_NAME_STATUS_ON_TOOLTIP NPC-Namen anzeigen GRAPHICONOFF_PET_STATUS Pets GRAPHICONOFF_PET_STATUS_OFF Aus GRAPHICONOFF_PET_STATUS_OFF_TOOLTIP Pet verbergen GRAPHICONOFF_PET_STATUS_ON An GRAPHICONOFF_PET_STATUS_ON_TOOLTIP Pet anzeigen GRAPHICONOFF_PRIVATE_SHOP_APPLY Anwenden GRAPHICONOFF_PRIVATE_SHOP_LEVEL Private Läden GRAPHICONOFF_PRIVATE_SHOP_LEVEL1 1 GRAPHICONOFF_PRIVATE_SHOP_LEVEL1_TOOLTIP Alle anzeigen GRAPHICONOFF_PRIVATE_SHOP_LEVEL2 2 GRAPHICONOFF_PRIVATE_SHOP_LEVEL2_TOOLTIP Alle im großem Umkreis anzeigen GRAPHICONOFF_PRIVATE_SHOP_LEVEL3 3 GRAPHICONOFF_PRIVATE_SHOP_LEVEL3_TOOLTIP Alle im mittlerem Umkreis anzeigen GRAPHICONOFF_PRIVATE_SHOP_LEVEL4 4 GRAPHICONOFF_PRIVATE_SHOP_LEVEL4_TOOLTIP Alle im näheren Umkreis anzeigen GRAPHICONOFF_PRIVATE_SHOP_LEVEL5 5 GRAPHICONOFF_PRIVATE_SHOP_LEVEL5_TOOLTIP Alle im direkten Umkreis anzeigen GUILDWINDOW_BASE_BUFF Gildenbonus GUILD_ATTENDANCE_LOCA1 Erste Teilnahme: 1x Tapferkeitsmedaille GUILD_ATTENDANCE_LOCA2 10 oder mehr: 1x Tapferkeitsmedaille GUILD_ATTENDANCE_LOCA3 20 oder mehr: 2x Tapferkeitsmedaille GUILD_ATTENDANCE_LOCA4 30 oder mehr: 4x Tapferkeitsmedaille GUILD_ATTENDANCE_LOCA5 40 oder mehr: 6x Tapferkeitsmedaille GUILD_ATTENDANCE_LOCA6 50 oder mehr: 8x Tapferkeitsmedaille GUILD_ATTENDANCE_LOCA7 60 oder mehr: 10x Tapferkeitsmedaille GUILD_ATTENDANCE_LOCA8 70 oder mehr: 12x Tapferkeitsmedaille GUILD_ATTENDANCE_LOCA9 Teilnahmestart: täglich um 5:00 Uhr GUILD_ATTENDANCE_TITLE Teilnahmebelohnung GUILD_BANKINFO_CLOSE Schließen GUILD_BANKINFO_NAME Mitglied GUILD_BANKINFO_TITLE Gildenlager-Log GUILD_BANKINFO_TYPE Gegenstand/Währung GUILD_BANKINFO_USETYPE Aktion GUILD_BANK_CLOSE Schließen GUILD_BANK_INFO Lagerseite: GUILD_BASEINFO_BANK Gildenlager GUILD_BASEINFO_BANKLASTOUT Letzte Item-Entnahme GUILD_BASEINFO_BUILDING Gildengebäude GUILD_BASEINFO_FACTORY Gildenschmied GUILD_BASEINFO_GUILDLAND Gildenland GUILD_BASEINFO_LANDSCAPE Sonstige GUILD_BASEINFO_LOCALE Standort GUILD_BASEINFO_MONEY Kontostand GUILD_BASEINFO_MONEYBANKINFO Gildenbankinformationen GUILD_BASEINFO_MONEYLASTOUT Letzte Abhebung GUILD_BASEINFO_POWER Altar der Kraft GUILD_BASEINFO_SMEITER Gildenalchemist GUILD_BASEINFO_TITLE Landinformationen GUILD_BASENAME Basisname GUILD_BOARD_ID Name GUILD_BOARD_REFRESH Aktualisieren GUILD_BOARD_TEXT Nachricht GUILD_BUILDING_CATEGORY_TITLE Baueinheiten GUILD_BUILDING_CHANGE Wechseln GUILD_BUILDING_CHANGE_DELETE Löschen GUILD_BUILDING_CHANGE_FIX Gildenumbau GUILD_BUILDING_CHANGE_LIST Liste der Gildenobjekte GUILD_BUILDING_DIRECTION Ausrichtung GUILD_BUILDING_FIX Umbau GUILD_BUILDING_GRADE Rang GUILD_BUILDING_INFO Gebäude- und Kosteninformationen GUILD_BUILDING_LIST_TITLE Gebäudeliste GUILD_BUILDING_LOG Stamm GUILD_BUILDING_NAME Gebäudename GUILD_BUILDING_OPERATE Bedienen GUILD_BUILDING_PLY Sperrholz GUILD_BUILDING_POSITION Lage GUILD_BUILDING_PREVIEW Vorschau GUILD_BUILDING_PRICE Preis GUILD_BUILDING_REFRESH Aktualisieren GUILD_BUILDING_STONE Fu.stein GUILD_BUILDING_TITLE Gildenhausbau GUILD_CRYSTAL Kristall GUILD_DEPOSIT Zahlen GUILD_DONATE_BUTTON_OVER_TEXT Zufälliger Gegenstand GUILD_DONATE_COUNT Verfügbare Spenden: %d/%d GUILD_DONATE_GET_MEDAL_OF_HONOR %d GUILD_DONATE_GUILD_EXP Gilden-EXP GUILD_DONATE_HIGH_MATERIAL Hohe Spende GUILD_DONATE_MEDAL_OF_HONOR Tapferkeitsmedaille GUILD_DONATE_MIDDLE_MATERIAL Mittlere Spende GUILD_DONATE_MY_MEDAL_OF_HONOR Meine Tapferkeitsmedaillen GUILD_DONATE_NORMAL_MATERIAL 120.000 Yang GUILD_DONATE_TAB_HIGH Hohe Spende GUILD_DONATE_TAB_MIDDLE Mittlere Spende GUILD_DONATE_TAB_NORMAL Kleine Spende GUILD_DONATE_TITLE Spenden-EXP GUILD_DRAGONLAIR_RANKING Bestenliste GUILD_DRAGONLAIR_RANKING_COUNT Platz GUILD_DRAGONLAIR_RANKING_MEMBER Mitglieder GUILD_DRAGONLAIR_RANKING_NAME Gilde GUILD_DRAGONLAIR_RANKING_TIME Zeit GUILD_DROP_RESOURCE1 hier GUILD_DROP_RESOURCE2 Ressource fallen lassen GUILD_GEM Edelstein GUILD_GRADE_CHANGE_GRADE_NAME Neuer Rangname GUILD_GRADE_NUM Nr. GUILD_GRADE_PERMISSION_BANK Darf die Gildenbank und das Gildenlager nutzen GUILD_GRADE_PERMISSION_DELETE Entfernen GUILD_GRADE_PERMISSION_JOIN Einladen GUILD_GRADE_PERMISSION_NOTICE Notizen GUILD_GRADE_PERMISSION_SKILL Fertigkeiten GUILD_GRADE_PERMISSION_WAR Darf Mitglieder auswählen, die als Kämpfer teilnehmen können. GUILD_GRADE_RANK Rang GUILD_GRADE_WRITE Schreiben GUILD_INFO Gildeninformationen GUILD_INFO_CUR_EXP Erfahrung GUILD_INFO_DECALRE_WAR Krieg erklären GUILD_INFO_ENEMY_GUILD Feindliche Gilde GUILD_INFO_ENEMY_GUILD_EMPTY Keine GUILD_INFO_LEVEL Gilden-Level GUILD_INFO_MARK Gildenzeichen GUILD_INFO_MASTER Leader GUILD_INFO_MASTER_VALUE Leader GUILD_INFO_MEMBER_AVG_LEVEL Durchschnittliches Level GUILD_INFO_MEMBER_NUM Mitgliederzahl GUILD_INFO_NAME Gildenname GUILD_INFO_NAME_VALUE Dies ist ein Gildenname GUILD_INFO_OFFER_EXP Invest. GUILD_INFO_REST_EXP Nötige Erfahrung GUILD_INFO_UPLOAD_MARK Zeichen hochladen GUILD_INFO_UPLOAD_SYMBOL Flagge hochladen GUILD_MARK Gildenzeichen GUILD_MASTER_CHANGE_TITLEBAR Gildenleitung abgeben GUILD_MEMBER_JOB Klasse GUILD_MEMBER_KNIGHT Kämpfer GUILD_MEMBER_LEVEL Level GUILD_MEMBER_NAME Name GUILD_MEMBER_OUT_TITLEBAR Mitglied entfernen GUILD_MEMBER_PACE_ATTENDANCE Teilnahme ({0}/{1}) GUILD_MEMBER_RANK Rang GUILD_MEMBER_SPECIFIC_GRAVITY Invest. GUILD_METIN_STONE Geiststein GUILD_MINENAL Mineral GUILD_MONEY Yang GUILD_NAME Gilde GUILD_RESOURCE_INFO Ressourceninformationen GUILD_SKILLPAGE_LADDER Rangpunkte GUILD_SKILLPAGE_RANK Rang GUILD_SKILL_ACTIVE Aktiv GUILD_SKIlL_HEAL_GSP Aufladen GUILD_SKILL_PASSIVE Passiv GUILD_SKILL_POWER Energie GUILD_SKILL_STATE Fertigkeit der Gilde GUILD_SYMBOL Gildenflagge GUILD_WAR_ACCEPT Gildenkriegserklärung annehmen GUILD_WAR_ALLSCORE Alle Kämpfe GUILD_WAR_BATTLE_TYPE Kampfart GUILD_WAR_CTF Flagge GUILD_WAR_DECLARE Gildenkrieg erklären GUILD_WAR_ENEMY Gegner GUILD_WAR_GAINSCORE Punkte GUILD_WAR_GAINSCORE_FIFTY 50 GUILD_WAR_GAINSCORE_HUNDRED 100 GUILD_WAR_GAINSCORE_THIRTY 30 GUILD_WAR_GAMETIME Kampfzeit GUILD_WAR_GAMETIME_SIXTY 60 Min. GUILD_WAR_GAMETIME_TEN 10 Min. GUILD_WAR_GAMETIME_THIRTY 30 Min. GUILD_WAR_JOINMEMBER Mitglieder GUILD_WAR_JOINMEMBER_COUNT Mitglieder GUILD_WAR_JOINMEMBER_FIFTEEN 15 GUILD_WAR_JOINMEMBER_FIVE 5 GUILD_WAR_JOINMEMBER_TEN 10 GUILD_WAR_NORMAL Feld GUILD_WAR_REPORT Kriegsübersicht GUILD_WAR_REPORTLIST Übersicht (Kämpfe: K, Siege: S, Niederlagen: N, Unentschieden: U) GUILD_WAR_SCORE Kriegsübersicht GUILD_WAR_SKILL Gildenfertigkeiten GUILD_WAR_TYPE_DEFENSE Schildkampf GUILD_WAR_TYPE_DIE Arenakampf GUILD_WAR_TYPE_FLAG Flaggenkampf GUILD_WAR_TYPE_NORMAL Feldschlacht GUILD_WAR_TYPE_TIGER Vernichtungskampf GUILD_WAR_TYPE_TIME Zeitangriff GUILD_WAR_WARP Arena GUILD_WAR_WIN Runden GUILD_WAR_WIN_FIVE 5 GUILD_WAR_WIN_ONE 1 GUILD_WAR_WIN_THREE 3 GUILD_WATER Wasser GUILD_WATER_STONE Wasserstein GUILD_WITHDRAW Nehmen HELP_ATTACK Aktiviert den einmaligen Angriff per Mausklick. HELP_ATTACK_KEY Angreifen: linke Maustaste oder Leertaste HELP_AUTO_ATTACK Aktiviert den automatischen Angriff per Mausklick. HELP_CAMERA Kameraführung HELP_CHANGE_PK_MODE Angriffsmodus wechseln: Belegung der linken Maustaste ändern HELP_CHARACTER_BUTTON1 (Charakterfenster, Inventarfenster, HELP_CHARACTER_BUTTON2 Freundesliste und Optionen) HELP_CHAT Um mit entsprechenden Gruppen zu chatten, schreibe vor deinen Text: !(Rufchat), #(Gruppenchat) oder %(Gildenchat). HELP_CLICK_OTHER_PLAYER Mit Rechtsklick auf einen anderen Spieler kannst du handeln, Gruppen gründen und zu Duellen herausfordern. HELP_CONTROL_CAMERA_BY_MIDDLEBUTTON Voreinstellung Kamerasicht: mittlere Maustaste HELP_CONTROL_CAMERA_BY_RIGHTBUTTON Einstellung Kamerasicht ändern: rechte oder linke Maustaste belegen HELP_EMOTINO Mit der Tastenkombinationen <STRG> + <1~9> kannst du Emotionen zeigen. HELP_EXP Erfahrung HELP_FURY Ingame Item-Shop HELP_GUILD_WINDOW Gildenfenster öffnen: Alt + G HELP_HELP Hilfe anzeigen: H HELP_HELP_KEY Die Hilfe zeigt die Standardeinstellungen an. HELP_HP Trefferpunkte (TP) HELP_KEYSETTING Du kannst in den Spieloptionen deine eigenen Tastenkombinationen einstellen. HELP_MESSENGER_WINDOW Freundesliste öffnen: Alt + M HELP_MINIMAP Zeigt Minikarte an. HELP_MINIMAP_QUEST In der Mini- und Übersichtskarte werden dir Aufträge blinkend angezeigt. HELP_MOUSE_LEFT Funktion der linken Maustaste HELP_MOUSE_RIGHT Funktion der rechten Maustaste HELP_MOVE_KEY Steuerung: W, A, S, D oder Pfeiltasten HELP_OFF_QUESTSCROLL Mit <STRG> + Q kannst du die Questrollen ein- und ausblenden. HELP_OPEN_CHARACTER Charakterfenster öffnen: C HELP_OPEN_CHAT Chat-Fenster öffnen: Enter HELP_OPEN_INVENTORY Inventarfenster öffnen: I HELP_OPEN_LOG Chat-Protokoll (Log) öffnen: L HELP_OPEN_MINIMAP Minikarte öffnen: Shift + M HELP_OPEN_QUEST Auftragsfenster öffnen: N HELP_OPEN_SKILL Fertigkeitenfenster öffnen: V HELP_OPEN_WHISPER Flüsterfenster öffnen: Shift + Enter HELP_OPEN_ZONEMAP Übersichtskarte öffnen: M HELP_PICK_ITEM Gegenstände aufheben: ^ oder Y oder linke Maustaste HELP_QUICKSLOT Schnellzugriffsfelder HELP_SCREEN_CAPTURE Screenshot speichern: Druck bzw. Print (Speicherort ist der Ordner "Metin2\screenshot") HELP_SERVER Zeigt dir Server und Channel an. HELP_SHOW_ALL_NAME Namen anzeigen: Alt HELP_SKILL Hier kannst du eine Fertigkeit mit der rechten Maustaste nutzen. HELP_SP Manapunkte (MP) HELP_SYSTEM_BUTTON Systemtasten INVENTORY_PAGE_BUTTON_TOOLTIP_1 1. Inventar INVENTORY_PAGE_BUTTON_TOOLTIP_2 2. Inventar INVENTORY_PAGE_BUTTON_TOOLTIP_3 3. Inventar INVENTORY_PAGE_BUTTON_TOOLTIP_4 4. Inventar INVENTORY_TITLE Inventar ITEM_MALL Item-Shop KEYCHANGE_ACTION_WINDOW Aktionen KEYCHANGE_ATTACK Angreifen KEYCHANGE_AUTORUN Autom. laufen KEYCHANGE_AUTO_WINDOW Autojagd KEYCHANGE_BASEACTION Grundeinstellungen KEYCHANGE_CAM_DOWN1 Kamera (runter) KEYCHANGE_CAM_DOWN2 Kamera (runter) KEYCHANGE_CAM_LEFT1 Kamera (links) KEYCHANGE_CAM_LEFT2 Kamera (links) KEYCHANGE_CAM_RIGHT1 Kamera (rechts) KEYCHANGE_CAM_RIGHT2 Kamera (rechts) KEYCHANGE_CAM_UP1 Kamera (hoch) KEYCHANGE_CAM_UP2 Kamera (hoch) KEYCHANGE_CAM_ZOOM_IN1 Kamera (Zoom +) KEYCHANGE_CAM_ZOOM_IN2 Kamera (Zoom +) KEYCHANGE_CAM_ZOOM_OUT1 Kamera (Zoom -) KEYCHANGE_CAM_ZOOM_OUT2 Kamera (Zoom -) KEYCHANGE_CANCLE Abbrechen KEYCHANGE_CHAT_WINDOW Chat-Protokoll KEYCHANGE_CLEAR Standard KEYCHANGE_DDS_WINDOW DSS KEYCHANGE_DOWN1 Rückwärts KEYCHANGE_DOWN2 Rückwärts KEYCHANGE_DSS1 DS [Himmel] KEYCHANGE_DSS2 DS [Erde] KEYCHANGE_EMOTION1 Emotion (traurig) KEYCHANGE_EMOTION2 Emotion (Yang) KEYCHANGE_EMOTION3 Emotion (Musik) KEYCHANGE_EMOTION4 Emotion (Herz) KEYCHANGE_EMOTION5 Emotion (Herzchen) KEYCHANGE_EMOTION6 Emotion (Bombe) KEYCHANGE_EMOTION7 Emotion (Einfall) KEYCHANGE_EMOTION8 Emotion (Gewitter) KEYCHANGE_EMOTION9 Emotion (Sorry) KEYCHANGE_GUILD_WINDOW Gilde KEYCHANGE_HELP_WINDOW Hilfe KEYCHANGE_IMPOSSIBLE_CHANGE [STRG], [ALT], [UMSCHALT] sind hier nicht erlaubt! KEYCHANGE_INGAMEEVENT EVENT KEYCHANGE_INTERFACE Fenster KEYCHANGE_INVENTORY_WINDOW Inventar KEYCHANGE_KEY_SETTING Tastatureinstellungen KEYCHANGE_LEFT1 Links KEYCHANGE_LEFT2 Links KEYCHANGE_MESSENGER_WINDOW Freunde KEYCHANGE_MINIMAP_MINER Minimap (-) KEYCHANGE_MINIMAP_PLUS Minimap (+) KEYCHANGE_MINIMAP_WINDOW Übersichtskarte KEYCHANGE_MONSTER_CARD_WINDOW Monsterkarte KEYCHANGE_NEXT_TARGET Nächstes Ziel KEYCHANGE_PARTY_MATCH_WINDOW Gruppensuche KEYCHANGE_PASSIVE_ATTR1 Reliktbonus (Himmel) KEYCHANGE_PASSIVE_ATTR2 Reliktbonus (Erde) KEYCHANGE_PET_WINDOW Pet KEYCHANGE_QUEST_SCROLL_ONOFF Questanzeige KEYCHANGE_QUEST_WINDOW Missionen KEYCHANGE_QUICKSLOT1 Ebene 1 KEYCHANGE_QUICKSLOT2 Ebene 2 KEYCHANGE_QUICKSLOT3 Ebene 3 KEYCHANGE_QUICKSLOT4 Ebene 4 KEYCHANGE_RIDE Reiten KEYCHANGE_RIDE_BYE Pferd wegschicken KEYCHANGE_RIDE_HORSE Reiten KEYCHANGE_RIDE_PEED Pferd füttern KEYCHANGE_RIGHT1 Rechts KEYCHANGE_RIGHT2 Rechts KEYCHANGE_ROOT1 Aufheben KEYCHANGE_ROOT2 Aufheben KEYCHANGE_SAVE Speichern KEYCHANGE_SCREENSHOT Schnappschuss KEYCHANGE_SHOW_NAME Namen anzeigen KEYCHANGE_SKILL_WINDOW Fertigkeiten KEYCHANGE_SLOT1 Slot 1 KEYCHANGE_SLOT2 Slot 2 KEYCHANGE_SLOT3 Slot 3 KEYCHANGE_SLOT4 Slot 4 KEYCHANGE_SLOT5 Slot 5 KEYCHANGE_SLOT6 Slot 6 KEYCHANGE_SLOT7 Slot 7 KEYCHANGE_SLOT8 Slot 8 KEYCHANGE_SLOT_KET Schnellzugriff KEYCHANGE_STATUS_WINDOW Charakter KEYCHANGE_UP1 Vorwärts KEYCHANGE_UP2 Vorwärts LANGUAGE_AE Arabisch LANGUAGE_CZ Tschechisch LANGUAGE_DE Deutsch LANGUAGE_DK Dänisch LANGUAGE_EN Englisch LANGUAGE_ES Spanisch LANGUAGE_FR Französisch LANGUAGE_GR Griechisch LANGUAGE_HU Ungarisch LANGUAGE_IT Italienisch LANGUAGE_NL Niederländisch LANGUAGE_PL Polnisch LANGUAGE_PT Portugiesisch LANGUAGE_RO Rumänisch LANGUAGE_RU Russisch LANGUAGE_TR Türkisch LOAD_ERROR Die Datendatei ist beschädigt. Bitte Client neu installieren. Drücke jetzt die Taste ESC. LOGIN_CONNECT Verbinden LOGIN_CONNECTING Du wirst mit dem Server verbunden. LOGIN_DEFAULT_SERVERADDR Servername, Channel 1 LOGIN_EXIT Beenden LOGIN_ID Benutzername LOGIN_PASSWORD Passwort LOGIN_REGION_TITLE Ort für die Rechnungsstellung wählen LOGIN_SELECT_BUTTON Wählen LOGIN_SELECT_EXIT Beenden LOGIN_SELECT_OK OK LOGIN_SELECT_TITLE Server wählen LUCKY_BOX_NOTICE_YANG Yang-Gebühr für neues Item-Glück LUCKY_BOX_RECV_BUTTON Item annehmen LUCKY_BOX_RECV_NAME Inhalt: LUCKY_BOX_RETRY_BUTTON Neues Item-Glück LUCKY_BOX_TITLE_NAME Glückskistchen MAILBOX_POST_ALL_DELETE_BUTTON Alle löschen MAILBOX_POST_ALL_RECEIVE Alle annehmen MAILBOX_POST_READ_BLOCK Blockieren MAILBOX_POST_READ_DELETE Löschen MAILBOX_POST_READ_FROM Von MAILBOX_POST_READ_MAIN_TITLE Nachricht MAILBOX_POST_READ_RECV Annehmen MAILBOX_POST_READ_TITLE Betreff MAILBOX_POST_SEND_TITLE Nachricht MAILBOX_POST_WRITE_BUTTON_TEXT Senden MAILBOX_POST_WRITE_CLOSE_TEXT Schließen MAILBOX_POST_WRITE_CONFIRM_TEXT Empfänger prüfen MAILBOX_POST_WRITE_SEND_TEXT Senden MAILBOX_POST_WRITE_TITLE Betreff MAILBOX_POST_WRITE_TO An MAILBOX_TITLE Posteingang MALL_PASSWORD_TITLE Passwort MALL_TITLE Itemshop-Lager MARKET_TITLE Laden MARKLIST_REFRESH Aktualisieren MARKLIST_TITLE Gildenzeichen registrieren MC_ACHIEV_ABLE_REGIST Einfordern MC_ACHIEV_APPLY Anwenden MC_ACHIEV_APPLYING Aktiv MC_ACHIEV_BONUS_NONE Kein Bonus MC_ACHIEV_DISABLE Inaktiv MC_ACHIEV_DUNGEON Dungeon-Erfolge MC_ACHIEV_DUNGEON_BONUS Dungeon-Bonus MC_ACHIEV_FIELD Feld-Erfolge MC_ACHIEV_FIELD_BONUS Feld-Bonus MC_ACHIEV_REGIST Erfolg einfordern MC_ACHIEV_SHOW Details MC_ACHIEV_SORT_ABLE_REGIST Einfordern MC_ACHIEV_SORT_ALL Alle MC_ACHIEV_SORT_APPLYING Aktiv MC_ACHIEV_SORT_DISABLE Unerreicht MC_ACHIEV_SORT_REGIST Aktivierbar MC_EXCHANGE_BUTTON Austauschen MC_MISSION_INIT_BUTTON Missionsstufe zurücksetzen MC_MOTION_BUTTON Bewegung MC_POLY_BUTTON Verwandeln MC_PROMOTION_BUTTON Verbessern MC_REQUEST_MISSION_BUTTON Mission erhalten MC_REWARD_CARD_BUTTON Monsterkarte erhalten MC_SHUFFLE_BUTTON Missionskarten neu anordnen MC_SUMMON_BUTTON Beschwören MC_TAB_BUTTON_ACHIEV Erfolgs-Boni MC_TAB_BUTTON_CARD_MISSION Kartenmission MC_TAB_BUTTON_PARTY Dungeon-Sammlung MC_TAB_BUTTON_SOLO Feldsammlung MC_WARP_BUTTON Teleportieren MESSAGE Dies ist eine Nachricht MESSENGER_ADD_FRIEND Freund hinzufügen MESSENGER_BLOCK_FRIEND Blockieren MESSENGER_DELETE_FRIEND Löschen MESSENGER_MOBILE SMS senden MESSENGER_OPEN_GUILD Gildenfenster öffnen MESSENGER_TITLE Freunde MESSENGER_USE_GUILD_MOVE_SKILL Verwende die Gildenbewegungsfertigkeit MESSENGER_WHISPER Flüstern MINIGAME_FISH_EVENT_USE_COUNT Anzahl MINIMIZE Minimieren MINI_BOSS_DUNGEON_DESC_BTN Eventregeln MINI_BOSS_DUNGEON_TITLE_NAME Teilnehmer MINI_BOSS_DUNGEON_TITLE_NUM Rang MINI_BOSS_DUNGEON_TITLE_POINT Apokalypsenpunkte MINI_BOSS_DUNGEON_TOOTIP_01 Dungeon-Übersicht MINI_BOSS_DUNGEON_TOOTIP_02 Apokalypse für Level 40 bis 80 MINI_BOSS_DUNGEON_TOOTIP_03 Apokalypse ab Level 81 MINI_BOSS_DUNGEON_TOOTIP_04 Betreten MINI_BOSS_DUNGEON_TOOTIP_05 Verbleibende Zeit MINI_BOSS_DUNGEON_TOOTIP_06 Meine Apokalypsenpunkte MINI_BOSS_DUNGEON_TOOTIP_07 Verbleibende Apokalypsen MINI_BOSS_DUNGEON_TOOTIP_08 Meine Belohnung MINI_BOSS_TITLE Zodiak-Apokalypse MINI_GAME_BLACK_AND_WHITE_DONATE Spenden MINI_GAME_BLACK_AND_WHITE_GAME_TITLE Seherwettstreit MINI_GAME_BLACK_AND_WHITE_RANK_BUTTON Rangliste MINI_GAME_BLACK_AND_WHITE_REWARD_TRADE Preise MINI_GAME_BLACK_AND_WHITE_START_BUTTON Start MINI_GAME_BLACK_AND_WHITE_WAITTING_TITLE Seherwettstreit MINI_GAME_CATCHKING_CHALLENGE Einsatz MINI_GAME_CATCHKING_HELP_TEXT Regeln MINI_GAME_CATCHKING_HIGH_SCORE High Score MINI_GAME_CATCHKING_MYNUMBER Meine Karte MINI_GAME_CATCHKING_POPUP_CONFIRM Pop-Up an/aus MINI_GAME_CATCHKING_RETRY Neu spielen MINI_GAME_CATCHKING_REWARD Dein Gewinn MINI_GAME_CATCHKING_SCORE Punkte MINI_GAME_CATCHKING_SELECTION_NUMBER Aufgedeckte Karte MINI_GAME_CATCHKING_START_TEXT Start MINI_GAME_CATCHKING_TITLE Schnapp den König MINI_GAME_FISH_HELP_TEXT Hilfe MINI_GAME_FISH_START_TEXT Start MINI_GAME_FISH_TITLE Fischpuzzlespiel MINI_GAME_RUMI_DISCARD_TEXT Sicherer Modus MINI_GAME_RUMI_EXIT Beenden MINI_GAME_RUMI_LBUTTON_DESC Karte mit Linksklick hinzufügen MINI_GAME_RUMI_RBUTTON_DESC Karte mit Rechtsklick entfernen MINI_GAME_RUMI_SCORE Punkte MINI_GAME_RUMI_START_TEXT Start MINI_GAME_RUMI_TITLE Metin2 Okey-Kartenspiel MINI_GAME_YUTNORI_COM_TEXT Computer MINI_GAME_YUTNORI_PLAYER_TEXT Spieler MINI_GAME_YUTNORI_PROBABILITY Wahrscheinlichkeit MINI_GAME_YUTNORI_PROB_DESC Wähle einen Yut-Wurf aus, um ihm eine höhere Wahrscheinlichkeit zu verleihen. MINI_GAME_YUTNORI_REMAIN_COUNT Züge MINI_GAME_YUTNORI_REWARD_TEXT Belohnung MINI_GAME_YUTNORI_SCORE Punktestand MINI_GAME_YUTNORI_START_TEXT Start MINI_GAME_YUTNORI_THROW Werfen MINI_GAME_YUTNORI_TITLE Yutnori MINI_GAME_YUTNORI_YUTSEM1 Do MINI_GAME_YUTNORI_YUTSEM2 Ge MINI_GAME_YUTNORI_YUTSEM3 Geol MINI_GAME_YUTNORI_YUTSEM4 Yut MINI_GAME_YUTNORI_YUTSEM5 Mo MINI_GAME_YUTNORI_YUTSEM6 Back-do MISTS_ISLAND_EMPIRE_NAME Name des Reiches MISTS_ISLAND_EMPIRE_SCORE Punktzahl des Reiches MISTS_ISLAND_END_TIME Enddatum MISTS_ISLAND_EXIT Verlassen MISTS_ISLAND_INFO_TEXT Rang- und Statusinfo MISTS_ISLAND_RANK Rang MISTS_ISLAND_SCORE Punktzahl MISTS_ISLAND_TITLE_RANK Info zu Rang und Status MISTS_ISLAND_TITLE_SCORE Überblick MONSTER_CARD_ACHIEV_BONUS Erfolge MOUSEBUTTON_ATTACK Angreifen MOUSEBUTTON_AUTO_ATTACK Automatisch angreifen MOUSEBUTTON_CAMERA Kamera MOUSEBUTTON_SKILL Fertigkeiten MUSICLIST_TITLE Musikauswahl MYSHOP_DECO_CANCEL Schließen MYSHOP_DECO_DEFAULT Standard MYSHOP_DECO_NEXT Weiter MYSHOP_DECO_OK Abschließen MYSHOP_DECO_PREV Zurück MYSHOP_DECO_SELECT_MODEL Wähle das Aussehen deines Shops aus. MYSHOP_DECO_SELECT_TITLE Wähle das Aussehen deines Titels aus. NO Nein OK OK OPPOSITES Ablehnen OPTION_ALWAYS_SHOW_NAME Name OPTION_ALWAYS_SHOW_NAME_OFF Begrenzt OPTION_ALWAYS_SHOW_NAME_ON Immer OPTION_BLOCK Abblocken OPTION_BLOCK_EXCHANGE Handeln OPTION_BLOCK_FRIEND Freunde OPTION_BLOCK_GUILD Gilde OPTION_BLOCK_PARTY Gruppe OPTION_BLOCK_PARTY_REQUEST Anfrage OPTION_BLOCK_WHISPER Flüstern OPTION_CAMERA_DISTANCE Kamera OPTION_CAMERA_DISTANCE_LONG Fern OPTION_CAMERA_DISTANCE_SHORT Nah OPTION_DELETE_MOBILE_BUTTON Handynummer löschen OPTION_EFFECT Trefferanzeige OPTION_ENV_EFFECT Umwelt OPTION_ENV_EFFECT_OFF Aus OPTION_ENV_EFFECT_ON An OPTION_FOG Nebel OPTION_FOG_DENSE Viel OPTION_FOG_LIGHT Wenig OPTION_FOG_MIDDLE Mittel OPTION_FOG_OFF Aus OPTION_FOG_ON An OPTION_INPUT_MOBILE_BUTTON Handynummer eingeben OPTION_KEY_SETTING Tastatur OPTION_LANGUAGE_CHANGE Anwenden OPTION_LANGUAGE_SELECT Sprache OPTION_MOBILE Handy OPTION_MOB_INFO Monsterinfo OPTION_MOB_INFO_AGGR Aggressiv OPTION_MOB_INFO_LEVEL Level OPTION_MUSIC Musik OPTION_MUSIC_CHANGE Wechseln OPTION_MUSIC_DEFAULT_THEMA Standardtitel von Metin2 OPTION_NAME_COLOR Farbe Name OPTION_NAME_COLOR_EMPIRE Reichsfarbe OPTION_NAME_COLOR_NORMAL Normal OPTION_NIGHT_MODE Nacht OPTION_NIGHT_MODE_OFF Aus OPTION_NIGHT_MODE_ON An OPTION_PVPMODE PvP-Modus OPTION_PVPMODE_FREE Frei OPTION_PVPMODE_FREE_TOOLTIP Du darfst alle Spieler angreifen. OPTION_PVPMODE_GUILD Gilde OPTION_PVPMODE_GUILD_TOOLTIP Du darfst alle Spieler mit Ausnahme von Gildenmitgliedern angreifen. OPTION_PVPMODE_PEACE Frieden OPTION_PVPMODE_PEACE_TOOLTIP Du darfst keine Spieler deines Reiches angreifen. OPTION_PVPMODE_REVENGE Feindlich OPTION_PVPMODE_REVENGE_TOOLTIP Du darfst nur Spieler mit einer anderen Gesinnung angreifen. OPTION_SALESTEXT Ladenname OPTION_SALESTEXT_VIEW_OFF Ausblenden OPTION_SALESTEXT_VIEW_ON Einblenden OPTION_SETTING Öffnen OPTION_SNOW_MODE Schneefall OPTION_SNOW_MODE_OFF Aus OPTION_SNOW_MODE_ON An OPTION_SNOW_TEXTURE_MODE Schnee OPTION_SNOW_TEXTURE_MODE_OFF Aus OPTION_SNOW_TEXTURE_MODE_ON An OPTION_SOUND Effekte OPTION_TARGET_BOARD Zielmenü OPTION_TARGET_BOARD_NO_VIEW Schließen OPTION_TARGET_BOARD_VIEW Anzeigen OPTION_TITLE Optionen OPTION_VIEW_CHAT Chatzeile OPTION_VIEW_CHAT_OFF Ausblenden OPTION_VIEW_CHAT_ON Einblenden PARTY_MATCH_TEXT_DUNGEON_NAME Dungeon PARTY_MATCH_TEXT_DUNGEON_SELECT Wähle Dungeon PARTY_MATCH_TEXT_ENTREE_LEVEL Level : %d PARTY_MATCH_TEXT_LEVEL_LIMIT Levelanforderung PARTY_MATCH_TEXT_REQUEST_MATCH Suchen PARTY_MATCH_TEXT_REQUEST_MATCH_CANCEL Abbrechen PARTY_MATCH_TEXT_REQUIRED_ITEMS Itemanforderung PARTY_MEMBER_INFO_NAME Name des Gruppenmitglieds PASSIVE_ATTR_ACTIVATE_BUTTON Aktivieren PASSIVE_ATTR_UI_ADD_BUTTON Hinzufügen PASSIVE_ATTR_UI_CHARGE_BUTTON Aufladen PASSIVE_ATTR_UI_TITLE Reliktbonus PASSWORD_DESC_1 Gib dein Passwort ein, PASSWORD_DESC_2 um das Lager zu öffnen. PASSWORD_DESC_3 Passwort schon geändert? PASSWORD_DESC_4 Wenn nicht, ist dein Passwort: "000000". PASSWORD_DESC_5 Ändere dein Passwort im Lager. PASSWORD_TITLE Speicher-PW PET_AGE_TEXT Alter des Pets PET_ATTR_CHANGE_ITEM_TEXT Pet verzaubern PET_ATTR_CHANGE_TITLE Pettyp ändern PET_ATTR_CONFIRMATION Ändern PET_ATTR_DETERMINE_TITLE Neuer Pettyp PET_ATTR_OK Schließen PET_CHANGE_TEXT Pet PET_FEED_TITLE Füttern PET_FFED_BUTTON_TEXT Füttern PET_HATCHING_BUTTON Ausbrüten PET_HATCHING_NIK Name des Pets PET_HATCHING_WINDOW_TITLE Brutkasten PET_INFORMATION_ABILITIES Boni PET_INFORMATION_AGE Alter PET_INFORMATION_COSTUME_BONUS Kostümbonus PET_INFORMATION_DEFENCE Verteidigung PET_INFORMATION_EVOL_BUTTON Entwicklung PET_INFORMATION_EXP Erfahrung PET_INFORMATION_EXP_BUTTON Item EXP PET_INFORMATION_HP TP PET_INFORMATION_LEVEL Level PET_INFORMATION_LIFE Laufzeit PET_INFORMATION_LIFETIME_BUTTON Füttern PET_INFORMATION_LIFE_TIME Stunden PET_INFORMATION_SKILL Fertigkeiten PET_INFORMATION_SP MP PET_INFORMATION_TITLE Pet PET_NAME_CHANGE_BUTTON Ändern PET_NAME_CHANGE_WINDOW_TITLE Name ändern PET_REVIVE_BUTTON Wiederbeleben PET_REVIVE_CANCEL_BUTTON Abbrechen PET_REVIVE_MATERIAL_TITLE Material PET_REVIVE_REUSLT_TEXT Ergebnis PET_REVIVE_TARGET Wiederzubelebendes Pet PET_REVIVE_TITLE Pet wiederbeleben PICK_MONEY_TITLE Teilen PRIVATESHOPSEARCH_BUY Kaufen PRIVATESHOPSEARCH_COUNT Anzahl PRIVATESHOPSEARCH_ITEMNAME Name PRIVATESHOPSEARCH_ITEMTYPE Gegenstände PRIVATESHOPSEARCH_JOB Klasse PRIVATESHOPSEARCH_LEVEL Level PRIVATESHOPSEARCH_PRICE Preis PRIVATESHOPSEARCH_REFINE Gegenstandsstufe PRIVATESHOPSEARCH_SEARCH Suchen PRIVATESHOPSEARCH_SEARCH_BAR Suchen PRIVATESHOPSEARCH_SELECT Auswählen PRIVATESHOPSEARCH_SELLER Verkäufer PRIVATE_SHOP_CLOSE_BUTTON Laden schließen PRIVATE_SHOP_NAME Name des Ladens PRIVATE_SHOP_SEARCH_BY_VNUM_BOARD_TITLE Alle Ergebnisse PRIVATE_SHOP_SEARCH_BY_VNUM_CANCEL_BUTTON_TEXT Abbrechen PRIVATE_SHOP_SEARCH_BY_VNUM_SEARCH_BUTTON_TEXT Suchen PRIVATE_SHOP_TITLE Privaten Laden einrichten QUEST_UI_TEXT_COLLECTION Biologenaufträge QUEST_UI_TEXT_DAILY Tägliche Quest QUEST_UI_TEXT_EVENT Eventmissionen QUEST_UI_TEXT_LEVELUP Jagdauftrag QUEST_UI_TEXT_MAIN Hauptquests QUEST_UI_TEXT_SCROLL Missionsbücherquests QUEST_UI_TEXT_SUB Nebenquests QUEST_UI_TEXT_SYSTEM Spielmissionen REFINE_COST Verbesserungskosten: 0 Yang REFINE_ELEMENT_CHANGE_COST_TITLE Kosten REFINE_ELEMENT_CHANGE_DARK Dunkelheit REFINE_ELEMENT_CHANGE_EARTH Erde REFINE_ELEMENT_CHANGE_ELECT Blitz REFINE_ELEMENT_CHANGE_FIRE Feuer REFINE_ELEMENT_CHANGE_ICE Eis REFINE_ELEMENT_CHANGE_TITLE Element ändern REFINE_ELEMENT_CHANGE_WIND Wind REFINE_ELEMENT_DOWNGRADE_TITLE Herabstufung REFINE_ELEMENT_UPGRADE_TITLE Verbesserung REFINE_INFO Wahrscheinlichkeit auf erfolgreiche Verbesserung: 100% REFINE_MONEY Veredelungsgebühr REFINE_SELECT Veredelung REFINE_TTILE Verbesserungen REPORT_VIOLENT_WHISPER Petzen RESTART_GIVEUP Aufgeben RESTART_HERE Hier neu starten RESTART_IMMEDIATE Reinkarnation RESTART_TOWN In der Stadt neu starten ROULETTE_SPECIAL_TITLE Belohnungen (%s) ROULETTE_SPIN_TEXT1 DREHEN ROULETTE_SPIN_TEXT2 50 Seelen ROULETTE_SPIN_TEXT3 250.000 Yang ROULETTE_TITLE Belohnungen SAFE_CHANGE_PASSWORD Passwort ändern SAFE_TITLE Lager SELECT_ATTR_CHANGED Neu SELECT_ATTR_CURRENT Alt SELECT_ATTR_SELECT Auswählen SELECT_ATTR_TITLE Gegenstand verzaubern+ SELECT_ATT_GRADE STR SELECT_CREATE Erstellen SELECT_DELETE Löschen SELECT_DEX_GRADE DEX SELECT_EMPIRE_NAME Name des Reiches SELECT_EXIT Beenden SELECT_HP VIT SELECT_LEVEL Level SELECT_METIN_STONE_TITLE Geiststein wählen SELECT_NAME Name SELECT_NO_GUILD Keine Gilde SELECT_ORIGIN_STAT Startpunkt SELECT_PLAYTIME Spielzeit SELECT_SELECT Start SELECT_SP INT SELECT_SUNGMA_STAT SungMa-Wille SELECT_TITLE Titel auswählen SHOP_BUY Kaufen SHOP_SELL Verkaufen SHOP_TITLE Laden SKILL_SUPPORT_TITLE Standardfertigkeiten STEP Reinheitsgrad STEP_SELECT Reinheitsgrad STRENGTH Verstärken STRENGTH_SELECT Stufe STRUCTURE_VIEW_MODE Dekoration STRUCTURE_VIEW_TYPE_STRUCTURE Verbergen SUNGHAHEE_TOWER_CLEAR Geschafft SUNGMAHEE_TOWER_DUNGEON_ENTER_QUESTION Willst du Ebene %d betreten? SUNGMAHEE_TOWER_DUNGEON_EXIT_QUESTION Willst du die Herausforderung abbrechen? SUNGMAHEE_TOWER_ELEMENT_ALL Alle SUNGMAHEE_TOWER_ELEMENT_DARK Dunkelheit SUNGMAHEE_TOWER_ELEMENT_EARTH Erde SUNGMAHEE_TOWER_ELEMENT_ELEC Blitz SUNGMAHEE_TOWER_ELEMENT_FIRE Feuer SUNGMAHEE_TOWER_ELEMENT_ICE Eis SUNGMAHEE_TOWER_ELEMENT_TITLE Elemente auf der Ebene SUNGMAHEE_TOWER_ELEMENT_WIND Wind SUNGMAHEE_TOWER_ENTER_BUTTON Betreten SUNGMAHEE_TOWER_ENTER_TITLE Sung Mahis Höllenturm SUNGMAHEE_TOWER_EXIT_BUTTON Verlassen SUNGMAHEE_TOWER_INFO_BOARD_FLOOR E%d SUNGMAHEE_TOWER_MISSION_TYPE_ALL_KILL_MOB_PAUSE_SPECIAL Besiege alle Monster und Dämonensteine! SUNGMAHEE_TOWER_MISSION_TYPE_BOSS Töte alle Monster! SUNGMAHEE_TOWER_MISSION_TYPE_CHESS_FAIL Töte alle Monster! SUNGMAHEE_TOWER_MISSION_TYPE_COMPLETE Mission erfüllt SUNGMAHEE_TOWER_MISSION_TYPE_CORRECT_ITEM_USE Finde den Schlüssel und entkomme! SUNGMAHEE_TOWER_MISSION_TYPE_DEBUFF_RELEASE Töte alle Monster! SUNGMAHEE_TOWER_MISSION_TYPE_FINDING_RIGHT_MATCH_METIN_STONE Zerstöre den verfluchten Metin! SUNGMAHEE_TOWER_MISSION_TYPE_FINDING_RIGHT_MATCH_METIN_STONE_FAIL Töte alle Monster! SUNGMAHEE_TOWER_MISSION_TYPE_MONSTER_CHESS Töte ein Monsterpaar, das nicht zusammengehört! SUNGMAHEE_TOWER_MISSION_TYPE_NORMAL Töte alle Monster! SUNGMAHEE_TOWER_MISSION_TYPE_SEAL_RELEASE Brich die Siegel mit dem Siegelstein! SUNGMAHEE_TOWER_MISSION_TYPE_STAIRS Erklimme die Stufen zur nächsten Ebene! SUNGMAHEE_TOWER_MISSION_TYPE_SURVIVE Weiche allen Attacken aus! SUNGMAHEE_TOWER_MY_RANK_TITLE Rang SUNGMAHEE_TOWER_REWARD_INFO_TITLE Belohnungen SYSTEMOPTION_TITLE Systemoptionen SYSTEM_CHANGE Charakter wechseln SYSTEM_EXIT Spiel beenden SYSTEM_HELP Hilfe SYSTEM_LOGOUT Ausloggen SYSTEM_MALL Item-Shop SYSTEM_MOVE_CHANNEL Channel wechseln SYSTEM_OPTION Systemoptionen TASKBAR_CHARACTER Charakter [C/V/B/N] TASKBAR_CHAT Chat-Fenster [Enter] TASKBAR_DISABLE Deaktiviert TASKBAR_DRAGON_SOUL Drachensteinalchemie TASKBAR_EXPAND Fenster vergrößern TASKBAR_INVENTORY Inventar [I] TASKBAR_MESSENGER Freunde [Alt+M] TASKBAR_MONEY_EXPAND Vermögen TASKBAR_NEXT_QUICKSLOT Nächstes Schnellzugriffsfeld [Umschalt+Zahl, Alt] TASKBAR_PET_INFO Pet Info TASKBAR_PREV_QUICKSLOT Vorheriges Schnellzugriffsfeld [Umschalt+Zahl] TASKBAR_SYSTEM Optionen[ESC] TOTAL_RANKING Gesamtrangliste WARP_MI_LABEL Zum angegriffenen Schrein WEEKLY_RANKING Wöchentliche Rangliste WHISPER_BAN Abblocken WHISPER_NAME Zuflüstern WHISPER_REPORT report WHISPER_SEND Senden WORLD_BOSS_BREAK_TIME_TEXT Abklingzeit WORLD_BOSS_MIN_DAMAGE_TEXT Erf. Mindestschaden WORLD_BOSS_RANK Weltboss-Rangliste WORLD_BOSS_RANKING_BUTTON Rangliste WORLD_BOSS_RANK_EMPIRE Reich WORLD_BOSS_RANK_GUILD_NAME Gilde WORLD_BOSS_RANK_NAME Name WORLD_BOSS_RANK_RANK Rang WORLD_BOSS_RANK_TIER Beutestufe WORLD_BOSS_RUN_TIME_TEXT Kampfzeit WORLD_BOSS_TITLE Weltboss besiegt WORLD_BOSS_TOTAL_DAMAGE_TEXT Gesamtschaden WORLD_BUSS_REWARD_BUTTON Belohnung abholen YES Ja ZONE_MAP Übersichtskarte LOGIN_SAVE_BUTTON Save LOGIN_LOAD_BUTTON Load please, can you help me? or did you have any other interface that works with this client? Link to comment Share on other sites More sharing options...
Recommended Posts