Jump to content
KeKo

[Guia] Implementar mobs sin morir en el intento

Recommended Posts

Buenas zoneros y zoneras, hoy os traigo esta guía que me habían pedido que hiciera para implementar mobs, cosa que hay gente a la que le da bastantes problemas a veces.

 

ESTA GUIA ES EXCLUSIVA DE METIN2ZONE, NO LA POSTEEIS EN OTRO FOROS

 

Ire paso por paso explicando el proceso de implementación de un mob:

 

1 - Qué es lo que trae la carpeta de un mob?

 

Cuandos nos bajamos un mob nuevo para meter en nuestro servidor vemos que el mob consiste en una carpeta con una serie de archivos dentro, que pueden ser de diferentes tipos y que tienen diferentes funciones.

 

Imagen enviada

 

 

Esos archivos pueden ser:

 

-Archivos .gr2: Son los archivos que contienen el modelo del mob y sus movimientos. Para que un gr2 funcione debe ir siempre a unido a un archivo, que puede ser un .msm o un .msa

 

Podeis abrirlos usando el granny viewer, y tendreis una vista así del mob:

 

Imagen enviada

 

-Archivos msm y msa: Son aquellos que sirven para que el juego pueda leer un archivo .gr2, por lo que siempre tienen la ruta del modelo al que van unidos. Los msm son para el modelo del mob en si y los msa para animaciones.

 

-Archivos .mse: Estos archivos se usan para meter efectos a los mobs, por lo que los renocereis viendo que al final del archivo siempre saldra el nombre de un .dds o otro archivo de textura, que es el efecto en si.

 

-Motlist.txt: En cada carpeta de un mob debe aver un archivo con este nombre, ya que es el que le dije al juego a que movimiento se corresponde cada uno de los gr2 de animaciones del mob.

 

Explicacion del motlist:

 

Imagen enviada

 

-Cada linea lleva GENERAL luego el nombre del movimiento, que puede ser WAIT, RUNT, DIE, ATTACK, etc (nombres en ingles de las acciones de los mobs) y luego el nombre del .msa que enlaza con esa animacion. El numero despues del nombre del msa poned el mismo que en otra linea.

 

 

-Texturas: Pueden presentarse en varios formatos, siendo .jpeg .dds y .tga los mas comunes. La ruta en la que deben ir estos archivos va especificada en el .gr2 del mob asi:

 

Imagen enviada

 

 

*Nota: la ruta mas normal para un mob suele ser monster/monster2/npc/npc2 pero puede haber mobs con rutas diferentes como en el zone o carpetas nuevas.

 

2 - Vale ya se como va la carpeta del mob, ahora que hago con ella?

 

Bien, ahora que ya tenemos la carpeta de nuestro mob y entendemos como funciona tenemos que implementarlo en nuestro cliente. Pero en que archivo lo hacemos?

 

A la hora de ver en que ruta poner la carpeta de nuestro mob tenemos que ir a la susodicha carpeta y abrir el msm que lleve el nombre del mob. Una vez lo abramos veremos un apartado donde pone: BaseModelFileName y en esa ruta pondremos la carpeta del mob.

 

Imagen enviada

 

Una vez tengamos metido la carpeta en su sitio, añadiremos al xml del archivo que estemos modificando las lineas correspondientes al nuevo mob, ya sea a mano o usando un creador de xml.

 

*Se pueden dar casos de mobs en los que la ruta en la que tenga la textura sea diferente a la ruta en la que tenga que ir la carpeta del mob, así que si se da el caso tendreis que meter la carpeta del mob en la ruta del msm y el archivo de la textura en su ruta correspondiente.

 

3 - Ya compile el archivo, que és lo siguiente?

 

Una vez compilado el archivo el siguiente paso es decompilar el root de nuestro cliente y abrir un archivo llamado npclist.txt, en el que relacionaremos cada mob nuevo con una id en el cliente.

 

