'PACI 2,317 Posted September 7, 2013 Bem eu que pensei que a minha ultima release fosse o sistema novo dos oficiais, Dragon Soul System, mas pronto sm PC n o pude acabar :( como tinha postado isto na tech, posta-se aqui tbm. Nao tenho PC para vos ajudar. O tuto está aqui. Obrigado ao C3rberuS por ter feito upload. Boas. Já à muito tempo que tinha isto retirado do cliente do Metin2 SG e agora trago-vos um tutorial de como o colocar. Ok, precisam de ter o vosso root e locale descompactados. Agora o primeiro será descarregar isto: http://www.4shared.com/rar/EW2AK-qV/selectchannel.html que é a janela para alterar o ch. A seguir será alterar o vosso systemdialog.py do vosso locale da seguinte maneira: import uiScriptLocaleROOT = "d:/ymir work/ui/public/"window = { "name" : "SystemDialog", "style" : ("float",), "x" : (SCREEN_WIDTH - 200) /2, "y" : (SCREEN_HEIGHT - 288) /2, "width" : 200, "height" : 288, "children" : ( { "name" : "board", "type" : "thinboard", "x" : 0, "y" : 0, "width" : 200, "height" : 288, "children" : ( { "name" : "help_button", "type" : "button", "x" : 10, "y" : 17, "text" : uiScriptLocale.SYSTEM_HELP, "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", }, { "name" : "mall_button", "type" : "button", "x" : 10, "y" : 47, "text" : uiScriptLocale.SYSTEM_MALL, "text_color" : 0xffF8BF24, "default_image" : ROOT + "XLarge_Button_02.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_02.sub", }, { "name" : "system_option_button", "type" : "button", "x" : 10, "y" : 77, "text" : uiScriptLocale.SYSTEMOPTION_TITLE, "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", }, { "name" : "game_option_button", "type" : "button", "x" : 10, "y" : 107, "text" : uiScriptLocale.GAMEOPTION_TITLE, "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", }, { "name" : "change_button", "type" : "button", "x" : 10, "y" : 137, "text" : uiScriptLocale.SYSTEM_CHANGE, "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", }, { "name" : "logout_button", "type" : "button", "x" : 10, "y" : 167, "text" : uiScriptLocale.SYSTEM_LOGOUT, "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", }, { "name": "change_channel_button", "type": "button", "x": 10, "y": 197, "text": "Alterar CH", "text_color": 0xffF8BF24, "default_image": ROOT + "XLarge_Button_01.sub", "over_image": ROOT + "XLarge_Button_02.sub", "down_image": ROOT + "XLarge_Button_03.sub" }, { "name" : "exit_button", "type" : "button", "x" : 10, "y" : 227, "text" : uiScriptLocale.SYSTEM_EXIT, "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", }, { "name" : "cancel_button", "type" : "button", "x" : 10, "y" : 257, "text" : uiScriptLocale.CANCEL, "default_image" : ROOT + "XLarge_Button_01.sub", "over_image" : ROOT + "XLarge_Button_02.sub", "down_image" : ROOT + "XLarge_Button_03.sub", }, ), }, ),} Ok, até aí, facílimo. Agora abrem o uisystem.py do vosso root, y fazemos import dbg. Depois debaixo de: SYSTEM_MENU_FOR_PORTAL = FALSE colocamos: log = dbg.LogBox Agora por cima da Class SystemDialog colocamos a seguinte Class: class ExstaSelectChannel(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.channelList = None self.selectButton = None self.boardSelectChannel = None def LoadDialog(self): try: PythonScriptLoader = ui.PythonScriptLoader() PythonScriptLoader.LoadScriptFile(self, "selectchannel.py") self.boardSelectChannel = self.GetChild("ServerBoard") self.channelList = self.GetChild("ChannelList") self.selectButton = self.GetChild("SelectChannelButton") self.cancelButton = self.GetChild("CancelChannelButton") self.selectButton.SAFE_SetEvent(self.__OnClickSelectButton) self.cancelButton.SAFE_SetEvent(self.__OnClickCancelButton) self.channelList.ClearItem() try: channelDict = serverInfo.REGION_DICT[0][introLogin.SERVER]["channel"] except: log("Ocorreu um erro ao carregar o server info.") return for channelID, channelDataDict in channelDict.items(): channelName = channelDataDict["name"] channelState = channelDataDict["state"] self.channelList.InsertItem(channelID, " %s %s" % (channelName, channelState)) self.channelList.SelectItem(0) except: log("Ocorreu um erro ao carregar: SelectChannel Dialog") def __OnClickSelectButton(self): if self.channelList.GetSelectedItem() == introLogin.CHANNEL: self.Popup = uiCommon.PopupDialog() self.Popup.SetText('Já estás conectado neste CH!') self.Popup.Show() return try: channelDict = serverInfo.REGION_DICT[0][introLogin.SERVER]["channel"] except: log("RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)) log("Ocorreu um erro ao carregar o server info.") return for channelID, channelDataDict in channelDict.items(): if self.channelList.GetSelectedItem() == channelID and channelDataDict["state"] == '...': self.Popup = uiCommon.PopupDialog() self.Popup.SetText('Este CH está offline.') self.Popup.Show() return introLogin.CHANNEL = self.channelList.GetSelectedItem() introLogin.RECONNECT = 1 self.Hide() net.LogOutGame() def __OnClickCancelButton(self): self.Hide() Feito isto, na Class SystemDialog procuramos por self.GetChild("cancel_button").SAFE_SetEvent(self.Close) e por baixo colocamos: self.GetChild("change_channel_button").SAFE_SetEvent(self.ChangeChannel) E por último, debaixo do def Destroy e por cima do def SetOpenHelpWindowEvent, colamos o seguinte def: def ChangeChannel(self): self.selCh = ExstaSelectChannel() self.selCh.LoadDialog() self.selCh.Show() self.Close()Feito isto, guardamos e fechamos o nosso uisystem.py. Prosseguimos agora para a parte do intrologin.py. Uma vez aberto, fazemos 3 imports: import osimport sysimport introLoadingDebaixo do nosso último import, colocamos as seguintes globais: RECONNECT = 0CHANNEL = 0SERVER = 0LOGIN = ''PASSWORD = ''SELECTED_CHAR_INDEX = 0Feito isto, por cima do primeiro def (def Suffle), colamos o seguinte if: if (RECONNECT != 0): stream.SetLoginInfo(LOGIN, PASSWORD) stream.Connect()Ok, agora no def Open vamos procurar por self.__OpenServerBoard() e por baixo colocamos: if (RECONNECT == 1): self.channelList.SelectItem((CHANNEL - 1)) self.serverList.SelectItem(self.__ServerIDToServerIndex(0, SERVER)) introLoadingReconnect = introLoading.LoadingWindow(self.stream, 'introLoadingReconnect') introLoadingReconnect.SetTop() introLoadingReconnect.Open() self.__OnClickSelectServerButton() self.__OnClickLoginButton(LOGIN, PASSWORD) Atenção: O app.ShowCursor() deve ficar debaixo deste if. A seguir procuramos pelo def OnHandShake(self): e substituimos o if not IsLoginDelay(): por: if (RECONNECT == 0):E fazemos o mesmo com o def OnLoginStart(self): Agora substituimos todo o def Connect(self, id, pwd): pelo seguinte: def Connect(self, id, pwd): global LOGIN global PASSWORD global RECONNECT global CHANNEL global SERVER LOGIN = id PASSWORD = pwd SERVER = self._LoginWindow__GetServerID() CHANNEL = self._LoginWindow__GetChannelID() if constInfo.SEQUENCE_PACKET_ENABLE: net.SetPacketSequenceMode() if (RECONNECT == 0): self.stream.popupWindow.Close() self.stream.popupWindow.Open(locale.LOGIN_CONNETING, self.SetPasswordEditLineFocus, locale.UI_CANCEL) RECONNECT = 0 self.stream.SetLoginInfo(id, pwd) self.stream.Connect()Agora procuramos pelo def __OnClickLoginButton(self): e alteramo-lo assim: def __OnClickLoginButton(self, id = '', pwd = ''): if ((id == '') or (pwd == '')): id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() if len(id)==0: self.PopupNotifyMessage(locale.LOGIN_INPUT_ID, self.SetIDEditLineFocus) return if len(pwd)==0: self.PopupNotifyMessage(locale.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus) return self.Connect(id, pwd)E debaixo deste def, colamos o seguinte: def ReconnectFailed(self): global RECONNECT RECONNECT = 0 if self.introLoadingReconnect: self.introLoadingReconnect.Close()Fechamos e guardamos o nosso intrologin.py. Agora, por último, abrimos o nosso introloading.py e fazemos import introLogin e na Class LoadingWindow alteramos o seguinte: def __init__(self, stream):[code]por:[code]def __init__(self, stream, name='exsta'):Fechamos, guardamos e compactamos o root e o locale, colamos na nossa pasta pack e tá feito. É usado no cliente do AresM2, mas deixo imagem à mesma: 5 ShadowKnight, Henrique Oliveira, p0w3r0ff and 2 others reacted to this Share this post Link to post Share on other sites
SINVAL o.O 728 Posted September 7, 2013 Obrigado por postares. PS : quem tiver cliente do pacificador ou cliente sg e puder me passar locale e root, pois já tentei e n consigo por. Share this post Link to post Share on other sites
мαя¢σs ๖ۣۣۜDaniel 69 Posted September 7, 2013 Nem eu agradecia que postassem ca sff Share this post Link to post Share on other sites
'PACI 2,317 Posted September 8, 2013 Google: Metin2 SGE sacam o cliente lol Share this post Link to post Share on other sites
xXBoyDarkXx 328 Posted September 8, 2013 Google: Metin2 SGE sacam o cliente lol O SG Ja retirou essa opção de mudar de ch Share this post Link to post Share on other sites
'PACI 2,317 Posted September 8, 2013 Então retirei-o a boa altura huehuehuehuehue Share this post Link to post Share on other sites
SINVAL o.O 728 Posted September 8, 2013 Clientes do ares tem. Share this post Link to post Share on other sites
'PACI 2,317 Posted September 8, 2013 Isso foi o que disse no tópico lulz Share this post Link to post Share on other sites
SINVAL o.O 728 Posted September 8, 2013 Mais a do download gasta 6 horas aqui e já tentei baixar 5 vezes e a net fdm cai na metade aff. Share this post Link to post Share on other sites
Unk3n0w7 1,321 Posted September 8, 2013 Obrigada por partilhares ! Cumprimentos Share this post Link to post Share on other sites
xXBoyDarkXx 328 Posted September 8, 2013 Yaa paci tiras-te mesmo em boa altura e sinval os ficheiros .epk do cliente do ares estão virtualizados logo é impossivél Share this post Link to post Share on other sites
quenii 981 Posted September 9, 2013 Yaa paci tiras-te mesmo em boa altura e sinval os ficheiros .epk do cliente do ares estão virtualizados logo é impossivél Ctz? Descompactei só pra roubar a imagem de selececionar pers. AEHUEAUHEAHUAEHUAEHU Share this post Link to post Share on other sites
'PACI 2,317 Posted September 9, 2013 Vdd Kenny fdta. Share this post Link to post Share on other sites
Kuubi 1 Posted July 1, 2016 Os códigos a colocar ficam estranhos em note pad ++ Share this post Link to post Share on other sites