[Guia] Creación Script’s [NPC’s]

19 01 2008

Buenas en esta guia os pretendo enseñar poco a poco ya que yo estoy aprendiendo tambien a crear npc’s, sus scritps etc para que podais crear los vuestros [entrecejo]. Poco a poco la iré actualizando segun yo tambien valla aprendiendo [entrecejo].

Introducción al Script del NPC

-NPC son las siglas de “non-player character” lo cual dice que no es un jugador como otro cualquiera, es un personaje interactivo con el cual podemos hablar, comprar y muchas cosas más. La creación de npc’s no es tan difici si quieres un nivel bajo solo para retoques pero va aumentando cada vez que intentes de hacer cosas mas complejas, para ello voy a ir actualizando esta guia conforme vea cosas interesantes que os pueden ayudar [entrecejo].

Creación de npc’s

En el mundo de ragnarok online podemos encontrarnos mercades, personas, etc que no son jugadores, son NPC’s y os voy a enseñar a crearlos [entrecejo].

Primero un npc tiene un codigo propio no podeis poner lo que os venga en gana sin segir unas reglas:

-Lo primero es que debe ser en formato de texto “.txt” ningun otro, ni xml, ni php, ni PDF ni nada por el estilo.

Bien una vez eso os cuento el tema.

Creais un archivo que se llame “minpc.txt” y lo abris.

Un npc al empezar siempre se pone el nombre lugar etc algo así:

Código:
prontera.gat,170,180,1   script   Stylist   122,{

lo primero es la ciudad o mapa donde pondremos el npc (podeis ver los mapas de ragnarok .gat en conf y luego en maps_athena.conf), lo siguiente son las coodenadas donde lo pondremos en el mapa (2D, para ello vais al mapa que habeis elejido y os situais en el lugar donde quereis ponerlo y escribes /where) y luego la situación de donde mira el npc (del 1 al 6), luego le dais al tabulador y poneis un espacio y escribis “script” dandole al servidor saber que es un script de npc luego poneis otro tabulador y ahora el nombre del npc, otro tabulador y ahora poneis el diseño del npc, si quereis verlos todos entrad en vustro server con el pj GM y escribis @disguise y probais del 1 al 950 “creo” y poneis el que mas os guste puede que haya un salto no me acuerdo bien, luego una “coma” y poneis el corchete que es el inicio del script “{“.

Ahora empezamos a crear los mensajes o lo que hará nuestro npc pogamoslo principalemente facil, así que vamos ha hacer que able solo eso.

Para ello le dais al enter, y os explico el npc para hablar su comando es “mes” tambien sirve para dar su nombre en la charla quedando mas realista os dejo un codigo y veis como es una charla

Código:
mes “[^FF8000Stylist^000000]”;
mes “Hola soy un estilista!”;
next;
mes “[^FF8000Stylist^000000]”;
mes “Estoy ablando contigo!”;
next;
mes “[^FF8000Stylist^000000]”;
mes “Me aburro asi que dejo de ablar contigo”;
close;
}

Si creais ese npc con la ruta de arriba os saldrá en prontera un estilista muy cabrito ya que dice que se aburre y que no quiere ablar con vosotros -.- pero pasando de él os explico lo que pasa.

El comando “mes” como veis es el diminutivo de “message” o “Mensaje en español” este hace que si escribis algo como mes “soy un cabron”;[b] el npc diga que es un cabron xD, es muy simple para crear mensajes.

1º pones la palabra mes luego le das al tabulador y ahora pones 2 comillas y entre ellas escribes lo que quiere que diga el npc y cierras esa parte con punto y coma “;” como dice antes mes “[^FF8000Stylist^000000]”;, esto hace que diga su nombre en colores [entrecejo]

Lo de los colores os explico para poner color en un texto pones antes de escribir “^” y luego un codigo hexadecimal de 8 bit’s para los expertos si no os cojeis cualquier codigo web de color con algun programa pero le quitais la almohadilla “#”, luego poneis lo que quieres que diga y terminais con “^000000” y listo, el npc dice esa frase o palabra en color que deseastes.

Luego si os dais cuenta he puesto “next;” esto hace que pase a otra frase en otra ventana dandoles al enter o al boton del npc “next” y para finalizar puse “close;” eso hace que termine el npc de hablar o de hacer algo cuando le deis al boton “next” del npc en el juego y al final cerré el script con el corchete “}”.

Esto hace que se cree ese npc. provad a hacer algo vosotros.

Esto es lo más basico de la creación del npc lo que es interactuar ablando con nosotros apartir de ahora para mayor facilidad de creación de esta guia y actualización para poner cosas nuevas os iré dejando tipos de creacion de diferentes npc’s para que veais como son y os explico como va [entrecejo].
———————————————————————————-

Crear una tienda

Crear tiendas es muy facil os explico el codigo

Código:
prontera.gat,160,160,5   shop   Pepito 831,1000:-1

lo primero es el mapa, coordenadas y la vista que tiene, luego le dais al tabulador y ahora en vez de script poneis “shop” marcando que es una tienda, otro tabulador y ahora el nombre otro tabulador y ahora ponemos el estilo visual osea el estilo del npc que os dije ante que miraseis poniendo @disguise y un numero😉 luego una coma y ahora poneis la ID del item a vender (Mirala en la item_db.txt” en la carpeta db es los numerros del principio”) y luego 2 puntos “:” y el precio que quereis poner y cerrais el archivo txt sin corchetes ni nada (Yo puse -1 en el precio haciendo que se ponga el precio original que tiene en la item_db.txt” ;)).

Y ya teneis una tienda en ese lugar.

Crear un Healer o hacer que un NPC cure un tanto porcierto del hp y sp del usuario
Bien para que tengáis un script predeterminado vamos a usar el de eAthena os dejo el código y traducido:

Código:
prontera.gat,150,184,5   script   Healer#h1-1::Healer   742,{

mes “[Healer]”;
mes “¡¡Tengo el poder de curar!!”;
mes “Puedo curar a quien yo quiera y gratis amigo!”;
mes “¿Deseas que te cure?”;
next;
menu “Curar”,-,”No Gracias”,CANCEL;
percentheal 100,100;
mes “[Healer]”;
mes “¡Ya estás curado!.”;
mes “¡Que tengas un buen día!”;
close;
CANCEL:
mes “[Healer]”;
mes “Bien vuelve si necesitas otra curación.”;
close;
}

Lo primero era como siempre la dirección del npc etc donde pasamos de ello ya que lo habéis aprendido anteriormente, y también como hacer que hablen, así que vamos hacia donde pone “menu”.

Este código hace que cree un menú donde elegir como el código pone:

menu “Curar”,-,”No Gracias”,CANCEL;

Para crear un menú debéis poner:

menu “Opción 1″,Opción1,”Opción2”,Opción2;

Lo que hay entre comillas es lo que aparece al hablar con el NPC, luego lo que no está entre comillas pero entre comas es para decirle al NPC que parte del script es la opción 1 o 2 y valla hacia ella para que continué interactuando… Pero quieres que el npc siga la ruta hacia abajo en el texto solo pon una raya “-” y seguirá hacia abajo, es bueno si solo tienes 2 opciones y no tienes que liarte ahora, si tienes 2 opciones para elegir la opción 1 debes poner algo así.

menu “Opción 1″,Opción1,”Opción2”,Opción2;
Opción 1:
mes “Hola has elegido la opción 1 del menú”;
close;

y saldrá que has elegido la opción 1, para ello pones “opción 1:” y sigues con el npc pero con la opción 1 y no olvides cerrarlo con “close;” para que termine esa opción (cuando termines el script con la opción 2 ya usas el corchete no antes!)

Pues como veis el script sigue hacia abajo luego hablamos de la otra opción y vemos que hay un comando “percentheal” este comando se usa para que una vez le des a curar el te cure al 100% o un tanto por ciento que desees de HP y SP (Hp,SP):

percentheal 100,100; -> Esto hace que recuperes la vida a tope.
percentheal 50,50; -> Esto hace que la recuperes a la mitad.

Fácil, ¿Verdad? sigamos con el script.

Ahora sigue ablando y pasamos a la opción 2 llamada en este caso “CANCEL” digamos que esta opción es siempre la 2º mas utilizada o la que siempre se usa, daros cuenta que si tenéis un npc que no termine las 2 opciones en close; pues no sales de él se queda en blanco, lo que hace esta opción es que cuando en el menú te digas si quieres curarte y le digas que no quieres te diga él npc “Bien vuelve si necesitas otra curación” y salgas dándole a close, para menús siempre tenla puesta ya que podrán salir si no les obligas a elegir una opción a la fuerza.

Listo hasta aquí como se crea un healer y el código de curar un tanto % del HP y SP.

———————————————————————————-

Tipos de Variables

Pasemos a las variables:

-Set -> Se utiliza para definir variables, en este caso la palabra LOL es la variable (puede ser cualquier cosa, podria aver puesto ERE, TJGJ…) pero es mejor utilizar palabras que recuerdes para no liarte.
En este caso definimos que la variable LOL es 1 (todas las variables son 0 por defecto) (1 se puede hacer como la cantidad de vezes que puede un npc hacer una cosa o un usuario)

Código:
Set LOL,1;


Pero para que sirven las variables? pues muy sencillo para definir eventos en el juego, para ello utilizamos

las comparaciones:

-if -> Es un comando para comparar variables, ya sean variables definidas por nosotros o variables que se definen en el juego como el nivel del pj, el nº de objetos…

Código:
if(LOL == 1) goto SI;

En este ejemplo comparamos la variable LOL que anteriormente emos definido con 1, si los 2 parametros son iguales entonce se ejecuta el comando goto.

-goto -> Nos permite saltar a un Label ej:

