Jump to content

[Guía]Implementar Mobs y NPC


NazoX

Mensajes recomendados

Buenas, viendo que la guía de nuestro querido

Debes iniciar sesión para ver el contenido del enlace en esta publicación.
 está un poco vieja (aunque sigue siendo la mejor y sirve), las fotos y tal no funcionan y eso, pues traigo una bastante más resumida, de todas formas, dejaré el enlace de su guía por si presentáis algunos de los errores que el menciona, y si no, podéis preguntar por aquí.

 

1.Descargamos nuestro mob o npc

2.Ahora, descompilamos nuestros archivos:

-root.eix y root.epk

-monster.eix y monster.epk

-Si es un NPC cambiamos monster.eix monster.epk por:

-NPC.eix NPC.epk

3.Ahora, entramos en Monster o NPC y vamos a la siguiente ruta:

Quote

Monster->ymir work->monster

-Y aquí añadimos la carpeta de nuestro nuevo mob.

Quote

NPC->ymir work->npc

-Y aquí si es un NPC.

6af56d4e497f60f0490aa717250f4d36.png

4.Ahora podemos compilar, y nos vamos a nuestro root y editamos el archivo:

Quote

npclist.txt

-Aquí tenemos que ir al final del archivo y añadir un ID que no exista en el juego, y el nombre del archivo .msm que podemos ver dentro de la carpeta del mob o npc, aquí un ejemplo

Quote

20418    steap_monster87

4.1.Ahora podemos compilar el root, y nos vamos al servidor.

Nota: Siempre usar el tabulador

50d4fc1e78b4c9d8ae474062a2a735a0.png

5.Vamos a /share/data/monster y aquí pegamos la misma carpeta del mob, si es un NPC, nos podemos saltar este proceso.

343c0aac48b6552e1c57cabb419fd6c9.png

5.1.Ahora continuamos y editamos nuestro archivo "mob_names.txt" y "mob_proto.txt"

-En mob_names.txt, iremos al final del archivo, y añadimos el mismo ID que usamos en npclist y ponemos un nombre por ejemplo:

Quote

20418    Hades

Nota: Usar tabs.

-Ahora en mob_proto, simplemente copiamos la linea de otro mob, por ejemplo azrael, y la pegamos al final y cambiamos el id, por ejemplo:

Quote

20418    ?????? ???    KING    MONSTER    MELEE    91        AGGR,BERSERK,DEATHBLOW,REVIVE    0    UNDEAD,ATT_DARK    STUN,SLOW,CURSE,TERROR    0    zombie_bigboss2    0    150    120    150    90    209    388    924600    20    10    30520    45780    333600    105    110    150    100    2000    450    0    0    50    10    0    0    25    20    40    35    40    40    40    40    0    0    60    0    10    3    2596    30    0    0    10    257    20    259    0    0    0    0    0    0    15    15    15    15    0        

Nota: No copies mi ejemplo, pues la estructura puede ser diferente a la vuestra.

d81d042ceb89b989d708c61017fe03e3.png

**Información extra ampliada por

Debes iniciar sesión para ver el contenido del enlace en esta publicación.
 y
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
:***

-Os voy a explicar un poco que contiene la carpeta de mobs, quitando los npcs, podremos ver en el 99% de mobs, archivos como:

Quote

-attack.msa
-attack.gr2
-death.msa
-death.gr2
-run.msa
-run.gr2
-special.msa
-special.gr2
-wait.msa
-wait.gr2
-motlist.txt
-xx.msm

Los nombres pueden variar, pero básicamente se compone en esos, bien.

-Como su nombre indica, attack, death, run y wait.gr2 es la animación que permite al mob moverse, morir, atacar y correr y lo podemos ver si usamos granny viewer.

-Los mismos archivos pero ".msa" son como los ".msm" de las animaciones e indican area de daño, ruta donde ejecuta el archivo .gr2, etc no soy muy experto en este campo así que no puedo ampliar más.

