Neverwinter Nights, modding - scripts - manuales, todo sobre el NWN
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.


Pulse Control+D para no olvidar este enlace.
 
Pagina principalÍndicePortalÚltimas imágenesBuscarRegistrarseConectarsePagina principal

 

 Ayuda porfavor T_T

Ir abajo 
3 participantes
AutorMensaje
Shamira 92
Novat@
Novat@



Femenino
Edad : 32
Puntos de Actividad : 5100

Cantidad de envíos : 6
Fecha de inscripción : 09/02/2011

Nº. de Miembro : 131
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeMiér 09 Feb 2011, 8:59 pm

Hola, soy Vero y estoy muy liada con los Scripts Os he estado leyendo durante mucho tiempo, y posteo esto porque necesito gran ayuda en el tema de scripts. Siempre he intetado ir paso a paso con los vuestros, pero ninguno me ha ido y no tengo ni idea porque. Posteo pero la verdad es que no se si me contestareis ya que veo que los mensajes son bastantes "antiguos". No me va el PnjT de la entrada, no me envia a ningun lado no se porque, tampoco he podido lograr el script de muerte y rresureción, perdiendo XP y dinero. Para ser sincera solo he logrado el de sentarse en la silla . Espero que haya gente que aun ande por este foro que me pueda ayudar.


Muchas gracias.
Volver arriba Ir abajo
Gonar
Patos@
Patos@



Masculino
Edad : 47
Puntos de Actividad : 5197

Cantidad de envíos : 19
Fecha de inscripción : 10/02/2011

Nº. de Miembro : 132
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeJue 10 Feb 2011, 12:11 am

Hola yo soy nuevo en estos foros (Los he descubierto hoy), pero de scripting nwn se bastante.
El tema es que he visto por encima los scripts de los foros y veo muchas cosillas para arreglar, no me refiero a que funcionen o no, si no que se deben depurar o no hace falta desarrollarlas por que bioware ya tiene un sistema similar metido.
Pero en fin, yo te echo una mano si quieres, vamos a hacer una cosa, comentame uno de los scripts. Te pongo la solución a tu problema y cuando ese lo tengas claro y funcional, me pones otro. Y asi sucesivamente.
¿Ok?
Pues empieza por el primero que quieras solucionar.
Volver arriba Ir abajo
Shamira 92
Novat@
Novat@



Femenino
Edad : 32
Puntos de Actividad : 5100

Cantidad de envíos : 6
Fecha de inscripción : 09/02/2011

Nº. de Miembro : 131
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeJue 10 Feb 2011, 7:24 pm

Hola!! muchas gracias de verdad!! ^^!!! Este es el script de muerte que exactamente no se donde ponerlo en el modulo, y no se si se tiene que cambiar algo mas para que funcione. Segun lo que me han dicho tengo que mirar en las propiedades del modulo y he estado intentando averiguarlo por mi cuenta, pero no acabo de sacarlo. Gracias de nuevo ^^. Es este:

//SUBPROGRAMA AplicaPenalizador.
void AplicaPenalizador(object oMuerto)
{
int iXP = GetXP(oMuerto);
//200 es el penalizador en experiencia por cada nivel del muerto.
int iPenalizador = 20 * GetHitDice(oMuerto);
int iNivel = GetHitDice(oMuerto);
// Tu no puedes perder un nivel de esta forma.
int nMin = ((iNivel * (iNivel - 1)) / 2) * 1000;
int iNuevaXP = iXP - iPenalizador;
if (iNuevaXP < nMin)
iNuevaXP = nMin;
SetXP(oMuerto, iNuevaXP);
http://0.50 es el % de oro perdido, 50% significa que perdera la mitad de su oro.
int nGoldToTake = FloatToInt(0.05 * GetGold(oMuerto));
AssignCommand(oMuerto, TakeGoldFromCreature(nGoldToTake, oMuerto, TRUE));
//Las lineas habituales del juego indicando que mueres, pierdes tanta xp, etc...
DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oMuerto, FALSE));
DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oMuerto, FALSE));
}//Fin Subprograma AplicaPenalizador.

void main()
{

object oPC = GetPCSpeaker();

object oTarget;
location lTarget;
oTarget = GetWaypointByTag("X0_REGENERAR");

lTarget = GetLocation(oTarget);

if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
AplicaPenalizador(oPC);//Aqui haces la llamada al subprograma.
}


Si prefieres que te deje mi msn para hablar mejor, mas comodo o rapido, dimelo que te doy mi msn. Graciass!!!!! Smile
Volver arriba Ir abajo
Gonar
Patos@
Patos@



