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

Biblioteca NwN hispana

La idea para este post es simple, hacer una libreria digamos comun con nuevas funciones para facilitar el curro a los buildes, hispanos. La idea seria realizar la libreria con todos los scripts de funciones, condicionales o lo que sea que vosotros doneis voluntariamente a la causa. Formato de la cabecera de cada funcion : [code:1:7a3be2b86f] //:://///////////////////////////////////////////// //:: Nombre de la funcion o condicional //::////////////////////////////////////////////// //:: Autor de este script //::////////////////////////////////////////////// /* Descripcion del script. Incluir si es modificacion o esta basado en algun otro script, poniendo en su caso el autor del script original. Tambien incluir puntualizaciones sobre el uso o abuso de esta funcion nueva. */ //::////////////////////////////////////////////// // Codigo. [/code:1:7a3be2b86f] Ojo es crear spcrits y funciones nuevas no traduccir el nw_c2_default9 o similares por poner un ejemplo. Cada X tiempo se updateara el post con las funciones seleccionadas que hallais puesto, y se uniran a la biblioteca que tambien estara aqui claro. Para postear en este hilo sigue un simple patron por favor : Asunto —> Aportacion funcion (Esta claro incluyes una nueva funcion). Asunto —> Aportacion Condicional (Esta claro incluyes una condicional). Asunto —> Duda libreria (Plantea tu duda sobre como se usa esto o lo otro). Asunto —> Update (Una aportacion anterior la has mejorado) Asunto —> Explicacion (Una aportacion no estaba bien explicada, ahora lo haces tu). Asunto —> Resolver duda (Resuelves una duda de alguien sobre esta libreria). Asunto —> Ayuda Post (Tienes alguna idea de como mejorar este post). Asunto —> Opinion sobre (Opina sobre alguna ayuda post, update, etc … pero ojo sin rallarse, que aporte algo la opinion o no la pongais por favor). Los codigos por favor incluirlos en code para su mejor lectura. No postees felicitaciones o si te gusta o no, asi facilitaremos el trabajo de los admins y moderad del foro a la hora de updatear o limpiar el hilo. Gracias a todos por vuestra colaboracion.

No disponible aun

Esta condicion se me ocurrio para ambientar mejor conversaciones en futuros modulos.
Tendras que crearte una paleta personalizada con todas las armaduras permitidas en el modulo.
Requiere de que en el modulo solo se usen las armaduras que tu desarrolles claro.
[code:1:4a780b7713]
//::////////////////////////////////////////////// />//:: Armadura puesta.
//::////////////////////////////////////////////// />//:: Por Gonar
//::////////////////////////////////////////////// />/*
Chequeo de armadura puesta.
Por defecto se indicara de la siguiente manera los
tags usado en Mara Tanwe.
mt_ Comun de mara tanwe sin reino especifico.
am_ Reino de Ambaron.
af_ Reino de Arda Formenya.
ah_ Reino de Arda Hyarmen.
tn_ Reino de Tavaro-ndore, tambien objeto elfico.
ne_ Reino de Nor Erume.
nn_ Reino de Nor Nuru, tambien objetos Graks.
ca_ objetos caoticos o mutantes.
dr_ objetos elfos oscuros.
en_ objetos enanos o del reino enano.
cm_ comun en todos los lugares.
Mas tags indicaran distintas procedencias pero
siempre indicados por dos letras y una barra baja
como sigue XX_TagDelObjeto
Esta condicion sirve para los When Text Appers
(El texto aparece cuando) de las conversaciones.
Util tanto para modulos como sobre todo mundos
persistentes, el pj/pjs seran reconocidos por sus
vestimentas y tratados como si fuera de un reino u
otro.
Con esto se pude hacer un pnj xenofobo muy chulo,
o alguien que sea un fanatico de la cultura de otro
reino, o vamos un sin fin de posibilidades.
*/
//::////////////////////////////////////////////// />int ArmaduraPuesta(object oPC, string sTag1)
{
object oObjeto = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
string sTomar = GetTag(oObjeto);
string sLetras = GetSubString(sTomar, 0, 3);
if (sLetras == sTag1)
{
return TRUE;
}
return FALSE;
}
[/code:1:4a780b7713]

