Jump to content

Break

Admin
  • Contador contenido

    7.008
  • Ingreso

  • Última visita

  • Días ganados

    45

Actividad de reputación

  1. Me Gusta
    Break got a reaction from Alex Poullas in [Instalador automático] -> Metin2 ¡RELEASE!   
    Hola comunidad,
    He tenido algo de tiempo libre y he empezado a desarrollar un script que realiza la instalación automática de un servidor de Metin2.
     
    Es algo básico, ya que la instalación de un servidor de Metin2 es muy sencilla, pero si te realiza la instalación un script, pues mejor que mejor. A continuación les dejare un vídeo realizando una instalación con el script.
    VIDEO UTILIZANDO EL SCRIPT [YA TERMINADO]
    En el vídeo se instala la base de eternia2.
     
    ¿Como utilizar el script?
    Descargarse el script y ejecutarlo.
    Ejecutamos el siguiente comando:
    fetch http://break.pid2k.es/instalador.sh && sh instalador.sh (He dejado que se obtenga el código por fetch, porque así si actualizo el código, todo el mundo cuando lo vaya a utilizar tendrá las nuevas actualizaciones)
    Si queréis descargaros el script por el navegador y las librerías que se han usado:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Una vez ya descargado y ejecutado el script seleccionemos la opción deseada.
     
     
    El script controla lo siguiente:
    -> En caso de equivocarse al escribir mal el nombre de los files o de la db, antes de descomprimirlo, comprueba si se encuentra en el directorio raíz. Si no se encuentra, solicita de nuevo introducir el nombre del archivo. (En caso de que no se haya terminado de subir, esperar a que este subido por completo, si no entrareis en un bucle hasta que encuentre el archivo)
     
    -> Si el sistema operativo cuenta con una arquitectura de 64 bits, el script lo reconocerá, y preguntara la versión del sistema operativo para poder así descargarse las librerías de 32 bits del repositorio de freebsd, en caso que el script detecte que es una arquitectura de 32 bits, no preguntara el sistema operativo debido a que no es necesario descargarse las librerías.
     
    -> El script da la opción de subir un archivo ".zip" con las librerías, he de destacar que, si nuestro sistema es de 64 bits, las librerías del metin2 tienen que ir en /usr/lib32/ por lo cual, nuestro archivo .zip a la hora de descomprimirse tiene que hacerlo en esa ruta. Para ello descomprimirlo en vuestro pc, y fijarse si se crea una carpeta llamada usr, dentro otra llamada lib32 y dentro de lib32 que estén las librerías. En caso de que estemos en arquitectura 32 bits, la ruta tendría que ser /usr/lib/. 
     
    -> Si nos equivocamos  al escribir el  nombre .zip de las librerías, el script no se detendrá, simplemente se saltará el paso.
     
    -> Solo da privilegios a los directorios /usr/game y a /var/db/mysql/, en caso de que nuestros files se encuentren en otro directorio hay introducir el comando.
     
    PD: El script no controla las librerías que os hace falta a vuestros files especificos para hacerlos correr, el script mete unas librerías standar.
    Tenéis que añadir las librerías que os falten a sus respectivas rutas.
     
    Comentar que os parece, ya se que la mayoría de aquí sabe preparar la maquina para su servidor de Metin2.  (Solo es un detalle para las personas perezosas, o personas que no saben preparar una maquina) 
     
     
    POR ULTIMO
     
    Si cuento con mucho apoyo sobre este aporte, lo próximo que desarrollaré sera un script que realice copias automáticas a una determinada hora de una maquina a otra, así podemos tener guardadas nuestras copias de seguridad en un vps externo y que elimine cada ''x'' tiempo numero de copias, y solicitar que nos muestre el numero de copias. Con esto siempre tendríamos copias de seguridad de nuestro servidor en todo momento, sin tener que hacer nada.
     
    UPDATE VERSION 2
    Mucha gente le gusta instalar los files Arrival2, he creado el script que instala automaticamente la base de Arrival2 con su mysql, y crea usuarios de mysql.
    No hace falta subir ni los files ni la db, solamente ejecutar el script para ello:
    fetch http://break.pid2k.es/instalador_v2.sh && sh instalador_v2.sh  
    Seleccionamos la opción 3 e instala los files con la db, automáticamente. (También instala las librerías)
     
    Un saludo!
  2. Me Gusta
    Break got a reaction from DarneLL超本能 in [Instalador automático] -> Metin2 ¡RELEASE!   
    Hola comunidad,
    He tenido algo de tiempo libre y he empezado a desarrollar un script que realiza la instalación automática de un servidor de Metin2.
     
    Es algo básico, ya que la instalación de un servidor de Metin2 es muy sencilla, pero si te realiza la instalación un script, pues mejor que mejor. A continuación les dejare un vídeo realizando una instalación con el script.
    VIDEO UTILIZANDO EL SCRIPT [YA TERMINADO]
    En el vídeo se instala la base de eternia2.
     
    ¿Como utilizar el script?
    Descargarse el script y ejecutarlo.
    Ejecutamos el siguiente comando:
    fetch http://break.pid2k.es/instalador.sh && sh instalador.sh (He dejado que se obtenga el código por fetch, porque así si actualizo el código, todo el mundo cuando lo vaya a utilizar tendrá las nuevas actualizaciones)
    Si queréis descargaros el script por el navegador y las librerías que se han usado:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Una vez ya descargado y ejecutado el script seleccionemos la opción deseada.
     
     
    El script controla lo siguiente:
    -> En caso de equivocarse al escribir mal el nombre de los files o de la db, antes de descomprimirlo, comprueba si se encuentra en el directorio raíz. Si no se encuentra, solicita de nuevo introducir el nombre del archivo. (En caso de que no se haya terminado de subir, esperar a que este subido por completo, si no entrareis en un bucle hasta que encuentre el archivo)
     
    -> Si el sistema operativo cuenta con una arquitectura de 64 bits, el script lo reconocerá, y preguntara la versión del sistema operativo para poder así descargarse las librerías de 32 bits del repositorio de freebsd, en caso que el script detecte que es una arquitectura de 32 bits, no preguntara el sistema operativo debido a que no es necesario descargarse las librerías.
     
    -> El script da la opción de subir un archivo ".zip" con las librerías, he de destacar que, si nuestro sistema es de 64 bits, las librerías del metin2 tienen que ir en /usr/lib32/ por lo cual, nuestro archivo .zip a la hora de descomprimirse tiene que hacerlo en esa ruta. Para ello descomprimirlo en vuestro pc, y fijarse si se crea una carpeta llamada usr, dentro otra llamada lib32 y dentro de lib32 que estén las librerías. En caso de que estemos en arquitectura 32 bits, la ruta tendría que ser /usr/lib/. 
     
    -> Si nos equivocamos  al escribir el  nombre .zip de las librerías, el script no se detendrá, simplemente se saltará el paso.
     
    -> Solo da privilegios a los directorios /usr/game y a /var/db/mysql/, en caso de que nuestros files se encuentren en otro directorio hay introducir el comando.
     
    PD: El script no controla las librerías que os hace falta a vuestros files especificos para hacerlos correr, el script mete unas librerías standar.
    Tenéis que añadir las librerías que os falten a sus respectivas rutas.
     
    Comentar que os parece, ya se que la mayoría de aquí sabe preparar la maquina para su servidor de Metin2.  (Solo es un detalle para las personas perezosas, o personas que no saben preparar una maquina) 
     
     
    POR ULTIMO
     
    Si cuento con mucho apoyo sobre este aporte, lo próximo que desarrollaré sera un script que realice copias automáticas a una determinada hora de una maquina a otra, así podemos tener guardadas nuestras copias de seguridad en un vps externo y que elimine cada ''x'' tiempo numero de copias, y solicitar que nos muestre el numero de copias. Con esto siempre tendríamos copias de seguridad de nuestro servidor en todo momento, sin tener que hacer nada.
     
    UPDATE VERSION 2
    Mucha gente le gusta instalar los files Arrival2, he creado el script que instala automaticamente la base de Arrival2 con su mysql, y crea usuarios de mysql.
    No hace falta subir ni los files ni la db, solamente ejecutar el script para ello:
    fetch http://break.pid2k.es/instalador_v2.sh && sh instalador_v2.sh  
    Seleccionamos la opción 3 e instala los files con la db, automáticamente. (También instala las librerías)
     
    Un saludo!
  3. Me Gusta
    Break reacted to ChuchoGamer in ServerFiles(Mistic 3.0 FINAL)   
    Hola muy buenas Noches Les comparto estos Serverfiles que Se me hicieron interesantes estan muy buenos aqui les dejo videos y todo por si les gusta bajarlos y probarlos 
     
     
     
    Aqui les dejo los links de descarga  lo pueden bajar por mega o sino por google drive el que les guste mas 😄
     
    Link de Descarga completa por Mega
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
    Link de Descarga completa por Google Drive
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  Aquí una imagen donde analice los archivos que no tiene Virus   
    se me paso decirles que ai un cliente ai mismo descompilado de todo tiene que cambiar las keys de eix y epk y compilar los archivos y crear el nuevo exe para que les entre el cliente y asi 
  4. Me Gusta
    Break reacted to LastSamurai in Obtén tu servidor de discord personalizado!   
    Hola buenas a todos! Les vengo a ofrecer mis humildes servicios.
    ¿Qué ofrezco?
    Estoy ofreciendo crearte un servidor de discord totalmente a tu gusto.
    Los servidores contarán con roles, bots y canales a pedido, estarán configurados según cada rol y todos tendrán su respectiva personalización con símbolos, emojis, etc.
    Hablemos de precios!
    Es difícil calcular el precio de los conocimientos, pero vamos a intentarlo!
    Actualmente el precio de un servidor personalizado, ronda entre los 2$ (Servidor básico) y 5$ (Servidor avanzado). Tienes que crear un discord grande? No te preocupes! El precio es el mismo! (Se aceptan propinas xD)

    Actualmente también estoy ofreciendo la creación de bots de discord (Ya sean de música, etc.). Su precio depende del pedido!

    Métodos de pago!
    - PayPal
    - Uala

    Contacto!
    - LastSamurai#0005
    - [email protected]
    (Estoy mayormente en discord!)
  5. Gracias
    Break got a reaction from wille damare in [40 euros gratis en criptomonedas]   
    No puedes hacer todos los pasos, si no te han dado nada. Primero verifica tu cuenta mandando foto del dni, por delante y por detras. Foto sujetando el dni, y cuando termine, entraras en proceso de verificación puede tardar hasta 1 hora.
    Y puedes leer comentarios de chollometro de la gente que si le funciona! Y a mi me ha funcionado y todo bien, tengo ya el dinero en el banco ha llegado antes de lo previsto.
     
    Editar:
    Si has hecho todo bien te tiene que salir el siguiente mensaje:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  6. Me Gusta
    Break got a reaction from [[ADM]Dark in [40 euros gratis en criptomonedas]   
    Hola chicos, me llego una noticia al movil, de que regalaban criptomonedas. Os paso el enlace. He de decir que yo lo he hecho y me ha llegado el dinero al monedero, ahora lo pasare a mi monedero que yo uso para poder retirar. Captura:

     
    Enlace con las instrucciones:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. ACTUALIZO:
    Me he pasado el dinero a coinbase y sin problema: 

     
    Foto de la retirada:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Un saludo espero que os beneficies!
     
    OTRAS FUENTES:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  7. Haha
    Break got a reaction from wille damare in [40 euros gratis en criptomonedas]   
    Hola chicos, me llego una noticia al movil, de que regalaban criptomonedas. Os paso el enlace. He de decir que yo lo he hecho y me ha llegado el dinero al monedero, ahora lo pasare a mi monedero que yo uso para poder retirar. Captura:

     
    Enlace con las instrucciones:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. ACTUALIZO:
    Me he pasado el dinero a coinbase y sin problema: 

     
    Foto de la retirada:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Un saludo espero que os beneficies!
     
    OTRAS FUENTES:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  8. Me Gusta
    Break got a reaction from Emir Sanchez in Systema Expasion de Inventarios   
    Buenas zoneros, pues estaba buscando el sistema de inventarios de expansión y no estaba en el foro. Me he animado a compartirlo aquí también con vosotros.
    Vídeo del sistema:
     
    Link de descarga: 
     
    Fuente metin2dev.org
    Espero que os sirva.
    ¡Saludos!
  9. Me Gusta
    Break got a reaction from alejankof in [Guía] Cambiar contraseña de Mysql [DEFINITIVA]   
    Hola Metin2Zone, soy consciente de que hay muchas guías de cambiar contraseña de mysql. Pero como he visto en el chat de metin2zone, comentarios de que no le funcionan la guía o que no esta bien explicado. Lo que voy hacer es una guía definitiva, de recuperar contraseña o cambiar la contraseña de mysql fácilmente.
    Nos podemos encontrarnos en los siguientes casos:
    Caso 1: No se cual es la contraseña del Navicat (mysql)
    (Nota: En los comandos aparecerá "Break#" este es el hostname, de mi vps y en el directorio que me encuentro, no le hagáis mucho caso, solo tenéis que copiar lo que viene detrás)
    Break# /usr/local/etc/rc.d/mysql-server stop Pasaremos a parar lo primero de todo la mysql, para así poder editar la contraseña de los usuarios haciendo una entrada forzosa.
    Break# mysqld_safe --skip-grant-tables &
    Con este comando lo que hacemos es iniciar el servidor en modo seguro.
    Conocimiento sobre este comando que estamos haciendo:
    Break# mysql -u root Entramos a la mysql como usuario root
    mysql# use mysql; Nos movemos a la database mysql, que es la base de datos del sistema de mysql, donde se almacenan los usuarios que existen en la mysql entre otras cosas.
    Aquí podemos reemplazar la contraseña que tenia nuestro usuario root, la cual no conocemos, con el siguiente comando:
    mysql# update user set password=PASSWORD("TUPASSWORD") where user='root'; Ahora saldremos de la mysql:
    mysql# quit Por último quedaría ya solo arrancar la mysql:
    Break# /usr/local/etc/rc.d/mysql-server start  
    Hasta aquí, seria el caso que desconozcamos la contraseña del usuario root, también serviría este caso para cambiar la contraseña del usuario root, pero lo veo mucho lío, esto ultimo se ve mucho mejor en el caso 2.
    Caso 1.1- "En caso de que no hubiésemos tenido éxito en realizar el apartado 1, dejo otras maneras de hacerlo" (AGRADECIMIENTOS A
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. por compartir la idea). Para poder cambiar la clave puedes hacerlo desde la maquina o cambiarla desde el filezila o Winscp y aqui tendras dos opciones de cambiarla.

    La primera es descargar el rar y añadirlo en la carpeta /var/db/mysql darle permiso 777 a los 3 archivos y antes de hacer reboot cambiar en todos los config el usuario y contraseña 

    PLAYER_SQL: localhost sebas Juan870614 player
    COMMON_SQL: localhost sebas Juan870614 common
    LOG_SQL: localhost sebas Juan870614 log
    Si tienes Notepad++ abres todos los config de todos los ch de la db y del auth y le cambias todos de una.

    Haces reboot y ya podras entrar a modificarlo ya como tu quieras.
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Caso 1.2- "En caso de que no hubiésemos tenido éxito en realizar el apartado 1 y 1.1, dejo otras maneras de hacerlo que es muy parecida que el 1.1" 
    Abrimos winscp o filezilla y nos vamos al siguiente directorio:
    /var/db/mysql/mysql
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Descomprimimos el .rar en nuestro pc y subimos los archivos que hay dentro a ese directorio, dirá que si queremos reemplazar, le decimos que si y le damos permisos 777
     
    Por defecto los usuarios que existirán son:
    root@localhost
    root@% 
    Ambos usuarios tienen la contraseña: metin2zone
    Ahora, nos vamos al config de alguno de nuestros channel 
     
    PLAYER_SQL: localhost root passdelosfiles player Nos fijamos la palabra que tiene detras del usuario ''root'' y esa es la pass de los files.
    A partir de aquí en vez de cambiar los configs, podemos hacer el Caso 2, y cambiar la pass por la que hay en los configs, que es mucho más rapido, entrando al navicat con el usuario root y pass metin2zone 
    He de recordar que usemos siempre el usuario de ''localhost'' para los files, ya que es más seguro.
     
     
    Caso 2: Conozco la contraseña de mi usuario de mysql pero no se como cambiarla.
    Este es el mas sencillo, abres el navicat y te logeas.
    Una vez logeado le damos a user:

    Y nos saldrán todos los usuarios que existen en nuestra mysql. Seleccionamos el usuario que queramos cambiar la contraseña, en este caso elegiré el usuario Break y le daré a ''Edit User"

    Ahora la nueva password, la pondremos en Password: y en Confirm Password:
    Una vez puesta le damos a Save y ya estaría cambiada.
    Hasta aquí seria el Caso 2.
     
    Espero que os haya resultado útil esta guía, me he intentado explicar lo mejor posible para que todo el mundo pueda utilizar la guía, sin tener mucho conocimiento de la materia.
    Si se os da más caso que tengáis problema con los usuarios de la mysql o algo, decirlo en los comentarios y agrego la solución a esos casos. Por lo pronto solo se me han ocurrido esos dos.
     
     
    ¡Un saludo y hasta la próxima chicos!
     
     
     
     
  10. Me Gusta
    Break got a reaction from Meet in [40 euros gratis en criptomonedas]   
    Hola chicos, me llego una noticia al movil, de que regalaban criptomonedas. Os paso el enlace. He de decir que yo lo he hecho y me ha llegado el dinero al monedero, ahora lo pasare a mi monedero que yo uso para poder retirar. Captura:

     
    Enlace con las instrucciones:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. ACTUALIZO:
    Me he pasado el dinero a coinbase y sin problema: 

     
    Foto de la retirada:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Un saludo espero que os beneficies!
     
    OTRAS FUENTES:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  11. Me Gusta
    Break reacted to caanmasu in borrar   
    borrar
  12. Me Gusta
    Break got a reaction from arcandios in [Instalador automático] -> Metin2 ¡RELEASE!   
    Hola comunidad,
    He tenido algo de tiempo libre y he empezado a desarrollar un script que realiza la instalación automática de un servidor de Metin2.
     
    Es algo básico, ya que la instalación de un servidor de Metin2 es muy sencilla, pero si te realiza la instalación un script, pues mejor que mejor. A continuación les dejare un vídeo realizando una instalación con el script.
    VIDEO UTILIZANDO EL SCRIPT [YA TERMINADO]
    En el vídeo se instala la base de eternia2.
     
    ¿Como utilizar el script?
    Descargarse el script y ejecutarlo.
    Ejecutamos el siguiente comando:
    fetch http://break.pid2k.es/instalador.sh && sh instalador.sh (He dejado que se obtenga el código por fetch, porque así si actualizo el código, todo el mundo cuando lo vaya a utilizar tendrá las nuevas actualizaciones)
    Si queréis descargaros el script por el navegador y las librerías que se han usado:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Una vez ya descargado y ejecutado el script seleccionemos la opción deseada.
     
     
    El script controla lo siguiente:
    -> En caso de equivocarse al escribir mal el nombre de los files o de la db, antes de descomprimirlo, comprueba si se encuentra en el directorio raíz. Si no se encuentra, solicita de nuevo introducir el nombre del archivo. (En caso de que no se haya terminado de subir, esperar a que este subido por completo, si no entrareis en un bucle hasta que encuentre el archivo)
     
    -> Si el sistema operativo cuenta con una arquitectura de 64 bits, el script lo reconocerá, y preguntara la versión del sistema operativo para poder así descargarse las librerías de 32 bits del repositorio de freebsd, en caso que el script detecte que es una arquitectura de 32 bits, no preguntara el sistema operativo debido a que no es necesario descargarse las librerías.
     
    -> El script da la opción de subir un archivo ".zip" con las librerías, he de destacar que, si nuestro sistema es de 64 bits, las librerías del metin2 tienen que ir en /usr/lib32/ por lo cual, nuestro archivo .zip a la hora de descomprimirse tiene que hacerlo en esa ruta. Para ello descomprimirlo en vuestro pc, y fijarse si se crea una carpeta llamada usr, dentro otra llamada lib32 y dentro de lib32 que estén las librerías. En caso de que estemos en arquitectura 32 bits, la ruta tendría que ser /usr/lib/. 
     
    -> Si nos equivocamos  al escribir el  nombre .zip de las librerías, el script no se detendrá, simplemente se saltará el paso.
     
    -> Solo da privilegios a los directorios /usr/game y a /var/db/mysql/, en caso de que nuestros files se encuentren en otro directorio hay introducir el comando.
     
    PD: El script no controla las librerías que os hace falta a vuestros files especificos para hacerlos correr, el script mete unas librerías standar.
    Tenéis que añadir las librerías que os falten a sus respectivas rutas.
     
    Comentar que os parece, ya se que la mayoría de aquí sabe preparar la maquina para su servidor de Metin2.  (Solo es un detalle para las personas perezosas, o personas que no saben preparar una maquina) 
     
     
    POR ULTIMO
     
    Si cuento con mucho apoyo sobre este aporte, lo próximo que desarrollaré sera un script que realice copias automáticas a una determinada hora de una maquina a otra, así podemos tener guardadas nuestras copias de seguridad en un vps externo y que elimine cada ''x'' tiempo numero de copias, y solicitar que nos muestre el numero de copias. Con esto siempre tendríamos copias de seguridad de nuestro servidor en todo momento, sin tener que hacer nada.
     
    UPDATE VERSION 2
    Mucha gente le gusta instalar los files Arrival2, he creado el script que instala automaticamente la base de Arrival2 con su mysql, y crea usuarios de mysql.
    No hace falta subir ni los files ni la db, solamente ejecutar el script para ello:
    fetch http://break.pid2k.es/instalador_v2.sh && sh instalador_v2.sh  
    Seleccionamos la opción 3 e instala los files con la db, automáticamente. (También instala las librerías)
     
    Un saludo!
  13. Me Gusta
    Break got a reaction from Meet in Systema Expasion de Inventarios   
    Buenas zoneros, pues estaba buscando el sistema de inventarios de expansión y no estaba en el foro. Me he animado a compartirlo aquí también con vosotros.
    Vídeo del sistema:
     
    Link de descarga: 
     
    Fuente metin2dev.org
    Espero que os sirva.
    ¡Saludos!
  14. Me Gusta
    Break reacted to caanmasu in borrar   
    borrar
  15. Me Gusta
    Break got a reaction from acuario in [Guía] Cambiar contraseña de Mysql [DEFINITIVA]   
    Hola Metin2Zone, soy consciente de que hay muchas guías de cambiar contraseña de mysql. Pero como he visto en el chat de metin2zone, comentarios de que no le funcionan la guía o que no esta bien explicado. Lo que voy hacer es una guía definitiva, de recuperar contraseña o cambiar la contraseña de mysql fácilmente.
    Nos podemos encontrarnos en los siguientes casos:
    Caso 1: No se cual es la contraseña del Navicat (mysql)
    (Nota: En los comandos aparecerá "Break#" este es el hostname, de mi vps y en el directorio que me encuentro, no le hagáis mucho caso, solo tenéis que copiar lo que viene detrás)
    Break# /usr/local/etc/rc.d/mysql-server stop Pasaremos a parar lo primero de todo la mysql, para así poder editar la contraseña de los usuarios haciendo una entrada forzosa.
    Break# mysqld_safe --skip-grant-tables &
    Con este comando lo que hacemos es iniciar el servidor en modo seguro.
    Conocimiento sobre este comando que estamos haciendo:
    Break# mysql -u root Entramos a la mysql como usuario root
    mysql# use mysql; Nos movemos a la database mysql, que es la base de datos del sistema de mysql, donde se almacenan los usuarios que existen en la mysql entre otras cosas.
    Aquí podemos reemplazar la contraseña que tenia nuestro usuario root, la cual no conocemos, con el siguiente comando:
    mysql# update user set password=PASSWORD("TUPASSWORD") where user='root'; Ahora saldremos de la mysql:
    mysql# quit Por último quedaría ya solo arrancar la mysql:
    Break# /usr/local/etc/rc.d/mysql-server start  
    Hasta aquí, seria el caso que desconozcamos la contraseña del usuario root, también serviría este caso para cambiar la contraseña del usuario root, pero lo veo mucho lío, esto ultimo se ve mucho mejor en el caso 2.
    Caso 1.1- "En caso de que no hubiésemos tenido éxito en realizar el apartado 1, dejo otras maneras de hacerlo" (AGRADECIMIENTOS A
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. por compartir la idea). Para poder cambiar la clave puedes hacerlo desde la maquina o cambiarla desde el filezila o Winscp y aqui tendras dos opciones de cambiarla.

    La primera es descargar el rar y añadirlo en la carpeta /var/db/mysql darle permiso 777 a los 3 archivos y antes de hacer reboot cambiar en todos los config el usuario y contraseña 

    PLAYER_SQL: localhost sebas Juan870614 player
    COMMON_SQL: localhost sebas Juan870614 common
    LOG_SQL: localhost sebas Juan870614 log
    Si tienes Notepad++ abres todos los config de todos los ch de la db y del auth y le cambias todos de una.

    Haces reboot y ya podras entrar a modificarlo ya como tu quieras.
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Caso 1.2- "En caso de que no hubiésemos tenido éxito en realizar el apartado 1 y 1.1, dejo otras maneras de hacerlo que es muy parecida que el 1.1" 
    Abrimos winscp o filezilla y nos vamos al siguiente directorio:
    /var/db/mysql/mysql
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Descomprimimos el .rar en nuestro pc y subimos los archivos que hay dentro a ese directorio, dirá que si queremos reemplazar, le decimos que si y le damos permisos 777
     
    Por defecto los usuarios que existirán son:
    root@localhost
    root@% 
    Ambos usuarios tienen la contraseña: metin2zone
    Ahora, nos vamos al config de alguno de nuestros channel 
     
    PLAYER_SQL: localhost root passdelosfiles player Nos fijamos la palabra que tiene detras del usuario ''root'' y esa es la pass de los files.
    A partir de aquí en vez de cambiar los configs, podemos hacer el Caso 2, y cambiar la pass por la que hay en los configs, que es mucho más rapido, entrando al navicat con el usuario root y pass metin2zone 
    He de recordar que usemos siempre el usuario de ''localhost'' para los files, ya que es más seguro.
     
     
    Caso 2: Conozco la contraseña de mi usuario de mysql pero no se como cambiarla.
    Este es el mas sencillo, abres el navicat y te logeas.
    Una vez logeado le damos a user:

    Y nos saldrán todos los usuarios que existen en nuestra mysql. Seleccionamos el usuario que queramos cambiar la contraseña, en este caso elegiré el usuario Break y le daré a ''Edit User"

    Ahora la nueva password, la pondremos en Password: y en Confirm Password:
    Una vez puesta le damos a Save y ya estaría cambiada.
    Hasta aquí seria el Caso 2.
     
    Espero que os haya resultado útil esta guía, me he intentado explicar lo mejor posible para que todo el mundo pueda utilizar la guía, sin tener mucho conocimiento de la materia.
    Si se os da más caso que tengáis problema con los usuarios de la mysql o algo, decirlo en los comentarios y agrego la solución a esos casos. Por lo pronto solo se me han ocurrido esos dos.
     
     
    ¡Un saludo y hasta la próxima chicos!
     
     
     
     
  16. Me Gusta
    Break got a reaction from acuario in [Instalador automático] -> Metin2 ¡RELEASE!   
    Hola comunidad,
    He tenido algo de tiempo libre y he empezado a desarrollar un script que realiza la instalación automática de un servidor de Metin2.
     
    Es algo básico, ya que la instalación de un servidor de Metin2 es muy sencilla, pero si te realiza la instalación un script, pues mejor que mejor. A continuación les dejare un vídeo realizando una instalación con el script.
    VIDEO UTILIZANDO EL SCRIPT [YA TERMINADO]
    En el vídeo se instala la base de eternia2.
     
    ¿Como utilizar el script?
    Descargarse el script y ejecutarlo.
    Ejecutamos el siguiente comando:
    fetch http://break.pid2k.es/instalador.sh && sh instalador.sh (He dejado que se obtenga el código por fetch, porque así si actualizo el código, todo el mundo cuando lo vaya a utilizar tendrá las nuevas actualizaciones)
    Si queréis descargaros el script por el navegador y las librerías que se han usado:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Una vez ya descargado y ejecutado el script seleccionemos la opción deseada.
     
     
    El script controla lo siguiente:
    -> En caso de equivocarse al escribir mal el nombre de los files o de la db, antes de descomprimirlo, comprueba si se encuentra en el directorio raíz. Si no se encuentra, solicita de nuevo introducir el nombre del archivo. (En caso de que no se haya terminado de subir, esperar a que este subido por completo, si no entrareis en un bucle hasta que encuentre el archivo)
     
    -> Si el sistema operativo cuenta con una arquitectura de 64 bits, el script lo reconocerá, y preguntara la versión del sistema operativo para poder así descargarse las librerías de 32 bits del repositorio de freebsd, en caso que el script detecte que es una arquitectura de 32 bits, no preguntara el sistema operativo debido a que no es necesario descargarse las librerías.
     
    -> El script da la opción de subir un archivo ".zip" con las librerías, he de destacar que, si nuestro sistema es de 64 bits, las librerías del metin2 tienen que ir en /usr/lib32/ por lo cual, nuestro archivo .zip a la hora de descomprimirse tiene que hacerlo en esa ruta. Para ello descomprimirlo en vuestro pc, y fijarse si se crea una carpeta llamada usr, dentro otra llamada lib32 y dentro de lib32 que estén las librerías. En caso de que estemos en arquitectura 32 bits, la ruta tendría que ser /usr/lib/. 
     
    -> Si nos equivocamos  al escribir el  nombre .zip de las librerías, el script no se detendrá, simplemente se saltará el paso.
     
    -> Solo da privilegios a los directorios /usr/game y a /var/db/mysql/, en caso de que nuestros files se encuentren en otro directorio hay introducir el comando.
     
    PD: El script no controla las librerías que os hace falta a vuestros files especificos para hacerlos correr, el script mete unas librerías standar.
    Tenéis que añadir las librerías que os falten a sus respectivas rutas.
     
    Comentar que os parece, ya se que la mayoría de aquí sabe preparar la maquina para su servidor de Metin2.  (Solo es un detalle para las personas perezosas, o personas que no saben preparar una maquina) 
     
     
    POR ULTIMO
     
    Si cuento con mucho apoyo sobre este aporte, lo próximo que desarrollaré sera un script que realice copias automáticas a una determinada hora de una maquina a otra, así podemos tener guardadas nuestras copias de seguridad en un vps externo y que elimine cada ''x'' tiempo numero de copias, y solicitar que nos muestre el numero de copias. Con esto siempre tendríamos copias de seguridad de nuestro servidor en todo momento, sin tener que hacer nada.
     
    UPDATE VERSION 2
    Mucha gente le gusta instalar los files Arrival2, he creado el script que instala automaticamente la base de Arrival2 con su mysql, y crea usuarios de mysql.
    No hace falta subir ni los files ni la db, solamente ejecutar el script para ello:
    fetch http://break.pid2k.es/instalador_v2.sh && sh instalador_v2.sh  
    Seleccionamos la opción 3 e instala los files con la db, automáticamente. (También instala las librerías)
     
    Un saludo!
  17. Me Gusta
    Break got a reaction from ferhatcnrr in Files Arrival2   
    Te falto el cliente xD 
  18. Me Gusta
    Break reacted to TTV_RANDARON in Nueva interfaz 2021 (Valorada en 75e)   
    Debes iniciar sesión para ver el contenido del archivo adjunto en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  19. Me Gusta
    Break reacted to caanmasu in borrar   
    borrar
  20. Gracias
    Break got a reaction from wille damare in [C++] Auras para todos los miembros del grupo   
    Creo que te refieres donde va ese texto, va en char_skill.cpp. 
  21. Me Gusta
    Break got a reaction from Ghost in [Guía] Cambiar contraseña de Mysql [DEFINITIVA]   
    Hola Metin2Zone, soy consciente de que hay muchas guías de cambiar contraseña de mysql. Pero como he visto en el chat de metin2zone, comentarios de que no le funcionan la guía o que no esta bien explicado. Lo que voy hacer es una guía definitiva, de recuperar contraseña o cambiar la contraseña de mysql fácilmente.
    Nos podemos encontrarnos en los siguientes casos:
    Caso 1: No se cual es la contraseña del Navicat (mysql)
    (Nota: En los comandos aparecerá "Break#" este es el hostname, de mi vps y en el directorio que me encuentro, no le hagáis mucho caso, solo tenéis que copiar lo que viene detrás)
    Break# /usr/local/etc/rc.d/mysql-server stop Pasaremos a parar lo primero de todo la mysql, para así poder editar la contraseña de los usuarios haciendo una entrada forzosa.
    Break# mysqld_safe --skip-grant-tables &
    Con este comando lo que hacemos es iniciar el servidor en modo seguro.
    Conocimiento sobre este comando que estamos haciendo:
    Break# mysql -u root Entramos a la mysql como usuario root
    mysql# use mysql; Nos movemos a la database mysql, que es la base de datos del sistema de mysql, donde se almacenan los usuarios que existen en la mysql entre otras cosas.
    Aquí podemos reemplazar la contraseña que tenia nuestro usuario root, la cual no conocemos, con el siguiente comando:
    mysql# update user set password=PASSWORD("TUPASSWORD") where user='root'; Ahora saldremos de la mysql:
    mysql# quit Por último quedaría ya solo arrancar la mysql:
    Break# /usr/local/etc/rc.d/mysql-server start  
    Hasta aquí, seria el caso que desconozcamos la contraseña del usuario root, también serviría este caso para cambiar la contraseña del usuario root, pero lo veo mucho lío, esto ultimo se ve mucho mejor en el caso 2.
    Caso 1.1- "En caso de que no hubiésemos tenido éxito en realizar el apartado 1, dejo otras maneras de hacerlo" (AGRADECIMIENTOS A
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. por compartir la idea). Para poder cambiar la clave puedes hacerlo desde la maquina o cambiarla desde el filezila o Winscp y aqui tendras dos opciones de cambiarla.

    La primera es descargar el rar y añadirlo en la carpeta /var/db/mysql darle permiso 777 a los 3 archivos y antes de hacer reboot cambiar en todos los config el usuario y contraseña 

    PLAYER_SQL: localhost sebas Juan870614 player
    COMMON_SQL: localhost sebas Juan870614 common
    LOG_SQL: localhost sebas Juan870614 log
    Si tienes Notepad++ abres todos los config de todos los ch de la db y del auth y le cambias todos de una.

    Haces reboot y ya podras entrar a modificarlo ya como tu quieras.
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Caso 1.2- "En caso de que no hubiésemos tenido éxito en realizar el apartado 1 y 1.1, dejo otras maneras de hacerlo que es muy parecida que el 1.1" 
    Abrimos winscp o filezilla y nos vamos al siguiente directorio:
    /var/db/mysql/mysql
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Descomprimimos el .rar en nuestro pc y subimos los archivos que hay dentro a ese directorio, dirá que si queremos reemplazar, le decimos que si y le damos permisos 777
     
    Por defecto los usuarios que existirán son:
    root@localhost
    root@% 
    Ambos usuarios tienen la contraseña: metin2zone
    Ahora, nos vamos al config de alguno de nuestros channel 
     
    PLAYER_SQL: localhost root passdelosfiles player Nos fijamos la palabra que tiene detras del usuario ''root'' y esa es la pass de los files.
    A partir de aquí en vez de cambiar los configs, podemos hacer el Caso 2, y cambiar la pass por la que hay en los configs, que es mucho más rapido, entrando al navicat con el usuario root y pass metin2zone 
    He de recordar que usemos siempre el usuario de ''localhost'' para los files, ya que es más seguro.
     
     
    Caso 2: Conozco la contraseña de mi usuario de mysql pero no se como cambiarla.
    Este es el mas sencillo, abres el navicat y te logeas.
    Una vez logeado le damos a user:

    Y nos saldrán todos los usuarios que existen en nuestra mysql. Seleccionamos el usuario que queramos cambiar la contraseña, en este caso elegiré el usuario Break y le daré a ''Edit User"

    Ahora la nueva password, la pondremos en Password: y en Confirm Password:
    Una vez puesta le damos a Save y ya estaría cambiada.
    Hasta aquí seria el Caso 2.
     
    Espero que os haya resultado útil esta guía, me he intentado explicar lo mejor posible para que todo el mundo pueda utilizar la guía, sin tener mucho conocimiento de la materia.
    Si se os da más caso que tengáis problema con los usuarios de la mysql o algo, decirlo en los comentarios y agrego la solución a esos casos. Por lo pronto solo se me han ocurrido esos dos.
     
     
    ¡Un saludo y hasta la próxima chicos!
     
     
     
     
  22. Me Gusta
    Break reacted to caanmasu in ¡Evento de pesca!   
    Update en el post original!
  23. Me Gusta
    Break got a reaction from Narcisist! Panamera in Systema Expasion de Inventarios   
    Buenas zoneros, pues estaba buscando el sistema de inventarios de expansión y no estaba en el foro. Me he animado a compartirlo aquí también con vosotros.
    Vídeo del sistema:
     
    Link de descarga: 
     
    Fuente metin2dev.org
    Espero que os sirva.
    ¡Saludos!
  24. Me Gusta
    Break reacted to 【ℛ-𝓝】ℛ𝔂𝓼𝒆 in [C++] Guía actualizar Python22 > Python27   
    Buenas, no es nada del otro mundo, pero les traigo una guía sencilla que puedan actualizar su versión de Python 😁😎
     
    Actualizar Python22 > Python27
     
    Comenzamos descargando el archivo Debes iniciar sesión para ver el contenido del enlace en esta publicación. lo descomprimimos y agregamos los archivos en sus respectivas
    carpetas, los de la carpeta "Binario" en la carpeta "extern" de nuestro binario y los archivos de la carpeta "Cliente" los
    agregamos a la carpeta raiz de nuestro cliente, ahora abrimos nuestro source binario con visual studio y comenzamos
    con la edición de las lineas en cada archivo.
     
    Comenzamos abriendo el archivo: Userinterface/Userinterface.cpp
    Buscamos la linea:
    ( lib, "python22.lib" )  
    La reemplazamos por:
    ( lib, "python27.lib" )  
    Ahora abrimos el archivo: ScriptLib/PythonLauncher.cpp
    Buscamos la linea:
    #include <Python-2.2/frameobject.h>  
    La reemplazamos por:
    #include <Python-2.7/frameobject.h>  
    Ahora abrimos el archivo: ScriptLib/PythonLauncher.h
    Buscamos la linea:
    #include <Python-2.2/frameobject.h>  
    La reemplazamos por:
    #include <Python-2.7/frameobject.h>  
    Ahora abrimos el archivo: ScriptLib/PythonMarshal.cpp
    Buscamos la linea:
    #include <Python-2.2/longintrepr.h>  
    La reemplazamos por:
    #include <Python-2.7/longintrepr.h>  
    Ahora abrimos el archivo: ScriptLib/StdAfx.h
    Buscamos todos los:
    #include <Python-2.2  
    Los reemplazamos a todos por:
    #include <Python-2.7  
    Por ultimo abrimos el archivo: ScriptLib/PythonUtils.cpp
    Debajo de:
    #include "StdAfx.h" #include "PythonUtils.h"  
    Dejamos un espacio y agregamos las siguientes lineas:
    #define PyLong_AsLong PyLong_AsLongLong #define PyLong_AsUnsignedLong PyLong_AsUnsignedLongLong  
    Eso sería todo, quedaría compilar el binario y listo, saludos y espero les haya sido de utilidad.
    No olviden dejar su "Me gusta" si te sirvió esta guía 😎
  25. Me Gusta
    Break reacted to Anthony's in [Intro Login] Traducida   
    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:
     
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
    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:
     
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
    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: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Y mi agradecimiento a jfirewall por decirme como hacer funcionar los port.
     
×
×
  • Crear nuevo...