

ADVERTENCIA:
No me los he mirado todos con detalle, pero id con cuidado, algunos aseguro que no os funcionarán en nwn2. ¿Razón? Pese a tener parecido nwnscript, hay funciones nuevas en nwn2 y desgraciadamente algunas rotas. Ejemplo es la función de sentarse de nwn1, que en nwn2 sencillamente no va y hay que scriptear de otra manera.
En resumen, que esto en nwn2 no os va a servir:
AssignCommand(oJugador, ActionSit(oSilla)); // le ordena sentarse al que la usa
Por otro lado, hay algunos scripts aquí que ya andan en el toolset y con mayor complejidad y uso, os recomiendo que os miréis las plantillas predeterminadas; las de conversación sobretodo.
Gracias Ankhalas por este aviso


Actualizaciones:
19 de Febrero: Creado el nuevo post; cogiendo los post de Alucard y las respuestas de su mismo post.
19 de Febrero: Añadido el tutorial de mundo persistentes de Txibi [Link directo]
20 de Febrero: Añadido Limpieza de area inteligente y sistemilla de encarcelamiento por Xiulito. [Links directo]
20 de Febrero: Añadido sistema de XP automatica (mirar indice)
20 de Febrero: Añadido sistema de bloqueo de nivel por Xiulito [Link directo]
20 de Febrero: Añadido Script de restriccion de nivel para acceder al area (mirar indice)
20 de Febrero: Añadido Script de pnjs que caminan entre areas (mirar indice)
20 de Febrero: Añadida Advertencia hecha por Ankhalas
20 de Febrero: Añadida Encuesta
21 de Febrero: Añadido Script para reiniciar conjuros. (mirar indice)
24 de Febrero: Añadido Script de conversacion compleja (mirar indice)
21 de Marzo: Añadidido Script de mapa descubierto (mirar indice)
02 de Abril: Añadido Sistema de maná por Xiulilto [Link Directo]

Scripts con link directo hacia el post:
Máquina tragaperras Click Aquí
Máquina de recarga de varitas. Click Aquí
Estafemo de entrenamiento para arcanos Click Aquí
Rezar y ser sanado, por AlthorDeMalavir Click Aquí
Cambiar alineamiento en una conversación Click Aquí
Celdas mágicas de Txibi Click Aquí
PNJ que habla al acercarte, por Txibi Click Aquí
Cambio a facción hostil, by Txibi Click Aquí
Varios sobre varitas de emociones Click Aquí
Dar PX al desactivar trampas, by Txibi Click Aquí
Piedra de cambio de apariencia, by Varios Click Aquí
Barrera repulsora mágica, by Txibi Click Aquí
Volver de trama a una criatura Click Aquí
Tutorial sobre mundo persistentes, by Txibi Click Aquí
Limpieza de area inteligente by Xiulito Click Aquí
Sistemilla de encarcelamiento by Xiulito Click Aquí
Bloqueo & Desbloqueo de nivel by Xiulito Click Aquí
Sistema de maná by Xiulito Click Aquí

Script con los códigos en alguno de mis posts.
Indice:
||| Titulo del Script | | Localización.Nº Post (post 0 es este)
|| Cerrar una puerta automáticamente, por Txibi || 0 ||
|| Apariencia fantasmal en un pnj, por Lagarto || 0 ||
|| Sillas sentables, por Txibi || 0 ||
|| Sistema de descanso, por Txibi (enlace desde www.universonwn.com). || 0 ||
|| Muro racial, por dragonoscuro. || 0 ||
|| Un pnj dice una frase una única vez a un pj al verlo, por dragonoscuro. || 0 ||
|| Hacer que un pnj/criatura reaparezca al ser matado, por Txibi. || 0 ||
|| "Vuelo" de un punto a otro utilizando un objeto, creado por dragonoscuro, modificado por Alucard. || 0 ||
|| Paso por un portal, por Txibi y otro hecho por dragonoscuro [/b] || 0 ||
|| Curación por coste a un pj, por Txibi || 0 ||
|| Generación de tesoro para aquel que abra un cofre, una sola vez por personaje. Por Txibi y otro hecho por dragonoscuro [/b] || 0 ||
|| Scripts para ambientación de tabernas, por Nyx Alma de Acero || 0 ||
|| Añadir entradas de diario, por Txibi || 0 ||
|| Puertas que se cierran con llave durante la noche, por Lagarto || 0 ||
|| Destructor de magias en pjs, por Txibi || 0 ||
|| crea un placeable y al acercarse un pj a X metros se convierte en una criatura, por Lavafuego || 0 ||
|| PNJ que destruye automáticamente a todo aquel que le ataque Fisica o magicamente, por Memnoch || 0 ||
|| XP automatica y oro cada x tiempo, por Xiulito || 1 ||
|| Script de restriccion de nivel para acceder al area, por Xiulito || 1 ||
|| Pnj que pasea entre areas, Por albgarcor || 1 ||
|| Script que deja los conjuros a 0, encontrado por Dogo [ Funciona ] || 1 ||
|| Conversacion compleja (cuando un PJ entra a un desencadenante se para y le habla un NPC) Por Iced ] || 1 ||
|| Mapa descubierto Por Xiulito ] || 1 ||

