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

Indice de scripts en el subforo [Actualizado]


8 respuestas al tema

Encuesta: Duda sobre el tema

¿Te aclaras con la forma en la que esta preparado el post?

No puedes ver el resultado hasta que hayas votado. Por favor, ingresa, vota y ve los resultados.
Votar Los invitados no pueden votar.

#1 Jastro

Jastro

    Humano

  • Miembro
  • Pip
  • 29 posts

Posteado 20 February 2009 - 12:48 AM

Buenas gente hace mucho tiempo que no se actualiza el indice de Scripts que hizo alucard y como tengo demasiado tiempo libre, voy a intentar recopilar toda la informacion. Pondre los del indice y los nuevos que vea. Felicito a Alucard el gran trabajo que se pego en su dia ???

Imagen posteada

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 ???

Imagen posteada

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]

Imagen posteada

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í


Imagen posteada


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 ||

Imagen posteada

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));
}


Imagen posteada

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); 
}


Imagen posteada

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
}


Imagen posteada

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

Sistema de comida y descanso.

Imagen posteada

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);
}
}
}

Imagen posteada

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");

}


Imagen posteada

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.


Imagen posteada

"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));

}

Imagen posteada

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));

}

Imagen posteada

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.

Imagen posteada

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()

Imagen posteada

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


Imagen posteada

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.


Imagen posteada

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);
}

Imagen posteada

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.

Imagen posteada

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


Imagen posteada

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:
Imagen posteada

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


#2 Jastro

Jastro

    Humano

  • Miembro
  • Pip
  • 29 posts

Posteado 20 February 2009 - 12:48 AM

Imagen posteada

XP automatica y oro cada x tiempo, por Xiulito

Aquí dejo el script un poco retocado a como lo tenia yo, aun así no le quite el reparto de XP según nivel y tampoco la bonificación de oro, retócalo como mas le convenga al modulo.


Acuérdate de poner este trozo en el OnLoadModule para iniciar el bucle, no importa que este en la parte mas alta o mas baja del script.


ExecuteScript("rrc_xp_all",GetModule());

El siguiente script no lo tendrás que poner en ninguna parte, será suficiente con tenerlo creado.

Script de Nombre: rrc_xp_all


//::///////////////////////////////////////////////
//:: Rafa R.C.
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
#include "nw_i0_tool"
void main()
{
object oPC = GetFirstPC();

//Para no liarse transformando los minutos en segundos para sacar la cuenta
//se editara el tiempo directamente en minutos.
int i = 15;//Representa el tiempo ya transformado en minutos, editar al gusto.
float fMinutos = IntToFloat(i*60);

//Se coge nivel y la variable que llegado el momento nos servira para
//romper el bucle.
int iNivel = GetHitDice(oPC);
int iDarXPAndPasta = GetLocalInt(GetModule(), "DarPasta");

//Si esta TRUE rompe bucle.
if (iDarXPAndPasta == TRUE){return;}

DelayCommand(fMinutos, ExecuteScript("rrc_xp_all",GetModule()));

while (GetIsObjectValid(oPC))
	{
	if (iNivel<=6)
		{
		RewardPartyXP(200, oPC, FALSE);
		RewardPartyGP(600, oPC, FALSE);
		}
	else if (iNivel<=10)
		{
		RewardPartyXP(400, oPC, FALSE);
		RewardPartyGP(900, oPC, FALSE);
		}
	else if (iNivel<=18)
		{
		RewardPartyXP(600, oPC, FALSE);
		RewardPartyGP(1300, oPC, FALSE);
		}
	else if (iNivel<=30)
		{
		RewardPartyXP(800, oPC, FALSE);
		RewardPartyGP(1800, oPC, FALSE);
		}
	else if (iNivel<=39)
		{
		RewardPartyXP(1000, oPC, FALSE);
		RewardPartyGP(2400, oPC, FALSE);
		}
	else if (iNivel==40)
		{
		RewardPartyGP(3000, oPC, FALSE);
		}
	oPC = GetNextPC();
	}
}


Imagen posteada

Script de restriccion de nivel para acceder al area, por Xiulito

Buenas, te pongo dos, uno es para las transiciones de área y el otro es para las puertas, suponiendo que es para el mismo módulo que me pediste lo de la cárcel te he colocado un "include" que deberías tenerlo creado en el módulo.

Transición de área, poner en el OnEnter del desencadenante, no tienes que asignarle ningún destino por defecto, el destino lo marcas desde el script, cambia donde dice "WP..." por la etiqueta del punto de ruta que quieras que sea de destino, también te puse una frase que saltara sobre el PC si así lo deseas, solo tienes que quitar las dos barras //.