Este es el sistema que yo me he echo para los modulos de Mara Tanwe de habilidades. Me lo he personalizado totalmente. Incluye una descripcion bastante buena.

[code:1:f93549f2b6]
//::////////////////////////////////////////////// />//:: Uso habilidades
//::////////////////////////////////////////////// />//:: Por Gonar
//::////////////////////////////////////////////// />/*
Script preparado para checkear habilidades
de forma sencilla, y sin complicaciones. Con
esto podras usar todas las habilidades del
juego, en combinacion con la caracteristica
que tu quieras, sobre el objeto que desees
y la dificultad que tu creas apropiada.
Chekea una habilidad, indicar :
iDif = valor de la dificultad
iHab = habilidad tipo SKILL_ a testear
oPC = Objeto que usa la habilidad
Las habilidades son :
SKILL_ANIMAL_EMPATHY
SKILL_CONCENTRATION
SKILL_DISABLE_TRAP
SKILL_DISCIPLINE
SKILL_HEAL
SKILL_HIDE
SKILL_LISTEN
SKILL_LORE
SKILL_MOVE_SILENTLY
SKILL_OPEN_LOCK
SKILL_PARRY
SKILL_PERFORM
SKILL_PERSUADE
SKILL_PICK_POCKET
SKILL_SEARCH
SKILL_SET_TRAP
SKILL_SPELLCRAFT
SKILL_SPOT
SKILL_TAUNT
SKILL_USE_MAGIC_DEVICE
Y las subskills (No testeado si esto funciona) son :
SUBSKILL_EXAMINETRAP
SUBSKILL_FLAGTRAP
SUBSKILL_RECOVERTRAP
Las caracteristicas son :
ABILITY_CONSTITUTION
ABILITY_CHARISMA
ABILITY_DEXTERITY
ABILITY_INTELLIGENCE
ABILITY_STRENGTH
ABILITY_WISDOM
Sobre las dificultades. La tirada incluye, el valor de
la habilidad, (Supuestamente de normal entre 0 a 8) mas
el valor de la caracteristica y el resultado de 1D20.
Por lo cual creo que se deberia de establecer asi :
12 a 18 sencillo.
19 a 25 facil.
26 a 29 normal.
30 a 36 dificil.
37 a 43 hazana.
44 o mas imposible.
*/
//::////////////////////////////////////////////// />int HabilidadChekeo(int iDificultad, int iSkill, int iAbility, object oPC)
{
int iPersuade = (d20(1) + GetSkillRank(iSkill, oPC) + GetAbilityScore(oPC, iAbility));
if(iPersuade > iDificultad)
{
return TRUE;
}
return FALSE;
}
[/code:1:f93549f2b6]

[code:1:32783dbdcc]
//::////////////////////////////////////////////// />//:: Sentarse
//::////////////////////////////////////////////// />//:: Por Gonar
//::////////////////////////////////////////////// />/*
Usado sobre una silla y especificando el object
que ha de sentarse, se activa la animacion para
sentarse en el objeto.
Ejemplo un pj :
Hacer un script en el slot OnUsed de la silla
el objet seria GetLastUsedBy.
Se puede usar el mismo script para distintos
objetos si usa esta funcion e independientemente
de los tags de los objetos.
*/
//::////////////////////////////////////////////// />void Sentarse(object oPC)
{
object oSilla = OBJECT_SELF;
if (GetIsPC(oPC))
{
AssignCommand(oPC, ActionSit(oSilla));
}
}
[/code:1:32783dbdcc]