por otro lado, a veces veremos mobs, más concretamente "jefes" que tienen como en este caso "special" que es una habilidad que usan ellos, a diferencia de los mobs, como sabéis solo los jefes tienen animaciones de daño de area o "skills" propias, pero como véis también se compone de un archivo ".gr2" y ".msa" Keko explica un poco más sobre dichos archivos en su post.

**New**

1. Los nombres de los archivos no pueden tener mayúsculas, ni siquiera las extensiones.

Quote

Bien: bear.gr2
Mal: bear.GR2
Bien: bear.gr2
Mal: Bear.gr2

-Adentro de los .msm y .msa no importa las mayúsculas en las rutas.

2.Siempre hay que dejar un salto de línea al final del archivo npclist.txt en root

3.Se pueden manejar varios vnums en una sola carpeta, esta es la respuesta de porqué vemos varios "0" en npclist.

Quote

0    nombre_msm_1    nombre_carpeta
0    nombre_msm_2    nombre_carpeta
20418    hades


4. No se puede utilizar cualquier vnum para los mobs. Hay unos rangos.
-Los rangos se pueden definir en el binario en GameLib/RaceManager.cpp
-Como dice

Debes iniciar sesión para ver el contenido del enlace en esta publicación.
 lo recomendable es:

Quote

Si el mob pertenece a monster, usar un id entre 210 a delante
Si el mob pertenece a monster2, usar un id entre 3000 a delante
Si el mob pertenece a NPC/npc2 usar un id entre 18000 adelante

También, como decíamos, hay un rango de vnums, que pueden verse en RaceManager.cpp, más concretamente esta función:

Quote

bool __IsGuildRace(unsigned race)
{
    if (race >= 14000 && race < 15000)
        return true;

    if (20043 == race)
        return true;

    return false;
}

bool __IsNPCRace(unsigned race)
{
    if (race > 9000)
        return true;

    return false;
}

void __GetRaceResourcePathes(unsigned race, std::vector <std::string>& vec_stPathes)
{
    if (__IsGuildRace(race))
    {
        vec_stPathes.push_back ("d:/ymir work/guild/");
        vec_stPathes.push_back ("d:/ymir work/npc/");
        vec_stPathes.push_back ("d:/ymir work/npc2/");
        vec_stPathes.push_back ("d:/ymir work/monster/");
        vec_stPathes.push_back ("d:/ymir work/monster2/");
    }
    else if (__IsNPCRace(race))
    {
        if (race >= 30000)
        {
            vec_stPathes.push_back ("d:/ymir work/npc2/");
            vec_stPathes.push_back ("d:/ymir work/npc/");
            vec_stPathes.push_back ("d:/ymir work/monster/");
            vec_stPathes.push_back ("d:/ymir work/monster2/");
            vec_stPathes.push_back ("d:/ymir work/guild/");
        }
        else
        {
            vec_stPathes.push_back ("d:/ymir work/npc/");
            vec_stPathes.push_back ("d:/ymir work/npc2/");
            vec_stPathes.push_back ("d:/ymir work/monster/");
            vec_stPathes.push_back ("d:/ymir work/monster2/");
            vec_stPathes.push_back ("d:/ymir work/guild/");
        }
    }
    // ¸¸¿ìÀý À̺¥Æ®¿ë ¿¹¿Ü ¸ó½ºÅÍ
    else if (8507 == race || 8510 == race)
    {
        vec_stPathes.push_back ("d:/ymir work/monster2/");
        vec_stPathes.push_back ("d:/ymir work/monster/");
        vec_stPathes.push_back ("d:/ymir work/npc/");
        vec_stPathes.push_back ("d:/ymir work/npc2/");
        vec_stPathes.push_back ("d:/ymir work/guild/");
    }
    else if (race > 8000)
    {
        vec_stPathes.push_back ("d:/ymir work/monster/");
        vec_stPathes.push_back ("d:/ymir work/monster2/");
        vec_stPathes.push_back ("d:/ymir work/npc/");
        vec_stPathes.push_back ("d:/ymir work/npc2/");
        vec_stPathes.push_back ("d:/ymir work/guild/");
    }
    else if (race > 2000)
    {
        vec_stPathes.push_back ("d:/ymir work/monster2/");
        vec_stPathes.push_back ("d:/ymir work/monster/");
        vec_stPathes.push_back ("d:/ymir work/npc/");
        vec_stPathes.push_back ("d:/ymir work/npc2/");
        vec_stPathes.push_back ("d:/ymir work/guild/");
    }
    else if (race>=1400 && race<=1700)
    {
        vec_stPathes.push_back ("d:/ymir work/monster2/");
        vec_stPathes.push_back ("d:/ymir work/monster/");
        vec_stPathes.push_back ("d:/ymir work/npc/");
        vec_stPathes.push_back ("d:/ymir work/npc2/");
        vec_stPathes.push_back ("d:/ymir work/guild/");
    }
    else
    {
        vec_stPathes.push_back ("d:/ymir work/monster/");
        vec_stPathes.push_back ("d:/ymir work/monster2/");
        vec_stPathes.push_back ("d:/ymir work/npc/");
        vec_stPathes.push_back ("d:/ymir work/npc2/");
        vec_stPathes.push_back ("d:/ymir work/guild/");
    }
    return;
}

