Jump to content

Tabla del Honor

Contenido popular

Showing content with the highest reputation on 06/08/20 in Mensajes

  1. Buenas shabots, hace tiempo iba a subir esta onda en VDI pero he estado ocupado xd, son los files de Arrival2 que subió @Araiguma los subo tal cual están recién instalados los .tgz no he limpiado nada ni modificado en absoluto nada salvo la cuenta para entrar y pass, prácticamente están como se subieron, el VDI es freebsd 9.3 y mysql 5.6 y esta preparado para compilar el source de Arrival2, y si desean pueden usarlo para compilar el source de akron2 y los que sean compatibles. Les dejo el post original para cualquier duda que tengan: ya que yo no soy dev de esos files, asi que no me pregunten algo relacionado a los bugs o cualquier cosa ya que desconozco los bugs que tenga xd POST ARRIVAL2 BY ARAIGUMA VDI User: root VDI Pass: delaro Juego ID: delaro Juego Pass: delaro Mysql ID: root Mysql Pass: delaro Ok una vez descargado el VDI y Cliente de Arrival2 queda iniciarlo en el virtual box, recuerden configurarlo como adaptador puente, inician y pedirá el id y el pass los cuales están arriba, una vez dentro del VDI dan el típico sysinstall y configuran su ip que vayan a usar y la segunda terminada en .100 ya saben como y si no busquen pues hay demasiados tutoriales :v El cliente es complicado si no sabes nada de nada, pero en pocas palabras, 1- en root cambias por tu ip terminada en .100 en intrologin.py, 2- despues usan el EterNexus y compilan el root, 3- después seleccionas los 2 archivos root.eix y root.epk y los arrastras sobre el archivo que dice encriptador.exe, 4- les creara el archivo root.metin2, 5- dan doble click al archivo metin2 a araiguma.bat y renombrara en automático el archivo root.metin2 a root.araiguma, 6- el archivo root.araiguma lo pasan al cliente a la carpeta pack y reemplazan por el existente y listo. Una vez todo esta configurado perfectamente antes que nada se me paso hacer GM al personaje xd asi que en navicat abren common, gmlist y en el 1 aparece jfirewall lo cambian por delaro, guardan el cambio y reinician, ahora si para iniciar el servidor el tipico cd /usr/game das enter y sh inicio.sh te dira cuantos chs iniciar, les recomiendo 1 y maximo 2 ya que el ch3 y ch4 no configure los CONFIG con el ID y PASS de mysql pero solo cámbienlos por los mismo que puse en ch1 o ch2.. para detener el servidor es sh parar.sh Links por Google Drive CLIENTE VDI SOURCE DE CLIENTE DESCOMPILADOR Prueba de que funciona bien :v FIX TRAIDOS POR @mt2arcangel SOLO HAY QUE REEMPLAZAR LOS ARCHIVOS EN ROOT. SE SUPONE REPARA EL BUG DE LA EXP DEL GREMIO. NO LO HE PROBADO YA QUE HACE TIEMPO BORRE TODO XD uiguild.py uiinventory.py uipickmoney.py
    3 puntos
  2. Hola amigos de Metin2Zone. EL dia de hoy les traigo unos files muy buenos que he estado probando y la verdad me parecen muy buenos, los files cuentan con todos los sistemas actuales del metin2 oficial. Así que sin más que decir, les dejo la descripción. Sistemas: - SwitchBoot InGame - Union al alma - Alquimia Totalmente Funcional - Atuendos actuales - Monturas Actuales - Pets (Pet de mejora + pet de ello) - Mapas del Oficial - Dungeons del oficial - Tienda Offline - Visualizaciones de tienda - Sistema de estolas -Transfiguracion - Cambio Rapido de Equipo - Moneda Gaya - Moneda Won - Sistema de Gremio (Oficial) - Cambio de Channel - Evento Okey - Eventos PvP - Sistema de Rangos - Cambio de Clima - Auto Guardar cuentas ingame - Proteccion de cuenta (al iniciar el pj se bloquea todo el teclado, no deja realizar la accion de la tecla hasta no ingresar la contraseña - 4 Inventarios - Sistema de Talismanes del Oficial Y Muchos mas sistemas que pueden ir descubriendo dia a dia -> Datos: Pass Mysql: asilzade -> Cuenta Admin InGame ID: asilzade PASS: 12345 Recomendaciones: Editar la opcion de guardado de cuentas en el cliente, pues se aloja en un archivo en la raiz del cliente. Si no se usa una proteccion adecuada para el archivo, en el momento que lo lleguen a subir a un Servidor para subirlo como suyo y sacar provecho (todos lo quieren hacer) los terceros querran este archivo para entrar y desocupar cuentas, por ello, recomiendo que le creen una extencion distinda al archivo y lo protejan, oh busquen la forma de que dicho archivo se aloje en un epk con proteccion anticompilacion... Imagenes Creditos: Metin2Web Descarga: Mega MediaFire Virus Total
    2 puntos
  3. Jaggerman

    Alas

    Encontré estas Alas y me parecieron bonitas, aquí os las dejo: Link de descarga Créditos: FreakGamer
    1 punto
  4. Hola muy buenas tardes hoy les Traigo estos files Daroo 1678 son files virgenes Tambien les dejare un cliente para que puedan usarlo el cliente es total mente virgen les pueden implementar lo que quieras ha sus gustos Claro Repito si estos files Ya estan postiado con link resubido Porfavor Borren este post Claros simpre y cuando si el otro Post original los tenga activo los links bueno en fin aqui se los dejo Link del Files http://www.mediafire.com/file/tvx11lj9dfe5zw2/Serverfiles1678-RC-B4.exe La contraseña para Descomprimir los files es germany Link Files 2089 (daroo 8.2) .tar y Cliente omega (2011) instalable por @Dilong: https://mega.nz/#F!s9pz3CbR!MVMn7dvUChrqm_ldiw6BhQ Link del cliente http://www.mediafire.com/file/yopxej88befqn8c/Metin2+by+daroo.rar Datos para Encender la maquina virtual y Navicat root daroo Para prender los files solo configuren la maquina cuando ya esta listo ponen m2 start les pedira que canal quieres encender les pones 1 y enter y listo Cliente omega Español full esta por partes el cliente http://www.mediafire.com/?gqlmf58cd6fxg Espero que os guste Credito para el Creador del los files daroo 8.2 Saludos
    1 punto
  5. Contenido del MultiHack: Level Bot Buscador de Metines Auto Ataque Hack de Damage Teleport ¡Muchas otras cosas! Vídeo de Muestra: LINKS DE DESCARGA: CLICK AQUÍ
    1 punto
  6. Dilong

    [Nuevo link]SF Akron2

    Descripcion: Link: https://mega.nz/folder/TJcBwSJR#Dt1E-aq-MWV_V0s073_f1w El cliente no está encriptado, pero si compilan el source del cliente, tendrán que cambiar las Keys para dejarlo sin encriptar
    1 punto
  7. Hello, bears. Here you have a list where you can find the entire plechito available on the internet. You don't have to search, and we provide it to prevent the sale of free items, as is the case with one of the Polish forums. free Download The list is constantly updated Premium Here
    1 punto
  8. Buenas quiero hacer un gran aporte para los que quieran empezar con el mundo de metin2 y para los que ya empezaron. veo que mucha gente busca vdi con freebsd 12.1, o vdi con freebsd 9.2,, ademas de estar listos, también se los deje con instalación FARM ( servidor web), con web instalada todo listo para descargar y montar, aparte le deje 2 clientes uno el que trabaja con del vdi freebsd 12.1 esta en español vieja escuela, y el que trabaja con el vdi freebsd 9.2 es el bestproduction V4 traducido al 30% al español, ambos clientes vienen con patchupdate listo para usar con instalador, cliente español sin patchupdate: https://onotepad.com/note/o4uxl5tn5e1/184828 cliente español con patchUpdate: http://exe.io/mt2ClienteEs_Pup vdi freebsd 12.1+ file + pagina web lista para usar: https://programas-juegos-max.blogspot.com/2020/03/metines-con-vdi-freebsd-121-vdi-freebsd.html cliente bestprodution v4 + patchUpdate: https://programas-juegos-max.blogspot.com/2020/03/metines-con-vdi-freebsd-121-vdi-freebsd.html vdi freebsd 9.2 + file +pagina web lista para usar: https://programas-juegos-max.blogspot.com/2020/03/metines-con-vdi-freebsd-121-vdi-freebsd.html Aquí están los tar.gz de los bestproduction que estaban pidiendo: mysql_max_9_2 y game_max_9_2: https://programas-juegos-max.blogspot.com/2020/03/metines-con-vdi-freebsd-121-vdi-freebsd.html Para Descomprimir: tar -xzvf mysql_max_9_2.tar.gz y despues colocan otra vez tar -xzvf game_max_9_2.tar.gz Creador de archivos para patchUpdate https://programas-juegos-max.blogspot.com/2020/03/autopatcher-profesional-metin2.html carpeta makepack esta carpeta es el contenido del cliente para poder editar el root y todo el contenido traducirlo u otros. Aqui les dejo el enlace de donde bajar el makepack, como compilarlo y corregir el error de los edificios que no se ven cambiar la carpeta root por la que esta en este enlace https://programas-juegos-max.blogspot.com/2020/04/descompilar-y-compilar-cliente-metin2.html Datos de acceso: vdi freebsd 12.1=>usuario: root clave: 0424nilmary mysql freebsd 12.1=>usuario: remoto clave: R1.mo_To vdi freebsd 9.2=>usuario: root clave: dev mysql freebsd 9.2=>usuario: root clave: /*bestproduction*/ clientes: usuario: nilsonmax clave:12345678 aunque con la pagina web pueden entrar en registrar y se crean las cuentas que deseen como les dije ya esta listo para montar. para configurar escribirme, usen noip para enlazar las ip dinamica de sus pc, y abrir los puertos y desactivar el firewall sea por antivirus y/o windows aquí les subo unas imagenes , la web, el instalador del metin, el pachtUpate, el metin y unas ventanas que tiene casi listo con todo. Este Server online Metin2Pluton traducido al 80%, ya este mes lo termino al 100%, vendo traducción interesados whatssap +573008935212 ver imágenes de la traducción al 80% https://programas-juegos-max.blogspot.com/2020/05/venta-de-metin2-bestproduction-v4.html Aprovecho de poner un enlace acá que me preguntan a cada rato que VPS les puedo recomendar, aquí les dejo el link donde les recomiendo un VPS de paga, digo que trae y porque lo prefiero y no solo para metines sino para los demas juegos online ya que trae buenas prestaciones y a muy buen precio, https://programas-juegos-max.blogspot.com/2020/07/contratar-un-buen-vps-o-servidor.html Los enlaces viejos se cayeron estas son imágenes ya mas reciente del proyecto, de las traducciones que estoy vendiendo es el mismo metin pero ya traducido al 80% no al 30% es para que vean lo que trae el metin.
    1 punto
  9. Kratosxx

    Set Armaduras

    Armadura Demoniaca 1 Armadura Demoniaca Armadura Demoniaca 3 Armadura Demoniaca 4 Peinado para sura Peinado Hindio Web Oficial
    1 punto
  10. Araiguma

    Files Arrival2

    me los vendió la rata de Jfirewall por 300 euros en su momento, como no los he podido aprovechar pues que al menos alguien los aproveche. las imagenes son echas de cuando estaba intentando hacer una ''pre presentación'' y las he cortado para que no se viera el ''Arrival2'' ya que se suponia que jfirewall no los puede vender por que el otro dueño era HR o alguien así . Imagenes: https://imgur.com/a/EKoooIn https://mega.nz/#!GowxyS6Z!xO-v-6iaF0Ia3FNYvctATeFYBkz91YxXlw1iNWgc2C8 Source_Arrival2_Final https://mega.nz/#!b94BTAIY!2z41nyoQaM6JjRLbyzzYKzU_b_1DWcdBeCYHcDO9C_w Source Cliente arrival2 https://mega.nz/#!D9hRmCJZ!pmmeSiA-3LmfyfZbd6ERDm6Xykq8bIv2kmxHH2DlRWg Files_Arrival2_Final https://mega.nz/#!KtxlhCZB!korWOnSls1Cy9DAnkPU-ubcT_fQSU9uCzOgDEVjaQmE DB_Arrival2_Final https://mega.nz/#!r4Y0wAJA!M31O_mdyxsYtMc7-nS-pZqwNjbe9b7cBqrHuEAKUpi0 Cliente https://mega.nz/#!HxZQEa7D!Q3zW54u-meoMCDjNg_bkQk5suBmpcWAR_dj14QlDFQ8 Tools https://mega.nz/#!XhghyaZL!7raZnssGRylxUW0dLBPFFTq3HCROF_NBra6XeLFO7R4 Encriptador https://mega.nz/#!zsBjTKzB!kMW5CH_nQQF1llHfpj4-0T2tuL0QxtT9FKVTYDd467w Desencriptador PD: si falta algo me lo decís y lo subo ya que he intentado hacer el post muy rapido en un día de estos posteo los del Rage también. PD: si vas a venir con idioteces pues ni te molestes ya que son files que he pagado en primer lugar y en segundo lugar la persona que me los vendió ni tenia los permisos... si tengo tiempo estos días subiré los del Rage que me vendió Jfirewall y la interfaz , login y select del Wered. BUGS QUE YO RECUERDE: La chamana Luz no cura. El Mail Box podías usarlo para Enviar objetos que ya habían sido vinculados sin tener que esperar el tiempo ni nada. Si sacas la mascota de Huevo y al mismo tiempo la intentas tirar a la basura creo que te tira el server o ya estaba fixeado no me acuerdo xd
    1 punto
  11. [Completo] DB+Cliente+Source Información del Cliente y DB > Sistema de información drop < > Sistema de hp en la barra < > Sistema de tienda offline < > Sistema de armamento < > Sistema de monturas < > Sistema de búsqueda < > Sistema de estolas < > Sistema de estolas < > 4 Inventarios < Esta limpio en el lado de búsqueda / Caída, etc... [Imágenes del cliente] Descargar Descargar Mysql limpio Mysql esta completamente limpio Contraseña: 123 Aquellos que dicen que están ocultos, los comandos abstenidos tienen la fuente y usted puede corregirlos. Resolver guerrera femenina Descargar Tienen que agregarlo a PC.eix/epk pc2/eix/epk en el pack y en index con PC/ PC pc2/ pc2 Resolver Armas Descargar Resolver lingotes que se encuentran en: usr/game/server/db item_proto.txt Búsqueda sin limite a yang Quest de estolas [FIX] Informacion del drop Descargar Agrégalo en pack de tu cliente " Tiene unos cuantos fallos que hay que solucionar pero nada de otro mundo " No se olviden de darle a "Me Gusta" "" también de "Comentar" "" y "Compartir" "" por el tiempo "Dedicado" "" a todos los "Usuarios" "" de la "Comunidad" "" ya que el tiempo es "Oro" ""
    1 punto
  12. LovePlay

    PORTFOLIO DE PAPI LOVEPLAY

    Es hora de presentar el portfolio del papi LovePlay, más conocido como LovePlay a secas. Después de estar currándomelo 30 minutos, aquí os lo dejo para que lo valoréis vosotros mismos. Ya no pondré ningún diseño de ejemplo mio por el foro, todos irán a mi portfolio, si publico algún PSD si que lo pondré aquí. PORTFOLIO DEL PAPI LOVEPLAY Si le dais clic a las imágenes, algunas tienen vídeo a cámara rápida de como he ido haciendo el diseño y información adicional. Información sobre mi en el portfolio tambien. Saludos, loveplaying its comning
    1 punto
  13. Bueno chicos os traigo este compilador / descompilador, tiene una sensilla interfaz y ala vez no hace falta hacer xml ( ya que el programa mismo no los hace) basta con poner vuestros archivos en las carpetas de los eix/epk. Descarga por MEGA(Link actualizado por @Dilong): https://mega.nz/#!loQk0Ljb!YVTayTradq7UwZDRrmr5EijAgEAURnvo1w5XZL13V8w Recomiendo actualizar las librerias c++ por si os da el error de mscore100.dll. http://www.microsoft...on.aspx?id=5555 Creditos: Luscha, Inforge.
    1 punto
  14. Bueno pues me lo pidieron y de paso os lo posteo por si a alguien le sirve. Solo tiene fixs. Esta limpio. Esto lo copiais en vuestro mainline. Trae: - Makefiles cambiados. - Version.cpp arreglado. - Fix tiempo. - Fix internal ip. - Fix sura espada. - Fix warrior. - Fix cube. Descarga: Mega
    1 punto
  15. Bueno aca os traigo 3 packs que suví yo hace tiempo a youtube. Son mios de juntar muchas imagenes u otros packs. Puede que suva algun que otro CC tambien en otro momento. No pondre enlaces de descarga ni nada, solo pondre en link de la web donde estan los enlaces, asik dejare cada pack con su enlace, pa el k kiera verlos que los vea. Y aca donde estan los enlaces de descarga. Pack1 (Mas de 1000 fuentes): http://playsuz.com/pack-1000-font-download-by-thesuzho/ Pack2 (130 Space Stock): http://playsuz.com/pack-130-space-stock-download-by-thesuzho/ Pack3 (Mas de 300 texturas): http://playsuz.com/pack-300-textures-download-by-thesuzho/ Todos en: http://playsuz.com/diseno-grafico/ Un saludo. TheSuzho.
    1 punto
  16. Con esta modificacion, se puede poner 3 tiendas en una, sin usar la quest de seleccion. Creditos: Law Descarga: http://www.mediafire.com/file/42d28bmwd0e6heg/Almacén+especial.rar
    1 punto
  17. Descarga: https://mega.nz/#!bBNgxCja!UZGem59LLqT9peaWqRP1WJ9IHDQteRUfDPPxMkJS_SU Creditos: board legend
    1 punto
  18. link linkkk http://www.mediafire.com/file/a26fgj4fwv0cjb3/Frozen+effect.rar alguno me da una guia o video como coloco bien las Alas por favor cliente 40 k ya q siempre salen blanco
    1 punto
  19. Desmint

    [SF]Astra2

    Hola amigos de Metin2Zone Les comparto estos files muy chulos que he encontrado paseando por foros, les dejo los links funcionales y completos. Locale_inc.h: Descarga: Make Pack Src Game Mysql Root Source: GitHub
    1 punto
  20. Albúm de imagenes de los serverfiles [CLIC AQUI] Para ingresar al album de imagenes. Descargas: SERVERFILES+SOURCE+BINARIO+CLIENTE DUMPROTO
    1 punto
  21. Hemos trabajado muy duro en todo lo que encuentras aquí, pero especialmente en los sitios web. Te he pedido al menos que mantengas los derechos de autor, respetando mi trabajo y darkdev. Decidí retirarme del mundo de Metin2, así que te daré algunas "cosas" en las que he estado trabajando a lo largo de los años. Incluso si hay mucho trabajo para hacer todo lo que he puesto aquí, quienquiera que logre finalizar definitivamente tendrá un servidor muy bueno. Ofrezco asistencia dentro del tiempo disponible y también admito SSL. Servidores de archivos: Cliente limpio, parches de ro + algunas cosas agregadas (no sé si todos los parches están descifrados) Error: No vaya a comprar el botón fuera de línea desde el inventario, use f5 para abrir el elemento de Panel de control , proto navatver convertir:http://www.stevecraft.cz/hracky/ip_xml_to_sql.php , desde el archivo .xml en el cliente. Quien no lo haga, usa el empaquetador / desempaquetador que puse en la carpeta al descargar. Servidor (así que tuve tiempo de corregir errores, manejar el resto) : la fuente desde la que comencé, desde 0: mainline_released clean | fuente de la papa SS del cliente : - los 4 bufandas y los efectos - los trajes del arma, los trajes se montan - el humo en los trajes - la tienda fuera de línea (el que tiene el límite yang) - Db funciona en SQL - las tasas máximas 1000 - arreglos de núcleo fijo - - corregir las bonificaciones de errores - arreglar 6/7 en trajes - reparar errores inmunes - arreglar el inventario de cambios completo - Se ha corregido la transformación de errores - speedhack detectada fijo - fijo / guerra Navicat datos: usuario: root | pw: 1234 Errores: Solo CH1 funciona correctamente, otros son enlaces simbólicos mal hechos. Las misiones son World of Rheya (totalmente sin modificar). Descargar: https://mega.nz/#F!ohMB2AjL!o58onQnBuPbs4_B8sVg4Pg
    1 punto
  22. Para ayudar a los principiantes, la textura está por su cuenta, por lo que los msm son copiados y reconstruidos a partir de lo normal, sólo modificar esa textura con la del archivo. Descarga: https://www.mediafire.com/file/hz5o74mrelupyc2/Costume YT Metin2BX.rar
    1 punto
  23. https://www.dosyaupload.com/isRZ
    1 punto
  24. Buenas como muchos sabréis hay un post de esta intro login: Ami me gusto y decidí usarla para mi Versión2 de mi servidor. Así que la traduje 100% al Español y como a muchos le gustaron y pocos saben hacerla funcionar o traducir. #A lo de traducir me refiero que en el post Original hubo mucha polémica de como se traducía o montaba la intro login. "Eso paso en Alemania." Bueno yo os daré los archivos necesarios y también un mini tuto de como hacerla funcionar. Bien lo primero que haremos será lo siguiente: Descompilar root y ir al archivo: "intrologin". Y lo remplazaremos por lo siguiente: import dbgimport appimport netimport uiimport imeimport sndimport wndMgrimport musicInfoimport serverInfoimport systemSettingimport ServerStateCheckerimport localeimport constInfoimport uiCommonimport timeimport ServerCommandParserimport imeimport uiScriptLocaleimport chatimport sysimport md5import backgroundimport osimport stringimport constinfoimport linecache########Config########DEINEIP = ""CH1PORT = CH2PORT = CH3PORT = CH4PORT = AUTHPORT = SERVERNAME = "Aeternum2"LOGINDATENSPEICHERN = 0 #0 = aus / 1 = anFORUMLINK = ""YOUTUBELINK = ""FACEBOOKLINK = ""#########################Ab hier nichts mehr ändern!######RUNUP_MATRIX_AUTH = FALSENEWCIBN_PASSPOD_AUTH = FALSELOGIN_DELAY_SEC = 0.0SKIP_LOGIN_PHASE = FALSESKIP_LOGIN_PHASE_SUPPORT_CHANNEL = FALSEFULL_BACK_IMAGE = TRUEPASSPOD_MSG_DICT = {}VIRTUAL_KEYBOARD_NUM_KEYS = 46VIRTUAL_KEYBOARD_RAND_KEY = FALSECH1STATE = 0CH2STATE = 0CH3STATE = 0CH4STATE = 0def 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 locale.IsNEWCIBN() or locale.IsCIBN10(): LOGIN_DELAY_SEC = 20.0 FULL_BACK_IMAGE = TRUE NEWCIBN_PASSPOD_AUTH = TRUE PASSPOD_MSG_DICT = { "PASERR1" : locale.LOGIN_FAILURE_PASERR1, "PASERR2" : locale.LOGIN_FAILURE_PASERR2, "PASERR3" : locale.LOGIN_FAILURE_PASERR3, "PASERR4" : locale.LOGIN_FAILURE_PASERR4, "PASERR5" : locale.LOGIN_FAILURE_PASERR5, }elif locale.IsYMIR() or locale.IsCHEONMA(): FULL_BACK_IMAGE = TRUEelif locale.IsHONGKONG(): FULL_BACK_IMAGE = TRUE RUNUP_MATRIX_AUTH = TRUE PASSPOD_MSG_DICT = { "NOTELE" : locale.LOGIN_FAILURE_NOTELEBLOCK, }elif locale.IsJAPAN(): FULL_BACK_IMAGE = TRUEdef IsFullBackImage(): global FULL_BACK_IMAGE return FULL_BACK_IMAGEdef IsLoginDelay(): global LOGIN_DELAY_SEC if LOGIN_DELAY_SEC > 0.0: return TRUE else: return FALSEdef IsRunupMatrixAuth(): global RUNUP_MATRIX_AUTH return RUNUP_MATRIX_AUTH def IsNEWCIBNPassPodAuth(): global NEWCIBN_PASSPOD_AUTH return NEWCIBN_PASSPOD_AUTHdef GetLoginDelay(): global LOGIN_DELAY_SEC return LOGIN_DELAY_SEC app.SetGuildMarkPath("test")class ConnectingDialog(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.__LoadDialog() self.eventTimeOver = lambda *arg: None self.eventExit = lambda *arg: None def __del__(self): ui.ScriptWindow.__del__(self) def __LoadDialog(self): try: PythonScriptLoader = ui.PythonScriptLoader() PythonScriptLoader.LoadScriptFile(self, "UIScript/ConnectingDialog.py") self.board = self.GetChild("board") self.message = self.GetChild("message") self.countdownMessage = self.GetChild("countdown_message") except: import exception exception.Abort("ConnectingDialog.LoadDialog.BindObject") def Open(self, waitTime): curTime = time.clock() self.endTime = curTime + waitTime self.Lock() self.SetCenterPosition() self.SetTop() self.Show() def Close(self): self.Unlock() self.Hide() def Destroy(self): self.Hide() self.ClearDictionary() def SetText(self, text): self.message.SetText(text) def SetCountDownMessage(self, waitTime): self.countdownMessage.SetText("%.0f%s" % (waitTime, locale.SECOND)) def SAFE_SetTimeOverEvent(self, event): self.eventTimeOver = ui.__mem_func__(event) def SAFE_SetExitEvent(self, event): self.eventExit = ui.__mem_func__(event) def OnUpdate(self, state): lastTime = max(0, self.endTime - time.clock()) if 0 == lastTime: self.Close() self.eventTimeOver() else: self.SetCountDownMessage(self.endTime - time.clock()) def OnPressExitKey(self): #self.eventExit() return 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 = 0 self.lastLoginTime = 0 self.inputDialog = None self.connectingDialog = None self.stream=stream self.isNowCountDown=FALSE self.isStartError=FALSE self.xServerBoard = 0 self.yServerBoard = 0 self.loadingImage = None self.virtualKeyboard = None self.virtualKeyboardMode = "ALPHABET" self.virtualKeyboardIsUpper = FALSE def __del__(self): net.ClearPhaseWindow(net.PHASE_WINDOW_LOGIN, self) net.SetAccountConnectorHandler(0) ui.ScriptWindow.__del__(self) print "---------------------------------------------------------------------------- DELETE LOGIN WINDOW" def Open(self): ServerStateChecker.Create(self) print "LOGIN WINDOW OPEN ----------------------------------------------------------------------------" self.loginFailureMsgDict={ #"DEFAULT" : locale.LOGIN_FAILURE_UNKNOWN, "ALREADY" : locale.LOGIN_FAILURE_ALREAY, "NOID" : locale.LOGIN_FAILURE_NOT_EXIST_ID, "WRONGPWD" : locale.LOGIN_FAILURE_WRONG_PASSWORD, "FULL" : locale.LOGIN_FAILURE_TOO_MANY_USER, "SHUTDOWN" : locale.LOGIN_FAILURE_SHUTDOWN, "REPAIR" : locale.LOGIN_FAILURE_REPAIR_ID, "BLOCK" : locale.LOGIN_FAILURE_BLOCK_ID, "WRONGMAT" : locale.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER, "QUIT" : locale.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, "BESAMEKEY" : locale.LOGIN_FAILURE_BE_SAME_KEY, "NOTAVAIL" : locale.LOGIN_FAILURE_NOT_AVAIL, "NOBILL" : locale.LOGIN_FAILURE_NOBILL, "BLKLOGIN" : locale.LOGIN_FAILURE_BLOCK_LOGIN, "WEBBLK" : locale.LOGIN_FAILURE_WEB_BLOCK, "HACK" : "Du wurdest wegen hacken gesperrt.", "BOT" : "Du wurdest wegen benutzung von Bots gesperrt.", "SCAM" : "Du wurdest wegen Betrug gesperrt.", "INSULT" : "Du wurdest wegen Beleidigung gesperrt.", "FAKE" : "Du wurdest aufgrund deiner Namensgebung gesperrt.", "NAME" : "Du wurdest aufgrund deiner Namensgebung gesperrt.", "BUG" : "Du wurdest wegen Bugusing gesperrt.", "DK" : "Du wurdest wegen Dauerkill gesperrt.", "OTHER" : "Du wurdest von der Serverleitung gesperrt.", } self.loginFailureFuncDict = { "WRONGPWD" : self.__DisconnectAndInputPassword, "WRONGMAT" : self.__DisconnectAndInputMatrix, "QUIT" : app.Exit, } self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight()) self.SetWindowName("LoginWindow") if not self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "LoginWindow.py"): dbg.TraceError("LoginWindow.Open - __LoadScript Error") return self.__LoadLoginInfo("loginInfo.py") if app.loggined: self.loginFailureFuncDict = { "WRONGPWD" : app.Exit, "WRONGMAT" : app.Exit, "QUIT" : app.Exit, } if musicInfo.loginMusic != "": snd.SetMusicVolume(systemSetting.GetMusicVolume()) snd.FadeInMusic("BGM/"+musicInfo.loginMusic) snd.SetSoundVolume(systemSetting.GetSoundVolume()) # pevent key "[" "]" ime.AddExceptKey(91) ime.AddExceptKey(93) self.Show() global SKIP_LOGIN_PHASE if SKIP_LOGIN_PHASE: if self.isStartError: self.connectBoard.Hide() self.loginBoard.Hide() self.serverBoard.Hide() self.PopupNotifyMessage(locale.LOGIN_CONNECT_FAILURE, self.__ExitGame) return if self.loginInfo: self.serverBoard.Hide() else: self.__RefreshServerList() self.__OpenServerBoard() else: connectingIP = self.stream.GetConnectAddr() if connectingIP: self.__OpenLoginBoard() if IsFullBackImage(): self.GetChild("demonking").Show() else: self.__RefreshServerList() self.__OpenServerBoard() app.ShowCursor() def Close(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None ServerStateChecker.Destroy(self) print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW " # # selectMusicÀÌ ¾øÀ¸¸é BGMÀÌ ²÷±â¹Ç·Î µÎ°³ ´Ù üũÇÑ´Ù. # if musicInfo.loginMusic != "" and musicInfo.selectMusic != "": snd.FadeOutMusic("BGM/"+musicInfo.loginMusic) ## NOTE : idEditLine¿Í pwdEditLineÀº À̺¥Æ®°¡ ¼­·Î ¿¬°á µÇ¾îÀ־ ## Event¸¦ °­Á¦·Î ÃʱâÈ­ ÇØÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù - [levites] self.idEditLine.SetTabEvent(0) self.idEditLine.SetReturnEvent(0) self.pwdEditLine.SetReturnEvent(0) self.pwdEditLine.SetTabEvent(0) self.connectBoard = None self.loginBoard = None self.idEditLine = None self.pwdEditLine = None self.inputDialog = None self.connectingDialog = None self.loadingImage = None self.serverBoard = None self.serverList = None self.channelList = None # RUNUP_MATRIX_AUTH self.matrixQuizBoard = None self.matrixAnswerInput = None self.matrixAnswerOK = None self.matrixAnswerCancel = None # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH self.passpodBoard = None self.passpodAnswerInput = None self.passpodAnswerOK = None self.passpodAnswerCancel = None # NEWCIBN_PASSPOD_AUTH_END self.VIRTUAL_KEY_ALPHABET_LOWERS = None self.VIRTUAL_KEY_ALPHABET_UPPERS = None self.VIRTUAL_KEY_SYMBOLS = None self.VIRTUAL_KEY_NUMBERS = None # VIRTUAL_KEYBOARD_BUG_FIX if self.virtualKeyboard: for keyIndex in xrange(0, VIRTUAL_KEYBOARD_NUM_KEYS+1): key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(None) self.virtualKeyboard = None self.KillFocus() self.Hide() self.stream.popupWindow.Close() self.loginFailureFuncDict=None ime.ClearExceptKey() app.HideCursor() def __SaveChannelInfo(self): try: file=open("channel.inf", "w") file.write("%d %d %d" % (self.__GetServerID(), self.__GetChannelID(), self.__GetRegionID())) except: print "LoginWindow.__SaveChannelInfo - SaveError" def __LoadChannelInfo(self): try: file=open("channel.inf") lines=file.readlines() if len(lines)>0: tokens=lines[0].split() selServerID=int(tokens[0]) selChannelID=int(tokens[1]) if len(tokens) == 3: regionID = int(tokens[2]) return regionID, selServerID, selChannelID except: print "LoginWindow.__LoadChannelInfo - OpenError" return -1, -1, -1 def __ExitGame(self): app.Exit() def SetIDEditLineFocus(self): if self.idEditLine != None: self.idEditLine.SetFocus() def SetPasswordEditLineFocus(self): if locale.IsEUROPE(): if self.idEditLine != None: #0000862: [M2EU] ·Î±×ÀÎâ Æ˾÷ ¿¡·¯: Á¾·á½Ã ¸ÕÀú None ¼³Á¤µÊ self.idEditLine.SetText("") self.idEditLine.SetFocus() #0000685: [M2EU] ¾ÆÀ̵ð/ºñ¹Ð¹øÈ£ À¯Ãß °¡´É ¹ö±× ¼öÁ¤: ¹«Á¶°Ç ¾ÆÀ̵ð·Î Æ÷Ä¿½º°¡ °¡°Ô ¸¸µç´Ù if self.pwdEditLine != None: #0000862: [M2EU] ·Î±×ÀÎâ Æ˾÷ ¿¡·¯: Á¾·á½Ã ¸ÕÀú None ¼³Á¤µÊ self.pwdEditLine.SetText("") else: if self.pwdEditLine != None: self.pwdEditLine.SetFocus() def OnEndCountDown(self): self.isNowCountDown = FALSE self.OnConnectFailure() def OnConnectFailure(self): if self.isNowCountDown: return snd.PlaySound("sound/ui/loginfail.wav") if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None if app.loggined: self.PopupNotifyMessage(locale.LOGIN_CONNECT_FAILURE, self.__ExitGame) else: self.PopupNotifyMessage(locale.LOGIN_CONNECT_FAILURE, self.SetPasswordEditLineFocus) def OnHandShake(self): if not IsLoginDelay(): snd.PlaySound("sound/ui/loginok.wav") self.PopupDisplayMessage(locale.LOGIN_CONNECT_SUCCESS) def OnLoginStart(self): if not IsLoginDelay(): self.PopupDisplayMessage(locale.LOGIN_PROCESSING) def OnLoginFailure(self, error): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None try: loginFailureMsg = self.loginFailureMsgDict[error] except KeyError: if PASSPOD_MSG_DICT: try: loginFailureMsg = PASSPOD_MSG_DICT[error] except KeyError: loginFailureMsg = locale.LOGIN_FAILURE_UNKNOWN + error else: loginFailureMsg = locale.LOGIN_FAILURE_UNKNOWN + error #0000685: [M2EU] ¾ÆÀ̵ð/ºñ¹Ð¹øÈ£ À¯Ãß °¡´É ¹ö±× ¼öÁ¤: ¹«Á¶°Ç Æнº¿öµå·Î Æ÷Ä¿½º°¡ °¡°Ô ¸¸µç´Ù loginFailureFunc=self.loginFailureFuncDict.get(error, self.SetPasswordEditLineFocus) if app.loggined: self.PopupNotifyMessage(loginFailureMsg, self.__ExitGame) else: self.PopupNotifyMessage(loginFailureMsg, loginFailureFunc) snd.PlaySound("sound/ui/loginfail.wav") def __DisconnectAndInputID(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.SetIDEditLineFocus() net.Disconnect() def __DisconnectAndInputPassword(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.SetPasswordEditLineFocus() net.Disconnect() def __DisconnectAndInputMatrix(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.stream.popupWindow.Close() self.matrixInputChanceCount -= 1 if self.matrixInputChanceCount <= 0: self.__OnCloseInputDialog() elif self.inputDialog: self.inputDialog.Show() def __LoadScript(self, fileName): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, fileName) except: import exception exception.Abort("LoginWindow.__LoadScript.LoadObject") try: GetObject=self.GetChild self.serverBoard = GetObject("ServerBoard") self.serverList = GetObject("ServerList") self.channelList = GetObject("ChannelList") self.connectBoard = GetObject("ConnectBoard") self.loginBoard = GetObject("LoginBoard") self.idEditLine = GetObject("ID_EditLine") self.pwdEditLine = GetObject("Password_EditLine") self.ch1_offline_demon = GetObject("Channel1_offline_demon") self.ch2_offline_demon = GetObject("Channel2_offline_demon") self.ch3_offline_demon = GetObject("Channel3_offline_demon") self.ch4_offline_demon = GetObject("Channel4_offline_demon") self.ch1_online_demon = GetObject("Channel1_online_demon") self.ch2_online_demon = GetObject("Channel2_online_demon") self.ch3_online_demon = GetObject("Channel3_online_demon") self.ch4_online_demon = GetObject("Channel4_online_demon") self.ch1_online_markiert_demon = GetObject("Channel1_online_markiert_demon") self.ch2_online_markiert_demon = GetObject("Channel2_online_markiert_demon") self.ch3_online_markiert_demon = GetObject("Channel3_online_markiert_demon") self.ch4_online_markiert_demon = GetObject("Channel4_online_markiert_demon") self.ch1_offline_markiert_demon = GetObject("Channel1_offline_markiert_demon") self.ch2_offline_markiert_demon = GetObject("Channel2_offline_markiert_demon") self.ch3_offline_markiert_demon = GetObject("Channel3_offline_markiert_demon") self.ch4_offline_markiert_demon = GetObject("Channel4_offline_markiert_demon") self.loginButton = GetObject("LoginButton") self.forum = GetObject("forum") self.youtube = GetObject("youtube") self.facebook = GetObject("facebook") self.oben_links = GetObject("oben_links") self.idEditLine.SetFontColor(71, 96, 144) self.pwdEditLine.SetFontColor(71, 96, 144) ## ACCMANAGER self.endles = GetObject("endles") # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard = GetObject("RunupMatrixQuizBoard") self.matrixAnswerInput = GetObject("RunupMatrixAnswerInput") self.matrixAnswerOK = GetObject("RunupMatrixAnswerOK") self.matrixAnswerCancel = GetObject("RunupMatrixAnswerCancel") # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard = GetObject("NEWCIBN_PASSPOD_BOARD") self.passpodAnswerInput = GetObject("NEWCIBN_PASSPOD_INPUT") self.passpodAnswerOK = GetObject("NEWCIBN_PASSPOD_OK") self.passpodAnswerCancel= GetObject("NEWCIBN_PASSPOD_CANCEL") # NEWCIBN_PASSPOD_AUTH_END self.virtualKeyboard = self.GetChild2("VirtualKeyboard") if self.virtualKeyboard: self.VIRTUAL_KEY_ALPHABET_UPPERS = Suffle(locale.VIRTUAL_KEY_ALPHABET_UPPERS) self.VIRTUAL_KEY_ALPHABET_LOWERS = "".join([locale.VIRTUAL_KEY_ALPHABET_LOWERS[locale.VIRTUAL_KEY_ALPHABET_UPPERS.index(e)] for e in self.VIRTUAL_KEY_ALPHABET_UPPERS]) self.VIRTUAL_KEY_SYMBOLS = Suffle(locale.VIRTUAL_KEY_SYMBOLS) self.VIRTUAL_KEY_NUMBERS = Suffle(locale.VIRTUAL_KEY_NUMBERS) self.__VirtualKeyboard_SetAlphabetMode() except: import exception exception.Abort("LoginWindow.__LoadScript.BindObject") self.serverBoard.OnKeyUp = ui.__mem_func__(self.__ServerBoard_OnKeyUp) self.xServerBoard, self.yServerBoard = self.serverBoard.GetLocalPosition() self.loginButton.SetEvent(ui.__mem_func__(self.__OnClickLoginButton)) self.forum.SetEvent(ui.__mem_func__(self.__forum)) self.youtube.SetEvent(ui.__mem_func__(self.__youtube)) self.facebook.SetEvent(ui.__mem_func__(self.__facebook)) ## ACCMANAGER self.endles.SetEvent(self.__OnClickExitButton) ## END ACCMANAGER self.serverList.SetEvent(ui.__mem_func__(self.__OnSelectServer)) self.idEditLine.SetReturnEvent(ui.__mem_func__(self.pwdEditLine.SetFocus)) self.idEditLine.SetTabEvent(ui.__mem_func__(self.pwdEditLine.SetFocus)) self.pwdEditLine.SetReturnEvent(ui.__mem_func__(self.__OnClickLoginButton)) self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus)) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixAnswerOK.SAFE_SetEvent(self.__OnClickMatrixAnswerOK) self.matrixAnswerCancel.SAFE_SetEvent(self.__OnClickMatrixAnswerCancel) self.matrixAnswerInput.SAFE_SetReturnEvent(self.__OnClickMatrixAnswerOK) # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodAnswerOK.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerOK) self.passpodAnswerCancel.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerCancel) self.passpodAnswerInput.SAFE_SetReturnEvent(self.__OnClickNEWCIBNPasspodAnswerOK) # NEWCIBN_PASSPOD_AUTH_END if IsFullBackImage(): self.GetChild("demonking").Show() return 1 def __VirtualKeyboard_SetKeys(self, keyCodes): uiDefFontBackup = locale.UI_DEF_FONT locale.UI_DEF_FONT = locale.UI_DEF_FONT_LARGE keyIndex = 1 for keyCode in keyCodes: key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(lambda x=keyCode: self.__VirtualKeyboard_PressKey(x)) key.SetText(keyCode) key.ButtonText.SetFontColor(1, 1, 1) keyIndex += 1 for keyIndex in xrange(keyIndex, VIRTUAL_KEYBOARD_NUM_KEYS+1): key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(lambda x=' ': self.__VirtualKeyboard_PressKey(x)) key.SetText(' ') locale.UI_DEF_FONT = uiDefFontBackup def __VirtualKeyboard_PressKey(self, code): ime.PasteString(code) #if self.virtualKeyboardMode == "ALPHABET" and self.virtualKeyboardIsUpper: # self.__VirtualKeyboard_SetLowerMode() def __VirtualKeyboard_PressBackspace(self): ime.PasteBackspace() def __VirtualKeyboard_PressReturn(self): ime.PasteReturn() def __VirtualKeyboard_SetUpperMode(self): self.virtualKeyboardIsUpper = TRUE if self.virtualKeyboardMode == "ALPHABET": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_UPPERS) elif self.virtualKeyboardMode == "NUMBER": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) else: self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) def __VirtualKeyboard_SetLowerMode(self): self.virtualKeyboardIsUpper = FALSE if self.virtualKeyboardMode == "ALPHABET": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS) elif self.virtualKeyboardMode == "NUMBER": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) else: self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) def __VirtualKeyboard_SetAlphabetMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "ALPHABET" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS) def __VirtualKeyboard_SetNumberMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "NUMBER" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) def __VirtualKeyboard_SetSymbolMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "SYMBOL" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) def Connect(self, id, pwd): if constInfo.SEQUENCE_PACKET_ENABLE: net.SetPacketSequenceMode() if IsLoginDelay(): loginDelay = GetLoginDelay() self.connectingDialog = ConnectingDialog() self.connectingDialog.Open(loginDelay) self.connectingDialog.SAFE_SetTimeOverEvent(self.OnEndCountDown) self.connectingDialog.SAFE_SetExitEvent(self.OnPressExitKey) self.isNowCountDown = TRUE else: self.stream.popupWindow.Close() self.stream.popupWindow.Open(locale.LOGIN_CONNETING, self.SetPasswordEditLineFocus, locale.UI_CANCEL) self.stream.SetLoginInfo(id, pwd) self.stream.Connect() def __OnClickExitButton(self): self.stream.SetPhaseWindow(0) def __SetServerInfo(self, name): net.SetServerInfo(name.strip()) self.serverInfo.SetText(name) def __LoadLoginInfo(self, loginInfoFileName): try: loginInfo={} execfile(loginInfoFileName, loginInfo) except IOError: print( "ÀÚµ¿ ·Î±×ÀÎÀ» ÇϽ÷Á¸é" + loginInfoFileName + "ÆÄÀÏÀ» ÀÛ¼ºÇØÁÖ¼¼¿än" "n" "³»¿ë:n" "================================================================n" "addr=ÁÖ¼Òn" "port=Æ÷Æ®n" "id=¾ÆÀ̵ðn" "pwd=ºñ¹Ð¹øÈ£n" "slot=ij¸¯ÅÍ ¼±Åà À妽º (¾ø°Å³ª -1À̸é ÀÚµ¿ ¼±Åà ¾ÈÇÔ)n" "autoLogin=ÀÚµ¿ Á¢¼Ó ¿©ºÎn" "autoSelect=ÀÚµ¿ Á¢¼Ó ¿©ºÎn" "locale=(ymir) LC_Ymir ÀÏ°æ¿ì ymir·Î ÀÛµ¿. ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é korea·Î ÀÛµ¿n" ); id=loginInfo.get("id", "") pwd=loginInfo.get("pwd", "") if self.IS_TEST: try: addr=loginInfo["addr"] port=loginInfo["port"] account_addr=addr account_port=port net.SetMarkServer(addr, port) self.__SetServerInfo(locale.CHANNEL_TEST_SERVER_ADDR % (addr, port)) except: try: addr=serverInfo.TESTADDR["ip"] port=serverInfo.TESTADDR["tcp_port"] net.SetMarkServer(addr, port) self.__SetServerInfo(locale.CHANNEL_TEST_SERVER) except: import exception exception.Abort("LoginWindow.__LoadLoginInfo - Å×½ºÆ®¼­¹ö ÁÖ¼Ò°¡ ¾ø½À´Ï´Ù") else: addr=loginInfo.get("addr", "") port=loginInfo.get("port", 0) account_addr=loginInfo.get("account_addr", addr) account_port=loginInfo.get("account_port", port) locale = loginInfo.get("locale", "") if addr and port: net.SetMarkServer(addr, port) if locale == "ymir" : net.SetServerInfo("õ¸¶ ¼­¹ö") self.serverInfo.SetText("Y:"+addr+":"+str(port)) else: net.SetServerInfo(addr+":"+str(port)) self.serverInfo.SetText("K:"+addr+":"+str(port)) slot=loginInfo.get("slot", 0) isAutoLogin=loginInfo.get("auto", 0) isAutoLogin=loginInfo.get("autoLogin", 0) isAutoSelect=loginInfo.get("autoSelect", 0) self.stream.SetCharacterSlot(slot) self.stream.SetConnectInfo(addr, port, account_addr, account_port) self.stream.isAutoLogin=isAutoLogin self.stream.isAutoSelect=isAutoSelect self.id = None self.pwd = None self.loginnedServer = None self.loginnedChannel = None app.loggined = FALSE self.loginInfo = loginInfo if self.id and self.pwd: app.loggined = TRUE if isAutoLogin: self.Connect(id, pwd) print "==================================================================================" print "ÀÚµ¿ ·Î±×ÀÎ: %s - %s:%d %s" % (loginInfoFileName, addr, port, id) print "==================================================================================" def PopupDisplayMessage(self, msg): self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg) def PopupNotifyMessage(self, msg, func=0): if not func: func=self.EmptyFunc self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg, func, locale.UI_OK) # RUNUP_MATRIX_AUTH def BINARY_OnRunupMatrixQuiz(self, quiz): if not IsRunupMatrixAuth(): return id = self.GetChild("RunupMatrixID") id.SetText(self.idEditLine.GetText()) code = self.GetChild("RunupMatrixCode") code.SetText("".join(["[%c,%c]" % (quiz[i], quiz[i+1]) for i in xrange(0, len(quiz), 2)])) self.stream.popupWindow.Close() self.serverBoard.Hide() self.connectBoard.Hide() self.loginBoard.Hide() self.matrixQuizBoard.Show() self.matrixAnswerInput.SetFocus() def __OnClickMatrixAnswerOK(self): answer = self.matrixAnswerInput.GetText() print "matrix_quiz.ok" net.SendRunupMatrixCardPacket(answer) self.matrixQuizBoard.Hide() self.stream.popupWindow.Close() self.stream.popupWindow.Open("WAITING FOR MATRIX AUTHENTICATION", self.__OnClickMatrixAnswerCancel, locale.UI_CANCEL) def __OnClickMatrixAnswerCancel(self): print "matrix_quiz.cancel" if self.matrixQuizBoard: self.matrixQuizBoard.Hide() if self.connectBoard: self.connectBoard.Show() if self.loginBoard: self.loginBoard.Show() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH def BINARY_OnNEWCIBNPasspodRequest(self): if not IsNEWCIBNPassPodAuth(): return if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.stream.popupWindow.Close() self.serverBoard.Hide() self.connectBoard.Hide() self.loginBoard.Hide() self.passpodBoard.Show() self.passpodAnswerInput.SetFocus() def BINARY_OnNEWCIBNPasspodFailure(self): if not IsNEWCIBNPassPodAuth(): return def __OnClickNEWCIBNPasspodAnswerOK(self): answer = self.passpodAnswerInput.GetText() print "passpod.ok" net.SendNEWCIBNPasspodAnswerPacket(answer) self.passpodAnswerInput.SetText("") self.passpodBoard.Hide() self.stream.popupWindow.Close() self.stream.popupWindow.Open(locale.WAIT_FOR_PASSPOD, self.__OnClickNEWCIBNPasspodAnswerCancel, locale.UI_CANCEL) def __OnClickNEWCIBNPasspodAnswerCancel(self): print "passpod.cancel" if self.passpodBoard: self.passpodBoard.Hide() if self.connectBoard: self.connectBoard.Show() if self.loginBoard: self.loginBoard.Show() # NEWCIBN_PASSPOD_AUTH_END def OnMatrixCard(self, row1, row2, row3, row4, col1, col2, col3, col4): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.matrixInputChanceCount = 3 self.stream.popupWindow.Close() # CHINA_MATRIX_CARD_BUG_FIX ## A~Z ±îÁö 26 À̳»ÀÇ °ªÀÌ µé¾îÀÖ¾î¾ß¸¸ ÇÑ´Ù. ## Python Exception Log ¿¡¼­ ±× ÀÌ»óÀÇ °ªÀÌ µé¾îÀ־ ¿¡·¯ ¹æÁö ## Çåµ¥ ¿Ö Çѱ¹ÂÊ ·Î±×¿¡¼­ ÀÌ°Ô È°¿ëµÇ´ÂÁö´Â ¸ð¸£°ÚÀ½ row1 = min(30, row1) row2 = min(30, row2) row3 = min(30, row3) row4 = min(30, row4) # END_OF_CHINA_MATRIX_CARD_BUG_FIX row1 = chr(row1 + ord('A')) row2 = chr(row2 + ord('A')) row3 = chr(row3 + ord('A')) row4 = chr(row4 + ord('A')) col1 = col1 + 1 col2 = col2 + 1 col3 = col3 + 1 col4 = col4 + 1 inputDialog = uiCommon.InputDialogWithDescription2() inputDialog.SetMaxLength(8) inputDialog.SetAcceptEvent(ui.__mem_func__(self.__OnAcceptMatrixCardData)) inputDialog.SetCancelEvent(ui.__mem_func__(self.__OnCancelMatrixCardData)) inputDialog.SetTitle(locale.INPUT_MATRIX_CARD_TITLE) inputDialog.SetDescription1(locale.INPUT_MATRIX_CARD_NUMBER) inputDialog.SetDescription2("%c%d %c%d %c%d %c%d" % (row1, col1, row2, col2, row3, col3, row4, col4)) inputDialog.Open() self.inputDialog = inputDialog def __OnAcceptMatrixCardData(self): text = self.inputDialog.GetText() net.SendChinaMatrixCardPacket(text) if self.inputDialog: self.inputDialog.Hide() self.PopupNotifyMessage(locale.LOGIN_PROCESSING) return TRUE def __OnCancelMatrixCardData(self): self.SetPasswordEditLineFocus() self.__OnCloseInputDialog() self.__DisconnectAndInputPassword() return TRUE def __OnCloseInputDialog(self): if self.inputDialog: self.inputDialog.Close() self.inputDialog = None return TRUE def OnPressExitKey(self): self.stream.popupWindow.Close() self.stream.SetPhaseWindow(0) return TRUE def OnExit(self): self.stream.popupWindow.Close() self.stream.popupWindow.Open(locale.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, app.Exit, locale.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): self.ch1_offline_markiert_demon.Hide() self.ch2_offline_markiert_demon.Hide() self.ch3_offline_markiert_demon.Hide() self.ch4_offline_markiert_demon.Hide() self.ch1_online_markiert_demon.Hide() self.ch2_online_markiert_demon.Hide() self.ch3_online_markiert_demon.Hide() self.ch4_online_markiert_demon.Hide() self.ch3_online_demon.Hide() #Auskommentieren wenn ihr CH3+4 habt self.ch4_online_demon.Hide() #Auskommentieren wenn ihr CH3+4 habt global DEINEIP global CH1PORT global AUTHPORT global CH2PORT global SERVERNAME global CH3PORT global CH4PORT global CH1STATE global CH2STATE global CH3STATE global CH4STATE global LOGINDATENSPEICHERN if LOGINDATENSPEICHERN==1: login = linecache.getline("pack/loginsetting", 1) password = linecache.getline("pack/loginsetting", 2) self.idEditLine.SetText(login) self.pwdEditLine.SetText(password) id = self.idEditLine.GetText() id = id.replace('n', '') self.idEditLine.SetText(id) self.ch1_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon)) self.ch2_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon)) self.ch3_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon)) self.ch4_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon)) self.ch1_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon)) self.ch2_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon)) self.ch3_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon)) self.ch4_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon)) self.ch1_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon)) self.ch2_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon)) self.ch3_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon)) self.ch4_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon)) self.ch1_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon)) self.ch2_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon)) self.ch3_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon)) self.ch4_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon)) print "XMAS_SNOW ON" background.EnableSnow(1) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard.Hide() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard.Hide() # NEWCIBN_PASSPOD_AUTH_END self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight()) self.serverBoard.Hide() if self.virtualKeyboard: self.virtualKeyboard.Show() self.__LoadACCNames() if app.loggined: self.Connect(self.id, self.pwd) self.connectBoard.Hide() self.loginBoard.Hide() elif not self.stream.isAutoLogin: self.connectBoard.Show() self.loginBoard.Show() ## if users have the login infomation, then don't initialize.2005.9 haho if self.idEditLine == None: self.idEditLine.SetText("") if self.pwdEditLine == None: self.pwdEditLine.SetText("") self.idEditLine.SetFocus() ##Statecheck import socket, os ip = DEINEIP s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #s3 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Einkommentieren wenn CH 3 + 4 #s4 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Einkommentieren wenn CH 3 + 4 #Channel1 try: s.connect((ip,CH1PORT)) s.close() self.ch1_offline_demon.Hide() self.ch1_online_demon.Show() CH1STATE = 1 except: self.ch1_online_demon.Hide() CH1STATE = 0 s.close() #Channel2 try: s2.connect((ip,CH2PORT)) s2.close() CH2STATE = 1 self.ch2_offline_demon.Hide() self.ch2_online_demon.Show() except: self.ch2_online_demon.Hide() CH2STATE = 0 s2.close() ####Channel3 Einkommentieren wenn CH 3 + 4 #try: # s3.connect((ip,CH3PORT)) # s3.close() # CH3STATE = 1 # self.ch3_offline_demon.Hide() # self.ch3_online_demon.Show() #except: # self.ch3_online_demon.Hide() # CH3STATE = 0 # ###Channel4 #try: # s4.connect((ip,CH4PORT)) # s4.close() # CH4STATE = 1 # self.ch4_offline_demon.Hide() # self.ch4_online_demon.Show() #except: # self.ch4_online_demon.Hide() # CH4STATE = 0 self.stream.SetConnectInfo(DEINEIP, CH1PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 1") net.SetMarkServer(DEINEIP, CH1PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH1STATE: self.ch1_online_demon.Hide() self.ch1_online_markiert_demon.Show() else: self.ch1_offline_demon.Hide() self.ch1_offline_markiert_demon.Show() if CH2STATE: self.ch2_online_demon.Show() self.ch2_online_markiert_demon.Hide() else: self.ch2_offline_demon.Show() self.ch2_offline_markiert_demon.Hide() if CH3STATE: self.ch3_online_demon.Show() self.ch3_online_markiert_demon.Hide() else: self.ch3_offline_demon.Show() self.ch3_offline_markiert_demon.Hide() if CH4STATE: self.ch4_online_demon.Show() self.ch4_online_markiert_demon.Hide() else: self.ch4_offline_demon.Show() self.ch4_offline_markiert_demon.Hide() global SKIP_LOGIN_PHASE if SKIP_LOGIN_PHASE: if not self.loginInfo: self.connectBoard.Hide() def __OpenLoginBoard(self): print "XMAS_SNOW ON" background.EnableSnow(1) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard.Hide() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard.Hide() # NEWCIBN_PASSPOD_AUTH_END self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight()) self.serverBoard.Hide() if self.virtualKeyboard: self.virtualKeyboard.Show() self.__LoadACCNames() if app.loggined: self.Connect(self.id, self.pwd) self.connectBoard.Hide() self.loginBoard.Hide() elif not self.stream.isAutoLogin: self.connectBoard.Show() self.loginBoard.Show() ## if users have the login infomation, then don't initialize.2005.9 haho if self.idEditLine == None: self.idEditLine.SetText("") if self.pwdEditLine == None: self.pwdEditLine.SetText("") self.idEditLine.SetFocus() global SKIP_LOGIN_PHASE if SKIP_LOGIN_PHASE: if not self.loginInfo: self.connectBoard.Hide() def __OnSelectRegionGroup(self): self.__RefreshServerList() def __OnSelectSettlementArea(self): # SEVER_LIST_BUG_FIX regionID = self.__GetRegionID() serverID = self.serverListOnRegionBoard.GetSelectedItem() serverIndex = self.__ServerIDToServerIndex(regionID, serverID) self.serverList.SelectItem(serverIndex) # END_OF_SEVER_LIST_BUG_FIX self.__OnSelectServer() def __RefreshServerList(self): regionID = self.__GetRegionID() if not serverInfo.REGION_DICT.has_key(regionID): return self.serverList.ClearItem() regionDict = serverInfo.REGION_DICT[regionID] # SEVER_LIST_BUG_FIX visible_index = 1 for id, regionDataDict in regionDict.items(): name = regionDataDict.get("name", "noname") if locale.IsBRAZIL() or locale.IsCANADA(): self.serverList.InsertItem(id, "%s" % (name)) else: if locale.IsCIBN10(): if name[0] == "#": self.serverList.InsertItem(-1, " %s" % (name[1:])) else: self.serverList.InsertItem(id, " %s" % (name)) visible_index += 1 else: self.serverList.InsertItem(id, " %02d. %s" % (visible_index, name)) visible_index += 1 # END_OF_SEVER_LIST_BUG_FIX def __OnSelectServer(self): self.__OnCloseInputDialog() self.__RequestServerStateList() self.__RefreshServerStateList() def __RequestServerStateList(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() try: channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"] except: print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID) return for id, channelDataDict in channelDict.items(): key=channelDataDict["key"] ip=channelDataDict["ip"] udp_port=channelDataDict["udp_port"] ServerStateChecker.Request(key, ip, udp_port) def __RefreshServerStateList(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() bakChannelID = self.channelList.GetSelectedItem() self.channelList.ClearItem() try: channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"] except: print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID) return for channelID, channelDataDict in channelDict.items(): channelName = channelDataDict["name"] channelState = channelDataDict["state"] self.channelList.InsertItem(channelID, " %s %s" % (channelName, channelState)) self.channelList.SelectItem(bakChannelID-1) def __GetChannelName(self, regionID, selServerID, selChannelID): try: return serverInfo.REGION_DICT[regionID][selServerID]["channel"][selChannelID]["name"] except KeyError: if 9==selChannelID: return locale.CHANNEL_PVP else: return locale.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(locale.CHANNEL_NOT_FIND_INFO) def __OnClickExitServerButton(self): print "exit server" self.__OpenLoginBoard() if IsFullBackImage(): self.GetChild("demonking").Show() def __OnClickSelectRegionButton(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() if (not serverInfo.REGION_DICT.has_key(regionID)): self.PopupNotifyMessage(locale.CHANNEL_SELECT_REGION) return if (not serverInfo.REGION_DICT[regionID].has_key(serverID)): self.PopupNotifyMessage(locale.CHANNEL_SELECT_SERVER) return self.__SaveChannelInfo() self.__RefreshServerList() self.__OpenServerBoard() def __OnClickch1_demon(self): global DEINEIP global CH1PORT global AUTHPORT global SERVERNAME self.stream.SetConnectInfo(DEINEIP, CH1PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 1") net.SetMarkServer(DEINEIP, CH1PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH1STATE: self.ch1_online_demon.Hide() self.ch1_online_markiert_demon.Show() else: self.ch1_offline_demon.Hide() self.ch1_offline_markiert_demon.Show() if CH2STATE: self.ch2_online_demon.Show() self.ch2_online_markiert_demon.Hide() else: self.ch2_offline_demon.Show() self.ch2_offline_markiert_demon.Hide() if CH3STATE: self.ch3_online_demon.Show() self.ch3_online_markiert_demon.Hide() else: self.ch3_offline_demon.Show() self.ch3_offline_markiert_demon.Hide() if CH4STATE: self.ch4_online_demon.Show() self.ch4_online_markiert_demon.Hide() else: self.ch4_offline_demon.Show() self.ch4_offline_markiert_demon.Hide() def __OnClickch2_demon(self): global DEINEIP global CH2PORT global AUTHPORT global SERVERNAME self.stream.SetConnectInfo(DEINEIP, CH2PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 2") net.SetMarkServer(DEINEIP, CH2PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH2STATE: self.ch2_online_demon.Hide() self.ch2_online_markiert_demon.Show() else: self.ch2_offline_demon.Hide() self.ch2_offline_markiert_demon.Show() if CH1STATE: self.ch1_online_demon.Show() self.ch1_online_markiert_demon.Hide() else: self.ch1_offline_demon.Show() self.ch1_offline_markiert_demon.Hide() if CH3STATE: self.ch3_online_demon.Show() self.ch3_online_markiert_demon.Hide() else: self.ch3_offline_demon.Show() self.ch3_offline_markiert_demon.Hide() if CH4STATE: self.ch4_online_demon.Show() self.ch4_online_markiert_demon.Hide() else: self.ch4_offline_demon.Show() self.ch4_offline_markiert_demon.Hide() def __OnClickch3_demon(self): global DEINEIP global CH3PORT global AUTHPORT global SERVERNAME self.stream.SetConnectInfo(DEINEIP, CH3PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 3") net.SetMarkServer(DEINEIP, CH3PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH3STATE: self.ch3_online_demon.Hide() self.ch3_online_markiert_demon.Show() else: self.ch3_offline_demon.Hide() self.ch3_offline_markiert_demon.Show() if CH2STATE: self.ch2_online_demon.Show() self.ch2_online_markiert_demon.Hide() else: self.ch2_offline_demon.Show() self.ch2_offline_markiert_demon.Hide() if CH1STATE: self.ch1_online_demon.Show() self.ch1_online_markiert_demon.Hide() else: self.ch1_offline_demon.Show() self.ch1_offline_markiert_demon.Hide() if CH4STATE: self.ch4_online_demon.Show() self.ch4_online_markiert_demon.Hide() else: self.ch4_offline_demon.Show() self.ch4_offline_markiert_demon.Hide() def __OnClickch4_demon(self): global DEINEIP global CH4PORT global AUTHPORT global SERVERNAME self.stream.SetConnectInfo(DEINEIP, CH4PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 4") net.SetMarkServer(DEINEIP, CH4PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH4STATE: self.ch4_online_demon.Hide() self.ch4_online_markiert_demon.Show() else: self.ch4_offline_demon.Hide() self.ch4_offline_markiert_demon.Show() if CH2STATE: self.ch2_online_demon.Show() self.ch2_online_markiert_demon.Hide() else: self.ch2_offline_demon.Show() self.ch2_offline_markiert_demon.Hide() if CH3STATE: self.ch3_online_demon.Show() self.ch3_online_markiert_demon.Hide() else: self.ch3_offline_demon.Show() self.ch3_offline_markiert_demon.Hide() if CH1STATE: self.ch1_online_demon.Show() self.ch1_online_markiert_demon.Hide() else: self.ch1_offline_demon.Show() self.ch1_offline_markiert_demon.Hide() def __forum(self): global FORUMLINK os.system("start " + FORUMLINK) def __youtube(self): global YOUTUBELINK os.system("start " + YOUTUBELINK) def __facebook(self): global FACEBOOKLINK os.system("start " + FACEBOOKLINK) def __OnClickLoginButton(self): id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() if len(id)==0: self.PopupNotifyMessage(locale.LOGIN_INPUT_ID, self.SetIDEditLineFocus) return if len(pwd)==0: self.PopupNotifyMessage(locale.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus) return if LOGINDATENSPEICHERN==1: id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() f = open("packloginsetting", "w") f.write (id + "n" + pwd) f.close() self.Connect(id, pwd) Bien abra que editar un par de cosas para que nos funcione correctamente. Lo primero será editar la "DEINEIP" que será poner nuestra ip. Ejemplo: 255.25.25.25 Lo segundo será editar los "CH1PORT - CH2PORT - CH3PORT - CH4PORT" Para conseguir los CH Port tendremos que ir al FTP y ir a Channel 1 y abrimos el Config y hay pondrá "Port: " y ese será el CH1Port ahora aremos lo mismo con los 4. Bien ahora que tenemos los 4 falta 1 sola cosa. El "AUTHPORT" que estará en cada caso en auth o en mi caso "invoice" y abriremos otra vez Config y pondremos el PORT. Una vez hecho eso compilamos root y sustituimos el antiguo por el nuevo. Ahora descompilamos nuestro locale "locale_de locale_es" lo que tengáis. Bien y tendremos que abrir la carpeta UI. Una vez hay sustituimos el archivo "login.png" por el nuevo que os daré: Bien ahora tendremos que sustituir "loginwindow.py" por el que os daré: import uiScriptLocale LOCALE_PATH = uiScriptLocale.LOGIN_PATHSERVER_BOARD_HEIGHT = 220SERVER_LIST_HEIGHT = 170window = { "name" : "LoginWindow", "sytle" : ("movable",), "x" : 0, "y" : 0, "width" : SCREEN_WIDTH, "height" : SCREEN_HEIGHT, "children" : ( ## Board { "name" : "demonking", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, #"x_scale" : float(SCREEN_WIDTH) / 1920.0, #"y_scale" : float(SCREEN_HEIGHT) / 1080.0, "image" : "locale/de/ui/login.jpg", "children" : ( { "name" : "unten_rechts", "type" : "image", "x" : SCREEN_WIDTH - 1920, "y" : SCREEN_HEIGHT - 80, "image" : "locale/de/ui/login/unten_rechts.tga", }, { "name" : "unten_links", "type" : "image", "x" : 0, "y" : SCREEN_HEIGHT - 16, "image" : "locale/de/ui/login/unten_links.tga", }, { "name" : "endles", "type" : "button", "x" : (SCREEN_WIDTH - 127) / 1, "y" : 20, "default_image" : "locale/de/ui/login/exit.tga", "over_image" : "locale/de/ui/login/exit_hover.tga", "down_image" : "locale/de/ui/login/exit_hover.tga", "text" : "", }, { "name" : "forum", "type" : "button", "x" : (SCREEN_WIDTH - 136) / 1, "y" : (SCREEN_HEIGHT - 56) / 1, "default_image" : "locale/de/ui/login/forum.tga", "over_image" : "locale/de/ui/login/forum_hover.tga", "down_image" : "locale/de/ui/login/forum_hover.tga", "text" : "", }, { "name" : "youtube", "type" : "button", "x" : (SCREEN_WIDTH - 254) / 1, "y" : (SCREEN_HEIGHT - 56) / 1, "default_image" : "locale/de/ui/login/Youtube.tga", "over_image" : "locale/de/ui/login/Youtube_hover.tga", "down_image" : "locale/de/ui/login/Youtube_hover.tga", "text" : "", }, { "name" : "facebook", "type" : "button", "x" : (SCREEN_WIDTH - 374) / 1, "y" : (SCREEN_HEIGHT - 56) / 1, "default_image" : "locale/de/ui/login/fanpage.tga", "over_image" : "locale/de/ui/login/fanpage_hover.tga", "down_image" : "locale/de/ui/login/fanpage_hover.tga", "text" : "", }, ) }, ## ConnectBoard { "name" : "ConnectBoard", "type" : "thinboard", "x" : 10000, "y" : 10000, "width" : 5, "height" : 5, "children" : ( ), }, ## LoginBoard { "name" : "LoginBoard", "type" : "image", "x" : 30, "y" : 0, "image" : "locale/de/ui/login/loginbox.tga", "children" : ( { "name" : "ID_EditLine", "type" : "editline", "x" : 90, "y" : 86, "width" : 120, "height" : 18, "input_limit" : 16, "enable_codepage" : 0, "r" : 0.0, "g" : 0.0, "b" : 0.0, "a" : 9.0, }, { "name" : "Password_EditLine", "type" : "editline", "x" : 90, "y" : 142, "width" : 120, "height" : 18, "input_limit" : 16, "secret_flag" : 1, "enable_codepage" : 0, "r" : 0.0, "g" : 0.0, "b" : 0.0, "a" : 9.0, }, { "name" : "LoginButton", "type" : "button", "x" : 75, "y" : 190, "default_image" : "locale/de/ui/login/Login.tga", "over_image" : "locale/de/ui/login/Login_hover.tga", "down_image" : "locale/de/ui/login/Login_hover.tga", "text" : "", }, { "name" : "Channel1_online_markiert_demon", "type" : "button", "x" : 32, "y" : 269, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel1_online_hover.tga", "over_image" : "locale/de/ui/login/Channel1_online_hover.tga", "down_image" : "locale/de/ui/login/Channel1_online_hover.tga", "text" : "", }, { "name" : "Channel2_online_markiert_demon", "type" : "button", "x" : 32, "y" : 300, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel2_online_hover.tga", "over_image" : "locale/de/ui/login/Channel2_online_hover.tga", "down_image" : "locale/de/ui/login/Channel2_online_hover.tga", "text" : "", }, { "name" : "Channel3_online_markiert_demon", "type" : "button", "x" : 32, "y" : 331, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel3_online_hover.tga", "over_image" : "locale/de/ui/login/Channel3_online_hover.tga", "down_image" : "locale/de/ui/login/Channel3_online_hover.tga", "text" : "", }, { "name" : "Channel4_online_markiert_demon", "type" : "button", "x" : 32, "y" : 362, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel4_online_hover.tga", "over_image" : "locale/de/ui/login/Channel4_online_hover.tga", "down_image" : "locale/de/ui/login/Channel4_online_hover.tga", "text" : "", }, { "name" : "Channel1_offline_markiert_demon", "type" : "button", "x" : 32, "y" : 269, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "over_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "text" : "", }, { "name" : "Channel2_offline_markiert_demon", "type" : "button", "x" : 32, "y" : 300, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "over_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "text" : "", }, { "name" : "Channel3_offline_markiert_demon", "type" : "button", "x" : 32, "y" : 331, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "over_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "text" : "", }, { "name" : "Channel4_offline_markiert_demon", "type" : "button", "x" : 32, "y" : 362, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "over_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "text" : "", }, { "name" : "Channel1_online_demon", "type" : "button", "x" : 32, "y" : 269, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel1_online.tga", "over_image" : "locale/de/ui/login/Channel1_online_hover.tga", "down_image" : "locale/de/ui/login/Channel1_online_hover.tga", "text" : "", }, { "name" : "Channel2_online_demon", "type" : "button", "x" : 32, "y" : 300, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel2_online.tga", "over_image" : "locale/de/ui/login/Channel2_online_hover.tga", "down_image" : "locale/de/ui/login/Channel2_online_hover.tga", "text" : "", }, { "name" : "Channel3_online_demon", "type" : "button", "x" : 32, "y" : 331, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel3_online.tga", "over_image" : "locale/de/ui/login/Channel3_online_hover.tga", "down_image" : "locale/de/ui/login/Channel3_online_hover.tga", "text" : "", }, { "name" : "Channel4_online_demon", "type" : "button", "x" : 32, "y" : 362, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel4_online.tga", "over_image" : "locale/de/ui/login/Channel4_online_hover.tga", "down_image" : "locale/de/ui/login/Channel4_online_hover.tga", "text" : "", }, { "name" : "Channel1_offline_demon", "type" : "button", "x" : 32, "y" : 269, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel1_offline.tga", "over_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "text" : "", }, { "name" : "Channel2_offline_demon", "type" : "button", "x" : 32, "y" : 300, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel2_offline.tga", "over_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "text" : "", }, { "name" : "Channel3_offline_demon", "type" : "button", "x" : 32, "y" : 331, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel3_offline.tga", "over_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "text" : "", }, { "name" : "Channel4_offline_demon", "type" : "button", "x" : 32, "y" : 362, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel4_offline.tga", "over_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "text" : "", }, ), }, { "name" : "oben_rechts", "type" : "image", "x" : SCREEN_WIDTH - 1920, "y" : 0, #"horizontal_align" : "center", "image" : "locale/de/ui/login/oben_rechts.tga", }, { "name" : "oben_links", "type" : "image", "x" : 36, "y" : 0, "image" : "locale/de/ui/login/oben_links.tga", }, ## ServerBoard { "name" : "ServerBoard", "type" : "thinboard", "x" : 0, "y" : SCREEN_HEIGHT - SERVER_BOARD_HEIGHT - 150, "width" : 375, "height" : SERVER_BOARD_HEIGHT, "horizontal_align" : "center", "children" : ( ## ListBox { "name" : "ServerList", "type" : "listbox2", "x" : 10, "y" : 40, "width" : 232, "height" : SERVER_LIST_HEIGHT, "row_count" : 18, "item_align" : 0, }, { "name" : "ChannelList", "type" : "listbox", "x" : 255, "y" : 40, "width" : 109, "height" : SERVER_LIST_HEIGHT, "item_align" : 0, }, ), }, ),} Bien ahora que tenemos eso iremos a la carpeta login y sustituimos por los archivos que os daré ahora mismo: http://www.mediafire.com/?5bigetc18ba97de Bien una vez hecho todo eso compilamos todo y lo sustituimos. Ahora lo que haremos será coger estos dos archivos que os voy a dar ahora mismo: http://www.mediafire.com/?3yj2r9b0zlqx9ub Y los pondremos en la raíz del cliente. "Donde das click al Metin2.exe para abrir el sv". Y ya esta debería funcionar ^.^ Créditos: Ýoshii36 Y mi agradecimiento a jfirewall por decirme como hacer funcionar los port.
    1 punto
  25. Hola muy buenas a todos, como primer aporte para el foro les dejo una web para los servidores que deseen abrir una beta y no montar página web, el funcionamiento es muy sencillo en "include/config.inc.php" tiene una configuración básica para la conexión al servidor. ] Esta totalmente echa en css3 y html5 es, se puede editar todo siempre y cuando se tenga un poco de conocimiento de HTML y CSS. Si la usan pido que por favor, dejen los créditos del pie de página. Un saludo a todos Infinity Designs InfinityDesigns - Registro beta para Metin2.rar
    1 punto
  26. hola chicos. Veo que muchos tuvieron problemas con los files bestproduction. hace mucho deje el mundo del metin por algunos problemas personales. Regrese con ganas de hacer algunos aportes pequeños asi ir aprendiendo un poco mas de este mundo. Aclaro no soy programador solo que me gusta mucho el juego pues dedico mucho tiempo soy curioso y he logrado tener algunas buenas cosas con ayuda de muchas otras personas algunos ya x fuera de este mundo, otros ya muy profecionales en esto y bueno etc etc como decia los best son unos files llamativos con sus logros y fallos bueno no soy quien para juzgar igual nadie publica nada de gratis y funcional 100% Que pretendo hacer con esto. publico una VDI que tengo hace tiempo guardada y funcional con los files ya configurado y la mysql funcional diran muchos, ha esto es facil pues si es sencillo pero no vi x ningun lado posteado asi. y pues algunos no son capaz de hacerla funcionar. ire poco a poco ir traduciendo y lanzando actualizaciones para que vallan cambiando el idioma de turko "creo que es" a español. ATENCION: no hare de momento cambios al game, db o cliente, QUE GANO! pues aprender de los nuevos sistemas que no tengo idea como funcionan y averigurar cuales son los fallos que tienen estos files si ya es 2019 y los arthur estan pasados de moda hay que ir actualizando. posdata: quien quiera ir ayudando a las traducciones o aportar puede agregarme al skype. Quien tenga conocimiento de los fallos puede escribir los fallos para intentar buscar la solucion imagino que no seran unos files tipo marthysama pero almenos un remplazo de los arthur xD. v0.0.1: Cambios. script de inicio,detener,limpiar. borre algunos archivos que ya no utilizaria para simplificar los files, los datos de inicio, usuarios y claves estan al abrir el archivo rar asi nunk los perderan link: https://mega.nz/#!xxsH3AQL!eBtAbLZdgwvb2SLB3m-zeIWLg8LUHehD9wEMKz9FV3o Cliente: El cliente ya se encuentra configurado con la ip del cliente. solo tendran crear la carpeta pack en el cliente y luego que compilar cada uno de los archivos. link https://mega.nz/#!44ExhaYD!Rmag6bgvvxAL3QC4auS3ReSSjCgI7ZWZY0ngyeh6LoY Aca un pequeño video!
    1 punto
  27. Hola gente de metin2zone, aquí les traigo aportando un cliente que encontre en epvp! Lo que tiene es lo siguiente : Link de Descarga : http://depositfiles....files/wu49vvlg4 Creadores del cliente: Omega = Omegadiklo19382 Sandoz94 = sandoz.dikulary Fuuton97 = greajya Fyuri = Fyuri31245 Trafalgar = Trafalgar932 Metin2DMT = denanodietoklobrati Medyc = Medyccydem Creditos a Sema1995 por pasarme el Post. Fuente: epvp Muchas Gracias.
    1 punto
  28. Hi , this is the Alloy Metin2 team. We would like to present you a new equipment on level 90, which will appear on our server. Let me know how you like it;) Our project is under development, all interested are welcome to visit our official facebook. https://www.facebook.com/alloymt2 Best Regards, Team Alloy.
    1 punto
  29. El evento consiste en ir a un mapa especial que solo los GM pueden abrir, luego de abrir el mapa en el npc cazador se les da a los usuarios cierto tiempo para que lleguen, luego se cierra la entrada al mapa y se da a la opcion de aparecer a los conejos (cada ronda tirara 10 conejos), luego deberan ir los users a matarlos y obtener sus pieles que uds configuran los premios que daran x las pieles, al darle a la opcion terminar evento pasados 15 seugndos les llvara a todos a city contiene: Quest (codigo muy simple hecho por mi) mapa (hecho por mi) texturas y textureset(especiales para el mapa) serverside CREDITOS UNICAMENTE MIOS [ARES ] SOLO PARA METIN2GANJAH Y PARA METIN2ZONE NO SE PERMITEN EN OTROS FOROS SIN PERMISO https://mega.nz/#!4ABBATzJ!zB1Yp29BSviAsdrqKqt0NH-9DP-xCjqHz5J1TydquA8
    1 punto
  30. colcrt

    pasa! y traducimos maxmi 4.1

    hola, se que muchos usan estos files y como sabran estan en otro idioma la idea que tengo para facilitar el trabajo de traduccion de las quest es que entre todos los que los usamos aportemos para traducirlos completamente yo ya tengo varias traducidas pero es tediosos traducir tanta quest asi que compartire las que tengo traducidas y si estas en las mismas que yo pues seria genial con traducieras algunas quest de esos files y las compartieras asi entre todos traducimos y es mas rapido... guild_manage.quest* skill_group.quest* guild_building.quest* guild_building_npc.quest* guild_ranking.quest* horse_exchange_ticket.quest* quest_maxmi4-1_traducido.rar
    1 punto
  31. 1 punto
  32. El cliente no lo tengo por aca, si lo encuentro lo doy... Ahora si me quieres ayudar con el source del server, como se compila, me pondria feliz jajaj Files: https://drive.google.com/open?id=1MYLVIaOVEsLlp3VvtcdlnlbuEGSSd7Ds db: https://drive.google.com/open?id=1rby6zU9SgdnRvK9RhSkpH-969vyveCOG source server: https://drive.google.com/open?id=1rfazGRlBS6fxlXLYhWbJZrXoL08p_05l source cliente: https://drive.google.com/open?id=1PLrxgCDX6PtGlNrrAPOrwm5iMPYSG_m6 tools: https://drive.google.com/open?id=1Q5mdf4FmkeQwXGT0osWMudhb_rFvmZki
    1 punto
  33. NazoX

    Files Arrival2

    Buenas, pues mira vas al desencriptador, y borra todo menos : Araiguma aMetin2, metin2 a Araiguma y encriptador.exe Luego como su nombre dice, copias un archivo por ejemplo, root.Araiguma y lo pones en la carpeta con esos archivos. paso 1: Arrastra el archivo xxx.Araiguma a Araiguma a Metin2 y te quedará un archivo llamado xxx.metin2 paso2: el archivo xxx.metin2 lo arrastras al encriptador y te dejará el archivo xxx.eix y xxx.epk Encriptar: cojes el archivo .eix y .epk que quieras y lo pones en esa carpeta. paso1: copias por ejemplo bgm.eix y bgm.epk y lo arrastras al encriptador y te dejará un archivo llamado bgm.metin2 paso2: copias el archivo bgm.metin2 a metin2 a Araiguama y te quedará el archivo como bgm.araiguma compilado. https://i.gyazo.com/84d6462ae7af2c23aa6be088a70e1bdb.mp4 https://i.gyazo.com/30fb24179a452fefa3b413e446c0860e.mp4
    1 punto
  34. 1 punto
  35. Buenas, vendo estos diseños que tenia en mi carpeta de diseños y que nadie usa, si a alguno le interesa alguno de los diseños que ve, que me contacte por skype.
    1 punto
  36. [IMAGEN] https://ibb.co/h7rQpe UserInterface/InstanceBaseEffect.cpp (Abrelo y busca) else if (flag & DAMAGE_CRITICAL) { //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot); //return; 숫자도 표시. } de este modo modificada; else if (flag & DAMAGE_CRITICAL) { rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot); //return; 숫자도 표시. } root/playersettingmodule.py (Abrelo y busca) #chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_CRITICAL, "", "d:/ymir work/effect/affect/damagevalue/critical.mse") de este modo modificada; chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_CRITICAL, "", "d:/ymir work/effect/affect/damagevalue/critical.mse") Por último, añadir el índice en el pack * critical [DOWLOAD] https://www.dosyaupload.com/dhZ3
    1 punto
  37. No es el eternexus. Solo debes configurar donde esta la carpeta pack y listo :3 EPack32.7z
    1 punto
  38. Cris

    Skin y armas Setaou

    Creo que te refieres a este set, te lo dejo de todos modos por si te sirve... http://www.mediafire.com/file/5c957ukw818cvdq/set.rar Espero mis gracias!.
    1 punto
  39. Hola hoy os vendo a traer un convertidor de SQL a TXT para files 40k 1- Descargamos este arhivo https://mega.nz/#!WllAVSgI!jyvPv8Iof7iDTdcMW3LL5nx_wB34em0h-s5hIHseepY 2- Escribimos este comando en Putty o Virtual Comandos: cd /usr/ports/databases/py-MySQLdb/ && make install clean 3- También es necesario cambiar las propiedades de conexión en el script 4- Ejemplo host_mysql = '192.168.1.100' user_mysql = 'root' passwd_mysql = '123456! @ #' 5- Si quieres convertir también mob_proto de esta manera, necesitas irte al final del scripts buscas #print mob_proto () y borras el (#) 6- Luego vas al WinSCP o Firezilla y subes el arhivo .py 7- Luego ve al putty o virtual escribes la ruta del arhivo ejemplo cd /usr/game luego escribes el comando ls y por ultimo python convert_test.py 8- Video por si no entiendes la guia ! (Si quieren hacerlo al reves de txt a sql a qui les dejo el arhivo y el video ) 1- Descargar este arhivo https://withdata.com/data-file-converter/ 2- El video para guiaros
    1 punto
  40. Hola Zonero les traigo el sistema de prestigio que los disfruten! Instalación: Game.py Abajo De: "mall" : self.__InGameShop_Show, Agregamos Esto: "Prestige" : self.PrestigeGrade, Ahora agregamos al final del game esta función: def PrestigeGrade(self, grade): net.SendChatPacket("(prestige" + grade +")") Ahora en el playersettingmodule.py. Hay que buscar: (fish) Y Incluimos esto: chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+12, "", EmoticonStr+"prestige1.mse") net.RegisterEmoticonString("(prestige1)") chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+13, "", EmoticonStr+"prestige2.mse") net.RegisterEmoticonString("(prestige2)") Sólo tienes que hacer esto para todos los niveles de prestigio. Hey Jungs heute bringe ich Prestige System, Genießen Sie es und Grüße Installation; Game.py unter "mall" : self.__InGameShop_Show, fügt ihr das hier ein: "Prestige" : self.PrestigeGrade, Nun fügt ihr noch ans Ende der Game diese Funktion: def PrestigeGrade(self, grade): net.SendChatPacket("(prestige" + grade +")") Game ist fertig! Nun in die playersettingmodule.py. Dort sucht ihr nach (fish) und addet darunter chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+12, "", EmoticonStr+"prestige1.mse") net.RegisterEmoticonString("(prestige1)") chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+13, "", EmoticonStr+"prestige2.mse") net.RegisterEmoticonString("(prestige2)") Dies müsst ihr nur für all eure Prestige Stufen machen. Saludos Gracias espero que les sirva. Grüße Ich hoffe, sie dienen. Sistema Prestigio (spanish).rar Prestige System (aleman).rar
    1 punto
  41. No lo vi posteado en zone así que lo publico yo, por lo que vi no es idéntico al que esta ya publicado en otros foros, seguro alguno le saca provecho Link: https://mega.nz/#!6coFzJJS!Hx3noXaLvNsrljPV1uKMPtRinXMDdtb_WocvkKUV0fY De nd
    1 punto
  42. sergiu147

    Metin2 green screen !

    Salut ! Creator: [sa]ZuZu ( SonyMt2 ) (pentru detalii : http://www.facebook.com/photomt2 ) Detalii: Un proiect .. unicat cred ! Rezolutie: Rezolutia maximă 1080p HD Lungime: 2:10 and 0:32 Cont ytube : https://www.youtube.com/channel/UCx-IyxWKS6wHjTqiBy3x8TQ Streaming: https://www.youtube.com/watch?v=7rBtXMwOks4 https://www.youtube.com/watch?v=zUkqdkyo6S8
    1 punto
  43. Hola queridos usuarios de Metin2Zone. Hoy os traigo una guia de como adaptar un arma del World Of Warcraft por ejemplo y usarla en vuestro Metin2. Bueno lo primero que tenéis que saber son los programas necesarios para hacer dicha adaptación. ·Recursos: - 3Ds Max 2007. - World Of Warcraft Cliente. - World Of Warcraft Model Viewer. - Plugin Export GR2 Para 3Ds Max 2007. - GR2 to Mesh. ·Descarga de recursos: - 3Ds Max 2007 - Cliente World Of Warcraft - World Of Warcraft Model Viewer 32Bits / 64Bits - Plugin Exportar GR2 para 3Ds Max 2007 - GR2 to Mesh Teniendo todo esto solo tendríamos que instalar el World Of Warcraft. La instalación puede demorar varias horas. Instalamos el World Of Warcraft Model Viewer y se guardara predeterminadamente en 'C:\Program Files\World Of Warcraft Model Viewer' Al dirigirnos a la ruta del model viewer podemos abrir el .exe llamado 'WowModelViewer32' al abrirlo le damos todo a 'Si' en lo que nos aparezca y se cargara automáticamente la base de datos del World Of Warcraft (Para esta parte hace falta tener el World Of Warcraft instalado y actualizado). Ahora el 3Ds max lo instalan. Descomprimimos el archivo Plugins y la carpeta la pasamos a la raíz del 3Ds MAX 2007. Después de todo esto podremos comenzar con la guía. 1º Paso: Exportar cosas del World Of Warcraft Model Viewer. Lo primero de todo esto es abrir el Model Viewer del World Of Warcraft. Al abrir el Model Viewer y si ya tenemos el World Of Warcraft instalado nos aparecerá el programa y primero una ventana y le damos a 'Si' luego a 'Aceptar' y tendremos la Base de datos cargada. Para las armas nos vamos a 'Item' luego a 'Objectcomponents' y finalmente a 'Weapons' y escogemos un arma para nuestro metin. Asi como muestro en la imagen. Para exportar le dais a File -> Export Model -> Wavefront OBJ. [El arma que se muestra en la imagen en la base de datos se llama 'sword_1h_raid_d_03'] 2º Paso: Sacar modelo de arma Metin2 para adaptar el arma del World Of Warcraft. Descargamos el GR2 to Mesh y arrastramos ahi un GR2 de un arma del Metin2. Por ejemplo el de un arma del nivel 1 (00010.gr2) lo ponemos en la carpeta del GR2 to Mesh. Y arrastramos el GR2 a 'grnreader' y aparecerán 3 ventanas es cuestion de darle 'Si' a las tres ventanas.Despues de este paso ya tendremos el 00010.GR2.ms y ese archivo lo arrastramos hasta el 3Ds Max. Asi ya tendremos un modelo fijo para adaptar el arma con la medida correcta. Asi se vera en el 3Ds Max 2007, aqui la imagen de muestra. [El arma que se muestra en la imagen no es la espada del nivel 1 (00010.gr2.ms) si no otra que ya tiene guardada] 3º Paso: Adaptacion del modelo del World Of Warcraft al Modelo de Metin2. Lo primero de todo al tener el arma del World Of Warcraft que extrajimos antes la arrastramos al 3Ds Max 2007 saldrá girada mal. Lo primero es poner el arma recta. Para eso cogéis la herramienta que esta en el menú de arriba. Luego de ponerla recta lo siguiente es aumentarle el tamaño al tamaño del Modelo del Metin, pues muy fácil. Cogéis la herramienta que también esta en el menú de arriba y es ir aumentando hasta que del mismo tamaño que el arma del Metin. Bueno ahora es eliminar el modelo del Metin el verde de arriba para eso escogemos la herramienta que también esta en el menú de arriba y seleccionáis la capa de 'Object01' y le dais a 'Select' y luego a la tecla 'Delete/Suprimir' ahora ya quedara el arma solamente. Solamente queda centrar el arma para eso vamos al cuadro de arriba a la izquierda (Como os habréis dado cuenta ahí 4 Cuadros distintos cada uno una perspectiva diferente para ver el arma) en el de arriba a la izquierda ponéis el arma en esta posicion. Que las lineas queden en linea con las negras. Se puede mover el arma con esta herramienta que esta ubicada en el menú de arriba. Aquí una imagen de como tiene que quedar el arma. NOTA: Para añadirle la textura a un arma solo es necesario arrastrar la textura (TGA/DDS o cualquier archivo de imagen). Para que a los usuarios se les vea con textura dentro de el juego el arma tiene que tener de ruta 'D:\Ymir Work\Item\Weapon'. Bueno eso es todo, espero que le haya gustado la guía y que pronto puedan tener armas únicas en su servidor, gracias y buena suerte. Guia oficial Metin2Zone Att. Strach
    1 punto
  44. pepineitor

    [QUEST]Anti-Exp

    http://lmgtfy.com/?q=metin2+anti+exp
    1 punto
  45. KeKo

    Galería de dibujos de Siniss

    Buenas gente, Hace mucho que no posteo por aquí, pero hoy no se trata de nada sobre mí, si no que simplemente quería enseñaros esta fantástica galería que mi novia tiene con muchos de sus dibujos en facebook. Hay un montón de dibujos increíbles (y no lo digo por hacerle la pelota jaja) así que os animo a todos a pasaros por su facebook, darle a me gusta y compartirlo con otra gente https://www.facebook.com/SinisterBathory Aquí tenéis las fotos de algunos de los dibujos, espero que os gusten https://www.facebook.com/SinisterBathory/photos/pcb.388060514694597/388060484694600/?type=1&theater https://www.facebook.com/SinisterBathory/photos/pcb.330802033753779/330801253753857/?type=1&theater https://www.facebook.com/SinisterBathory/photos/a.284068878427095.1073741827.261268467373803/304240596409923/?type=1&theater
    1 punto
  46. Firma Colores: Pon los que tu veas que queden bien Texto: Happy Imagen: Si puedes poner esta mejor : http://img1.wikia.nocookie.net/__cb20140405183853/villains/images/2/22/Date_a_live_tohka_w0.jpg Avatar Lo de el avatar hazlo como quieras xD Saludos y gracias
    1 punto
  47. Al tener el plugin exporter, para exportar GR2. Dicho plugin lo puse en lo que necesitábamos. Lo pongo aquí nuevamente para que se vea mejor. http://www.mediafire.com/?rzc6jscpmx87k3d PD: ¿Gabiii desde cuando eres de Ourense?
    1 punto
Esta clasificación está establecida en Madrid/GMT+02:00
×
×
  • Crear nuevo...