Jump to content

[NPC] Tienda del Viajero (Oakka).


Nanashi

Recommended Posts


  • Group:  Members
  • Topic Count:  15
  • Topics Per Day:  0.00
  • Content Count:  59
  • Reputation:   19
  • Joined:  01/03/13
  • Last Seen:  

[NPC] Tienda del Viajero

Autor: @Nanashi

Idioma: Castellano (Spanish)

Versión: 1.0

 

Descripción del Script

 

El NPC consiste en un sistema de una tienda portátil, con los recursos básicos (pociones, lupas, alas de mosca, etc) de un Tool Dealer. Se puede activar desde cualquier lugar por lo que es muy útil en servidores donde hay que moverse mucho o permanecer mucho tiempo sin visitar una ciudad.

 

 

Funcionamiento del Script

 

El NPC utiliza un sistema llamado "OnWhisperGlobal" en el cual se whispea al npc para activar su función.

 

Para activar la tienda hay que enviar un Mensaje (whispear) a Oakka con el texto viajero (npc:Oakka | viajero).

 

 

Ejemplo de Mensaje a Oakka (Activar la Tienda)

npc_oakka_mensaje.png

 

 

 

Una vez enviado el mensaje Oakka nos hablará sobre lo importante que es ir siempre equipado, acto después abrirá la tienda.

 

 

Código del Script

// |----------------------------------------------------------|
// |--------------------[rAthena Script]----------------------|
// |----------------------------------------------------------|
// |------------------ Tienda del Viajero --------------------|
// |----------------------------------------------------------|
// |------------------------[Autor]---------------------------|
// |----------------------------------------------------------|
// |----------------------- Nanashi --------------------------|
// |----------------------------------------------------------|
// |---------------------[Versión Actual]---------------------|
// |----------------------------------------------------------|
// |---------------------- Version 1.0 -----------------------|
// |----------------------------------------------------------|
// |---------------------[Comienzo del NPC]-------------------|
// |----------------------------------------------------------|

-	script	Oakka	-1,{

OnWhisperGlobal:

set .@nombre$,"[^0065DF Oakka ^000000]";

	if (@whispervar0$ == "viajero")  {
	goto help;
	}

help:
	mes "-^008888 Información ^000000-";
	mes "Sientes la presencia de un espíritu a tu alrededor...";
	next;
	mes .@nombre$;
	mes "Hola ^008888" + strcharinfo(0) + "^000000,";
	mes "llevo tiempo vagando por estas tierras desde los inicios de Midgard.";
	next;
	mes .@nombre$;
	mes "Aunque aún me queda mucho por explorar,";
	mes "durante mis viajes he aprendido lo importante que es ir siempre bien equipado.";
	next;
	mes .@nombre$;
	mes "Yo puedo proporcionarte lo básico.";
	mes "¿Te interesa ver mis mercancías?";
	next;
	switch (select("Si:^000088Salir^000000")){

Case 1:
	mes .@nombre$;
	mes "Esta bien, dame un segundo.";
	next;
	callshop "oakkashop",0;
	end;

Case 2:
	mes .@nombre$;
	mes "Como quieras ^008888" + strcharinfo(0) + "^000000,";
	mes "que tengas suerte en tus aventuras.";
	next;
	mes "-^008888 Información ^000000-";
	mes "La presencia del espíritu se desvanece...";
	close;

}
}

// -- Tienda de Oakka
// ===========================================================================================

-	shop	oakkashop	-1,611:40,601:60,602:300,501:50,503:550,502:200,645:800.

// ===========================================================================================

 

 

Descargas

oakka.txt

 

 

Notas Adicionales

  • Si encuentran algún error no duden en decírmelo ya sea en este post o por pm.
  • Saludos, espero que les sirva.
  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  182
  • Reputation:   36
  • Joined:  01/26/12
  • Last Seen:  

