Jump to content

PACI

Miembro
  • Contador contenido

    501
  • Ingreso

  • Última visita

  • Días ganados

    58

Actividad de reputación

  1. Me Gusta
    PACI got a reaction from Dimitris Melis in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  2. Me Gusta
    PACI got a reaction from Frezi Op in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  3. Me Gusta
    PACI got a reaction from TrafalgarLaw in Nueva Quest del Sistema de Energia   
    Hola.
    Bueno, hace unos días  gracias a Luca Fraga de Inforge, yo y un amigo conseguimos, digamos, "mejorar" el sistema de energía free, o mejor dicho, la parte del .use del Cristal de energía.
    Os estaréis preguntando, mejorarlo como? Bueno, como sabréis en los oficiales, cuando recibes el cristal, al primer click que le das, te saldrá la cantidad de energía que recibirás, pues bueno aquí es parecido, pero en vez de energía, te dará un bonos aleatoria mente  y lo mismo con su cantidad, y al segundo click, hará el cmdchat, y dará la cantidad y el bonos que saldrán al primer click.
    La imagen esta en mi firma.
    Primero de todo, necesitaremos de la Lib de Luca, la LfLib que posteó en inforge.

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     
    En quest_functions, colocareis las funciones:
    lf_item.get_attribute
    lf_item.set_attribute
     
    La quest: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Yo la tengo en Portugués, pero no creo que sea problema alguno.
    Bueno, tendréis que cambiar también el type del item 51002 en el cliente, ya que es type 27, yo le puse type 28, como los atuendos.
    Otra cosa es que mi quest, no usa el mysql_query, ya que tenia un bug por la Lib del sistema de atuendos.
    Como editar los bonos que salen, sus cantidades y la duración?
    Bonos :
    - Al primer click, en el array idbonus, colocais el id del bonus.
    - Al segundo click, en el array qt_bonus.
    -- Nota: La clientside es del sistema de energía lite (free), para editar abren el uitaskbar.py y editan el desc. El primer bono del array qt_bonus corresponde al primer bonus del desc (en el uitaskbar.py)
     
    Cantidades:
    - Como vereis hay varios math.random, los valores que están ahí, son los que editáis.
     
    Duración:
    - get_time() + X, yo lo tengo en 15, o sea, dura 15 segundos, vosotros lo poneis a vuestro gusto.
     
    He escrito más de lo que podría haber escribido? Puede, pero bueno, funciona igual.
     
    Agradecimientos:
    PauloFerreira por la idea y consejos;
    Luca Fraga por la Librería.
     
    Actualmente y que yo sepa existen 2 quests, la mía, y la de paulo, son parecidas, pero no pasa na.
     
    Créditos de la quest: Yo.
     
    Saludos.  
     

  4. Me Gusta
    PACI got a reaction from santos2002 in Ranking De Kills   
    Hola MZ, como no hacia nada pensé en dejaros el la quest de ranking de kills que tengo en mi server, la he traducido para español.
     
    Bueno, método simple:
     
    Se descargan
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Después se conectan al FTP ( Filezilla o WinSCP ), se dirigen a:
     

    /usr/rain/channel/share_data/locale/spain/quest En caso de tener otras files, solo cambian la parte de " rain " para el otro nombre
     
    Y Mueven la quest hacia ai. Despues de eso, abre el archivo locale.lua y al final ponen:

    Kills.quest Despues van a la maquina virtual y escriben esto:

    cd /usr/rain/channel/share_data/locale/spain/quest Le dan ENTER
     
    Y despues escriben esto:

    ./qc Kills.quest Despues o dan reboot, o con un personage GM hacen /reload q
     
    Y es todo...
     
    Buenas Noches
     
    Me olvide de que esto iba en Quests Metin2 --"
  5. Me Gusta
    PACI got a reaction from clanco365 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.
  6. Me Gusta
    PACI got a reaction from caanmasu in borrar   
    No entiendo como va esto de tener que enviarte un mensaje privado por algo que estás compartiendo.
  7. Me Gusta
    PACI got a reaction from Lincoln in [Release] Templo del Dragón - Reworked   
    otra mierda que desarrollé y no quise terminar.
     

     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    pd: los modelos no son míos, no sé quien es el autor, pero gracias.
  8. Me Gusta
    PACI got a reaction from CMolina in [Release] Templo del Dragón - Reworked   
    otra mierda que desarrollé y no quise terminar.
     

     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    pd: los modelos no son míos, no sé quien es el autor, pero gracias.
  9. Me Gusta
    PACI got a reaction from Ícaro Quin in Ranking De Kills   
    Hola MZ, como no hacia nada pensé en dejaros el la quest de ranking de kills que tengo en mi server, la he traducido para español.
     
    Bueno, método simple:
     
    Se descargan
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Después se conectan al FTP ( Filezilla o WinSCP ), se dirigen a:
     

    /usr/rain/channel/share_data/locale/spain/quest En caso de tener otras files, solo cambian la parte de " rain " para el otro nombre
     
    Y Mueven la quest hacia ai. Despues de eso, abre el archivo locale.lua y al final ponen:

    Kills.quest Despues van a la maquina virtual y escriben esto:

    cd /usr/rain/channel/share_data/locale/spain/quest Le dan ENTER
     
    Y despues escriben esto:

    ./qc Kills.quest Despues o dan reboot, o con un personage GM hacen /reload q
     
    Y es todo...
     
    Buenas Noches
     
    Me olvide de que esto iba en Quests Metin2 --"
  10. Haha
    PACI got a reaction from AlphaDesign in Wor2.global   
    Gracias pero no. Curraos las presentaciones un poco coño que ya no estamos en 2008.
    Cierro el hilo.
  11. Me Gusta
    PACI got a reaction from clocki in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  12. Me Gusta
    PACI got a reaction from maicol gomez in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  13. Me Gusta
    PACI got a reaction from admnahui in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  14. Me Gusta
    PACI got a reaction from JmmCardoso in [RLS] Cubil de la Baronesa Araña   
    Hola otra vez.
    Os dejo aquí esta dungeon, pero aparte de la Mazmorra Arañas 3.
     

     
    En la descarga hay la quest, regens y el mapa.
     
    Nota: Probablemente hay funciones que vosotros no tengáis en la quest, pero nada del otro mundo, simplemente las borráis.
    Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Saludos
  15. Me Gusta
    PACI got a reaction from trazdv in Poniendo Dif's   
    Hola bueno vayamos ya a lo que interesa:
     
    Como poner dif's a un archivo Game.
     
    1 - Descargan
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. 2 - Tener un archivo game y una dif.
    3 -

     
     
    4 - En el quadro blanco muestra el progreso de la colocacion de la dif en el archivo game.
    5 - Solo esta colocada quando todo ( en el quadro blanco ) pare !
    6 - Colocar el archivo Game con la nueva dif en el servidor ( ruta: /usr/lo que venga/channel/share_data )
    7 - Poner permisos 777 y dar reboot.
     
    Nota: Para aquellos en que los dif vienen escritos en la guia de donde lo vieron, como ponerlo ?
    Abrir el bloc de notas, notepad ++ o WordPad y copiar el texto que pusieron, y pegar en el bloc de notas. Cerrar y seleccionar donde dice, guardar como archivo de texto o algo asi, ponen " Todos los Archivos " y guardan con el nombre, por ejemplo:

    Metin2Zone.dif Es obligatorio que acabe en Dif. 
    Y Como Colocarlo Al Game ?
     
    Solo hay que ver la guia desde el inicio.
     
    Guia echa a pedido de:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
    Es todo.
  16. Me Gusta
    PACI got a reaction from Gustyn 112 in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  17. Gracias
    PACI got a reaction from Jan Kadeřábek in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  18. Me Gusta
    PACI got a reaction from Emir Sanchez in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  19. Me Gusta
    PACI got a reaction from gregoryarts in [Extractor+Conversor] item_proto client -> servidor   
    Pues eso, ya lo había publicado en zone, aunque se hizo un backup de unos meses atrás y se perdió. Lo vuelvo a publicar pq hice actualizaciones.
     

     
    Esta programado en lua, os dejo el código de la versión 1.5 y la descarga de la actual.
    Source v1.5:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.. Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación..  
    Changelog:

     
     
  20. Me Gusta
    PACI got a reaction from Thiago Adriano in Como Actualizar Files 2010   
    Hola Metineros,
    Bueno, hace poco me preguntava como actualizar las files de 2006, 2007, etc, para 2010. Y al final encontre la solucion. Y vengo a compartirla con vosotros. Aviso desde ahora que el Tuto no fui yo quien lo hizo! Solo vine a compartirlo con vosotros. Al final Estan los tutos originales.
     
    Bueno, en 1er lugar hagan 1 BACKUP de vuestras files, por si hay algun error.
     
    Empezaremos por el MySql
     
    Vayan al Navicat > Account > Query > New Query
    Y pongan esta Query
     

    ALTER TABLE account.account ADD `last_play` datetime default NULL; UPDATE common.locale SET `mValue`='locale_name' WHERE (`mKey`='DB_NAME_COLUMN'); UPDATE common.locale SET `mValue`='portugal' WHERE (`mKey`='LOCALE'); DROP TABLE IF EXISTS log.loginlog2; CREATE TABLE log.loginlog2 ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` text, `is_gm` int(11) DEFAULT NULL, `login_time` datetime DEFAULT NULL, `channel` int(11) DEFAULT NULL, `account_id` int(11) DEFAULT NULL, `pid` int(11) DEFAULT NULL, `client_version` text, `ip` text, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS player.lotto_list; CREATE TABLE player.lotto_list ( `id` int(10) unsigned NOT NULL auto_increment, `server` varchar(20) default NULL, `pid` int(10) unsigned default NULL, `time` datetime default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS player.highscore; CREATE TABLE player.highscore ( `pid` int(11) default NULL, `board` varchar(0) default NULL, `value` varchar(0) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS player.change_empire; CREATE TABLE player.change_empire ( `account_id` int(11) DEFAULT NULL, `change_count` int(11) DEFAULT NULL, `time` datetime DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS player.horse_name; CREATE TABLE player.horse_name ( `id` int(11) NOT NULL default '0', `name` varchar(24) NOT NULL default 'NONAME', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; ALTER TABLE player.item_proto CHANGE COLUMN `gb2312name` `locale_name` varbinary(24) NOT NULL DEFAULT 'Noname' AFTER `name`; ALTER TABLE player.mob_proto CHANGE COLUMN `gb2312name` `locale_name` varbinary(24) NOT NULL DEFAULT 'Noname' AFTER `name`; ALTER TABLE player.mob_proto ADD `skill_level2` tinyint(3) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_vnum2` int(10) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_level3` tinyint(3) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_vnum3` int(10) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_level4` tinyint(3) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_vnum4` int(10) unsigned default NULL; ALTER TABLE player.monarch_candidacy ADD `name` varchar(16) default NULL; Quando hagan esto, se quedaran con la base de datos actualizada.
     
    Ahora en el FreeBSD
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Se conectan al FreeBSD ( Filezilla o WinSCP ).
    Después se dirigen al directorio:
     

    /usr/rain/db NOTA: Este es el directorio que tienen que ir, aunque son de las files de Rain, si usais las files de Fyuri o de Daroo entonces se quedará:
     
    Con las files de Fyuri:

    /usr/fyuri/db Y con las de Daroo

    /usr/daroo/db Depende de vuestras files... 
    Y colocan el archivo db de la descarga en ese directorio y substituyan..
     
    Despues vayan a:

    /usr/rain/channel/share_data Y colocan el archivo GAME. Si hay algun error o no se puede colocar, entonces borran el GAME que ahy en el FreeBSD y despues colocan el de la descarga. 
    Despues en la Máquina Virtual, ponen esto:

    cd /usr/rain/auth rm auth ln -s ../channel/share_data/game auth En el ln , es un L minusculo y no un i mayusculo.
     
    Archivo conf.txt
     
    En

    /usr/rain/db Abran el archivo conf.txt y os aparecerá algo así:

    WELCOME_MSG = "DB Server has been started" SQL_ACCOUNT = "localhost account mt2 mt2!@# 0" SQL_PLAYER = "localhost player mt2 mt2!@# 0" SQL_COMMON = "localhost common mt2 mt2!@# 0" SQL_HOTBACKUP = "localhost hotbackup mt2 mt2!@# 0" TABLE_POSTFIX = "" BIND_PORT = 15001 DB_SLEEP_MSEC = 10 CLIENT_HEART_FPS = 25 HASH_PLAYER_LIFE_SEC = 600 BACKUP_LIMIT_SEC = 3600 PLAYER_ID_START = 100 PLAYER_DELETE_LEVEL_LIMIT = 70 ITEM_ID_RANGE = 70000001 100000000 LOCALE = big5 Entonces:
     
    Por debajo de:

    PLAYER_DELETE_LEVEL_LIMIT = 70 Borran todo y adicionan esto:
    PLAYER_DELETE_CHECK_SIMPLE = 2 ITEM_ID_RANGE = 2000000000 2100000000 MIN_LENGTH_OF_SOCIAL_ID = 6 SIMPLE_SOCIALID = 1 Block "Y/QSB7omi36awq4ctpUxuiwRARM=" Y al final quedara asi:

    WELCOME_MSG = "DB Server has been started" SQL_ACCOUNT = "localhost account mt2 mt2!@# 0" SQL_PLAYER = "localhost player mt2 mt2!@# 0" SQL_COMMON = "localhost common mt2 mt2!@# 0" SQL_HOTBACKUP = "localhost hotbackup mt2 mt2!@# 0" TABLE_POSTFIX = "" BIND_PORT = 15001 DB_SLEEP_MSEC = 10 CLIENT_HEART_FPS = 25 HASH_PLAYER_LIFE_SEC = 600 BACKUP_LIMIT_SEC = 3600 PLAYER_ID_START = 100 PLAYER_DELETE_LEVEL_LIMIT = 70 PLAYER_DELETE_CHECK_SIMPLE = 2 ITEM_ID_RANGE = 2000000000 2100000000 MIN_LENGTH_OF_SOCIAL_ID = 6 SIMPLE_SOCIALID = 1 Block "Y/QSB7omi36awq4ctpUxuiwRARM=" Cierren y Guarden el Archivo.
     
    Archivos CONFIG
     
    En:

    /usr/rain/auth  
    Abre el archivo CONFIG.
     
    Aparecerá algo asi:

    HOSTNAME: metin2_auth CHANNEL: 1 PORT: 11002 P2P_PORT: 12001 DB_PORT: 15001 DB_ADDR: localhost TABLE_POSTFIX: ITEM_ID_RANGE: 000000001 000000002 PASSES_PER_SEC: 25 SAVE_EVENT_SECOND_CYCLE: 180 PING_EVENT_SECOND_CYCLE: 180 AUTH_SERVER: master PLAYER_SQL: localhost mt2 mt2!@# account LOG_SQL: localhost mt2 mt2!@# log COMMON_SQL: localhost mt2 mt2!@# common  
    Entonces Borra esto:

    ITEM_ID_RANGE: 000000001 000000002 Y al final, por debajo de:

    COMMON_SQL: localhost mt2 mt2!@# common Adiciona esto:

    LOCALE_SERVICE: SPAIN adminpage_ip: 127.0.0.1 adminpage_ip1: 127.0.0.1 adminpage_ip2: 127.0.0.1 adminpage_ip3: 127.0.0.1 adminpage_password: cexubrecegutru7u6atrEqurUyudeSutafruwuz55#etrehAdajezeje+uthustU  
    Y al final se quedara asi:

    HOSTNAME: metin2_auth CHANNEL: 1 PORT: 11002 P2P_PORT: 12001 DB_PORT: 15001 DB_ADDR: localhost TABLE_POSTFIX: PASSES_PER_SEC: 25 SAVE_EVENT_SECOND_CYCLE: 180 PING_EVENT_SECOND_CYCLE: 180 AUTH_SERVER: master PLAYER_SQL: localhost mt2 mt2!@# account LOG_SQL: localhost mt2 mt2!@# log COMMON_SQL: localhost mt2 mt2!@# common LOCALE_SERVICE: SPAIN adminpage_ip: 127.0.0.1 adminpage_ip1: 127.0.0.1 adminpage_ip2: 127.0.0.1 adminpage_ip3: 127.0.0.1 adminpage_password: cexubrecegutru7u6atrEqurUyudeSutafruwuz55#etrehAdajezeje+uthustU  
    Despues en:
     

    /usr/rain/channel Tienes que editar los archivos CONFIG, de las carpetas:
     
    - first
    - game1_1
    - game1_2
    - game1_3
    - game2
    - game61
    - game99
     
    El first apacerá así:
     

    HOSTNAME: first CHANNEL: 1 PORT: 13000 P2P_PORT: 14000 DB_PORT: 15001 DB_ADDR: localhost MAP_ALLOW: TABLE_POSTFIX: ITEM_ID_RANGE: 5000001 10000000 PASSES_PER_SEC: 25 SAVE_EVENT_SECOND_CYCLE: 180 PING_EVENT_SECOND_CYCLE: 180 PLAYER_SQL: localhost mt2 mt2!@# player COMMON_SQL: localhost mt2 mt2!@# common LOG_SQL: localhost mt2 mt2!@# log #TEST_SERVER: 1 pk_server: 1  
    Borra el:

    ITEM_ID_RANGE: VALOR1 VALOR2  
    NOTA: Valor1 = Al 1º Número que aparece en la linea. Valor2 = El 2º Número que aparece en la linea.
     
    Despues borra todo lo que aparece por debajo de:

    LOG_SQL: localhost mt2 mt2!@# log Y adiciona esto:

    NO_PK: 1 CHECK_MULTIHACK: 1 adminpage_ip: 127.0.0.1 adminpage_ip1: 127.0.0.1 adminpage_ip2: 127.0.0.1 adminpage_ip3: 127.0.0.1 adminpage_password: cexubrecegutru7u6atrEqurUyudeSutafruwuz55#etrehAdajezeje+uthustU LOCALE_SERVICE: SPAIN VIEW_RANGE: 20000 MAX_LEVEL: 99  
    Y al final quedará así:
     

    HOSTNAME: first CHANNEL: 1 PORT: 13000 P2P_PORT: 14000 DB_PORT: 15001 DB_ADDR: localhost MAP_ALLOW: TABLE_POSTFIX: PASSES_PER_SEC: 25 SAVE_EVENT_SECOND_CYCLE: 180 PING_EVENT_SECOND_CYCLE: 180 PLAYER_SQL: localhost mt2 mt2!@# player COMMON_SQL: localhost mt2 mt2!@# common LOG_SQL: localhost mt2 mt2!@# log NO_PK: 1 CHECK_MULTIHACK: 1 adminpage_ip: 127.0.0.1 adminpage_ip1: 127.0.0.1 adminpage_ip2: 127.0.0.1 adminpage_ip3: 127.0.0.1 adminpage_password: cexubrecegutru7u6atrEqurUyudeSutafruwuz55#etrehAdajezeje+uthustU LOCALE_SERVICE: SPAIN VIEW_RANGE: 20000 MAX_LEVEL: 99  
    Y REPITAN ESTO PARA TODOS LOS CONFIG DE LA CARPETA CHANNEL!
     
    Alterar el locale
     
    Vayan a:

    /usr/rain/channel/share_data/locale Y cambien el nombre de " Hongkong " para " spain "
     
    Despues dentro de la carpeta " spain "
    Cambian el nombre de:

    big5_string.txt  
    Para:

    locale_string.txt  
    Y En el directorio:

    /usr/rain/channel/share_data/locale/spain  
    Colocan el archivo " translate.lua "
     
    Despues van a:
     

    /usr/rain/channel/share_data/locale/spain/quest  
    Y cambian el nombre del:

    locale_big5.lua Para " locale.lua "
     
    Y cambian el nombre de:

    hongkong_list Para " locale_list "
    Y repiten esto para todos los hongkong que encuentren en la carpeta quest.
     
    Despues van a:

    /root  
    Y colocan el archivo:

    data.tar.gz  
    Despues en la maquina virtual hacen esto:

    cd /usr/rain/channel/share_data rm -fR data tar -xzvf /root/data.tar.gz  
    Y quando os pare todo lo que os aparece
    Hacen:

    reboot  
    Y al final inician el Servidor!
     
    Creditos:
     
    IvanSantos
    Valenza
     
    Tutoriales originales:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Y un vídeo por si no entienden algo:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Cuando tengan las files actualizadas para jugar en ellas necesitarán 1 cliente 2010, entonces yo os dejo aqui uno:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Bueno espero haber podido ayudar,
    Buenas Tardes.
     
    EDITO: Si al hacer todo esto despues en la máquina da el error de cores...
    Entonces se dirigen al FreeBSD y van al directorio del GAME

    /usr/rain/channel/share_data Despues le dan click con el boton derecho del raton y clican en Permisiones, y al final meten, Permisiones 777Cierran el FreeBSD y dan reboot
  21. Me Gusta
    PACI got a reaction from Balázs Varga in [Release] Templo del Dragón - Reworked   
    otra mierda que desarrollé y no quise terminar.
     

     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    pd: los modelos no son míos, no sé quien es el autor, pero gracias.
  22. Me Gusta
    PACI got a reaction from Meet in [RLS] Cubil de la Baronesa Araña   
    Hola otra vez.
    Os dejo aquí esta dungeon, pero aparte de la Mazmorra Arañas 3.
     

     
    En la descarga hay la quest, regens y el mapa.
     
    Nota: Probablemente hay funciones que vosotros no tengáis en la quest, pero nada del otro mundo, simplemente las borráis.
    Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Saludos
  23. Me Gusta
    PACI got a reaction from Phoenix2 in [RLS] Cubil de la Baronesa Araña   
    Hola otra vez.
    Os dejo aquí esta dungeon, pero aparte de la Mazmorra Arañas 3.
     

     
    En la descarga hay la quest, regens y el mapa.
     
    Nota: Probablemente hay funciones que vosotros no tengáis en la quest, pero nada del otro mundo, simplemente las borráis.
    Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Saludos
  24. Me Gusta
    PACI got a reaction from Only4Fun in [RLS] Cubil de la Baronesa Araña   
    Hola otra vez.
    Os dejo aquí esta dungeon, pero aparte de la Mazmorra Arañas 3.
     

     
    En la descarga hay la quest, regens y el mapa.
     
    Nota: Probablemente hay funciones que vosotros no tengáis en la quest, pero nada del otro mundo, simplemente las borráis.
    Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Saludos
  25. Me Gusta
    PACI got a reaction from Jsouza in Cubo Sin Comando /cube   
    Buenas.
     
    Hace un par de días vi el post de Think en dev, y posteriormente el de Shogun aquí sobre el exploit, si se puede llamar así, del comando /cube. Por este motivo, decidí hacer una versión del cubo sin el comando /cube. En otras palabras, con python y lua para que los que aún no utilizan el source puedan usar el cubo sin problemas tan graves.
     
    Debo decir que por ahora los únicos bugs - es más, no son bugs del todo, simplemente hay cosas que no están incluidas y que no son tan necesarias o graves - son:
    Si en el cubo colocamos más de los items necesarios, el sistema no reconocerá ningún premio por ellos, por lo que es necesario que coloquemos APENAS los items necesarios, ni más, ni menos. Si por ejemplo en el cube.txt tenemos el mismo npc con dos mismos premios, en el GUI aparecerá uno de ellos, y en la parte de los materiales, a pesar de que tenga el icono de un item, saldrá la opción "or". Ej: Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    En la descarga incluye una pequeña guía explicando dónde va cada cosa en los python, solo hay que editar game.py y el ui.py básicamente.
     
    Nota: Solamente he probado el sistema en con game r34k y un bin r36k, no sé del todo si en revs inferiores funcionará, aunque debería.
    Nota2: No sé si hay algún diff que solucione el problema.
    Nota3: Si vais a usarlo, tened en cuenta que debéis desactivar el comando /cube con un diff o via CMD.
     
    Descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Os dejo un screenshot:

     
     
    Saludos.
×
×
  • Crear nuevo...