*Detalle: cuando escribais en el npclist debereis usar la tecla tabulador en vez de espacios, para que no os de errores al cargar el juego.

 

Una vez abrais el npclist, vais a cualquier parte del archivo, le dais a enter para dejar una linea vacia y escribis lo siguiente:

 

1º La id que quereis que tenga el mob.

 

2º Le dais a tab

 

3º El nombre del msm del mob.

 

idmob [tab] nombremsm

El resultado tiene que ser algo asi:

 

Imagen enviada

 

3.1: Casos especiales: mobs duplicados:

 

Hay veces que un mismo mob con diferentes texturas, por lo que recurrirmos a duplicar el mob. Por no alargar la guia demasiado podeis ver mi post de duplicar mobs para aprender a hacerlo:

 

 

En esos casos (resumiendo la parte del root) tendreis que poner primero una linea que sea asi, ya que cuando duplicais un mob haceis otro msm con un nombre diferente al del mob original en el que haceis que tenga otra textura.

 

0 [tab] nombredelmsmnuevo [tab] nombredelmsmviejo

Imagen enviada

 

4 - Es todo? Ya implemente mi mob?

 

Casi Casi. Ya lo ultimo que queda para implementar a vuestro mob es meterle una query en el mob_proto del navicat, que puede ser igual a la de otro mob o podeis modificarla como os plazca.

 

*Detalle: Aunque un mob no tenga query si está implementado en el cliente podeis hacer /poly iddelmob para probarlo antes de meterle query.

 

Para que el mob sea el mismo que acabamos de meter, la query debe llevar la misma id que pusimos en el npclist.txt del root.

 

*Opcional: Si ademas queremos que nuestro mob lleve encima el nombre deberemos añadir una linea con la id npclist.txt en el mob_proto del cliente: vamos al locale de nuestro servidor, buscamos el mob_proto y lo decompilamos. Una vez hecho eso añadimos una linea nueva:

 

<Mob vnum="idmob" name="????" gb2312name="Nombremob" type="0" rank="1" battle_type="0" level="125" event_type="0" mob_color="0" />

Y listo ya tendreis vuestro nuevo mob implementado y funcionando :D

 

Imagen enviada

 

(Os pongo una foto de un mob cualquiera xd, esta porq la chami sale toda sexy :P)

 

 

5 - Errores frecuentes, soluciones y truquillos varios:

 

Toda esta teoría está muy bien, pero a mucha gente le pasa que implementa un mob perfectamente y luego no le va, hay una serie de cosas tipicas que suelen causar eso:

 

