GUIA DE SCRIPTS
Navegador Web ::
GuiaRO >>
Guías eAthena >>
Scripts
[Guia] Creación Script's [NPC's]
[Categoria: Scripts]
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
^^. Poco a poco la iré actualizando segun
yo tambien valla aprendiendo ^^.
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 ^^.
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 ^^.
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"; 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 ^^
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 ^^.
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 Wink
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"
Wink).
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í.
| Código: |
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)
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:
| Variables definidas del
eAthena: |
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:
| Tipos de variables |
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 ^^, 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 ^^.
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 ^^.
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. ^^ Saludos
[Categoria: Scripts]
Navegador Web ::
GuiaRO >>
Guías eAthena >>
Scripts
|