[code:1:55cde46666]
// La puerta de mi casa es particular
////////////////////////////////////////
//By Aragorn QkrCh
////////////////////////////////////////
//Un simple script para hacer que la puerta de la casa de un pj
//se cierre con llave, ya que parece que el maldito toolset
//pormucho que pongas "volver a cerrar con llave" pues no
//funciona
//Se coloca en el OnOpen de la puerta
/////////////////////////////////////////

void main()
{
DelayCommand(9.0, ActionCloseDoor(OBJECT_SELF));
//ESPERA 9 SEGUNDOS A QUE LA PEURTA SE CIERRE SOLA
SetLocked (OBJECT_SELF, TRUE);
//CHAPA LA PUERTA
}

[/code:1:55cde46666]

A ver, tengo interes en una cosa. Kiero hacer ke los libros NO se puedan sacar de las librerias, por lo cual hago ke kuando se coja un libro y entre en el inventario, éste se destruya y se cree otro igual en la librería. Para ello uso este script:
[code:1:eca408fb74]void main()
{
object oBookShelf = OBJECT_SELF;
object oBook = GetInventoryDisturbItem();
string sBook = GetTag(oBook);
if (sBook == "Zhaunol1")
{
DestroyObject(oBook);
CreateItemOnObject("zhaunol1", oBookShelf, 1);
}
else if (sBook == "Zhaunol2")
{
DestroyObject(oBook);
CreateItemOnObject("zhaunol2", oBookShelf, 1);
}
}[/code:1:eca408fb74]

Pero la cosa es ke tengo ke hacer uno para cada tag de libro. Me gustaría conseguir ke un único script sirviese para todos los libros. Por tanto, lo ke hago es ponerle a todos los libros en el tag “libro_” antecediendo al nombre, para ke todo lo ke empiece por ese tag, actue en este script, pero no hay manera

¿Podeis aconsejarme de algún modo? Lo toy trabajando con Dorian, pero aun no lo sacamos…

[code:1:b871b30482]
// Resurrecion
//
// Por : Veryhappy
//
//
/* Proposito : Script para resucitar a una determinada criatura un determinado numero de veces
Nota : Se puede hacer que la criatura resucite en otra diferente por ejemplo para simular la transformacion
al morir en un esqueleto
Uso : Crear una copia de este script descomentado la primera linea de codigo de main y asignarla al slot
ondeath de la criatura que resucitara
Crear una nueva criatura que sera la criatura en que resucitara y copiar este mismo script
sin descomentar la linea del main y asignarla al slot ondeath de la criatura
lLugar : Lugar donde se situara la "resurreccion" de la criatura
sCriatura : platilla (template) de la criatura a resucitar (puede ser diferente de la criatura original)
(Ver la definicion de CreateObject y el parametro sTemplate para mas detalles)
iNumres<0 para que resucite eternamente
iNumres=0 para que no resucite
iNumres>0 para que resucite iNumres veces
iEfecto : Efecto visual que aparece al resucitar la criatura (VFX_FNF_SUMMON_UNDEAD por defecto)
fRetardo : Retardo entre que desaparece el cadaver de la criatura a resucitar y la resurreccion en si
*/

void resucita(location lLugar,string sCriatura,int iEfecto,float fRetardo);

void resurreccion(location lLugar,string sCriatura,int iEfecto=VFX_FNF_SUMMON_UNDEAD,float fRetardo=0.0){
// Esperamos fRetardo para resucitar a la criatura
DelayCommand(fRetardo,resucita(lLugar,sCriatura,iEfecto,fRetardo));
}