Cerrar una puerta automáticamente, por Txibi
En la puerta en cuestión en la sección guiones, en OnOpen, inserta este script para que se ejecute cuando se abrá la puerta.
void main() { DelayCommand(10.0, ActionCloseDoor (OBJECT_SELF)); }

Apariencia fantasmal en un pnj, por Lagarto
Prueba a ponerle ésto en el evento onSpawn de la criatura. Saldrá con el efecto del conjuro semblante fantasmal.
void main() { effect eVis = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, OBJECT_SELF, 0.0); }

Sillas sentables, por Txibi.
//Script: silla_sentable //Txibi. void main() { object oJugador = GetLastUsedBy(); // el que usa la silla object oSilla = OBJECT_SELF; // OBJECT_SELF + AssignCommand = problemas AssignCommand(oJugador, ActionSit(oSilla)); // le ordena sentarse al que la usa }

Sistema de comida y descanso, por Txibi (enlace desde www.universonwn.com).
Sistema de comida y descanso.

Muro racial, por dragonoscuro.
hola os dejo un script modificado para aquellos q necesiten en su modulo impedir el paso a distintos sitios si no eres de una raza o gremio
en mi pw este perteneceria a las cercanias de una casa (clan) en el cual si no eres drow de la casa quarten no puedes pasar, en el tambien se indican varios puestos evolutivos dentro de la casa, desde pleveyo a matrona (rey)
este script impedira el paso a dicha casa a todo ajeno a ella
como funciona:
actua como un muro invisible
creamos una "transicion de area generica" creamos en guiones (on enter) un guion llamado entradaquarten, editamos y pegamos el script
void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; if (GetSubRace(oPC)=="drow de la casa Quarten") if (GetSubRace(oPC)=="drow matrona de la casa Quarten") if (GetSubRace(oPC)=="drow hijo predilecto de la casa Quarten") if (GetSubRace(oPC)=="drow noble de la casa Quarten") if (GetSubRace(oPC)=="drow lord de la casa Quarten") if (GetSubRace(oPC)=="drow maestro de armas de la casa Quarten") if (GetSubRace(oPC)=="drow sacerdotisa de la casa Quarten") if (GetSubRace(oPC)=="drow ladron de la casa Quarten, los ojos de lolth") if (GetSubRace(oPC)=="drow asesino sanguinario de la casa Quarten") if (GetSubRace(oPC)=="drow archimago de la casa Quarten") return; FloatingTextStringOnCreature("tu no perteneces a la casa drow Quarten, no puedes pasar", oPC); object pc = GetEnteringObject(); if (GetIsPC(pc)) { string tag = "PASS_" + GetTag(OBJECT_SELF); if (GetIsObjectValid(GetItemPossessedBy(pc, tag))) { effect vfx = EffectVisualEffect(VFX_IMP_GLOBE_USE); ApplyEffectToObject(DURATION_TYPE_INSTANT, vfx, pc, 1.0f); } else { float facing = GetFacing(pc); float reverseFacing = IntToFloat(FloatToInt(facing + 180.0f) % 360); location loc = GetLocation(pc); vector v = GetPositionFromLocation(loc); v.x += 1.0f * cos(reverseFacing); v.y += 1.0f * sin(reverseFacing); loc = Location(GetArea(pc), v, facing); AssignCommand(pc, ClearAllActions(TRUE)); AssignCommand(pc, ActionJumpToLocation(loc)); effect vfx = EffectVisualEffect(VFX_IMP_BREACH); ApplyEffectToObject(DURATION_TYPE_INSTANT, vfx, pc, 1.0f); } } }

