ninjapal
-
Contador contenido
9 -
Ingreso
-
Última visita
Actividad de reputación
-
ninjapal reacted to ALEXANDER2020 in Actualización oficial del partido
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Debes iniciar sesión para ver el contenido del archivo adjunto en esta publicación. -
ninjapal reacted to 【ℛ-𝓝】ℛ𝔂𝓼𝒆 in [SISTEMA] Almacèn especial
Con esta modificacion, se puede poner 3 tiendas en una, sin usar la quest de seleccion.
Creditos: Law
Descarga: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
-
ninjapal reacted to carlos21 in Gratis" Sistema de stolas+selet+charact+create c++ .De
Todo con guía de instalación
Trae todo icono parte src server cliente casi todo!! disfruten zone
lo unico creo que le falta es el item_scale despues creo que esta todo
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
creditos:max j4mt
Testeado y Probado
Aca dejo el sistema instalado para que compares de stolas..
con el notepad++ o con WinMerge
Source Cliente
Debes iniciar sesión para ver el contenido del enlace en esta publicación. -
ninjapal reacted to Rakancito in Anti Fake nombres en procesos como M2bob o Lalaker
Simplemente verifique si el nombre es probablemente falso y cierre el cliente.
También agregué un anti depuración para evitar Cheat Engine u otros con Memory Viewer y su depurador.
Debes iniciar sesión para ver el contenido del enlace en esta publicación. -
ninjapal reacted to Dilong in Serverfile 34083 español
Es un SF 34k español que lo prepare para que los nuevos puedan usarlo, tiene las dungeons normales: Catacumbas, Beran-setaou y Torre deminiaca, el unico que falta es el de la baronesa araña
Sistemas basicos: Atuendo, mascota (el normal del oficial), energia, evolucion de monturas (No llamaria sistema como tal a una quest, pero bueno), y bueno solo eso lo basico, no tiene cosas raras, lo que no esta en español son las preguntas del OX, por que en eso cada uno pone lo que quiere
El cliente pueden usar cualquier cliente 34k junto con el launch sura para 34k si quieren que los demas entren a su server via hamachi
Foto:
Link:
Debes iniciar sesión para ver el contenido del enlace en esta publicación. Navicat: root daroo
Cuenta GM: admin 123
Para encender el sf deben poner:
cd /usr/home/game
./panel
Debes iniciar sesión para ver el contenido del enlace en esta publicación. -
ninjapal reacted to TTV_RANDARON in CLEAN 40K FILES
Estos son 40k Servidores + Servidor + Fuente + Cliente limpios para que pueda comenzar a trabajar en su Servidor sin tener que preocuparse por los nuevos sistemas agregados, etc. Su juego de 40K completamente limpio, puro y básico.
No hay:
-lycan
sistema de atuendo
tienda fuera de línea
-faja
etc ...
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
-
ninjapal reacted to Wolf in [Tutorial+FilesMetin2Rain, Son 100% Virgenes] 27/03/2015 para empezar...
Hola,
Bueno me pidio un usario que hiciera 1 video sobre como crear 1 servidor metin2 y aqui
esta todo lo necesario con el video nos entendemos.
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Link's de MEGA:
Datos Principales de todo "GUIA":
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Cliente Omega ESP con windows.dds: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Cliente Omega Virgen: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
SF Rain 2007+ Cliente (Nuevo link @Dilong): Debes iniciar sesión para ver el contenido del enlace en esta publicación.
No-IP(DUC): Debes iniciar sesión para ver el contenido del enlace en esta publicación.
EterNexus: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Navicat Premium Full: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Port Map: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Traduccion Omega para el cliente sin traducir: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
VirtualBox: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Windows.dds para el Cliente Omega Virgen sin traducir en Español[ESP]: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
VIA HAMACHI:
Debes iniciar sesión para ver el contenido del enlace en esta publicación. VIA HAMACHI Lauling.V3:
Debes iniciar sesión para ver el contenido del enlace en esta publicación. 1 LINK DE MEGA TODO LO NECESARIO.
Para criticas mejor ni comenteis las ignorare solo lo e posteado para los que no saben,
que comienzen aprender...
Saludos, Wolf solo hice la guia de YouTube.
Alguna foto
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Fecha del Video: 27/03/2015
-
ninjapal reacted to ChuchoGamer in serverfiles Daroo Link Resubidos
Hola muy buenas tardes hoy les Traigo estos files Daroo 1678 son files virgenes Tambien les dejare un cliente para que puedan usarlo
el cliente es total mente virgen les pueden implementar lo que quieras ha sus gustos Claro Repito si estos files Ya estan postiado con link resubido Porfavor Borren este post Claros simpre y cuando si el otro Post original los tenga activo los links bueno en fin aqui se los dejo
Link del Files
Debes iniciar sesión para ver el contenido del enlace en esta publicación. La contraseña para Descomprimir los files es germany
Link Files 2089 (daroo 8.2) .tar y Cliente omega (2011) instalable por @Dilong:
Debes iniciar sesión para ver el contenido del enlace en esta publicación. Link del cliente
Debes iniciar sesión para ver el contenido del enlace en esta publicación. Datos para Encender la maquina virtual y Navicat
root
daroo
Para prender los files solo configuren la maquina cuando ya esta listo ponen
m2 start
les pedira que canal quieres encender les pones 1 y enter y listo
Cliente omega Español full esta por partes el cliente
Debes iniciar sesión para ver el contenido del enlace en esta publicación. Espero que os guste
Credito para el Creador del los files daroo 8.2 Saludos
-
-
ninjapal reacted to MiGueLiT0 in [Armas]Pack de +350
porque quizas se tiene que reaccionar? :v
LINK
Debes iniciar sesión para ver el contenido del enlace en esta publicación. -
ninjapal reacted to EzekielitohMercury in [SERVERFILES]Metin2Rage VDI!
Bueno amigos como vi que mucho no pudieron montar los .tar.gz asi que los monte & los subi espero que les sirva & no olviden dejar El "Me Gusta" & Decir Gracias :33 XD
DESCARGA
SERVERFILES
Debes iniciar sesión para ver el contenido del enlace en esta publicación. CLIENTE
MEGA: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
MEDIAFIRE: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
PARCHE DE TORRE NEMERE CLIENTE
Debes iniciar sesión para ver el contenido del enlace en esta publicación. CREDITOS
asusta99
EzekielitohMercury (Ezekielitoh) por subirlos & montarlos en VDI
DATOS DE LA MAQUINA
Usuario:root
Contraseña:dar enter no poner nada
COMANDOS PARA ENCENDER EL SERVIDOR
DATOS DE NAVICAT
ID: ragemt2 pass: susta CUENTA DEL JUEGO
ID:ragemt2 CONTRASEÑA:123 -
ninjapal reacted to MarcioCraker in Serverfiles Maxmi - Lycan en vdi FreeBSD 9.3 xd mais client 100% es
Serverfiles Maxmi - Lycan: vdi
Versões Binário: 28249 Game: 43360 Db: 43370 Idioma: Turco Características Alquimia do Dragão a funcionar perfeitamente sem bugs Sistema de Costumes a funcionar perfeitamente, actualizado Sistema de Cintos a funcionar perfeitamente Torre de Nemere funcional e estável Tabela Skill Proto actualizada Tabela Player_Index actualizada Locale.lua actualizado Skill Power actualizado Locale_strig.txt actualizado Nova Personagem Lycan adicionada Defesas contra Lycan adicionadas Aumento dos Slots das Lojas dos NPC's para 80 Mysql log eliminado Guild pode ter até 112 Personagens Grupo pode ter até 14 Personagens Capa da Bravura permanente Vouchers (50, 100, 500 e 1000 Md's) funcionais Todos os Itens do Lycan adicionados Efeito das Poções Verde e Roxa (quando usadas) adicionado Janela de Negócio de 12 passa para 24 Slots Entre outras...
Virtualbox:-root
pass-tyler
navicat:-tyler
Ingame: tyler 123456
Serverfiles vdi:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Client:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
pack:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Client: 100% es
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Ai Teneis:
-
ninjapal reacted to Kryzz in [SCRIPT] Borrar quest individualmente.
Bueno chicos un colego mio de nuestro servidor, hizo un script de borrar quest individualmente. Lo vengo a postear con su autoria.
Instalación
1° Vamos al winscp o filezilla y nos logueamos.
2° Luego vamos a la ruta de la imagen.
3° Procedemos a meter el script que dejare en descarga como adjunto, debe quedar asi:
4° Luego procedemos a darle estos permisos:
5° Nos logueamos y vamos nuestra consola de comandos, o para algunos VirtualBox
Escribimos esto:
Y luego esto:
Nos preguntara el nombre de la quest como en esta imagen:
Aqui escriben el nombre de la quest, por ejemplo: comenzarbio
Luego nos dira estas seguro S/N:
y colocamos "s" si es positivo y "n" si es negativo.
Luego la quest quedara borrada de nuestro servidor!
Creditos: Axioma, creador del script y colega mio.
Todos los derechos reservados, no copy-paste o posteo en otro foro, si la autoria del creador.
Debes iniciar sesión para ver el contenido del enlace en esta publicación. -
ninjapal reacted to Dilong in [Nuevo link]SF Akron2
Descripcion:
Link:
Debes iniciar sesión para ver el contenido del enlace en esta publicación. El cliente no está encriptado, pero si compilan el source del cliente, tendrán que cambiar las Keys para dejarlo sin encriptar
-
ninjapal reacted to Rakancito in KNOCKBACK Patch Skill 17.5 Official Servers
Debes iniciar sesión para ver el contenido del enlace en esta publicación. Simplemente es el retroceso de los ninjas arqueros que usa el servidor oficial. -
ninjapal reacted to LovePlay in [REDISEÑO] METIN2CMS
No estoy seguro de si esta web se llama METIN2CMS, pero vosotros sabéis de cual hablo; esta web que utilizan la mayoría de servidores. Os he hecho un re diseño simple, para que haya un poco de variedad, que casi todos los servidores están usando la misma sin cambiar ni los colores ni nada. Es muy fácil de editar la web sabiendo un poco de css, un poco de html y reemplazar algunas imágenes.
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Si falta algo en el PSD o necesitáis algún tipo de ayuda con el PSD para montarlo y tal, escribidme al Discord. (LovePlay#4817)
-
ninjapal reacted to Jfirewall in [GUÍA]Poner el calendario de eventos
Tienes que jugar con las tabulaciones, alguna duda de uso mp
-
ninjapal reacted to -YC- in [GUÍA]Poner el calendario de eventos
ps aja así les debe quedar xD
Debes iniciar sesión para ver el contenido del enlace en esta publicación.Debes iniciar sesión para ver el contenido del enlace en esta publicación." /> -
ninjapal reacted to -YC- in [GUÍA]Poner el calendario de eventos
Hola chicos vi que muchos tenían problemas a la hora de poner el sistema de calendario de Jfirewall es muy fácil pero les da error en el syserr o se queda cargando el juego aquí les vengo a dar los pasos
Primero les dejo el sistema adjunto:
1.-Descomprimen el .rar dentro hay una carpeta llamada pack adentro están los archivos calendar.eix y calendar.epk después los pasan a su cliente abren el archivo INDEX y debajo agregar
*calendar Ejemplo este es mi INDEX:
PACK*iconos*metin2_patch_dragon_rock_texcache*patch2*patch3*metin2_patch_pets*metin2_patch_pet2*patch1*pacificador_pet_system*calendar <------ Así debe quedar*metin2_patch_login*metin2_patch_power*metin2_patch_honor*login*age_of_zaria*metin2_patch_snow*metin2_patch_eu3pack/metin2_patch_etc_costume1pack/metin2_patch_pet1pack/metin2_patch_ramadan_costumepack/metin2_patch_flame 2.-Después, descompilas el root de tu cliente, cojes el archivo calendar.py que está en pack/root de la descarga y lo copias al root de tu cliente descompilado.
3.- Después buscas el archivo game.py de los roots lo abres y vas a lo ultimo del archivo das enter que quede un espacio y pegas esto: def Calendar(self): import calendar self.calendar = calendar.Calendar() self.calendar.Show() 4.- De ahí buscas:
onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7) y das un enter y pegas esto:
onPressKeyDict[app.DIK_F6] = lambda : self.Calendar() eso tiene que quedar así:
onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7) onPressKeyDict[app.DIK_F6] = lambda : self.Calendar() antes de todo te fijas en los que están ahí si no hay algun comando que abra algo con F6 si es así lo cambias a F7 o al correspondiente que quieras
5.-Esto sería todo cualquier error puedes comentar y en la brevedad posible te estaré ayudando
Créditos:
Jfirewall Creador del sistema
Yo- Por la guía xD
Debes iniciar sesión para ver el contenido del enlace en esta publicación. -
ninjapal reacted to PACI in [Guia] Crear diffs
Hola.
Como sabéis, ahora que el source es publico, ya nadie, o casi nadie, hará, ni posteará, más diffs para editar vuestros cores.
Este es uno de los motivos por los cuales hago escribo esta guia, el otro es para dar a la comunidad hispana un poco más de conocimiento, aunque no sea mucho.
Que se necesita para hacer diffs?
Hay quién diga que necesitas saber ASM (assembly), C, y esas cosas. Aunque, yo no sé ninguno de los 2, y creaba diffs.
Lo que más necesitamos es un brain.exe, como se suele decir, paciencia, y el
Debes iniciar sesión para ver el contenido del enlace en esta publicación. y un Debes iniciar sesión para ver el contenido del enlace en esta publicación..
Antes de ponernos a toquetear en el IDA, debemos, antes de nada, saber una cosa.
Qué es un diff?
Un diff (difference file) es un archivo que contiene, de una manera simplificada, una (o varias) linea(s) que altera(n) un (o más) bytes de un archivo.
La sintaxis es: offset: byte antiguo byte nuevo.
La creación de un diff no es propriamente un problema, ya que el IDA, dependiendo de lo que hayamos modificado, lo crea solo.
Y a través de un diff no puedes saber lo que cambia.
Después de saber que és un diff, y para que sirve, tenemos que saber qué es lo que queremos cambiar, y donde se localiza, yo, para eso, usaba el Pseudocode de un game core o db core para buscar lo que queria cambiar, obviamente para esto necesitamos el brain.exe, porque tenemos que entender la sintaxis del codigo que hay por ahí. Os dejaré en adjuntos, todos los pseudocodes de todos los game core y db core que tengo
Vale, ahora qué hago?
Yo, para empezar, cogeré el pseudocode del game r40250 y cambiaré... por ejemplo, el nível de diferencia que se necesita para invitar a alguién en un grupo.
Como empezamos?
Hay que saber un poquito de inglés, porque las variables no están escritas en español. Lo que sabemos es que grupo se puede decir party en inglés. Una vez sepamos eso, empezaremos buscando party en nuestro editor de texto (yo uso Notepad++ para esto, vosotros podéis usar algun otro), lo segundo es saber, cuando sucede la acción, o sea, cuando sale el mensajito ese en el chat diciendo que la diferencia de nível es X. Sabemos también que eso pasa cuando invitamos a alguién, invitar en inglés es invite. Entonces ya sabemos que tenemos que buscar algo como PartyInvite.
Cuando encontremos algo de este tipo:
extern char CHARACTER__PartyInvite_CHARACTER______FUNCTION__[12]; // weak Entonces lo que hacemos es buscar esa función. Ojo, apenas buscamos por CHARACTER__PartyInvite.
Y por fin, encontraremos la función CHARACTER__PartyInvite:
int __fastcall CHARACTER__PartyInvite(int a1, int a2, int a3, int a4){ int v4; // eax@4 int v5; // edx@4 int v6; // ecx@4 int v7; // ebx@6 int v8; // eax@6 int v9; // eax@7 int result; // eax@8 int v11; // eax@10 int v12; // eax@15 int v13; // eax@22 int v14; // eax@23 int v15; // edx@23 int v16; // ecx@23 int v17; // edi@23 int v18; // eax@23 int v19; // edx@25 int v20; // ecx@25 int v21; // [sp+0h] [bp-48h]@3 int v22; // [sp+0h] [bp-48h]@6 int v23; // [sp+20h] [bp-28h]@23 int v24; // [sp+24h] [bp-24h]@23 _BYTE v25[5]; // [sp+2Bh] [bp-1Dh]@29 int v26; // [sp+30h] [bp-18h]@23 int v27; // [sp+34h] [bp-14h]@22 int v28; // [sp+38h] [bp-10h]@1 v28 = *(_DWORD *)_stack_chk_guard__FBSD_1_0; if ( *(_DWORD *)(a3 + 9328) && CParty__GetLeaderPID(a1, a2, *(_DWORD *)(a3 + 9328)) != *(_DWORD *)(a3 + 256) ) { v21 = (int)&unk_848D8B8;LABEL_4: v4 = locale_find(v21); CHARACTER__ChatPacket(a3, 1, (const char *)v4); } else { if ( *(_BYTE *)(a4 + 9104) & 2 ) { v8 = CHARACTER__GetName(a4); v22 = (int)&unk_848D8E8; v7 = v8;LABEL_7: v9 = locale_find(v22); CHARACTER__ChatPacket(a3, 1, (const char *)v9, v7); } else { v11 = CHARACTER__IsPartyJoinableCondition(a3, a4); if ( (unsigned int)v11 <= 0xA ) { switch ( v11 ) { default: goto LABEL_11; case 10: v21 = (int)&unk_848D868; goto LABEL_4; case 8: v21 = (int)&unk_848D4C0; goto LABEL_4; case 7: v12 = CHARACTER__GetName(a4); v22 = (int)"<ÆÄƼ> ÀÌ¹Ì %s´ÔÀº ÆÄƼ¿¡ ¼ÓÇØ ÀÖ½À´Ï´Ù."; v7 = v12; goto LABEL_7; case 6: v21 = (int)&unk_848D480; goto LABEL_4; case 5: v21 = (int)&unk_848D440; goto LABEL_4; case 4: v21 = (int)&unk_848D404; goto LABEL_4; case 3: v21 = (int)&unk_848D3D0; goto LABEL_4; case 2: v21 = (int)&unk_848D39C; goto LABEL_4; case 1: v21 = (int)&unk_848D368; goto LABEL_4; case 0: v27 = *(_DWORD *)(a4 + 256); v13 = std___Rb_tree_unsigned_int_std__pair_unsigned_int__const_boost__intrusive_ptr_event___std___Select1st_std__pair_unsigned_int__const_boost__intrusive_ptr_event____std__less_unsigned_int__std__allocator_std__pair_unsigned_int__const_boost__intrusive_ptr_event______find( a3 + 9340, (int)&v27); v5 = a3 + 9344; if ( a3 + 9344 == v13 ) { v14 = AllocEventInfo_TPartyJoinEventInfo_(); *(_DWORD *)(v14 + 4) = *(_DWORD *)(a4 + 256); *(_DWORD *)(v14 + 8) = *(_DWORD *)(a3 + 256); event_create_ex(&v26, (int)party_invite_event, v14, 10 * passes_per_sec); v17 = v26; v18 = *(_DWORD *)(a4 + 256); v24 = v26; v23 = v18; if ( v26 ) intrusive_ptr_add_ref(v16, v15, v26); std___Rb_tree_unsigned_int_std__pair_unsigned_int__const_boost__intrusive_ptr_event___std___Select1st_std__pair_unsigned_int__const_boost__intrusive_ptr_event____std__less_unsigned_int__std__allocator_std__pair_unsigned_int__const_boost__intrusive_ptr_event_______M_insert_unique( a3 + 9340, (int)&v23); if ( v24 ) intrusive_ptr_release(v20, v19, v24); if ( v17 ) intrusive_ptr_release(v20, v19, v17); v25[0] = 77; *(_DWORD *)&v25[1] = *(_DWORD *)(a3 + 260); DESC__Packet(*(_DWORD *)(a4 + 44), (int)v25, 5); } break; } } else {LABEL_11: sys_err((int)"PartyInvite", 4558, "Do not process party join error(%d)", v11); } } } result = *(_DWORD *)_stack_chk_guard__FBSD_1_0 ^ v28; if ( *(_DWORD *)_stack_chk_guard__FBSD_1_0 != v28 ) __stack_chk_fail(v6, v5); return result;} Ahora a partir de aquí, hay que saber leer. Vayamos por partes:
LABEL_4: v4 = locale_find(v21); CHARACTER__ChatPacket(a3, 1, (const char *)v4); LABEL_7: v9 = locale_find(v22); CHARACTER__ChatPacket(a3, 1, (const char *)v9, v7); LABEL_4 y LABEL_7 tienen un locale_find y un ChatPacket, lo que significa que buscará en el locale_string.txt un texto que estará dentro del locale_find y luego lo mostrará en el Chat.
Pasemos directamente al switch:
v11 = CHARACTER__IsPartyJoinableCondition(a3, a4); if ( (unsigned int)v11 <= 0xA ) { switch ( v11 ) { default: goto LABEL_11; case 10: v21 = (int)&unk_848D868; goto LABEL_4; case 8: v21 = (int)&unk_848D4C0; goto LABEL_4; case 7: v12 = CHARACTER__GetName(a4); v22 = (int)"<ÆÄƼ> ÀÌ¹Ì %s´ÔÀº ÆÄƼ¿¡ ¼ÓÇØ ÀÖ½À´Ï´Ù."; v7 = v12; goto LABEL_7; case 6: v21 = (int)&unk_848D480; goto LABEL_4; case 5: v21 = (int)&unk_848D440; goto LABEL_4; case 4: v21 = (int)&unk_848D404; goto LABEL_4; case 3: v21 = (int)&unk_848D3D0; goto LABEL_4; case 2: v21 = (int)&unk_848D39C; goto LABEL_4; case 1: v21 = (int)&unk_848D368; goto LABEL_4; case 0: v27 = *(_DWORD *)(a4 + 256); v13 = std___Rb_tree_unsigned_int_std__pair_unsigned_int__const_boost__intrusive_ptr_event___std___Select1st_std__pair_unsigned_int__const_boost__intrusive_ptr_event____std__less_unsigned_int__std__allocator_std__pair_unsigned_int__const_boost__intrusive_ptr_event______find( a3 + 9340, (int)&v27); v5 = a3 + 9344; if ( a3 + 9344 == v13 ) { v14 = AllocEventInfo_TPartyJoinEventInfo_(); *(_DWORD *)(v14 + 4) = *(_DWORD *)(a4 + 256); *(_DWORD *)(v14 + 8) = *(_DWORD *)(a3 + 256); event_create_ex(&v26, (int)party_invite_event, v14, 10 * passes_per_sec); v17 = v26; v18 = *(_DWORD *)(a4 + 256); v24 = v26; v23 = v18; if ( v26 ) intrusive_ptr_add_ref(v16, v15, v26); std___Rb_tree_unsigned_int_std__pair_unsigned_int__const_boost__intrusive_ptr_event___std___Select1st_std__pair_unsigned_int__const_boost__intrusive_ptr_event____std__less_unsigned_int__std__allocator_std__pair_unsigned_int__const_boost__intrusive_ptr_event_______M_insert_unique( a3 + 9340, (int)&v23); if ( v24 ) intrusive_ptr_release(v20, v19, v24); if ( v17 ) intrusive_ptr_release(v20, v19, v17); v25[0] = 77; *(_DWORD *)&v25[1] = *(_DWORD *)(a3 + 260); DESC__Packet(*(_DWORD *)(a4 + 44), (int)v25, 5); } break; } } else {LABEL_11: sys_err((int)"PartyInvite", 4558, "Do not process party join error(%d)", v11); } Como veremos, la variable v11 está obteniendo el valor de una otra función, llamada CHARACTER__IsPartyJoinableCondition.
Entonces, lo que el servidor hará es testear ese valor desde la función switch.
switch ( v11 ) { default: goto LABEL_11; Si esa variable es false dependiendo de los valores encontrados en los case, entonces irá hasta el LABEL_11, que es un error en syserr:
LABEL_11: sys_err((int)"PartyInvite", 4558, "Do not process party join error(%d)", v11); Si esa condición es verdadera, hará una serie de cosas.
Entonces ya sabemos que, lo que sale en el chat dependerá:
- Del valor de la variable v11, o sea, el valor que la función CHARACTER__IsPartyJoinableCondition obtiene. Ahora que sabemos esto, vayamos directos a esa función.
int __cdecl CHARACTER__IsPartyJoinableCondition(int a1, int a2){ int v2; // edx@1 int result; // eax@2 v2 = a2; if ( *(_BYTE *)(a1 + 9797) == *(_BYTE *)(a2 + 9797) ) { if ( *(_DWORD *)_stack_chk_guard__FBSD_1_0 == *(_DWORD *)_stack_chk_guard__FBSD_1_0 ) return CHARACTER__IsPartyJoinableMutableCondition(a1, a2, a1, a2);LABEL_6: __stack_chk_fail(a1, v2); } v2 = *(_DWORD *)_stack_chk_guard__FBSD_1_0 ^ *(_DWORD *)_stack_chk_guard__FBSD_1_0; result = 10; if ( *(_DWORD *)_stack_chk_guard__FBSD_1_0 != *(_DWORD *)_stack_chk_guard__FBSD_1_0 ) goto LABEL_6; return result;} De aqui no podemos sacar grandes conclusiones, pero, sabemos una cosa:
if ( *(_DWORD *)_stack_chk_guard__FBSD_1_0 == *(_DWORD *)_stack_chk_guard__FBSD_1_0 ) return CHARACTER__IsPartyJoinableMutableCondition(a1, a2, a1, a2); Esta funcion hará return al valor de una otra función. Debemos entonces, movermos hasta esa función, CHARACTER__IsPartyJoinableMutableCondition.
int __fastcall CHARACTER__IsPartyJoinableMutableCondition(int a1, int a2, int a3, int a4){ int v4; // edx@1 char v5; // al@4 __int64 v6; // qax@5 int result; // eax@7 int v8; // eax@10 int v9; // [sp+1Ch] [bp-Ch]@1 v4 = 1; v9 = *(_DWORD *)_stack_chk_guard__FBSD_1_0; if ( *(_BYTE *)(singleton_CPartyManager___ms_singleton + 76) ) { LOBYTE(v4) = 2; if ( !*(_DWORD *)(a3 + 9364) ) { LOBYTE(v4) = 3; if ( !*(_BYTE *)(a4 + 4) ) { v5 = LC_IsCanada(a1); a1 = 15; if ( !v5 ) a1 = (unsigned __int8)LC_IsBrazil(15) < 1u ? 30 : 10; v6 = *(_BYTE *)(a3 + 1298) - *(_BYTE *)(a4 + 1298); LODWORD(v6) = (HIDWORD(v6) ^ v6) - HIDWORD(v6); v4 = 4; if ( a1 >= (_DWORD)v6 ) { LOBYTE(v4) = 7; if ( !*(_DWORD *)(a4 + 9328) ) { if ( !*(_DWORD *)(a3 + 9328) || (v8 = CParty__GetMemberCount(a1, v4, *(_DWORD *)(a3 + 9328)), v4 = 8, v8 != 8) ) v4 = 0; } } } } } result = v4; if ( *(_DWORD *)_stack_chk_guard__FBSD_1_0 != v9 ) __stack_chk_fail(a1, *(_DWORD *)_stack_chk_guard__FBSD_1_0 ^ v9); return result;} La primera cosa en lo que nos fijaremos es en esto:
v5 = LC_IsCanada(a1); a1 = 15; if ( !v5 ) a1 = (unsigned __int8)LC_IsBrazil(15) < 1u ? 30 : 10; La variable v5 será igual a un boolean (true o false), a1 es un integer (un valor entre 0 a 2 millones). Lo que la función hace, es verificar si la variable v5 es false, si así es, el valor de la variable a1 cambia, dependiendo del locale, ya que si este es un locale/brazil el a1 será 10.
a1 = (unsigned __int8)LC_IsBrazil(15) < 1u ? 30 : 10; Esto es lo que se llama, un short if-statement:
a1 = boolean ? valor si es true : valor si es false;
Como el nivel de diferencia en los servidores de europa es 15, podemos concluir que la variable a1 define el nivel de diferencia y es el valor que queremos cambiar.
Toqueteando en el IDA
Después de saber que valor tenemos que cambiar, y donde está, abrimos el IDA:
Y le damos al primer botón (New - Disassemble a new file), seleccionamos nuestro archivo, en mi caso el game r40250, y nos aparecerá algo de este tipo:
Nosotros, sin tocar en nada, le damos al OK. Y esperamos hasta que cargue las funciones.
Cuando nos salga algo así:
Significa que las funciones ya están cargadas.
Ahora le hacemos click en la ventana Function name y escribimos: CHARACTER::IsPartyJoinableMutableCondition y le damos un doble click.
Nosotros simplemente bajamos hasta aqui:
Si le damos al botón de tabulación, nos llevará al pseudocode de esa función y, además, nos dejará en la localización actual, por ejemplo:
call _Z11LC_IsCanadav ; LC_IsCanada(void)mov ecx, 0Fhtest al, aljz short loc_806E8B0 Si hacemos click en el mov y hacemos un jump to pseudocode nos llevará hasta:
a1 = 15; Yo, como no sé cambiar los valores de los short if-statements, haré NOP (No Operation, que simplemente hace que en esa parte no haga nada).
Entonces, nos moveremos al Hex View y podremos ver que la parte que está seleccionada, es la parte que hemos seleccionado en el IDA View.
Nos vamos a la ventana donde está el LC_IsCanada:
.text:0806E83A jnz short loc_806E878.text:0806E83C call _Z11LC_IsCanadav ; LC_IsCanada(void).text:0806E841 mov ecx, 0Fh.text:0806E846 test al, al.text:0806E848 jz short loc_806E8B0 El short jump if not zero (jnz) si le damos click y vamos al pseudo, veremos que está demasiado arriba del if-statement.
El call al LC sabemos que es una variable
El mov es la variable que queremos cambiar.
El test es el if-statement.
El jump if zero (jz) basicamente es lo que va después de la condición.
Entonces lo que tenemos que hacer, es NOP al jz y al test.
Como?
Facil, seleccionamos lo que queremos cambiar:
Nos vamos al Hex View le damos al F2, y cambiamos los 2 valores que salen seleccionados por 90. Ya que el No Operation (NOP) equivale a 90. Volvemos a darle al F2 para guardar los cambios.
Y luego, hacemos lo mismo con el jz.
Que hemos echo entonces?
Basicamente, lo que hicimos hasta ahora, es dejar el nivel de diferencia entre jugadores para que se inviten sea de 15, ya que el if define todo lo demás, dependiendo del locale.
Si queremos cambiar el 15 por otro, facil. Vamos hasta:
mov ecx, 0Fh
Luego al Hex View, entonces abrimos el
Debes iniciar sesión para ver el contenido del enlace en esta publicación., ponemos 15 donde el 1, y le damos click a to hexadecimal, que nos saldra un f, o sea 15 en hexadecimal equivale a 0F. Buscaremos eso en el Hex View, le damos al F2. Volvemos al conversor, y convertimos el valor que queremos poner a cambio de 15. Yo por ejemplo, pondré 5 que es 05. Le daré al F2 otra vez para guardar los cambios.
Entonces si vuelvo al pseudo me saldrá:
v5 = LC_IsCanada(a1, v4); a1 = 5; En vez de:
v5 = LC_IsCanada(a1, v4); a1 = 15; Eso es porque hemos cambiado el 15 por 5 en el Hex View.
Por fin, como creamos la diff después de cambiar lo que queramos?
Y mi diff me saldrá así:
This difference file has been created by IDA Progame_r4025000026842: 0F 05 // Esto es el cambio de la variable a1, de 15 a 5// Estos NOP es de la condición que hemos "eliminado"00026846: 84 9000026847: C0 9000026848: 74 9000026849: 66 90 Y por último os dejo aqui los pseudocode que tengo:
Debes iniciar sesión para ver el contenido del enlace en esta publicación. -
ninjapal reacted to Akil in [TIP]Reparar tablas corruptas
Me pide que introduzca una pass, cual pongo?
Pongo la de la db y me aparece esto
Debes iniciar sesión para ver el contenido del enlace en esta publicación. Con la pass del dedicado tambien me sale lo mismo
-
ninjapal reacted to Akil in [TIP]Reparar tablas corruptas
No me funciona,
tengo este error, cuando le doy a desing table
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
me pasa en cualquier tabla
-
ninjapal reacted to Shiindrex in Quest:Informacion sobre caballos traducida
Hola amigos de mt2zone
Les traigo la quest de informacion sobre caballos traducida tal cual como esta en el .es
La quest se trata de que cuando das click en el chico del establo te pone Informacion sobre el caballo, muy util para el que quiera tener el server oldschool.
Aca les dejo el pastebin:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
quest horse_guard beginstate start beginwhen 20349.chat."Información sobre caballos" beginlocal s=number(1, 7)if 1>=s then -- 14.29% (1/7)say_title("Chico del Establo:")say("Hay diferentes habilidades de monta. Además,")say("puedes aumentar el nivel de tu caballo para que")say("se vuelva más fuerte. Pero sólo personas con una")say("medalla de caballo pueden aumentar el nivel de")say("sus caballos.")elseif 2>=s then -- 14.29% (1/7)say_title("Chico del Establo:")say("Los caballos necesitan un tipo distinto de comida")say("dependiendo de su nivel. Los caballos")say("principiantes comen heno, los intermedios comen")say("zanahorias y los expertos ginseng rojo.")say("Puedes dar por seguro que son más exigentes que")say("los humanos...")say("")elseif 3>=s then -- 14.29% (1/7)say_title("Chico del Establo:")say("Hay caballos para tres niveles de jinetes:")say("principiante, intermedio y experto. Si entrenas")say("lo suficiente y quieres alcanzar el siguiente")say("nivel, tienes que pasar una prueba.")say("")elseif 4>=s then -- 14.29% (1/7)say_title("Chico del Establo:")say("Si el caballo está sano, se muestra con un")say("indicador verde. Si se vuelve amarillo, significa")say("que tu caballo está hambriento. Si está rojo, tu")say("caballo se está muriendo de hambre. Tienes que")say("darle de comer para que vuelva de amarillo o rojo")say("a verde. Un caballo muerto es algo muy serio.")say("")elseif 5>=s then -- 14.29% (1/7)say_title("Chico del Establo:")say("Para comenzar una misión de caballo, necesitas")say("una medalla de caballo. Puedes conseguir una en")say("la mazmorra de los monos.")say("")elseif 6>=s then -- 14.29% (1/7)say_title("Chico del Establo:")say("Hay rumores de que un caballo muerto puede ser")say("resucitado con hierbas solares. Pero esas hierbas")say("están custodiadas por los monos y parece que es")say("difícil conseguirlas. Se dice que si te atrapan")say("los monos, te maldicen y te transformas en uno de")say("ellos.")say("")elseif 7>=s then -- 14.29% (1/7)say_title("Chico del Establo:")say("Cuando montas tu caballo, su salud se acaba")say("lentamente y se queda exhausto. No puedes montar")say("un caballo sin salud. Por consiguiente, tienes")say("que dejarle descansar ocasionalmente.")say("")endendendstate __COMPLETE__ beginwhen enter beginq.done()endendend Dejen un gracias si les sirvio, seguire aportando quest traducidas, espero que les sirvan Saludos!
-
ninjapal reacted to NazoX in [AYUDA]Quest Caballo
Debes iniciar sesión para ver el contenido del enlace en esta publicación. Son todas las misiones del oficial, 1 medalla los 45 arqueros salvajes + 100k, subirlo hasta el nivel 10 (más el lv1 que tienes al conseguir el pony) te da la misión del armado, matar los bandidos-arqueros salvajes, serpientes arqueros esos , y su cantidad que no me acuerdo + 500k, y subirlo hasta el 21, y misión del militar, matar en torre los x demonios + 1kk , también trae revivir al caballo, menu del caballo, usar tiquet de monta, (los que canjeas x 25 min), revivirlo con las plantas, y todo.
gracias a
Debes iniciar sesión para ver el contenido del enlace en esta publicación. por ayudarme con estas quest en sus tiempos. -