Saltar al contenido

Más en DLAN: Nuestras Traducciones | Otras Traducciones | Mods y modding | Revisiones y Guías | Videojuegos | Arte | Literatura | Rol y Rol por foro e IRC | Mapa de la web
Foto

Una ayudita por favor con una conversación que se me resiste


18 respuestas al tema

#1 Colwyn

Colwyn

    Humano

  • Miembro
  • Pip
  • 10 posts

Posteado 30 November 2018 - 12:48 AM

Hola, buenas tardes, soy nuevo por aquí, estoy empezando a crear un módulo con el aurora del Neverwinter Nights 1 y tengo problemas con las misiones creadas a través de las conversaciones, se me resisten y tengo problemas en que salten segundas frases si la variable de la misión en el diario es superior a 0, no sé por donde pueden ir los tiros, he revisado todas las consultas de scripts de conversaciones que hay en el foro y no se que es lo que está saliendo mal, he usado los scripts facilitados por Txibi (muchísimas gracias a ti y a todos), acepto la misión y abre la nueva nota en el diario, pero al volver a hablar con el PNJ empieza desde el principio.

 

Por favor, ¿podéis echarme una mano?

 

Esto es lo que tengo en el diario

 

Nombre: Bandido orco

Etiqueta: mis_1_for_nolan

Prioridad: intermedio

PX: 0

 

Dos entradas con Id 1 e Id 2

 

Conversación reducida para realizar pruebas, si logro que funcione ya le pongo un poco mas de chicha y me sirve para hacer variaciones.

 

Rama 1 de la conversación

P - Nolan - Hola muchachos, ¿os interesaría participar en una aventura?

 

A esta pregunta le he indicado en el texto aparece cuando, el script 3_tx_nolan_1

 

void main()

{

 

}

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_for_nolan")<1))

return FALSE;

 

return TRUE;

}

 

R - ¿De que se trata?

P – Nolan – Hay un bandido orco cerca del pueblo que está causando problemas en las granjas, necesito que os ocupéis de el.

R – De acuerdo, cuenta con nosotros.

P – Perfecto, debéis dirigiros al norte, hay una pequeña cueva, lo han visto rondando por allí, traedme su espada como prueba de que ya no dará problemas.

R - De acuerdo, acabaremos con el y te traeremos su espada. Fin dialogo

 

A esta respuesta en otras acciones se ha añadido al diario con etiqueta 1

 

R – No, en otra ocasión. Fin diálogo

 

Hasta aquí todo funciona perfectamente, tras aceptar se añade la etiqueta 1 al diario pero el resto de la conversación no se reproduce, vuelvo al PNJ y vuelve a empezar desde el principio.

 

Rama 2 de la conversación

 

P – Nolan - Hola muchachos, ¿ha ido todo bien? ¿tenéis la espada?

 

A esta pregunta le he indicado en el texto aparece cuando, el script 3_tx_nolan_2

 

void main()

{

 

}

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_for_nolan")==1))

return FALSE;

 

return TRUE;

}

 

R - Si, aquí tienes su espada.

 

A esta respuesta le he indicado en el texto aparece cuando, el script 3_tx_nolan_4

 

#include "nw_i0_tool"

int StartingConditional()

{

if(!CheckPartyForItem(GetPCSpeaker(),"mis_1_espada"))

return FALSE;

 

return TRUE;

}

 

R – Nolan - ¡Perfecto! Muchísimas gracias

 

A esta respuesta le he indicado en el texto aparece cuando, el script 3_tx_nolan_f, aunque no sé si tendría que ir en acciones emprendidas

 

#include "nw_i0_tool"

//Subprograma PartyHaHechoQuest.

int PartyHaHechoQuest(object oPC)

{

object oPartyMember = GetFirstFactionMember(oPC, TRUE);

while (GetIsObjectValid(oPartyMember) == TRUE)

{

// Comprobamos que no haya hecho la quest

if (GetLocalInt(GetModule(),"mis_nolan_hecha_" + GetName(oPartyMember) + GetPCPlayerName(oPartyMember) ) == 1)

{

//Ya ha hecho la quest

return TRUE;

}

oPartyMember = GetNextFactionMember(oPartyMember, TRUE);

}

return FALSE;

}//fin subprograma PartyHaHechoQuest

//Subprograma MarcarGrupo.

void MarcarGrupo(object oPC)

{

object oPartyMember = GetFirstFactionMember(oPC, TRUE);

while (GetIsObjectValid(oPartyMember) == TRUE)

{

// Comprobamos que no haya hecho la quest

SetLocalInt(GetModule(),"mis_nolan_hecha_" + GetName(oPartyMember) + GetPCPlayerName(oPartyMember), 1);

oPartyMember = GetNextFactionMember(oPartyMember, TRUE);

}

}//fin subprogrma MarcarGrupo.

//Cuerpo principal del programa.

void main()