Un pnj dice una frase una única vez a un pj al verlo, por dragonoscuro.
// OnPerceived de la criatura
void main() { object oPC = GetLastPerceived(); if (!GetIsPC(oPC)) return; if (!GetLastPerceptionSeen()) return; int DoOnce = GetLocalInt(oPC, GetTag(OBJECT_SELF)); if (DoOnce==TRUE) return; SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE); ActionSpeakString("TEXTO A DECIR"); }

Hacer que un pnj/criatura reaparezca al ser matado, por Txibi
Saludos.
En el envento OnDead del bicho o PNJ.
Hay colocas que se autodestruya al morir y que se "regenere".
Podrías poner por ejemplo esto. Seleccionas este script en guiones de la criatura.
Supongamos que tu bicho es un huargo inmortal y su etiqueta y resref es tx_huargo.
Vas al slot del bicho guiones, OnDeath
Creas un nuevo script y le llamas como gustes.
Para no borrar el de bioware, le ordenas ejecutarse primero y luego que termine de ejecutar el tuyo.
Luego que el cadaver desaparezca.
Y que reaparezca exactamente en el mismo sitio.
void main() { ExecuteScript("nw_c2_default7", OBJECT_SELF); DestroyObject(OBJECT_SELF); CreateObject(OBJECT_TYPE_CREATURE, "tx_huargo", GetLocation(OBJECT_SELF), TRUE); }
Advertencia: Aseguraos que, si lo que se quiere es luego poder hablar con la criatura en cuestión, debe tener conversación introducida en sus propiedades en la paleta de criaturas personalizadas.

"Vuelo" de un punto a otro utilizando un objeto, creado por dragonoscuro, modificado por Alucard.
void main() { object oPC; oPC = GetItemActivator(); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0f, 11.0f)); //Ajustar tiempo de la animación de meditar object oTarget; oTarget = oPC; effect eEffect; eEffect =EffectDisappear(); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 60.0f); //Ajustar el tiempo que permanece invisible location lTarget; lTarget = GetItemActivatedTargetLocation(); if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return; AssignCommand(oPC, ClearAllActions()); AssignCommand(oPC, ActionJumpToLocation(lTarget)); }

Paso por un portal, por Txibi.
Saludos.
Para el portal, crea un portal y ponlo de trama.
2 formas, con conversación o sin ella, con conversación.
Ve a guiones y en el guión OnUsed coloca este script que ya viene hecho en el juego: nw_recall_portal .
Este script fuerza una conversación con quién usa el objeto.
La conversación colocala en el portal en avanzado, conversación.
Ya en la conversación, en la opción que quieras que teletransporte pon en Acciones emprendidas este script.
void main() { object oJugador = GetPCSpeaker(); SendMessageToPC(oJugador, "Finalmente, agotado por el viaje a traves del portal apareces en el exterior"); AssignCommand(oJugador, ActionJumpToObject(GetWaypointByTag("Punto_De_Ruta_Destino"))); }
Si solo quieres que salte sin más, al usarlo. Cambia el objeto oJugador. En vez de:
object oJugador = GetPCSpeaker();
Pon:object oJugador = GetLastUsedBy();
Y coloca el script en el evento OnUsed de guiones, no hace falta crear ninguna conversación así, envidentemente, ni usar el guión nw_recall_portal.
dragonoscuro puso otro, este, pero no está probado.
poner el script en onused o onenter del portal, cambia el tag q pone aquitudestino por el q quieras poner (by DragonOscuro)
void main() { object oPC = GetLastUsedBy(); if (!GetIsPC(oPC)) return; object oTarget; location lTarget; oTarget = GetWaypointByTag("aquitudestino"); lTarget = GetLocation(oTarget); if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return; AssignCommand(oPC, ClearAllActions()); DelayCommand(3.0, AssignCommand(oPC, ActionJumpToLocation(lTarget))); oTarget = oPC; int nInt; nInt = GetObjectType(oTarget); if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), oTarget); else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oTarget)); }

