Neverwinter Nights
Menú
Gamersmafia es ahora un archivo de solo lectura.

Sobre OnModuleLoad y efectos aplicables a todas las criatura

Tengo una duda con el evento OnModuleLoad. ¿El script se ejecuta cada vez que cargamos el módulo (es decir, una partida salvada) o solamente cuando inicializamos la partida por primera vez? También necesito saber como aplicar un efecto a todas las criaturas del juego (solo habría algunas excepciones). ¿Si uso OBJECT_TYPE_CREATURE se aplicaría a todas las criaturas?

Err. El evento OnModuleLoad se dispara cada vez q el módulo se carga. Por lo q supongo (podiendo equivocarme) q se ejecuta tanto cuando lo inicializas por primera vez, como cuando cargas una partida salvada.
La otra pregunta no la veo tan clara (¿sólo afecta a las criaturas de un área determinada o a todas las del juego?), pero lo consultaré con la almohada .

Jarl. Pues la cosa está chunga

Toditas las criaturas del juego deben tener el efecto, ya que es una enfermedad extendida por toda Faerun (o incluso todos los Reinos Olvidados). Solo habrían algunas excepciones. Unas pocas criaturas no tendrían la enfermedad.

He intentado implementar el engendro en un área. En las propiedades de área, onenter, aplico la enfermedad a todas las criaturas que están dentro. Este script tiene el inconveniente de que tiene que ir en cada área del módulo para afectar a todas las criaturas del juego, y que he de inventarme un modo de que, al salir de un área y meterme en otra, el efecto no se aplique otra vez, con efectos acumulativos (esperaba solucionar esto con algún rollo de variables). Pero no he tenido tiempo de mirar ésto, porque cuando intenté testear el script en un área única, el juego va y me dice que no puede ejecutarlo, que tiene demasiadas instrucciones. Jarl. Bueno, no voy a pegar aquí el script… porque se me ha olvidado en casa (me conecto desde la uni, je, je…), pero lo que hacía era ésto:

a) Definir unas cuantas variables.
b) El script ejecuta un bucle while. Mientras no se tenga una cura para la enfermedad, se mira la hora del día. Si es una hora determinada, aplica la enfermedad (cada 24 horas cambia su naturaleza. Unas veces es más fuerte y otras más débil). Además, según el nivel de la criatura, la enfermedad es más fuerte o más débil. Cada ciertos niveles, el rango de efectos de la enfermedad se amplía. (Se trata de disminuir las Características tirando un dado determinado). Si se sale del bucle, se quitan todos los efectos.

Efectivamente, esta implementación en cada área es una caquita de mucho cuidao, pero solo se me ha ocurrido meter el script en todas las áreas precisamente porque el evento de onenter me permite aplicar cosas a todas las criaturas del área (como he comprobado). De todas formas, ya digo que el script no me funciona porque hay demasiadas intrucciones. Si me cargo el bucle, la comprobación del nivel de la criatura, y en general todos los refinamientos, la cosa funciona, pero claro, ese no es el tema

OnModuleLoad :

The script attached to this event fires when the module is first loaded. This is a good place to initialize any variables that need to be initialized.

Traduccion mas o menos buena.

OnModuleLoad:

Este script disparara los eventos del modulo LA PRIMERA VEZ QUE SE CARGE. Es un buen lugar para iniciar cualquier variable que necesites iniciar.

Usease que ya sabes partidas guardadas no afecta, lo que puedes hacer es poner aqui un evento (Mira la guia hispana arriba que ahi en desarrollo el user defined), y en el User define hacer un loop cuando el evento se cumpla (osea al cargar el modulo por primera vez)

While(variable=)
{
funciones de la enfermedad.
}

Esto es solo una idea de como podrias lanzar la enfermedad, asi cuando el quest x se cumpla y la variable sea no ahi enfermedad esta kedaria anulada.

Por otro lado OBJECT_TYPE_CREATURE creo que es simplemente una constante para algunas funciones, digamos que lo que hace es agilizar la busqueda de el tipo de objeto, ejemplo (no real pero para que lo entiendas), si hicieramos un aplyeffect(object type, string tag) podria ser asi :

(repito estas funciones lo mismo no existen, es solo para que entiendas el object_type bla bla bla)

applyeffect(“tag_ogro1”);

Asi el script miraria todos los objetos del area o en su defecto si esta en otra are, del modulo, desde el principio hasta que encontrar un objeto con ese tag.

applyeffect(OBJECT_TYPE_CREATURE, “tag_ogro1”);

Asi el script miraria solo los objetos tipo criatura del area o en su defecto si esta en otra area, pues seguiria por el modulo entero, desde el principio hasta que encontrara el objeto con ese tag.

Como veras reduce la busqueda y agiliza el tema, por lo cual el micro sufre menos y el script es mas eficaz

espero haber sido de ayuda.

se me olvido aclarar, de lo anterior deducimos que OBJECT_TYPE_CREATURE no es algo que se aplica a una criatura, si no que es un identificador para definir algo, es eso una constante para especificar tipo de objeto.

Los más activos en Scripting