5.1: Invoco al mob, veo que me baja la vida pero no hay ningun monstruo, que hago :(

 

Este es el error mas tipico de todos, y que tiene muchas soluciones diferentes:

 

1 - Pusiste mal el nombre del mob en el npclist, así que revisa que el nombre que tiene el msm del mob sea el mismo que pusiste en el npclist, puede que lo hayas escrito mal. (Se que es muy básico pero nunca se sabe).

 

2 - Problema de ruta: A veces puede pasar que implementes un mob y metas la carpeta del mob en otra ruta diferente a la que tiene en el msm así que debereis cambiarlo de carpeta a la que ponga el msm.

 

3- El problema de las mayúsuclas y minúsculas: Aunque no lo parezca esto es algo que causa muchos problemas con los mobs, ya que es algo que muchos no saben.

 

Esto es muy importante: NUNCA PUEDE HABER MAYUSCULAS EN EL XML DE UN MOB, YA SEA EL NOMBRE DEL GR2 O DE LA TEXTURA, PORQUE DARA ERROR.

 

Como la gran mayoria usamos el creador de xml, cuando meteis la carpeta del mob en su archivo correspondiente teneis que fijaros que el nombre del gr2 del mob estea escrito en minusculas:

 

Así mal :(

 

Imagen enviada

 

 

Así bien :D

 

Imagen enviada

 

 

También teneis que abrir el msm del mob y ver que el .gr2 de ahi esté en minus también:

 

Asi mal :(

 

Imagen enviada

 

 

Asi bien :D

 

Imagen enviada

 

Ademas comprobad también que esta en minusculas en el xml. De esta manera al usar el creador de xml ya saldra en minusculas el nombre del gr2.

 

Por ultimo en lo referente a las minusculas fijaros que el nombre del mob, de la textura o cualquier otra cosa del xml este en minusculas, por ejemplo:

 

d:/ymir work/monster2/mob_nuevo/Mob.gr2
d:/ymir work/monster2/mob_nuevo/Textura_Mob.tga

Esas dos lineas estarían mal, ya que aunque el .gr2 esta en minusculas hay letras en mayuscula (la M de mob y la T de textura) asi que recordad siempre que todo debe estar en minusculas para que el juego lo lea bien ^^

 

d:/ymir work/monster2/mob_nuevo/mob.gr2
d:/ymir work/monster2/mob_nuevo/textura_Mob.tga

 

4 - El problema de las ids: A la hora de poner ids a los mobs nuevos que hayais implementado teneis que tener en cuenta que hay una serie de ids que se corresponde a monster/monster2/npc/npc2 así que a la hora de poner id os aconsejo que useis esta numeración:

 

* Si el mob es del monster, ponedle id de 210 en adelante.

 

* Si el mob es del monster2, ponedle id de 3000 en adelante.

 

* Si el mob es de npc/npc2, ponedle id de 18000 en adelante (a menos que sean montus que peguen o mascota que tienen que tener una id concreta).

 

Eso sí, si no quereis poner esas ids no significa que el mob no vaya a ir, pero con esas no os dará problema por la id nunca.

 

5.2: Cuando descargo un mob viene sin los gr2 de las animaciones, que hago???

 

Imagen enviada

 

Los mobs nuevos que implementeis no siempre tendrán animaciones propias, así que en muchos casos usarán las de otros mobs que tengan su mismo esqueleto (por lo que sus animaciones seran compatibles). En ese caso llevaran el mse con la ruta de la animacion del otro mob.

 

Si solo teneis el gr2 y msm de un mob y quereis usarlo tendreis que copiar de otro mob compatible con el sus mse (lo que es dificil de ver a veces ya que hay que fijarse en como es el mob fisicamente y buscar uno parecido) y pegarlos en la carpeta de vuestro mob.

 

Imagen enviada

 

5.3: Tengo un mob sin motlist, que hago??

 

Si os falta el motlist de un mob solo teneis que cojer el de otro mob y editarlo con los nombres de las animaciones que tenga vuestro mob. Para saber que gr2 es cada animacion (si el 00 es WAIT por ejemplo) tendreis que abrir el gr2 del mob cn el granny, darle a animation list, ahi a load new animation. Una vez os diga que gr2 abrir vais a la carpeta del mob abris un gr2, por ejemplo el 00 y veis que hace el mob, si corre sería RUN, si se muere pues DEAD y así.

 

Imagen enviada

 

 

Y eso es todo zoneros, espero que os sirva la guía :D

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

Keko cuando voy a implementar la query en el navicat me sale esto:

 

 INSERT INTO mob_proto VALUES ('20124', 'archskeleton', 'archskeleton', '5', '0', '0', '50', '', 'AGGR', '0', '', 'STUN', '0', '', '2', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '0', '2000', '1', '0', '0', '100', '100', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0 ', '0', '0', '1', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');

[Err] 1136 - Column count doesn't match value count at row 1

 

Me puedes decir que signific y lo que he hecho mal?

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

Keko cuando voy a implementar la query en el navicat me sale esto:

 

 INSERT INTO mob_proto VALUES ('20124', 'archskeleton', 'archskeleton', '5', '0', '0', '50', '', 'AGGR', '0', '', 'STUN', '0', '', '2', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '100', '0', '2000', '1', '0', '0', '100', '100', '100', '100', '100', '100', '0', '0', '0', '0', '0', '0', '0', '0', '0 ', '0', '0', '1', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');

[Err] 1136 - Column count doesn't match value count at row 1

 

Me puedes decir que signific y lo que he hecho mal?

 

Eso es porque usas querys 2007 en files 2010. Borrarle los 5 ultimos ceros y vuelve a meterla, y si no era 5 eran 6 no me acuerdo el numero exacto que habia de diferencia entre el mob_proto 2007 y el 2010.

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

Buena guia keko, pero tengo un problema, hice tudo que dijiste ay, cuando ago el "/mount_test (ID)" el juego cierra solo :S

 

abajo meto el syserr

 

0701 00:57:14046 :: CMapOutdoor::Load - LoadMonsterAreaInfo ERROR

0701 00:57:14851 :: GRANNY: r:/granny/rt/granny_file_info.cpp(145): File has run-time type tag of 0x8000000f, which doesn't match this version of Granny (0x80000010).  Automatic conversion will be attempted.

 
MOTLIST

GENERAL WAIT 00.msa 161

GENERAL WAIT1 00_1.msa 81
GENERAL WALK 02.msa 15
GENERAL RUN 02.msa 15
GENERAL COMBO_ATTACK 20.msa 161
GENERAL COMBO_ATTACK1 20.msa 161
GENERAL COMBO_ATTACK2 20.msa 161
GENERAL FRONT_DAMAGE 00.msa 161
GENERAL BACK_DAMAGE 00.msa 161
GENERAL DEAD 00.msa 161
GENERAL SKILL2 02.msa 15

 

ScriptType MotionData

MotionFileName "D:YMIR WORKnpcundead_horse00.gr2"

MotionDuration 5.333333

 

ScriptType MotionData

MotionFileName "D:YMIR WORKnpcundead_horse00_1.gr2"

MotionDuration 2.666666

 

ScriptType MotionData

MotionFileName "D:YMIR WORKnpcundead_horse02.gr2"

MotionDuration 0.466666

 

ScriptType MotionData

MotionFileName "D:YMIR WORKnpcundead_horse20.gr2"

MotionDuration 5.333333

 

MSM

 

ScriptType RaceDataScript

BaseModelFileName "D:/ymir work/npc2/undead_horse/undead_horse.gr2"

Group ShapeData
{
PathName "d:/ymir work/npc2/undead_horse/"

ShapeDataCount 1

Group ShapeData00
{
ShapeIndex 0

Model "undead_horse.gr2"
SourceSkin "vehicle_horse_undead_diff.tga"
TargetSkin "vehicle_horse_undead_diff.tga"
}
}
Group AttachingData
{
AttachingDataCount 3

Group AttachingData00
{
AttachingDataType 2

isAttaching 0
AttachingModelIndex 0
AttachingBoneName "Dummy_root"

EffectScriptName "D:/ymir work/effect/etc/forked_load/victory.mse"
EffectPosition 0.000000 0.000000 0.000000
EffectRotation 0.000000 0.000000 0.000000
}

Group AttachingData01
{
AttachingDataType 1

isAttaching 0
AttachingModelIndex 0
AttachingBoneName "Dummy_root"

CollisionType 1

SphereDataCount 1
Group SphereData00
{
Radius 60.000000
Position 0.000000 0.000000 100.000000
}
}

Group AttachingData02
{
AttachingDataType 1

isAttaching 1
AttachingModelIndex 0
AttachingBoneName "Dummy_root"

CollisionType 3

SphereDataCount 1
Group SphereData00
{
Radius 80.000000
Position 0.000000 0.000000 100.000000
}
}

}

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

Crear una cuenta o conéctate para comentar

Tienes que ser miembro para dejar un comentario

Crear una cuenta

Regístrese para obtener una cuenta nueva en nuestra comunidad. ¡Es fácil!

Registrar una nueva cuenta

Conectar

¿Ya tienes una cuenta? Conéctate aquí.

Conectar ahora


  • Recientemente navegando por este tema   0 miembros

    No hay usuarios registrados visitando esta página.

×