Tengo varias críticas constructivas que hacer a tu script. No lo he probado, pero creo que deberías echarle un ojo a tu script en los siguientes apartados:

  1. Cualquier cosa que whispees a Oakka acabará abriendo la tienda, dado que no hay nada que termine el script en caso de que @whispervar0$ no sea "viajero" (me refiero a un end después del goto). En caso de que no haya nada, el flujo de ejecución del script continúa hasta entrar en la etiqueta help.
  2. Nunca entendí por qué, pero según criticaron muy duramente a la persona de la que aprendí scripting, los goto son malvados y han de ser evitados a toda costa. Yo habría usado callsub que funciona igual de bien, aunque es posible evitar su uso y concentrar algo más el NPC. Me refiero a que puedes simplemente quitar ese goto y poner el contenido de dicha etiqueta ahí y el NPC funcionará igual de bien, o incluso mejor (más rápido, aunque no se note en una ejecución, a las millones de ejecuciones sí se nota) e incluso hará tu script más sencillo de leer por humanos.
  3. Es muy correcto y respetable usar switch para un menú de select, pero para un menú de solo dos opciones siempre sale mejor usar una estructura if-else. Esto es solo una minucia proveniente de una persona quisquillosa.
  4. No estoy seguro, pero parece que el script no termina cuando decides abrir la tienda: next prepara el NPC para abrir un nuevo cuadro de texto aún después de la tienda. Lo más apropiado sería usar close2, que cierra apropiadamente la ventana para que puedas usar luego end. Recuerda que close es básicamente close2 + end

En cuanto al apartado visual del código (que da totalmente igual a efectos prácticos), el sangrado del mismo es prácticamente correcto pero en mi opinión has abusado mucho de las líneas vacías blanco. Esto no importa absolutamente nada salvo que quieras darle buena apariencia. Se te han escapado un par de pequeñas erratas de tildes, pero tampoco es nada importante: muchas veces pasa :ani_swt3:

 

Aquí te ofrezco una versión con las correcciones planteadas anteriormente. Un comentario con un número significa alguno de los puntos que comenté anteriormente:

// |----------------------------------------------------------|
// |--------------------[rAthena Script]----------------------|
// |----------------------------------------------------------|
// |------------------ Tienda del Viajero --------------------|
// |----------------------------------------------------------|
// |------------------------[Autor]---------------------------|
// |----------------------------------------------------------|
// |----------------------- Nanashi --------------------------|
// |----------------------------------------------------------|
// |---------------------[Versión Actual]---------------------|
// |----------------------------------------------------------|
// |---------------------- Version 1.0 -----------------------|
// |----------------------------------------------------------|
// |---------------------[Comienzo del NPC]-------------------|
// |----------------------------------------------------------|

-	script	Oakka	-1,{
OnWhisperGlobal:
	set .@nombre$,"[^0065DF Oakka ^000000]";
	if (@whispervar0$ == "viajero")  {
		// Puntos 1 y 2, especialmente el 2: goto innecesario.
		mes "-^008888 Información ^000000-";
		mes "Sientes la presencia de un espíritu a tu alrededor...";
		next;
		mes .@nombre$;
		mes "Hola ^008888" + strcharinfo(0) + "^000000,";
		mes "llevo tiempo vagando por estas tierras desde los inicios de Midgard.";
		next;
		mes .@nombre$;
		mes "Aunque aún me queda mucho por explorar,";
		mes "durante mis viajes he aprendido lo importante que es ir siempre bien equipado.";
		next;
		mes .@nombre$;
		mes "Yo puedo proporcionarte lo básico.";
		mes "¿Te interesa ver mis mercancías?";
		next;
		if(select("Sí:^000088Salir^000000") == 1){	// Punto 3, si el select == 1 entonces se ha escogido sí.
			mes .@nombre$;
			mes "Está bien, dame un segundo.";
			close2;	// Punto 4
			callshop "oakkashop",0;
			end;
		} // Aquí podría venir un else, pero como nos hemos encargado de acabar el script en el caso anterior, nos da igual ponerlo o no.
		mes .@nombre$;
		mes "Como quieras ^008888" + strcharinfo(0) + "^000000,";
		mes "que tengas suerte en tus aventuras.";
		next;
		mes "-^008888 Información ^000000-";
		mes "La presencia del espíritu se desvanece...";
		close;
	}
	end; // Punto 1 otra vez, faltaba un end y en caso de que ahora no se ponga no pasaría nada, pero los scripts nunca acabarían.
}

// -- Tienda de Oakka
// ========================================================================================================
-	shop	oakkashop	-1,611:40,601:60,602:300,501:50,503:550,502:200,645:800.
// ========================================================================================================

 

He mantenido la misma estructura de flujo que tu NPC, pero yo personalmente habría comenzado el NPC así porque es más limpio:

-	script	Oakka	-1,{
OnWhisperGlobal:
	if (@whispervar0$ != "viajero")  end;	// El PJ no ha dicho viajero, no nos molestamos con el resto del NPC
	set .@nombre$,"[^0065DF Oakka ^000000]";
	// Resto del NPC aquí

 

Espero haber sido de ayuda con esto. ¡Un saludo!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...