-Aquí que alguien me corrija pues puede que me equivoque, pero puedes ampliar algunos valores, aunque es mejor dejarlo por defecto, pero es para que podáis tener una idea de los limites en cuanto al ID se refiere.

5. Evita este error:
Cuando pongas los archivos en data/monster y pruebes el monstruo en el juego, asegúrate de que no hayas afectado algunos monstruos. Hay un bug muy extraño que cuando pones archivos en monster, hay algunos monstruos que algunos te atacan y otros no. Para comprobar si tienes el bug, prueba con /ma 2104 5. Si todos los bichos te pegan, entonces no hubo bug. Si algunos se quedan quietos intentando pegarte pero no hacen nada, tienes el bug.
Nunca he podido saber el origen de ese bug.

6. Si tienes monturas que al ir rápido no se cargan a tiempo los monstruos, es porque no agregaste su folder en el mob_proto.

**Fin Update**

**New Update 

-Si usamos los ".TXT" en vez de "SQL" lo recomendables es editar el archivo mob_proto.txt con Excel o similar, y buscar la casilla "Folder" una vez aquí, tenemos que añadir el nombre de la carpeta que hemos añadido en la ruta : /share/data/monster :

ee2bcbf569e0513f187876fdc159e17d.png

-Como podemos observar en este ejemplo, mi mob_proto.txt al editarlo con excel, la casilla "Folder" queda en la "M" y pondriamos el mismo nombre que se puede ver en la izquierda de la imagen.

-Por último, pero no menos importante, si implementas un mob o una pet y no viene con la parte del servidor, se puede usar la carpeta del cliente, pero se tendrá que quitar los archivos .gr2, para evitar posibles problemas futuros:

f5672684920b1c64ccab4812f2756acb.png

**Fin Update**

-Ahora el archivo motlist, sirve para definir que va hacer ese mob, ejemplo:

Quote

GENERAL WAIT wait01.msa 100
GENERAL RUN run01.msa 100
GENERAL DEAD death01.msa 100
GENERAL NORMAL_ATTACK atk01.msa 100
GENERAL SPECIAL special02.msa 100
GENERAL SPECIAL1 special03.msa 100
GENERAL FRONT_DAMAGE wait01.msa 100
GENERAL BACK_DAMAGE wait01.msa 100
GENERAL WALK run01.msa 100

Siempre se utiliza GENERAL, y se le indica con el archivo ".msa" su función, como podéis ver ataque, muerte, special (skill), etc.
Si por ejemplo, vuestro mob no tiene la función de caminar, podéis buscar un mob parecido, y copiar el archivo "walk.msa" y "walk.gr2" lo pegáis en la carpeta, y luego aquí en motlist, pondriáis 

Quote

GENERAL WALK walk.msa 100

y entonces el jefe ya caminaría. 

Bueno, eso es todo, el ejemplo lo dejo a continuación, si falta algo, queréis comentar algo más o tenéis algún problema comunicarlo.