Curación por coste a un pj, por Txibi.
//Cuerpo Principal. void main() { object oJugador=GetEnteringObject(); int iVidaMax=GetMaxHitPoints(oJugador); int iVidaActual=GetCurrentHitPoints(oJugador); //Si no es un Jugador (es DM) no sale del bucle. if(!GetIsPC(oJugador)) { return; }//Fin de testeo si no es jugador. //Si tiene menos vida que la maxima y no es un muerto se cura. if((iVidaActual<iVidaMax)&&(GetRacialType(oJugador)!=RACIAL_TYPE_UNDEAD)) { //Quitamos el oro. TakeGoldFromCreature(10, oJugador, TRUE); //Miramos la cantidad a curar. int iCuracion = iVidaMax - iVidaActual; //Preparamos los efectos. effect eCurar = EffectHeal(iCuracion); effect eVisual = EffectVisualEffect(VFX_IMP_UNSUMMON); //Que al menos cure un punto. if (iCuracion<1) { iCuracion = 1; } //Curamos al jugador. ApplyEffectToObject(DURATION_TYPE_INSTANT, eCurar, oJugador); //Aplicamos el efecto al object Jugador. ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oJugador, 2.0f); }//Fin del if de sanacion. }//Fin del cuerpo principal.

Generación de tesoro para aquel que abra un cofre, una sola vez por personaje.
Ambos scripts van en el evento OnOpen del cofre o recipiente.
dragonoscuro
void main() { object oPC = GetLastOpenedBy(); if (!GetIsPC(oPC)) return; int DoOnce = GetLocalInt(oPC, GetTag(OBJECT_SELF)); if (DoOnce==TRUE) return; SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE); CreateItemOnObject("capatinieblas", OBJECT_SELF); }
Txibi
//Incluimos la libreria generica del motor del never. #include "NW_O2_CONINCLUDE" //Cuerpo Principal void main() { // Miramos el que abre. object oUltimoQueAbrio = GetLastOpener(); //Si no ha cogido el objeto, su variable vale 0 y le crea el objeto. if (GetLocalInt(GetModule(),"iMarcamosGorron" + GetName(oUltimoQueAbrio)) == 0 ) { // Damos el objeto. CreateItemOnObject("objeto_de_quest",OBJECT_SELF,1); // Marcamos al jugador que ya ha recogido el objeto poniendo su variable a 1. SetLocalInt(GetModule(),"iMarcamosGorron" + GetName(oUltimoQueAbrio), 1); }//fin del testeo de jugador no ha cogido tesoro. }//fin del cuerpo principal.
Para tesoros estáticos. Por Txibi
/* Txibi. Sabado 28 de Febrero del 2004. Nieva, por cierto. Script: tes_tx_foraroble Intento de crear un script de regeneración de tesoros uno por jugador. Una vez por reinicio. 1 tesoro por cada jugador. Sin limite de jugadores Es posible que relentice si la memoria es muy escasa. Poner este script en cache. Retocado para que a niveles superiores a 10 solo de oro, no el tesoro. */ #include "NW_O2_CONINCLUDE" void main() { object oUltimoQueAbrio = GetLastOpener(); int iCantidad = 1; int iNivel = 1; if (GetLocalInt(GetModule(),"iMarcamosGorron" + GetName(oUltimoQueAbrio)) == 0 ) { // Damos oro según nivel. iNivel = GetHitDice(oUltimoQueAbrio); iCantidad = 5 + d20() + d6(iNivel); CreateItemOnObject("nw_it_gold001",OBJECT_SELF,iCantidad); // Tesoro bajo aleatorio, solo para niveles inferiores a 10. if (iNivel<11) { GenerateLowTreasure(OBJECT_SELF); } SetLocalInt(GetModule(),"iMarcamosGorron" + GetName(oUltimoQueAbrio), 1); } }//fin void main()