#include "rc_baul"
void main()
{
object oPC = GetEnteringObject();
int iNivel = GetHitDice(oPC);

if (iNivel<15)
	{
//	FloatingTextStringOnCreature("Tus poderes no son suficientes como para acceder a este lugar", oPC);
		return;}

JumpToWP(oPC, "WP...");
}

Para las puertas, poner en el OnAreaTransitionClick, a la puerta SI tienes que definirle una transición de área ya que en este caso el destino no lo decides desde el script, también tiene una frase que puedes activar quitando las dos barras //.


void main()
{
object oPC = GetClickingObject();
object oTarget = GetTransitionTarget(OBJECT_SELF);
int iNivel = GetHitDice(oPC);

if (iNivel<15)
	{
//	FloatingTextStringOnCreature("Tus poderes no son suficientes como para acceder a este lugar", oPC);
		return;}

SetAreaTransitionBMP(AREA_TRANSITION_RANDOM);
AssignCommand(oPC,JumpToObject(oTarget));
}



Imagen posteada

Pnj que pasea entre areas, Por albgarcor

Pon en el área a que quieres se vaya tu PNJ un punto de ruta, ej.: "NW_PUNTORUTA"
En el área actual pon un.... lo que quieras, por ejemplo un desencadenante y en él un script de este estilo:



void main()
{
object oPNJ= GetObjectByTag("etiqueta_PNJ");
object oWP = GetObjectByTag("NW_PUNTORUTA");
location lDestino = GetLocation(oWP);
AssignCommand(oPNJ,ActionMoveToLocation(lDestino,FALSE));
}



Imagen posteada

Guardar conjuros al salir del server.(Funciona)

lo que hace es cargarse toda la lista de conjuros del que sale y entra, obligando al pj a dormir para recuperarlos... no es algo perfecto pero si valido para que no se aprobechen del bug, salir y entrar para volver a tener su lista de conjuros completita


Creamos este script y lo dejamos fuera, con el nombre: spells_off

//spells_off

void DecrementTalentIndex(int iIndex, object oPC);

void main()
{
object oPC = OBJECT_SELF;
int iIndex;

for (iIndex = 1; iIndex < 1000; iIndex++)
{
DecrementTalentIndex(iIndex, oPC);
}
}

void DecrementTalentIndex(int iIndex, object oPC)
{
int iDecrementIndex;

talent tSpell;
talent tFeat;

/* create our talent */
tSpell = TalentSpell(iIndex);
tFeat = TalentFeat(iIndex);

/* check for all spells */
if (GetIsTalentValid(tSpell))
{
if (GetHasSpell(GetIdFromTalent(tSpell), oPC))
{
for (iDecrementIndex = 1; iDecrementIndex < 20; iDecrementIndex++)
{
DecrementRemainingSpellUses(oPC, GetIdFromTalent(tSpell));
if(!GetHasSpell(GetIdFromTalent(tSpell), oPC))
iDecrementIndex=20;
}
}
}

/* check for all feats*/
if (GetIsTalentValid(tFeat))
{
if (GetHasFeat(GetIdFromTalent(tFeat), oPC))
{
for (iDecrementIndex = 1; iDecrementIndex < 20; iDecrementIndex++)
{
DecrementRemainingFeatUses(oPC, GetIdFromTalent(tFeat));
if(!GetHasFeat(GetIdFromTalent(tFeat), oPC))
iDecrementIndex=20;
}
}
}
}

Despues insertamos este bloque (obviamente adaptado al script de cada uno) al guión del OnClientEnter del modulo


//Si entra por primera vez desde el reinicio
if(!GetLocalInt(oPC, "DestruyeConjuro")) {
SetLocalInt(oPC, "DestruyeConjuro", 1);
}
else
{
//si ya ha entrado por mas veces hoy, nos cargamos la lista de conjuros y que duerma para recuperarlos
ExecuteScript("spells_off",oPC);
}


Imagen posteada

Script de conversación automatica complejo by Iced

Cuando el personaje entre en un desencadenante se para y el pnj de etiqueta FLINT_FIREFORGE se acerca y entable una conversación contigo. Si queremos que lo haga con otro pj cambiad el comando oTarget = GetObjectByTag("FLINT_FIREFORGE");<---le ponemos la etiqueta que queramos



//OnEnter
void main()
{

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;
//Recordamos que la conversacion solo se activa una vez
int DoOnce = GetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF));

if (DoOnce==TRUE) return;

SetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF), TRUE);
//Detenemos toda accion que este realizando el jugador
AssignCommand(oPC, ClearAllActions());

