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

Ayuda script aura de miedo


6 respuestas al tema

#1 ognos

ognos

    Humano

  • Miembro
  • Pip
  • 48 posts

Posteado 06 June 2019 - 12:03 PM

Buenas, estoy intentando crear un objeto que al equiparlo el PJ se rodee de un aura de miedo para todo aquel que entre en el area del aura tenga que realizar una tirada de salvación o afectarle el miedo.

 

Tengo objetos que al equiparlos por scrip hacen cosas pero no lo consigo hacer con este tipo de propiedades.

 

En OnPlayerEquipItem tengo algo así (no lo pongo completo por que tengo muchas otras cosas, pero esto es lo principal:

 

RODEARSE DE UN AURA DE MIEDO

 

 

object oItem = GetPCItemLastEquipped();
object oPC   = GetPCItemLastEquippedBy();
object oSelf = OBJECT_SELF;

     if (GetTag(GetPCItemLastEquipped())=="casco_miedo")
{
    effect eAOE = EffectAreaOfEffect(AOE_MOB_FEAR);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAOE, oPC);

    object oTarget = GetEnteringObject(); // <--Aquí es donde creo que viene el problema, no se como poner que el objetivo que entra en el aura le afecte el miedo que se supone que son los siguientes efectos
    effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
    effect eDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
    effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
    effect eFear = EffectFrightened();
    effect eLink = EffectLinkEffects(eFear, eDur);
    eLink = EffectLinkEffects(eLink, eDur2);

    int nHD = GetHitDice(GetAreaOfEffectCreator());
    int nDC = 10 + GetHitDice(GetAreaOfEffectCreator())/3;
    int nDuration = GetScaledDuration(nHD, oTarget);
    if(GetIsEnemy(oTarget, GetAreaOfEffectCreator()))
    {
        //Fire cast spell at event for the specified target
        SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), SPELLABILITY_AURA_FEAR));
        //Make a saving throw check
        if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
        {
            //Apply the VFX impact and effects
            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
        }
        }
        SendMessageToPC(oPC, "Te rodeas de un aura de miedo.");
        }       
 

 

 
Vale, con esto el PJ se rodea de un aura de miedo cuando me pongo el casco. Pero hay dos problemas. El primero es que no funciona, cuando los enemigos se meten en el aura no pasa nada, lo del aura es como si fuera algo visual sólo. El segundo problema es que al cambiar de area el aura desaparece...
 
Se que simplemente poniendo la constante de AOE_MOB_FEAR no consigo nada más y el script necesitaría llamar al script de NWN de aura de miedo pero no se como hacerlo, toqueteando llegué a conseguir que el objeto al equiparlo me provocara miedo a mi solo jeje, por eso lo descarté terminar yo y pido ayuda.... (Y ya por cierto si alguien me ayuda, que tendría que poner en el evento desequipar del modulo para que borre el efecto del aura de miedo)...
 
Gracias de antemano

Editado por ognos, 06 June 2019 - 08:05 PM.


#2 MenemDoIt

MenemDoIt

    Antediluvian

  • Miembro
  • PipPipPipPipPip
  • 1223 posts

Posteado 07 June 2019 - 03:28 AM

el problema es que el script que debe tener el GetEnteringObject() es el script de OnEnter del aura en cuestion, no el script del evento OnPlayerEquipItem.

 

lo mismo se aplica a todos los demas efectos que se aplican al oTarget, eso va en el OnEnter, el unico efecto que se debe aplicar en el OnPlayerEquipItem es el aura con efecto permanente ( y el efecto visual, si el aura no lo tiene por defecto ).

 

sobre lo de que las auras se borren al cambiar de area se me ocurre que en el OnEnter de cada area agregues un chequeo para volver a activar el aura si el PJ tiene el item equipado. creo recordar que habia una mejor solucion para ese conocido bug del engine pero ahora mismo no me acuerdo xD


Editado por MenemDoIt, 07 June 2019 - 03:29 AM.

10016077DS1515734551.gif


#3 ognos

ognos

    Humano

  • Miembro
  • Pip
  • 48 posts

Posteado 07 June 2019 - 05:17 PM

El problema de cambiar entre areas ya lo he solucionado, sustituyendolo por

 

 

effect eVis = EffectVisualEffect(VFX_IMP_AURA_FEAR);
 

Sigo teniendo el problema de como aplicar a los que entran en el aura, les afecte el miedo.

 

Creo que tiene que ir con otro tipo de funciones como algo así:

 

 

oSpellTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, GetLocation(OBJECT_SELF));
 

o de otro tipo:

 

 

object oPC = GetAreaOfEffectCreator();
 

En fin, aqui sigo dandole vueltas...



#4 MenemDoIt

MenemDoIt

    Antediluvian

  • Miembro
  • PipPipPipPipPip
  • 1223 posts

Posteado 07 June 2019 - 07:53 PM

como decia, las auras tienen normalmente entre 2 y 4 scripts asociados a ella :

- el script del conjuro que activa el aura ( script independiente )

- el script que se activa cuando una criatura entra al aura ( OnEnter )

- el script que se activa cada 6 segundos ( OnHeartBeat )

- el script que se activa cuando una criatura abandona el aura ( OnExit )

 

tenes que mirar en el .2da para ver cuales script corresponden al aura de miedo que estas usando, o usar el profiler o logging del .ini para ver que scripts se han ejecutado.


Editado por MenemDoIt, 07 June 2019 - 07:54 PM.

10016077DS1515734551.gif


#5 ognos

ognos

    Humano

  • Miembro
  • Pip
  • 48 posts

Posteado 07 June 2019 - 08:30 PM

si, se que debe ser asi, pero no se como completarlo

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfAffect(1500, scriptonenter", "scriptonheartbeat", "scriptonexit"), oCaster, RoundsToSeconds(iHD));

eso

Editado por ognos, 07 June 2019 - 08:32 PM.


#6 MenemDoIt

MenemDoIt

    Antediluvian

  • Miembro
  • PipPipPipPipPip
  • 1223 posts

Posteado 07 June 2019 - 09:18 PM

dado que el efecto lo da un item y se elimina al desequiparlo probablemente quieras cambiar la duracion de temporal a permanente.

 

ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectAreaOfAffect(1500,"miedo_aura","unused","unused"),oCaster);

 

y creas el script miedo_aura y ahi metes el GetEnteringObject() con el resto del script que aplica el miedo basado en el nivel del pj, las tiradas de salvacion y demas.


10016077DS1515734551.gif


#7 ognos

ognos

    Humano

  • Miembro
  • Pip
  • 48 posts

Posteado 08 June 2019 - 09:28 AM

Puff, despues de darle tanta vueltas... que melón soy. Ya está casi solucionado, con una simple orden...

 

 

 

object oPC   = GetPCItemLastEquippedBy();

 if (GetTag(GetPCItemLastEquipped())=="casco_miedo")
        {
        AssignCommand(oPC, ExecuteScript("nw_s1_aurafear", oPC));
        }

 

Ya sólo tengo que pulirlo para desactivar el script en el evento desequipar objeto y que el aura no se borre al cambiar de area. (Editaré el script completo cuando lo tenga y lo pondré aquí.





Responder



  


A Bragol. Tus amigos te echan de menos.