Scripts para ambientación de tabernas, por Nyx Alma de Acero
Este es el script que uso para que los pnjs se sienten. Debes hacer una silla personalizada y ponerle una etiqueta(en este caso, será SILLA). Luego, escribes estas líneas en un script y lo colocas en Heartbeat(propiedades de creatura, scripts).
void main() { object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); if (IsInConversation(OBJECT_SELF) || GetIsInCombat()) return; ActionSit(GetObjectByTag("SILLA")); }
Para animaciones de taberna: Aquí te hice una lista completa(creo) con las animaciones de charla, de beber y algunas otras. Puede que haya más, pero estas servirán. Lo primero que quieres es que haya muchas animaciones, así que tienes que hacer una tirada aleatoria(Random(11)) donde "11" sería la cantidad de casos que hay, y declarar una variable(nRandom).
void main() { int nAnimation; int nRandom = Random(11); switch(nRandom) { case 0: nAnimation = ANIMATION_FIREFORGET_DRINK; break; case 1: nAnimation = ANIMATION_FIREFORGET_GREETING; break; case 2: nAnimation = ANIMATION_FIREFORGET_HEAD_TURN_LEFT; break; case 3: nAnimation = ANIMATION_FIREFORGET_HEAD_TURN_RIGHT; break; case 4: nAnimation = ANIMATION_FIREFORGET_PAUSE_BORED; break; case 5: nAnimation = ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD; break; case 6: nAnimation = ANIMATION_LOOPING_PAUSE_DRUNK; break; case 7: nAnimation = ANIMATION_LOOPING_PAUSE_TIRED; break; case 8: nAnimation = ANIMATION_LOOPING_TALK_LAUGHING; break; case 9: nAnimation = ANIMATION_LOOPING_TALK_FORCEFUL; break; case 10: nAnimation = ANIMATION_LOOPING_TALK_PLEADING; break; } ActionPlayAnimation(ANIMATION_LOOPING_TALK_NORMAL); ActionPlayAnimation(nAnimation); ActionPlayAnimation(ANIMATION_LOOPING_TALK_NORMAL); ActionDoCommand(SetFacingPoint(GetPosition(GetNearestObjectByTag("GroupFacing")))); }
La última línea(ActionDoCommand) hará que el pnj mire al objeto más cercano con determinada etiqueta(en este caso, GroupFacing).
Para que los pnjs digan algo cuando el jugador pasa cerca:
ESto hará que el pnj inicie una conversación con sí mismo, por lo que el jugador no participará en ella, sino que verá las líneas de dialogo flotando sobre sus cabezas.
void main() { object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN); if (IsInConversation(OBJECT_SELF) || GetIsInCombat()) return; object oTarget; oTarget = OBJECT_SELF; AssignCommand(oTarget, ActionStartConversation(OBJECT_SELF, "conversacion")); }
Nota que tendrás que hacer una conversación(en este caso llamada "conversacion") en la que tendrás que hacer las líneas que quieres que digan los pnj. También deberás asignarle a cada pnj que intervenga en el diálogo una etiqueta diferente y única.
Lo única especial de esta conversación es que no deberá tener ninguna línea de opción(las líneas de color azul): lo único que pueden decir es [Continue](simplemente borras todo lo escrito, y se pondrá automáticamente).
Aquí está la forma que debería tener un diálogo simple con tres interlocutores

Añadir entradas de diario, por Txibi.
Con la orden AddJournalQuestEntry y podría ser tal que así:
//Añadir al diario AddJournalQuestEntry("mis_1_for_roble",2,oJugador); SetLocalInt(oJugador,"mis_1_for_roble",2);
Más información aquí: Tutorial de cobro de misiones de Txibi.

Script para que las puertas se cierren con llave durante la noche, por Lagarto
Se coloca en el onHearBeat de la puerta en cuestión
void main() { if (GetIsNight()) SetLocked(OBJECT_SELF ,TRUE); else SetLocked(OBJECT_SELF ,FALSE); }

Destructor de magias en pjs, por Txibi
Para anular:
//Cuerpo Principal. void main() { //Apuntamos quien entra en el lugar. object oJugador = GetEnteringObject(); //Anulamos la magia. effect eFalloMagico = EffectSpellFailure(-100); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eFalloMagico, oJugador); //Dispamos su magia. effect eDisipacionTotal = EffectDispelMagicAll(40); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDisipacionTotal, oJugador); }//fin del cuerpo pricipal.
para restaurar: (No testeado)
//Cuerpo Principal void main() { //Apuntamos al que abandona el area. object oJugador = GetExitingObject(); //Eliminamos el fallo de conjuro del que sale del area. RemoveEffect(oJugador, EffectSpellFailure()); }//fin del cuerpo principal.