{

object oJugador = GetLastSpeaker();

object oItemToTake=GetItemPossessedBy(oJugador,"mis_1_espada");

//If principal.

if(GetIsObjectValid(oItemToTake)!=0)

{

DestroyObject(oItemToTake);

//Comprobamos si los jugadores han hecho la quest

if (!PartyHaHechoQuest(oJugador))

{

//Damos puntos de xp a todo el grupo y oro al poseedor de la espada.

MarcarGrupo(oJugador);

//Dar un poco de oro al jugador que habla con el patrón.

int iOroCarisma = GetAbilityModifier(ABILITY_CHARISMA, GetPCSpeaker());

//Cogemos el bono del carisma y lo multiplicamos * 10

iOroCarisma = iOroCarisma * 10;

//Luego le sumamos la cantidad prometida.

iOroCarisma = iOroCarisma + 300;

 

if(GetLocalInt(GetPCSpeaker(), "regnolan") == 1)

{

//Un buen exito en persuadir.

iOroCarisma = iOroCarisma + 150;

GiveGoldToCreature(GetPCSpeaker(), iOroCarisma);

}

else if(GetLocalInt(GetPCSpeaker(), "regnolan") == 2)

{

//Un exito normal en persuadir.

iOroCarisma = iOroCarisma + 60;

GiveGoldToCreature(GetPCSpeaker(), iOroCarisma);

}

else if(GetLocalInt(GetPCSpeaker(), "regnolan") == 3)

{

//Es Paladin, de modo que toma el oro justo para pagarse la comida.

GiveGoldToCreature(GetPCSpeaker(), 10);

GiveXPToCreature(GetPCSpeaker(), 40);

}

else //el pago normal

{

GiveGoldToCreature(GetPCSpeaker(), iOroCarisma);

}

//Dar un poco de XP

object oPC=GetLastSpeaker();

object oPartyMember = GetFirstFactionMember(oPC, TRUE);

int nNivelPJ = GetHitDice(oPartyMember);

while (GetIsObjectValid(oPartyMember) == TRUE)

{

//Reparto de XP.

//Comprobamos su inteligencia para dar bono/malus de xp.

int iEsaINT = GetAbilityModifier(ABILITY_INTELLIGENCE, oPartyMember);

//Comprobamos su sabidura para dar un bonus o malus de xp.

int iEsaSAB = GetAbilityModifier(ABILITY_WISDOM, oPartyMember);

//Se hace la media... de ambas bonus/malus.

int iBonoXP = ((iEsaINT + iEsaSAB) * 5 );

//Damos la xp segun nivel y bono/malus

int iTotal = 0;

 

if (nNivelPJ<=4)

{

//Antes comprobamos que no de xp negativa... que algunos...

iTotal = 200 + iBonoXP;

if (iTotal<0) { iTotal = 0;}

GiveXPToCreature(oPartyMember, iTotal);

}

else if ((nNivelPJ>=5) && (nNivelPJ<=8))

{

iTotal = 500 + iBonoXP;

if (iTotal<0) { iTotal = 0;}

GiveXPToCreature(oPartyMember, iTotal);

}

else if ((nNivelPJ>8) && (nNivelPJ<11))

{

iTotal = 650 + iBonoXP;

if (iTotal<0) { iTotal = 0;}

GiveXPToCreature(oPartyMember, iTotal);

}

else if (nNivelPJ>=11)

{

iTotal = 100 + iBonoXP;

if (iTotal<0) { iTotal = 0;}

GiveXPToCreature(oPartyMember, iTotal);

}

oPartyMember = GetNextFactionMember(oPartyMember, TRUE);

nNivelPJ = GetHitDice(oPartyMember);

} //fin while

 

//Añadir al diario

AddJournalQuestEntry("mis_1_for_nolan",2,oJugador);

SetLocalInt(oJugador,"mis_1_for_nolan",2);

}//fin del if de dar cobro de misión.

else

{

 

R - No, aún no.

 

 

Rama 2 de la conversación

 

Nolan - ¿Qué tal muchachos? Muchas gracias por solucionar el problema con el orco.

 

A este saludo le he indicado en el texto aparece cuando, el script 3_tx_nolan_3

 

void main()

{

 

}

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_for_nolan")==2))

return FALSE;

 

return TRUE;

}

 

Si consigo que funcione esta conversación ya tendría una base para poder hacer otras misiones y búsquedas variando datos, si en la opción del script 3_tx_nolan_f, la pudiera reducir y hacer que solo marque la segunda etiqueta en el diario para finalizar la misión y entregar los PX u oro marcados en ella (aquí no sé si se los daría a todos los PJ, no sé si al aceptar la misión un PJ actualiza el diario a todos los PJ), elimine del inventario el objeto de trama y dar x puntos de experiencia fijos a todos los PJ mejor, el script sería más corto para ir comprendiéndolo mejor ahora que estoy empezando, las complicaciones para más tarde je je je.

 

Me gusta más la forma de hacer las misiones por conversaciones y no por el asistente de trama.

 

Si pudierais echarme una mano y solucionarme este problemilla os lo agradecería mucho.

 

Muchas gracias

Un abrazo a tod@s

Colwyn

 



#2 Zoraga

Zoraga

    Neonato

  • Miembro
  • PipPip
  • 213 posts

Posteado 30 November 2018 - 11:39 AM

haz que la variable en 0, pase a 1 una vez aceptada la misión, luego para continuarla o darle un avance, que te pida como condicional que esté en 1, pero debes poner la frase de conversacion arriba de la anterior, para que la condicional de esta frase solo se abra si está en 1, (ya que si no lo haces, te saldrá la que esta en 0 o la que no te pide esta condicional), lo mismo para seguir avanzando en la trama de tu quest, poniendo la condicional 2 sobre la 1, y que esta condicional te pida el numero exacto, ten en cuenta que si no modificas la variable una vez avanzada la misión, queda por predeterminada en 0 y por eso te sale siempre la misma conversación, algo así sería en resumen.


Editado por Zoraga, 30 November 2018 - 11:45 AM.

Colaborando en:



Nombre servidor: ES) Rebelión del Submundo
Tipo de servidor: rol/acción/jvj
Jugadores: 1-25
Niveles: 1-30
Base literaria: Reinos Olvidados
IP (conectar directamente): sombrasdefaerun.no-ip.org
Foro: http://usn-rol.foroes.org/



 


#3 Colwyn

Colwyn

    Humano

  • Miembro
  • Pip
  • 10 posts

Posteado 30 November 2018 - 11:56 AM

Hola, buenos días, entonces ¿la solución es invertir el orden de la conversación para que si que tome nota el script de la variable?, ¿los scirpts están bien?

 

Muchas gracias

Un saludo



#4 Colwyn

Colwyn

    Humano

  • Miembro
  • Pip
  • 10 posts

Posteado 01 December 2018 - 12:48 AM

Hola, buenas tardes a tod@s, muchas gracias por tu ayuda Zoraga, he revisado los scripts y se me habían colado algunas palabras del script de tutorial que hizo Txibi, los he rehecho y también he probado a invertir el orden de las preguntas, pero sigue igual, no pasa al segundo bloque, ni tampoco pasa a revisar si llevo el arma con la etiqueta marcada, los scripts cortos los compila bien, pero en el largo da error de falta de startingconditional en la secuencia de comandos, no se que puedo tener mal, por favor, si pudierais revisar donde tengo el problema me haríais un gran favor, estoy muy verde con el tema de los scripts, me gustaría reducir el script largo a solo lo necesario (comprobar que se ha realizado la misión, comprobar que está el arma de requisito, eliminarla del inventario y repartir PX fijos y oro fijo a todos los PJ por igual, sin tiradas de carisma ni inteligencia, solo lo básico para finalizar la misión con recompensa).

 

Si consigo tener esta conversación mínima de encargo de misión ya podría avanzar mucho más en el Aurora y poder hacer el módulo y utilizarlo de base y ejemplo para la creación de otros al tener estos scripts que funcionen.

 

Esto es lo que sucede, el PNJ me da la misión y se activa la ID 1 del diario, pero al volver sigue con el primer bloque, el PNJ no avanza en la conversación.

 

Muchísimas gracias por vuestra ayuda.

 

Diario con dos entradas con Id 1 e Id 2, a la Id 2 le he marcado terminar categoría para que al saltar en el diario la pase a misión completada.

 

Nombre: Bandido orco

Etiqueta: mis_1_nolan

Prioridad: intermedio

PX: 0

 

 

Primer bloque

 

Nolan - Hola muchachos, ¿os interesaría participar en una aventura?

El texto aparece cuando, añado el script 3_tx_nolan_1

R-¿De que se trata?

Nolan – Hay un bandido orco cerca del pueblo que está causando problemas en las granjas, necesito que os ocupéis de el.

R-De acuerdo, aceptamos.

R-No, en otra ocasión, vamos a tomar algo y a descansar. Fin diálogo

Nolan - Perfecto, debéis dirigiros al norte, hay una pequeña cueva, lo han visto rondando por allí, traedme su espada como prueba de que ya no dará problemas.

R - De acuerdo, acabaremos con el y te traeremos su espada. Fin dialogo

A esta respuesta en otras acciones se ha añadido al diario con etiqueta 1

 

3_tx_nolan_1

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_nolan")<1))

return FALSE;

 

return TRUE;

}

 

 

