Jump to content

Tabla del Honor

Contenido popular

Showing content with the highest reputation on 22/10/21 en todas las áreas

  1. Descarga: https://mega.nz/file/fWAClSYJ#LyO0UftPIxe8xrc14QMlfxqEOTZmCdr7GPBmBMNUdXc Creditos: Just4Metin2
    2 puntos
  2. Ryukend

    Web Traducida [Noveria]

    Buenas amigos, vi la web de Noveria2 en varios foros y me gusto, entonces la traduje y la use unos días en un servidor, ahora he decidido subirla, la traduje todo funciona, Ranking, Cambio de Pass almacen y cuenta y más, lo único que no traduje fue el Install, pero es sencilla la instalación. Aquí una imagen de como es la web: Link de descarga: http://goo.gl/DJoLbJ Pass del .Rar : Ryukend
    2 puntos
  3. DESCARGA: https://mega.nz/file/VepTXIzB#FKSYj8hr1Gbr1EP9YkLz1ppGFFE8Y7sVDKSR3XSC6nQ
    1 punto
  4. Atuendos Pack (86 Carpetas) Accesorios (36 Carpetas) https://mega.nz/file/GMtVQayb#2YK6qne_tEbcsy0xN0Uk2fZME3iceeJ9rn6F-2emIHU https://mega.nz/file/PRlDVAqY#FtzbEDzkMa_pOFgS64vPmgqhzlLSHophKmwORd22gsI
    1 punto
  5. [40250] Archivos limpios + Cliente + Src [15 idiomas disponibles] Mi objetivo era hacer que un archivo de servidor r40250 fuera lo más oficial posible en comparación con lo que GF tenía cuando sus archivos se filtraron a principios de 2014. No se agregaron nuevos sistemas, solo se corrigieron errores. Aunque pasé varias horas probando, es posible que todavía haya errores. Por favor, infórmeme de los errores para que pueda corregirlos en el futuro, quiero que este proyecto esté lo más libre de errores posible. Idiomas disponibles: EN / DE / HU / FR / CZ / DK / ES / GR / IT / NL / PL / PT / RO / RU / TR Lea Languages.txt para aprender cómo cambiar el idioma predeterminado. SSH para VM: root / 123456789 MySQL: root/ 123456789 En el juego: admin / 123456789 Alias y sus comandos: iniciar cd /usr/metin2/server && sh start.sh apagar cd /usr/metin2/server && sh close.sh limpiar cd /usr/metin2/server && sh clear.sh backup cd /usr/metin2/server && sh backup.sh cargarquest cd /usr/metin2/server/share/locale/english/quest && python make.py limpiardb cd /usr/metin2/src/db/src && gmake clean comp-db cd /usr/metin2/src/db/src && gmake limpiargame cd /usr/metin2/src/game/src && gmake clean compilargame cd /usr/metin2/src/game/src && gmake Lea Changelog.txt para obtener más información sobre los cambios que hice. Agradecimientos especiales a: @Mali por los archivos src de cliente y servidor limpios y actualizados. @Sanchez por el cliente base 2014. @Veltor88 por el paquete de translate.lua. @Fazer por el paquete de locale_string.txt. Hice un pequeño video sobre la instalación del archivo de servidor (vm) y el cambio de idioma: Descarga / Download [CLIC AL BOTÓN DE "ME GUSTA" PARA VER EL ENLACE] [CLICK ON THE "LIKE" BUTTON TO SEE THE LINK] Créditos: TMP4
    1 punto
  6. mrbraveras

    DMG hack en .mix

    Buenas zoneros, aquí os dejo un dmg hack de lalaker1 en formato .mix, solo lo metéis en el cliente de vuestro privado e iniciáis el juego normalmente. Al iniciar el juego debería abrir una ventana junto con el juego como ésta: (Si no abre o da algún error al iniciar metin, es porque tiene protección) Auto damage: Hace daño multiplicado al mob o player que hayas seleccionado con el ratón (no es necesario atacar). Auto damage on attack: Hace daño multiplicado a los mobs o players que estés pegando. (Cabe decir que en ciertos servidores no influye el modo de "dmg" que pongas, sólo funcionará uno de ellos.) Descargas> Funcionando en adventure, alianza, atardecer, destino, reborn, tsuki, faraón... etc Aclaro que no es un virus, por mucho que vuestro antivirus diga lo contrario, el mio también lo detecta como virus y me lo borra, por eso es recomendable añadir una excepción en la carpeta donde vaya a estar, así no lo borra. Decir también que el archivo que os ofrezco no lo he creado yo, simplemente lo encontré en un foro rumano, está modificado para que no haga falta inyector ya que el original de lalaker1 viene con inyector.
    1 punto
  7. Seru

    [Taskbar] Steel Task

    Bueno, me aburría esta tarde y me he entretenido un poco, viendo la sección, está claro que no la he adaptado, os la dejo para el/la que la quiera adaptar, las barras de arriba no van sueltas, sólo las he apartado para que se vea como queda todo, pero van abajo... https://mega.co.nz/#!ewo33CKT!ODSzz6GWB8AmqKcowdl1BlI-JJ0_t3PioZ5D-gIVZIc
    1 punto
  8. Buenas dias hoy les traigo esta interfaz para los que les guste puedan ponerla Link de Descarga https://mega.nz/file/Zc5UzaoA#8U60aZgtGyFn0F_7xtgarD13FVNfFkwJZ8ym8nFavU8
    1 punto
  9. Jfirewall

    [RELEASE] Nuevo Taskbar

    bueno hace unas horas vi publico el psd en epvp y tenia unas cuentas horas libre y cree el codigo la interface funciona totalmente ademas esta zona lleva mucho tiempo sin actividad ademas toca ponerle motivacion al foro para poder sacar mas provecho. pd: si ya existe el codigo publico pues no lo sabia me gusta hacer mis propias cosas y no estar copiando codigos. buena noche code: jfirewall diseño: feistygraphic https://mega.co.nz/#!FVkxAQ4b!i3yrnQHo6hgiYNifyQ7gcOCDXHF0AcDcwBu_86plA70
    1 punto
  10. XhebasT1an

    VDI SERVER FILES HOVSA

    Files HOVSA los cuales vi que muchos no pudieron entrar por algún motivo, acá dejo la VDI, el servidor prende y se puede entrar a la cuenta. Cambiar la ip de la VDI a la que te sirva Los files que montaron se deben configurar varias líneas del source del binario y del cliente lo cual no se realizo. El archivo Binario y Source es el mismo que estaba en el post anterior Info del VDI Verificando el VDI se debe realizar el siguiente procedimiento para que no saque error de mysql * Vamos a la ruta var/db/mysql y borramos los siguientes archivos auto.cnf ib_logfile0 ib_logfile1 ibdata1 Xbastian.org.err Xbastian.org.pid * En la maquina virtual colocamos el comando service mysql-server restart * reboot y listo ya nos vamos a la ruta /m2_svfiles/main y colocamos comando en la maquina virtual sh admin_panel.sh 1 para prender 3 para limpiar Screen dentro del juego Binario Eternexus Source VDI 11.3 GCC8 con mysql 5.6 por si la necesitan para otro server. Descargar VDI GCC8 11.3 MYSQL 5.7 Cliente Se actualiza con una nueva VDI con mysql 5.7 y se arregla el error que sacaba al intentar compilar las quest que era un error de libreria VDI GCC8 11.3 MYSQL 5.7
    1 punto
  11. map_pesca.rar map_pesca_ruben.rar
    1 punto
  12. https://mega.nz/file/jVATSYLY#9DBMWhPRyNOWD-DK2nS7gSYeN7Qv0YA57GpLm9l3yaM https://mega.nz/file/f2p0UKAK#4GZuFgBdOJNRArx0Vp-HZfEvswvEvt50sAmXfrlSXM8 Los códigos fuente del lado del servidor relacionados con la tienda fuera de línea se compilan con gcc8. Los códigos fuente del lado del cliente se compilan con Visual Studio 2019. Las herramientas están compiladas con Visual Studio 2019. Está usando MySQL 5.6. Mis scripts son compatibles con python2.7. No hay qc.core disponible en la sección de misiones. Los registros de sistema y MySQL innecesarios están desactivados. Los contenidos de la biblioteca del lado del servidor utilizados son; Aumento minimizado 1.68.0 Cryptopp 7.0.0 Libfmt 5.2.1 Rapidjson 1.1.0 Msl v1.2.2 El contenido de la biblioteca del lado del cliente que uso son; Impulso minimizado -1.67.0 Cryptopp 7.0.0 IL-1.8.0.1 lzo-2.10 libjpeg-9c granny2 (2.4 2.7 2.8 2.9 2.11) python2 (2.7) libfmt 5.2.1 lz4 1.9.1 rapidjson 1.1.0 msl v1.2.2 FreeBSD 11.2 32 y 64 bit y superior puede funcionar sin problemas
    1 punto
  13. ChuchoGamer

    New Armaduras 2021

    Buenas noches Aqui les Traigo estas Armaduras que son bastante buenas yo ya las instale y funcionan de maravilla aqui les dejo foto foto de la armaduras https://ibb.co/XJ6hBXy Link de descarga https://mega.nz/file/Ln4kUSbJ#MmLM4sXptKvWWGkiBoHahrDGmmEzz7yGNINctRgkVUw Fuente: turkmmo
    1 punto
  14. con esta web podremos generar contraseñas mysql para no andar poniendo una web y crear contraseñas aora ya nosotoros las podemos crear tan facil y sinple mysqlgenerador donde dise pasword ponemos cualñquier contraseña una ves puesta le damos abajo en el botonsito create password donde se pone en verde copiamos con todo y aterisco y lo pegamos en nuesto password de acoount en esa tabla y ya quedo guardamos y nos loguamos al server
    1 punto
  15. Link: https://www.mediafire.com/file/snyj1pxbc32646v/Neue_Waffen_-_H4ZEJ.7z/file
    1 punto
  16. Estos Files estan en turkmmo asi que no creo que infrinja ninguna regla ya que están posteados en otros foros. Los Files son MartySama y según el post son la versión 5.3 ya trabajados, no esta confirmado que lo sean ya que normalmente los quitan por que ellos los venden :v , contienen sistema pet oficial, tienda offline de Great, monturas funcionando correctamente y no se que mas sistemas tiene, son la mejor base que haya al momento según el foro y otros lados son los mas robustos, les dejo imágenes de referencia, el locale_inc y el service o define de los Files. Cabe mencionar que ya los probé y funcionan sin problemas, puede tener multi lenguaje por lo menos en cliente pero seria cosas de ustedes hacer esa tarea titanica xd, yo añadí español solo de prueba y funciono :v ID de BSD: root Contraseña de BSD: turkmmo Mysql: no hay informacion pero en un comentario les dejo la forma facil de cambiar la contraseña. Locale_inc #pragma once ////////////////////////////////////////////////////////////////////////// // ### Default Ymir Macros ### #define LOCALE_SERVICE_EUROPE #define ENABLE_COSTUME_SYSTEM #define ENABLE_ENERGY_SYSTEM #define ENABLE_DRAGON_SOUL_SYSTEM #define ENABLE_NEW_EQUIPMENT_SYSTEM // ### Default Ymir Macros ### ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // ### New From LocaleInc ### #define ENABLE_PACK_GET_CHECK #define ENABLE_CANSEEHIDDENTHING_FOR_GM #define ENABLE_PROTOSTRUCT_AUTODETECT #define ENABLE_PLAYER_PER_ACCOUNT5 #define ENABLE_LEVEL_IN_TRADE #define ENABLE_DICE_SYSTEM #define ENABLE_EXTEND_INVEN_SYSTEM #define ENABLE_LVL115_ARMOR_EFFECT #define ENABLE_SLOT_WINDOW_EX #define ENABLE_TEXT_LEVEL_REFRESH #define ENABLE_USE_COSTUME_ATTR #define WJ_SHOW_MOB_INFO #ifdef WJ_SHOW_MOB_INFO #define ENABLE_SHOW_MOBAIFLAG #define ENABLE_SHOW_MOBLEVEL #endif // ### New From LocaleInc ### ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // ### From GameLib ### #define ENABLE_WOLFMAN_CHARACTER // #define ENABLE_MAGIC_REDUCTION_SYSTEM #define ENABLE_MOUNT_COSTUME_SYSTEM #define ENABLE_WEAPON_COSTUME_SYSTEM // ### From GameLib ### ////////////////////////////////////////////////////////////////////////// /* ### New System Defines - Extended Version ### */ // if is define ENABLE_ACCE_SYSTEM the players can use shoulder sash // if you want to use object scaling function you must defined ENABLE_OBJ_SCALLING #define ENABLE_ACCE_SYSTEM #define ENABLE_OBJ_SCALLING // if you want use SetMouseWheelScrollEvent or you want use mouse wheel to move the scrollbar #define ENABLE_MOUSEWHEEL_EVENT //if you want to see highlighted a new item when dropped or when exchanged #define ENABLE_HIGHLIGHT_NEW_ITEM // it shows emojis in the textlines #define ENABLE_EMOJI_SYSTEM #define ENABLE_NEW_PET_SYSTEM //Tr Levelli Pet Sistemi #define ENABLE_PET_ATTR_DETERMINE //Tr Yeni Pet Güncellemesi #define ENABLE_NEW_PET_SYSTEM_FEED //Lvlli Pet Mama Sistemi #define ENABLE_CONQUEROR_LEVEL #define ENABLE_DISCORD_RPC #define ENABLE_DETAILS_UI #define BL_PRIVATESHOP_SEARCH_SYSTEM #define ENABLE_EXTRA_APPLY_BONUS // Yeni Bonuslar Modulu #define ENABLE_ELEMENTAL_APPLY_BONUS // Elemental Bonuslar Modulu #define ENABLE_OFFLINE_SHOP // Offline Shop System; #define __LOADING_TIP__ #define ENABLE_QUEST_RENEWAL // Quest page renewal #define ENABLE_OFFICAL_CHARACTER_SCREEN //Tr Karakter Seçme Ekranı #define ENABLE_CHEQUE_SYSTEM #define ENABLE_OFFLINE_SHOP_USE_CHEQUE /* ### New Debugging Defines */ // #define ENABLE_PRINT_RECV_PACKET_DEBUG Service o Define de game #ifndef __INC_METIN2_COMMON_DEFINES_H__ #define __INC_METIN2_COMMON_DEFINES_H__ #define ENABLE_QUEST_CATEGORY #define ENABLE_D_NJGUILD #define ENABLE_FULL_NOTICE #define ENABLE_NEWSTUFF #define ENABLE_PORT_SECURITY #define ENABLE_BELT_INVENTORY_EX #define ENABLE_CMD_WARP_IN_DUNGEON // #define ENABLE_ITEM_ATTR_COSTUME // #define ENABLE_SEQUENCE_SYSTEM enum eCommonDefines { MAP_ALLOW_LIMIT = 32, // 32 default }; #define ENABLE_WOLFMAN_CHARACTER #ifdef ENABLE_WOLFMAN_CHARACTER #define USE_MOB_BLEEDING_AS_POISON #define USE_MOB_CLAW_AS_DAGGER // #define USE_ITEM_BLEEDING_AS_POISON // #define USE_ITEM_CLAW_AS_DAGGER #define USE_WOLFMAN_STONES #define USE_WOLFMAN_BOOKS #endif #define ENABLE_PLAYER_PER_ACCOUNT5 #define ENABLE_DICE_SYSTEM #define ENABLE_EXTEND_INVEN_SYSTEM #define ENABLE_MOUNT_COSTUME_SYSTEM #define ENABLE_WEAPON_COSTUME_SYSTEM // #define ENABLE_MAGIC_REDUCTION_SYSTEM #ifdef ENABLE_MAGIC_REDUCTION_SYSTEM // #define USE_MAGIC_REDUCTION_STONES #endif #define DISABLE_STOP_RIDING_WHEN_DIE // if DISABLE_TOP_RIDING_WHEN_DIE is defined , the player does not lose the horse after his death #define ENABLE_ACCE_SYSTEM //fixed version #define ENABLE_HIGHLIGHT_NEW_ITEM //if you want to see highlighted a new item when dropped or when exchanged #define __ENABLE_KILL_EVENT_FIX__ //if you want to fix the 0 exp problem about the when kill lua event (recommended) #define ENABLE_EXTRA_APPLY_BONUS // Yeni Bonuslar Modulu #define ENABLE_ELEMENTAL_APPLY_BONUS // Yeni Elemental Bonuslar Modulu #define OFFLINE_SHOP // Çevrimdışı Pazar #define GIFT_SYSTEM // Hediye Sistemi #define SHOP_TIME_REFRESH 1*60 // Pazarların Yenilenme Süresi #define SHOP_BLOCK_GAME99 // Kanal 99da Pazarı Bloklama #define SHOP_DISTANCE // Pazarlar Arası Mesafe #define SHOP_AUTO_CLOSE // Pazarda İtem Kalmayınca Otomatik Kapanması //#define SHOP_ONLY_ALLOWED_INDEX // Her Mapta Belirli Sayıda Pazar //#define SHOP_HIDE_NAME // Pazar İsimlerini Gizleme #define SHOP_GM_PRIVILEGES GM_IMPLEMENTOR // Pazar açmak için minimum gm seviyesi #define BL_PRIVATESHOP_SEARCH_SYSTEM #define ENABLE_NEW_PET_SYSTEM //Tr Levelli Pet Sistemi #define ENABLE_PET_ATTR_DETERMINE //Tr Yeni Pet Güncellemesi #define ENABLE_CONQUEROR_LEVEL #define __LOADING_TIP__ #define ENABLE_CHEQUE_SYSTEM #define ENABLE_OFFLINE_SHOP_USE_CHEQUE #define ENABLE_SHOP_USE_CHEQUE #endif IMAGENES: Links Google Drive MEGA, Actualizaciones no probadas por mi.
    1 punto
  17. ChuchoGamer

    pagina web #1

    Hola buenas tarde les comparto esta web que esta bastante buena y funciona bien les dejo foto y link de descargar https://ibb.co/ByzQFHk link de descarga https://www.mediafire.com/file/5n68r4hcxoez07s/Darkbey-D4rkW0rld-OldSchool-Tema.rar/file
    1 punto
  18. MiGueLiT0

    Pagina Web Simple

    DESCARGA: http://uploaded.net/file/j521y15j
    1 punto
  19. Una guía rápida que recopile e hice a mi manera hace unos minutos, ya que quería eliminar las banderas de los reinos en los NPC. Les dejo una imagen ilustrativa de que funciona correctamente, y un link por si lo quieren guardar para un futuro. Google Drive Ocultar la bandera del reino de todos los NPCs. En Source Binario Abrir: UserInterface/InstanceBaseEffect.cpp // Buscar: void CInstanceBase::__AttachEmpireEffect(DWORD eEmpire) // Abajo buscar: if (IsResource()) return; // Agregar abajo de return; #ifdef ENABLE_HIDE_EMPIRE_FLAGS if (IsNPC()) return; #endif // Quedaria de esta manera: if (IsResource()) return; #ifdef ENABLE_HIDE_EMPIRE_FLAGS if (IsNPC()) return; #endif Abrir UserInterface/Locale_inc.h // Agregar en alguna parte: #define ENABLE_HIDE_EMPIRE_FLAGS // ADVERTENCIA: En el cliente si llegas a tener este error en sysser: 1022 01:03:34375 :: File "game.py", line 2272, in BINARY_Highlight_Item 1022 01:03:34375 :: AttributeError 1022 01:03:34375 :: : 1022 01:03:34375 :: 'NoneType' object has no attribute 'Highligt_Item' 1022 01:03:34375 :: // Busca esto en game.py def BINARY_Highlight_Item(self, inven_type, inven_pos): self.interface.Highligt_Item(inven_type, inven_pos) // Y reemplaza con esto: def BINARY_Highlight_Item(self, inven_type, inven_pos): if self.interface: self.interface.Highligt_Item(inven_type, inven_pos) // Fin. Lo hice de esta manera por si en un futuro deseas volver a ver las banderas, solo debes desactivar el define con una doble barra. les dejo un ejemplo de la manera manera correcta: // #define ENABLE_HIDE_EMPIRE_FLAGS No olviden que tambien tendrian que dejar la linea de game.py original. [D]ELARO
    1 punto
  20. src Cliente/Gamelib/ActorInstanceBattle.cpp Buscar: Agregar abajo: Una pequeña contribución a la comunidad.
    1 punto
  21. Hola, amigos de Metin Zone. He visto este post en otro foro y he decidido traerlo a zone, ya que son una base estable y de aquí pueden empezar muchos sin algunos errores. Inicialmente estos Files + Source son Pagos, pero los traigo gratis, ya que compartir es vivir, oh al menos eso dicen, sin mas que decir, los dejo con ello. Cito Texto Anexado a los Files y Source: Hola, compartí la fuente principal hace meses, pero no me percate de muchos problemas, el gremio, alquimia tenían problemas, etc. Cerré el tema para crear uno nuevamente. Este es el nuevo. No hay problemas en muchos sistemas oficiales como el sistema de alquimia. Les deseo buen uso a quienes lo usen.Una pequeña nota; No tomé la infraestructura de nadie, o no tomé la infraestructura de la parte de alguien. El proyecto; Mainline FUENTE Fix. Cliente; Granny 2.9 Python 2.7 Contraseña de Navicat: 123456 personaje GM; ID: root PASS: 123456 Comandos de compilación; / usr / mainlinesource / Server gmake clean & gmake all o el comando anterior se puede hacer de una manera clásica Errores Solucionados ------------------------------------->Se Aumento el Tamaño de los Boos <--------------------------------------- ------------------------------------->Info. Hora, Nivel En MP <--------------------------------------- ------------------------------------->Atuendos y Vestidos de Boda Fix <--------------------------------------- -------------------------------------> Objetos de "0" Yang cambian a "Gratis" <--------------------------------------- ------------------------------------->Hoguera Fixeada <--------------------------------------- ------------------------------------->Bloqueo de Comercio mientras se esta TRANSFORMADO <--------------------------------------- ------------------------------------->Alquimia Sin Coste <--------------------------------------- ------------------------------------->Alquimia Sin Coste <--------------------------------------- ------------------------------------->Mensaje de Área Protegida <--------------------------------------- ------------------------------------->Cambio de Color a Signos de Reino [J] [S] [C] <--------------------------------------- ------------------------------------->Descarga <--------------------------------------- Fuente: Turkmmo
    1 punto
  22. link actualizado por mi: https://mega.nz/file/Z45AxRgQ#vvTcoyr8omniDOZgnzh6ihufQ3G_W0PZrmqBY_M9i98
    1 punto
  23. caanmasu

    ¡Evento de pesca!

    --------------------------------------------------- UPDATE! He puesto multilanguage la quest. En el momento está en español e inglés pero está en variables de translate, así que se puede usar en cualquier servidor internacional, solo se agregan las variables de los otros idiomas. Esta quest es para que se pueda pescar todo lo que quieras en el mar sin tener que modificar ningún archivo en la base! Otra actualización que hice fue que, mientras el evento esté activo y yo como GM agregue o elimine un pez (objeto) va a avisar a todos en un anuncio. ¿La quieres? ------------------------------------------------------- ¡Hola a todos! He sacado de mi baúl de quests un evento de pesca El evento consiste en pescar objetos que el GM agregue a la lista de peces. Saludos a mi amigo @Anthony's que aparece en el vídeo. Vídeo: Instrucciones: El GM activa el evento y asigna la duración. Hay un menú donde aparecen todos los objetos posibles para pescar, y al seleccionar alguno, se puede elegir como modelo para agregar el objeto que se quiera. Una vez agregado, queda en la lista de Objetos especiales que se puede ver en el Pescador y en el NPC donde se activa el evento. Los objetos agregados se pueden eliminar desde la lista de Objetos especiales. Se puede terminar el evento forzadamente. FAQ: ¿Si agrego un objeto, se pueden seguir pescando los peces normales? Sí ¿Qué sucede cuando agrego un pez? ¿en dónde queda? Queda arriba del pez modelo, o sea, del pez elegido. Si elegiste Pez pequeño como modelo, en el fishing.txt va a quedar tu nuevo objeto arriba de esa línea. ¿Si se termina el evento, no saldrán los objetos especiales? Por supuesto que no. Y tampoco se eliminarán los objetos especiales sino que seguirán guardados en la lista. ¿Por qué al pescar objetos con socket aparece una rozadura en un socket? Ya no recomiendo esto, por favor no poner objetos equipables para pescar ¿Si elimino un pez de los normales, lo puedo volver a agregar después? No. Hay que hacer una copia de fishing.txt ¿Por qué vi un tiempo de 30 segundos cuando se iba a activar el evento? Porque era para hacer pruebas, eso ya no estará. ¿Por qué hay que tomar como modelo otro objeto? Porque los parámetros de los peces son muy complejos, y para más facilidad solo se copia y se pega la línea. ¿Cuánto cuesta? Escríbeme para hacer un trato. El servicio cuenta desde la instalación hasta las actualizaciones que haga del evento. Esto fue todo amigos Discord: Camilo#0869
    1 punto
  24. Algunos de mis amigos me han preguntado este error, la descripción del error está en rar, les deseo un buen día. Link de descarga
    1 punto
  25. Randaron

    Nuevas City Unicas

    Imagenes: https://forum.turkmmo.com/konu/3442159-metin2-yeni-koy-gorunumleri-ucretsiz-paylasim-2016-ilk-defa-bu-forumda/ Dowload: https://mega.nz/#!ag1FxJTJ!GxKA6eRk5__565m5lKsL7k0bbUR0lPcqGRac3qAX9Y0
    1 punto
  26. nuevo link : https://mega.nz/file/Flg0jQwL#hq6H4xNqxsc1lxkN9LYDYKiGf-7e7DBjWeKnnNh1d3Q
    1 punto
  27. danhakhavro

    Metin2CMS v2.12

    Impossible to make changes. https://gyazo.com/4faca57c3ee77b52f6238b6428ab5e22 Somebody get that problem ?
    1 punto
  28. Aquí os dejo un post de un foro portugués: Tech-Gamers http://www.tech-gamers.pt/index.php?/topic/33451-metin2-websites/
    1 punto
  29. Buenas Hoy traigo los files ROM2 que están posteados en este foro y en muchos mas pero viene sin la parte del cliente y el pack toca compilarlo por completo, Acá les dejo el cliente completo. Modificaciones 1. Se quito el Lycan solo del cliente, ósea que no saldrá para que se pueda seleccionar. Como solo es del cliente no se puede borrar las líneas del item_proto.txt del lycan si lo hacen les sacara error 2. Se activo el Sistema ver Drop (Target mob system) el cual ya venia incluido en el Source y Binario pero le habían eliminado las líneas del cliente. https://gyazo.com/f961d5364e9253a80169a70c3490a319 Cliente Completo Encriptador de extensiones Binario VDI 9.3 32 bits VDI usuario: root pass: mt2zone mysql usuario : root pass: 123456 Para prender puedes colocar cd /usr/home/Xbastian seguido sh panel.sh 1 limpiar logs 2 encender ch1 3 encender ch2 3 y 4 encender ch 3 y ch 4 6 limpiar eso creo 7 para crear copia del db game y del src para Compilar source cd /usr/Xbastiansrc seguido gmake y esperas que compile todo el source, los archivos salen directamente en la carpeta usr/home/Xbastian/Share/Source la cual tiene los accesos directos ya creados en cada ch Files con Lykan comprimir archivo root y locale Files sin Sin Lykan comprimir archivo root y locale game Si descargas la VDI no es necesario descargarlo mysql Si descargas la VDI no es necesario descargarlo Source Si descargas la VDI no es necesario descargarlo Aunque son viejos los files no los posteen en otros foros.
    1 punto
  30. Jfirewall

    Interface New Age

    Pues tengo mas de 25 interfaces xd y uso unas pocas para motivos personales. bueno en fin a nadie le importa aca les traigo la del new age un servidor que hiba a salir que era del akroma y yo me robe ese diseño hace mas de 6 meses o 8 meses el neox me saco el diseño y yo hice los script antes los habia hecho pero con errores ahora esta totalmente funcional para todas las resoluciones etc.. y a mi no me gusta entonces se las comparto creditos : jfirewall script neox por recortarla no siendo mas disfrutenla. https://mega.co.nz/#!NA91XSwT!kvKxGkxkJgmI-As8RxzQeKT9j2txmrmQjIP4YIahxDk saludos
    1 punto
  31. Buenas, hace rato no posteo nada, hace poco comence con esto de las quest y de a poco he ido mejorando. Hace un tiempo postee una quest donde consistia que los metines dropearan piedras +4 al azar. Gracias a caanmasu por comentarme y dejar sus conocimientos, pude mirar y probar por mi mismo mas a fondo las funciones, y tratar de achicar codigo. Aqui esta una nueva quest de drop de piedras al azar, que la disfruten. piedrasxd.lua
    1 punto
  32. Buenas como muchos sabréis hay un post de esta intro login: Ami me gusto y decidí usarla para mi Versión2 de mi servidor. Así que la traduje 100% al Español y como a muchos le gustaron y pocos saben hacerla funcionar o traducir. #A lo de traducir me refiero que en el post Original hubo mucha polémica de como se traducía o montaba la intro login. "Eso paso en Alemania." Bueno yo os daré los archivos necesarios y también un mini tuto de como hacerla funcionar. Bien lo primero que haremos será lo siguiente: Descompilar root y ir al archivo: "intrologin". Y lo remplazaremos por lo siguiente: import dbgimport appimport netimport uiimport imeimport sndimport wndMgrimport musicInfoimport serverInfoimport systemSettingimport ServerStateCheckerimport localeimport constInfoimport uiCommonimport timeimport ServerCommandParserimport imeimport uiScriptLocaleimport chatimport sysimport md5import backgroundimport osimport stringimport constinfoimport linecache########Config########DEINEIP = ""CH1PORT = CH2PORT = CH3PORT = CH4PORT = AUTHPORT = SERVERNAME = "Aeternum2"LOGINDATENSPEICHERN = 0 #0 = aus / 1 = anFORUMLINK = ""YOUTUBELINK = ""FACEBOOKLINK = ""#########################Ab hier nichts mehr ändern!######RUNUP_MATRIX_AUTH = FALSENEWCIBN_PASSPOD_AUTH = FALSELOGIN_DELAY_SEC = 0.0SKIP_LOGIN_PHASE = FALSESKIP_LOGIN_PHASE_SUPPORT_CHANNEL = FALSEFULL_BACK_IMAGE = TRUEPASSPOD_MSG_DICT = {}VIRTUAL_KEYBOARD_NUM_KEYS = 46VIRTUAL_KEYBOARD_RAND_KEY = FALSECH1STATE = 0CH2STATE = 0CH3STATE = 0CH4STATE = 0def Suffle(src): if VIRTUAL_KEYBOARD_RAND_KEY: items = [item for item in src] itemCount = len(items) for oldPos in xrange(itemCount): newPos = app.GetRandom(0, itemCount-1) items[newPos], items[oldPos] = items[oldPos], items[newPos] return "".join(items) else: return srcif locale.IsNEWCIBN() or locale.IsCIBN10(): LOGIN_DELAY_SEC = 20.0 FULL_BACK_IMAGE = TRUE NEWCIBN_PASSPOD_AUTH = TRUE PASSPOD_MSG_DICT = { "PASERR1" : locale.LOGIN_FAILURE_PASERR1, "PASERR2" : locale.LOGIN_FAILURE_PASERR2, "PASERR3" : locale.LOGIN_FAILURE_PASERR3, "PASERR4" : locale.LOGIN_FAILURE_PASERR4, "PASERR5" : locale.LOGIN_FAILURE_PASERR5, }elif locale.IsYMIR() or locale.IsCHEONMA(): FULL_BACK_IMAGE = TRUEelif locale.IsHONGKONG(): FULL_BACK_IMAGE = TRUE RUNUP_MATRIX_AUTH = TRUE PASSPOD_MSG_DICT = { "NOTELE" : locale.LOGIN_FAILURE_NOTELEBLOCK, }elif locale.IsJAPAN(): FULL_BACK_IMAGE = TRUEdef IsFullBackImage(): global FULL_BACK_IMAGE return FULL_BACK_IMAGEdef IsLoginDelay(): global LOGIN_DELAY_SEC if LOGIN_DELAY_SEC > 0.0: return TRUE else: return FALSEdef IsRunupMatrixAuth(): global RUNUP_MATRIX_AUTH return RUNUP_MATRIX_AUTH def IsNEWCIBNPassPodAuth(): global NEWCIBN_PASSPOD_AUTH return NEWCIBN_PASSPOD_AUTHdef GetLoginDelay(): global LOGIN_DELAY_SEC return LOGIN_DELAY_SEC app.SetGuildMarkPath("test")class ConnectingDialog(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.__LoadDialog() self.eventTimeOver = lambda *arg: None self.eventExit = lambda *arg: None def __del__(self): ui.ScriptWindow.__del__(self) def __LoadDialog(self): try: PythonScriptLoader = ui.PythonScriptLoader() PythonScriptLoader.LoadScriptFile(self, "UIScript/ConnectingDialog.py") self.board = self.GetChild("board") self.message = self.GetChild("message") self.countdownMessage = self.GetChild("countdown_message") except: import exception exception.Abort("ConnectingDialog.LoadDialog.BindObject") def Open(self, waitTime): curTime = time.clock() self.endTime = curTime + waitTime self.Lock() self.SetCenterPosition() self.SetTop() self.Show() def Close(self): self.Unlock() self.Hide() def Destroy(self): self.Hide() self.ClearDictionary() def SetText(self, text): self.message.SetText(text) def SetCountDownMessage(self, waitTime): self.countdownMessage.SetText("%.0f%s" % (waitTime, locale.SECOND)) def SAFE_SetTimeOverEvent(self, event): self.eventTimeOver = ui.__mem_func__(event) def SAFE_SetExitEvent(self, event): self.eventExit = ui.__mem_func__(event) def OnUpdate(self, state): lastTime = max(0, self.endTime - time.clock()) if 0 == lastTime: self.Close() self.eventTimeOver() else: self.SetCountDownMessage(self.endTime - time.clock()) def OnPressExitKey(self): #self.eventExit() return TRUEclass LoginWindow(ui.ScriptWindow): IS_TEST = net.IsTest() def __init__(self, stream): print "NEW LOGIN WINDOW ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self) net.SetPhaseWindow(net.PHASE_WINDOW_LOGIN, self) net.SetAccountConnectorHandler(self) self.matrixInputChanceCount = 0 self.lastLoginTime = 0 self.inputDialog = None self.connectingDialog = None self.stream=stream self.isNowCountDown=FALSE self.isStartError=FALSE self.xServerBoard = 0 self.yServerBoard = 0 self.loadingImage = None self.virtualKeyboard = None self.virtualKeyboardMode = "ALPHABET" self.virtualKeyboardIsUpper = FALSE def __del__(self): net.ClearPhaseWindow(net.PHASE_WINDOW_LOGIN, self) net.SetAccountConnectorHandler(0) ui.ScriptWindow.__del__(self) print "---------------------------------------------------------------------------- DELETE LOGIN WINDOW" def Open(self): ServerStateChecker.Create(self) print "LOGIN WINDOW OPEN ----------------------------------------------------------------------------" self.loginFailureMsgDict={ #"DEFAULT" : locale.LOGIN_FAILURE_UNKNOWN, "ALREADY" : locale.LOGIN_FAILURE_ALREAY, "NOID" : locale.LOGIN_FAILURE_NOT_EXIST_ID, "WRONGPWD" : locale.LOGIN_FAILURE_WRONG_PASSWORD, "FULL" : locale.LOGIN_FAILURE_TOO_MANY_USER, "SHUTDOWN" : locale.LOGIN_FAILURE_SHUTDOWN, "REPAIR" : locale.LOGIN_FAILURE_REPAIR_ID, "BLOCK" : locale.LOGIN_FAILURE_BLOCK_ID, "WRONGMAT" : locale.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER, "QUIT" : locale.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, "BESAMEKEY" : locale.LOGIN_FAILURE_BE_SAME_KEY, "NOTAVAIL" : locale.LOGIN_FAILURE_NOT_AVAIL, "NOBILL" : locale.LOGIN_FAILURE_NOBILL, "BLKLOGIN" : locale.LOGIN_FAILURE_BLOCK_LOGIN, "WEBBLK" : locale.LOGIN_FAILURE_WEB_BLOCK, "HACK" : "Du wurdest wegen hacken gesperrt.", "BOT" : "Du wurdest wegen benutzung von Bots gesperrt.", "SCAM" : "Du wurdest wegen Betrug gesperrt.", "INSULT" : "Du wurdest wegen Beleidigung gesperrt.", "FAKE" : "Du wurdest aufgrund deiner Namensgebung gesperrt.", "NAME" : "Du wurdest aufgrund deiner Namensgebung gesperrt.", "BUG" : "Du wurdest wegen Bugusing gesperrt.", "DK" : "Du wurdest wegen Dauerkill gesperrt.", "OTHER" : "Du wurdest von der Serverleitung gesperrt.", } self.loginFailureFuncDict = { "WRONGPWD" : self.__DisconnectAndInputPassword, "WRONGMAT" : self.__DisconnectAndInputMatrix, "QUIT" : app.Exit, } self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight()) self.SetWindowName("LoginWindow") if not self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "LoginWindow.py"): dbg.TraceError("LoginWindow.Open - __LoadScript Error") return self.__LoadLoginInfo("loginInfo.py") if app.loggined: self.loginFailureFuncDict = { "WRONGPWD" : app.Exit, "WRONGMAT" : app.Exit, "QUIT" : app.Exit, } if musicInfo.loginMusic != "": snd.SetMusicVolume(systemSetting.GetMusicVolume()) snd.FadeInMusic("BGM/"+musicInfo.loginMusic) snd.SetSoundVolume(systemSetting.GetSoundVolume()) # pevent key "[" "]" ime.AddExceptKey(91) ime.AddExceptKey(93) self.Show() global SKIP_LOGIN_PHASE if SKIP_LOGIN_PHASE: if self.isStartError: self.connectBoard.Hide() self.loginBoard.Hide() self.serverBoard.Hide() self.PopupNotifyMessage(locale.LOGIN_CONNECT_FAILURE, self.__ExitGame) return if self.loginInfo: self.serverBoard.Hide() else: self.__RefreshServerList() self.__OpenServerBoard() else: connectingIP = self.stream.GetConnectAddr() if connectingIP: self.__OpenLoginBoard() if IsFullBackImage(): self.GetChild("demonking").Show() else: self.__RefreshServerList() self.__OpenServerBoard() app.ShowCursor() def Close(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None ServerStateChecker.Destroy(self) print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW " # # selectMusicÀÌ ¾øÀ¸¸é BGMÀÌ ²÷±â¹Ç·Î µÎ°³ ´Ù üũÇÑ´Ù. # if musicInfo.loginMusic != "" and musicInfo.selectMusic != "": snd.FadeOutMusic("BGM/"+musicInfo.loginMusic) ## NOTE : idEditLine¿Í pwdEditLineÀº À̺¥Æ®°¡ ¼­·Î ¿¬°á µÇ¾îÀ־ ## Event¸¦ °­Á¦·Î ÃʱâÈ­ ÇØÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù - [levites] self.idEditLine.SetTabEvent(0) self.idEditLine.SetReturnEvent(0) self.pwdEditLine.SetReturnEvent(0) self.pwdEditLine.SetTabEvent(0) self.connectBoard = None self.loginBoard = None self.idEditLine = None self.pwdEditLine = None self.inputDialog = None self.connectingDialog = None self.loadingImage = None self.serverBoard = None self.serverList = None self.channelList = None # RUNUP_MATRIX_AUTH self.matrixQuizBoard = None self.matrixAnswerInput = None self.matrixAnswerOK = None self.matrixAnswerCancel = None # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH self.passpodBoard = None self.passpodAnswerInput = None self.passpodAnswerOK = None self.passpodAnswerCancel = None # NEWCIBN_PASSPOD_AUTH_END self.VIRTUAL_KEY_ALPHABET_LOWERS = None self.VIRTUAL_KEY_ALPHABET_UPPERS = None self.VIRTUAL_KEY_SYMBOLS = None self.VIRTUAL_KEY_NUMBERS = None # VIRTUAL_KEYBOARD_BUG_FIX if self.virtualKeyboard: for keyIndex in xrange(0, VIRTUAL_KEYBOARD_NUM_KEYS+1): key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(None) self.virtualKeyboard = None self.KillFocus() self.Hide() self.stream.popupWindow.Close() self.loginFailureFuncDict=None ime.ClearExceptKey() app.HideCursor() def __SaveChannelInfo(self): try: file=open("channel.inf", "w") file.write("%d %d %d" % (self.__GetServerID(), self.__GetChannelID(), self.__GetRegionID())) except: print "LoginWindow.__SaveChannelInfo - SaveError" def __LoadChannelInfo(self): try: file=open("channel.inf") lines=file.readlines() if len(lines)>0: tokens=lines[0].split() selServerID=int(tokens[0]) selChannelID=int(tokens[1]) if len(tokens) == 3: regionID = int(tokens[2]) return regionID, selServerID, selChannelID except: print "LoginWindow.__LoadChannelInfo - OpenError" return -1, -1, -1 def __ExitGame(self): app.Exit() def SetIDEditLineFocus(self): if self.idEditLine != None: self.idEditLine.SetFocus() def SetPasswordEditLineFocus(self): if locale.IsEUROPE(): if self.idEditLine != None: #0000862: [M2EU] ·Î±×ÀÎâ Æ˾÷ ¿¡·¯: Á¾·á½Ã ¸ÕÀú None ¼³Á¤µÊ self.idEditLine.SetText("") self.idEditLine.SetFocus() #0000685: [M2EU] ¾ÆÀ̵ð/ºñ¹Ð¹øÈ£ À¯Ãß °¡´É ¹ö±× ¼öÁ¤: ¹«Á¶°Ç ¾ÆÀ̵ð·Î Æ÷Ä¿½º°¡ °¡°Ô ¸¸µç´Ù if self.pwdEditLine != None: #0000862: [M2EU] ·Î±×ÀÎâ Æ˾÷ ¿¡·¯: Á¾·á½Ã ¸ÕÀú None ¼³Á¤µÊ self.pwdEditLine.SetText("") else: if self.pwdEditLine != None: self.pwdEditLine.SetFocus() def OnEndCountDown(self): self.isNowCountDown = FALSE self.OnConnectFailure() def OnConnectFailure(self): if self.isNowCountDown: return snd.PlaySound("sound/ui/loginfail.wav") if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None if app.loggined: self.PopupNotifyMessage(locale.LOGIN_CONNECT_FAILURE, self.__ExitGame) else: self.PopupNotifyMessage(locale.LOGIN_CONNECT_FAILURE, self.SetPasswordEditLineFocus) def OnHandShake(self): if not IsLoginDelay(): snd.PlaySound("sound/ui/loginok.wav") self.PopupDisplayMessage(locale.LOGIN_CONNECT_SUCCESS) def OnLoginStart(self): if not IsLoginDelay(): self.PopupDisplayMessage(locale.LOGIN_PROCESSING) def OnLoginFailure(self, error): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None try: loginFailureMsg = self.loginFailureMsgDict[error] except KeyError: if PASSPOD_MSG_DICT: try: loginFailureMsg = PASSPOD_MSG_DICT[error] except KeyError: loginFailureMsg = locale.LOGIN_FAILURE_UNKNOWN + error else: loginFailureMsg = locale.LOGIN_FAILURE_UNKNOWN + error #0000685: [M2EU] ¾ÆÀ̵ð/ºñ¹Ð¹øÈ£ À¯Ãß °¡´É ¹ö±× ¼öÁ¤: ¹«Á¶°Ç Æнº¿öµå·Î Æ÷Ä¿½º°¡ °¡°Ô ¸¸µç´Ù loginFailureFunc=self.loginFailureFuncDict.get(error, self.SetPasswordEditLineFocus) if app.loggined: self.PopupNotifyMessage(loginFailureMsg, self.__ExitGame) else: self.PopupNotifyMessage(loginFailureMsg, loginFailureFunc) snd.PlaySound("sound/ui/loginfail.wav") def __DisconnectAndInputID(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.SetIDEditLineFocus() net.Disconnect() def __DisconnectAndInputPassword(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.SetPasswordEditLineFocus() net.Disconnect() def __DisconnectAndInputMatrix(self): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.stream.popupWindow.Close() self.matrixInputChanceCount -= 1 if self.matrixInputChanceCount <= 0: self.__OnCloseInputDialog() elif self.inputDialog: self.inputDialog.Show() def __LoadScript(self, fileName): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, fileName) except: import exception exception.Abort("LoginWindow.__LoadScript.LoadObject") try: GetObject=self.GetChild self.serverBoard = GetObject("ServerBoard") self.serverList = GetObject("ServerList") self.channelList = GetObject("ChannelList") self.connectBoard = GetObject("ConnectBoard") self.loginBoard = GetObject("LoginBoard") self.idEditLine = GetObject("ID_EditLine") self.pwdEditLine = GetObject("Password_EditLine") self.ch1_offline_demon = GetObject("Channel1_offline_demon") self.ch2_offline_demon = GetObject("Channel2_offline_demon") self.ch3_offline_demon = GetObject("Channel3_offline_demon") self.ch4_offline_demon = GetObject("Channel4_offline_demon") self.ch1_online_demon = GetObject("Channel1_online_demon") self.ch2_online_demon = GetObject("Channel2_online_demon") self.ch3_online_demon = GetObject("Channel3_online_demon") self.ch4_online_demon = GetObject("Channel4_online_demon") self.ch1_online_markiert_demon = GetObject("Channel1_online_markiert_demon") self.ch2_online_markiert_demon = GetObject("Channel2_online_markiert_demon") self.ch3_online_markiert_demon = GetObject("Channel3_online_markiert_demon") self.ch4_online_markiert_demon = GetObject("Channel4_online_markiert_demon") self.ch1_offline_markiert_demon = GetObject("Channel1_offline_markiert_demon") self.ch2_offline_markiert_demon = GetObject("Channel2_offline_markiert_demon") self.ch3_offline_markiert_demon = GetObject("Channel3_offline_markiert_demon") self.ch4_offline_markiert_demon = GetObject("Channel4_offline_markiert_demon") self.loginButton = GetObject("LoginButton") self.forum = GetObject("forum") self.youtube = GetObject("youtube") self.facebook = GetObject("facebook") self.oben_links = GetObject("oben_links") self.idEditLine.SetFontColor(71, 96, 144) self.pwdEditLine.SetFontColor(71, 96, 144) ## ACCMANAGER self.endles = GetObject("endles") # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard = GetObject("RunupMatrixQuizBoard") self.matrixAnswerInput = GetObject("RunupMatrixAnswerInput") self.matrixAnswerOK = GetObject("RunupMatrixAnswerOK") self.matrixAnswerCancel = GetObject("RunupMatrixAnswerCancel") # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard = GetObject("NEWCIBN_PASSPOD_BOARD") self.passpodAnswerInput = GetObject("NEWCIBN_PASSPOD_INPUT") self.passpodAnswerOK = GetObject("NEWCIBN_PASSPOD_OK") self.passpodAnswerCancel= GetObject("NEWCIBN_PASSPOD_CANCEL") # NEWCIBN_PASSPOD_AUTH_END self.virtualKeyboard = self.GetChild2("VirtualKeyboard") if self.virtualKeyboard: self.VIRTUAL_KEY_ALPHABET_UPPERS = Suffle(locale.VIRTUAL_KEY_ALPHABET_UPPERS) self.VIRTUAL_KEY_ALPHABET_LOWERS = "".join([locale.VIRTUAL_KEY_ALPHABET_LOWERS[locale.VIRTUAL_KEY_ALPHABET_UPPERS.index(e)] for e in self.VIRTUAL_KEY_ALPHABET_UPPERS]) self.VIRTUAL_KEY_SYMBOLS = Suffle(locale.VIRTUAL_KEY_SYMBOLS) self.VIRTUAL_KEY_NUMBERS = Suffle(locale.VIRTUAL_KEY_NUMBERS) self.__VirtualKeyboard_SetAlphabetMode() except: import exception exception.Abort("LoginWindow.__LoadScript.BindObject") self.serverBoard.OnKeyUp = ui.__mem_func__(self.__ServerBoard_OnKeyUp) self.xServerBoard, self.yServerBoard = self.serverBoard.GetLocalPosition() self.loginButton.SetEvent(ui.__mem_func__(self.__OnClickLoginButton)) self.forum.SetEvent(ui.__mem_func__(self.__forum)) self.youtube.SetEvent(ui.__mem_func__(self.__youtube)) self.facebook.SetEvent(ui.__mem_func__(self.__facebook)) ## ACCMANAGER self.endles.SetEvent(self.__OnClickExitButton) ## END ACCMANAGER self.serverList.SetEvent(ui.__mem_func__(self.__OnSelectServer)) self.idEditLine.SetReturnEvent(ui.__mem_func__(self.pwdEditLine.SetFocus)) self.idEditLine.SetTabEvent(ui.__mem_func__(self.pwdEditLine.SetFocus)) self.pwdEditLine.SetReturnEvent(ui.__mem_func__(self.__OnClickLoginButton)) self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus)) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixAnswerOK.SAFE_SetEvent(self.__OnClickMatrixAnswerOK) self.matrixAnswerCancel.SAFE_SetEvent(self.__OnClickMatrixAnswerCancel) self.matrixAnswerInput.SAFE_SetReturnEvent(self.__OnClickMatrixAnswerOK) # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodAnswerOK.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerOK) self.passpodAnswerCancel.SAFE_SetEvent(self.__OnClickNEWCIBNPasspodAnswerCancel) self.passpodAnswerInput.SAFE_SetReturnEvent(self.__OnClickNEWCIBNPasspodAnswerOK) # NEWCIBN_PASSPOD_AUTH_END if IsFullBackImage(): self.GetChild("demonking").Show() return 1 def __VirtualKeyboard_SetKeys(self, keyCodes): uiDefFontBackup = locale.UI_DEF_FONT locale.UI_DEF_FONT = locale.UI_DEF_FONT_LARGE keyIndex = 1 for keyCode in keyCodes: key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(lambda x=keyCode: self.__VirtualKeyboard_PressKey(x)) key.SetText(keyCode) key.ButtonText.SetFontColor(1, 1, 1) keyIndex += 1 for keyIndex in xrange(keyIndex, VIRTUAL_KEYBOARD_NUM_KEYS+1): key = self.GetChild2("key_%d" % keyIndex) if key: key.SetEvent(lambda x=' ': self.__VirtualKeyboard_PressKey(x)) key.SetText(' ') locale.UI_DEF_FONT = uiDefFontBackup def __VirtualKeyboard_PressKey(self, code): ime.PasteString(code) #if self.virtualKeyboardMode == "ALPHABET" and self.virtualKeyboardIsUpper: # self.__VirtualKeyboard_SetLowerMode() def __VirtualKeyboard_PressBackspace(self): ime.PasteBackspace() def __VirtualKeyboard_PressReturn(self): ime.PasteReturn() def __VirtualKeyboard_SetUpperMode(self): self.virtualKeyboardIsUpper = TRUE if self.virtualKeyboardMode == "ALPHABET": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_UPPERS) elif self.virtualKeyboardMode == "NUMBER": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) else: self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) def __VirtualKeyboard_SetLowerMode(self): self.virtualKeyboardIsUpper = FALSE if self.virtualKeyboardMode == "ALPHABET": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS) elif self.virtualKeyboardMode == "NUMBER": self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) else: self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) def __VirtualKeyboard_SetAlphabetMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "ALPHABET" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS) def __VirtualKeyboard_SetNumberMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "NUMBER" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS) def __VirtualKeyboard_SetSymbolMode(self): self.virtualKeyboardIsUpper = FALSE self.virtualKeyboardMode = "SYMBOL" self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS) def Connect(self, id, pwd): if constInfo.SEQUENCE_PACKET_ENABLE: net.SetPacketSequenceMode() if IsLoginDelay(): loginDelay = GetLoginDelay() self.connectingDialog = ConnectingDialog() self.connectingDialog.Open(loginDelay) self.connectingDialog.SAFE_SetTimeOverEvent(self.OnEndCountDown) self.connectingDialog.SAFE_SetExitEvent(self.OnPressExitKey) self.isNowCountDown = TRUE else: self.stream.popupWindow.Close() self.stream.popupWindow.Open(locale.LOGIN_CONNETING, self.SetPasswordEditLineFocus, locale.UI_CANCEL) self.stream.SetLoginInfo(id, pwd) self.stream.Connect() def __OnClickExitButton(self): self.stream.SetPhaseWindow(0) def __SetServerInfo(self, name): net.SetServerInfo(name.strip()) self.serverInfo.SetText(name) def __LoadLoginInfo(self, loginInfoFileName): try: loginInfo={} execfile(loginInfoFileName, loginInfo) except IOError: print( "ÀÚµ¿ ·Î±×ÀÎÀ» ÇϽ÷Á¸é" + loginInfoFileName + "ÆÄÀÏÀ» ÀÛ¼ºÇØÁÖ¼¼¿än" "n" "³»¿ë:n" "================================================================n" "addr=ÁÖ¼Òn" "port=Æ÷Æ®n" "id=¾ÆÀ̵ðn" "pwd=ºñ¹Ð¹øÈ£n" "slot=ij¸¯ÅÍ ¼±Åà À妽º (¾ø°Å³ª -1À̸é ÀÚµ¿ ¼±Åà ¾ÈÇÔ)n" "autoLogin=ÀÚµ¿ Á¢¼Ó ¿©ºÎn" "autoSelect=ÀÚµ¿ Á¢¼Ó ¿©ºÎn" "locale=(ymir) LC_Ymir ÀÏ°æ¿ì ymir·Î ÀÛµ¿. ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é korea·Î ÀÛµ¿n" ); id=loginInfo.get("id", "") pwd=loginInfo.get("pwd", "") if self.IS_TEST: try: addr=loginInfo["addr"] port=loginInfo["port"] account_addr=addr account_port=port net.SetMarkServer(addr, port) self.__SetServerInfo(locale.CHANNEL_TEST_SERVER_ADDR % (addr, port)) except: try: addr=serverInfo.TESTADDR["ip"] port=serverInfo.TESTADDR["tcp_port"] net.SetMarkServer(addr, port) self.__SetServerInfo(locale.CHANNEL_TEST_SERVER) except: import exception exception.Abort("LoginWindow.__LoadLoginInfo - Å×½ºÆ®¼­¹ö ÁÖ¼Ò°¡ ¾ø½À´Ï´Ù") else: addr=loginInfo.get("addr", "") port=loginInfo.get("port", 0) account_addr=loginInfo.get("account_addr", addr) account_port=loginInfo.get("account_port", port) locale = loginInfo.get("locale", "") if addr and port: net.SetMarkServer(addr, port) if locale == "ymir" : net.SetServerInfo("õ¸¶ ¼­¹ö") self.serverInfo.SetText("Y:"+addr+":"+str(port)) else: net.SetServerInfo(addr+":"+str(port)) self.serverInfo.SetText("K:"+addr+":"+str(port)) slot=loginInfo.get("slot", 0) isAutoLogin=loginInfo.get("auto", 0) isAutoLogin=loginInfo.get("autoLogin", 0) isAutoSelect=loginInfo.get("autoSelect", 0) self.stream.SetCharacterSlot(slot) self.stream.SetConnectInfo(addr, port, account_addr, account_port) self.stream.isAutoLogin=isAutoLogin self.stream.isAutoSelect=isAutoSelect self.id = None self.pwd = None self.loginnedServer = None self.loginnedChannel = None app.loggined = FALSE self.loginInfo = loginInfo if self.id and self.pwd: app.loggined = TRUE if isAutoLogin: self.Connect(id, pwd) print "==================================================================================" print "ÀÚµ¿ ·Î±×ÀÎ: %s - %s:%d %s" % (loginInfoFileName, addr, port, id) print "==================================================================================" def PopupDisplayMessage(self, msg): self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg) def PopupNotifyMessage(self, msg, func=0): if not func: func=self.EmptyFunc self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg, func, locale.UI_OK) # RUNUP_MATRIX_AUTH def BINARY_OnRunupMatrixQuiz(self, quiz): if not IsRunupMatrixAuth(): return id = self.GetChild("RunupMatrixID") id.SetText(self.idEditLine.GetText()) code = self.GetChild("RunupMatrixCode") code.SetText("".join(["[%c,%c]" % (quiz[i], quiz[i+1]) for i in xrange(0, len(quiz), 2)])) self.stream.popupWindow.Close() self.serverBoard.Hide() self.connectBoard.Hide() self.loginBoard.Hide() self.matrixQuizBoard.Show() self.matrixAnswerInput.SetFocus() def __OnClickMatrixAnswerOK(self): answer = self.matrixAnswerInput.GetText() print "matrix_quiz.ok" net.SendRunupMatrixCardPacket(answer) self.matrixQuizBoard.Hide() self.stream.popupWindow.Close() self.stream.popupWindow.Open("WAITING FOR MATRIX AUTHENTICATION", self.__OnClickMatrixAnswerCancel, locale.UI_CANCEL) def __OnClickMatrixAnswerCancel(self): print "matrix_quiz.cancel" if self.matrixQuizBoard: self.matrixQuizBoard.Hide() if self.connectBoard: self.connectBoard.Show() if self.loginBoard: self.loginBoard.Show() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH def BINARY_OnNEWCIBNPasspodRequest(self): if not IsNEWCIBNPassPodAuth(): return if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.stream.popupWindow.Close() self.serverBoard.Hide() self.connectBoard.Hide() self.loginBoard.Hide() self.passpodBoard.Show() self.passpodAnswerInput.SetFocus() def BINARY_OnNEWCIBNPasspodFailure(self): if not IsNEWCIBNPassPodAuth(): return def __OnClickNEWCIBNPasspodAnswerOK(self): answer = self.passpodAnswerInput.GetText() print "passpod.ok" net.SendNEWCIBNPasspodAnswerPacket(answer) self.passpodAnswerInput.SetText("") self.passpodBoard.Hide() self.stream.popupWindow.Close() self.stream.popupWindow.Open(locale.WAIT_FOR_PASSPOD, self.__OnClickNEWCIBNPasspodAnswerCancel, locale.UI_CANCEL) def __OnClickNEWCIBNPasspodAnswerCancel(self): print "passpod.cancel" if self.passpodBoard: self.passpodBoard.Hide() if self.connectBoard: self.connectBoard.Show() if self.loginBoard: self.loginBoard.Show() # NEWCIBN_PASSPOD_AUTH_END def OnMatrixCard(self, row1, row2, row3, row4, col1, col2, col3, col4): if self.connectingDialog: self.connectingDialog.Close() self.connectingDialog = None self.matrixInputChanceCount = 3 self.stream.popupWindow.Close() # CHINA_MATRIX_CARD_BUG_FIX ## A~Z ±îÁö 26 À̳»ÀÇ °ªÀÌ µé¾îÀÖ¾î¾ß¸¸ ÇÑ´Ù. ## Python Exception Log ¿¡¼­ ±× ÀÌ»óÀÇ °ªÀÌ µé¾îÀ־ ¿¡·¯ ¹æÁö ## Çåµ¥ ¿Ö Çѱ¹ÂÊ ·Î±×¿¡¼­ ÀÌ°Ô È°¿ëµÇ´ÂÁö´Â ¸ð¸£°ÚÀ½ row1 = min(30, row1) row2 = min(30, row2) row3 = min(30, row3) row4 = min(30, row4) # END_OF_CHINA_MATRIX_CARD_BUG_FIX row1 = chr(row1 + ord('A')) row2 = chr(row2 + ord('A')) row3 = chr(row3 + ord('A')) row4 = chr(row4 + ord('A')) col1 = col1 + 1 col2 = col2 + 1 col3 = col3 + 1 col4 = col4 + 1 inputDialog = uiCommon.InputDialogWithDescription2() inputDialog.SetMaxLength(8) inputDialog.SetAcceptEvent(ui.__mem_func__(self.__OnAcceptMatrixCardData)) inputDialog.SetCancelEvent(ui.__mem_func__(self.__OnCancelMatrixCardData)) inputDialog.SetTitle(locale.INPUT_MATRIX_CARD_TITLE) inputDialog.SetDescription1(locale.INPUT_MATRIX_CARD_NUMBER) inputDialog.SetDescription2("%c%d %c%d %c%d %c%d" % (row1, col1, row2, col2, row3, col3, row4, col4)) inputDialog.Open() self.inputDialog = inputDialog def __OnAcceptMatrixCardData(self): text = self.inputDialog.GetText() net.SendChinaMatrixCardPacket(text) if self.inputDialog: self.inputDialog.Hide() self.PopupNotifyMessage(locale.LOGIN_PROCESSING) return TRUE def __OnCancelMatrixCardData(self): self.SetPasswordEditLineFocus() self.__OnCloseInputDialog() self.__DisconnectAndInputPassword() return TRUE def __OnCloseInputDialog(self): if self.inputDialog: self.inputDialog.Close() self.inputDialog = None return TRUE def OnPressExitKey(self): self.stream.popupWindow.Close() self.stream.SetPhaseWindow(0) return TRUE def OnExit(self): self.stream.popupWindow.Close() self.stream.popupWindow.Open(locale.LOGIN_FAILURE_WRONG_MATRIX_CARD_NUMBER_TRIPLE, app.Exit, locale.UI_OK) def OnUpdate(self): ServerStateChecker.Update() def EmptyFunc(self): pass ##################################################################################### def __ServerBoard_OnKeyUp(self, key): if self.serverBoard.IsShow(): if app.DIK_RETURN==key: self.__OnClickSelectServerButton() return TRUE def __GetRegionID(self): return 0 def __GetServerID(self): return self.serverList.GetSelectedItem() def __GetChannelID(self): return self.channelList.GetSelectedItem() # SEVER_LIST_BUG_FIX def __ServerIDToServerIndex(self, regionID, targetServerID): try: regionDict = serverInfo.REGION_DICT[regionID] except KeyError: return -1 retServerIndex = 0 for eachServerID, regionDataDict in regionDict.items(): if eachServerID == targetServerID: return retServerIndex retServerIndex += 1 return -1 def __ChannelIDToChannelIndex(self, channelID): return channelID - 1 # END_OF_SEVER_LIST_BUG_FIX def __OpenServerBoard(self): self.ch1_offline_markiert_demon.Hide() self.ch2_offline_markiert_demon.Hide() self.ch3_offline_markiert_demon.Hide() self.ch4_offline_markiert_demon.Hide() self.ch1_online_markiert_demon.Hide() self.ch2_online_markiert_demon.Hide() self.ch3_online_markiert_demon.Hide() self.ch4_online_markiert_demon.Hide() self.ch3_online_demon.Hide() #Auskommentieren wenn ihr CH3+4 habt self.ch4_online_demon.Hide() #Auskommentieren wenn ihr CH3+4 habt global DEINEIP global CH1PORT global AUTHPORT global CH2PORT global SERVERNAME global CH3PORT global CH4PORT global CH1STATE global CH2STATE global CH3STATE global CH4STATE global LOGINDATENSPEICHERN if LOGINDATENSPEICHERN==1: login = linecache.getline("pack/loginsetting", 1) password = linecache.getline("pack/loginsetting", 2) self.idEditLine.SetText(login) self.pwdEditLine.SetText(password) id = self.idEditLine.GetText() id = id.replace('n', '') self.idEditLine.SetText(id) self.ch1_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon)) self.ch2_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon)) self.ch3_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon)) self.ch4_offline_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon)) self.ch1_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon)) self.ch2_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon)) self.ch3_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon)) self.ch4_online_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon)) self.ch1_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon)) self.ch2_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon)) self.ch3_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon)) self.ch4_online_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon)) self.ch1_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch1_demon)) self.ch2_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch2_demon)) self.ch3_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch3_demon)) self.ch4_offline_markiert_demon.SetEvent(ui.__mem_func__(self.__OnClickch4_demon)) print "XMAS_SNOW ON" background.EnableSnow(1) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard.Hide() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard.Hide() # NEWCIBN_PASSPOD_AUTH_END self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight()) self.serverBoard.Hide() if self.virtualKeyboard: self.virtualKeyboard.Show() self.__LoadACCNames() if app.loggined: self.Connect(self.id, self.pwd) self.connectBoard.Hide() self.loginBoard.Hide() elif not self.stream.isAutoLogin: self.connectBoard.Show() self.loginBoard.Show() ## if users have the login infomation, then don't initialize.2005.9 haho if self.idEditLine == None: self.idEditLine.SetText("") if self.pwdEditLine == None: self.pwdEditLine.SetText("") self.idEditLine.SetFocus() ##Statecheck import socket, os ip = DEINEIP s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #s3 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Einkommentieren wenn CH 3 + 4 #s4 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Einkommentieren wenn CH 3 + 4 #Channel1 try: s.connect((ip,CH1PORT)) s.close() self.ch1_offline_demon.Hide() self.ch1_online_demon.Show() CH1STATE = 1 except: self.ch1_online_demon.Hide() CH1STATE = 0 s.close() #Channel2 try: s2.connect((ip,CH2PORT)) s2.close() CH2STATE = 1 self.ch2_offline_demon.Hide() self.ch2_online_demon.Show() except: self.ch2_online_demon.Hide() CH2STATE = 0 s2.close() ####Channel3 Einkommentieren wenn CH 3 + 4 #try: # s3.connect((ip,CH3PORT)) # s3.close() # CH3STATE = 1 # self.ch3_offline_demon.Hide() # self.ch3_online_demon.Show() #except: # self.ch3_online_demon.Hide() # CH3STATE = 0 # ###Channel4 #try: # s4.connect((ip,CH4PORT)) # s4.close() # CH4STATE = 1 # self.ch4_offline_demon.Hide() # self.ch4_online_demon.Show() #except: # self.ch4_online_demon.Hide() # CH4STATE = 0 self.stream.SetConnectInfo(DEINEIP, CH1PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 1") net.SetMarkServer(DEINEIP, CH1PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH1STATE: self.ch1_online_demon.Hide() self.ch1_online_markiert_demon.Show() else: self.ch1_offline_demon.Hide() self.ch1_offline_markiert_demon.Show() if CH2STATE: self.ch2_online_demon.Show() self.ch2_online_markiert_demon.Hide() else: self.ch2_offline_demon.Show() self.ch2_offline_markiert_demon.Hide() if CH3STATE: self.ch3_online_demon.Show() self.ch3_online_markiert_demon.Hide() else: self.ch3_offline_demon.Show() self.ch3_offline_markiert_demon.Hide() if CH4STATE: self.ch4_online_demon.Show() self.ch4_online_markiert_demon.Hide() else: self.ch4_offline_demon.Show() self.ch4_offline_markiert_demon.Hide() global SKIP_LOGIN_PHASE if SKIP_LOGIN_PHASE: if not self.loginInfo: self.connectBoard.Hide() def __OpenLoginBoard(self): print "XMAS_SNOW ON" background.EnableSnow(1) # RUNUP_MATRIX_AUTH if IsRunupMatrixAuth(): self.matrixQuizBoard.Hide() # RUNUP_MATRIX_AUTH_END # NEWCIBN_PASSPOD_AUTH if IsNEWCIBNPassPodAuth(): self.passpodBoard.Hide() # NEWCIBN_PASSPOD_AUTH_END self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight()) self.serverBoard.Hide() if self.virtualKeyboard: self.virtualKeyboard.Show() self.__LoadACCNames() if app.loggined: self.Connect(self.id, self.pwd) self.connectBoard.Hide() self.loginBoard.Hide() elif not self.stream.isAutoLogin: self.connectBoard.Show() self.loginBoard.Show() ## if users have the login infomation, then don't initialize.2005.9 haho if self.idEditLine == None: self.idEditLine.SetText("") if self.pwdEditLine == None: self.pwdEditLine.SetText("") self.idEditLine.SetFocus() global SKIP_LOGIN_PHASE if SKIP_LOGIN_PHASE: if not self.loginInfo: self.connectBoard.Hide() def __OnSelectRegionGroup(self): self.__RefreshServerList() def __OnSelectSettlementArea(self): # SEVER_LIST_BUG_FIX regionID = self.__GetRegionID() serverID = self.serverListOnRegionBoard.GetSelectedItem() serverIndex = self.__ServerIDToServerIndex(regionID, serverID) self.serverList.SelectItem(serverIndex) # END_OF_SEVER_LIST_BUG_FIX self.__OnSelectServer() def __RefreshServerList(self): regionID = self.__GetRegionID() if not serverInfo.REGION_DICT.has_key(regionID): return self.serverList.ClearItem() regionDict = serverInfo.REGION_DICT[regionID] # SEVER_LIST_BUG_FIX visible_index = 1 for id, regionDataDict in regionDict.items(): name = regionDataDict.get("name", "noname") if locale.IsBRAZIL() or locale.IsCANADA(): self.serverList.InsertItem(id, "%s" % (name)) else: if locale.IsCIBN10(): if name[0] == "#": self.serverList.InsertItem(-1, " %s" % (name[1:])) else: self.serverList.InsertItem(id, " %s" % (name)) visible_index += 1 else: self.serverList.InsertItem(id, " %02d. %s" % (visible_index, name)) visible_index += 1 # END_OF_SEVER_LIST_BUG_FIX def __OnSelectServer(self): self.__OnCloseInputDialog() self.__RequestServerStateList() self.__RefreshServerStateList() def __RequestServerStateList(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() try: channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"] except: print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID) return for id, channelDataDict in channelDict.items(): key=channelDataDict["key"] ip=channelDataDict["ip"] udp_port=channelDataDict["udp_port"] ServerStateChecker.Request(key, ip, udp_port) def __RefreshServerStateList(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() bakChannelID = self.channelList.GetSelectedItem() self.channelList.ClearItem() try: channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"] except: print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID) return for channelID, channelDataDict in channelDict.items(): channelName = channelDataDict["name"] channelState = channelDataDict["state"] self.channelList.InsertItem(channelID, " %s %s" % (channelName, channelState)) self.channelList.SelectItem(bakChannelID-1) def __GetChannelName(self, regionID, selServerID, selChannelID): try: return serverInfo.REGION_DICT[regionID][selServerID]["channel"][selChannelID]["name"] except KeyError: if 9==selChannelID: return locale.CHANNEL_PVP else: return locale.CHANNEL_NORMAL % (selChannelID) def NotifyChannelState(self, addrKey, state): try: stateName=serverInfo.STATE_DICT[state] except: stateName=serverInfo.STATE_NONE regionID=int(addrKey/1000) serverID=int(addrKey/10) % 100 channelID=addrKey%10 try: serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName self.__RefreshServerStateList() except: import exception exception.Abort(locale.CHANNEL_NOT_FIND_INFO) def __OnClickExitServerButton(self): print "exit server" self.__OpenLoginBoard() if IsFullBackImage(): self.GetChild("demonking").Show() def __OnClickSelectRegionButton(self): regionID = self.__GetRegionID() serverID = self.__GetServerID() if (not serverInfo.REGION_DICT.has_key(regionID)): self.PopupNotifyMessage(locale.CHANNEL_SELECT_REGION) return if (not serverInfo.REGION_DICT[regionID].has_key(serverID)): self.PopupNotifyMessage(locale.CHANNEL_SELECT_SERVER) return self.__SaveChannelInfo() self.__RefreshServerList() self.__OpenServerBoard() def __OnClickch1_demon(self): global DEINEIP global CH1PORT global AUTHPORT global SERVERNAME self.stream.SetConnectInfo(DEINEIP, CH1PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 1") net.SetMarkServer(DEINEIP, CH1PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH1STATE: self.ch1_online_demon.Hide() self.ch1_online_markiert_demon.Show() else: self.ch1_offline_demon.Hide() self.ch1_offline_markiert_demon.Show() if CH2STATE: self.ch2_online_demon.Show() self.ch2_online_markiert_demon.Hide() else: self.ch2_offline_demon.Show() self.ch2_offline_markiert_demon.Hide() if CH3STATE: self.ch3_online_demon.Show() self.ch3_online_markiert_demon.Hide() else: self.ch3_offline_demon.Show() self.ch3_offline_markiert_demon.Hide() if CH4STATE: self.ch4_online_demon.Show() self.ch4_online_markiert_demon.Hide() else: self.ch4_offline_demon.Show() self.ch4_offline_markiert_demon.Hide() def __OnClickch2_demon(self): global DEINEIP global CH2PORT global AUTHPORT global SERVERNAME self.stream.SetConnectInfo(DEINEIP, CH2PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 2") net.SetMarkServer(DEINEIP, CH2PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH2STATE: self.ch2_online_demon.Hide() self.ch2_online_markiert_demon.Show() else: self.ch2_offline_demon.Hide() self.ch2_offline_markiert_demon.Show() if CH1STATE: self.ch1_online_demon.Show() self.ch1_online_markiert_demon.Hide() else: self.ch1_offline_demon.Show() self.ch1_offline_markiert_demon.Hide() if CH3STATE: self.ch3_online_demon.Show() self.ch3_online_markiert_demon.Hide() else: self.ch3_offline_demon.Show() self.ch3_offline_markiert_demon.Hide() if CH4STATE: self.ch4_online_demon.Show() self.ch4_online_markiert_demon.Hide() else: self.ch4_offline_demon.Show() self.ch4_offline_markiert_demon.Hide() def __OnClickch3_demon(self): global DEINEIP global CH3PORT global AUTHPORT global SERVERNAME self.stream.SetConnectInfo(DEINEIP, CH3PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 3") net.SetMarkServer(DEINEIP, CH3PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH3STATE: self.ch3_online_demon.Hide() self.ch3_online_markiert_demon.Show() else: self.ch3_offline_demon.Hide() self.ch3_offline_markiert_demon.Show() if CH2STATE: self.ch2_online_demon.Show() self.ch2_online_markiert_demon.Hide() else: self.ch2_offline_demon.Show() self.ch2_offline_markiert_demon.Hide() if CH1STATE: self.ch1_online_demon.Show() self.ch1_online_markiert_demon.Hide() else: self.ch1_offline_demon.Show() self.ch1_offline_markiert_demon.Hide() if CH4STATE: self.ch4_online_demon.Show() self.ch4_online_markiert_demon.Hide() else: self.ch4_offline_demon.Show() self.ch4_offline_markiert_demon.Hide() def __OnClickch4_demon(self): global DEINEIP global CH4PORT global AUTHPORT global SERVERNAME self.stream.SetConnectInfo(DEINEIP, CH4PORT, DEINEIP, AUTHPORT) net.SetServerInfo(SERVERNAME + " - Ch 4") net.SetMarkServer(DEINEIP, CH4PORT) app.SetGuildMarkPath("10.tga") app.SetGuildSymbolPath("10") if CH4STATE: self.ch4_online_demon.Hide() self.ch4_online_markiert_demon.Show() else: self.ch4_offline_demon.Hide() self.ch4_offline_markiert_demon.Show() if CH2STATE: self.ch2_online_demon.Show() self.ch2_online_markiert_demon.Hide() else: self.ch2_offline_demon.Show() self.ch2_offline_markiert_demon.Hide() if CH3STATE: self.ch3_online_demon.Show() self.ch3_online_markiert_demon.Hide() else: self.ch3_offline_demon.Show() self.ch3_offline_markiert_demon.Hide() if CH1STATE: self.ch1_online_demon.Show() self.ch1_online_markiert_demon.Hide() else: self.ch1_offline_demon.Show() self.ch1_offline_markiert_demon.Hide() def __forum(self): global FORUMLINK os.system("start " + FORUMLINK) def __youtube(self): global YOUTUBELINK os.system("start " + YOUTUBELINK) def __facebook(self): global FACEBOOKLINK os.system("start " + FACEBOOKLINK) def __OnClickLoginButton(self): id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() if len(id)==0: self.PopupNotifyMessage(locale.LOGIN_INPUT_ID, self.SetIDEditLineFocus) return if len(pwd)==0: self.PopupNotifyMessage(locale.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus) return if LOGINDATENSPEICHERN==1: id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() f = open("packloginsetting", "w") f.write (id + "n" + pwd) f.close() self.Connect(id, pwd) Bien abra que editar un par de cosas para que nos funcione correctamente. Lo primero será editar la "DEINEIP" que será poner nuestra ip. Ejemplo: 255.25.25.25 Lo segundo será editar los "CH1PORT - CH2PORT - CH3PORT - CH4PORT" Para conseguir los CH Port tendremos que ir al FTP y ir a Channel 1 y abrimos el Config y hay pondrá "Port: " y ese será el CH1Port ahora aremos lo mismo con los 4. Bien ahora que tenemos los 4 falta 1 sola cosa. El "AUTHPORT" que estará en cada caso en auth o en mi caso "invoice" y abriremos otra vez Config y pondremos el PORT. Una vez hecho eso compilamos root y sustituimos el antiguo por el nuevo. Ahora descompilamos nuestro locale "locale_de locale_es" lo que tengáis. Bien y tendremos que abrir la carpeta UI. Una vez hay sustituimos el archivo "login.png" por el nuevo que os daré: Bien ahora tendremos que sustituir "loginwindow.py" por el que os daré: import uiScriptLocale LOCALE_PATH = uiScriptLocale.LOGIN_PATHSERVER_BOARD_HEIGHT = 220SERVER_LIST_HEIGHT = 170window = { "name" : "LoginWindow", "sytle" : ("movable",), "x" : 0, "y" : 0, "width" : SCREEN_WIDTH, "height" : SCREEN_HEIGHT, "children" : ( ## Board { "name" : "demonking", "type" : "expanded_image", "x" : 0, "y" : 0, "x_scale" : float(SCREEN_WIDTH) / 1024.0, "y_scale" : float(SCREEN_HEIGHT) / 768.0, #"x_scale" : float(SCREEN_WIDTH) / 1920.0, #"y_scale" : float(SCREEN_HEIGHT) / 1080.0, "image" : "locale/de/ui/login.jpg", "children" : ( { "name" : "unten_rechts", "type" : "image", "x" : SCREEN_WIDTH - 1920, "y" : SCREEN_HEIGHT - 80, "image" : "locale/de/ui/login/unten_rechts.tga", }, { "name" : "unten_links", "type" : "image", "x" : 0, "y" : SCREEN_HEIGHT - 16, "image" : "locale/de/ui/login/unten_links.tga", }, { "name" : "endles", "type" : "button", "x" : (SCREEN_WIDTH - 127) / 1, "y" : 20, "default_image" : "locale/de/ui/login/exit.tga", "over_image" : "locale/de/ui/login/exit_hover.tga", "down_image" : "locale/de/ui/login/exit_hover.tga", "text" : "", }, { "name" : "forum", "type" : "button", "x" : (SCREEN_WIDTH - 136) / 1, "y" : (SCREEN_HEIGHT - 56) / 1, "default_image" : "locale/de/ui/login/forum.tga", "over_image" : "locale/de/ui/login/forum_hover.tga", "down_image" : "locale/de/ui/login/forum_hover.tga", "text" : "", }, { "name" : "youtube", "type" : "button", "x" : (SCREEN_WIDTH - 254) / 1, "y" : (SCREEN_HEIGHT - 56) / 1, "default_image" : "locale/de/ui/login/Youtube.tga", "over_image" : "locale/de/ui/login/Youtube_hover.tga", "down_image" : "locale/de/ui/login/Youtube_hover.tga", "text" : "", }, { "name" : "facebook", "type" : "button", "x" : (SCREEN_WIDTH - 374) / 1, "y" : (SCREEN_HEIGHT - 56) / 1, "default_image" : "locale/de/ui/login/fanpage.tga", "over_image" : "locale/de/ui/login/fanpage_hover.tga", "down_image" : "locale/de/ui/login/fanpage_hover.tga", "text" : "", }, ) }, ## ConnectBoard { "name" : "ConnectBoard", "type" : "thinboard", "x" : 10000, "y" : 10000, "width" : 5, "height" : 5, "children" : ( ), }, ## LoginBoard { "name" : "LoginBoard", "type" : "image", "x" : 30, "y" : 0, "image" : "locale/de/ui/login/loginbox.tga", "children" : ( { "name" : "ID_EditLine", "type" : "editline", "x" : 90, "y" : 86, "width" : 120, "height" : 18, "input_limit" : 16, "enable_codepage" : 0, "r" : 0.0, "g" : 0.0, "b" : 0.0, "a" : 9.0, }, { "name" : "Password_EditLine", "type" : "editline", "x" : 90, "y" : 142, "width" : 120, "height" : 18, "input_limit" : 16, "secret_flag" : 1, "enable_codepage" : 0, "r" : 0.0, "g" : 0.0, "b" : 0.0, "a" : 9.0, }, { "name" : "LoginButton", "type" : "button", "x" : 75, "y" : 190, "default_image" : "locale/de/ui/login/Login.tga", "over_image" : "locale/de/ui/login/Login_hover.tga", "down_image" : "locale/de/ui/login/Login_hover.tga", "text" : "", }, { "name" : "Channel1_online_markiert_demon", "type" : "button", "x" : 32, "y" : 269, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel1_online_hover.tga", "over_image" : "locale/de/ui/login/Channel1_online_hover.tga", "down_image" : "locale/de/ui/login/Channel1_online_hover.tga", "text" : "", }, { "name" : "Channel2_online_markiert_demon", "type" : "button", "x" : 32, "y" : 300, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel2_online_hover.tga", "over_image" : "locale/de/ui/login/Channel2_online_hover.tga", "down_image" : "locale/de/ui/login/Channel2_online_hover.tga", "text" : "", }, { "name" : "Channel3_online_markiert_demon", "type" : "button", "x" : 32, "y" : 331, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel3_online_hover.tga", "over_image" : "locale/de/ui/login/Channel3_online_hover.tga", "down_image" : "locale/de/ui/login/Channel3_online_hover.tga", "text" : "", }, { "name" : "Channel4_online_markiert_demon", "type" : "button", "x" : 32, "y" : 362, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel4_online_hover.tga", "over_image" : "locale/de/ui/login/Channel4_online_hover.tga", "down_image" : "locale/de/ui/login/Channel4_online_hover.tga", "text" : "", }, { "name" : "Channel1_offline_markiert_demon", "type" : "button", "x" : 32, "y" : 269, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "over_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "text" : "", }, { "name" : "Channel2_offline_markiert_demon", "type" : "button", "x" : 32, "y" : 300, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "over_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "text" : "", }, { "name" : "Channel3_offline_markiert_demon", "type" : "button", "x" : 32, "y" : 331, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "over_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "text" : "", }, { "name" : "Channel4_offline_markiert_demon", "type" : "button", "x" : 32, "y" : 362, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "over_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "text" : "", }, { "name" : "Channel1_online_demon", "type" : "button", "x" : 32, "y" : 269, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel1_online.tga", "over_image" : "locale/de/ui/login/Channel1_online_hover.tga", "down_image" : "locale/de/ui/login/Channel1_online_hover.tga", "text" : "", }, { "name" : "Channel2_online_demon", "type" : "button", "x" : 32, "y" : 300, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel2_online.tga", "over_image" : "locale/de/ui/login/Channel2_online_hover.tga", "down_image" : "locale/de/ui/login/Channel2_online_hover.tga", "text" : "", }, { "name" : "Channel3_online_demon", "type" : "button", "x" : 32, "y" : 331, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel3_online.tga", "over_image" : "locale/de/ui/login/Channel3_online_hover.tga", "down_image" : "locale/de/ui/login/Channel3_online_hover.tga", "text" : "", }, { "name" : "Channel4_online_demon", "type" : "button", "x" : 32, "y" : 362, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel4_online.tga", "over_image" : "locale/de/ui/login/Channel4_online_hover.tga", "down_image" : "locale/de/ui/login/Channel4_online_hover.tga", "text" : "", }, { "name" : "Channel1_offline_demon", "type" : "button", "x" : 32, "y" : 269, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel1_offline.tga", "over_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel1_offline_hover.tga", "text" : "", }, { "name" : "Channel2_offline_demon", "type" : "button", "x" : 32, "y" : 300, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel2_offline.tga", "over_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel2_offline_hover.tga", "text" : "", }, { "name" : "Channel3_offline_demon", "type" : "button", "x" : 32, "y" : 331, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel3_offline.tga", "over_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel3_offline_hover.tga", "text" : "", }, { "name" : "Channel4_offline_demon", "type" : "button", "x" : 32, "y" : 362, #"vertical_align" : "center", "default_image" : "locale/de/ui/login/Channel4_offline.tga", "over_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "down_image" : "locale/de/ui/login/Channel4_offline_hover.tga", "text" : "", }, ), }, { "name" : "oben_rechts", "type" : "image", "x" : SCREEN_WIDTH - 1920, "y" : 0, #"horizontal_align" : "center", "image" : "locale/de/ui/login/oben_rechts.tga", }, { "name" : "oben_links", "type" : "image", "x" : 36, "y" : 0, "image" : "locale/de/ui/login/oben_links.tga", }, ## ServerBoard { "name" : "ServerBoard", "type" : "thinboard", "x" : 0, "y" : SCREEN_HEIGHT - SERVER_BOARD_HEIGHT - 150, "width" : 375, "height" : SERVER_BOARD_HEIGHT, "horizontal_align" : "center", "children" : ( ## ListBox { "name" : "ServerList", "type" : "listbox2", "x" : 10, "y" : 40, "width" : 232, "height" : SERVER_LIST_HEIGHT, "row_count" : 18, "item_align" : 0, }, { "name" : "ChannelList", "type" : "listbox", "x" : 255, "y" : 40, "width" : 109, "height" : SERVER_LIST_HEIGHT, "item_align" : 0, }, ), }, ),} Bien ahora que tenemos eso iremos a la carpeta login y sustituimos por los archivos que os daré ahora mismo: http://www.mediafire.com/?5bigetc18ba97de Bien una vez hecho todo eso compilamos todo y lo sustituimos. Ahora lo que haremos será coger estos dos archivos que os voy a dar ahora mismo: http://www.mediafire.com/?3yj2r9b0zlqx9ub Y los pondremos en la raíz del cliente. "Donde das click al Metin2.exe para abrir el sv". Y ya esta debería funcionar ^.^ Créditos: Ýoshii36 Y mi agradecimiento a jfirewall por decirme como hacer funcionar los port.
    1 punto
  33. Alguien que logre poner shop offiline Aqui les dejo el link Ya que yo no puede nose mucho del source y eso http://www.mediafire.com/file/cxpbc95doj7xowc/shop_offline.rar/file
    1 punto
  34. Bueno, como dije anteriormente, voy a publicar más cosillas y quizás más tarde me anime hasta a hacer diseños para algunos pero de momento ando muy ocupado, por lo que intentaré aportar todo lo que pueda. Esta web es de Beyond2, la antigua web que tenía, hablé con el dueño y no le importó en absoluto que la publicara, a si que aquí tenéis el PSD para quien la quiera. Conceptos: >> DESCARGA AQUÍ << ¡Recuerda dejar tu like, no te cuesta nada!
    1 punto
  35. Hola a todos! A continuación vamos a explicar como realizar la instalación de la ItemShop que proporciona Recursos Móviles para los clientes de Metin2. 1) Accederemos con nuestro usuario a http://www.recursosmoviles.com/index.html 2) En el menú de WEBMASTER entraremos en Herramientas ? Scripts ItemShop 3) Una vez dentro de la sección Scripts Itemshop, descargaremos la ItemShop para Metin2: 4) Extraemos los ficheros a una carpeta o directorio, por ejemplo itemshop, nos quedará algo así: 5) Subimos la carpeta o directorio itemshop a nuestro Hosting. 6) Deberemos acceder por el navegador a la ruta relativa /itemshop/setup_mysql.php (Ej: http://dominiometin2.com/itemshop/setup_mysql.php) 7) Una vez aquí configuraremos los datos para la conexión con nuestra base de datos: En el caso del ejemplo utilizaremos los siguientes datos de conexión: Host: localhost (Si tenéis base de datos remota tendréis que poner la IP de la base de datos) Login: semontejano (Usuario de la base de datos, normalmente es root) Password: aquí hay que poner la contraseña de acceso a la base de datos Bases de datos a crear: itemshop o itemshoprm por ejemplo… Una vez configurado los datos, le daremos a Crear para crear la base de datos y tablas utilizadas por la ItemShop. 8) Como nos indica, falta configurar el archivo config.fn.php que vamos a continuación y borrar el archivo setup_mysql.php 9) Pasamos a configurar el config.fn.php, solo tenemos que completar con nuestros datos, está comentando que es cada cosa y si tenéis dudas podéis contactar con el Soporte de Recursos Móviles: Una vez configurado el config.fn.php guardamos y ya podemos acceder a nuestra itemshop con los datos de administración o una cuenta del juego. Desde el navegador: http://tudominio.com/itemshop/itemshop.php administracion / passadmin ¡Y ya tenemos instalada nuestra ItemShop para Metin2! Versión en Vídeo: https://www.youtube.com/watch?v=jBKQQtT4FDI
    1 punto
  36. Hola muy buenas Chicos, En esta Guía les voy a enseñar a instalar la ItemShop 2.0 paso a paso y el sistema de pago de Recursos Móviles! Dispondrás de los siguientes métodos de pago de forma automática por coins! SMS Llamadas PayPal Tarjeta de Crédito SafetypPay Payvalida Depósitos 7Eleven Oxxo Rapipago Ripsa Webpay Boleto Pago Fácil Redpagos Exito Paysafecard (Tienes que solicitarlo a Recursos Móviles para que te lo active) y más. Instalar la ItemShop 2.0 de Recursos Móviles. El enlace de descarga de tal es el siguiente: - Descarga directa desde Recursos Móviles: Recursos Móviles - Descarga desde el panel de control de RecursosMoviles.com: Herramientas > Scripts Itemshop > Segunda Opción. Una vez tengamos nuestro archivo itemshop_metin_pro3.zip necesitamos un Hosting/Alojamiento Web donde subir la Itemshop. Yo tengo mi pagina web en https://www.recursosmoviles.host/. Subimos el contenido del archivo "itemshop_metin_pro3.zip" al FTP utilizando FileZilla (Enlace de Descarga): Para conectarnos a FileZilla utilizamos nuestros datos que nos proporciono nuestro proveedor de Hosting, - Servidor/IP: ftp.recursosmoviles.host (en mi caso) - Usuario: Metin2ESP (en mi caso) - Contraseña: Juanpepino (no es en mi caso pero ya me entienden jaja) - Puerto: 21 (Algunos proveedores de Hosting lo tienen cambiado, el por defecto para FTP es 21) Entramos en la carpeta /public_html/ y nos creamos una carpeta llamada "ItemShop" o "iShop" a vuestra elección. - Clic derecho "Crear Directorio" > "/public_html/ItemShop/" - Entramos en la carpeta "ItemShop" y seleccionamos el contenido del archivo "itemshop_metin_pro3.zip" Ahora entramos en nuestra pagina web http://metin2esp.com (en mi caso) y en la carpeta /itemshop/setup_mysql.php que quede así "metin2esp.com/itemshop/setup_mysql.php" Tenemos que completar los datos que nos piden en el apartado Configurar: Host, Login, Password y la Base de Datos a crear: - Host: Aquí colocamos la IP de nuestro servidor de juego en donde tengamos la mysql - Login: Aquí ponemos el usuario de nuestra mysql se recomienda utilizar el root para que se pueda crear correctamente la base de datos de la Itemshop. - Password: Aquí colocamos la contraseña de nuestro usuario de mysql antes puesto arriba. - Base de datos a crear: Aquí nos pide que elijamos el nombre de la base de datos que se creara para la Itemshop. Una vez tengamos los datos puestos correctamente le damos en crear y nos aparecerá el siguiente mensaje: Ahora que nuestra base de datos itemshop se creó correctamente, solo nos falta volver a poner los datos en el archivo config.fn.php que se encuentra en la carpeta /public_html/ItemShop/config.fn.php, volvemos a FileZilla y pulsamos "Clic derecho" > Ver/Editar en config.fn.php define("DB_HOST", "127.0.0.1"); Aquí va de nuevo la dirección IP de nuestro servidor de juego. define("DB_NAME", "itemshop"); Aquí el nombre de la base de datos que se creó con el script setup_mysql.php. define("DB_USER", "root"); Aquí ponemos el usuario que pusimos en el anterior script con los mismos privilegios. define("DB_PASS", ""); Aquí ponemos la contraseña del usuario que pusimos anteriormente. define("DB_TYPE", "mysql"); y esto no lo tocamos al tener nuestra base de datos en mysql y no en mssql que también soporta la Itemshop. Después tenemos que cambiar el usuario y contraseña del Administrador de la ItemShop por uno nuestro, no hace falta que exista en el juego. define("_ITEMSHOP_ADMIN_LOGIN", "admin"); Aquí ponemos el usuario del Admin. define("_ITEMSHOP_ADMIN_PASS", "admin"); Aquí ponemos la contraseña del Admin. Ahora nos queda cambiar añadir la ruta de la ItemShop para que las consultas por .php se ejecute correctamente. define("_ITEMSHOP_WEB", "http://metin2esp.com/ItemShop"); En mi caso voy a poner mi pagina web y la carpeta de la ItemShop. Guardamos nuestro script una vez lo tengamos configurado y aceptamos el cambio en el FileZilla pulsando en sí! y con esto ya tendríamos nuestra Itemshop funcionando correctamente, ahora nos falta añadir el método de pago de Recursos Móviles. Instalar la Pasarela de pago de Recursos Móviles. Nos registramos si no lo estamos en RecursosMoviles.com con el siguiente enlace: https://www.recursosmoviles.com/?id=12265 Una vez tengamos nuestra cuenta creada correctamente iniciamos sesión con nuestra cuenta, para que nos dirija al área de clientes. Una vez dentro en el menú de la izquierda (WebMaster) entramos en > Herramientas > Crear Script. En el apartado "Configuración de base de datos" nos pide los siguientes datos: - IP: Ponemos la Dirección IP de nuestro servidor de juego. - Nombre base de datos: Aquí va el nombre de la base de datos en el caso de Metin2 es siempre account. - Usuario (debe tener permisos): Como en el ejemplo anterior ponemos un usuario con privilegios por ejemplo root. En el apartado "Métodos habilitados" nos pide que seleccionemos los métodos de pago que queremos activar, en mi caso todos. En el apartado "Casó a utilizar" nos pide los siguientes datos: - Tipo: ID y Nombre de cuenta en la misma tabla / Aquí lo dejamos tal cual está. - Tabla de coins: En el caso de Metin2 es siempre account. - Campo de cuenta: En el caso de Metin2 es siempre login. - Campo de coins: En el caso de Metin2 es siempre coins. En el apartado "Descargar Script" sirve por si ya hemos creado un script anteriormente y lo queremos editar, - No editar el script con otro editor que no sea el de la página web de Recursos Móviles o les fallará. En el apartado "Configuración SMS" aquí ponemos cuantos Coins queremos que se otorgue por SMS enviado. - Por defecto: Si ponemos una cantidad por ejemplo "25" y en las demás casillas lo dejamos en blanco se otorga 25 por defecto, si editamos la cantidad en una casilla de abajo por 35 en todos los demás países se otorgará 25 por la casilla por defecto, menos en la casilla que editamos que se otorgara 35. En el apartado "Configuración Llamadas" aquí ponemos cuantos Coins queremos que se otorgue por cada Llamada realizada. - Por defecto: Aquí sucede lo mismo que en SMS, si en esta casilla ponemos "25" se otorgarán 25 coins por cada Llamada realizada. En el apartado "Configuración Depósitos, Tarjeta de crédito, PaySafecard etc..." aquí ponemos cuantos Coins queremos que se otorgue según la cantidad que paguen los usuarios. - Por defecto: Aquí es importante dejarlo en "0" - Nos podemos hacer una tabla de precios según el coste, por ejemplo 10€ = 1000 Coins, 20€ = 2000 Coins, 30€ = 3000 Coins. y así en todos los métodos de pago de abajo. Ahora nos vamos al apartado de arriba "Descargar Script" y pulsamos en Descargar Script, y nos generará un archivo llamado script.php. - Seleccionamos el archivo script.php y lo subimos a nuestra carpeta /public_html/script.php o public_html/ItemShop/script.php mediante FileZilla! Entramos a nuestra pagina web para comprobar que el script se subió correctamente, en mi caso "metin2esp.com/ItemShop/script.php". Ahora nos vamos de nuevo a RecursosMoviles.com y al área de clientes, para crear la herramienta de pago de Auto Respuesta. - Menú WebMaster > Herramientas > Auto Respuestas > Una vez en Auto Respuesta nos pide completar los siguientes datos para nuestra herramienta de pago. En el apartado "Nombre de la herramienta (alias)" ponemos el nombre de nuestra pasarela de pago en mi caso Metin2ESP. En el apartado "Métodos de pago" seleccionamos los métodos de pago que queremos activar en mi caso todos. En el apartado "Configuración de países para SMS" seleccionamos los países donde estará disponible pagar por sms en mi caso todos. En el apartado "Configuración de países para Llamada" seleccionamos los países donde estará disponible pagar por Llamada en mi caso todos. En el apartado "Configuración extra" pondremos la tabla que pusimos antes en el script creator, 10€ = 1000 Coins, 20€ = 2000 Coins y 30€ = 3000 Coins, en mi caso sería esto en el vuestro el precio que hubierais puesto en el script creator donde hicimos el script .php. - Para seleccionar 3 tipos de Opciones de pago pulsamos en "Precios múltiples" y en "Opciones de pago" seleccionamos "3". En el apartado "Funcionalidad" seleccionamos el mensaje que se enviará a nuestro jugador una vez realice el pago y la URL de notificación. - Es importante saber que esto solo se aplica para SMS si tienes activado los alias. - Puedes poner varios mensajes si los pones separados por espacio procura que sean cortos y así serán aleatorios. - URL de notificación: Aquí activamos la casilla y ponemos la URL del script .php que creamos antes con el script creator, en mi caso: "metin2esp.com/ItemShop/script.php" Una vez hemos realizado todos los pasos pulsamos en "Crear Auto Respuesta" y nos aparecerá un recuadro con un código en html. <a class='rm_pay_btn' href='https://iframes.recursosmoviles.com/v3/?wmid=12265&cid=37886' target='_blank'><img src='https://iframes.recursosmoviles.com/v3/button.php?label=pay&theme=3&color=black' /></a> Tenemos que añadir en el "href=" al final de la url los siguientes parametros. - &xf= Tu Usuario / Aquí ponemos el nombre que queremos que tenga el recuadro donde nuestros jugadores ingresaran su usuario de Metin2. - &pall=1000 Coins, 2000 Coins, 3000 Coins, / Aquí ponemos la tabla de precios en orden Ascendente de como lo pusimos en la herramienta de Auto Respuesta. Una vez lo tengamos puesto nos tiene que quedar algo de este estilo: &xf=Tu Usuario&pall=1000 Coins, 2000 Coins, 3000 Coins. Copiamos "&xf=Tu Usuario&pall=1000 Coins, 2000 Coins, 3000 Coins" y lo añadimos al final de la URL del "href=" <a class='rm_pay_btn' href='https://iframes.recursosmoviles.com/v3/?wmid=12265&cid=37886&xf=Tu Usuario&pall=1000 Coins, 2000 Coins, 3000 Coins' target='_blank'><img src='https://iframes.recursosmoviles.com/v3/button.php?label=pay&theme=3&color=black' /></a> Ahora vamos de nuevo a nuestro FileZilla y en la carpeta /public_html/ItemShop/ buscamos el archivo "getcredit.php". y cambiamos una parte del código donde pone: <!-- <iframe src="" style="border-style:none;" width="500px" height="400px"></iframe> --> Lo cambiamos por el código que editamos anteriormente (podemos añadir <center> código </center> para centrar el botón de pago): <a class='rm_pay_btn' href='https://iframes.recursosmoviles.com/v3/?wmid=12265&cid=37886&xf=Tu Usuario&pall=1000 Coins, 2000 Coins, 3000 Coins' target='_blank'><img src='https://iframes.recursosmoviles.com/v3/button.php?label=pay&theme=3&color=black' /></a> y guardamos las modificaciones realizadas y volvemos a pulsar en sí en el FileZilla. Ahora volvemos a nuestra Itemshop desde nuestro navegador, en mi caso: "metin2esp.com/ItemShop" y iniciamos sesión con una cuenta de metin2. Una vez dentro en el menú de la izquierda buscamos "Obtener Créditos" y podemos ver nuestro botón de pago, que al pulsar nos llevara a nuestra pasarela de pago. y con esto tendremos nuestra ItemShop funcionando correctamente y nuestra sistema de pago Automático de Recursos Móviles igual! Fin! Si en la ItemShop te da un problema de consulta te recomiendo volver a editar el archivo config.fn.php con lo siguiente: - define("_ITEMSHOP_WEB", "http://itemshop"); / Comprobar que la ruta de la ItemShop está puesta correctamente. - define("_ITEMSHOP_OWNID", true); / Cambiar por "false o true" para que el item se genere por la DB o por el Script. Si veis algun error o algo en lo que me haya equivocado no dudéis en comentarlo! Agradecería un y un comentario positivo! Saludos!
    1 punto
  37. Ya La Habian Visto Pues Ay La Posteo Para Ustedes Adaptada Por Mi jfirewall.rar
    1 punto
  38. transfer.sh Subelo donde tengas el game, y pon la ip del vps que quieres transferir.
    1 punto
  39. joao duarte

    [Armas]Pack de armas

    muy buenno
    1 punto
  40. IonutPopescu

    Metin2CMS v2.12

    UP: New available in 8 languages:
    1 punto
  41. Muchos de vosotros recordareis Metin2 Extasis, un servidor que dió mucho que hablar, un servidor innovador, uno de los mejores que han pasado por este foro, en mi opinión claro. De parte del equipo de Metin2 Zone os traemos todo nuestro antiguo trabajo, el cliente Metin2 Extasis COMPLETO y repito COMPLETO, tiene todo implementado esta perfecto para usarse, es la ultima versión del cliente de Metin2 Extasis. Como sabeis este cliente se encontraba encriptado, pues decidimos publicar el desencriptador para el cliente con lo que todos podreis usar y moldear el cliente a vuestro gusto, ademas de sacar lo que os guste de el. Aqui os dejo mas información sobre que trae este cliente: -Habilidades mejoradas con un mejor diseño. -Tema cristalino en español -Item_proto en español incluyendo gran parte de las nuevas armas,armaduras y accesorios. -Mob_proto en español incluyendo gran parte de nuevos mobs. -Sistema de puntos de logro listo para usar en el cliente(Aunque debes disponer de el en el servidor). -Nuevos mapas que pocos abreis visto, a parte de los de las fotos hay muchos mas implementados. -Tambien podreis ver gran parte de los nuevos mobs implementados. -Armaduras nuevas implementadas. -Infinidad de nuevas armas, muchas mas a parte de las de las fotos: http://img815.images...campanaspvm.jpg http://img10.imagesh...83/dagaspvm.jpg http://img85.imagesh...daspvmdegns.jpg http://img403.images...padaspvpdeg.jpg http://img214.images...adassurapvm.jpg http://img513.images...adassurapvp.jpg http://img818.images...21/fanespvp.jpg -Nuevos sellos para las monturas: -Nuevas monturas implementadas y atacan: http-~~-//www.youtube.com/watch?v=24-_YoXcLq4&feature=player_embedded -Nuevas mascotas implementadas: http://img196.images...3973/mascoo.jpg http://img855.images...7976/masco1.jpg http://img689.images.../643/masco2.jpg http://img818.images...1210/masco3.jpg http://img402.images...9076/masco4.jpg http://img859.images...9681/masco5.jpg -Ademas de todo esto cuenta con un excelente diseño, y un excelente loguin, con teclado, y la opcion de guardar contraseña y ID. Bueno y ya todos os estareis preguntando: ¿Donde lo descargo como lo consigo? http://www.4shared.com/rar/E52eodNF/Descompilador_Metin2Extasis.html? http://www.4shared.com/rar/d40djtzE/Cliente_Metin2_Extasis.html? La contraseña de los .rar es: www.Metin2Zone.net
    1 punto
  42. francia

    Web Seguridad

    Hola amigos bueno navengando por internet encontre esta web de seguridad la verdad es que no la teste ni la instale pero se las dejo demas que alguien le servira trae proteccion contra: DDos Flood Sql Injection etc.. Descarga.. no dejo imagenes por que no la tengo saludos creditos a Google por que ni idea de donde la sake. Seguridad Francia Google.rar
    1 punto
  43. Rheinald

    Nuevo taskbar !

    bueno ya ke veo ke esto anda un pco aburrido os dejo este taskbar echo por mi ! tiene algun que otro fallo como la exp y la barra de correr solo lo modifican en el archivo taskbar.py y ya sta ! Descarga: https://mega.co.nz/#!Zs43RCbR!jbFHZB_7nlCO4fLqYC8hCUCgF9jggjryPv2qkYELLpY
    1 punto
  44. Hola amigos de MZ en esta ocasión os traigo una pagina Web completísima que pensaba traducir para mi servidor pero al final como no la utilizaré preferí postearla. La web lo cierto es que es muy chula y os dejo también una Demo para que la veáis en acción. ¿Qué contiene? - Panel de administración - Panel de usuario - Protección contra Floods - Desbuguear personaje - Registro funcional - Ranking de PJ funcional - Loging funcional Y MUCHO MÁS ¿Idioma? Está en rumano, pero es facil de traducir FOTOOOO! ¡CLICAR AQUÍ PARA VER LA DEMO! ¡DESCARGA! ¿WTF? Regalame un Like si te gustooo! Laralalalaa!
    1 punto
  45. Anthony's

    [Intro Login] Traducida

    En pocas palabras dije que teníais que poner estos 2 archivos al cliente para que no saltara ningún error y que funcionara. Ami también me saltaban si no ponía esto: http://www.mediafire.com/?3yj2r9b0zlqx9ub
    1 punto
  46. DryUz

    Web muy hermosa

    Descarga: http://www.mediafire.com/?e9sbg20uon2xw9b
    1 punto
Esta clasificación está establecida en Madrid/GMT+02:00
×
×
  • Crear nuevo...