Salat

29/05/2006 19:48:17

Hola, estoy practicando con el aurora y tal... y se me plantea un problema.

Es facil hacer un mercader, hacer el dialogo y tal, o que de experiencia u oro, o un objeto, ya que hay un asistente para ello. Pero la cuestión es la siguiente:

Mi intencion es crear un "traficante de objetos", concretamente de pieles, y no me interesa que use el openstore, ni que se meta en el sistema de pago del modulo, sino que de cierta cantidad por una piel de lobo, o de ciervo, o lo que sea.

Pero haciendolo aun mas dificil, que es lo que me esta costando, quiero hacer que ese traficante compre TODAS las pieles del grupo a vender, y no de una en una. Es decir, que cuando le des en el dialogo "aqui te vendo unas pieles de ciervo", si tienes 12, te compre las 12 de golpe y no vaya de 1 en 1.

Alguna idea? :S

Gerjo

29/05/2006 19:59:34

Todo eso que dices lo puedes hacer desde el editor de conversaciones...Creas la conversación y en el punto que tu quieras editas esa linea y mandas que haga cierta acción desde el editor...

Ejemplo:

*mercader* saludos aventurero- pones como accion una reverencia por ejemplo.

*tu* saludos, lo mismo

*mercader* quieres que te enseñe mis mercancias? tambien compro a buen precio.

*tu* Si tengo algo que quizá te interese -en este punto puedes hacer que el mercader identifique el objeto que vas a venderle al llevarlo en tu inventario.

*mercader* perfecto piles de oveja me las quedo....aqui haces que el mercader te quite los objetos y te pague o te de px u otro objeto por ellos.

todo esto se hace con el editor de conversaciones..si tienes prueba y si tienes dudas te digo paso a paso como...

Un saludo

Salat

29/05/2006 20:01:15

Si, es facil plantearlo en pseudocodigo, lo que no se es como hacerlo. Cual es la accion definida para hacer eso? Si hay que modificar algo, que hay que modificar? esas cosas.

Lo unico que necesito es eso, la funcion definida para cada cosa, y ya la meto :D

LordBassilus

30/05/2006 00:34:24

Veamos, yo por mi parte no utilizo ese editor porque provoca que las quest sean facilmene bugeables así que si quieres los codigos aqui tienes un pequeño tutorial de como hacer quest y miniquest, claro esta, si quieres personalizarlas un poco más ya sería enrollarte un poco más en los dialogos o incluso entremezclar estos scripts. Cuando digo quest también puede ser un sistema de comercio como el que propones, pero cambiando las etiquetas de los objetos pertinentes y demás.

Quest:

[code:1:975e923142]
-Texto: El pnj hace proposición de quest al pj
(conv_ch_1 en condiciones de aparición del texto)

1Texto:El pj acepta
(conv_ac_1 en acciones emprendidas)
2Texto:El pj niega y se va
(no necesita guión)

-Texto: El pnj pregunta por el objeto de la quest
(conv_ch_2 en condiciones de aparición del texto)

1.Texto:El pj asiente
(conv_tieneitem en acciones emprendidas)
1.1.Texto: El pnj le da las gracias y la recompensa
(conv_ch_3 en condiciones de aparición y conv_ac_2 en
acciones emprendidas.)
1.2.Texto:El pnj acota que no tiene el objeto *esto solo
pasa si el pj no tiene aún el objeto*
(no necesita guión)

2Texto: El pj alega que no tiene el objeto y se va.
(no necesita guión)

conver_ac_1:
string s=GetName(GetPCSpeaker())+"nombredelobjeto";
SetLocalInt(OBJECT_SELF,s,1);

conver_ac_2:
string s=GetName(GetPCSpeaker())+"nombredelobjeto";
SetLocalInt(OBJECT_SELF,s,2);
object oOb=GetFirstItemInInventory(GetPCSpeaker());
while (GetIsObjectValid(oOb))
{
if (GetTag(oOb)=="etiquetadelobjeto")
{
DestroyObject(oOb); oOb=OBJECT_INVALID;
}
else oOb=GetNextItemInInventory(GetPCSpeaker());
}

conver_ac_2b:
string s=GetName(GetPCSpeaker())+"nombredelobjeto";
object oOb=GetFirstItemInInventory(GetPCSpeaker());
while (GetIsObjectValid(oOb))
{
if (GetTag(oOb)=="etiquetadelobjeto")
{
DestroyObject(oOb); oOb=OBJECT_INVALID;
}
else oOb=GetNextItemInInventory(GetPCSpeaker());

conver_ch_1:
string s=GetName(GetPCSpeaker())+"nombredelobjeto";
if (GetLocalInt(OBJECT_SELF,s)==0)
return TRUE;
else
return FALSE;

conver_ch_2:
string s=GetName(GetPCSpeaker())+"nombredelobjeto";
if (GetLocalInt(OBJECT_SELF,s)==1)
return TRUE;
else
return FALSE;

conver_ch_3:
int StartingConditional()
{

if (GetLocalInt(OBJECT_SELF,"correcto")==1)
return TRUE;
else
return FALSE;
}

Nota: este chequeo no lleva el void main, y es unico y exclusivo para todas las quest, ya que es un sistema de seguridad.

conv_tieneitem
#include "nw_i0_tool"
void main()
{
if (HasItem(GetPCSpeaker(),"etiquetadelobjeto"))
SetLocalInt(OBJECT_SELF,"correcto",1);
else
SetLocalInt(OBJECT_SELF,"correcto",0);
[/code:1:975e923142]

agradecimientos a LiLiPuT que es quien me enseñó todo esto.

Gerjo

30/05/2006 01:17:50

No me refiero al editor de quest automaticas que tiene el aurora, que creo que es a lo que te refieres,ese si da problemas, sino al editor de conversaciones y guiones que no es lo mismo :P

Un saludo

Maese Fys

30/05/2006 03:11:08

Tb es bugeable gerjo XD, auqnue ya puestos... alguienque entienda e gprogramacion es capaz de buguear cualquier cosa

Fys

LordBassilus

30/05/2006 13:36:04

xasto jejeje, ambos son bugeables pero también hemos de tener en cuenta que es lo que menos tardamos en hacer, si usais ese de ahí arriba será solo copiar-pegar XD.

Salat

30/05/2006 16:58:23

Si, queria usar el editor por no complicarme la vida, que hace tiempo que no toco el C. Pero bueno, gracias LordBassilus, muchas gracias :D

LordBassilus

30/05/2006 21:11:46

si lo que quieres es usar el editor, asegurate de hacer un chequeo del objeto en el inventario en dos respuestas, y una de ellas que sea en el lugar donde te da la recompensa porque si no es facil burlar la seguridad de la quest.

Salat

31/05/2006 14:48:47

Si, gracias. LordBassilus si puedes mira tu bandeja de entrada pls, y respondeme al mensaje. Gracias.

LordBassilus

17/06/2006 13:07:05

aun no me ha llegado tu mp eh XD