Segundo bloque

 

Nolan - Hola muchachos, ¿ha ido todo bien? ¿tenéis la espada?

El texto aparece cuando, añado el script 3_tx_nolan_2

R - Si, aquí tienes su espada.

El texto aparece cuando, añado el script 3_tx_nolan_4

 

R-No, aún no. Fin diálogo

Nolan - ¡Perfecto! Muchísimas gracias

El texto aparece cuando, añado el script 3_tx_nolan_f

 

3_tx_nolan_2

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_nolan")==1))

return FALSE;

 

return TRUE;

}

 

 

 

3_tx_nolan_4

#include "nw_i0_tool"

int StartingConditional()

{

if(!CheckPartyForItem(GetPCSpeaker(),"mis_1_espada"))

return FALSE;

 

return TRUE;

}

 

 

3_tx_nolan_f

Este script al darle a guardar da Error. '3_tx_nolan_f' no se ha compilado.

3_tx_nolan_f.nss: ERROR: FALTA FUNCIÓN STARTINGCONDITIONAL() EN LA SECUENCIA DE COMANDOS

 

 

//Subprograma PartyHaHechoQuest.

int PartyHaHechoQuest(object oPC)

{

object oPartyMember = GetFirstFactionMember(oPC, TRUE);

while (GetIsObjectValid(oPartyMember) == TRUE)

{

// Comprobamos que no haya hecho la quest

if (GetLocalInt(GetModule(),"mis_nolan_hecha_" + GetName(oPartyMember) + GetPCPlayerName(oPartyMember) ) == 1)

{

//Ya ha hecho la quest

return TRUE;

}

oPartyMember = GetNextFactionMember(oPartyMember, TRUE);

}

return FALSE;

}//fin subprograma PartyHaHechoQuest

//Subprograma MarcarGrupo.

void MarcarGrupo(object oPC)

{

object oPartyMember = GetFirstFactionMember(oPC, TRUE);

while (GetIsObjectValid(oPartyMember) == TRUE)

{

// Comprobamos que no haya hecho la quest

SetLocalInt(GetModule(),"mis_nolan_hecha_" + GetName(oPartyMember) + GetPCPlayerName(oPartyMember), 1);

oPartyMember = GetNextFactionMember(oPartyMember, TRUE);

}

}//fin subprogrma MarcarGrupo.

//Cuerpo principal del programa.

void main()

{

object oJugador = GetLastSpeaker();

object oItemToTake=GetItemPossessedBy(oJugador,"mis_1_espada");

//If principal.

if(GetIsObjectValid(oItemToTake)!=0)

{

DestroyObject(oItemToTake);

//Comprobamos si los jugadores han hecho la quest

if (!PartyHaHechoQuest(oJugador))

{

//Damos puntos de xp a todo el grupo y oro al poseedor del arma.

MarcarGrupo(oJugador);

//Dar un poco de oro al jugador que habla con el patrón.

int iOroCarisma = GetAbilityModifier(ABILITY_CHARISMA, GetPCSpeaker());

//Cogemos el bono del carisma y lo multiplicamos * 10

iOroCarisma = iOroCarisma * 10;

//Luego le sumamos la cantida prometida.

iOroCarisma = iOroCarisma + 300;

 

if(GetLocalInt(GetPCSpeaker(), "regnolan") == 1)

{

//Un buen exito en persuadir.

iOroCarisma = iOroCarisma + 150;

GiveGoldToCreature(GetPCSpeaker(), iOroCarisma);

}

else if(GetLocalInt(GetPCSpeaker(), "regnolan") == 2)

{

//Un exito normal en persuadir.

iOroCarisma = iOroCarisma + 60;

GiveGoldToCreature(GetPCSpeaker(), iOroCarisma);

}

else if(GetLocalInt(GetPCSpeaker(), "regnolan") == 3)

{

//Es Paladin, de modo que toma el oro justo para pagarse la comida.

GiveGoldToCreature(GetPCSpeaker(), 10);

GiveXPToCreature(GetPCSpeaker(), 40);

}

else //el pago normal

{

GiveGoldToCreature(GetPCSpeaker(), iOroCarisma);

}

//Dar un poco de XP

object oPC=GetLastSpeaker();

object oPartyMember = GetFirstFactionMember(oPC, TRUE);

int nNivelPJ = GetHitDice(oPartyMember);

while (GetIsObjectValid(oPartyMember) == TRUE)

{

//Reparto de XP.

//Comprobamos su inteligencia para dar bono/malus de xp.

int iEsaINT = GetAbilityModifier(ABILITY_INTELLIGENCE, oPartyMember);

//Comprobamos su sabidura para dar un bonus o malus de xp.

int iEsaSAB = GetAbilityModifier(ABILITY_WISDOM, oPartyMember);

//Se hace la media... de ambas bonus/malus.

int iBonoXP = ((iEsaINT + iEsaSAB) * 5 );

//Damos la xp segun nivel y bono/malus

int iTotal = 0;

 

if (nNivelPJ<=4)

{

//Antes comprobamos que no de xp negativa... que algunos...

iTotal = 200 + iBonoXP;

if (iTotal<0) { iTotal = 0;}

GiveXPToCreature(oPartyMember, iTotal);

}

else if ((nNivelPJ>=5) && (nNivelPJ<=8))

{

iTotal = 500 + iBonoXP;

if (iTotal<0) { iTotal = 0;}

GiveXPToCreature(oPartyMember, iTotal);

}

else if ((nNivelPJ>8) && (nNivelPJ<11))

{

iTotal = 650 + iBonoXP;

if (iTotal<0) { iTotal = 0;}

GiveXPToCreature(oPartyMember, iTotal);

}

else if (nNivelPJ>=11)

{

iTotal = 100 + iBonoXP;

if (iTotal<0) { iTotal = 0;}

GiveXPToCreature(oPartyMember, iTotal);

}

oPartyMember = GetNextFactionMember(oPartyMember, TRUE);

nNivelPJ = GetHitDice(oPartyMember);

} //fin while

 

//Añadir al diario

AddJournalQuestEntry("mis_1_nolan",2,oJugador);

SetLocalInt(oJugador,"mis_1_nolan",2);

}//fin del if de dar cobro de misión.

else

{

SendMessageToPC(oJugador, "DM: No habeis recibido recompensa porque hay jugadores en el grupo que completaron la quest anteriormente");

}//fin else de aviso DM.

}//fin del if principal que testea el objeto del inventario y activa la recompensa.

}//fin Cuerpo Principal.

 

 

