Register for your free account! | Forgot your password?

You last visited: Today at 15:51

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Rls] ServerStateChecker für Dumme

Discussion on [Rls] ServerStateChecker für Dumme within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1
 
xCPx's Avatar
 
elite*gold: 20
Join Date: Jun 2011
Posts: 2,897
Received Thanks: 3,336
[Rls] ServerStateChecker für Dumme

Hi.
Da es scheinbar immernoch Leute gibt, die keinerlei Ahnung haben wie man den ServerStateChecker nutzt und deshalb auf Socket.py etc zurückgreifen, was das ganze nur viel komplizierter macht, release ich mal meine ServerState klasse, vllt kann ja jemand was mit Anfangen.


Code:
import ui
import ServerStateChecker

class ServerState(ui.ScriptWindow):
	
	def __init__(self):
		ui.ScriptWindow.__init__(self)
		ServerStateChecker.Create(self)
		self.key = 0
		self.Channeldict = {}
		self.STATE_DICT ={
			0 : '....',
			1 : 'NORM',
			2 : 'BUSY',
			3 : 'FULL'	}
		self.Show()


	def Close(self):
		ServerStateChecker.Initialize(self)

	def AddChannel(self, name, ip, port):
		self.key = self.key+1
		self.Channeldict[name] = {"key": self.key, "port": port, "ip": ip, "state" : self.GetNone()}
		ServerStateChecker.AddChannel(self.key, ip, port)

	def GetNameByKey(self, key):
		for k in self.Channeldict:
			if(self.Channeldict[k]["key"] == key):
				return k
		return "NONE"
	def Request(self):
		ServerStateChecker.Request()

	def GetNone(self):
		return self.STATE_DICT[0]
	def GetState(self, name):
		try:
			return self.Channeldict[name]["state"]
		except:
			return self.GetNone()

	def IsOnline(self, name):
		if(self.GetState(name) != self.GetNone()):
			return True
		return False

	def OnUpdate(self):
		ServerStateChecker.Update()

	def NotifyChannelState(self, key, state):
		try:
			stateName=self.STATE_DICT[state]
		except:
			stateName=self.GetNone()
		name = self.GetNameByKey(key)
		if(name != "NONE"):
			self.Channeldict[name]["state"] = stateName


An sich recht einfach: Ihr entfernt alles was mit ServerStateChecker zu tun hat aus eurer intrologin und verwendet die Klasse wie folgt (bei mir heist die py serverstate.py):


ihr Deklariert und initialisiert ein Objekt der Klasse ServerState, z.B. am oberen Ende der IntroLogin

Code:
import ServerState
serverstates = ServerState.ServerState()

alles was ihr sonst noch tun müsst ist channels adden und diese dann abfragen:

Code:
serverstates.AddChannel("CH1", "127.0.0.1", 13001)
serverstates.AddChannel("CH2", "127.0.0.1", 13002)
serverstates.Request()
nachdem ihr das getan habt könnt ihr jeden Status des jeweiligen CH`s mühelos mit:

Code:
serverstates.GetState("CH1")
abfragen.

Bzw um lediglich zu sehen ob er Online oder nicht ist:

Code:
serverstates.IsOnline("CH1")
Als kleines Geschenk, weil ich heut gut drauf bin hab ich mal n typisches socket.py teil umgeschrieben:


Code:
import dbg
import app
import net
import ui
import ime
import snd
import wndMgr
import musicInfo
import serverInfo
import systemSetting
import ServerStateChecker
import locale
import constInfo
import uiCommon
import time
import ServerCommandParser
import ime
import uiScriptLocale
import chat
import sys
import md5
import background
import os
import string
import constinfo
import linecache
import localeInfo
import ServerState

########Config########
DEINEIP = "127.0.0.1"
CH1PORT = 13001
CH2PORT = 13002
CH3PORT = 13003
CH4PORT = 13004
AUTHPORT = 4000
SERVERNAME = "Micha World"
LOGINDATENSPEICHERN = 1 #0 = aus / 1 = an
FORUMLINK = "http://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/"
YOUTUBELINK = "http://www.youtube.com"
FACEBOOKLINK = "http://www.facebook.com"
SERVERSTATES = ServerState.ServerState()
####################

#####Ab hier nichts mehr ändern!######

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 = TRUE

PASSPOD_MSG_DICT = {}

VIRTUAL_KEYBOARD_NUM_KEYS = 46
VIRTUAL_KEYBOARD_RAND_KEY = FALSE

CH1STATE = 0
CH2STATE = 0
CH3STATE = 0
CH4STATE = 0

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

if localeInfo.IsNEWCIBN() or localeInfo.IsCIBN10():
	LOGIN_DELAY_SEC = 20.0
	FULL_BACK_IMAGE = TRUE
	NEWCIBN_PASSPOD_AUTH = TRUE
	PASSPOD_MSG_DICT = {
		"PASERR1"	: localeInfo.LOGIN_FAILURE_PASERR1,
		"PASERR2"	: localeInfo.LOGIN_FAILURE_PASERR2,
		"PASERR3"	: localeInfo.LOGIN_FAILURE_PASERR3,
		"PASERR4"	: localeInfo.LOGIN_FAILURE_PASERR4,
		"PASERR5"	: localeInfo.LOGIN_FAILURE_PASERR5,
	}

elif localeInfo.IsYMIR() or localeInfo.IsCHEONMA():
	FULL_BACK_IMAGE = TRUE

elif localeInfo.IsHONGKONG():
	FULL_BACK_IMAGE = TRUE
	RUNUP_MATRIX_AUTH = TRUE 
	PASSPOD_MSG_DICT = {
		"NOTELE"	: localeInfo.LOGIN_FAILURE_NOTELEBLOCK,
	}

elif localeInfo.IsJAPAN():
	FULL_BACK_IMAGE = TRUE

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, state):
		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,
			
			"HACK"		: "Du wurdest wegen hacken gesperrt.",
			"BOT"		: "Du wurdest wegen benutzung von Bots gesperrt.",
			"SCAM"		: "Du wurdest wegen Betrug gesperrt.",
			"INSULT"	: "Du wurdest wegen Beleidigung gesperrt.",
			"FAKE"		: "Du wurdest aufgrund deiner Namensgebung gesperrt.",
			"NAME"		: "Du wurdest aufgrund deiner Namensgebung gesperrt.",
			"BUG"		: "Du wurdest wegen Bugusing gesperrt.",
			"DK"		: "Du wurdest wegen Dauerkill gesperrt.",
			"OTHER"		: "Du wurdest von der Serverleitung gesperrt.",
		}

		self.loginFailureFuncDict = {
			"WRONGPWD"	: self.__DisconnectAndInputPassword,
			"WRONGMAT"	: self.__DisconnectAndInputMatrix,
			"QUIT"		: 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.py")
		
		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("demonking").Show()

			else:
				self.__RefreshServerList()
				self.__OpenServerBoard()

		app.ShowCursor()
		
	def Close(self):

		if self.connectingDialog:
			self.connectingDialog.Close()
		self.connectingDialog = None

		#ServerStateChecker.Destroy(self)

		print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW "
		#
		# selectMusicÀÌ ¾øÀ¸¸é BGMÀÌ ²÷±â¹Ç·Î µÎ°³ ´Ù üũÇÑ´Ù. 
		#
		if musicInfo.loginMusic != "" and musicInfo.selectMusic != "":
			snd.FadeOutMusic("BGM/"+musicInfo.loginMusic)

		## NOTE : idEditLine¿Í pwdEditLineÀº À̺¥Æ®°¡ ¼*·Î ¿¬°á µÇ¾îÀÖ¾î¼*
		##        Event¸¦ °*Á¦·Î ÃʱâÈ* ÇØÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù - [levites]
		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.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 localeInfo.IsEUROPE():
			if self.idEditLine != None: #0000862: [M2EU] ·Î±×ÀÎâ Æ˾÷ ¿¡·¯: Á¾·á½Ã ¸ÕÀú None ¼³Á¤µÊ
				self.idEditLine.SetText("")
				self.idEditLine.SetFocus() #0000685: [M2EU] ¾ÆÀ̵ð/ºñ¹Ð¹øÈ£ À¯Ãß °¡´É ¹ö±× ¼öÁ¤: ¹«Á¶°Ç ¾ÆÀ̵ð·Î Æ÷Ä¿½º°¡ °¡°Ô ¸¸µç´Ù

			if self.pwdEditLine != None: #0000862: [M2EU] ·Î±×ÀÎâ Æ˾÷ ¿¡·¯: Á¾·á½Ã ¸ÕÀú None ¼³Á¤µÊ
				self.pwdEditLine.SetText("")
		else:
			if self.pwdEditLine != None:
				self.pwdEditLine.SetFocus()								

	def OnEndCountDown(self):
		self.isNowCountDown = 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):
		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.connectBoard			= GetObject("ConnectBoard")
			self.loginBoard				= GetObject("LoginBoard")
			self.idEditLine				= GetObject("ID_EditLine")
			self.pwdEditLine			= GetObject("Password_EditLine")
			self.ch1_offline_demon				= GetObject("Channel1_offline_demon")
			self.ch2_offline_demon				= GetObject("Channel2_offline_demon")
			self.ch3_offline_demon				= GetObject("Channel3_offline_demon")
			self.ch4_offline_demon				= GetObject("Channel4_offline_demon")
			self.ch1_online_demon				= GetObject("Channel1_online_demon")
			self.ch2_online_demon				= GetObject("Channel2_online_demon")
			self.ch3_online_demon				= GetObject("Channel3_online_demon")
			self.ch4_online_demon				= GetObject("Channel4_online_demon")
			self.ch1_online_markiert_demon				= GetObject("Channel1_online_markiert_demon")
			self.ch2_online_markiert_demon				= GetObject("Channel2_online_markiert_demon")
			self.ch3_online_markiert_demon				= GetObject("Channel3_online_markiert_demon")
			self.ch4_online_markiert_demon				= GetObject("Channel4_online_markiert_demon")
			self.ch1_offline_markiert_demon				= GetObject("Channel1_offline_markiert_demon")
			self.ch2_offline_markiert_demon				= GetObject("Channel2_offline_markiert_demon")
			self.ch3_offline_markiert_demon				= GetObject("Channel3_offline_markiert_demon")
			self.ch4_offline_markiert_demon				= GetObject("Channel4_offline_markiert_demon")
			self.loginButton			= GetObject("LoginButton")
			self.forum					= GetObject("forum")
			self.youtube					= GetObject("youtube")
			self.facebook					= GetObject("facebook")
			self.oben_links					= GetObject("oben_links")
			
			self.idEditLine.SetFontColor(71, 96, 144)
			self.pwdEditLine.SetFontColor(71, 96, 144)
			
			## ACCMANAGER
			
			self.endles		= GetObject("endles")

			# 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()

		except:
			import exception
			exception.Abort("LoginWindow.__LoadScript.BindObject")

		self.serverBoard.OnKeyUp = ui.__mem_func__(self.__ServerBoard_OnKeyUp)
		self.xServerBoard, self.yServerBoard = self.serverBoard.GetLocalPosition()

		self.loginButton.SetEvent(ui.__mem_func__(self.__OnClickLoginButton))
		self.forum.SetEvent(ui.__mem_func__(self.__forum))
		self.youtube.SetEvent(ui.__mem_func__(self.__youtube))
		self.facebook.SetEvent(ui.__mem_func__(self.__facebook))
		
		## ACCMANAGER

		self.endles.SetEvent(self.__OnClickExitButton)

		## END ACCMANAGER
		
		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))

		# 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("demonking").Show()
		return 1

	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(1, 1, 1)
				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)

		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=ij¸¯ÅÍ ¼±Åà À妽º (¾ø°Å³ª -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(localeInfo.CHANNEL_TEST_SERVER_ADDR % (addr, port))
			except:
				try:
					addr=serverInfo.TESTADDR["ip"]
					port=serverInfo.TESTADDR["tcp_port"]

					net.SetMarkServer(addr, port)
					self.__SetServerInfo(localeInfo.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()

		# CHINA_MATRIX_CARD_BUG_FIX
		## A~Z ±îÁö 26 À̳»ÀÇ °ªÀÌ µé¾îÀÖ¾î¾ß¸¸ ÇÑ´Ù.
		## Python Exception Log ¿¡¼* ±× ÀÌ»óÀÇ °ªÀÌ µé¾îÀÖ¾î¼* ¿¡·¯ ¹æÁö
		## Çåµ¥ ¿Ö Çѱ¹ÂÊ ·Î±×¿¡¼* ÀÌ°Ô È°¿ëµÇ´ÂÁö´Â ¸ð¸£°ÚÀ½
		row1 = min(30, row1)
		row2 = min(30, row2)
		row3 = min(30, row3)
		row4 = min(30, row4)
		# END_OF_CHINA_MATRIX_CARD_BUG_FIX

		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):
		if(SERVERSTATES.IsOnline("CH1")):
			self.ch1_offline_demon.Hide()
			self.ch1_online_demon.Show()
			CH1STATE = 1
		else:
			self.ch1_online_demon.Hide()
			CH1STATE = 0
		if(SERVERSTATES.IsOnline("CH2")):
			self.ch2_offline_demon.Hide()
			self.ch2_online_demon.Show()
			CH1STATE = 1
		else:
			self.ch2_online_demon.Hide()
			CH2STATE = 0
		if(SERVERSTATES.IsOnline("CH3")):
			self.ch3_offline_demon.Hide()
			self.ch3_online_demon.Show()
			CH3STATE = 1
		else:
			self.ch3_online_demon.Hide()
			CH3STATE = 0
		if(SERVERSTATES.IsOnline("CH4")):
			self.ch4_offline_demon.Hide()
			self.ch4_online_demon.Show()
			CH4STATE = 1
		else:
			self.ch4_online_demon.Hide()
			CH4STATE = 0



		#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):
		self.ch1_offline_markiert_demon.Hide()
		self.ch2_offline_markiert_demon.Hide()
		self.ch3_offline_markiert_demon.Hide()
		self.ch4_offline_markiert_demon.Hide()
		self.ch1_online_markiert_demon.Hide()
		self.ch2_online_markiert_demon.Hide()
		self.ch3_online_markiert_demon.Hide()
		self.ch4_online_markiert_demon.Hide()
		self.ch3_online_demon.Hide() #Auskommentieren wenn ihr CH3+4 habt
		self.ch4_online_demon.Hide() #Auskommentieren wenn ihr CH3+4 habt
		global DEINEIP
		global CH1PORT
		global AUTHPORT
		global CH2PORT
		global SERVERNAME
		global CH3PORT
		global CH4PORT
		global CH1STATE
		global CH2STATE
		global CH3STATE
		global CH4STATE
		global LOGINDATENSPEICHERN
		if LOGINDATENSPEICHERN==1:
			login = linecache.getline("pack/loginsetting", 1)
			password = linecache.getline("pack/loginsetting", 2)
			self.idEditLine.SetText(login)
			self.pwdEditLine.SetText(password)
			id = self.idEditLine.GetText()
			id = id.replace('\n', '')
			self.idEditLine.SetText(id)
		
		self.ch1_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon))
		self.ch2_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon))
		self.ch3_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon))
		self.ch4_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon))
		self.ch1_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon))
		self.ch2_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon))
		self.ch3_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon))
		self.ch4_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon))
		self.ch1_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon))
		self.ch2_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon))
		self.ch3_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon))
		self.ch4_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon))
		self.ch1_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon))
		self.ch2_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon))
		self.ch3_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon))
		self.ch4_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon))
		print "XMAS_SNOW ON"
		background.EnableSnow(1)


		# 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()
			
			self.__LoadACCNames()

		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()

		SERVERSTATES.AddChannel("CH1", DEINEIP, CH1PORT)
		SERVERSTATES.AddChannel("CH2", DEINEIP, CH2PORT)
		SERVERSTATES.AddChannel("CH3", DEINEIP, CH3PORT)
		SERVERSTATES.AddChannel("CH4", DEINEIP, CH4PORT)
		SERVERSTATES.Request()
		
		self.stream.SetConnectInfo(DEINEIP, CH1PORT, DEINEIP, AUTHPORT)
		net.SetServerInfo(SERVERNAME + " - Ch 1")
		net.SetMarkServer(DEINEIP, CH1PORT)
		app.SetGuildMarkPath("10.tga")
		app.SetGuildSymbolPath("10")  
		if CH1STATE:
			self.ch1_online_demon.Hide()
			self.ch1_online_markiert_demon.Show()
		else:
			self.ch1_offline_demon.Hide()
			self.ch1_offline_markiert_demon.Show()
		
		if CH2STATE:
			self.ch2_online_demon.Show()
			self.ch2_online_markiert_demon.Hide()
		else:
			self.ch2_offline_demon.Show()
			self.ch2_offline_markiert_demon.Hide()
			
		if CH3STATE:
			self.ch3_online_demon.Show()
			self.ch3_online_markiert_demon.Hide()
		else:
			self.ch3_offline_demon.Show()
			self.ch3_offline_markiert_demon.Hide()
			
		if CH4STATE:
			self.ch4_online_demon.Show()
			self.ch4_online_markiert_demon.Hide()
		else:
			self.ch4_offline_demon.Show()
			self.ch4_offline_markiert_demon.Hide()

		global SKIP_LOGIN_PHASE
		if SKIP_LOGIN_PHASE:
			if not self.loginInfo:
				self.connectBoard.Hide()
				
	def __OpenLoginBoard(self):
		print "XMAS_SNOW ON"
		background.EnableSnow(1)

		# 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()
			
			self.__LoadACCNames()

		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")
			if localeInfo.IsBRAZIL() or localeInfo.IsCANADA():
				self.serverList.InsertItem(id, "%s" % (name))
			else:
				if localeInfo.IsCIBN10():			
					if name[0] == "#":
						self.serverList.InsertItem(-1, "  %s" % (name[1:]))
					else:
						self.serverList.InsertItem(id, "  %s" % (name))
						visible_index += 1
				else:
					self.serverList.InsertItem(id, "  %02d. %s" % (visible_index, 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

		for id, channelDataDict in channelDict.items():
			key=channelDataDict["key"]
			ip=channelDataDict["ip"]
			udp_port=channelDataDict["udp_port"]
			#ServerStateChecker.Request(key, ip, udp_port)

	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=int(addrKey/1000)
		serverID=int(addrKey/10) % 100
		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("demonking").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.__RefreshServerList()
		self.__OpenServerBoard()

	def __OnClickch1_demon(self):
		global DEINEIP
		global CH1PORT
		global AUTHPORT
		global SERVERNAME
		self.stream.SetConnectInfo(DEINEIP, CH1PORT, DEINEIP, AUTHPORT)
		net.SetServerInfo(SERVERNAME + " - Ch 1")
		net.SetMarkServer(DEINEIP, CH1PORT)
		app.SetGuildMarkPath("10.tga")
		app.SetGuildSymbolPath("10")  
		if CH1STATE:
			self.ch1_online_demon.Hide()
			self.ch1_online_markiert_demon.Show()
		else:
			self.ch1_offline_demon.Hide()
			self.ch1_offline_markiert_demon.Show()
		
		if CH2STATE:
			self.ch2_online_demon.Show()
			self.ch2_online_markiert_demon.Hide()
		else:
			self.ch2_offline_demon.Show()
			self.ch2_offline_markiert_demon.Hide()
			
		if CH3STATE:
			self.ch3_online_demon.Show()
			self.ch3_online_markiert_demon.Hide()
		else:
			self.ch3_offline_demon.Show()
			self.ch3_offline_markiert_demon.Hide()
			
		if CH4STATE:
			self.ch4_online_demon.Show()
			self.ch4_online_markiert_demon.Hide()
		else:
			self.ch4_offline_demon.Show()
			self.ch4_offline_markiert_demon.Hide()

	def __OnClickch2_demon(self):
		global DEINEIP
		global CH2PORT
		global AUTHPORT
		global SERVERNAME
		self.stream.SetConnectInfo(DEINEIP, CH2PORT, DEINEIP, AUTHPORT)
		net.SetServerInfo(SERVERNAME + " - Ch 2")
		net.SetMarkServer(DEINEIP, CH2PORT)
		app.SetGuildMarkPath("10.tga")
		app.SetGuildSymbolPath("10")  
		if CH2STATE:
			self.ch2_online_demon.Hide()
			self.ch2_online_markiert_demon.Show()
		else:
			self.ch2_offline_demon.Hide()
			self.ch2_offline_markiert_demon.Show()
		
		if CH1STATE:
			self.ch1_online_demon.Show()
			self.ch1_online_markiert_demon.Hide()
		else:
			self.ch1_offline_demon.Show()
			self.ch1_offline_markiert_demon.Hide()
			
		if CH3STATE:
			self.ch3_online_demon.Show()
			self.ch3_online_markiert_demon.Hide()
		else:
			self.ch3_offline_demon.Show()
			self.ch3_offline_markiert_demon.Hide()
			
		if CH4STATE:
			self.ch4_online_demon.Show()
			self.ch4_online_markiert_demon.Hide()
		else:
			self.ch4_offline_demon.Show()
			self.ch4_offline_markiert_demon.Hide()

	def __OnClickch3_demon(self):
		global DEINEIP
		global CH3PORT
		global AUTHPORT
		global SERVERNAME
		self.stream.SetConnectInfo(DEINEIP, CH3PORT, DEINEIP, AUTHPORT)
		net.SetServerInfo(SERVERNAME + " - Ch 3")
		net.SetMarkServer(DEINEIP, CH3PORT)
		app.SetGuildMarkPath("10.tga")
		app.SetGuildSymbolPath("10")  
		if CH3STATE:
			self.ch3_online_demon.Hide()
			self.ch3_online_markiert_demon.Show()
		else:
			self.ch3_offline_demon.Hide()
			self.ch3_offline_markiert_demon.Show()
		
		if CH2STATE:
			self.ch2_online_demon.Show()
			self.ch2_online_markiert_demon.Hide()
		else:
			self.ch2_offline_demon.Show()
			self.ch2_offline_markiert_demon.Hide()
			
		if CH1STATE:
			self.ch1_online_demon.Show()
			self.ch1_online_markiert_demon.Hide()
		else:
			self.ch1_offline_demon.Show()
			self.ch1_offline_markiert_demon.Hide()
			
		if CH4STATE:
			self.ch4_online_demon.Show()
			self.ch4_online_markiert_demon.Hide()
		else:
			self.ch4_offline_demon.Show()
			self.ch4_offline_markiert_demon.Hide()
		
	def __OnClickch4_demon(self):
		global DEINEIP
		global CH4PORT
		global AUTHPORT
		global SERVERNAME
		self.stream.SetConnectInfo(DEINEIP, CH4PORT, DEINEIP, AUTHPORT)
		net.SetServerInfo(SERVERNAME + " - Ch 4")
		net.SetMarkServer(DEINEIP, CH4PORT)
		app.SetGuildMarkPath("10.tga")
		app.SetGuildSymbolPath("10")  
		if CH4STATE:
			self.ch4_online_demon.Hide()
			self.ch4_online_markiert_demon.Show()
		else:
			self.ch4_offline_demon.Hide()
			self.ch4_offline_markiert_demon.Show()
		
		if CH2STATE:
			self.ch2_online_demon.Show()
			self.ch2_online_markiert_demon.Hide()
		else:
			self.ch2_offline_demon.Show()
			self.ch2_offline_markiert_demon.Hide()
			
		if CH3STATE:
			self.ch3_online_demon.Show()
			self.ch3_online_markiert_demon.Hide()
		else:
			self.ch3_offline_demon.Show()
			self.ch3_offline_markiert_demon.Hide()
			
		if CH1STATE:
			self.ch1_online_demon.Show()
			self.ch1_online_markiert_demon.Hide()
		else:
			self.ch1_offline_demon.Show()
			self.ch1_offline_markiert_demon.Hide()
		
	def __forum(self):
		global FORUMLINK
		os.system("start " + FORUMLINK)
		
	def __youtube(self):
		global YOUTUBELINK
		os.system("start " + YOUTUBELINK)
		
	def __facebook(self):
		global FACEBOOKLINK
		os.system("start " + FACEBOOKLINK)
		
	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
		if LOGINDATENSPEICHERN==1:
			id = self.idEditLine.GetText()
			pwd = self.pwdEditLine.GetText()
			f = open("pack\loginsetting", "w")
			f.write (id + "\n" + pwd)
			f.close()

		self.Connect(id, pwd)
xCPx is offline  
Thanks
11 Users
Old 03/16/2016, 16:20   #2
 
UltraShock's Avatar
 
elite*gold: 50
Join Date: Nov 2014
Posts: 400
Received Thanks: 516
Quote:
ServerStateChecker für Dumme
Nett gesagt
Quote:
Professioneller ServerStateChecker
Ich verstehe immer noch nicht ganz was diese Methode
bringt oder was daran gut ist weil ich Dumm bin und nicht
Coden kann. Erklär mal bitte genauer für Dumme.

Bitte erklärt es mir ohne gleich zu Beleidigen
UltraShock is offline  
Thanks
1 User
Old 03/16/2016, 16:29   #3
 
xCPx's Avatar
 
elite*gold: 20
Join Date: Jun 2011
Posts: 2,897
Received Thanks: 3,336
Quote:
Originally Posted by UltraShock View Post
Nett gesagt


Ich verstehe immer noch nicht ganz was diese Methode
bringt oder was daran gut ist weil ich Dumm bin und nicht
Coden kann. Erklär mal bitte genauer für Dumme.

Bitte erklärt es mir ohne gleich zu Beleidigen
Es geht einfach darum, dass so gut wie jedes Login Interface was irgendwer codet den mt2 internen Check rauswirft durch den man anzeigen kann ob ein Channel Online ist oder eben nicht. Und wie ich mittlerweile verstanden hab machen das 99% nur weil sie keine Ahnung haben wie es über die interne Funktion geht.

Darum hier ne vereinfachung mit dem es jeder Idiot hinkriegen sollte.


Verständlich genug?
xCPx is offline  
Thanks
1 User
Old 03/16/2016, 16:51   #4
 
UltraShock's Avatar
 
elite*gold: 50
Join Date: Nov 2014
Posts: 400
Received Thanks: 516
Quote:
Originally Posted by xCPx View Post
Es geht einfach darum, dass so gut wie jedes Login Interface was irgendwer codet den mt2 internen Check rauswirft durch den man anzeigen kann ob ein Channel Online ist oder eben nicht. Und wie ich mittlerweile verstanden hab machen das 99% nur weil sie keine Ahnung haben wie es über die interne Funktion geht.
Darum hier ne vereinfachung mit dem es jeder Idiot hinkriegen sollte.
Verständlich genug?
Ja verständlicher als das was da oben steht danke dir.
UltraShock is offline  
Old 03/16/2016, 17:34   #5
 
elite*gold: 0
Join Date: Sep 2010
Posts: 73
Received Thanks: 31
Interesting, great job dude !
galetlefrancais is offline  
Old 03/16/2016, 18:05   #6
 
nybu's Avatar
 
elite*gold: 0
Join Date: May 2011
Posts: 2,806
Received Thanks: 8,536
Bin dumm und verstehs trotzdem nicht
nybu is offline  
Thanks
3 Users
Old 03/16/2016, 18:27   #7
 
DasSchwarzeT's Avatar
 
elite*gold: 399
Join Date: Sep 2011
Posts: 5,323
Received Thanks: 3,938
Quote:
Originally Posted by nybu View Post
Bin dumm und verstehs trotzdem nicht
deshalb*
DasSchwarzeT is offline  
Reply


Similar Threads Similar Threads
[Info] GZN Hack/Dumme Fragen u. Dumme Antworten
12/20/2012 - Wolfteam - 13 Replies
Hallo Epvp, es tut mir Leid, dass ich diesen Thread nun aufmache, aber ich habe nicht die Zeit dazu, immer wieder PN zu beantworten, wo man den GZN Hack her bekommt, oder auch was ist das oder sonst was. So zum ersten Zitate meiner PNs
Dumme Fragen , dumme Antworten
09/22/2012 - Off Topic - 8 Replies
Willkommen bei "Dumme Fragen , dumme Antworten" In dem -mehr oder weniger- Spiel geht es darum dem User über euch eine dumme Antwort zu seiner dummen Frage zu stellen. -Regeln- (Es werden nur dumme Antworten zu dem User ueber euch geschrieben. (Mit einem kurzen Zitat bleibt der Thread geordnet! (Spammer werden von mir reported! (Keine Doppelpost's _________ Bsp: Warum ist Wasser nass?
Dumme Frage - Dumme Antwort
01/02/2012 - Off Topic - 54 Replies
Ich möchte mit euch ein Spiel spielen. Regeln: Jemand stellt eine Frage (eine dumme). Der nächste antwortet auf die Frage und stellt eine andere Frage. :D Ich fang an. :P
Dumme Frage = Dumme Antwort
05/22/2011 - Off Topic - 2 Replies
Hey, wie der Name schon sagt stellt man eine Frage und ein anderer beantwortet sie. Wenn ihr die Frage beantwortet habt müsst ihr eine neue Frage stellen. Beispiel: usw. ich fange an: Warum ist die Bannane krumm ?



All times are GMT +2. The time now is 15:51.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.