Masculino
Edad : 47
Puntos de Actividad : 5197

Cantidad de envíos : 19
Fecha de inscripción : 10/02/2011

Nº. de Miembro : 132
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeJue 10 Feb 2011, 10:58 pm

Ok, lo primero. Siempre que quieras modificar los scripts de algo, deberas de sacar sus propiedades y buscar la pestaña de guiones.
En el caso del modulo, es distinto, no puedes hacer boton derecho y propiedades, por lo cual te adjunto debajo de este parrafo un vinculo para que veas los 3 pasos a seguir para ver los eventos del modulo. Concretamente ahora hablamos del evento OnDeath, que es Cuando Muere.
Ayuda porfavor T_T Pasoso.th

Ahora pasemos al script, te lo he revisado y depurado. Siempre que puedas usa una linea mejor que dos, si una funcion no vas a volver a usarla no declares una variable para ella, por ejemplo tu tienes:

Código:
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("X0_REGENERAR");
lTarget = GetLocation(oTarget);

cuando seria mejor:

Código:
location lTarget = GetLocation(GetNearestObjectByTag("X0_REGENERAR"));

Ten en cuenta que oTarget no vas a usarlo en el resto del script, y cuando declaras la variabla en este caso es un punto que sabes de antemano, asi que definela ya, no en una linea aparte.

Si te fijas podras ver comparando los cambios que he realizado para mejorarlo todo.