Tercer bloque

 

Nolan - ¿Qué tal muchachos? Muchas gracias por solucionar el problema con el orco.

El texto aparece cuando, añado el script 3_tx_nolan_3

 

3_tx_nolan_3

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_nolan")==2))

return FALSE;

 

return TRUE;

}

 

 

Muchísimas gracias de nuevo

Un saludo



#5 AlthorDeMalavir

AlthorDeMalavir

    Neonato

  • Miembro
  • PipPip
  • 116 posts

Posteado 01 December 2018 - 09:42 AM

Creo que sería mejor que exportes la conversación a un archivo erf y la subas a algún lado para poderla descargar y verla en el Aurora porque así es un lio y poca ayuda vas a recibir.


Editado por AlthorDeMalavir, 01 December 2018 - 09:43 AM.

YourServerList.com Listado de servidores de Minecraft, Neverwinter Nights 1 y 2 y Terraria.


#6 Colwyn

Colwyn

    Humano

  • Miembro
  • Pip
  • 10 posts

Posteado 01 December 2018 - 01:53 PM

Hola de nuevo, he subido el área para que podáis revisar la conversación con el aurora.

Muchas gracias

 

https://www.dropbox....Posada.mod?dl=0



#7 Colwyn

Colwyn

    Humano

  • Miembro
  • Pip
  • 10 posts

Posteado 02 December 2018 - 07:19 PM

Hola, buenas tardes, he realizado la misión a través del asistente para tramas y funciona todo correctamente, el problema es que son muchos pasos y aunque es muy fácil de seguir es bastante lento, mi idea es poder reducir el tiempo haciendo directamente las conversaciones y el diario para luego agregarle los scripts con los que tengo problemas. No sé si los scripts creados por el asistente de tramas los podría utilizar para el ejemplo de conversación que no me funciona, he visto que son distintos.

 

El módulo que estoy diseñando es para varios jugadores y una cosa que también me interesaría es que las misiones se realizarán en grupo, por lo que las acciones del diario deberían de saltarle a todos los PJ cuando uno de ellos está aceptando la misión o finalizándola con el PNJ. Si en un futuro se vuelve al mismo módulo o zona y se habla con el PNJ que no de la misma misión otra vez, que se conserve en el diario de los PJ para así solo saludarles con la frase escrita para ello, esto no se si lo guardará si modifico el módulo para ampliar zonas, no se si este se reiniciará al tener datos nuevos y cargar una partida nueva con los mismos PJ. Tampoco sé si los PX que da el PNJ tras finalizar la misión van para el PJ que está hablando con el o para todos los PJs por igual o repartidos, en el asistente no me ha parecido ver nada que lo indique. Tampoco he podido realizar pruebas aún con los jugadores para ver si es así en multijugador, por ahora solo estoy diseñando el módulo, las pruebas solo las he realizado con un personaje de pruebas para ver que las modificaciones funcionan.

 

Por favor, ¿podríais aclararme estas dudas?

Muchísimas gracias

Un saludo



#8 Cayaloq

Cayaloq

    Humano

  • Miembro
  • Pip
  • 52 posts

Posteado 04 December 2018 - 08:52 AM

Buenas, lo primero de todo te recomiendo el tutorial de setaka y lavafuego de este mismo foro.

 

Te digo como lo hago yo:

 

Primero creas un área llamada area DM (el nombre en realidad da igual), en ella creas un ubicado( el que tu quieras) con tag y resref misiones( el nombre también da igual).

 

Luego yo uso estos scripts. ( ponle un nombre que te sea fácil identificarlos y encontrarlos)

 

En alguno se me ha movido las lineas. Es importante llevarlas ordenadas, quizá no en este script tan pequeño pero para tener la costumbre para no equivocarse en los grandes.

 

 

// a este lo llamo 1_cy_variables0    (1_cy_variables1 )
 
int StartingConditional()
{
     // Inspeccionar las variables locales
         object oVariables = GetObjectByTag("misiones");  // el objeto que creaste
         string sTag = GetTag(OBJECT_SELF);// el tag del que habla
         string sVariables = "m"+sTag;// m mas el tag
    if(!(GetLocalInt(oVariables, sVariables) == 0))// aqui pones el número que necesites 1,2,3 etc)
        return FALSE;
    return TRUE;
}
// a este lo llamo 1_cy_var_mas1 si fuera mas2 1_cy_var_mas2 etc
 void main()
 { // Establecer las variables y sumar 1 
object oVariables = GetObjectByTag("misiones");// defino el objeto variable, se tiene que llamar como el ubicado que se creo 
string sTag = GetTag(OBJECT_SELF); // obtengo el tag del que habla 
string sVariables = "m"+sTag; // le añado una m (no me gusta tener tener nombres repetidos) 
int iN = GetLocalInt(oVariables, sVariables); // lo convertimos en numero 
SetLocalInt(oVariables,sVariables,iN+1);// le sumamos 1 ( o 2 o 3 o lo que se necesite) simplemente con cambiar el 1 por un 2,3 etc }

 

 

Ahora creas el personaje que da la quest  y el orco . Te pongo la conversación resumida para que pueda ponerlo todo en "formato tabla"

 

 

 

Conversación                                                                    El texto aparece cuando                                                            Acciones emprendidas

 

 

Oye mata al orco                                                               1_cy_variables0

   

     si                                                                                                                                                                                      1_cy_var_mas2

     no                                                                                                                                                                                     1_cy_var_mas1

 

por favor reconsideralo, mata al orco                                1_cy_variables1 

   

      si                                                                                                                                                                                      1_cy_var_mas1                                                                         

     no

 

¿has matado al orco?                                                        1_cy_variables2

 

     si                                                                                    si tiene la espada                                                                    1_cy_var_mas1

     no

     si (mentir)                                                                       que tenga una espada falsa?                                                  1_cy_var_mas2

 

 

Gracias por todo                                                                 1_cy_variables3  

 

         De nada

 

Me has engañado el orco sigue vivo                                  1_cy_variables4

       

jajajaja

 

 

 

 

Lo bueno que tiene este sistema, es que te sirve el mismo script para todas las quest que hagas ( simplemente tienes que tener tags distintos en los que dan la quest) SI es una quest muy compleja, te puede interesar hacer uno distinto.

 

Si tienes alguna duda pregunta.

 

PD :  Yo también suelo poner variable al que muere, en el evento OnDeath de la criatura ( en vez de que tenga que entregar la espado u otro objeto)

 

Sería añadirle este sript

 

void main()
{
object oKiller = GetLastKiller();
 object Ovariables = GetObjectByTag("misiones");

SetLocalInt(Ovariables, "orco", 1);
AddJournalQuestEntry("mis_1_nolan", 2,oKiller );
} 

Editado por Cayaloq, 04 December 2018 - 06:46 PM.


#9 Zoraga

Zoraga

    Neonato

  • Miembro
  • PipPip
  • 213 posts

Posteado 04 December 2018 - 08:54 AM

Son bastantes condicionales, eso puede enredar un poco la cosa (yo me enredé XD), al menos para empezar. Lo del arma, te recomiendo que sea un objeto miscelaneo en lugar de un arma como tal, ya que si la tiene en la mano es mas complicado que se la de al npc de forma automática, lo otro, es mas confiable hacer las misiones de forma individual, al menos en multijugador si aplicas el avance a toda la party incluirá incluso a los personajes que no estan haciendo la misión solo por estar en la party, y eso puede beneficiar o perjudicarlos según sea el caso.

 

Bueno, vamos por parte, voy mirando las conversaciones, y te podría decir que, lo primero es que no avanza al segundo bloque, que sería cuando tienes la misión en marcha, ¿no?.

 

Aquí falta un script para pasar a ese segundo bloque, osea, que deberia activarse cuando en la conversación aceptas la misión. Aquí agrega un script en la parte de la conversación donde el personaje dice: "aceptamos", y en la pestaña de "acciones emprendidas", coloca uno de estos script que pongo aquí abajo (individual o grupo):

 

 

Para jugador individual:

 

void main()
{

object oPC = GetPCSpeaker();

SetLocalInt(oPC, "mis_1_nolan", 1); //te pide esta condicional para que aparezca el segundo bloque en la conversacion

AddJournalQuestEntry("mis_1_nolan", 1, oPC, FALSE, FALSE); //esta condicional es para agregar al diario

}
 

 

Para un grupo:

 

void main()
{

object oPC = GetPCSpeaker();

 

SetLocalInt(oPC, "mis_1_nolan", 1); //te pide esta condicional para que aparezca el segundo bloque en la conversacion


AddJournalQuestEntry("mis_1_nolan", 1, oPC, TRUE, FALSE); //esta condicional es para agregar al diario

}
 

 

Para seguir avanzando en la misión, intenta agregar una condicional similar a la que puse arriba, por ejemplo: 

 

SetLocalInt(oPC, "mis_1_nolan", 1);

SetLocalInt(oPC, "mis_1_nolan", 2);

SetLocalInt(oPC, "mis_1_nolan", 3);

 

En el script de txibi te pide esas condicionales en cada conversación, según el número, lo mismo para el journal entry, cambiando el 1 por el 2 y así sucesivamente, para llamarlas debes añadirlas primero en "acciones emprendidas" de la conversación anterior, para que en la conversación siguiente te salga el número de condicional que te pide el script de txibi.

 

Haz eso por mientras, después vemos lo que sigue, (entregar el arma, la exp, etc.).


Colaborando en:



Nombre servidor: ES) Rebelión del Submundo
Tipo de servidor: rol/acción/jvj
Jugadores: 1-25
Niveles: 1-30
Base literaria: Reinos Olvidados
IP (conectar directamente): sombrasdefaerun.no-ip.org
Foro: http://usn-rol.foroes.org/



 


#10 Colwyn

Colwyn

    Humano

  • Miembro
  • Pip
  • 10 posts

Posteado 05 December 2018 - 12:33 AM

Hola, buenas tardes, muchísimas gracias por la ayuda Zoraga, Cayaloq, Txibi y AlthordeMalavir, ya funciona la conversación perfectamente, os comento el orden para ver si le he cogido el tranquillo, de paso lo dejo explicado de forma que le sirva de ejemplo al próximo que tenga dudas como yo je je je.

 

Diario con tres entradas, Id1, Id 2 e Id3, a la Id3 le he marcado terminar categoría para que al saltar en el diario la pase a misión completada.

 

Nombre: Bandido orco

Etiqueta: mis_1_nolan

Prioridad: intermedio

PX: 0

 

1ª Pregunta del PNJ

Hola muchachos, veo que vais bien equipados, ¿os interesaría participar en una aventura?, hay un bandido orco cerca del pueblo que está causando problemas en las granjas, necesito que os ocupéis de el, en su última fechoría robó un collar de oro.

 

Aquí en "el texto aparece" inserto este script, hasta que no se acepte la misión la variable siempre será 0 y el PNJ la tendrá siempre como primera pregunta.

 

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_nolan")<1))

return FALSE;

return TRUE;

}

 

Respuesta del PJ

De acuerdo, aceptamos. Fin diálogo