object oTarget;
oTarget = GetObjectByTag("FLINT_FIREFORGE");
//Hacemos que el PNJ se acerque al jugador
AssignCommand(oTarget, ActionMoveToObject(oPC));
//Iniciamos la conversacion
AssignCommand(oTarget, ActionStartConversation(oPC, ""));

}


Imagen posteada

Script de mapa descubierto by Xiulito

En el onenter del area


void main()
{
   object oPlayer = GetEnteringObject();
   if (GetIsObjectValid(oPlayer) && GetIsPC(oPlayer))
   {
	  object oArea = OBJECT_SELF;
	  ExploreAreaForPlayer(oArea, oPlayer);
   }
}

Editado por Jastro, 21 March 2009 - 11:14 AM.


#3 Jastro

Jastro

    Humano

  • Miembro
  • Pip
  • 29 posts

Posteado 20 February 2009 - 12:48 AM

Reservado2

#4 Ankhalas

Ankhalas

    Ancillae

  • Miembro DLAN
  • PipPipPip
  • 427 posts

Posteado 20 February 2009 - 03:01 PM

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.
Si te caes siete veces, levántate ocho.

#5 Xiulito

Xiulito

    Neonato

  • Miembro
  • PipPip
  • 168 posts

Posteado 23 February 2009 - 05:09 PM

Un buen trabajo Jastro ??? te felicito, muy bien distribuido todo.
¿Saben cual es la diferencia entre un hombre inteligente y uno sabio?
Que el inteligente sabe lo que dice y el sabio sabe cuando decirlo.


#6 Maestro de las sombras

Maestro de las sombras

    Humano

  • Miembro
  • Pip
  • 35 posts

Posteado 08 June 2009 - 04:48 PM

Buen trabajo.

Ya que estoy, comento que hace algún tiempo dejé por aquí una librería más o menos mala (jeje) con recopilaciones de funciones para usar en otros scripts. Podéis mirarla y sacar algo en claro. Creo que estaba en castellano...

Debe de estar en la sección de descargas y utilidades de la sección de nwn 1, no en el foro, sino en la página principal de clandlan.

Saludos.

#7 Ecreon

Ecreon

    Humano

  • Miembro
  • Pip
  • 79 posts

Posteado 11 January 2010 - 03:58 PM

buenas, por fin e dado para corregir el fallo de conjuro al entrar y salir del area, el que tienen actualmente no sirve porque cuando sales del area el efecto "fallo de conjuro" no se quita, asi que os dejo con mi aportacion, y espero que le sirva.


OnEnter (del area)

void main()
{

ApplyEffectToObject(2, SupernaturalEffect(EffectSpellFailure(100)),GetEnteringObject());

}



OnExit (del area)

void main()
{

object oPC = GetExitingObject();
effect eEffect = GetFirstEffect(oPC);
int nType;
while(GetIsEffectValid(eEffect))
{
nType = GetEffectType(eEffect);
if(nType == EFFECT_TYPE_SPELL_FAILURE)
RemoveEffect(oPC, eEffect);
eEffect = GetNextEffect(oPC);
}


}


Saludos!

#8 gordon00

gordon00

    Humano

  • Miembro
  • Pip
  • 2 posts

Posteado 25 February 2012 - 09:15 PM

Hola a todos muy buena la recopilacion de scripts aunque veo quehasta el 2009 fue laultima vez que se posteo algo sobre esto, me gustaria aprender mas de esto, ya que estoy comenzando en esto del modding mapeo bien pero de verdad me gustaria mas ayuda conlos scriptsalguna recopilacion nueva seria buena, prpongo una idea que tal quealguien se posteeuna guia donde describa los scripts que podemos encontran dentro delnwn sintener que hacerlos,digo hacerver a pnjstumbados en el suelosentados o hastaarrodillados soncaracteristicas quecreoque ya vienen en lalista de scripts denwn1 seriabueno si alguienque se las conozca los publicara para que podamosusarlos rapidamente sin tener que ir probando

#9 Agripa

Agripa

    Humano

  • Miembro
  • Pip
  • 3 posts

Posteado 15 March 2013 - 01:06 PM

Quería felicitaros por encima de todo por vuestra gran página, en especial a Txibi. Vuestros tutoriales y apuntes son encomiables. 

 

Un abrazo muy fuerte, que sepais que teneis un gran aprecio por parte de un jugador de uno de estos servers que aún perduran y perdurarán, un abrazo desde El Bastión de Aldarán.

 

¡Viva Neverwinter!





Responder



  


A Bragol. Tus amigos te echan de menos.