void resucita(location lLugar,string sCriatura,int iEfecto,float fRetardo){
object oCriatura;
// Aplicamos el efecto visual que corresponda en el lugar apropiado
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(iEfecto),lLugar);
// Creamos la criatura que va a ser resucitada
ActionSpeakString("En resucita de 003 iNumres vale " + IntToString(GetLocalInt(OBJECT_SELF,"iNumres")));
if(GetLocalInt(OBJECT_SELF,"iNumres")<0){
oCriatura=CreateObject(OBJECT_TYPE_CREATURE, sCriatura, lLugar);
SetLocalInt(oCriatura,"iNumres",GetLocalInt(OBJECT_SELF,"iNumres"));
// Si tenemos que resucitarla "ad eternum" no modificamos iNumres
}
else if(GetLocalInt(OBJECT_SELF,"iNumres")>0){
// Si tenemos que resucitarla un determinado numero de veces bajamos en 1 el valor de iNumres pues ya
// ha sido resucitada una vez
oCriatura=CreateObject(OBJECT_TYPE_CREATURE, sCriatura, lLugar);
SetLocalInt(oCriatura,"iNumres",GetLocalInt(OBJECT_SELF,"iNumres")-1);
}
// En caso de que iNumres sea 1 o 0 no hay que resucitarla mas veces y por tanto no hacemos nada
}

void main(){
// Descomentar la siguiente linea de codigo para la criatura que va a ser resucitada
// Cambiar "test" por el ?tag? de la criatura en la que resucitara
// Cambiar 3 por el numero de veces que va a resucitar la criatura segun se indica arriba
//SetLocalInt(OBJECT_SELF,"iNumres",3);
resurreccion(GetLocation(OBJECT_SELF),"test");
}[/code:1:b871b30482]```

[code:1:65d252a87a]
void main()
{

object oBookShelf = OBJECT_SELF;
object oBook = GetInventoryDisturbItem();
string sBook = GetTag(oBook);
if (GetBaseItemType(oBook)==BASE_ITEM_BOOK )
{
DestroyObject(oBook);
CreateItemOnObject(sBook, oBookShelf, 1);
}
}[/code:1:65d252a87a]

El script ke me dices lo ke hace es impedir que pueda cojer el libro, porke lo destruye, pero el problema es ke NO krea otro igual en la librería :S

Solo me falta que el libro ke se destruye del inventario, se cree otra vez en la librería.

No me hagais mucho caso porque yo de script ando un poco verde. Pero…
¿No se podria conseguir poniendo a todos los libros la misma etiqueta?. Asi cuando el Pj cogiese un libro, el script eliminaria todos los libros(del inventario y de la libreria) y luego crearia otra vez todos los libros unicamente en la libreria.
Perdonarme si he dicho alguna estupidez pero como ya he dicho, yo de script…

¿Te refieres a todos los libros con el mismo TAG?

Si. Asi puede que el Aurora “piense” que todos los libros son el mismo objeto. ¿No?.

Mmm, kizas si… kizas no… si los resref son diferentes….

En cualquier caso, si lo intentas cuentanoslo.

No, si lo ke dices si ke funciona, ya que es lo ke se hacia antes, pero en vez de una biblioteca con los tag de los libros, pos con uno solo, la cosa es ke no se nos monte un follón porke todos los libros tengan el mismo tag. Y es ke llevo corregidos unos 30 de 80 y fuss… no es plan ke luego tenga ke kambiar los 80 TAGs

No se si todavía te servirá pero por siaca
[code:1:6efa6e83ee]
void main()
{

object oBookShelf = OBJECT_SELF;
object oBook = GetInventoryDisturbItem();

if (GetBaseItemType(oBook)==BASE_ITEM_BOOK )
{
object oBook1 = CopyObject(oBook, GetLocation(OBJECT_SELF), OBJECT_SELF);
DestroyObject(oBook);
}
}[/code:1:6efa6e83ee]

No he probado la funcion esa de copyObject, pero si funciona iwal k el createobject segun el lexicon debería ir, iwalmente tambien lo podrías hacer con GetResRef, y debería crear el mismo libro, digo io.
[code:1:6efa6e83ee]
void main()
{

object oBookShelf = OBJECT_SELF;
object oBook = GetInventoryDisturbItem();
string sBook = GetResRef(oBook);

if (GetBaseItemType(oBook)==BASE_ITEM_BOOK )
{
DestroyObject(oBook);
CreateItemOnObject(sBook, oBookShelf, 1);
}
}[/code:1:6efa6e83ee]

Los más activos en Scripting