Aquí en "acciones emprendidas" inserto este script para hacer avanzar la variable a 1 y añadir al diario el Id 1 de la misión.

 

void main()

{

object oPC = GetPCSpeaker();

SetLocalInt(oPC, "mis_1_nolan", 1);

AddJournalQuestEntry("mis_1_nolan", 1, oPC, TRUE, FALSE);

}

 

Respuesta del PJ

No, en otra ocasión, vamos a tomar algo y a descansar. Fin diálogo

Sin ningún script,si pulso en esta respuesta al no modificar la variable la próxima vez que hable con el PNJ dirá la 1ª pregunta.

 

2ª Pregunta

 

Hola muchachos, ¿ha ido todo bien? ¿tenéis el collar de oro?

Aquí en "el texto aparece" inserto este script que comprueba si la variable es 1, como antes ya la he modificado, ahora ya me muestra la 2ª pregunta, por fin,ya he podido avanzar en la conversación je je.

 

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_nolan")==1))

return FALSE;

return TRUE;

}

 

Respuesta del PJ

Si, aquí tienes el collar de oro.

Aquí en "el texto aparece" inserto un script para comprobar si el PJ tiene el collar.

 

#include "nw_i0_tool"

int StartingConditional()

{

if(!CheckPartyForItem(GetPCSpeaker(),"mis_1_collar"))

return FALSE;

return TRUE;

}

 

Y en "acciones emprendidas" vuelvo a modificar la variable subiéndola a 2.

 

void main()

{

object oPC = GetPCSpeaker();

SetLocalInt(oPC, "mis_1_nolan", 2);

}

 

Respuesta del PJ

No, aún no.

Si aún no he conseguido el collar, al volver al PNJ solo muestra esta respuesta a la 2ª pregunta.

 

3ª pregunta/fin de misión/recompensa del PNJ

¡Perfecto! Muchísimas gracias.

En "el texto aparece" inserto el script para comprobar si la variable es 2

 

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_nolan")==2))

return FALSE;

return TRUE;

}

 

Y en "acciones emprendidas", aquí he tirado del wizard para hacerla más corta de la que tenía del tutorial de Txibi, he indicado que también es para grupo, me ha salido este script, comprueba que el PJ tiene el collar, se lo quita y da oro y px al grupo, luego añade la ID 3 al diario de fin de misión e incrementa la variable a 3.

 

#include "nw_i0_tool"

int StartingConditional()

{

if(!CheckPartyForItem(GetPCSpeaker(),"mis_1_collar"))

return FALSE;

return TRUE;

}

void main()

{

// Dar un poco de oro al que habla

RewardPartyGP(100, GetPCSpeaker());

// Dar algunos PX al que habla

RewardPartyXP(5000, GetPCSpeaker());

// Eliminar objetos del inventario del jugador.

object oItemToTake;

oItemToTake = GetItemPossessedBy(GetPCSpeaker(), "mis_1_collar");

if(GetIsObjectValid(oItemToTake) != 0)

DestroyObject(oItemToTake);

// Establecer las variables

object oPC = GetPCSpeaker();

SetLocalInt(oPC, "mis_1_nolan", 3);

AddJournalQuestEntry("mis_1_nolan", 3, oPC, TRUE, FALSE);

}


 

Al finalizar la misión el PNJ nos saludará con un texto emergente sobre su cabeza si volvemos a clicarle.

 

¿Qué tal muchachos? Muchas gracias por solucionar el problema con el orco.

 

Aquí he insertado el siguiente script en "el texto aparece"

 

int StartingConditional()

{

if(!(GetLocalInt(GetPCSpeaker(),"mis_1_nolan")==3))

return FALSE;

return TRUE;

}

 

En la pestaña de guiones del orco, en la opción Ondeath he insertado este script para que salte la ID 2 del diario, en su inventario lleva el collar con etiqueta mis_1_collar que lo podemos saquear de su cadáver, Cayaloq aquí no se si la frase donde aparece "misiones" se podría quitar.

 

void main()

{

object oKiller = GetLastKiller();

object Ovariables = GetObjectByTag("misiones");

SetLocalInt(Ovariables, "trasgo", 1);

AddJournalQuestEntry("mis_1_nolan", 2,oKiller );

}


Ahora la duda que me queda es si al entrar en el módulo mas de 1 PJ e ir solo uno a hablar con el PNJ, ¿se irá actualizando el diario a todos los PJ? y al finalizar la misión el PJ que lleve el collar ¿también dará el mismo oro y px marcados en el script de misión finalizada a todos los PJ?

 

La idea que tengo es ir haciendo varios módulos como si de partidas de rol de toda la vida se tratara, juntarnos varios colegas que vivimos lejos unos de otros y acceder a la partida por red, o probar a hacerla también como DM, de esta ultima forma no se como sería. También si al acabar el módulo si le agrego más áreas para hacer más misiones, si al volver a cargarlo mantendrá las misiones realizadas en los diarios de los PJ y los PNJ no las volverán a dar.

 

Cayaloq no entiendo muy bien lo que has comentado de poner un ubicado en un área sola para el, serias tan amable de comentar para que sirve esa opción y como funciona ese sistema, parece más complejo que el que he usado.

 

Muchísimas gracias de nuevo

Un abrazo


Editado por Colwyn, 05 December 2018 - 12:54 AM.


#11 Cayaloq

Cayaloq

    Humano

  • Miembro
  • Pip
  • 52 posts

Posteado 05 December 2018 - 12:08 PM

Hola,  según mi experiencia con lo que tú has puesto, te funciona jugando solo. Si juegas multijugador, con varias personas, hablas con Nolan, matas al orco, cobras la quest, guardas la partida, sales de juego y vuelves a cargar, te vuelve a encargar la misión.

 

El tema es que tú usas unas variables para saber que frase debe decir, esas variables hay que guardarlas en algún lugar, con ese sistema la guardas en el jugador y por lo que sea, cuando vuelves a cargar se reinicia esa variable (vuelve a 0).

 

Te pongo enlance a un tema donde se discutio eso

 

http://www.clandlan....iables-objetos/

 

 

Como verás a mi me paso lo mismo, guardaba las variables, lo probaba y me funcionaba perfectamente. Luego el día que jugué con un amigo tuvimos algunos problemas con ese tema. A veces finciona a veces no. Con mi sistema funciona bien siempre.

 

En el de matar al trasgo si no creas el ubicado que te digo debes ponerlo así:

 