877081a582917530ee7aaebc45542ac0.jpg

Post de keko: 

Enlace para comentar
Compartir en otros sitios

hace 9 minutos, ReuS dijo:

Se agradece el aporte para los nuevos.

Gracias, pues sí, la verdad que últimamente no estoy muy por el foro, pero si que he vuelto con ganas a metin2, haber si lo revivimos un poco ya iré aportando cosas, gracias por tu tiempo, un saludo.

Enlace para comentar
Compartir en otros sitios

Las has roto tío!
Muy buen aporte. Hay que revivir estas guías que han quedado muy atrás y siempre llega gente nueva a aprender esto de los servers.

 

Algunos detalles que ignoran los nuevos (ha pasado muchas veces, incluso a mí):

1. Los nombres de los archivos no pueden tener mayúsculas, ni siquiera las extensiones.
Bien: bear.gr2
Mal: bear.GR2
Bien: bear.gr2
Mal: Bear.gr2

Adentro de los .msm y .msa no importa las mayúsculas en las rutas.

2. Debe haber un salto de línea al final de npclist.txt

3. Si van a manejar varios vnum en un solo folder:

0	nombre_msm_1	nombre_carpeta
0	nombre_msm_2	nombre_carpeta
vnum1	nombre_msm_1
vnum2	nombre_msm_2

Es la respuesta a la pregunta: por qué hay varios ceros en npclist?

4. No se puede utilizar cualquier vnum para los mobs. Hay unos rangos.
Los rangos se pueden definir en el binario en GameLib/RaceManager.cpp

Al principio cuesta entender un poco el código pero al final es sencillo.

5. Evita este error:
Cuando pongas los archivos en data/monster y pruebes el monstruo en el juego, asegúrate de que no hayas afectado algunos monstruos. Hay un bug muy extraño que cuando pones archivos en monster, hay algunos monstruos que algunos te atacan y otros no. Para comprobar si tienes el bug, prueba con /ma 2104 5. Si todos los bichos te pegan, entonces no hubo bug. Si algunos se quedan quietos intentando pegarte pero no hacen nada, tienes el bug.
Nunca he podido saber el origen de ese bug.

6. Si tienes monturas que al ir rápido no se cargan a tiempo los monstruos, es porque no agregaste su folder en el mob_proto.

 

Enlace para comentar
Compartir en otros sitios

hace 4 horas, caanmasu dijo:

Las has roto tío!
Muy buen aporte. Hay que revivir estas guías que han quedado muy atrás y siempre llega gente nueva a aprender esto de los servers.

 

Algunos detalles que ignoran los nuevos (ha pasado muchas veces, incluso a mí):

1. Los nombres de los archivos no pueden tener mayúsculas, ni siquiera las extensiones.
Bien: bear.gr2
Mal: bear.GR2
Bien: bear.gr2
Mal: Bear.gr2

Adentro de los .msm y .msa no importa las mayúsculas en las rutas.

2. Debe haber un salto de línea al final de npclist.txt

3. Si van a manejar varios vnum en un solo folder:

0	nombre_msm_1	nombre_carpeta
0	nombre_msm_2	nombre_carpeta
vnum1	nombre_msm_1
vnum2	nombre_msm_2

Es la respuesta a la pregunta: por qué hay varios ceros en npclist?

4. No se puede utilizar cualquier vnum para los mobs. Hay unos rangos.
Los rangos se pueden definir en el binario en GameLib/RaceManager.cpp

Al principio cuesta entender un poco el código pero al final es sencillo.

5. Evita este error:
Cuando pongas los archivos en data/monster y pruebes el monstruo en el juego, asegúrate de que no hayas afectado algunos monstruos. Hay un bug muy extraño que cuando pones archivos en monster, hay algunos monstruos que algunos te atacan y otros no. Para comprobar si tienes el bug, prueba con /ma 2104 5. Si todos los bichos te pegan, entonces no hubo bug. Si algunos se quedan quietos intentando pegarte pero no hacen nada, tienes el bug.
Nunca he podido saber el origen de ese bug.