Código:
// Funcion de penalizador al Pj que muere.
void AplicaPenalizador(object oMuerto)
{
    // Recogemos los puntos de experiencia actuales del Pj.
    int iXP = GetXP(oMuerto);
    // Calculamos la penalizacin, teneiendo en cuenta que sera
    // de 200 puntos por nivel que tenga.
    int iNivel = GetHitDice(oMuerto);
    int iPenalizador = 20 * iNivel;
    // Calculamos la experiencia minima que ha de tener para
    // que no pierda nivel debido a la penalizacion.
    int nMin = ((iNivel * (iNivel - 1)) / 2) * 1000;
    int iNuevaXP = iXP - iPenalizador;
    if(iNuevaXP < nMin)
        iNuevaXP = nMin;
    // Asignamos ya la experiencia que ha de tener el personaje
    // despues de morir.
    SetXP(oMuerto, iNuevaXP);
    // Calculamos el oro que perdera, un 5% del total poseido.
    int nGoldToTake = (GetGold(oMuerto) * 5) / 100;
    // Le quitamos el oro al personaje.
    TakeGoldFromCreature(nGoldToTake, oMuerto, TRUE);
    // Hacemos que encima del muerto, aparezca texto flotante
    // en el cual le indicaremos la perdida de experiencia y
    // la perdida de oro.
    DelayCommand(3.0, FloatingTextStrRefOnCreature(58299, oMuerto, FALSE));
    DelayCommand(5.0, FloatingTextStrRefOnCreature(58300, oMuerto, FALSE));
}
void main()
{
    // Definimos los actores que van a participar.
    object oPC = GetLastPlayerDied();
    // Le aplicamos las penalizaciones de la nueva funcion que hemos
    // desarrollado antes.
    AplicaPenalizador(oPC);
    // Definimos donde va resucitar, ten en cuenta que deberias
    // de tener en el modulo, un Waypoint con este tag X0_REGENERAR
    // o el pj, regenerara en el mismo sitio que murio.
    // Si pones varios X0_REGENERAR, aparecera en el mas cercano
    // a la zona donde murio.
    location lTarget = GetLocation(GetNearestObjectByTag("X0_REGENERAR"));
    // Limpiamos las acciones del muerto, por si acaso.
    AssignCommand(oPC, ClearAllActions());
    // Le enviamos a donde ha de resucitar.
    AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

Esto resuelto, otra duda??

PD: Lo que no entiendo es por que usaste como object oPC =GetPCSpeaker(); esto define al personaje como el que habla, no como el que muere ...
Volver arriba Ir abajo
Shamira 92
Novat@
Novat@



Femenino
Edad : 32
Puntos de Actividad : 5100

Cantidad de envíos : 6
Fecha de inscripción : 09/02/2011

Nº. de Miembro : 131
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeDom 06 Mar 2011, 2:48 pm

Holaa!! Sii!!! Ya me va!! pero... me da una cosa erronea.

El script me da 0 errores, y lo pongo en el guion de "PlayerLevelUp" pero que no me va los bloqueos de Lvls.

#include "nw_i0_tool"

void main()
{
object oPC = GetPCLevellingUp();
int px;
if (GetHitDice(oPC) == 11)
{
if (HasItem(oPC, "PiedraGuia") == FALSE)
{
SendMessageToPC(GetLastSpeaker(),"Aun no puedes subir de nivel.");
px = GetXP(oPC);
SetXP(oPC,px-(px-45000));
DelayCommand(0.5,GiveXPToCreature(oPC,px-45000));
}
}
else if (GetHitDice(oPC)== 15)
{
if (HasItem(oPC, "PiedraDelCamino") == FALSE)
{
SendMessageToPC(GetLastSpeaker(),"Aun no puedes subir de nivel.");
px = GetXP(oPC);
SetXP(oPC,px-(px-120000));
DelayCommand(0.5,GiveXPToCreature(oPC,px-120000));
}
}
else if (GetHitDice(oPC)== 20)
{
if (HasItem(oPC, "otro de los objetos para desbloquear") == FALSE)
{
SendMessageToPC(GetLastSpeaker(),"Aun no puedes subir de nivel.");
px = GetXP(oPC);
SetXP(oPC,px-(px-210000));
DelayCommand(0.5,GiveXPToCreature(oPC,px-210000));
}
}
}



Tengo los bloqueos de Lvls en El Lvl 10 ,15 y 20.


PD: Muchas graciass!!!
Volver arriba Ir abajo
Lay Phoenix
Novat@
Novat@



Masculino
Edad : 36
Puntos de Actividad : 5104

Cantidad de envíos : 7
Fecha de inscripción : 28/01/2011

Nº. de Miembro : 129
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeMar 08 Mar 2011, 4:24 pm

El Script que pides se puede hacer de muchas maneras, necesitando objetos para el desbloqueo, sin necesidad de objetos (usando el LocalX, por ejemplo..) que se guarde la PX que sobra, que se pierda... Aquí tienes un Script de mi cosecha, testeado ya. Espero que te sirva. Las cosas en rojo es donde debes introducir el nombre de la etiqueta del objeto que darás a un Jugador para desbloquearle.

void main()

{//A)

object oPC;
oPC = GetPCLevellingUp();

int nLvl;
nLvl = GetHitDice(oPC);

int nXP;
nXP = GetXP(oPC);

if(nLvl == 10)

{//B)

if(GetItemPossessedBy(oPC, "etiqueta_objeto") != OBJECT_INVALID)

{//E)

}//E)

else

if(GetItemPossessedBy(oPC, "etiqueta_objeto") == OBJECT_INVALID)

{//F)

SetXP(oPC, (nXP - nXP) + 44990);
SendMessageToPC(oPC, "Estás bloqueado, habla con un DM para solicitar tu desbloqueo.");

}//F)

}//B)

else

if(nLvl == 15)

{//C)

if(GetItemPossessedBy(oPC, "etiqueta_objeto") != OBJECT_INVALID)

{//G)

}//G)

else

if(GetItemPossessedBy(oPC, "etiqueta_objeto") == OBJECT_INVALID)

{//H)

SetXP(oPC, (nXP - nXP) + 104990);
SendMessageToPC(oPC, "Estás bloqueado, habla con un DM para solicitar tu desbloqueo.");

}//H)

}//C)

else

if(nLvl == 20)

{//D)

if(GetItemPossessedBy(oPC, "etiqueta_objeto") != OBJECT_INVALID)

{//I)

}//I)

else

if(GetItemPossessedBy(oPC, "etiqueta_objeto") == OBJECT_INVALID)

{//I)

SetXP(oPC, (nXP - nXP) + 189990);
SendMessageToPC(oPC, "Estás bloqueado, habla con un DM para solicitar tu desbloqueo.");

}//I)

}//D)

}//A)
Volver arriba Ir abajo
Shamira 92
Novat@
Novat@



Femenino
Edad : 32
Puntos de Actividad : 5100

Cantidad de envíos : 6
Fecha de inscripción : 09/02/2011

Nº. de Miembro : 131
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeJue 10 Mar 2011, 4:16 pm

Vaya muchas gracias!! Si que me ha ido!! Tiene que ser un gran lio para hacer scripts ^^. Gracias a ti esto me se esta haciendo mas ameno y mas ligero, Gracias! ^^. Otra pregunta, y perdon por preguntar tanto. He estado buscando como hacer Tramas automaticas, pero no he encontrado nada. Investigue en el aurora pero no me sale nada y me estoy haciendo un pequeño lio jaja. ¿Sabrias como se hacen? ¿O como se empieza? ¿o.. algo que me pueda dar ideas?. Bueno Muchas gracias !!!! ^^!
Volver arriba Ir abajo
Lay Phoenix
Novat@
Novat@



Masculino
Edad : 36
Puntos de Actividad : 5104

Cantidad de envíos : 7
Fecha de inscripción : 28/01/2011

Nº. de Miembro : 129
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeSáb 12 Mar 2011, 12:05 pm

No es nada, para eso estamos aquí :3. Y no te preocupes por las dudas que nadie ha nacido sabiendo Scriptear. Las Tramas automáticas hay (que yo conozca) dos maneras de hacerlas, mediante Asistente o bien del tirón.

Antes de meterme en harina, te aviso de algo. El hacer Tramas automáticas si no se ponen las medidas adecuadas, la Trama podrá repetirse todas las veces que el Jugador quiera, así que cuidado con eso. A menos que sea eso lo que tú quieras, en caso de no ser así se puede:

- Hacer que la haga una vez (y al próximo reinicio que se pueda hacer de nuevo).
- Que única y exclusivamente puedas hacerla una vez en la vida de un personaje.

Si lo haces por Asistente, cuando estás en el juego y has aceptado la misión, en el cuadrito de 'Diario' te aparece el nombre de la misión y su Descripción (todo muy bonito, pero a mi punto de vista es más lioso y largo de hacer que si lo haces del tirón).

Si lo haces del tirón, es todo más simple ya que puedes hacer las cosas por separadas y luego, unirlas añadiendo los Script adecuados. Es más, si quieres ponerte más detallista, con este modo, al aceptar la misión creas en el inventario del jugador un pergamino que al mirarlo te ponga:

- El nombre del cliente.
- Descripción de la misión.
- Pago por cumplirla.
- Otras cosas que tú consideres oportunas.

(En mi opinión, me gusta más éste método que el otro, menos lioso, más flexible...)

Dime el que te interesaría hacer y te voy echando un cable.
Volver arriba Ir abajo
Shamira 92
Novat@
Novat@



Femenino
Edad : 32
Puntos de Actividad : 5100

Cantidad de envíos : 6
Fecha de inscripción : 09/02/2011

Nº. de Miembro : 131
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeSáb 12 Mar 2011, 2:45 pm

Gracias! ^^ Pues si, me suena mejor el Del Tiro, Que por lo del diario... no hay que preocuparse, en el pergamino es un tanto lo mismo ^^.
Volver arriba Ir abajo
Lay Phoenix
Novat@
Novat@



Masculino
Edad : 36
Puntos de Actividad : 5104

Cantidad de envíos : 7
Fecha de inscripción : 28/01/2011

Nº. de Miembro : 129
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeSáb 12 Mar 2011, 2:57 pm

Ook.

1º. Piensa la trama que quieres llevar a cabo.

2º. Crea los Pnjs que participarán en la Trama.

3º. Crea las conversaciones que vas a usar para dicha trama.

4º. Crea el pergamino, con la información que creas pertinente.

5º. Nos pondremos con los Script.

Lo anterior es en rasgos generales, si me adelantas un ejemplo o algo de una Trama que te gustaría podría ser algo más concreto :S
Volver arriba Ir abajo
Shamira 92
Novat@
Novat@



Femenino
Edad : 32
Puntos de Actividad : 5100

Cantidad de envíos : 6
Fecha de inscripción : 09/02/2011

Nº. de Miembro : 131
Respeto por el Foro :
Ayuda porfavor T_T Left_bar_bleue100 / 100100 / 100Ayuda porfavor T_T Right_bar_bleue


Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitimeSáb 12 Mar 2011, 3:39 pm

Pues un ejemplo es... Que hay unas arañas que cuidan el tesoro de unos bandidos, y a cambio los bandidos le dan personas para comer. Pues los aventureros los salven y entregen el tesoro robado a su respectivo dueño ^^
Volver arriba Ir abajo
Contenido patrocinado





Ayuda porfavor T_T Empty
MensajeTema: Re: Ayuda porfavor T_T   Ayuda porfavor T_T I_icon_minitime

Volver arriba Ir abajo
 
Ayuda porfavor T_T
Volver arriba 
Página 1 de 1.
 Temas similares
-
» ayuda... :(
» Ayuda al Invitado
» ayuda plis

Permisos de este foro:No puedes responder a temas en este foro.
Neverwinter Nights, modding - scripts - manuales, todo sobre el NWN :: NWToolSet (Aurora) :: Scripting NWN :: Dudas y Preguntas (Scripting)-
Cambiar a: