¡Vota por nosotros!

Vota diariamente por XatiyaRO para mejorar nuestra reputación y ayudarnos a crecer.

RagnaTOP - Top Ragnarok Online en Español Ragnarok private server
private server TOP RO Hispano

Autor Tema: [NPCs]Explicando eA NPC/Scripting [Cap2 - Quest Repetible] 2 tipos  (Leído 7389 veces)

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

Rokimoki

[NPCs]Explicando eA NPC/Scripting [Cap2 - Quest Repetible] 2 tipos
« en: 24 de Agosto de 2009, 14:00:32 pm »
Para entender bien esta guía os aconsejo leer el primer capítulo.

Capítulo 1, quest irrepetible: Leer

Utilizaré la quest del capítulo uno y la haremos repetible para que puedan compararla y aprender las diferencias, aunque yo lo explicaré paso a paso de nuevo como hize en el capítulo uno, la diferencia es que omitiré las explicaciones del switch y select puesto que ya han sido explicados.

Hago hincapié en la primera línea, como expliqué a partir de ahora lo pondré con <tab> siempre sabiendo que se sustituye por un espacio con el tabulador.

Código: [Seleccionar]
izlude,122,109,4<tab>script<tab>Reconstructor<tab>52,{
Y recalco que cundo empieza un "{" termina con otro "}"

Y ahora bien, la clave para que sea repetible o irrepetible en una quest es la variable que controla las partes de la quest, y como aquí explicaré los dos tipos de quest repetibles.

Quest Repetible Tipo 1
En realidad los tipos de quests los he catalogado a mi manera, es decir el tipo 1 sería la quest que haces una vez y al volverla a hacer, sería como empezarla desde cero, es decir, la variable que controla la quest, ponerla a 0 una vez terminas la quest.

Código: [Seleccionar]
izlude,122,109,4<tab>script<tab>Reconstructor<tab>52,{
set .nombre$, "[Reconstructor de Izlude]";
mes .nombre$;
switch (eventos) {
case 0:
mes "Hola veo que quieres  colaborar en la reconstrucción de Izlude, necesitarás traerme algunos objetos que necesito para reparar la infraestructura de Izlude.";
next;
mes .nombre$;
mes "60 Trunk";
mes "40 Steel";
mes "30 Iron";
mes "50 Scell";
mes "1 Elunium";
mes "1 Oridecon";
next;
mes .nombre$;
mes "Cuando los traigas, te compensaré....";
set eventos, 1;
break;

case 1:
mes "¿Ya me has traido los objetos?";
next;
switch (select("Sí:No...")) {
case 1:
mes .nombre$;
if (countitem(1019) >= 60 && countitem(999) >= 40 && countitem(998) >= 30 && countitem(911) >= 50 && countitem(985) >= 1 && countitem(984) >= 1) {
mes "OH!! Muchísimas gracias por traer los objetos !!!";
set eventos, 0; // Reseteamos la variable a 0
if (Sex == 0) {
announce "La heroina [" +strcharinfo(0) +"] ha contribuido en la reconstrucción de Izlude tras la invasión del pasado martes, Izlude estará eternamente agradecido !",bc_yellow|bc_all;
} else {
announce "El caballero [" +strcharinfo(0) +"] ha contribuido en la reconstrucción de Izlude tras la invasión del pasado martes, Izlude estará eternamente agradecido !",bc_yellow|bc_all;
} // End if
delitem 1019,60;
delitem 999,40;
delitem 998,30;
delitem 911,50;
delitem 985,1;
delitem 984,1;
getitem 12016,3;
getitem 14532,1;
getexp 1000,1000;
} else {
mes "No tienes aún todos los items necesarios para la recompensa, por favor vuelve cuando los tengas !!";
mes "60 Trunk";
mes "40 Steel";
mes "30 Iron";
mes "50 Scell";
mes "1 Elunium";
mes "1 Oridecon";
} // End if
break;

case 2:
mes .nombre$;
mes "Bueno pues vuelve cuando los tengas para la recompensa ^^";
break;
} // End switch
break;
} // End switch
close;
} // End script

En comparación al capítulo 1 vemos que ya no ponemos la variable al valor 2, por lo tanto no hay un case 2: en la variable controladora porque nunca tendrá el valor 2 dicha variable, entonces, al terminar la quest la ponemos a 0 y vemos que hay un comentario que lo indica. Así cuando volvamos a darle al NPC será la quest repetible puesto que cuando la acabas, la puedes volver a hacer.

¿Sencillo? ;)