6. Si tienes monturas que al ir rápido no se cargan a tiempo los monstruos, es porque no agregaste su folder en el mob_proto.

 

Increíble aportación !!! Muchas gracias por el aporte cuando tenga un rato lo añado al post!! Estas hecho una máquina espero que podamos actualizar guías para los nuevos, un saludo y gracias por el aporte y tu tiempo 😊😊

Enlace para comentar
Compartir en otros sitios

En 15/9/2023 a las 20:39, NazoX dijo:

Buenas, viendo que la guía de nuestro querido

Debes iniciar sesión para ver el contenido del enlace en esta publicación.
 está un poco vieja (aunque sigue siendo la mejor y sirve), las fotos y tal no funcionan y eso, pues traigo una bastante más resumida, de todas formas, dejaré el enlace de su guía por si presentáis algunos de los errores que el menciona, y si no, podéis preguntar por aquí.

 

1.Descargamos nuestro mob o npc

2.Ahora, descompilamos nuestros archivos:

-root.eix y root.epk

-monster.eix y monster.epk

-Si es un NPC cambiamos monster.eix monster.epk por:

-NPC.eix NPC.epk

3.Ahora, entramos en Monster o NPC y vamos a la siguiente ruta:

-Y aquí añadimos la carpeta de nuestro nuevo mob.

-Y aquí si es un NPC.

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

4.Ahora podemos compilar, y nos vamos a nuestro root y editamos el archivo:

-Aquí tenemos que ir al final del archivo y añadir un ID que no exista en el juego, y el nombre del archivo .msm que podemos ver dentro de la carpeta del mob o npc, aquí un ejemplo

4.1.Ahora podemos compilar el root, y nos vamos al servidor.

Nota: Siempre usar el tabulador

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

5.Vamos a /share/data/monster y aquí pegamos la misma carpeta del mob, si es un NPC, nos podemos saltar este proceso.

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

5.1.Ahora continuamos y editamos nuestro archivo "mob_names.txt" y "mob_proto.txt"

-En mob_names.txt, iremos al final del archivo, y añadimos el mismo ID que usamos en npclist y ponemos un nombre por ejemplo:

Nota: Usar tabs.

-Ahora en mob_proto, simplemente copiamos la linea de otro mob, por ejemplo azrael, y la pegamos al final y cambiamos el id, por ejemplo:

Nota: No copies mi ejemplo, pues la estructura puede ser diferente a la vuestra.

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

**Información extra ampliada por

Debes iniciar sesión para ver el contenido del enlace en esta publicación.
:***

-Os voy a explicar un poco que contiene la carpeta de mobs, quitando los npcs, podremos ver en el 99% de mobs, archivos como:

Los nombres pueden variar, pero básicamente se compone en esos, bien.

-Como su nombre indica, attack, death, run y wait.gr2 es la animación que permite al mob moverse, morir, atacar y correr y lo podemos ver si usamos granny viewer.

-Los mismos archivos pero ".msa" son como los ".msm" de las animaciones e indican area de daño, ruta donde ejecuta el archivo .gr2, etc no soy muy experto en este campo así que no puedo ampliar más.

por otro lado, a veces veremos mobs, más concretamente "jefes" que tienen como en este caso "special" que es una habilidad que usan ellos, a diferencia de los mobs, como sabéis solo los jefes tienen animaciones de daño de area o "skills" propias, pero como véis también se compone de un archivo ".gr2" y ".msa" Keko explica un poco más sobre dichos archivos en su post.

**New**

1. Los nombres de los archivos no pueden tener mayúsculas, ni siquiera las extensiones.

-Adentro de los .msm y .msa no importa las mayúsculas en las rutas.

2.Siempre hay que dejar un salto de línea al final del archivo npclist.txt en root

3.Se pueden manejar varios vnums en una sola carpeta, esta es la respuesta de porqué vemos varios "0" en npclist.


4. No se puede utilizar cualquier vnum para los mobs. Hay unos rangos.
-Los rangos se pueden definir en el binario en GameLib/RaceManager.cpp
-Como dice

