Mundo Pirata
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.
Últimos temas
» Zona Descargas
Tutorial: Implantar NPCs en el juego. EmptyDom Feb 23, 2014 11:01 pm por Telf R

» Los 18 de AoPII
Tutorial: Implantar NPCs en el juego. EmptyJue Ene 09, 2014 1:40 pm por RomnerB

» Nueva decoracion y temática!
Tutorial: Implantar NPCs en el juego. EmptyJue Ene 09, 2014 11:52 am por RomnerB

» Investigación: Explorando los archivos modificalbes del juego (Carpeta principal y RESOURCES)
Tutorial: Implantar NPCs en el juego. EmptyLun Dic 30, 2013 10:14 pm por RomnerB

» Parche Banderas
Tutorial: Implantar NPCs en el juego. EmptyLun Nov 25, 2013 5:50 pm por yvandario9

» Tutorial: Como usar convertorTX y Gmview (Imagen)
Tutorial: Implantar NPCs en el juego. EmptySáb Sep 28, 2013 8:46 am por criss

» Tutorial: HeroDescribe.txt & Cambiar apariencia del personaje.
Tutorial: Implantar NPCs en el juego. EmptySáb Sep 28, 2013 7:59 am por criss

» NAvegacion 1ra-3ra persona
Tutorial: Implantar NPCs en el juego. EmptyMar Ago 13, 2013 1:40 am por GDI-BOSS

» ayuda urgente porfabor
Tutorial: Implantar NPCs en el juego. EmptyJue Jun 20, 2013 10:58 am por vilota

Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Compañeros
Crear foro Webmastersworld 3dJuegos: AOP2 Pirates Ahoy

Tutorial: Implantar NPCs en el juego.

Ir abajo

Tutorial: Implantar NPCs en el juego. Empty Tutorial: Implantar NPCs en el juego.

Mensaje  Josuviz Sáb Jun 19, 2010 2:03 am

Aqui estoy una vez mas. Cada vez profundizando mas y mas, hoy traigo la forma de como poder implementar en el juego un NPC. Un NPC (non playable character) es un personaje que lleva el juego, como lo son el usurero, el gobernador, Morgan...

En nuestro caso, vamos a crear un NPC, lo pondremos en una ubicacion del juego, y le daremos un aC de dialogo para que pueda hablarnos.

Creando un NPC

Bien, si no poseemos de un editor de modelos, o simplemente, somo aficionados al tema, podemos escojer cualquier model existente en el juego. Si tenemos el HexEditor y sabemos como clonar models y cambiarles la ruta de la textura, pues es una buena opcion. En nuestro caso, voy a escoger a un personaje encapuchado bastante "molon" y misterioso, que dara mucho juego. (Este model pertenece al CMv3.1 de pirates ahoy).

Buscando localizacion

Una vez pensado que model y texturas usaremos, tenemos que ir a la carpeta:
aop2\program\locations\init\
Alli veremos un aC de cada ciudad. Vamos a entrar al de Tortuga por ejemplo, y vemos esto:

(...)
locations[n].id = "Tortuga_town";
locations[n].id.label = "Street";
(...)
locations[n].reload.l24.name = "houseF2";
locations[n].reload.l24.go = "CommonRoom_MH5";
locations[n].reload.l24.emerge = "reload1";
locations[n].reload.l24.autoreload = "0";
locations[n].reload.l24.label = "House";

locations[n].reload.l25.name = "houseH2";
locations[n].reload.l25.go = "CommonRoom_MH7";
locations[n].reload.l25.emerge = "reload1";
locations[n].reload.l25.autoreload = "0";
locations[n].reload.l25.label = "House";

locations[n].reload.l26.name = "houseSp1";
locations[n].reload.l26.go = "CommonResidence_BackHall";
locations[n].reload.l26.emerge = "reload1";
locations[n].reload.l26.autoreload = "0";
locations[n].reload.l26.label = "House";

locations[n].reload.l27.name = "houseH1";
locations[n].reload.l27.go = "CommonRoom_MH10";
locations[n].reload.l27.emerge = "reload1";
locations[n].reload.l27.autoreload = "0";
locations[n].reload.l27.label = "House";

locations[n].reload.l28.name = "houseSp2";
locations[n].reload.l28.go = "CommonFlamHouse";
locations[n].reload.l28.emerge = "reload1";
locations[n].reload.l28.autoreload = "0";
locations[n].reload.l28.label = "House";

locations[n].reload.l29.name = "houseH3";
locations[n].reload.l29.go = "CommonHut";
locations[n].reload.l29.emerge = "reload1";
locations[n].reload.l29.autoreload = "0";
locations[n].reload.l29.label = "House";
n = n + 1;
(...)
La location.id indica la referencia del lugar. Y dentro de ese lugar hay otras refencias (Es decir, primero esta la ciudad, que tendra sus ubicaciones, y en el escenario ciudad, hay casas, con otras ubicaciones), que son lo que indican los grupos de 5 lineas. De esas 5 lineas, la primera indica el nombre del lugar, la segunda la referencia, la tercera indica el punto donde aparece el personaje cuando se entra en esa estancia, la cuarta no se que es, y la quinta te indica el nivel del lugar, es decir, si es a pie de calle si se trata de una casa...