void main()

{

object oKiller = GetLastKiller();    // El que mata al trasgo, 

SetLocalInt(oKiller, "trasgo", 1);  // ponemos la variable en 1, esto solo sirve para que te de la opción de ya lo mate en la conversación, si sale la conversación si tienes el collar, pues realmente no hace falta.

AddJournalQuestEntry("mis_1_nolan", 2,oKiller );  // Añadimos al diario

}

 

 

 

SI van en grupo se añade al diario de todos, sino no.

Los scripts los he hecho sin el aurora, por lo que pueden llevar algún error.


Editado por Cayaloq, 05 December 2018 - 12:10 PM.


#12 lavafuego

lavafuego

    Ancillae

  • Miembro
  • PipPipPip
  • 397 posts

Posteado 06 December 2018 - 09:23 PM

para grupos haces un while, me explico, imaginemos que hay un pj que tiene la mision en variable 2 (terminada para mi ejemplo), otro iniciada (variable de la mision en 1) y otro no iniciada (sin variable):

 

void main()
{
    
 
 object oPC= GetLastSpeaker();//pj que esta en la conversacion
 
object Miembro=GetFirstFactionMember(oPC);
    while(GetIsObjectValid(Miembro))
       {
 
        if (GetLocalInt(Miembro,"VARIABLE_DE_LA_MISION")==0)//si no ha iniciado mision variable y diario poner a 1
         {
          SetLocalInt(Miembro,"VARIABLE_DE_LA_MISION", 1);
          AddJournalQuestEntry( "VARIABLE_DE_LA_MISION", 1, Miembro);
          Miembro = GetNextFactionMember(oPC);
         }
       else if(GetLocalInt(Miembro,"VARIABLE_DE_LA_MISION")==1)//si tiene la variable en uno mensaje al pj de que ya esta iniciada
         {
          SendMessageToPC(Miembro, "ya iniciaste esta mision");
          Miembro = GetNextFactionMember(oPC);
         }
 
         else if(GetLocalInt(Miembro,"VARIABLE_DE_LA_MISION")==2)//si tiene la variable en 2 mensaje al pj de misión terminada
         {
          SendMessageToPC(Miembro, "ya realizaste esta mision");
          Miembro = GetNextFactionMember(oPC);
         }
 
 
 
 
        }
 
 
}//fin Cuerpo principal.

http://tierrasdenemar.mi-foro.es/  (abierto para test 79.109.30.79:5121 )


#13 Colwyn

Colwyn

    Humano

  • Miembro
  • Pip
  • 10 posts

Posteado 08 December 2018 - 12:35 AM

Hola, muy buenas tardes, muchísimas gracias por vuestra ayuda, os lo agradezco de todo corazón, he realizado otra conversación con el método de Cayaloq, funciona correctamente pero me gustaría perfilar algunas cosas, si pensáis que aún me queda algún comodín y no me mandáis a freír espárragos por pesado je je je, agradecería muchísimo vuestra ayuda.

 

He creado un área pequeña llamada "Área de misiones", en ella he creado un cofre y le he puesto de nombre/etiqueta/ResRef del diseño "cofre_misiones"

 

He utilizado el mismo diario de misión con las 3 Id del ejemplo anterior.

Conversación y scripts

 

P - ¿Puedes matar al orco y recuperar el collar robado?

 

El texto aparece cuando --- script variables_0

int StartingConditional()
{
object oVariables = GetObjectByTag("cofre_misiones"); 
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
if(!(GetLocalInt(oVariables, sVariables) == 0))
return FALSE;
return TRUE;
}
 
R - Si
 
Acciones emprendidas --- script suma_variables_2 y otras acciones Diario 1
void main()
object oVariables = GetObjectByTag("cofre_misiones");
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
int iN = GetLocalInt(oVariables, sVariables);
SetLocalInt(oVariables,sVariables,iN+2);
}

 

R - No

 

Acciones emprendidas --- script suma_variables_1

void main()
object oVariables = GetObjectByTag("cofre_misiones");
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
int iN = GetLocalInt(oVariables, sVariables);
SetLocalInt(oVariables,sVariables,iN+1);
}

 

P - Por favor reconsidéralo, recupera el collar.

 

El texto aparece cuando --- script variables_1

 

int StartingConditional()
{
object oVariables = GetObjectByTag("cofre_misiones"); 
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
if(!(GetLocalInt(oVariables, sVariables) == 1))
return FALSE;
return TRUE;
}
 
R - Si
 

Acciones emprendidas --- script suma_variables_1 y otras acciones Diario 1

void main()
object oVariables = GetObjectByTag("cofre_misiones");
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
int iN = GetLocalInt(oVariables, sVariables);
SetLocalInt(oVariables,sVariables,iN+1);
}

 

R - No

 

P - ¿Has matado al orco? ¿has recuperado el collar?

 

El texto aparece cuando --- script variables_2

int StartingConditional()
{
object oVariables = GetObjectByTag("cofre_misiones"); 
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
if(!(GetLocalInt(oVariables, sVariables) == 2))
return FALSE;
return TRUE;
}
 
R - Si
 
El texto aparece cuando --- script objeto_mision
 
#include "nw_i0_tool"
int StartingConditional()
{
if(!CheckPartyForItem(GetPCSpeaker(),"mis_1_collar"))
return FALSE;
return TRUE;
}
 

Acciones emprendidas --- script suma_variables_1

void main()
object oVariables = GetObjectByTag("cofre_misiones");
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
int iN = GetLocalInt(oVariables, sVariables);
SetLocalInt(oVariables,sVariables,iN+1);
}
 
R - No
 
Fin misión- Aquí está tu recompensa
Acciones emprendidas --- script recompensa
 

#include "nw_i0_tool"

int StartingConditional()

{

if(!CheckPartyForItem(GetPCSpeaker(),"mis_1_collar"))

return FALSE;

return TRUE;

}

void main()

{

// Dar un poco de oro al que habla

RewardPartyGP(100, GetPCSpeaker());

// Dar algunos PX al que habla

RewardPartyXP(5000, GetPCSpeaker());

// Eliminar objetos del inventario del jugador.

object oItemToTake;

oItemToTake = GetItemPossessedBy(GetPCSpeaker(), "mis_1_collar");

if(GetIsObjectValid(oItemToTake) != 0)

DestroyObject(oItemToTake);

// Establecer las variables

object oPC = GetPCSpeaker();

SetLocalInt(oPC, "mis_1_nolan", 3);

AddJournalQuestEntry("mis_1_nolan", 3, oPC, TRUE, FALSE);

}

 
Saludo . Gracias
 