Debes iniciar sesión para ver el contenido del enlace en esta publicación.
 lo recomendable es:

También, como decíamos, hay un rango de vnums, que pueden verse en RaceManager.cpp, más concretamente esta función:

-Aquí que alguien me corrija pues puede que me equivoque, pero puedes ampliar algunos valores, aunque es mejor dejarlo por defecto, pero es para que podáis tener una idea de los limites en cuanto al ID se refiere.

5. Evita este error:
Cuando pongas los archivos en data/monster y pruebes el monstruo en el juego, asegúrate de que no hayas afectado algunos monstruos. Hay un bug muy extraño que cuando pones archivos en monster, hay algunos monstruos que algunos te atacan y otros no. Para comprobar si tienes el bug, prueba con /ma 2104 5. Si todos los bichos te pegan, entonces no hubo bug. Si algunos se quedan quietos intentando pegarte pero no hacen nada, tienes el bug.
Nunca he podido saber el origen de ese bug.

6. Si tienes monturas que al ir rápido no se cargan a tiempo los monstruos, es porque no agregaste su folder en el mob_proto.

**Fin Update**

-Ahora el archivo motlist, sirve para definir que va hacer ese mob, ejemplo:

Siempre se utiliza GENERAL, y se le indica con el archivo ".msa" su función, como podéis ver ataque, muerte, special (skill), etc.
Si por ejemplo, vuestro mob no tiene la función de caminar, podéis buscar un mob parecido, y copiar el archivo "walk.msa" y "walk.gr2" lo pegáis en la carpeta, y luego aquí en motlist, pondriáis 

y entonces el jefe ya caminaría. 

Bueno, eso es todo, el ejemplo lo dejo a continuación, si falta algo, queréis comentar algo más o tenéis algún problema comunicarlo.

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

Post de keko: 

La verdad bro que te la sacastes, aunque te falto solo una cosilla. 

Para el mob proto si usan txt deberan de buscar la celda Folder y hay deberan de declarar el nombre de la carpeta que se ubica en share/data/monster. Para asi evitar problemas de acummulation motlist o cualquier otro tipo de problemas.

Y aca un pequeño consejo: Cuando saquen un mob o pet que no viene con la parte del servidor pueden usar el del cliente siempre y cuando quiten el msm, la textura y el gr2. "NUNCA METAN LA CARPETA DEL SERVIDOR CON ESOS ARCHIVOS YA QUE LE PUEDEN OCASIONAR ERRORES"

Por tu parte Nazox maravillosa guia, mis mas sinceras felicitaciones.

Enlace para comentar
Compartir en otros sitios

hace 24 minutos, Pegasus dijo:

La verdad bro que te la sacastes, aunque te falto solo una cosilla. 

Para el mob proto si usan txt deberan de buscar la celda Folder y hay deberan de declarar el nombre de la carpeta que se ubica en share/data/monster. Para asi evitar problemas de acummulation motlist o cualquier otro tipo de problemas.

Y aca un pequeño consejo: Cuando saquen un mob o pet que no viene con la parte del servidor pueden usar el del cliente siempre y cuando quiten el msm, la textura y el gr2. "NUNCA METAN LA CARPETA DEL SERVIDOR CON ESOS ARCHIVOS YA QUE LE PUEDEN OCASIONAR ERRORES"

Por tu parte Nazox maravillosa guia, mis mas sinceras felicitaciones.

Gracias a ti por tu tiempo y por ampliar la información, se agradece que te hayas tomado la molestia de leerla y a portar tu granito de arena, enseguida actualizo el post, y espero que sigamos mejorando, un saludo Pegasus ^^.

Enlace para comentar
Compartir en otros sitios

Unirse a la conversación

Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.

Guest
Responder a este tema...

×   Has pegado contenido con formato .   Eliminar formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incorporado automáticamente.   Mostrar un enlace en su lugar

×   Se ha restaurado el contenido anterior. .   Borrar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recientemente navegando por este tema   0 miembros

    • No hay usuarios registrados visitando esta página.
×
×
  • Crear nuevo...