[ Guia ] Guia Practica, Crear un NPC Basico.
101Level - Foro

[ Guia ] Guia Practica, Crear un NPC Basico.

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Celsius

  • *
  • *
  • 6.600
  • 166
  • Actividad:
    0%
  • Sexo: Femenino
  • Cold as Fire(?) and Hot as Ice(?)
[ Guia ] Guia Practica, Crear un NPC Basico.
« en: 29 de Agosto de 2011, 01:16 »
[ Guia ] Guia Practica, Crear un NPC Basico.
Realizada por: Celsius

Explicacion de los Comandos mas BASICOS para crear un NPC.

Inicios:

Comenzaremos con lo mas Basico de todo, Responder la pregunta:

Que es un Script o cual es su definicion?

- Un script es un conjunto de instrucciones que permiten la automatización de tareas o conjunto de comandos que utilizamos con frecuencia, haciendo la tarea más fácil.

- Los scripts son un conjunto de instrucciones generalmente almacenadas en un archivo de texto que deben ser interpretados línea a línea en tiempo real para su ejecución, se distinguen de los programas, pues deben ser convertidos a un archivo binario ejecutable para correrlos.

En terminos mas sencillos y ajustados en este caso al RO, es un conjunto de instrucciones con las cuales nos hacemos el juego mas divertido y/o facil para nosotros que programamos, pero hay que recordar que debemos hacerlos pensando en los usuarios y no solo en nosotros.

Como la mayoria de los Archivos de texto, un NPC y/o Script esta compuesto de 3 partes.

Inicio o Header
Cuerpo o Body
Final


HEADER

Para no hacer tan larga esta Guia, les dejo este link a uno de mis F.A.Q. que es sobre los headers.

[F.A.Q.] Que es un Header

Un HEADER siempre es fundamentar en cualquier Script que se realize, en este caso dejare de ejemplo el siguiente:

Código: [Seleccionar]
prontera,155,175,5    script    Celsius#01::Healer01    410,{

Como Podran Imaginarse, les mostrare como Hacer un Healer sencillo, utilizando dialogos y menus.

BODY

Es lo segundo mas importante, al menos para mi. Ya que si deseamos que el Cuerpo Funcione debemos tener un Header funcional.

El cuerpo es el que debe de contener todas las instrucciones y comandos que deseamos que se ejecuten. Ahora les explicare los comandos que usare para este NPC.

COMANDOFUNCION
mes "tu mensaje";Este comando es el que permite que desplegemos un mensaje dentro de un Script. Es uno de los mas, si no el que mas, se utiliza en los Scripts.
next; close; end;Son Comandos que te permiten varias funciones, si conoces su significado en ingles, es exactamente lo que hacen. next; te permite aparecer un boton de Next o Siguiente en los dialogos y limpiar el cuadro de dialogo. close; Es el que te permite cerrar los dialogos. end; es con el que terminas el Script.
set VARIABLEEste nos permite definir una variable que utilizaremos en varias ocasiones. En mi Caso, generalmente lo uso para definir el nombre del npc para no escribirlo varias veces y que cada que lo necesite siempre sea igual.
if(condicion){}Sirve para verificar si alguna condicion se cumple y de ser asi efectuar lo que esta dentro de las llaves.
menu "opcion",etiqueta,"opcion2",etiqueta2;Como su nombre lo dice, es para abrir un menu y seleccionar la opcion.
ETIQUETAS y ETIQUETAS ESPECIALESLas etiquetas son partes especificas del SCRIPT definidas a partir de ellas, Hay ETIQUETAS ESPECIALES las cuales ya estan Pre-definidas en el emulador y las puedes utilizar cuando las necesites.
//Estos Guiones Dobles son para que puedas hacer un comentario en el Script, lo que pongas despues de // el emulador no los leera, pero no debes de hacer saltos de renglon para que funcione como debe.
;La mayoria de las lineas necesitan de este signo de puntuacion para determinar que ahi termina la linea de comando y se iniciara una nueva, nunca hay que olvidar esto.
[/t][/t]

Ahora si comenzaremos con el cuerpo del NPC.

Primero usaremos una de las ETIQUETAS ESPECIALES para definir unas cuantas cosas en el SCRIPT del NPC.

Código: [Seleccionar]
OnInit://se ejecuta al momento de que se inicia el Emulador o se carga el NPC.
set .name$, "[ Celsius ]";//Como lo comente antes, definimos una variable que usaremos constantemente en este caso el nombre del NPC.
set .price, 1000;//aqui definimos una variable que usare para definir un costo en el npc.


Como veran He usado una de las etiquetas especiales, OnInit: es una etiqueta que se ejecutara cada vez que el SCRIPT sea cargado en el emulador, incluyendo si se hace @reloadscript o @loadnpc.
He asignado 2 variables las cuales usaremos mas delante, la primera es .name$, la cual es una variable del tipo string de npc la cual solo se guarda unica y exclisivamente para este SCRIPT y puede llegar a almacenar caracteres alfanumericos.
la segunda es solo una variable de tipo npc, sin el string ( $ ) solamente puede almacenar valores numericos.

Código: [Seleccionar]
mes .name$;
mes "Hola, yo soy "+.name$+".";
mes "Yo puedo ayudarte a sanar tus Heridas.";
mes "Dime, deseas que te sane?";
next;
En este Trozo del Script estoy definiendo los dialogos iniciales del NPC, los cuales son los que estan en la imagen superior.
Los dialogos los pueden poner como ustedes deseen, recuerden que un Scripter ademas de su habilidad de saber programar tambien se define por su habilidad para inventar he imaginar.

Como veran dentro del dialogo estoy usando la variable que anteriormente asignamos. Para poder usar una variable dentro de un mensaje hay que usar los signos de mas (+) despues de las comillas.

Lo siguiente es definir las opciones del menu:

Código: [Seleccionar]
menu "Heal",OnHeal,"Salir",OnSalir;


El menu puedes usarlo con la cantidad de opciones que desees pero no es muy recomendable que usen muchas opciones, para ese caso se usaria mejor el switch pero eso sera despues.

Cada opcion que definas necesita una etiqueta para que se ejecute la parte del script que este debajo de la etiqueta.

En este caso quedaria asi:

Código: [Seleccionar]
OnHeal:
mes .name$;
mes "Muy Bien, te ayudare a sanar tus Heridas.";
next;
mes .name$;
mes "Pero claro, nada es gratis en esta vida, pero no te preocupes es solo una modica cooperacion para la Iglesia de Prontera.";
mes "Te parecen bien "+.price+" zenys??";
next;
menu "Si no hay problema",OnClaro,"No, Lo Siento.",OnSalir;

OnSalir:
mes .name$;
mes "Muy bien, espero sanen pronto por si mismas esas heridas.";
close;
end;

Al seleccionar Heal saldria lo de esta imagen:


Y al seleccionar Salir saldria esto:

Ahora definiremos lo que es el segundo menu, o mejor dicho el menu que salio de esta parte en la etiqueta OnHeal.

Código: [Seleccionar]
menu "Si no hay problema",OnClaro,"No, Lo Siento.",OnSalir;

En pocas palabras definiriamos la etiqueta OnClaro y ahi comprobariamos el si el jugador cuenta o no con el zeny necesario para usar el NPC.

Código: [Seleccionar]
OnClaro:
mes .name$;
mes "Muy Bien n.n";
mes "Si no te molesta veamos primero si tienes la cooperacion.";
next;
if( Zeny < .price ){//verificamos si la variable Zeny, que obviamente es del Zeny que tiene el personaje es menor al precio.
mes .name$;
mes "No puedo creer que intentaras engañarme T-T";
mes "lo siento pero no puedes cubrir la cooperacion.";
close;
end;
}
set Zeny,(Zeny - .price);
mes .name$;
mes "Muy Bien n.n";
mes "Con tu cooperacion lograremos hacer muchas obras buenas";
mes "Gracias...";
next;
mes .name$;
mes "es verdad casi olvido sanarte :P";
next;
percentheal 100,100;
mes .name$;
mes "listo.";
mes "te deseo suerte en tu aventura.";
close;
end;

En esta etiqueta lo que resalta mas es esto:

Código: [Seleccionar]
if( Zeny < .price ){//verificamos si la variable Zeny, que obviamente es del Zeny que tiene el personaje es menor al precio.
mes .name$;
mes "No puedo creer que intentaras engañarme T-T";
mes "lo siento pero no puedes cubrir la cooperacion.";
close;
end;
}

que es la verificacion de una condicion con el if, traduciendolo a castellano seria, SI la variable Zeny es menor a la variable precio se ejecuta lo que esta dentro de las llaves.


al no cumplirse la condicion, osea al momento de que tu zeny sea mayor a 1000, saldra lo que esta fuera de las llaves:




y cuando se cumple, osea tienes menos de 1000 zenys


Y Claro al momento de que le dices que no deseas pagar sale lo mismo que la parte de arriba de la opcion Salir.

Y ya por ultimo lo que es el final del Script es un unico y simple simbolo que es la llave derecha (right curly)

Código: [Seleccionar]
}

El motivo de que esto delimita el final del Script sale por logica simple... al menos para mi.

Ya que si recuerdan el Header inicia con un left curly y todo el cuerpo es lo que va despues de el y al cerrarlo termina el script.

Código: [Seleccionar]
prontera,155,175,5    script    Celsius#01::Healer01    410,{
TODO LO QUE DESEES DE SCRIPT
}// llave final del Script

Ya con estas bases podrias hacer NPC's Basicos para que saluden o den informacion a tus users, des heal o si te pones a investigar hacer infinidad de cosas.

El Archivo que les recomendaria que checaran si desean aprender a hacer mejores Scripts es tu carpeta del emulador/doc/script_commands.doc, y claro si no conocen mucho de Ingles pues les recomiendo usar un traductor ya que todos los comandos estan ahi descritos y otros salen con sentido comun xD.

::: [Mini FAQ] :::

- Q: El NPC que acabo de crear no me aparece en mi servidor.
- A: Debes de revisar varias cosas, esta agregado en las conf para que lo lea tu emulador?, te arroja algun error el emulador?

- Q: Como puedo hacer mas cosas con los NPC's?
- A: Como comente, es preferible que chequen el archivo tu carpeta del emulador/doc/script_commands.doc

La Clave del exito es la perseverancia, solo recuerda que todo lo bueno toma su debido tiempo. Si lo Aceleras siempre saldra mal.


 

Guia Crear Instalador con Smart Install Maker

Iniciado por Glondar

Respuestas: 4
Vistas: 12682
Último mensaje 02 de Junio de 2007, 21:32
por Eves
[Guía] Crear un cliente y Grf profesional para tu servidor.

Iniciado por Zealotus

Respuestas: 0
Vistas: 27290
Último mensaje 15 de Agosto de 2008, 21:16
por Zealotus
[Guia] Crear monturas para los Jobs [SRC]

Iniciado por Khasari

Respuestas: 0
Vistas: 4211
Último mensaje 08 de Mayo de 2009, 14:12
por Khasari