El texto aparece cuando --- script variables_3

int StartingConditional()
{
object oVariables = GetObjectByTag("cofre_misiones"); 
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
if(!(GetLocalInt(oVariables, sVariables) == 3))
return FALSE;
return TRUE;
}
 
El Orco lleva el collar con etiqueta mis_1_collar e insertado este script en Ondeath
 
void main()
{
object oKiller = GetLastKiller();
 object Ovariables = GetObjectByTag("cofre_misiones");
 
SetLocalInt(Ovariables, "orco", 1);
AddJournalQuestEntry("mis_1_nolan", 2,oKiller );
}
 

Me gustaría que se insertara la nota 1 al diario de todos los PJ por el script al aceptar la misión en las dos respuestas de si y no a través del uso de "otras acciones",

AddJournalQuestEntry("mis_1_nolan", 1, oPC, TRUE, FALSE); he intentado insertarla pero da errores, no se si se perderían las notas del diario en este método al insertarlas a través de "otras acciones", de esta manera si me funciona bien lo del ubicado en el área extra se guardarían todas las variables y lo del diario, tampoco sé como comprobar si las está guardando, compruebo que funciona el módulo, guardo la partida y vuelvo a entrar y todo está correcto, permanece la misión finalizada, pero como solo entro como único PJ no sé si lo hace bien o donde puedo ver esas variables guardadas en el "cofre_misiones", lo he editado en la opción de variables pero no hay ninguna nota.

 
La idea que tengo es en base a un módulo con una o varias misiones tras jugarlo con 4-5 amigos, ir editándolo para hacerlo más grande con más misiones y nuevas áreas, algo así como un mundo persistente pero en miniatura para jugar unas cuantas veces por internet con los amigos, la duda es si tras guardar la partida si vuelvo a editar el módulo para añadir más cosas al ir a jugar otra vez cargándola de nuevo si se irá al traste todo o se podrá jugar.
 
Siempre podría hacer módulo tras módulo y jugarlos independientes unos de otros, pero si se logra juntar todas las zonas con sus misiones estaría mucho mejor.
 
Estoy haciendo el módulo con el aurora en castellano del NWN antiguo, original con los 3 cd más las expansiones, ahora nos hemos comprado la EE por steam para jugar las partidas, ¿como se crearía la partida a través del lanzador multijugador en el juego de steam?, aún no lo he probado en grupo.

 

Se que ya estoy siendo pesadete y me vais a mandar a tomar viento, pero si me ayudáis con estas dudas ya podría darle un buen avance al módulo al tener una base de scripts funcionales que con ellos ya haría bastante faena, tendría el tema de las conversaciones cerrado, conversaciones cortas sin opciones de testeo de carisma, inteligencia, etc..., pero me apaño de esa forma, en tal de que funcionen me doy por satisfecho, el resto de cosas ya vendrán con el tiempo revisando tutoriales.

 

Lavafuego la idea es que las partidas las jugaremos siempre los 4-5 amigos en grupo, como una partida de rol todos juntos, no debería de ir nadie por libre, lo del while de comprobación no se si sería necesario, pero si lo necesitara ¿donde se insertaría esa comprobación?

 

Muchísimas gracias por vuestra ayuda.

Un saludo


Editado por Colwyn, 08 December 2018 - 01:42 AM.


#14 Cayaloq

Cayaloq

    Humano

  • Miembro
  • Pip
  • 52 posts

Posteado 08 December 2018 - 11:28 AM

Buenas, yo te veo un fallo, compruebas que el collar lo tiene alguno del grupo pero se lo quitas al que habla. Si el collar lo tiene otro, no se lo quitaría.

 

Yo siempre lo pongo en la pestaña "otras acciones" y nunca he tenido problema. 

 

De todos modos pon el script completo para ver cual sería el error.

 

 

Yo cuando empecé también pregunté un montón de cosas, es la manera de aprender.


Editado por Cayaloq, 08 December 2018 - 11:28 AM.


#15 Colwyn

Colwyn

    Humano

  • Miembro
  • Pip
  • 10 posts

Posteado 08 December 2018 - 05:44 PM

Hola, buenas tardes, muchas gracias por la ayuda, este es el script en el que me gustaría añadir la opción de insertar al diario el ID 1 a todos los PJ.

AddJournalQuestEntry("mis_1_nolan", 1, oPC, TRUE, FALSE);

 

 

Acciones emprendidas --- script suma_variables_1 y otras acciones Diario 1

void main()
object oVariables = GetObjectByTag("cofre_misiones");
string sTag = GetTag(OBJECT_SELF);
string sVariables = "m"+sTag;
int iN = GetLocalInt(oVariables, sVariables);
SetLocalInt(oVariables,sVariables,iN+1);
}
 

 

En el script de recompensa ¿como podría hacer que se eliminara el objeto de misión al PJ que lo lleve si el PJ que habla con el PNJ no es quien lo lleva?

 

#include "nw_i0_tool"

int StartingConditional()

{

if(!CheckPartyForItem(GetPCSpeaker(),"mis_1_collar"))

return FALSE;

return TRUE;

}

void main()

{

// Dar un poco de oro al que habla

RewardPartyGP(100, GetPCSpeaker());

// Dar algunos PX al que habla

RewardPartyXP(5000, GetPCSpeaker());

// Eliminar objetos del inventario del jugador.

object oItemToTake;

oItemToTake = GetItemPossessedBy(GetPCSpeaker(), "mis_1_collar");

if(GetIsObjectValid(oItemToTake) != 0)

DestroyObject(oItemToTake);

// Establecer las variables

object oPC = GetPCSpeaker();

SetLocalInt(oPC, "mis_1_nolan", 3);

AddJournalQuestEntry("mis_1_nolan", 3, oPC, TRUE, FALSE);

}

 
 
Cayaloq ¿como podría comprobar que se guardan las variables en el ubicado?
 
¿Como se configura la partida en el multijugador para lanzarla y que se unan los jugadores?
 
Tras jugarla y salvarla si edito de nuevo el módulo ¿permanecerán las variables guardadas en el ubicado?
 
Muchísimas gracias
Un saludo




Responder



  


A Bragol. Tus amigos te echan de menos.