Imaginemos que quiero hacer que un personaje este en el faro de Tortuga. Revisando el documento encontramos:
(...)
locations[n].id = "Mayak6";
locations[n].id.label = "Mayak6";
(...)
Ese es la refencia al faro de Tortuga.

Una vez que se esa referencia, me voy a la carpeta:
Age of Pirates 2\Program\characters\init
Alli estan todos los personajes de las distintas ciudades, incluso hay un archivo llamado "StoryCharacters.c" donde guarda la informacion de algunos personajes como Morgan, ascold, Isabella...

Abrimos el archivo de tortuga, y si no queremos comernos mucho la cabeza copiamos la informacion de otro personaje (en mi caso, coji la de Isabella del archivo StoryCharacters.c) y la pegamos en el archivo Tortuga.c. Pero tenemos que editarlo, de tal manera que os quede algo asi:
makeref(ch,Characters[n]); // Ëþáîâü ïîíèìàøü...
ch.name = "Hombre";
ch.lastname = "Encapuchado";
ch.id = "josuviz001";
ch.model = "encap";
ch.sex = "man";
ch.model.animation = "man2_ab";

ch.location = "mayak6";
ch.location.group = "goto";
ch.location.locator = "goto30";

ch.Dialog.Filename = "char1.c";
ch.nation = SPAIN;
ch.rank = 8;
ch.DontClearDead = true; // íå óáèðàòü òðóï
ch.money = "10000";
LAi_NoRebirthEnable(ch);
LAi_SetStayType(ch);
LAi_group_MoveCharacter(ch, "SPAIN_CITIZENS");
LAi_SetLoginTime(ch, 0.0, 24.0);
LAi_SetHP(ch, 75.0, 75.0);

n = n + 1;
Tranquilos. Aqui hay mucha mas informacion de la que os he dado pero ahora os la explicare:
+ Lo que esta en naranja, me venia con el copia y pega de Isabella, pero no es algo que tenga que quitarnos el sueño.
+ Importante, el "ch.id" tiene que ser único. Aseguraros de poner un nombre que recordeis, que no repitais, y que sea casi imposible de que algun programador lo pusiera en algun otro personaje. Yo he puesto josuviz001, jaja.
+ La informacion de verde, model, sexo, y animation, aseguraros de que corresponde.
+ "ch.location", como veis, aqui he puesto la localizacion del faro que ya conociamos de ver el archivo de la carpeta locations, "mayak6".
+ La informacion de rojo es la ubicacion exacta donde se colocara nuestro NPC.
- Para ello, necesitaremos habilitar el modo beta, para que nos sea mucho mas facil. Vamos al archivo "mod_on_off" de la carpeta program. Buscamos las lineas adecuadas y las editamos tal que queden asi:
// Show special message for test game statment
#define MOD_BETTATESTMODE "On" // On -DEV version; Test - TST ver; Off - relize
- Entramos al juego, creamos nueva partida, presionamos f11, y en el cuadro de texto de arriba ponemos: "mayak6, reload, reload1_back" y presionamos aceptar. Como por arte de magia estamos en el faro de tortuga. Ahora presionamos f11, y en la esquina inferior derecha, hay un boton, instalaciones. Le damos a "mostrar buscador" y salimos de esa pantalla. Veremos que hay un monton de circulos de colores. (jajaja). Deberiamos fijarnos solo en los "goto/goto#". Bien, elegimos un goto en especial, (el 30, esta un poco lejos, lol). Y con esto ya tendriamos la informacion que necesitamos.

Creando una conversacion

+ Por ultimo, vamos a la carpeta "program\dialogs\russian" copiamos un aC, y lo renombramos con el nombre que querais, este sera el archivo de dialogo. Yo le he llamado "char1.c", y lo añadi a la linea "ch.dialog.filename". Bien, abris vuestro aC renombrado, y borrais por completo lo que ponga. Yo lo simplifique a una conversacion de una linea, desde aqui podeis seguir editandolo:

void ProcessDialogEvent()
{
ref NPChar;
aref Link, NextDiag;

DeleteAttribute(&Dialog,"Links");

makeref(NPChar,CharacterRef);
makearef(Link, Dialog.Links);
makearef(NextDiag, NPChar.Dialog);

switch(Dialog.CurrentNode)
{

case "First time":

dialog.text = "Esto es una conversacion vacia";
link.l1 = "Lo se";
link.l1.go = "Exit";
NextDiag.TempNode = "First time";
break;

case "Exit":
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;
}
}
Bueno y hasta ahi, ya deberias tener toda la informacion necesaria. Y ya podeis probar si ha funcionado:
[Tienes que estar registrado y conectado para ver esa imagen]
Si os fijais, esta situado en el goto/goto30
[Tienes que estar registrado y conectado para ver esa imagen]
Y aqui vemos que la conversacion funciona.

(Como lo he hecho a 200 por hora, igual quedan cosas por explicar, pero podeis postear aqui las dudas sin problema)
Josuviz
Josuviz
Admin

Mensajes : 101
Fecha de inscripción : 20/05/2010

https://gamers.activoforo.com

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.