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

como conseguir que desaparezcan los objetos caidos

Tambien tengo un problema, no encuentro en el vault como conseguir que cuando un bicho muera, el tesoro que deja en el suelo, pasado un rato desaparezca, no tengo ni idea de inglis, y no se como buscar la script o el .erf para hacerlo, tambien como se consigue que los objetos que deje un pj en el suelo desaparezcan como los otros, pero ese creo que sera mas dificil, por que veo en muchos server papeleras de reciclajes jejejeje Saludooooos!!!! y gracias de antemano

Pa las dos cosas podrias utilizar un DelayCommand(x.x, DestroyObject(Objeto)) Donde x.x serian los segundos que quieres k pasen antes de destruir el objeto en cuestion. Ahora bien, yo no me fio muxo del delaycommand cuando hay k retrasar la orden mas de 5 o 6 segundos, alguna vez me hapasado k se traba, no realiza la accion, la hace antes o despues, k de vez en cuando hace lo kiere vamos, asik pruebalo antes de ponerlo definitivamente.

En cuanto a donde pondrias eso, poz facil, en el caso de los bichos k mueren, en el mismo sitio k se crea el objeto del bicho muerto, justo despues le pones el delaycommand. Para los objetos k un pj pueda dejar en el suelo, si te vas al OnUnAcquireItem, en las propiedades del modulo, alli se lo puedes poner. Pero ten cuidado pork este evento se ejecuta siempre k un pj kita algo de su inventario, asik asegurate de comprobar k efectivamente lo tira al suelo, y no lo deja en otro inventario(un cofre, otro pj, una papelera, un armario…).

Ahora k lo pienso, para el caso de los objetos tirados al suelo, podrias poner DelayCommand(x.x, SignalEvent(GetModule(), event)), y despues en el onuserdefined del modulo, comprobar si el objeto tiene dueño->no esta en el suelo, antes de borrarlo; io kreo k deberia funcionar. He supuesto k sabes lo k hace el signal event, si no es asi lo dices y se explica

Espero haberte ayudado y no haberte trabado todavia mas .
Saludos.

Estoy buscando como es el tag del cadaver o bolsa, o restos, por qeu si pones que destruya el objetc_self en el guion de spawn del bicho, justo despues de generate_treasure

CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF);
DelayCommand(10.0,DestroyObject(TREASURE_TYPE_MONSTER);

(miralo en nw_c2_default9) el bicho se destruye aunque este vivo,
tendria que buscar el tag de los restos, por que si uso una script que funciona con una vara que activo:

object oArea = GetArea(OBJECT_SELF);
object oStuff = GetFirstObjectInArea(oArea);
do{
int iType = GetObjectType(oStuff);
if (iType == OBJECT_TYPE_ITEM){
int iP = GetPlotFlag(oStuff);
if (iP == TRUE){
SetPlotFlag(oStuff, FALSE);
DestroyObject(oStuff, 0.0f);
}
if (iP == FALSE){
SetPlotFlag(oStuff, FALSE);
DestroyObject(oStuff, 0.0f);
}
}

    if (iType == OBJECT_TYPE_PLACEABLE){}
     if (iType == OBJECT_TYPE_CREATURE){}
    if (iType == OBJECT_TYPE_STORE){}
   }while ((oStuff = GetNextObjectInArea(oArea)) != OBJECT_INVALID); esto destruye los items del suelo, pero los restos de los bichos no, puse en OBJECT_TYPE_ITEM puse OBJECT_TYPE_PLACEABLE, pero borra los contenedores, y los restos no los borra, no se que clase es, si supiera el tag general de los restos, podria ponerlo en la vara con el bucle, y ir borrando por areas cuando pase. Claro la solucion mas sencilla seria incluirlo en el spawn que genera el tesoro, pero no se cual es el tag para meterle el delay y el destroy. Por mas que busco no lo encuentro. Si puedes mirar el spawn de los bichos, tambien estuve mirando en el death, y conseguir la script que borra los restos, te doy un beso  <img src="/images/smileys/wink.gif" /> Bromas a parte, me parece muy dificil.

A ver, primero no se pork te fuiste al OnSpawn, io no lo nombré , lo del OnDeath acabo de mirar en el lexicon k no te va a funcionar, pork el objeto que es el monstruo se destruye solo. Ahora mismo no macuerdo si los restos del monstruo tienen el mismo tag, de todas formas, dos cosas:
Si tienes el hotu instalado, edita el monstruo, vete a la pestaña avanzado y hay un cuadro de texto que dice: tiempo de descomposicion. Eso es precisamente para lo k tu kieres. Si estas en este caso, el resto del post no te hace falta, eso funciona perfectamente.
Si no tienes el hotu, kreo k no viene eso del tiempo de descomposicion, asik lo k tienes k hacer es lo siguiente:
1.- Haz una vara k al usarla saque el tag, nombre y resref del objetivo, y que lo ponga en el log, por ejemplo podria ser asi:

[code:1:9f08dc6099]
void main()
{
object oTarget = GetItemActivatedTarget();
string sNombre = GetName(oTarget);
string sTag = GetTag(oTarget);
string sRRef = GetResRef(oTarget);

PrintString&#40;&quot;Vara sobre restos&#58; Nombre=&quot;+sNombre+&quot;; Tag=&quot;+sTag
    +&quot;; RRef=&quot;+sRRef&#41;;
AssignCommand&#40;GetFirstPC&#40;&#41;, ActionSpeakString&#40;&quot;Vara sobre restos&#58;           Nombre=&quot;+sNombre+&quot;; Tag=&quot;+sTag+&quot;; RRef=&quot;+sRRef&#41;; &#125; [/code:1:9f08dc6099]

Una vez hecha la vara, y puesto en el OnItemActivated lo necesario pa k ejecute el script, pones la vara en el modulo, pones algun bicho facilito entras al modulo, matas al bicho, y usas la vara sobre los restos
Cuando uses la vara, tu pj dira el tag el resref y el nombre del objeto, y ademas estos kedaran en el log(por si no lo sabes, el log esta en C:\NeverwinterNights\NWN\logs, si juegas en multijugador siendo el servidor, estará en C:\NeverwinterNights\NWN\logs.0).

2.-Ahora k ya tienes los datos del objeto en el log, ya vas a poder identificar el objeto en el script.
Se me ocurre k podrias hacerlo con el OnUserDefined del modulo, te explico:
Ve al OnDeath y añadele la siguiente lines al final del script:
SignalEvent(GetModule(), EventUserDefined(5000));
Esto va a lanzar un evento en el modulo, de tal forma k puedas poner en el OnUserDefined del modulo, lo k tiene k hacer cuando este evento se lanze. El numero en particular(el 5000) no importa, lo pongo tan alto por asegurar k no se confundirá con alguno de los k vienen por defecto con el juego.
Entonces, ahora vete a propiedades del modulo, pestaña sucesos, y abre el script del OnUserDefined(seguramente no tendrá ninguno, se lo creas y yata), y ahi le pones:

[code:1:9f08dc6099]
void main()
{
int iEvento = GetUserDefinedEventNumber();
object oRestos;

if&#40;iEvento == 5000&#41;
&#123;
    oRestos = GetObjectByTag&#40;&quot;AQUI DEBES PONER EL TAG DE LOS RESTOS QUE TENDRAS EN EL LOG&quot;&#41;;

    DestroyObject&#40;oRestos, X.X&#41;; //X.X es lo k tardará antes de destruir el objeto, ponlo a tu gusto
&#125; &#125; [/code:1:9f08dc6099]

Cuando el bicho al morir lanze el evento, el modulo buscará el objeto con ese tag, y lo destruirá pasados los X.X segundos

Una ultima cosa, fijate que es posible, que segun el tipo de loot que deje el bicho, los restos sean diferentes, con diferente tag, y demas. Pruebalo, pon un monton de bichos distintos en el modulo, y sigue el mismo procedimiento que te puse arriba de la vara con cada uno de ellos. Prueba si el mismo tipo de bichos siempre da los mismos datos, si todos dan lo mismo, lo k sea, y segun eso modifica el script k te puse arriba.
Tambien ten en cuenta que es posible que por lag, o cualkier cosa, si hay mas de un objeto con el mismo tag, el script no se ejecute correcta

Gracias por tu ayuda, esta muy bien eso de la vara para conocer el tag, no lo sabia. De todas formas estoy pensando en meter las hcr y luego quitar todo lo que no me gusta, si veo que no funciona probare con el truco de la vara, aunque aun no lo tengo muy claro consultare tu respuesta, para ver si puedo, pero para no complicarme, voy a meter las scripts de hcr. Gracias.

Los más activos en Scripting