-
Posts
384 -
Joined
-
Last visited
-
Days Won
58 -
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by Koray
-
-
I made this system before for my PvP (metin2-free) but guid was always same in w8
I configured to send packet VIA new client packet, that was more accurated
This problem due from GUID this system not give GUID
My error syserr
constinfo
import itemimport ostry: Hwid = os.popen("wmic csproduct get uuid").read().split("n")[1]except: Hwid = os.popen("%WINDIR%/system32/wbem/wmic csproduct get uuid").read().split("n")[1]try: Snn = os.popen('wmic path win32_physicalmedia get SerialNumber').read().split("n")[1]except: Snn = os.popen("%WINDIR%/system32/wbem/wmic path win32_physicalmedia get SerialNumber").read().split("n")[1]nacht = 0tag = 0ENVIRONMENT_MORNING = "d:/ymir work/environment/mtthunder.msenv" #AMANHECENDO (05, 06, 07)ENVIRONMENT_DAY = "d:/ymir work/environment/morning.msenv" #MANHà (08, 09, 10)ENVIRONMENT_AFTERNOON = "d:/ymir work/environment/evening.msenv" #ENTARDECENDO (17, 18)ENVIRONMENT_EVENING = "d:/ymir work/environment/bayblacksand.msenv" #ANOITECENDO (19, 20)ENVIRONMENT_NIGHT = "d:/ymir work/environment/moonlight04.msenv" #NOITE (21, 22, 23, 00, 01, 02, 03, 04)###################################################################################################################AFK = 0#################################INPUT_IGNORE = 0###################################################### optionIN_GAME_SHOP_ENABLE = 1CONSOLE_ENABLE = 0PVPMODE_ENABLE = 1PVPMODE_TEST_ENABLE = 0PVPMODE_ACCELKEY_ENABLE = 1PVPMODE_ACCELKEY_DELAY = 0.5PVPMODE_PROTECTED_LEVEL = 30FOG_LEVEL0 = 4800.0FOG_LEVEL1 = 9600.0FOG_LEVEL2 = 12800.0FOG_LEVEL = FOG_LEVEL0FOG_LEVEL_LIST=[FOG_LEVEL0, FOG_LEVEL1, FOG_LEVEL2]CAMERA_MAX_DISTANCE_SHORT = 2500.0CAMERA_MAX_DISTANCE_LONG = 3500.0CAMERA_MAX_DISTANCE_LIST=[CAMERA_MAX_DISTANCE_SHORT, CAMERA_MAX_DISTANCE_LONG]CAMERA_MAX_DISTANCE = CAMERA_MAX_DISTANCE_SHORTCHRNAME_COLOR_INDEX = 0ENVIRONMENT_NIGHT="d:/ymir work/environment/moonlight04.msenv"# constantHIGH_PRICE = 500000MIDDLE_PRICE = 50000ERROR_METIN_STONE = 28960SUB2_LOADING_ENABLE = 1EXPANDED_COMBO_ENABLE = 1CONVERT_EMPIRE_LANGUAGE_ENABLE = 1USE_ITEM_WEAPON_TABLE_ATTACK_BONUS = 0ADD_DEF_BONUS_ENABLE = 1LOGIN_COUNT_LIMIT_ENABLE = 0USE_SKILL_EFFECT_UPGRADE_ENABLE = 1VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD = 1GUILD_MONEY_PER_GSP = 100GUILD_WAR_TYPE_SELECT_ENABLE = 1TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE = 0HAIR_COLOR_ENABLE = 1ARMOR_SPECULAR_ENABLE = 1WEAPON_SPECULAR_ENABLE = 1SEQUENCE_PACKET_ENABLE = 1KEEP_ACCOUNT_CONNETION_ENABLE = 1MINIMAP_POSITIONINFO_ENABLE = 0#################################################CONVERT_EMPIRE_LANGUAGE_ENABLE = 0USE_ITEM_WEAPON_TABLE_ATTACK_BONUS = 0ADD_DEF_BONUS_ENABLE = 0LOGIN_COUNT_LIMIT_ENABLE = 0PVPMODE_PROTECTED_LEVEL = 15TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE = 10#################################################isItemDropQuestionDialog = 0def GET_ITEM_DROP_QUESTION_DIALOG_STATUS():global isItemDropQuestionDialogreturn isItemDropQuestionDialogdef SET_ITEM_DROP_QUESTION_DIALOG_STATUS(flag):global isItemDropQuestionDialogisItemDropQuestionDialog = flagimport appimport net########################def SET_DEFAULT_FOG_LEVEL():global FOG_LEVELapp.SetMinFog(FOG_LEVEL)def SET_FOG_LEVEL_INDEX(index):global FOG_LEVELglobal FOG_LEVEL_LISTtry:FOG_LEVEL=FOG_LEVEL_LIST[index]except IndexError:FOG_LEVEL=FOG_LEVEL_LIST[0]app.SetMinFog(FOG_LEVEL)def GET_FOG_LEVEL_INDEX():global FOG_LEVELglobal FOG_LEVEL_LISTreturn FOG_LEVEL_LIST.index(FOG_LEVEL)########################def SET_DEFAULT_CAMERA_MAX_DISTANCE():global CAMERA_MAX_DISTANCEapp.SetCameraMaxDistance(CAMERA_MAX_DISTANCE)def SET_CAMERA_MAX_DISTANCE_INDEX(index):global CAMERA_MAX_DISTANCEglobal CAMERA_MAX_DISTANCE_LISTtry:CAMERA_MAX_DISTANCE=CAMERA_MAX_DISTANCE_LIST[index]except:CAMERA_MAX_DISTANCE=CAMERA_MAX_DISTANCE_LIST[0]app.SetCameraMaxDistance(CAMERA_MAX_DISTANCE)def GET_CAMERA_MAX_DISTANCE_INDEX():global CAMERA_MAX_DISTANCEglobal CAMERA_MAX_DISTANCE_LISTreturn CAMERA_MAX_DISTANCE_LIST.index(CAMERA_MAX_DISTANCE)########################import chrmgrimport playerimport appdef SET_DEFAULT_CHRNAME_COLOR():global CHRNAME_COLOR_INDEXchrmgr.SetEmpireNameMode(CHRNAME_COLOR_INDEX)def SET_CHRNAME_COLOR_INDEX(index):global CHRNAME_COLOR_INDEXCHRNAME_COLOR_INDEX=indexchrmgr.SetEmpireNameMode(index)def GET_CHRNAME_COLOR_INDEX():global CHRNAME_COLOR_INDEXreturn CHRNAME_COLOR_INDEXdef SET_VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD(index):global VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARDVIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD = indexdef GET_VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD():global VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARDreturn VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARDdef SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE():global CONVERT_EMPIRE_LANGUAGE_ENABLEnet.SetEmpireLanguageMode(CONVERT_EMPIRE_LANGUAGE_ENABLE)def SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS():global USE_ITEM_WEAPON_TABLE_ATTACK_BONUSplayer.SetWeaponAttackBonusFlag(USE_ITEM_WEAPON_TABLE_ATTACK_BONUS)def SET_DEFAULT_USE_SKILL_EFFECT_ENABLE():global USE_SKILL_EFFECT_UPGRADE_ENABLEapp.SetSkillEffectUpgradeEnable(USE_SKILL_EFFECT_UPGRADE_ENABLE)def SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE():global TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUEapp.SetTwoHandedWeaponAttSpeedDecreaseValue(TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE)########################import itemACCESSORY_MATERIAL_LIST = [50623, 50624, 50625, 50626, 50627, 50628, 50629, 50630, 50631, 50632, 50633, 50634, 50635, 50636, 50637, 50638]#ACCESSORY_MATERIAL_LIST = [50623, 50623, 50624, 50624, 50625, 50625, 50626, 50627, 50628, 50629, 50630, 50631, 50632, 50633,# 50623, 50623, 50624, 50624, ]JewelAccessoryInfos = [# jewel wrist neck ear[ 50634, 14420, 16220, 17220 ],[ 50635, 14500, 16500, 17500 ],[ 50636, 14520, 16520, 17520 ],[ 50637, 14540, 16540, 17540 ],[ 50638, 14560, 16560, 17560 ],]def GET_ACCESSORY_MATERIAL_VNUM(vnum, subType):ret = vnumitem_base = (vnum / 10) * 10for info in JewelAccessoryInfos:if item.ARMOR_WRIST == subType:if info[1] == item_base:return info[0]elif item.ARMOR_NECK == subType:if info[2] == item_base:return info[0]elif item.ARMOR_EAR == subType:if info[3] == item_base:return info[0]if vnum >= 16210 and vnum <= 16219:return 50625if item.ARMOR_WRIST == subType:WRIST_ITEM_VNUM_BASE = 14000ret -= WRIST_ITEM_VNUM_BASEelif item.ARMOR_NECK == subType:NECK_ITEM_VNUM_BASE = 16000ret -= NECK_ITEM_VNUM_BASEelif item.ARMOR_EAR == subType:EAR_ITEM_VNUM_BASE = 17000ret -= EAR_ITEM_VNUM_BASEtype = ret/20if type<0 or type>=len(ACCESSORY_MATERIAL_LIST):type = (ret-170) / 20if type<0 or type>=len(ACCESSORY_MATERIAL_LIST):return 0return ACCESSORY_MATERIAL_LIST[type]#################################################################### »õ·Î Ãß°¡µÈ 'º§Æ®' ¾ÆÀÌÅÛ Å¸ÀÔ°ú, º§Æ®ÀÇ ¼ÒÄÏ¿¡ ²ÈÀ» ¾ÆÀÌÅÛ °ü·Ã..## º§Æ®ÀÇ ¼ÒÄϽýºÅÛÀº ¾Ç¼¼¼¸®¿Í µ¿ÀÏÇϱ⠶§¹®¿¡, À§ ¾Ç¼¼¼¸® °ü·Ã ÇϵåÄÚµùó·³ ÀÌ·±½ÄÀ¸·Î ÇÒ ¼ö¹Û¿¡ ¾ø´Ù..def GET_BELT_MATERIAL_VNUM(vnum, subType = 0):# ÇöÀç´Â ¸ðµç º§Æ®¿¡´Â ÇϳªÀÇ ¾ÆÀÌÅÛ(#18900)¸¸ »ðÀÔ °¡´Éreturn 18900## ÀÚµ¿¹°¾à (HP: #72723 ~ #72726, SP: #72727 ~ #72730)# ÇØ´ç vnumÀÌ ÀÚµ¿¹°¾àÀΰ¡?def IS_AUTO_POTION(itemVnum):return IS_AUTO_POTION_HP(itemVnum) or IS_AUTO_POTION_SP(itemVnum)# ÇØ´ç vnumÀÌ HP ÀÚµ¿¹°¾àÀΰ¡?def IS_AUTO_POTION_HP(itemVnum):if 72723 <= itemVnum and 72726 >= itemVnum:return 1elif itemVnum >= 76021 and itemVnum <= 76022: ## »õ·Î µé¾î°£ ¼±¹°¿ë È·æÀÇ Ãູreturn 1elif itemVnum == 79012:return 1return 0# ÇØ´ç vnumÀÌ SP ÀÚµ¿¹°¾àÀΰ¡?def IS_AUTO_POTION_SP(itemVnum):if 72727 <= itemVnum and 72730 >= itemVnum:return 1elif itemVnum >= 76004 and itemVnum <= 76005: ## »õ·Î µé¾î°£ ¼±¹°¿ë ¼ö·æÀÇ Ãູreturn 1elif itemVnum == 79013:return 1return 0def WriteLineInFile(fname, linenum, s):import osfarr = []if os.path.exists(fname):f = open(fname, "r")for line in f:farr.append(line)f.close()while len(farr) < int(linenum):farr.append("")farr[int(linenum)-1] = str(s)f = open(fname, "w")for line in farr:f.write(line)if (len(line) > 0 and line[-1:] != "n") or len(line) == 0:f.write("n")f.close()def ReadLineInFile(fname, linenum):import osif not os.path.exists(fname):return ""f = open(fname, "r")farr = []for line in f:farr.append(line)f.close()if len(farr) >= int(linenum):ret = farr[int(linenum)-1]if ret[-1:] == "n":return ret[:-1]else:return retelse:return ""intrologin
import dbgimport appimport netimport uiimport imeimport sndimport wndMgrimport musicInfoimport serverInfoimport systemSettingimport ServerStateCheckerimport localeInfoimport constInfoimport uiCommonimport timeimport ServerCommandParserimport imeimport uiScriptLocaleHwid = constInfo.HwidSnn = constInfo.SnnRUNUP_MATRIX_AUTH = FALSENEWCIBN_PASSPOD_AUTH = FALSELOGIN_DELAY_SEC = 0.0SKIP_LOGIN_PHASE = FALSESKIP_LOGIN_PHASE_SUPPORT_CHANNEL = FALSEFULL_BACK_IMAGE = FALSEPASSPOD_MSG_DICT = {}VIRTUAL_KEYBOARD_NUM_KEYS = 46VIRTUAL_KEYBOARD_RAND_KEY = TRUEdef 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 srcif localeInfo.IsNEWCIBN() or localeInfo.IsCIBN10():LOGIN_DELAY_SEC = 20.0FULL_BACK_IMAGE = TRUENEWCIBN_PASSPOD_AUTH = TRUEPASSPOD_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 = TRUEelif localeInfo.IsHONGKONG():FULL_BACK_IMAGE = TRUERUNUP_MATRIX_AUTH = TRUEPASSPOD_MSG_DICT = {"NOTELE" : localeInfo.LOGIN_FAILURE_NOTELEBLOCK,}elif localeInfo.IsJAPAN():FULL_BACK_IMAGE = TRUEdef IsFullBackImage():global FULL_BACK_IMAGEreturn FULL_BACK_IMAGEdef IsLoginDelay():global LOGIN_DELAY_SECif LOGIN_DELAY_SEC > 0.0:return TRUEelse:return FALSEdef IsRunupMatrixAuth():global RUNUP_MATRIX_AUTHreturn RUNUP_MATRIX_AUTHdef IsNEWCIBNPassPodAuth():global NEWCIBN_PASSPOD_AUTHreturn NEWCIBN_PASSPOD_AUTHdef GetLoginDelay():global LOGIN_DELAY_SECreturn LOGIN_DELAY_SECapp.SetGuildMarkPath("test")class Item(ui.ListBoxEx.Item):def __init__(self, fileName):ui.ListBoxEx.Item.__init__(self)self.canLoad=0self.text=fileNameself.textLine=self.__CreateTextLine(fileName)def __del__(self):ui.ListBoxEx.Item.__del__(self)def GetText(self):return self.textdef SetSize(self, width, height):ui.ListBoxEx.Item.SetSize(self, 6*len(self.textLine.GetText()) + 4, height)def __CreateTextLine(self, fileName):textLine=ui.TextLine()textLine.SetParent(self)textLine.SetPosition(0, 0)textLine.SetText(fileName)textLine.SetFontColor(25.0, 25.0, 25.0)textLine.Show()return textLineclass ConnectingDialog(ui.ScriptWindow):def __init__(self):ui.ScriptWindow.__init__(self)self.__LoadDialog()self.eventTimeOver = lambda *arg: Noneself.eventExit = lambda *arg: Nonedef __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 exceptionexception.Abort("ConnectingDialog.LoadDialog.BindObject")def Open(self, waitTime):curTime = time.clock()self.endTime = curTime + waitTimeself.Lock()self.SetCenterPosition()self.SetTop()self.Show()def Close(self):self.Unlock()self.Hide()def Destroy(self):self.Hide()self.ClearDictionary()def SetText(self, text):self.message.SetText(text)def SetCountDownMessage(self, waitTime):self.countdownMessage.SetText("%.0f%s" % (waitTime, localeInfo.SECOND))def SAFE_SetTimeOverEvent(self, event):self.eventTimeOver = ui.__mem_func__(event)def SAFE_SetExitEvent(self, event):self.eventExit = ui.__mem_func__(event)def OnUpdate(self):lastTime = max(0, self.endTime - time.clock())if 0 == lastTime:self.Close()self.eventTimeOver()else:self.SetCountDownMessage(self.endTime - time.clock())def OnPressExitKey(self):#self.eventExit()return TRUEclass 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 = 0self.lastLoginTime = 0self.inputDialog = Noneself.connectingDialog = Noneself.stream=streamself.isNowCountDown=FALSEself.isStartError=FALSEself.xServerBoard = 0self.yServerBoard = 0self.loadingImage = Noneself.virtualKeyboard = Noneself.virtualKeyboardMode = "ALPHABET"self.virtualKeyboardIsUpper = FALSEdef __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" : locale.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,}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")returnself.__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_PHASEif SKIP_LOGIN_PHASE:if self.isStartError:self.connectBoard.Hide()self.loginBoard.Hide()self.serverBoard.Hide()self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)returnif 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:f = open("miles/login.cfg", "r+")configuracao = f.readline(1)if configuracao == "0":f.close()self.connectBoard.Hide()self.loginBoard.Hide()self.ShowRuleBoard()else:self.__RefreshServerList()self.__OpenServerBoard()app.ShowCursor()def ShowRuleBoard(self):f = open("miles/rules.txt", "r+")rules = f.readlines()f.close()self.RuleBoard = ui.ThinBoard()self.RuleBoard.SetSize(520,550)self.RuleBoard.SetCenterPosition()self.RuleBoard.Show()self.Text = ui.ListBoxEx()self.Text.SetParent(self.RuleBoard)self.Text.SetSize(500, 400)self.Text.SetViewItemCount(20)self.Text.SetPosition(10, 80)for line in rules:self.Text.AppendItem(Item(line))self.Text.Show()self.scroll = ui.ScrollBar()self.scroll.SetParent(self.RuleBoard)self.scroll.SetPosition(500-10, 80)self.scroll.SetScrollBarSize(400)self.scroll.Show()self.Text.SetScrollBar(self.scroll)self.Accept = ui.Button()self.Accept.SetParent(self.RuleBoard)self.Accept.SetPosition(250-200,510)self.Accept.SetUpVisual("d:/ymir work/ui/public/xlarge_Button_01.sub")self.Accept.SetOverVisual("d:/ymir work/ui/public/xlarge_Button_02.sub")self.Accept.SetDownVisual("d:/ymir work/ui/public/xlarge_Button_03.sub")self.Accept.SetText("Aceitar")self.Accept.SetEvent(ui.__mem_func__(self.__Accept))self.Accept.Show()self.Decline = ui.Button()self.Decline.SetParent(self.RuleBoard)self.Decline.SetPosition(250+20,510)self.Decline.SetUpVisual("d:/ymir work/ui/public/xlarge_Button_01.sub")self.Decline.SetOverVisual("d:/ymir work/ui/public/xlarge_Button_02.sub")self.Decline.SetDownVisual("d:/ymir work/ui/public/xlarge_Button_03.sub")self.Decline.SetText("Não aceitar")self.Decline.SetEvent(ui.__mem_func__(self.__Decline))self.Decline.Show()def __Accept(self):if self.scroll.GetPos() == 1:self.RuleBoard.Hide()f = open("miles/login.cfg", "r+")f.write("1")f.close()self.__RefreshServerList()self.__OpenServerBoard()else:self.PopupNotifyMessage("É OBRIGATÓRIO LER TODAS AS REGRAS!!!")def __Decline(self):app.Exit()def Close(self):if self.connectingDialog:self.connectingDialog.Close()self.connectingDialog = NoneServerStateChecker.Initialize(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 = Noneself.loginBoard = Noneself.idEditLine = Noneself.pwdEditLine = Noneself.inputDialog = Noneself.connectingDialog = Noneself.loadingImage = Noneself.serverBoard = Noneself.serverList = Noneself.channelList = None# RUNUP_MATRIX_AUTHself.matrixQuizBoard = Noneself.matrixAnswerInput = Noneself.matrixAnswerOK = Noneself.matrixAnswerCancel = None# RUNUP_MATRIX_AUTH_END# NEWCIBN_PASSPOD_AUTHself.passpodBoard = Noneself.passpodAnswerInput = Noneself.passpodAnswerOK = Noneself.passpodAnswerCancel = None# NEWCIBN_PASSPOD_AUTH_ENDself.VIRTUAL_KEY_ALPHABET_LOWERS = Noneself.VIRTUAL_KEY_ALPHABET_UPPERS = Noneself.VIRTUAL_KEY_SYMBOLS = Noneself.VIRTUAL_KEY_NUMBERS = None# VIRTUAL_KEYBOARD_BUG_FIXif 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 = Noneself.KillFocus()self.Hide()self.stream.popupWindow.Close()self.loginFailureFuncDict=Noneime.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, selChannelIDexcept:print "LoginWindow.__LoadChannelInfo - OpenError"return -1, -1, -1def __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 = FALSEself.OnConnectFailure()def OnConnectFailure(self):if self.isNowCountDown:returnsnd.PlaySound("sound/ui/loginfail.wav")if self.connectingDialog:self.connectingDialog.Close()self.connectingDialog = Noneif 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 = Nonetry:loginFailureMsg = self.loginFailureMsgDict[error]except KeyError:if PASSPOD_MSG_DICT:try:loginFailureMsg = PASSPOD_MSG_DICT[error]except KeyError:loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN + errorelse: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 = Noneself.SetIDEditLineFocus()net.Disconnect()def __DisconnectAndInputPassword(self):if self.connectingDialog:self.connectingDialog.Close()self.connectingDialog = Noneself.SetPasswordEditLineFocus()net.Disconnect()def __DisconnectAndInputMatrix(self):if self.connectingDialog:self.connectingDialog.Close()self.connectingDialog = Noneself.stream.popupWindow.Close()self.matrixInputChanceCount -= 1if 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 exceptionexception.Abort("LoginWindow.__LoadScript.LoadObject")try:GetObject=self.GetChildself.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 localeInfo.IsVIETNAM():self.checkButton = GetObject("CheckButton")self.checkButton.Down()# RUNUP_MATRIX_AUTHif IsRunupMatrixAuth():self.matrixQuizBoard = GetObject("RunupMatrixQuizBoard")self.matrixAnswerInput = GetObject("RunupMatrixAnswerInput")self.matrixAnswerOK = GetObject("RunupMatrixAnswerOK")self.matrixAnswerCancel = GetObject("RunupMatrixAnswerCancel")# RUNUP_MATRIX_AUTH_END# NEWCIBN_PASSPOD_AUTHif 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_ENDself.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])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 exceptionexception.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))# RUNUP_MATRIX_AUTHif 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_AUTHif IsNEWCIBNPassPodAuth():self.passpodAnswerOK.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerOK)self.passpodAnswerCancel.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerCancel)self.passpodAnswerInput.SAFE_SetReturnEvent(self.__OnClickNEWCIBNPasspodAnswerOK)# NEWCIBN_PASSPOD_AUTH_ENDif IsFullBackImage():self.GetChild("bg1").Show()self.GetChild("bg2").Hide()return 1def __VirtualKeyboard_SetKeys(self, keyCodes):uiDefFontBackup = localeInfo.UI_DEF_FONTlocaleInfo.UI_DEF_FONT = localeInfo.UI_DEF_FONT_LARGEkeyIndex = 1for 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 += 1for 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 = uiDefFontBackupdef __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 = TRUEif 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 = FALSEif 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 = FALSEself.virtualKeyboardMode = "ALPHABET"self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)def __VirtualKeyboard_SetNumberMode(self):self.virtualKeyboardIsUpper = FALSEself.virtualKeyboardMode = "NUMBER"self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)def __VirtualKeyboard_SetSymbolMode(self):self.virtualKeyboardIsUpper = FALSEself.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, Hwid, Snn):global Hwid, Snnif 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 = TRUEelse:self.stream.popupWindow.Close()self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.SetPasswordEditLineFocus, localeInfo.UI_CANCEL)self.stream.SetLoginInfo(id, pwd, Hwid, Snn)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):global Hwid, Snntry: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""localeInfo=(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=addraccount_port=portnet.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 exceptionexception.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)localeInfo = loginInfo.get("localeInfo", "")if addr and port:net.SetMarkServer(addr, port)if localeInfo == "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=isAutoLoginself.stream.isAutoSelect=isAutoSelectself.id = Noneself.pwd = Noneself.Hwid = Hwidself.Snn = Snnself.loginnedServer = Noneself.loginnedChannel = Noneapp.loggined = FALSEself.loginInfo = loginInfoif self.id and self.pwd:app.loggined = TRUEif isAutoLogin:self.Connect(id, pwd, Hwid, Snn)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.EmptyFuncself.stream.popupWindow.Close()self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK)# RUNUP_MATRIX_AUTHdef BINARY_OnRunupMatrixQuiz(self, quiz):if not IsRunupMatrixAuth():returnid = self.GetChild("RunupMatrixID")id.SetText(self.idEditLine.GetText())code = self.GetChild("RunupMatrixCode")code.SetText("".join(["[%c,%c]" % (quiz, 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_AUTHdef BINARY_OnNEWCIBNPasspodRequest(self):if not IsNEWCIBNPassPodAuth():returnif self.connectingDialog:self.connectingDialog.Close()self.connectingDialog = Noneself.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():returndef __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_ENDdef OnMatrixCard(self, row1, row2, row3, row4, col1, col2, col3, col4):if self.connectingDialog:self.connectingDialog.Close()self.connectingDialog = Noneself.matrixInputChanceCount = 3self.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_FIXrow1 = chr(row1 + ord('A'))row2 = chr(row2 + ord('A'))row3 = chr(row3 + ord('A'))row4 = chr(row4 + ord('A'))col1 = col1 + 1col2 = col2 + 1col3 = col3 + 1col4 = col4 + 1inputDialog = 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 = inputDialogdef __OnAcceptMatrixCardData(self):text = self.inputDialog.GetText()net.SendChinaMatrixCardPacket(text)if self.inputDialog:self.inputDialog.Hide()self.PopupNotifyMessage(localeInfo.LOGIN_PROCESSING)return TRUEdef __OnCancelMatrixCardData(self):self.SetPasswordEditLineFocus()self.__OnCloseInputDialog()self.__DisconnectAndInputPassword()return TRUEdef __OnCloseInputDialog(self):if self.inputDialog:self.inputDialog.Close()self.inputDialog = Nonereturn TRUEdef OnPressExitKey(self):self.stream.popupWindow.Close()self.stream.SetPhaseWindow(0)return TRUEdef 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 TRUEdef __GetRegionID(self):return 0def __GetServerID(self):return self.serverList.GetSelectedItem()def __GetChannelID(self):return self.channelList.GetSelectedItem()# SEVER_LIST_BUG_FIXdef __ServerIDToServerIndex(self, regionID, targetServerID):try:regionDict = serverInfo.REGION_DICT[regionID]except KeyError:return -1retServerIndex = 0for eachServerID, regionDataDict in regionDict.items():if eachServerID == targetServerID:return retServerIndexretServerIndex += 1return -1def __ChannelIDToChannelIndex(self, channelID):return channelID - 1# END_OF_SEVER_LIST_BUG_FIXdef __OpenServerBoard(self):loadRegionID, loadServerID, loadChannelID = self.__LoadChannelInfo()serverIndex = self.__ServerIDToServerIndex(loadRegionID, loadServerID)channelIndex = self.__ChannelIDToChannelIndex(loadChannelID)# RUNUP_MATRIX_AUTHif IsRunupMatrixAuth():self.matrixQuizBoard.Hide()# RUNUP_MATRIX_AUTH_END# NEWCIBN_PASSPOD_AUTHif IsNEWCIBNPassPodAuth():self.passpodBoard.Hide()# NEWCIBN_PASSPOD_AUTH_ENDself.serverList.SelectItem(serverIndex)if localeInfo.IsEUROPE():self.channelList.SelectItem(app.GetRandom(0, self.channelList.GetItemCount()))else:if channelIndex >= 0:self.channelList.SelectItem(channelIndex)## Show/Hide Äڵ忡 ¹®Á¦°¡ ÀÖ¾î¼ Àӽà - [levites]self.serverBoard.SetPosition(self.xServerBoard, self.yServerBoard)self.serverBoard.Show()self.connectBoard.Hide()self.loginBoard.Hide()if self.virtualKeyboard:self.virtualKeyboard.Hide()if app.loggined and not SKIP_LOGIN_PHASE_SUPPORT_CHANNEL:self.serverList.SelectItem(self.loginnedServer-1)self.channelList.SelectItem(self.loginnedChannel-1)self.__OnClickSelectServerButton()def __OpenLoginBoard(self):self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))self.serverExitButton.SetText(localeInfo.UI_CLOSE)# RUNUP_MATRIX_AUTHif IsRunupMatrixAuth():self.matrixQuizBoard.Hide()# RUNUP_MATRIX_AUTH_END# NEWCIBN_PASSPOD_AUTHif IsNEWCIBNPassPodAuth():self.passpodBoard.Hide()# NEWCIBN_PASSPOD_AUTH_ENDself.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight())self.serverBoard.Hide()if self.virtualKeyboard:self.virtualKeyboard.Show()if app.loggined:self.Connect(self.id, self.pwd)self.connectBoard.Hide()self.loginBoard.Hide()elif not self.stream.isAutoLogin:self.connectBoard.Show()self.loginBoard.Show()## if users have the login infomation, then don't initialize.2005.9 hahoif self.idEditLine == None:self.idEditLine.SetText("")if self.pwdEditLine == None:self.pwdEditLine.SetText("")self.idEditLine.SetFocus()global SKIP_LOGIN_PHASEif SKIP_LOGIN_PHASE:if not self.loginInfo:self.connectBoard.Hide()def __OnSelectRegionGroup(self):self.__RefreshServerList()def __OnSelectSettlementArea(self):# SEVER_LIST_BUG_FIXregionID = self.__GetRegionID()serverID = self.serverListOnRegionBoard.GetSelectedItem()serverIndex = self.__ServerIDToServerIndex(regionID, serverID)self.serverList.SelectItem(serverIndex)# END_OF_SEVER_LIST_BUG_FIXself.__OnSelectServer()def __RefreshServerList(self):regionID = self.__GetRegionID()if not serverInfo.REGION_DICT.has_key(regionID):returnself.serverList.ClearItem()regionDict = serverInfo.REGION_DICT[regionID]# SEVER_LIST_BUG_FIXvisible_index = 1for 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 += 1else:try:server_id = serverInfo.SERVER_ID_DICT[id]except:server_id = visible_indexself.serverList.InsertItem(id, " %02d. %s" % (int(server_id), name))visible_index += 1# END_OF_SEVER_LIST_BUG_FIXdef __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)returnServerStateChecker.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)returnfor 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_PVPelse:return localeInfo.CHANNEL_NORMAL % (selChannelID)def NotifyChannelState(self, addrKey, state):try:stateName=serverInfo.STATE_DICT[state]except:stateName=serverInfo.STATE_NONEregionID=int(addrKey/1000)serverID=int(addrKey/10) % 100channelID=addrKey%10try:serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateNameself.__RefreshServerStateList()except:import exceptionexception.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)returnif (not serverInfo.REGION_DICT[regionID].has_key(serverID)):self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)returnself.__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)returnif (not serverInfo.REGION_DICT[regionID].has_key(serverID)):self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)returntry:channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]except KeyError:returntry:state = channelDict[channelID]["state"]except KeyError:self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_CHANNEL)return# »óÅ°¡ FULL °ú °°À¸¸é ÁøÀÔ ±ÝÁöif state == serverInfo.STATE_DICT[3]:self.PopupNotifyMessage(localeInfo.CHANNEL_NOTIFY_FULL)returnself.__SaveChannelInfo()try:serverName = serverInfo.REGION_DICT[regionID][serverID]["name"]channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]if "õ¸¶ ¼¹ö" == serverName:app.ForceSetlocaleInfo("ymir", "localeInfo/ymir")elif "Äèµµ ¼¹ö" == serverName:app.ForceSetlocaleInfo("we_korea", "localeInfo/we_korea")except:print " ERROR __OnClickSelectServerButton(%d, %d, %d)" % (regionID, serverID, channelID)serverName = localeInfo.CHANNEL_EMPTY_SERVERchannelName = localeInfo.CHANNEL_NORMAL % channelIDself.__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 exceptionexception.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 = 0account_port = 0try:markKey = regionID*1000 + serverID*10markAddrValue=serverInfo.MARKADDR_DICT[markKey]net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"])app.SetGuildMarkPath(markAddrValue["mark"])# GUILD_SYMBOLapp.SetGuildSymbolPath(markAddrValue["symbol_path"])# END_OF_GUILD_SYMBOLexcept:import exceptionexception.Abort("LoginWindow.__OnClickSelectServerButton - ¸¶Å© Á¤º¸ ¾øÀ½")if app.USE_OPENID and not app.OPENID_TEST :## 2012.07.19 OpenID : ±è¿ë¿í# ä³Î ¼±Åà ȸ鿡¼ "È®ÀÎ"(SelectServerButton) À» ´·¶À»¶§,# ·Î±×ÀΠȸéÀ¸·Î ³Ñ¾î°¡Áö ¾Ê°í ¹Ù·Î ¼¹ö¿¡ OpenID ÀÎÁõÅ°¸¦ º¸³»µµ·Ï ¼öÁ¤self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)self.Connect(0, 0)else :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):global Hwid, Snnid = self.idEditLine.GetText()pwd = self.pwdEditLine.GetText()if len(id)==0:self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_ID, self.SetIDEditLineFocus)returnif len(pwd)==0:self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus)returnself.Connect(id, pwd, Hwid, Snn)networkmodule#################################################################################################### Networkimport appimport chrimport dbgimport netimport sndimport chrimport chrmgrimport backgroundimport playerimport playerSettingModuleimport uiimport uiPhaseCurtainimport localeInfoimport constInfoHwid=constInfo.HwidSnn=constInfo.Snnclass PopupDialog(ui.ScriptWindow):def __init__(self):print "NEW POPUP DIALOG ----------------------------------------------------------------------------"ui.ScriptWindow.__init__(self)self.CloseEvent = 0def __del__(self):print "---------------------------------------------------------------------------- DELETE POPUP DIALOG "ui.ScriptWindow.__del__(self)def LoadDialog(self):PythonScriptLoader = ui.PythonScriptLoader()PythonScriptLoader.LoadScriptFile(self, "UIScript/PopupDialog.py")def Open(self, Message, event = 0, ButtonName = localeInfo.UI_CANCEL):if TRUE == self.IsShow():self.Close()self.Lock()self.SetTop()self.CloseEvent = eventAcceptButton = self.GetChild("accept")AcceptButton.SetText(ButtonName)AcceptButton.SetEvent(ui.__mem_func__(self.Close))self.GetChild("message").SetText(Message)self.Show()def Close(self):if FALSE == self.IsShow():self.CloseEvent = 0returnself.Unlock()self.Hide()if 0 != self.CloseEvent:self.CloseEvent()self.CloseEvent = 0def Destroy(self):self.Close()self.ClearDictionary()def OnPressEscapeKey(self):self.Close()return TRUEdef OnIMEReturn(self):self.Close()return TRUE#### Main Stream##class MainStream(object):isChrData=0def __init__(self):print "NEWMAIN STREAM ----------------------------------------------------------------------------"net.SetHandler(self)net.SetTCPRecvBufferSize(128*1024)net.SetTCPSendBufferSize(4096)net.SetUDPRecvBufferSize(4096)self.id=""self.pwd=""self.Hwid=constInfo.Hwidself.Snn=constInfo.Snnself.addr=""self.port=0self.account_addr=0self.account_port=0self.slot=0self.isAutoSelect=0self.isAutoLogin=0self.curtain = 0self.curPhaseWindow = 0self.newPhaseWindow = 0def __del__(self):print "---------------------------------------------------------------------------- DELETE MAIN STREAM "def Destroy(self):if self.curPhaseWindow:self.curPhaseWindow.Close()self.curPhaseWindow = 0if self.newPhaseWindow:self.newPhaseWindow.Close()self.newPhaseWindow = 0self.popupWindow.Destroy()self.popupWindow = 0self.curtain = 0def Create(self):self.CreatePopupDialog()self.curtain = uiPhaseCurtain.PhaseCurtain()def SetPhaseWindow(self, newPhaseWindow):if self.newPhaseWindow:#print "이미 새로운 윈도우로 바꾼상태에서 또 바꿈", newPhaseWindowself.__ChangePhaseWindow()self.newPhaseWindow=newPhaseWindowif self.curPhaseWindow:#print "페이드 아웃되면 바꿈"self.curtain.FadeOut(self.__ChangePhaseWindow)else:#print "현재 윈도우가 없는 상태라 바로 바꿈"self.__ChangePhaseWindow()def __ChangePhaseWindow(self):oldPhaseWindow=self.curPhaseWindownewPhaseWindow=self.newPhaseWindowself.curPhaseWindow=0self.newPhaseWindow=0if oldPhaseWindow:oldPhaseWindow.Close()if newPhaseWindow:newPhaseWindow.Open()self.curPhaseWindow=newPhaseWindowif self.curPhaseWindow:self.curtain.FadeIn()else:app.Exit()def CreatePopupDialog(self):self.popupWindow = PopupDialog()self.popupWindow.LoadDialog()self.popupWindow.SetCenterPosition()self.popupWindow.Hide()## SelectPhase##########################################################################################def SetLogoPhase(self):net.Disconnect()import introLogoself.SetPhaseWindow(introLogo.LogoWindow(self))def SetLoginPhase(self):net.Disconnect()import introLoginself.SetPhaseWindow(introLogin.LoginWindow(self))def SetSelectEmpirePhase(self):try:import introEmpireself.SetPhaseWindow(introEmpire.SelectEmpireWindow(self))except:import exceptionexception.Abort("networkModule.SetSelectEmpirePhase")def SetReselectEmpirePhase(self):try:import introEmpireself.SetPhaseWindow(introEmpire.ReselectEmpireWindow(self))except:import exceptionexception.Abort("networkModule.SetReselectEmpirePhase")def SetSelectCharacterPhase(self):try:localeInfo.LoadLocaleData()import introSelectself.popupWindow.Close()self.SetPhaseWindow(introSelect.SelectCharacterWindow(self))except:import exceptionexception.Abort("networkModule.SetSelectCharacterPhase")def SetCreateCharacterPhase(self):try:import introCreateself.SetPhaseWindow(introCreate.CreateCharacterWindow(self))except:import exceptionexception.Abort("networkModule.SetCreateCharacterPhase")def SetTestGamePhase(self, x, y):try:import introLoadingloadingPhaseWindow=introLoading.LoadingWindow(self)loadingPhaseWindow.LoadData(x, y)self.SetPhaseWindow(loadingPhaseWindow)except:import exceptionexception.Abort("networkModule.SetLoadingPhase")def SetLoadingPhase(self):try:import introLoadingself.SetPhaseWindow(introLoading.LoadingWindow(self))except:import exceptionexception.Abort("networkModule.SetLoadingPhase")def SetGamePhase(self):try:import gameself.popupWindow.Close()self.SetPhaseWindow(game.GameWindow(self))except:raiseimport exceptionexception.Abort("networkModule.SetGamePhase")################################# Functions used in python## Logindef Connect(self):import constInfoif constInfo.KEEP_ACCOUNT_CONNETION_ENABLE:net.ConnectToAccountServer(self.addr, self.port, self.account_addr, self.account_port)else:net.ConnectTCP(self.addr, self.port)#net.ConnectUDP(IP, Port)def SetConnectInfo(self, addr, port, account_addr=0, account_port=0):self.addr = addrself.port = portself.account_addr = account_addrself.account_port = account_portdef GetConnectAddr(self):return self.addrdef SetLoginInfo(self, id, pwd, Hwid, Snn):self.id = idself.pwd = pwdself.Hwid = constInfo.Hwidself.Snn = constInfo.Snnnet.SetLoginInfo(id, pwd, Hwid, Snn)def CancelEnterGame(self):pass## Selectdef SetCharacterSlot(self, slot):self.slot=slotdef GetCharacterSlot(self):return self.slot## Emptydef EmptyFunction(self):pass1130 02:42:05084 :: File "introLogo.py", line 60, in OnUpdate
1130 02:42:05085 :: File "networkModule.py", line 183, in SetLoginPhase
1130 02:42:05085 :: File "system.py", line 130, in __pack_import
1130 02:42:05085 :: File "
1130 02:42:05085 :: introLogin.py
1130 02:42:05085 :: ", line
1130 02:42:05085 :: 776
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 :: global Hwid, Snn
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 ::
1130 02:42:05085 :: ^
1130 02:42:05085 :: IndentationError
1130 02:42:05085 :: :
1130 02:42:05085 :: unindent does not match any outer indentation level
1130 02:42:05085 ::
Replace space(4x) with TAB
-
Use the PyLong_FromLongLong function.
How to use this function ?
-
check Index hash SHA or better
check mainfolder(game client) pc or pc2 subfolder
check d:/ folder ymir work subfolder
how that solve the problem?
import hashlib, sys, os hash = hashlib.sha512() with open(os.getcwd() + "packIndex", 'rb') as afile: hash.update(afile.read()) r = hash.hexdigest() if not r == "1": # 1 -> hash value sys.exit # or app.Exit() for asd in os.getcwd(): if asd.find("pc") or asd.find("pc2") or asd.find("ymir work"): sys.exit # or app.Exit() for bcd in os.listdir("d:/"): if bcd.find("ymir work"): sys.exit # or app.Exit()
Hash getter script
import hashlib ftw, wtf = raw_input("File name (with directory):n"), hashlib.sha512() with open(ftw, 'rb') as f: wtf.update(f.read()) print wtf.hexdigest()
- 1
-
check Index hash SHA or better
check mainfolder(game client) pc or pc2 subfolder
check d:/ folder ymir work subfolder
how that solve the problem?
1)https://docs.python.org/2/library/hashlib.html#module-hashlib
2-3)https://docs.python.org/2/library/os.path.html#os.path.exists --- https://docs.python.org/2/library/os.html#os.rmdir
-
check Index hash SHA or better
check mainfolder(game client) pc or pc2 subfolder
check d:/ folder ymir work subfolder
-
remove CHECK_LATEST_DATA_FILES define
-
I agree what is MartPwnS said. String can be manipulated via python. You should be look at google results before open this topic.
HWID (Hardware ID) : http://skilinium.com/blog/?p=323
Best Regards
Ellie
this topic made system with python, who needs opens its new topic
-
Will kill Windows XP compatibility (http://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx)
My teacher would kill you for os.popen please dont use this anylonger and try to get the data you want with a different approach!
No use for me because our server uses a similar system but with pre Vista compatibility due to custom made classes on a low level.
Big Mistakes:
Hwid string can be manipulated via python (EASILY!)
=> SQLInjection on Hwid query.
Kind regards
MartPwnS
yes you are right, not perfect or flawless, you do have better solution?
-
Hi devs,
I maked new user check system(like IP) with Hardware
Needed Files;
Server Part:
Common -> tables.h, lenght.h
Game -> input_auth.cpp, packet.h
Client Part:
Pack -> intrologin.py, networkmodule.py, constinfo.py
Client -> AccountConnector.cpp, AccountConnector.h, Packet.h, PythonNetworkStream.cpp, PythonNetworkStream.h, PythonNetworkStreamModule.cpp, PythonNetworkStreamPhaseLogin.cpp
A BACKUP BEFORE YOU START
KNOWN BUGS;
All Auth Events logging(not only succesfuly)
Let's start
1) First Server Part:
1-1) Common
1-1-1) Tables.h
Search
typedef struct SAccountTable
And replace with this
typedef struct SAccountTable { DWORD id; char login[LOGIN_MAX_LEN + 1]; char Hwid[HWID_MAX_LEN + 1]; char Snn[SNN_MAX_LEN + 1]; char passwd[PASSWD_MAX_LEN + 1]; char social_id[SOCIAL_ID_MAX_LEN + 1]; char status[ACCOUNT_STATUS_MAX_LEN + 1]; BYTE bEmpire; TSimplePlayer players[PLAYER_PER_ACCOUNT]; } TAccountTable;
Search
typedef struct SLoginPacket
And replace with this
typedef struct SLoginPacket { char login[LOGIN_MAX_LEN + 1]; char passwd[PASSWD_MAX_LEN + 1]; char Hwid[HWID_MAX_LEN + 1]; char Snn[SNN_MAX_LEN + 1]; } TLoginPacket;
Search
typedef struct SPacketGDAuthLogin
And replace with this
typedef struct SPacketGDAuthLogin { DWORD dwID; DWORD dwLoginKey; char szLogin[LOGIN_MAX_LEN + 1]; char szHwid[HWID_MAX_LEN + 1]; char szSnn[SNN_MAX_LEN + 1]; char szSocialID[SOCIAL_ID_MAX_LEN + 1]; DWORD adwClientKey[4]; BYTE bBillType; DWORD dwBillID; int iPremiumTimes[PREMIUM_MAX_NUM]; } TPacketGDAuthLogin;
1-1-2) Lenght.h
Search
PASSWD_MAX_LEN = 16,
Add it below
HWID_MAX_LEN = 50, SNN_MAX_LEN = 50,
1-2) Game
1-2-1) input_auth.cpp
Search this function
void CInputAuth::Login(LPDESC d, const char * c_pData)
Find this
char passwd[PASSWD_MAX_LEN + 1]; strlcpy(passwd, pinfo->passwd, sizeof(passwd));
and add it below
char Hwid[HWID_MAX_LEN + 1]; strlcpy(Hwid, pinfo->Hwid, sizeof(Hwid)); char Snn[SNN_MAX_LEN + 1]; strlcpy(Snn, pinfo->Snn, sizeof(Snn)); std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET hwid = '%s', Snn = '%s' WHERE login = '%s'", pinfo->Hwid, pinfo->Snn, login));
1-2-2) packet.h
Search
typedef struct command_login2
and replace with this
typedef struct command_login2 { BYTE header; char login[LOGIN_MAX_LEN + 1]; DWORD dwLoginKey; DWORD adwClientKey[4]; char Hwid[HWID_MAX_LEN + 1]; char Snn[SNN_MAX_LEN + 1]; } TPacketCGLogin2;
Search
typedef struct command_login3
and replace with this
typedef struct command_login3 { BYTE header; char login[LOGIN_MAX_LEN + 1]; char passwd[PASSWD_MAX_LEN + 1]; char Hwid[HWID_MAX_LEN + 1]; char Snn[SNN_MAX_LEN + 1]; DWORD adwClientKey[4]; } TPacketCGLogin3;
2) Second Client Part
2-1)Pack
2-1-1)Constinfo.py
Add anywhere
import os try: Hwid = os.popen("wmic csproduct get uuid").read().split("n")[1] except: Hwid = os.popen("%WINDIR%/system32/wbem/wmic csproduct get uuid").read().split("n")[1] try: Snn = os.popen('wmic path win32_physicalmedia get SerialNumber').read().split("n")[1] except: Snn = os.popen("%WINDIR%/system32/wbem/wmic path win32_physicalmedia get SerialNumber").read().split("n")[1]
2-1-2)Networkmodule.py
add this import
import constInfo
and add it below
Hwid=constInfo.Hwid Snn=constInfo.Snn
Search
self.pwd=""
and add it below
self.Hwid=constInfo.Hwid self.Snn=constInfo.Snn
Search
def SetLoginInfo(self, id, pwd) self.id = id self.pwd = pwd net.SetLoginInfo(id, pwd)
and replace with this
def SetLoginInfo(self, id, pwd, Hwid, Snn): self.id = id self.pwd = pwd self.Hwid = constInfo.Hwid self.Snn = constInfo.Snn net.SetLoginInfo(id, pwd, Hwid, Snn)
2-2-3)introLogin.py
Search
RUNUP_MATRIX_AUTH = FALSE
Add top
Hwid = constInfo.Hwid Snn = constInfo.Snn
Search this function
def Connect(self, id):
and replace with this
def Connect(self, id, pwd, Hwid, Snn): global Hwid, Snn 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, Hwid, Snn) self.stream.Connect()
Search
def __LoadLoginInfo(self, loginInfoFileName):
Add it below
global Hwid, Snn
Search
self.pwd = None
Add it below
self.Hwid = Hwid self.Snn = Snn
Search
self.Connect(id, pwd)
Replace with this
self.Connect(id, pwd, Hwid, Snn)
Search
self.Connect(id, pwd)
Replace With This
self.Connect(id, pwd, Hwid, Snn)
Search
def __OnClickLoginButton(self):
Add it below
global Hwid, Snn
2-2)Client
2-2-1)Packet.h
Search
PASS_MAX_NUM = 16,
and add it below
HWID_MAX_NUM = 50, SNN_MAX_NUM = 50,
Search
typedef struct command_login
And replace with this
typedef struct command_login { BYTE header; char name[ID_MAX_NUM + 1]; char pwd[PASS_MAX_NUM + 1]; char Hwid[HWID_MAX_NUM + 1]; char Snn[SNN_MAX_NUM + 1]; } TPacketCGLogin;
Search
typedef struct command_login3
And replace with this
typedef struct command_login3 { BYTE header; char name[ID_MAX_NUM + 1]; char pwd[PASS_MAX_NUM + 1]; char Hwid[HWID_MAX_NUM + 1]; char Snn[SNN_MAX_NUM + 1]; DWORD adwClientKey[4]; } TPacketCGLogin3;
Search
typedef struct command_direct_enter
And replace with this
typedef struct command_direct_enter { BYTE bHeader; char login[ID_MAX_NUM + 1]; char passwd[PASS_MAX_NUM + 1]; char Hwid[HWID_MAX_NUM + 1]; char Snn[SNN_MAX_NUM + 1]; BYTE index; } TPacketCGDirectEnter;
2-2-2)AccountConnector.h
Search
void SetLoginInfo(const char * c_szName, const char * c_szPwd
Replace with this
void SetLoginInfo(const char * c_szName, const char * c_szPwd, const char * c_szHwid, const char * c_szSnn);
Search
std::string m_strPassword;
Add it below
std::string m_strHwid; std::string m_strSnn;
2-2-3)AccountConnector.cpp
Search this function
void CAccountConnector::SetLoginInfo(const char * c_szName, const char * c_szPwd)
Replace with this
void CAccountConnector::SetLoginInfo(const char * c_szName, const char * c_szPwd, const char * c_szHwid, const char * c_szSnn) { m_strID = c_szName; m_strPassword = c_szPwd; m_strHwid = c_szHwid; m_strSnn = c_szSnn; }
Search
strncpy(LoginPacket.pwd, m_strPassword.c_str(), PASS_MAX_NUM);
add it below
strncpy(LoginPacket.Hwid, m_strHwid.c_str(), HWID_MAX_NUM); strncpy(LoginPacket.Snn, m_strSnn.c_str(), SNN_MAX_NUM);
Search
LoginPacket.pwd[PASS_MAX_NUM] = '0';
Add it below
LoginPacket.Hwid[HWID_MAX_NUM] = '0'; LoginPacket.Snn[SNN_MAX_NUM] = '0';
Search
SetLoginInfo("", "");
Replace with this
SetLoginInfo("", "", "", "");
2-2-4)PythonNetworkStreamPhaseLogin.cpp
Search(2x)
if (0 != m_dwLoginKey)
and replace with this
if (0 != m_dwLoginKey) SendLoginPacketNew(m_stID.c_str(), m_stPassword.c_str(), m_stHwid.c_str(), m_stSnn.c_str()); else SendLoginPacket(m_stID.c_str(), m_stPassword.c_str(), m_stHwid.c_str(), m_stSnn.c_str());
Search this function
bool CPythonNetworkStream::SendDirectEnterPacket(const char* c_szID, const char* c_szPassword)
replace with this
bool CPythonNetworkStream::SendDirectEnterPacket(const char* c_szID, const char* c_szPassword, const char* c_szHwid, const char* c_szSnn, UINT uChrSlot) { TPacketCGDirectEnter kPacketDirectEnter; kPacketDirectEnter.bHeader=HEADER_CG_DIRECT_ENTER; kPacketDirectEnter.index=uChrSlot; strncpy(kPacketDirectEnter.login, c_szID, ID_MAX_NUM); strncpy(kPacketDirectEnter.passwd, c_szPassword, PASS_MAX_NUM); strncpy(kPacketDirectEnter.Hwid, c_szHwid, HWID_MAX_NUM); strncpy(kPacketDirectEnter.Snn, c_szSnn, SNN_MAX_NUM); if (!Send(sizeof(kPacketDirectEnter), &kPacketDirectEnter)) { Tracen("SendDirectEnter"); return false; } return SendSequence(); }
Search this function
bool CPythonNetworkStream::SendLoginPacket(const char* c_szName, const char* c_szPassword)
and replace with this
bool CPythonNetworkStream::SendLoginPacket(const char* c_szName, const char* c_szPassword, const char* c_szHwid, const char* c_szSnn) { TPacketCGLogin LoginPacket; LoginPacket.header = HEADER_CG_LOGIN; strncpy(LoginPacket.name, c_szName, sizeof(LoginPacket.name)-1); strncpy(LoginPacket.pwd, c_szPassword, sizeof(LoginPacket.pwd)-1); strncpy(LoginPacket.Hwid, c_szHwid, sizeof(LoginPacket.Hwid)-1); strncpy(LoginPacket.Snn, c_szSnn, sizeof(LoginPacket.Snn)-1); LoginPacket.name[ID_MAX_NUM]='0'; LoginPacket.pwd[PASS_MAX_NUM]='0'; LoginPacket.Hwid[HWID_MAX_NUM]='0'; LoginPacket.Snn[SNN_MAX_NUM]='0'; if (!Send(sizeof(LoginPacket), &LoginPacket)) { Tracen("SendLogin Error"); return false; } return SendSequence(); }
Search
bool CPythonNetworkStream::SendLoginPacketNew(const char * c_szName, const char * c_szPassword)
and replace with this
bool CPythonNetworkStream::SendLoginPacketNew(const char * c_szName, const char * c_szPassword, const char * c_szHwid, const char * c_szSnn)
2-2-4)PythonNetworkStreamModule.cpp
Search this function
PyObject* netSetLoginInfo(PyObject* poSelf, PyObject* poArgs)
and replace with this
PyObject* netSetLoginInfo(PyObject* poSelf, PyObject* poArgs) { char* szName; if (!PyTuple_GetString(poArgs, 0, &szName)) return Py_BuildException(); char* szPwd; if (!PyTuple_GetString(poArgs, 1, &szPwd)) return Py_BuildException(); char* szHwid; if (!PyTuple_GetString(poArgs, 2, &szHwid)) return Py_BuildException(); char* szSnn; if (!PyTuple_GetString(poArgs, 3, &szSnn)) return Py_BuildException(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); CAccountConnector & rkAccountConnector = CAccountConnector::Instance(); rkNetStream.SetLoginInfo(szName, szPwd, szHwid, szSnn); rkAccountConnector.SetLoginInfo(szName, szPwd, szHwid, szSnn); return Py_BuildNone(); }
Search this function
PyObject* netSendLoginPacket(PyObject* poSelf, PyObject* poArgs)
and replace with this
PyObject* netSendLoginPacket(PyObject* poSelf, PyObject* poArgs) { char* szName; if (!PyTuple_GetString(poArgs, 0, &szName)) return Py_BuildException(); char* szPwd; if (!PyTuple_GetString(poArgs, 1, &szPwd)) return Py_BuildException(); char* szHwid; if (!PyTuple_GetString(poArgs, 2, &szHwid)) return Py_BuildException(); char* szSnn; if (!PyTuple_GetString(poArgs, 3, &szSnn)) return Py_BuildException(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.SendLoginPacket(szName, szPwd, szHwid, szSnn); return Py_BuildNone(); }
2-2-5)PythonNetworkStream.h
Search
void SetLoginInfo(const char* c_szID, const char* c_szPassword);
Replace with this
void SetLoginInfo(const char* c_szID, const char* c_szPassword, const char* c_szHwid, const char* c_szSnn);
Search
bool SendLoginPacket(const char * c_szName, const char * c_szPassword); bool SendLoginPacketNew(const char * c_szName, const char * c_szPassword);
Replace with this
bool SendLoginPacket(const char * c_szName, const char * c_szPassword, const char * c_szHwid, const char * c_szSnn); bool SendLoginPacketNew(const char * c_szName, const char * c_szPassword, const char * c_szHwid, const char * c_szSnn);
Search
bool SendDirectEnterPacket(const char * c_szName, const char * c_szPassword, UINT uChrSlot);
And replace with this
bool SendDirectEnterPacket(const char * c_szName, const char * c_szPassword, const char * c_szHwid, const char * c_szSnn, UINT uChrSlot);
Search
std::string m_stPassword;
Add it below
std::string m_stHwid; std::string m_stSnn;
2-2-6)PythonNetworkStream.cpp
Search this function
void CPythonNetworkStream::SetLoginInfo(const char* c_szID, const char* c_szPassword)
And replace with this
void CPythonNetworkStream::SetLoginInfo(const char* c_szID, const char* c_szPassword, const char* c_szHwid, const char* c_szSnn) { m_stID=c_szID; m_stPassword=c_szPassword; m_stHwid=c_szHwid; m_stSnn=c_szSnn; }
Now run this query commands;
ALTER TABLE account.account ADD Hwid VARCHAR(50); ALTER TABLE account.account ADD Snn VARCHAR(50);
Create tables
DROP TABLE IF EXISTS `snnban`; CREATE TABLE `snnban` ( `Snn` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS `hwidban`; CREATE TABLE `hwidban` ( `Hwid` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Basic php ban script
<?php error_reporting(0); if($_GET) { $baglanti = mysqli_connect('localhost', 'root', 'PASSWORD', 'account'); $hwid = mysqli_real_escape_string($baglanti, $_GET['hwid']); $snn = mysqli_real_escape_string($baglanti, $_GET['snn']); if(strlen($snn) == 0) { $hwid_bul = mysqli_query($baglanti, "SELECT null FROM hwidban WHERE hwid='$hwid'"); if(mysqli_num_rows($hwid_bul) > 0) echo 'BLOCK'; mysqli_free_result($hwid_bul); }else{ $snn_bul = mysqli_query($baglanti, "SELECT null FROM snnban WHERE snn='$snn'"); if(mysqli_num_rows($snn_bul) > 0) echo 'BLOCK'; mysqli_free_result($snn_bul); } mysqli_close($baglanti); } ?>
Bonus;
if you want alternative ways (mac, cpu etc.) check tutorials below
#CPU INFO: import platform platform.processor() #MAC INFO: mac = '' for line in os.popen('getmac /nh /fo CSV').readlines(): m = line.split(',')[0] dev = line.split(',')[1] if dev.find('Device') and mac == '': mac = m mac = mac.replace('"', '') #HWID INFO: *DEFAULT hwid = os.popen('wmic csproduct get uuid').read().split("n")[1] #HDD INFO: hddinfo = win32api.GetVolumeInformation("C:") #COMPUTER NAME: pcadi = os.environ['COMPUTERNAME'] #CPU NAME: cpu = os.popen('wmic cpu get name').read().split("n")[1] #MOTHERBOARD INFO: anakart = os.popen('wmic baseboard get serialnumber').read().split("n")[1] #RAM SERIAL: ram = os.popen('wmic memorychip get serialnumber').read().split("n")[2] #BIOS VERSION: biosv = os.popen('wmic bios get smbiosbiosversion').read().split("n")[1] #COMPUTER MODEL: model = os.popen('wmic csproduct get name').read().split("n")[1] #SYSTEM TYPE: systype = os.popen('wmic computersystem get systemtype').read().split("n")[1] #COMPUTER OWNER: owner = os.popen('wmic computersystem get manufacturer').read().split("n")[1] #OS NAME: osname = os.popen('wmic os get Caption,CSDVersion /value').read().split("n")[2].split("Caption=")[-1] #WINDOWS USERNAME: winusnm = os.popen('echo %username%').read().split("n")[0] #VOLUME NAME: volname = os.popen('wmic logicaldisk get volumename').read().split("n")[1] #SMART SNN: *DEFAULT smartsnn = os.popen('wmic path win32_physicalmedia get SerialNumber').read().split("n")[1] #USER SID: usersid = os.popen('wmic useraccount get name,sid').read().split("n")[2].replace(" ", " - ") #TOTAL MEMORY: ramboyut = os.popen('wmic computersystem get TotalPhysicalMemory').read().split("n")[1]
Example files:
Virustotal:
Result:
Sorry my bad english
Regards
- 34
- 2
- 1
- 1
- 1
- 8
- 3
- 62
-
Nice release ^^
--
Just a tip,
When you're posting VT links, change the language in the VT lang to English
For example, in those links it is https://virustotal.com/tr/ , if you change it to /en/ then it shows the English version.
+ Like for the release
sorry, edited
-
Hi devs,
I will give here is some enigma plugins
Wpm(Anti Write Process Memory)
https://mega.co.nz/#!VUphyBAI!L6c9IwXzyLYWJv_gqvmgulQJmAoRRiQk-7hgsGwGf4k
Rpm(Anti Read process Memory)
https://mega.co.nz/#!JRBHVJIB!9LkBLYgZuJyz6NwAIUx_N__W2ev_5wcE9-tifo4_-Co
Ail(Anti Loadlibary)
https://mega.co.nz/#!tIYnmDpa!Lu9WsY1wNWtzUn2YQ7FihXCUeEE-uaCpV-E7qWtHp_U
Regards.
- 2
- 1
- 15
-
This problem due from 2.7.6, i am using 2.7.3 and no such problem
ok now i canged all to 2.7.3 but same error
do you changed python libary(dll) ?
you mean in extern/lib ? yes i changed it there too
No,game folder library python27.dll
-
This problem due from 2.7.6, i am using 2.7.3 and no such problem
ok now i canged all to 2.7.3 but same error
do you changed python libary(dll) ?
-
This problem due from 2.7.6, i am using 2.7.3 and no such problem
-
Bans by game are bad idea. It makes too many fake results.
for that reason avarage 50 >
still you're right ban,log and notice selectable uses wanting
-
Hi devs,
I created simple wait hack detection and ban system
open "battle.cpp" and add ths include
#include "db.h"
Result;
search "bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time)"
and replace with this
#define ENABLE_SYSCHAT_NOTICE #define ENABLE_SYSLOG_NOTICE #define ENABLE_BAN_WAITHACK bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time) { if (ch->m_kAttackLog.dwVID == victim->GetVID()) { if (current_time - ch->m_kAttackLog.dwTime < GET_ATTACK_SPEED(ch)) { INCREASE_SPEED_HACK_COUNT(ch); if (test_server) { sys_log(0, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d", ch->GetName(), current_time - ch->m_kAttackLog.dwTime, GET_ATTACK_SPEED(ch), ch->m_speed_hack_count); ch->ChatPacket(CHAT_TYPE_INFO, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d", ch->GetName(), current_time - ch->m_kAttackLog.dwTime, GET_ATTACK_SPEED(ch), ch->m_speed_hack_count); } SET_ATTACK_TIME(ch, victim, current_time); SET_ATTACKED_TIME(ch, victim, current_time); return true; } } SET_ATTACK_TIME(ch, victim, current_time); if (victim->m_AttackedLog.dwPID == ch->GetPlayerID()) { if (current_time - victim->m_AttackedLog.dwAttackedTime < GET_ATTACK_SPEED(ch)) { INCREASE_SPEED_HACK_COUNT(ch); if (ch->m_speed_hack_count > 50) { #ifdef ENABLE_SYSLOG_NOTICE sys_log(0, "%s Attack Speed HACK! time (delta, limit)=(%u, %u), hack_count = %d", ch->GetName(), current_time - victim->m_AttackedLog.dwAttackedTime, GET_ATTACK_SPEED(ch), ch->m_speed_hack_count); #endif #ifdef ENABLE_SYSCHAT_NOTICE ch->ChatPacket(CHAT_TYPE_INFO, "Attack Speed Hack(%s), (delta, limit)=(%u, %u), hack_count = %d", ch->GetName(), current_time - victim->m_AttackedLog.dwAttackedTime, GET_ATTACK_SPEED(ch), ch->m_speed_hack_count); #endif #ifdef ENABLE_BAN_WAITHACK std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET status= 'BLOCK' WHERE id = %d", ch->GetDesc()->GetAccountTable().id)); #endif ch->GetDesc()->DelayedDisconnect(3); } SET_ATTACKED_TIME(ch, victim, current_time); return true; } } SET_ATTACKED_TIME(ch, victim, current_time); return false; }
Before:
https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif
https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif
After:
https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif
https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif
Final:
- 33
- 1
- 10
- 1
- 3
- 47
-
-
Anyone know how start the metin2client.exe with argumen from oficial patcher?
run_path="metin2client.exe"
Thanks.
is there any answer ?
it's good to know you are following me
Nahh, I saw your post from Latest posts
-
Anyone know how start the metin2client.exe with argumen from oficial patcher?
run_path="metin2client.exe"
Thanks.
is there any answer ?
- 2
-
-
Vanilla sell new version (with wolfman inculded)
- 1
-
-
Hello devs, I can little problem, I'm trying to make new guild war system(guild score & member limit selectable with clientside) but i don't make lua functions.
How to get guild score and member number?
-
Half-solved remaked new core
Get Python Script in WebSpace
in Features & Metin2 Systems
Posted
Hi devs, I created simple trick recently
i hope it is useful
http://www.youtube.com/watch?v=Gs3YkMtDjik
Python Script
Php Script
Example server script introLogin.py > 2e3249498981e44873308ee0e5faa752
Some useful pages:
https://www.base64decode.org/
http://www.md5.cz/
Sorry my bad english
Regads