Problemas con una rata
Saludos a todos!! Antes que nada quisiera dar la enhorabuena a los que hacen posible esta página. Es un punto de encuentro ideal para los amantes del Neverwinter Nights de habla hispana. Ahora si me pudierais ayudar os estaría la mar de agradecido ya que estoy mas que desesperado y después de más de 2 horas sin encontrar solución al problema me encomiendo a vosotros a ver si podeis arrojar algo de luz. Este Script lo coloco en el evento OnEnter de un area [code:1:916c5d17b0] void main() { object oModulo = GetModule(); int nRata = GetLocalInt(oModulo,”apareceRata”); if (nRata != 1) { object oRata = GetObjectByTag(“rata”); DestroyObject(oRata); } } [/code:1:916c5d17b0] Os explico más o menos. Quiero que en ese area, aparezca la rata solo cuando el “localInt” “apareceRata” esté a 1. Para ello lo que hago es colocar la rata en el area con el Aurora, y cada vez que salta el evento OnEnter miro el “apareceRata” de tal manera que si este es distinto de 1 pues elimino la rata. No se si será el mejor método para hacer esto pero no se me ha ocurrido otro. Se a ciencia cierta que el “apareceRata” está a 1, ya que justo después de obtener nRata hago un SendMessageToPC y sale un 1 como un castillo. Sin embargo la rata no sale. Me puse a darle vueltas a la condición del if, pero por mucho que intentaba cambiarla (que si negando la igualdad a 1, que si mirando si vale 0,…) pero nada. Lo curioso es que en medio de la desesperación me dió por quitar esa condicion del if y poner GetIsNight() y cual fue mi sorpresa que funcionaba perfectamente, la rata solo aparecia de dia y de noche no. ¿Sabeis que puede estar pasando?¿O sabeis alguna otra manera de hacer que aparezca la rata en algunas determinadas situaciones sin usar lo que yo estoy usando? Muchísimas gracias de antemano y perdón por este Post tan largo.
Neverwinter Nights
[code:1:0c64545148]
void main()
{
object oModulo = GetModule(); // Declaramos el module.
int nRata = GetLocalInt(oModulo,"apareceRata"); // Recogemos el valor de nRata.
SendMessageToPC(GetFirstPC(), "Valor de nRata" + IntToString(nRata)); // Comentar-Descomentar para debugear. Muestra el valor de nRata justo en la condicion.
if((nRata == 0) || (nRata >= 2)) // Si es 0 o Mayor-Igual a 2
{
object oRata = GetObjectByTag("rata");
DestroyObject(oRata);
}
}
[/code:1:0c64545148]
Prueba asi, lo mismo te sirve, y mira el sendmessage, haber justo en la condicion que valor tiene nRata.
Muchas gracias Gonar, lo probaré en cuanto llegue a casa ya que ahora mismo estoy en el trabajo. Pero me parece que no me va a resultar ya que le di muchas vueltas a esa condición y no parece ser que sea de eso.
De todas formas en cuanto lo pruebe te digo.
[quote:0adf2b9d9c]Este Script lo coloco en el evento OnEnter de un area[/quote:0adf2b9d9c]
Por que no en el script, en vez de usar object oModulo = GetModule(); usas GetEnteringObject(); ???
Es otra opcion.
Veamos, ya estoy en casa y he probado tu modificación, para ser más exactos he hecho lo siguiente:
[code:1:3faa7d143c]
void main()
{
object oModulo = GetModule();
int nRata = GetLocalInt(oModulo,"apareceRata");
SendMessageToPC(GetEnteringObject(),"estoy antes del si y nRata vale: "+IntToString(nRata));
if ((nRata == 0)||(nRata >= 2))
{
SendMessageToPC(GetEnteringObject(),"estoy dentro del si, y nRata vale: "+IntToString(nRata));
object oRata = GetObjectByTag("rata");
DestroyObject(oRata);
}
}
[/code:1:3faa7d143c]
El resultado es exactamente el mismo, no sale la rata de marras. Pero he averiguado algunas cosas interesantes. El Mensaje que mando al Jugador dentro del cuerpo del if NO SALE, pero la rata TAMPOCO!!!
Se perfectamente que la rata debe aparecer porque si comento el bloque if (este incluido) sale la rata y hace perfectamente lo que le pido (no quiero que ataque al PJ, si no que habra una puerta y se marche a su WayPoint). Estoy totalmente desconcertado. Tengo el ultimo parche del NWN en español, el 1.29 ¿No será algún bug?
Lo de utilizar GetEnteringObject() y almacenar la variable local en el PJ es lo primero que utilizé, pero como me dio los mismos resultados probé a utilizar el modulo para almacenarla por si era eso, y todavia no lo he rectificado.
Alguna idea??
Ya está solucionado!!! Lo voy a comentar por si a alguien le pasa algo parecido. Ahí va:
Bueno, desesperado ya me pongo a echarle un vistazo a los Scripts de la campaña oficial, más concretamente al capitulo 0, el preludio. Ahí ocurre algo parecido a lo que quiero hacer. Al principio la academia estaba llena de personas entrenando y personajes y demás pero después del ataque esas personas desaparecen y aparecen los goblins. Algo por el estilo quería yo hacer con la rata. Yo pretendia activar la aparicion de una rata en un area si antes, en otra area distinta se había cogido un libro concreto.
Lo que he hecho ha sido lo siguiente: primeramente me he creado un WayPoint donde quería que apareciese la rata y luego he creado un script en el evento OnItemAcquire del modulo que lo único que hace es comprobar si el objeto adquirido es el libro deseado y en tal caso lanzo un evento userdefined al area donde va a parecer la rata con un número concreto. Tal que así:
[code:1:b81d13c78d]SignalEvent(GetObjectByTag("Triel"),EventUserDefined(2000));[/code:1:b81d13c78d]
Ahora solo tengo que crear un script y asociarlo al evento userdefined del area donde aparecerá la susodicha rata y crear el objeto rata en la posicion deseada con ayuda del WayPoint. Y esto queda tal que así:
[code:1:b81d13c78d]void main()
{
int nEvent = GetUserDefinedEventNumber();
switch (nEvent)
{
case 2000: //Hemos cogido el libro, activamos la aparicion de las ratas
location lPos = GetLocation(GetObjectByTag("WP_RATA"));
CreateObject(OBJECT_TYPE_CREATURE,"rat002",lPos);
break;
}
}
[/code:1:b81d13c78d]
Y voilá!! aparece la rata cuando tiene que aparecer. A mi la verdad, me parece mucho más intuitiva la forma anterior de hacerla, pero claro, no va, así que nos tendremos que conformar con esta
Bueno ahí queda eso por si a alguien le sirve, y si necesita más explicación pos que avise que intentaremos hacerlo mejor.
Un saludo y Muchas gracias por todo.