Quest Repetible Tipo 2
Este último tipo de quest repetible, este se basa en una quest que la terminas aparentemente pero puedes seguir repitiéndola pero con otra recompensa menor, pongo un ejemplo.

El reconstructor de Izlude os empieza con una bienvenida os pide unos objetos de entrada una vez que los entrega te da la recompensa y el chico te dice que puedes seguir continuándola o bien con los mismos items u otros items y con otra recompensa.

Código: [Seleccionar]
izlude,122,109,4 script Reconstructor 52,{
set .nombre$, "[Reconstructor de Izlude]";
mes .nombre$;
switch (eventos) {
case 0:
mes "Hola veo que quieres  colaborar en la reconstrucción de Izlude, necesitarás traerme algunos objetos que necesito para reparar la infraestructura de Izlude.";
next;
mes .nombre$;
mes "60 Trunk";
mes "40 Steel";
mes "30 Iron";
mes "50 Scell";
mes "1 Elunium";
mes "1 Oridecon";
next;
mes .nombre$;
mes "Cuando los traigas, te compensaré....";
set eventos, 1;
break;

case 1:
mes "¿Ya me has traido los objetos?";
next;
switch (select("Sí:No...")) {
case 1:
mes .nombre$;
if (countitem(1019) >= 60 && countitem(999) >= 40 && countitem(998) >= 30 && countitem(911) >= 50 && countitem(985) >= 1 && countitem(984) >= 1) {
mes "OH!! Muchísimas gracias por traer los objetos !!!";
set eventos, 0;
if (Sex == 0) {
announce "La heroina [" +strcharinfo(0) +"] ha contribuido en la reconstrucción de Izlude tras la invasión del pasado martes, Izlude estará eternamente agradecido !",bc_yellow|bc_all;
} else {
announce "El caballero [" +strcharinfo(0) +"] ha contribuido en la reconstrucción de Izlude tras la invasión del pasado martes, Izlude estará eternamente agradecido !",bc_yellow|bc_all;
} // End if
delitem 1019,60;
delitem 999,40;
delitem 998,30;
delitem 911,50;
delitem 985,1;
delitem 984,1;
getitem 12016,3;
getitem 14532,1;
getexp 1000,1000;
} else {
mes "No tienes aún todos los items necesarios para la recompensa, por favor vuelve cuando los tengas !!";
mes "60 Trunk";
mes "40 Steel";
mes "30 Iron";
mes "50 Scell";
mes "1 Elunium";
mes "1 Oridecon";
} // End if
break;

case 2:
mes .nombre$;
mes "Bueno pues vuelve cuando los tengas para la recompensa ^^";
break;
} // End switch
break;

case 2:
mes "Es cierto que la reconstrucción ya ha terminado... No obstantepuede seguir ayudando, trae la misma cantidad de items y serás recompensado de nuevo !! tantas veces como el evento dure.";
next;
mes .nombre$;
mes "60 Trunk";
mes "40 Steel";
mes "30 Iron";
mes "50 Scell";
mes "1 Elunium";
mes "1 Oridecon";
next;
mes .nombre$;
if (countitem(1019) >= 60 && countitem(999) >= 40 && countitem(993) >= 30 && countitem(911) >= 50 && countitem(985) >= 1 && countitem(984) >= 1) {
mes "OH!! Muchísimas gracias por traer los objetos !!!";
delitem 1019,60;
delitem 999,40;
delitem 998,30;
delitem 911,50;
delitem 985,1;
delitem 984,1;
getitem 12016,1;
getexp 400,400;
} else {
mes "No tienes aún todos los items necesarios para la recompensa, por favor vuelve cuando los tengas !!";
} // End if
break;
} // End switch
close;
} // End script

Como observamos vemos que al terminar la quest nos manda al case 2: como en el capítulo 1 que ya acaba la quest, dice que gracias y un close; por tanto no pasará nada más. La diferencia aquí que está algo más desarrollado para que aparentemente puedas continuar la quest siempre, y te da una libertad para modificar los items, disminuir la cantidad y otra recompensa inferior.

No es nada complicado, simplemente jugar con las variables y la demás cosas como he explicado, con unas cosas sencillas se puede hacer cosas interesantes. Espero que con estos dos capítulos ya puedan hacer alguna quest sencilla para vuestro servidor y aprovechar eventos especiales.

PD: Hasta el próximo capítulo (que habrá)


Este trabajo está bajo la licencia: Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License