Jump to content

D0n D0vy

Miembro
  • Contador contenido

    0
  • Ingreso

  • Última visita

Actividad de reputación

  1. Me Gusta
    D0n D0vy 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.
  2. Me Gusta
    D0n D0vy reacted to Freddy Di Maria in Crear Server Metin2 + VDI 9.2 + Cliente Semi ES (TODO LO NECESARIO)   
    ACTUALIZADO 04/2021
    PARTE 1
    Explicación por mi
    Créditos a: Nilsonmax Programas Juegos MAX y BESTPRODUCTION
    Para Los nuevos.. es como montar un Windows en VirtualBox, solo que no hay pasos de instalación (es mas rápido si es que descargan uno ya hecho) de ahí es solo configurar 2 programas y abrir el cliente, editando un pequeño texto en Pack Semi Español, nivel max 120 versión 40k,32 bits (la que les enseñare), funciona 12/2020 probado por mi En la misma pagina pueden encontrar el VDI 64 bits y el cliente full español, pero es solo una versión de test antigua no actual DESCARGA  1- Debes iniciar sesión para ver el contenido del enlace en esta publicación. (que es el aqui enseño es la pagina de Nilsonmax) 2- Debes iniciar sesión para ver el contenido del enlace en esta publicación. si o si necesario y Debes iniciar sesión para ver el contenido del enlace en esta publicación. y root corregido Debes iniciar sesión para ver el contenido del enlace en esta publicación. para después utilizar 3- Virtualbox (Freeware buscar de la pagina oficial) 4- Hamachi (Opcional, multijugador a distancia, buscar de la pagina oficial) 5- WinSCP (Freeware solo necesario en la Parte 2, para edición) 6- Notepad++/Bloc de notas (para editar los textos y archivos .py) 7- Navicat MySQL 5.5 o otro superior premium de preferencia (de youtube mediafire :v) 8- PortMap (Freeware para abrir puertos 80 y 3306) 9- EterNexus File Archiver(esto es para extraer y editar archivos, no es necesario en esta parte solo en la Parte 2, lo encontraran en el Makepack o pueden descargarlo en otro post)   DATOS DE ACCESO: (Aclarar que utilice el BESTPRO 40k) ESPA        VDI freebsd 12.1=>usuario: root      clave: 0424nilmary  ESPA Navicat freebsd 12.1=>usuario: remoto clave: R1.mo_To   BESTPRO 40k        VDI freebsd 9.2=>usuario: root clave: dev  BESTPRO 40k Navicat freebsd 9.2=>usuario: root clave: /*bestproduction*/ clientes en ambos: usuario: nilsonmax clave:12345678 Video para entender de Brayan y NietzSche(El Cliente .es antiguo):
    Pueden ignorar gran parte del video de Nietzsche. solo ver el virtual box como monta el vdi que ip se pone navicat y como cambia el root, solo eso, ya si quieren hacerlo desde 0 configurando su BSD etc pueden verlo completo
     
    ** Otra opción *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.)*  
    Editar nombres de NPC, descripciones de los objetos, traducir armas, cambiar nombres de items, editar valor de ataque de las armas defensa de armadura (MySQL y Item proto) abajo

    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. ANEXO
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Otros files/en español y 40k una alternativa al español de arriba
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Mas info en el post bien explicado y detallado, y en el esta el post original de Arribal2

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. (dice ser la versión final) Pagina Oficial Para Profundizar mas y si quieren comprar su producción y la versión final (
    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.
    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.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Tomen nota de estos programas(estan al inicio del post) y entren en Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Si quieren editar quest (para cambiar algunas cosas como lo que da el baúl de aprendizaje, misiones, bienvenidas) (WinSCP usr /home/game/share/locale/germany/quest) , drop de yang(MySQL), porcentaje y que objetos dropean mobs y metines (WinSCP), introducir nuevas armaduras escudos(cliente root, MySQL y WinSCP)
    ACLARACIONES
    Según describió puedes descargar otro cliente y igual seria compatible
    excepto por algunos que necesitas cambiar la MySQL ver pagina 4 de: Debes iniciar sesión para ver el contenido del enlace en esta publicación. Esto ha sido solo lo básico, hay clientes mas avanzados con mas equipos y implementaciones
    Ahora ya depende de ustedes quizá mas adelante les muestre otras cosas, nos vemos 
     
  3. Me Gusta
    D0n D0vy reacted to Araiguma in Files Arrival2   
    me los vendió la rata de Jfirewall por 300 euros en su momento, como no los he podido aprovechar pues que al menos alguien los aproveche.
    las imagenes son echas de cuando estaba intentando hacer una ''pre presentación'' y las he cortado para que no se viera el ''Arrival2'' ya que se suponia que jfirewall no los puede vender por que 
    el otro dueño era HR o alguien así .
    Imagenes:

    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.  Source_Arrival2_Final
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Source Cliente arrival2
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Files_Arrival2_Final
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. DB_Arrival2_Final
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Cliente
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Tools
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Encriptador
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Desencriptador PD: si falta algo me lo decís y lo subo ya que he intentado hacer el post muy rapido
    en un día de estos posteo los del Rage también.
    PD: si vas a venir con idioteces pues ni te molestes ya que son files que he pagado en primer lugar y en segundo lugar la persona que me los vendió ni tenia los permisos...
     
    si tengo tiempo estos días subiré los del Rage que me vendió Jfirewall y la interfaz , login y select del Wered.
     
     
    BUGS QUE YO RECUERDE:
    La chamana Luz no cura.
    El Mail Box podías usarlo para Enviar objetos que ya habían sido vinculados sin tener que esperar el tiempo ni nada.
    Si sacas la mascota de Huevo y al mismo tiempo la intentas tirar a la basura creo que te tira el server o ya estaba fixeado no me acuerdo xd
  4. Me Gusta
    D0n D0vy reacted to [D]ELARO ✓ in Server Files 40k en VDI Arrival2   
    Buenas shabots, hace tiempo iba a subir esta onda en VDI pero he estado ocupado xd, son los files de Arrival2 que subió Debes iniciar sesión para ver el contenido del enlace en esta publicación. los subo tal cual están recién instalados los .tgz no he limpiado nada ni modificado en absoluto nada salvo la cuenta para entrar y pass, prácticamente están como se subieron, el VDI es freebsd 9.3 y mysql 5.6 y esta preparado para compilar el source de Arrival2, y si desean pueden usarlo para compilar el source de akron2 y los que sean compatibles.
    Les dejo el post original para cualquier duda que tengan: ya que yo no soy dev de esos files, asi que no me pregunten algo relacionado a los bugs o cualquier cosa ya que desconozco los bugs que tenga xd
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    VDI User: root
    VDI Pass: delaro
    Juego ID: delaro
    Juego Pass: delaro
    Mysql ID: root
    Mysql Pass: delaro
    Ok una vez descargado el VDI y Cliente de Arrival2 queda iniciarlo en el virtual box, recuerden configurarlo como adaptador puente, inician y pedirá el id y el pass los cuales están arriba, una vez dentro del VDI dan el típico sysinstall y configuran su ip que vayan a usar y la segunda terminada en .100 ya saben como y si no busquen pues hay demasiados tutoriales :v
    El cliente es complicado si no sabes nada de nada, pero en pocas palabras, 1- en root cambias por tu ip terminada en .100 en intrologin.py, 2- despues usan el EterNexus y compilan el root, 3- después seleccionas los 2 archivos root.eix y root.epk y los arrastras sobre el archivo que dice encriptador.exe, 4- les creara el archivo root.metin2, 5- dan doble click al archivo metin2 a araiguma.bat y renombrara en automático el archivo root.metin2 a root.araiguma, 6- el archivo root.araiguma lo pasan al cliente a la carpeta pack y reemplazan por el existente y listo.
    Una vez todo esta configurado perfectamente antes que nada se me paso hacer GM al personaje xd asi que en navicat abren common, gmlist y en el 1 aparece jfirewall lo cambian por delaro, guardan el cambio y reinician, ahora si para iniciar el servidor el tipico cd /usr/game das enter y sh inicio.sh te dira cuantos chs iniciar, les recomiendo 1 y maximo 2 ya que el ch3 y ch4 no configure los CONFIG con el ID y PASS de mysql pero solo cámbienlos por los mismo que puse en ch1 o ch2.. para detener el servidor es sh parar.sh
     
    Links por Google Drive
    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.
    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.
     
    Prueba de que funciona bien :v

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    FIX TRAIDOS POR Debes iniciar sesión para ver el contenido del enlace en esta publicación. SOLO HAY QUE REEMPLAZAR LOS ARCHIVOS EN ROOT. SE SUPONE REPARA EL BUG DE LA EXP DEL GREMIO. NO LO HE PROBADO YA QUE HACE TIEMPO BORRE TODO XD
     
     

    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. Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  5. Me Gusta
    D0n D0vy reacted to fuuton97 in [RECOPILACIÓN]Diffs para game r40250.   
    Hola a todos, viendo que esta el nuevo game a la luz, decidí postear los diffs que hasta ahora hay para la versión 40250, es una recopilación hecha por mi del foro epvp.
     
    Para descargar game r40250 & db r40146: 
     
    Game: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.!4M4gGJqJ!I3C7ADURLGzKsK9U-ptSFiBVDs5ZzQV9wtkQx4EUwPI DB: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.!xEQBBAJY!Uf77RitqVqBRqnyfn5qmCQqB-l4EU96kEIB4rL4cjRc  
    Recopilación de diffs para game versión 304083: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
    1- Tabla de experiencia (Es necesario meter este diff) :
    004524C0 2- Internal IP fix (Obligatorio introducir este diff), sirve para que no se caiga el login:
    This difference file is created by The Interactive Disassemblergame_r40250000A0C34: 80 90000A0C4D: 80 90000A0CD9: 80 90002169F3: 80 9000216A18: 80 90 3- Fix TimeBomb:
    00215F63: E8 EB00215F64: C8 1100215F65: 69 0000215F66: FA 0000215F67: FF 0000215F68: 3D 0000215F69: AC 0000215F6A: 61 0000215F6B: 11 0000215F6C: 54 0000215F6D: 8D 0000215F6E: 76 0000215F70: 0F 0000215F71: 87 0000215F72: E7 0000215F73: 01 000021615D: C6 000021615E: 05 000021615F: E8 0000216160: D8 0000216161: 7E 0000216162: 08 0000216163: 01 0000216164: E9 0000216165: 0D 0000216166: FE 0000216167: FF 0000216168: FF 00 4- Debe tener este diff: MUST HAVE.
    This difference file has been created by IDA Progame_r40250000F2833: E8 EB000F2834: 38 07000F2835: 2E 00000F2836: 12 00000F2838: 84 00000F2839: C0 00000F283A: 75 00000F283B: 14 00000F2850: 8B 00000F2851: 45 00000F2852: FC 00000F2853: 33 00000F2854: 05 00000F2855: 38 00000F2856: 9F 00000F2857: 6D 00000F2858: 08 00000F2859: C6 00000F285A: 05 00000F285B: E8 00000F285C: D8 00000F285D: 7E 00000F285E: 08 00000F285F: 01 00000F2860: 75 00000F2861: 06 00000F2862: C9 00000F2863: E9 00000F2864: 48 00000F2865: FE 00000F2866: FF 00000F2867: FF 00000F6A9B: E8 EB000F6A9C: D0 0B000F6A9D: EB 00000F6A9E: 11 00000F6AA0: 84 00000F6AA1: C0 00000F6AA2: 0F 00000F6AA3: 85 00000F6AA4: 4E 00000F6AA5: 04 00000F6EF6: E8 00000F6EF7: B5 00000F6EF8: B7 00000F6EF9: FF 00000F6EFA: FF 00000F6EFB: C7 00000F6EFC: 04 00000F6EFD: 24 00000F6EFE: 01 00000F6F02: E8 00000F6F03: 41 00000F6F04: FE 00000F6F05: F0 00000F6F06: FF 00000F712C: E8 EB000F712D: 3F 0B000F712E: E5 00000F712F: 11 00000F7131: 84 00000F7132: C0 00000F7133: 0F 00000F7134: 85 00000F7135: C9 00000F7136: 03 00000F7502: E8 00000F7503: A9 00000F7504: B1 00000F7505: FF 00000F7506: FF 00000F7507: C7 00000F7508: 04 00000F7509: 24 00000F750A: 01 00000F750E: 89 00000F750F: F6 00000F7510: E8 00000F7511: 33 00000F7512: F8 00000F7513: F0 00000F7514: FF 0000215670: 55 C300215671: 89 0000215672: E5 0000215673: 83 0000215674: EC 0000215675: 18 0000215676: A1 0000215677: 38 0000215678: 9F 0000215679: 6D 000021567A: 08 000021567B: 89 000021567C: 45 000021567D: FC 000021567E: 31 000021567F: C0 0000215680: 8B 0000215681: 55 0000215682: FC 0000215683: 33 0000215684: 15 0000215685: 38 0000215686: 9F 0000215687: 6D 0000215688: 08 0000215689: 75 000021568A: 02 000021568B: C9 000021568C: C3 000021568D: E8 000021568E: 76 000021568F: 18 0000215690: DF 0000215691: FF 0000215C20: 55 C300215C21: 89 0000215C22: E5 0000215C23: 83 0000215C24: EC 0000215C25: 18 0000215C26: A1 0000215C27: 38 0000215C28: 9F 0000215C29: 6D 0000215C2A: 08 0000215C2B: 89 0000215C2C: 45 0000215C2D: FC 0000215C2E: 31 0000215C2F: C0 0000215C30: 8B 0000215C31: 45 0000215C32: FC 0000215C33: 33 0000215C34: 05 0000215C35: 38 0000215C36: 9F 0000215C37: 6D 0000215C38: 08 0000215C39: 75 0000215C3A: 06 0000215C3B: C9 0000215C3C: E9 0000215C3D: 1F 0000215C3E: AB 0000215C3F: F0 0000215C40: FF 0000215C41: E8 0000215C42: C2 0000215C43: 12 0000215C44: DF 0000215C45: FF 0000217945: E8 EB00217946: D6 0300217947: E2 0000217948: FF 0000217949: FF 00 5- Máximo Nivel 150:
    This difference file has been created by IDA Progame_r4025000098B3E: 78 96000A5C44: 78 96 Máximo Nivel 255:
    This difference file is created by The Interactive Disassemblergame_r40250_3200098B3E: 78 FF000A5C44: 78 FF 6- Puntos de estatus 95:
    This difference file is created by The Interactive Disassemblergame_r40250_3200030E8E: 5A 5F00035202: 5A 5F00035216: 5A 5F0008B950: 59 5E00096F5F: 5A 5F00096F78: 5A 5F00096FA9: 5A 5F00097111: 5A 5F0009712E: 5A 5F00097155: 5A 5F00097172: 5A 5F000971A3: 5A 5F 7- all_item_can_belt_inventory2:
    This difference file is created by The Interactive Disassembler game_r40250 00052378: 77 72 00052387: 03 50 00052388: 74 7C 000523A5: E8 90 000523A6: A6 90 000523A7: 52 90 000523A8: FD 90 000523A9: FF 90 8- Activar el 6/7 bonus:
    This difference file is created by The Interactive Disassembler game_r40250 0005BD07: 55 65 0005BD08: 4A 49 0005C7A3: B9 C9 0005C7A4: 3F 3E 9- Teletranpostadores fix:
    This difference file is created by The Interactive Disassembler game_r40250 001049F2: E8 90 001049F3: B9 90 001049F4: 29 90 001049F5: F2 90 001049F6: FF 90 001049FA: E8 90 001049FB: 11 90 001049FC: 3E 90 001049FD: F2 90 001049FE: FF 90 10- Cristal de visión:
    This difference file is created by The Interactive Disassembler game_r40250 001060C9: 01 00 001060F1: 02 00 00106108: E8 90 00106109: B3 90 0010610A: 8C 90 0010610B: F4 90 0010610C: FF 90 11- Chat Global:
    This difference file is created by The Interactive Disassembler game_r40250 0010D85D: E8 90 0010D85E: FE 90 0010D85F: 6B 90 0010D860: F1 90 0010D861: FF 90 0010D864: 74 90 0010D865: CA 90 12- Apagar el comando shutdown:
    This difference file is created by The Interactive Disassembler game_r40250 00216163: 01 00 13- Hacer compras a 0 Yang:
    This difference file is created by The Interactive Disassemblergame_40250_32001AAA21: 8F 8D 14- 255 Mapas máximo:
    game_r40250 MAX_MAPS_PER_CORE 255000BF64A: 20 FF 15- Monturas Máximas:
    game_r40250 MAX Mounts00042D19: 0F FA 16- Poder juntar 255 ítems:
    game_r40250 255 Stackable items000506C5: C8 FF00050A6D: C7 FE0005283C: C8 FF00053369: C8 FF0009A340: C8 FF00110384: C8 FF00113E9E: C8 FF00118449: C8 FF 17- Botar ítems y desaparecer en:
    3 segundos:
    game_r40250 3 seconds item disappearing0005212A: 2C 030005212B: 01 00 5 segundos:
    game_r40250 5 seconds item disappearing0005212A: 2C 050005212B: 01 00 18- Bonos cambiado a 0 segundos:
    game_r40250 0 Sec Boni change time0005E4E1: 0A 00 19- No se admiten animales de nivel superior:
    This difference file is created by The Interactive Disassembler game_r40250 00030E97: 0A 00 00030EC1: E8 90 00030EC2: EA 90 00030EC3: F6 90 00030EC4: 01 90 00030EC5: 00 90 20- Skills a 17:
    This difference file is created by The Interactive Disassembler game_r40250 0006FBF9: 14 11 21- Check Client Version fix:
    This difference file has been created by IDA Progame_r4025000100819: 8E 84 22- Hacer bonificación visible en tienda:
    This difference file is created by The Interactive Disassemblergame_r40250_32001B2941: 88 0F001B2942: 11 21001B2CDD: 88 0F001B2CDE: 11 21 23- Fix Bug /war:
    game402500008DF69: 8E 8 Estos son los diffs hasta ahora, cabe decir que estos diffs solo sirven para esta versión (40250), y no para la 40424.
     
    Se actualizará cada ves que lo requiera.
     
     
    Saludos.
     
    Última actualización:
    10/02/14 Change Log:* Agregado Diff: Fix bug /war
×
×
  • Crear nuevo...