1501 lines
44 KiB
Python
1501 lines
44 KiB
Python
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
|
|
|
|
LOGIN_DELAY_SEC = 0.0
|
|
SKIP_LOGIN_PHASE = False
|
|
SKIP_LOGIN_PHASE_SUPPORT_CHANNEL = False
|
|
FULL_BACK_IMAGE = False
|
|
|
|
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 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()
|
|
|
|
@ui.WindowDestroy
|
|
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.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
|
|
|
|
# @fixme001 BEGIN (timeOutMsg and timeOutOk undefined)
|
|
self.timeOutMsg = False
|
|
self.timeOutOk = False
|
|
# @fixme001 END
|
|
|
|
if app.__BL_MULTI_LANGUAGE_PREMIUM__:
|
|
self.language_list = []
|
|
self.flag_button_list = []
|
|
self.language_board = None
|
|
self.language_popup = None
|
|
self.__LoadLocaleListFile()
|
|
if app.__BL_MULTI_LANGUAGE_ULTIMATE__:
|
|
self.anon_mode_board = None
|
|
self.anon_mode_text = None
|
|
self.anon_mode_checkbox_bg = None
|
|
self.anon_mode_checkbox = None
|
|
|
|
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,
|
|
}
|
|
|
|
self.loginFailureFuncDict = {
|
|
"WRONGPWD" : self.__DisconnectAndInputPassword,
|
|
"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.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()
|
|
if constInfo.ENABLE_SAVE_ACCOUNT:
|
|
self.saveAccountBoard.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:
|
|
if app.USE_OPENID and not app.OPENID_TEST :
|
|
self.__RefreshServerList()
|
|
self.__OpenServerBoard()
|
|
else:
|
|
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
|
|
if constInfo.ENABLE_SAVE_ACCOUNT:
|
|
self.saveAccountBoard = None
|
|
self.idEditLine = None
|
|
self.pwdEditLine = None
|
|
self.inputDialog = None
|
|
self.connectingDialog = None
|
|
self.loadingImage = None
|
|
|
|
if app.__BL_MULTI_LANGUAGE_PREMIUM__:
|
|
self.language_list = []
|
|
self.flag_button_list = []
|
|
self.language_board = None
|
|
self.language_popup = None
|
|
if app.__BL_MULTI_LANGUAGE_ULTIMATE__:
|
|
self.anon_mode_board = None
|
|
self.anon_mode_text = None
|
|
self.anon_mode_checkbox_bg = None
|
|
self.anon_mode_checkbox = None
|
|
|
|
self.serverBoard = None
|
|
self.serverList = None
|
|
self.channelList = None
|
|
|
|
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=old_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=old_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 constInfo.ENABLE_CLEAN_DATA_IF_FAIL_LOGIN:
|
|
if self.idEditLine != None:
|
|
self.idEditLine.SetText("")
|
|
self.idEditLine.SetFocus()
|
|
|
|
if self.pwdEditLine != None:
|
|
self.pwdEditLine.SetText("")
|
|
else:
|
|
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)
|
|
elif self.timeOutMsg:
|
|
self.PopupNotifyMessage(localeInfo.LOGIN_FAILURE_TIMEOUT, self.SetPasswordEditLineFocus)
|
|
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:
|
|
loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + error
|
|
|
|
|
|
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()
|
|
|
|
if constInfo.ENABLE_SAVE_ACCOUNT:
|
|
def SAB_LoadAccountData(self):
|
|
if constInfo.SAB.storeType == constInfo.SAB.ST_CACHE:
|
|
return
|
|
for idx in xrange(constInfo.SAB.slotCount):
|
|
if constInfo.SAB.storeType == constInfo.SAB.ST_REGISTRY:
|
|
id = constInfo.GetWinRegKeyValue(constInfo.SAB.regPath, constInfo.SAB.regName % (idx, constInfo.SAB.regValueId))
|
|
pwd = constInfo.GetWinRegKeyValue(constInfo.SAB.regPath, constInfo.SAB.regName % (idx, constInfo.SAB.regValuePwd))
|
|
if id and pwd:
|
|
self.SAB_SetAccountData(idx, (id, pwd))
|
|
elif constInfo.SAB.storeType == constInfo.SAB.ST_FILE:
|
|
(id, pwd) = constInfo.GetJsonSABData(idx)
|
|
if id and pwd:
|
|
self.SAB_SetAccountData(idx, (id, pwd))
|
|
|
|
def SAB_SaveAccountData(self):
|
|
if constInfo.SAB.storeType == constInfo.SAB.ST_CACHE:
|
|
return
|
|
for idx in xrange(constInfo.SAB.slotCount):
|
|
if constInfo.SAB.storeType == constInfo.SAB.ST_REGISTRY:
|
|
_tSlot = self.SAB_GetAccountData(idx)
|
|
if _tSlot:
|
|
(id, pwd) = _tSlot
|
|
constInfo.SetWinRegKeyValue(constInfo.SAB.regPath, constInfo.SAB.regName % (idx, constInfo.SAB.regValueId), id)
|
|
constInfo.SetWinRegKeyValue(constInfo.SAB.regPath, constInfo.SAB.regName % (idx, constInfo.SAB.regValuePwd), pwd)
|
|
else:
|
|
constInfo.DelWinRegKeyValue(constInfo.SAB.regPath, constInfo.SAB.regName % (idx, constInfo.SAB.regValueId))
|
|
constInfo.DelWinRegKeyValue(constInfo.SAB.regPath, constInfo.SAB.regName % (idx, constInfo.SAB.regValuePwd))
|
|
elif constInfo.SAB.storeType == constInfo.SAB.ST_FILE:
|
|
_tSlot = self.SAB_GetAccountData(idx)
|
|
if _tSlot:
|
|
constInfo.SetJsonSABData(idx, _tSlot)
|
|
else:
|
|
constInfo.DelJsonSABData(idx)
|
|
|
|
def SAB_DelAccountData(self, slot):
|
|
if constInfo.SAB.accData.get(slot):
|
|
del constInfo.SAB.accData[slot]
|
|
|
|
def SAB_GetAccountData(self, slot):
|
|
return constInfo.SAB.accData.get(slot)
|
|
|
|
def SAB_SetAccountData(self, slot, data):
|
|
constInfo.SAB.accData[slot] = data
|
|
|
|
def SAB_BtnRearrange(self):
|
|
def tooltipArrange(_btnObj):
|
|
_tMexTip = "Account ID: %s" % id
|
|
_btnObj.SetToolTipText(_tMexTip)
|
|
if _btnObj.ToolTipText:
|
|
_btnObj.ToolTipText.SetPackedFontColor(0xff66FFFF)
|
|
## def code
|
|
GetObject=self.GetChild
|
|
SetObject=self.InsertChild
|
|
## button names
|
|
btnNameSave = constInfo.SAB.btnName["Save"]
|
|
btnNameAccess = constInfo.SAB.btnName["Access"]
|
|
btnNameRemove = constInfo.SAB.btnName["Remove"]
|
|
## rearrange code
|
|
for idx in xrange(constInfo.SAB.slotCount):
|
|
_tSlot = self.SAB_GetAccountData(idx)
|
|
# button objects
|
|
btnObjSave = GetObject(btnNameSave % idx)
|
|
btnObjAccess = GetObject(btnNameAccess % idx)
|
|
btnObjRemove = GetObject(btnNameRemove % idx)
|
|
if _tSlot:
|
|
(id, pwd) = _tSlot
|
|
btnObjSave.Hide()
|
|
btnObjAccess.Show()
|
|
btnObjRemove.Show()
|
|
btnObjAccess.SetText(uiScriptLocale.SAVE_ACCOUNT_CONNECT2.format(idx+1, id))
|
|
else:
|
|
btnObjSave.Show()
|
|
btnObjAccess.Hide()
|
|
btnObjRemove.Hide()
|
|
# done
|
|
|
|
def SAB_Click_Save(self, slot):
|
|
if slot >= constInfo.SAB.slotCount:
|
|
return
|
|
## def code
|
|
GetObject=self.GetChild
|
|
SetObject=self.InsertChild
|
|
## button stuff
|
|
_tmpName = constInfo.SAB.btnName["Save"] % slot
|
|
_tmpObj = GetObject(_tmpName)
|
|
## code stuff
|
|
try:
|
|
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
|
|
except:
|
|
return
|
|
self.SAB_SetAccountData(slot, (id,pwd))
|
|
self.SAB_SaveAccountData()
|
|
## rearrange stuff
|
|
self.SAB_BtnRearrange()
|
|
|
|
def SAB_Click_Access(self, slot):
|
|
if slot >= constInfo.SAB.slotCount:
|
|
return
|
|
## def code
|
|
GetObject=self.GetChild
|
|
SetObject=self.InsertChild
|
|
## button stuff
|
|
_tmpName = constInfo.SAB.btnName["Access"] % slot
|
|
_tmpObj = GetObject(_tmpName)
|
|
## code stuff
|
|
_tSlot = self.SAB_GetAccountData(slot)
|
|
if _tSlot:
|
|
(id, pwd) = _tSlot
|
|
self.idEditLine.SetText(id)
|
|
self.pwdEditLine.SetText(pwd)
|
|
self.__OnClickSelectServerButton()
|
|
self.__OnClickLoginButton()
|
|
|
|
def SAB_Click_Remove(self, slot):
|
|
if slot >= constInfo.SAB.slotCount:
|
|
return
|
|
## def code
|
|
GetObject=self.GetChild
|
|
SetObject=self.InsertChild
|
|
## button stuff
|
|
_tmpName = constInfo.SAB.btnName["Remove"] % slot
|
|
_tmpObj = GetObject(_tmpName)
|
|
## code stuff
|
|
self.SAB_DelAccountData(slot)
|
|
self.SAB_SaveAccountData()
|
|
## rearrange stuff
|
|
self.SAB_BtnRearrange()
|
|
|
|
def __CreateSaveAccountBoard(self):
|
|
### SAB INIT
|
|
self.SAB_LoadAccountData()
|
|
## def code
|
|
GetObject=self.GetChild
|
|
SetObject=self.InsertChild
|
|
## gui stuff
|
|
SCREEN_WIDTH = wndMgr.GetScreenWidth()
|
|
SCREEN_HEIGHT = wndMgr.GetScreenHeight()
|
|
## button space
|
|
SPACE_FOR_BUTTON = 25+1
|
|
ALL_BUTTON_SPACE = SPACE_FOR_BUTTON * constInfo.SAB.slotCount
|
|
## board stuff
|
|
BOARD_SIZE = (210+120, 28 + ALL_BUTTON_SPACE)
|
|
BOARD_POS = ((SCREEN_WIDTH - 208) / 2 + 210, (SCREEN_HEIGHT - 410) - (10*constInfo.SAB.slotCount))
|
|
## button stuff
|
|
btnNameSave = constInfo.SAB.btnName["Save"]
|
|
btnNameAccess = constInfo.SAB.btnName["Access"]
|
|
btnNameRemove = constInfo.SAB.btnName["Remove"]
|
|
btnPath = "d:/ymir work/ui/public/%s_button_%02d.sub" # xsmall small middle large xlarge big
|
|
btnImage = {"default":1,"over":2,"down":3}
|
|
## SAB BOARD
|
|
try:
|
|
## default init
|
|
_tmpName = "SaveAccountBoard"
|
|
SetObject(_tmpName, ui.ThinBoard())
|
|
#
|
|
_tmpObj = GetObject(_tmpName)
|
|
_tmpObj.SetParent(self)
|
|
## custom data
|
|
_tmpObj.SetSize(*BOARD_SIZE)
|
|
## default data
|
|
_tmpObj.SetPosition(*BOARD_POS)
|
|
_tmpObj.Show()
|
|
self.saveAccountBoard = _tmpObj
|
|
except:
|
|
import exception; exception.Abort("__CreateSaveAccountBoard SAB BOARD")
|
|
### SAB TITLE
|
|
try:
|
|
## default init
|
|
_tmpName = "SaveAccountTitle"
|
|
SetObject(_tmpName, ui.TextLine())
|
|
_tmpObj = GetObject(_tmpName)
|
|
_tmpObj.SetParent(self.saveAccountBoard)
|
|
## custom data
|
|
_tmpObj.SetHorizontalAlignCenter()
|
|
_tmpObj.SetPackedFontColor(0xFFffbf00)
|
|
_tmpObj.SetOutline()
|
|
_tmpObj.SetText(uiScriptLocale.SAVE_ACCOUNT_TITLE)
|
|
## default data
|
|
_tmpObj.SetPosition(BOARD_SIZE[0]/2, 5)
|
|
_tmpObj.Show()
|
|
except:
|
|
import exception; exception.Abort("__CreateSaveAccountBoard SAB TITLE")
|
|
### SAB LINE
|
|
try:
|
|
## default init
|
|
_tmpName = "SaveAccountLine"
|
|
SetObject(_tmpName, ui.Line())
|
|
_tmpObj = GetObject(_tmpName)
|
|
_tmpObj.SetParent(self.saveAccountBoard)
|
|
## custom data
|
|
_tmpObj.SetColor(0xFF777777)
|
|
_tmpObj.SetSize(BOARD_SIZE[0]-10, 0)
|
|
## default data
|
|
_tmpObj.SetPosition(5, 20)
|
|
_tmpObj.Show()
|
|
except:
|
|
import exception; exception.Abort("__CreateSaveAccountBoard SAB LINE")
|
|
## SaveAccountButtons
|
|
for idx in xrange(constInfo.SAB.slotCount):
|
|
### SAB SAVE
|
|
try:
|
|
## default init
|
|
_tmpName = btnNameSave % (idx)
|
|
SetObject(_tmpName, ui.Button())
|
|
_tmpObj = GetObject(_tmpName)
|
|
_tmpObj.SetParent(self.saveAccountBoard)
|
|
## custom data
|
|
_tmpBtnPath = "d:/ymir work/ui/public/xlarge_button_%02d.sub" # xsmall small middle large xlarge big
|
|
_tmpObj.SetUpVisual(_tmpBtnPath % (btnImage["default"]))
|
|
_tmpObj.SetOverVisual(_tmpBtnPath % (btnImage["over"]))
|
|
_tmpObj.SetDownVisual(_tmpBtnPath % (btnImage["down"]))
|
|
_tmpObj.SetText(uiScriptLocale.SAVE_ACCOUNT_SAVE)
|
|
_tmpObj.SAFE_SetEvent(self.SAB_Click_Save, idx)
|
|
## default data
|
|
_tmpObj.SetPosition(15 + 60, 25 + (idx * SPACE_FOR_BUTTON))
|
|
_tmpObj.Hide()
|
|
except:
|
|
import exception; exception.Abort("__CreateSaveAccountBoard SAB SAVE")
|
|
### SAB ACCESS
|
|
try:
|
|
## default init
|
|
_tmpName = btnNameAccess % (idx)
|
|
SetObject(_tmpName, ui.Button())
|
|
_tmpObj = GetObject(_tmpName)
|
|
_tmpObj.SetParent(self.saveAccountBoard)
|
|
## custom data
|
|
_tmpBtnPath = "d:/ymir work/ui/public/xlarge_button_%02d.sub" # xsmall small middle large xlarge big
|
|
_tmpObj.SetUpVisual(_tmpBtnPath % (btnImage["default"]))
|
|
_tmpObj.SetOverVisual(_tmpBtnPath % (btnImage["over"]))
|
|
_tmpObj.SetDownVisual(_tmpBtnPath % (btnImage["down"]))
|
|
_tmpObj.SetText(uiScriptLocale.SAVE_ACCOUNT_CONNECT.format(idx+1))
|
|
_tmpObj.SAFE_SetEvent(self.SAB_Click_Access, idx)
|
|
## default data
|
|
_tmpObj.SetPosition(35, 25 + (idx * SPACE_FOR_BUTTON))
|
|
_tmpObj.Show()
|
|
except:
|
|
import exception; exception.Abort("__CreateSaveAccountBoard SAB ACCESS")
|
|
### SAB REMOVE
|
|
try:
|
|
## default init
|
|
_tmpName = btnNameRemove % (idx)
|
|
SetObject(_tmpName, ui.Button())
|
|
_tmpObj = GetObject(_tmpName)
|
|
_tmpObj.SetParent(self.saveAccountBoard)
|
|
## custom data
|
|
_tmpBtnPath = "d:/ymir work/ui/public/middle_button_%02d.sub" # xsmall small middle large xlarge big
|
|
_tmpObj.SetUpVisual(_tmpBtnPath % (btnImage["default"]))
|
|
_tmpObj.SetOverVisual(_tmpBtnPath % (btnImage["over"]))
|
|
_tmpObj.SetDownVisual(_tmpBtnPath % (btnImage["down"]))
|
|
_tmpObj.SetText(uiScriptLocale.SAVE_ACCOUNT_REMOVE)
|
|
_tmpObj.SAFE_SetEvent(self.SAB_Click_Remove, idx)
|
|
## default data
|
|
_tmpObj.SetPosition(35 + 190, 25 + (idx * SPACE_FOR_BUTTON))
|
|
_tmpObj.Show()
|
|
except:
|
|
import exception; exception.Abort("__CreateSaveAccountBoard SAB REMOVE")
|
|
self.SAB_BtnRearrange()
|
|
|
|
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")
|
|
|
|
if constInfo.ENABLE_SAVE_ACCOUNT:
|
|
self.__CreateSaveAccountBoard()
|
|
|
|
self.virtualKeyboard = self.GetChild2("VirtualKeyboard")
|
|
|
|
if app.__BL_MULTI_LANGUAGE_PREMIUM__:
|
|
self.language_board = ui.ThinBoard()
|
|
self.language_board.SetParent(self)
|
|
self.language_board.SetSize(wndMgr.GetScreenWidth(), 35)
|
|
self.language_board.SetPosition(0, 20)
|
|
self.language_board.Show()
|
|
|
|
step = wndMgr.GetScreenWidth() / len(self.language_list)
|
|
x = 0
|
|
for i, lang in enumerate(self.language_list):
|
|
img_path = "D:/ymir work/ui/intro/login/server_flag_{}.sub".format(lang["locale"])
|
|
btn = ui.Button()
|
|
btn.SetParent(self.language_board)
|
|
btn.SetPosition(x + 15, 10)
|
|
btn.SetUpVisual(img_path)
|
|
btn.SetOverVisual(img_path)
|
|
btn.SetDownVisual(img_path)
|
|
btn.SetToolTipText(lang["name"])
|
|
btn.SetEvent(ui.__mem_func__(self.__ClickLanguage), i)
|
|
btn.Show()
|
|
self.flag_button_list.append(btn)
|
|
x += step
|
|
if app.__BL_MULTI_LANGUAGE_ULTIMATE__:
|
|
self.anon_mode_board = ui.ThinBoard()
|
|
self.anon_mode_board.SetParent(self)
|
|
self.anon_mode_board.SetSize(160, 35)
|
|
self.anon_mode_board.SetPosition(0, 20 + self.language_board.GetHeight())
|
|
self.anon_mode_board.Show()
|
|
|
|
self.anon_mode_text = ui.TextLine()
|
|
self.anon_mode_text.SetParent(self.anon_mode_board)
|
|
if localeInfo.IsARABIC():
|
|
self.anon_mode_text.SetPosition(123, 7)
|
|
else:
|
|
self.anon_mode_text.SetPosition(15, 10)
|
|
self.anon_mode_text.SetFontName(localeInfo.UI_DEF_FONT_LARGE)
|
|
self.anon_mode_text.SetText(uiScriptLocale.LANGUAGE_ANONYMOUS_MODE)
|
|
self.anon_mode_text.Show()
|
|
|
|
self.anon_mode_checkbox_bg = ui.ImageBox()
|
|
self.anon_mode_checkbox_bg.SetParent(self.anon_mode_board)
|
|
if localeInfo.IsARABIC():
|
|
self.anon_mode_checkbox_bg.SetPosition(15, 9)
|
|
else:
|
|
self.anon_mode_checkbox_bg.SetPosition(123, 9)
|
|
self.anon_mode_checkbox_bg.LoadImage("d:/ymir work/ui/public/popup_notice_checkbox_bg.sub")
|
|
self.anon_mode_checkbox_bg.SetEvent(ui.__mem_func__(self.__EventAnonymous), "mouse_click", "")
|
|
self.anon_mode_checkbox_bg.Show()
|
|
|
|
self.anon_mode_checkbox = ui.ImageBox()
|
|
self.anon_mode_checkbox.SetParent(self.anon_mode_checkbox_bg)
|
|
self.anon_mode_checkbox.AddFlag("not_pick")
|
|
self.anon_mode_checkbox.SetPosition(0, 0)
|
|
self.anon_mode_checkbox.LoadImage("d:/ymir work/ui/public/popup_notice_checkbox.sub")
|
|
|
|
self.RefreshAnonymousMode()
|
|
|
|
|
|
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])
|
|
if localeInfo.IsBRAZIL():
|
|
self.VIRTUAL_KEY_SYMBOLS_BR = Suffle(localeInfo.VIRTUAL_KEY_SYMBOLS_BR)
|
|
else:
|
|
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))
|
|
|
|
if IsFullBackImage():
|
|
self.GetChild("bg1").Show()
|
|
self.GetChild("bg2").Hide()
|
|
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(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":
|
|
if localeInfo.IsBRAZIL():
|
|
self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
|
|
else:
|
|
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:
|
|
if localeInfo.IsBRAZIL():
|
|
self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
|
|
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"
|
|
if localeInfo.IsBRAZIL():
|
|
self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS_BR)
|
|
else:
|
|
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)
|
|
|
|
if app.__BL_MULTI_LANGUAGE_PREMIUM__:
|
|
def __LoadLocaleListFile(self):
|
|
try:
|
|
with open("locale_list.txt", "rt") as file:
|
|
lines = file.readlines()
|
|
except:
|
|
import dbg
|
|
dbg.LogBox("__LoadLocaleListFile error locale_list.txt")
|
|
app.Abort()
|
|
|
|
lineIndex = 1
|
|
for line in lines:
|
|
try:
|
|
tokens = line[:-1].split(" ")
|
|
if len(tokens) == 3:
|
|
name = tokens[0]
|
|
code_page = tokens[1]
|
|
locale = tokens[2]
|
|
|
|
if locale in uiScriptLocale.LOCALE_NAME_DICT:
|
|
name = uiScriptLocale.LOCALE_NAME_DICT[locale]
|
|
|
|
self.language_list.append({"name" : name, "code_page" : code_page, "locale" : locale})
|
|
else:
|
|
raise RuntimeError, "Unknown TokenSize"
|
|
|
|
lineIndex += 1
|
|
except:
|
|
import dbg
|
|
dbg.LogBox("%s: line(%d): %s" % ("locale_list.txt", lineIndex, line), "Error")
|
|
raise
|
|
|
|
def __SaveLoca(self, code_page, locale):
|
|
try:
|
|
with open("loca.cfg", "wt") as file:
|
|
file.write("{} {}".format(code_page, locale))
|
|
except:
|
|
import dbg
|
|
dbg.LogBox("__SaveLoca error")
|
|
app.Abort()
|
|
|
|
def __ClickLanguage(self, index):
|
|
if index >= len(self.language_list):
|
|
return
|
|
|
|
lang = self.language_list[index]
|
|
self.__SaveLoca(lang["code_page"], lang["locale"])
|
|
app.SetReloadLocale(lang["locale"] != app.GetLocaleName())
|
|
|
|
if not self.language_popup:
|
|
self.language_popup = uiCommon.PopupDialog()
|
|
self.language_popup.SetText(uiScriptLocale.LANGUAGE_WILL_CHANGE)
|
|
self.language_popup.Open()
|
|
|
|
if app.__BL_MULTI_LANGUAGE_ULTIMATE__:
|
|
def __EventAnonymous(self, event_type, arg):
|
|
if "mouse_click" == event_type :
|
|
systemSetting.SetAnonymousCountryMode(not systemSetting.GetAnonymousCountryMode())
|
|
self.RefreshAnonymousMode()
|
|
|
|
def RefreshAnonymousMode(self):
|
|
if systemSetting.GetAnonymousCountryMode():
|
|
self.anon_mode_checkbox.Show()
|
|
else:
|
|
self.anon_mode_checkbox.Hide()
|
|
|
|
def __SetServerInfo(self, name):
|
|
net.SetServerInfo(name.strip())
|
|
self.serverInfo.SetText(name)
|
|
|
|
def __LoadLoginInfo(self, loginInfoFileName):
|
|
def getValue(element, name, default):
|
|
if [] != element.getElementsByTagName(name):
|
|
return element.getElementsByTagName(name).item(0).firstChild.nodeValue
|
|
else:
|
|
return default
|
|
|
|
self.id = None
|
|
self.pwd = None
|
|
self.loginnedServer = None
|
|
self.loginnedChannel = None
|
|
app.loggined = False
|
|
|
|
self.loginInfo = True
|
|
|
|
from xml.dom.minidom import parse
|
|
try:
|
|
f = old_open(loginInfoFileName, "r")
|
|
dom = parse(f)
|
|
except:
|
|
return
|
|
serverLst = dom.getElementsByTagName("server")
|
|
if [] != dom.getElementsByTagName("logininfo"):
|
|
logininfo = dom.getElementsByTagName("logininfo")[0]
|
|
else:
|
|
return
|
|
|
|
try:
|
|
server_name = logininfo.getAttribute("name")
|
|
channel_idx = int(logininfo.getAttribute("channel_idx"))
|
|
except:
|
|
return
|
|
|
|
try:
|
|
matched = False
|
|
|
|
for k, v in serverInfo.REGION_DICT[0].iteritems():
|
|
if v["name"] == server_name:
|
|
account_addr = serverInfo.REGION_AUTH_SERVER_DICT[0][k]["ip"]
|
|
account_port = serverInfo.REGION_AUTH_SERVER_DICT[0][k]["port"]
|
|
|
|
channel_info = v["channel"][channel_idx]
|
|
channel_name = channel_info["name"]
|
|
addr = channel_info["ip"]
|
|
port = channel_info["tcp_port"]
|
|
|
|
net.SetMarkServer(addr, port)
|
|
self.stream.SetConnectInfo(addr, port, account_addr, account_port)
|
|
|
|
matched = True
|
|
break
|
|
|
|
if False == matched:
|
|
return
|
|
except:
|
|
return
|
|
|
|
self.__SetServerInfo("%s, %s " % (server_name, channel_name))
|
|
id = getValue(logininfo, "id", "")
|
|
pwd = getValue(logininfo, "pwd", "")
|
|
self.idEditLine.SetText(id)
|
|
self.pwdEditLine.SetText(pwd)
|
|
slot = getValue(logininfo, "slot", "0")
|
|
locale = getValue(logininfo, "locale", "")
|
|
locale_dir = getValue(logininfo, "locale_dir", "")
|
|
is_auto_login = int(getValue(logininfo, "auto_login", "0"))
|
|
|
|
self.stream.SetCharacterSlot(int(slot))
|
|
self.stream.isAutoLogin=is_auto_login
|
|
self.stream.isAutoSelect=is_auto_login
|
|
|
|
if locale and locale_dir:
|
|
app.ForceSetLocale(locale, locale_dir)
|
|
|
|
if 0 != is_auto_login:
|
|
self.Connect(id, pwd)
|
|
|
|
return
|
|
|
|
|
|
def PopupDisplayMessage(self, msg):
|
|
self.stream.popupWindow.Close()
|
|
if app.__BL_MULTI_LANGUAGE__:
|
|
self.stream.popupWindow.Open(msg, 0, localeInfo.UI_CANCEL)
|
|
else:
|
|
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)
|
|
|
|
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)
|
|
|
|
self.serverList.SelectItem(serverIndex)
|
|
|
|
if constInfo.ENABLE_RANDOM_CHANNEL_SEL:
|
|
self.channelList.SelectItem(app.GetRandom(0, self.channelList.GetItemCount()))
|
|
else:
|
|
if channelIndex >= 0:
|
|
self.channelList.SelectItem(channelIndex)
|
|
|
|
self.serverBoard.SetPosition(self.xServerBoard, self.yServerBoard)
|
|
self.serverBoard.Show()
|
|
self.connectBoard.Hide()
|
|
self.loginBoard.Hide()
|
|
if constInfo.ENABLE_SAVE_ACCOUNT:
|
|
self.saveAccountBoard.Hide()
|
|
|
|
self.KillInputFocus() #@fixme019
|
|
|
|
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 KillInputFocus(self): #@fixme019
|
|
if self.idEditLine and self.idEditLine.IsFocus():
|
|
self.idEditLine.KillFocus()
|
|
if self.pwdEditLine and self.pwdEditLine.IsFocus():
|
|
self.pwdEditLine.KillFocus()
|
|
|
|
def __OpenLoginBoard(self):
|
|
|
|
self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
|
|
self.serverExitButton.SetText(localeInfo.UI_CLOSE)
|
|
|
|
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()
|
|
if constInfo.ENABLE_SAVE_ACCOUNT:
|
|
self.saveAccountBoard.Hide()
|
|
elif not self.stream.isAutoLogin:
|
|
self.connectBoard.Show()
|
|
self.loginBoard.Show()
|
|
if constInfo.ENABLE_SAVE_ACCOUNT:
|
|
self.saveAccountBoard.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=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("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
|
|
|
|
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"]
|
|
|
|
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 OnKeyDown(self, key):
|
|
if constInfo.ENABLE_SAVE_ACCOUNT:
|
|
for idx in xrange(constInfo.SAB.slotCount):
|
|
if app.DIK_F1+idx == key and self.SAB_GetAccountData(idx):
|
|
self.SAB_Click_Access(idx)
|
|
return True
|