Crea un placeable y al acercarse un pj a X metros se convierte en una criatura, Por Lavafuego
en el script intervienen:
criatura---->elemental electrico
placeable---->ubicado
punto de ruta--->WP_ubicado
almacenador de variables--->placeable que en nuestro caso es roca
varios desencadenantes
Me explico, lo que hago es, pisa el primer desencadenante y asigna a roca una variable valor uno y crea a ubicado, tras x tiempo el propio script le dice k pase de nuevo la variable de roca de 1 a 0
¿porque esto?
porque el pj entra en el desencadenanate, testea el valor de la variable de roca, si es 0, testea k no exista ademas ni el ubicado "ubicado" , ni la criatura Elemental_electrico si es asi crea en el punto de ruta WP_ubicado el objeto ubicado.
despues de esto alrededor de nuestro WP_ubicado pintamos otro desencadenante generico que lo que hace es que al ser pisado, si existe el objeto ubicado, lo haga desaparecer y en su lugar cree a Elemental_electrico
ahora paso a paso de como montar esto:
primero pintamos un placeable de Tag--> roca y con el botón derecho le metemos en variables esto:
Nombre--->iRoca
Tipo--->int
Valor--->0
luego pintamos un desencadenante que lo que hace es que cuando el pj lo pise cree nuestro placeable de nombre ubicado
asi pues lo pintamos y en el Onenter metemos este script:
void main() { object oPC = GetEnteringObject(); object oTarjet =GetObjectByTag("roca"); int iRoca = GetLocalInt(oTarjet,"roca"); if(iRoca ==0) { if(GetNearestObjectByTag("ubicado")!=OBJECT_INVALID) return; if (!GetIsPC(oPC)) return; SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE);//testea si existe "ubicado" if(GetNearestObjectByTag("Elemental_electrico")!=OBJECT_INVALID) return; if (!GetIsPC(oPC)) return; SetLocalInt(oPC, GetTag(OBJECT_SELF), TRUE);//testea si existe elemental electrico object oTarget = GetObjectByTag("WP_ubicado");//punto de ruta donde creará "ubicado" location lTarget = GetLocation(oTarget); oTarget =CreateObject(OBJECT_TYPE_PLACEABLE, "ubicado", lTarget);//objeto que crea SetLocalInt(oTarjet, ("roca"), 1); //pone variable en uno } if (iRoca ==1) {DelayCommand(50.0, SetLocalInt(oTarjet, "roca", 0)); //pone variable en cero a X tiempo, eso cada uno lo que quiera } }
despues pintamos el punto de ruta donde aparece nuestro placeable con el tag--->WP_ubicado
y alrededor pintamos un desencadenanate genérico donde metemos este script (que sea amplio para que de tiempo a ver los efectos y no se lo encuentr el pj justo segun pasa el ubicado)
#include "nw_i0_generic" void main() { object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; object oTarget; oTarget = GetObjectByTag("ubicado"); int nInt; nInt = GetObjectType(oTarget); if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY), oTarget); else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY), // efecto visual GetLocation(oTarget)); DestroyObject(oTarget); location lTarget = GetLocation(oTarget); oTarget =CreateObject(OBJECT_TYPE_CREATURE, "Elemental_electrico", lTarget);}
y solo queda en la paleta de criaturas crear a la criatura con el tag Elemental_electrico
espero que os sea de ayuda el script

PNJ que destruye automáticamente a todo aquel que le ataque Fisica o magicamente, por Memnoch
void main() { object oTarget = GetLastHostileActor(); if (GetIsFriend(oTarget)) return; effect eEffect; eEffect = EffectDeath(); eEffect = SupernaturalEffect(eEffect); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); int nInt; nInt = GetObjectType(oTarget); if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DESTRUCTION), oTarget); else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DESTRUCTION), GetLocation(oTarget)); }
Se puede cambiar "VFX_IMP_DESTRUCTION" por el efecto visual que queramos, y si no queremos ninguno, basta con eliminar las últimas cuatro líneas de código (creo). tongue.gif
El PNJ no ha de ser de trama, además, podría morir porque el enemigo muere justo después de lanzar su ataque, por lo tanto, la magia y similares podría destruirlo, aunque para eso basta con hacerlo inmune dándole alguna piel que lo proteja contra todo lo que nos interese.
El script hay que ponerlo, al menos en mi caso, en los guiones OnDamaged, OnDisturbed, OnPhysicalAttacked y OnSpellCastAt del personaje.
Espero que os sirva, al menos a mí me va de fábula.
Demostración gráfica:

Editado por Jastro, 02 April 2009 - 08:03 PM.