Código:
if(LOL == 1) goto SI; (Esto hace que si Lol = 1 vallas a la lavel SI y el npc diga “HOLA”

SI:
mes “Hola”;
close;

Estas son las variables definidas del eAthena:

Código:
StatusPoint – Los status points que quedan sin usar
BaseLevel – El nivel de Base
SkillPoint – Los skill points que quedan sin usar
Class – El job del pj
Upper – 1 si el pj es advanced job.
Zeny – El numero actual de zenys del pj
Sex – El sexo del pj, 0 si es mujer, 1 si es hombre.
Weight – El peso actual del pj.
MaxWeight – El peso maximo que puedo llevar el pj.
JobLevel – El nivel de job del pj
BaseExp – La experiencia de base que tiene el pj.
JobExp – La experiencia de job que tiene el pj
NextBaseExp – La experiencia que necesita el pj para subir al siguien nivel de base.
NextJobExp – La experiencia que necesita el pj para subir al siguien nivel de job.
Hp – El hp que tiene el pj.
MaxHp – El maximo hp que tiene el pj.
Sp – El sp que tiene el pj.
MaxSp – El maximo sp que tiene el pj.
Karma – El karma del pj (no esta implementado)
Manner – El rate de manner que tiene el pj


———————————————————————————-

Tipos de variables

Existen diferentes tipos de variables, algunas se eliminan kuando relogeas, otras kuando sales del NPC y otras se almacenan en el servidor por lo que siempre permanecen:

Código:
LOL -> Es una variable de carácter permanente que sobrevivirá el nuevo principio
@LOL -> Es una variable de carácter temporal que sería destruida en el final de el
$LOL -> Es una variable global permanente que no será perdida después del nuevo principio
$@LOL -> Es una variable global temporal que será perdida después de un nuevo principio de servidor
*LOL -> Es una variable de carácter permanente
* @LOL -> Es una variable de carácter temporal
_LOL$ -> Es una variable que puede almacenar textos y números.
” +LOL+ ” -> Mostrará la variable en el mensaje.

Podemos definir tmbien una variable multiple con el comando setarray:

Código:
setarray @VARIABLEMULTIPLE[0], 100, 200, 300, 400, 500, 600;

en este caso definimos 6 variables en una sola [entrecejo], para especificar que variable es solo debemos colocar el numero:

Código:
@VARIABLEMULTIPLE[0]=100
@VARIABLEMULTIPLE[1]=200
@VARIABLEMULTIPLE[2]=300

Tambien hay simbolos matematicos que se puede poner en una variable:

Código:
* -> Multiplicar
– -> Restar
/ -> Dividir
+ -> Sumar
! = -> No igual a
== -> Igual a
> = -> Mayor que o igual a
< = -> Menor que o igual a


———————————————————————————-
Como crear un Warp NPC basico

Crear un warp a un sitio es muyyy facil os dejo un ejemplo basico de un npc que teletransporta.

Código:
prontera.gat,154,197,3   script   MVP Warper   768,{
mes “[ ^0065DFMVP Warper^000000 ]”;
mes “Would you like to go to the MVP Arena ?…”;
menu “Yes!”,L_MVP,”No thanks.”,L_No;

L_MVP:
warp “quiz_00”,50,24;
close;
L_No:
close;
}


Este es el claro ejemplo del MVP Arena el warp que desde prontera te lleva al MVP arena.

Lo 1º es como siempre, mapa, coordenadas, vision, script, name y finalmente el sprite seguido de un corchete abriendo el script.

Luego el mensaje, menu si de seas ir o no y ahora el warp que es a lo que ivamos.

Código:
warp “quiz_00”,50,24;

warp – Es la variable a decir que te teletransporte a cierto sitio
“quizz_00”– Es el mapa (sin .gat) a donde vas a ser teletransportado
50,24 – Son las coordenadas del mapa.

Y listo cuando le digas sí ira el jugador al mvp arena.
———————————————————————————-

Como crear un npc basico para una quest

Bien como sabeis los npc’s hacen quest que son misiones o encargos, estas quest son dificiles de hacer por que pueden necesitar traer mas de un objeto y luego darselo, que te borre los objetos del jugador, darte el item y decidir si deseas o no que la quest se repita con ese personaje.

Código:
prontera.gat,220,184,4   script   Carolina   850,{
mes “[^ff0000Carolina^000000]”;
mes “Hum… estoy algo ocupada…. un segundo…..*Martillazos* Listo!!”;
next;
mes “[^ff0000Carolina^000000]”;
mes “¡Bienvenido a mi tienda!. Soy Carolina la mejor BlackSmith Como sabrás soy la expecialista en crear la mejor armadura del mundo para los cruzados y paladines usada por los miembros de la legión, imejoradel mundo!”;
next;
mes “[^ff0000Carolina^000000]”;
mes “Como sabrás soy la expecialista en crear la mejor armadura del mundo para los cruzados y paladines usada por los miembros de la legión.”;
next;
mes “[^ff0000Carolina^000000]”;
mes “Esta armadura es extremadamente dificil de encontrar solo yo, puedo crearla pero necesito varios objetos para hacerla.”;
next;
mes “[^ff0000Carolina^000000]”;
mes “¿Quieres que te haga una?”;
next;
menu “¿Que objetos necesito?”,L_si,”No, gracias”,L_no;

L_si:
mes “[^ff0000Carolina^000000]”;
mes “Voy a necesitar que me traigas los siguientes items:”;
mes “^ff00002^000000 Elenium”;
mes “^ff000010^000000 Steel”;
mes “^ff00001^000000 Plate Armor”;
mes “^ff00001^000000 Hammer of Blacksmith”;
mes “^ff000050000^000000 zeny”;
next;
menu “Tengo todos!”,L_verif,”Adios”,L_no;

L_verif:
mes “[^ff0000Carolina^000000]”;
if(countitem(985) < 2 || countitem(999) < 10 || countitem(2316) < 1 || countitem(1005) < 1) goto no_item;
delitem 985,2;
delitem 999,10;
delitem 2316,1;
delitem 1005,1;
set Zeny, Zeny-200000;
mes “Bien espera voy ha hacertela…”;
mes “*Clan!* humm ahora la enfrio… *Tssss* uff cuanto humo!… Ui … *Clan, clan, clan*… Lista!”;
mes “Toma tu armadura y gracias ati.”;
getitem 2342,1;
close;

L_no:
mes “[^ff0000Carolina^000000]”;
mes “En caso de que quieras una Full Plate Armor [1] ven cuando quieras.”;
close;

no_item:
mes “Todavia te faltan algunos items o zeny:”;
if (1 – countitem(985) > 0) mes  2 – countitem(985) +” Elenium”;
if (1 – countitem(999) > 0) mes  10 – countitem(999) +” Steel”;
if (1 – countitem(2316) > 0) mes  1 – countitem(2316) +” Plate Armor”;
if (1 – countitem(1005) > 0) mes  1 – countitem(1005) +” Hammer of Blacksmith”;
if (200000 – Zeny > 0) mes  200000 – Zeny +” zenys”;
close;
}

Para no liaros tanto os explico los tipos de variables y apartir de este npc de una quest para consegir la Full Plate Armor Slotted ya lo modificais a vuestro gusto.

Código:
if(countitem(985) < 2 || countitem(999) < 10 || countitem(2316) < 1 || countitem(1005) < 1) goto no_item;

Esta variable hace saber al npc si tienes los items necesarios sino te lleva a la label “no_item”, las ID de los items estan dentro del parentesis, las Barras verticales hacen de espacio, y los numeros hacia las derecha hacen que mire que cantidad de ese item necesitas.

Código:
delitem 985,2;
delitem 999,10;
delitem 2316,1;
delitem 1005,1;

Esto hace que si tienes los objetos lo borre el npc, solo pones la id “coma” cantidad y cierras con punto y coma.

Código:
set Zeny, Zeny-200000;

Esto mira que tengas el zeny que necesita el npc y luego que lo borra [entrecejo].

Código:
getitem 2342,1;

Esta variable te da el item junto a la cantidad que desee (ID,Cantidad)

Código:
if (1 – countitem(985) > 0) mes  2 – countitem(985) +” Elenium”;
if (1 – countitem(999) > 0) mes  10 – countitem(999) +” Steel”;
if (1 – countitem(2316) > 0) mes  1 – countitem(2316) +” Plate Armor”;
if (1 – countitem(1005) > 0) mes  1 – countitem(1005) +” Hammer of Blacksmith”;
if (200000 – Zeny > 0) mes  200000 – Zeny +” zenys”;

Por ultimo esta variable te dice el npc cuando hables si te falta algo, exactamente ya que te cuenta cada item que tienes y te dice cual falta ya que si tienes uno, seria de tonto que te dijera que te falta ese y lioso, aparte te dice cuanto zeny te falta [entrecejo].

———————————————————————————-

Crear un portal para entrar en una casa, tienda, etc…

Como Sabeis en el RO existen portales para entrar o salir de una ciudad, tienda, casa etc, los que vemos en el suelo.

Pues bien, os voy a enseñar a poner portales y que debeis configurar.

1º vamos a la carpeta de NPC’s, luego a warps, y luego entramos por ejemplo en “other” y abrimos por ejemplo “jobquests.txt”.

Una vez abierto vereis los script’s de los portales, os voy a enseñar ha hacer uno en base a otro que vereis en ese ficero:

Código:
new_zone01.gat,148,112,0   warp   newwarp6001   1,1,new_zone02.gat,100,9

Despedazemoslo!!!.

Código:
new_zone01.gat,148,112,0

Esta es la 1º parte del script, es facil reconocer que lo primero es el mapa.gat y los 2 siguientes son las coordenadas donde queremos que se ponga el portal…

Lo siguiente lo tipico, un tabulador, luego el tipo de script “Warp” (siempre este) y luego el nombre como “newwarp6001” o “Mi warp” (de todas forma no aparece asi que ponedle lo que querais)…

Código:
1,1,new_zone02.gat,100,9

1,1 -> Sinceramente no se lo que es en cuanto lo busque lo pongo pero si veis que ponen otros numeros poned vosotros 1,1 y os irá bien, puede ser que sea para poner alguna funcion o algo… pero poned siempre 1,1 por ahora.

new_zone02.gat,100,9 -> Lo tipico… Mapa donde quereis que lleve el portal y sus coordenadas.

Listos y ya tenemos nuestro portal!.

Bueno amigos esto es todo por hoy poco a poco la voy actualizando para que sepais un poco más de como hacer npc’s. [entrecejo]

Saludos,

Fuente 


Acciones

Information

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s