Aller au contenu

Photo

Playing a sound on a moving PC


  • Veuillez vous connecter pour répondre
2 réponses à ce sujet

#1
GIANTSWORD

GIANTSWORD
  • Members
  • 88 messages

I am trying to get a sound to play on a PC and have it move with them as they move.  

 

After I got it to work it only plays on the location of where it was activated.  I've tried playing it on the area (doesn't work) and the location obviously just plays the sound on the location.  

 

Any thoughts?

 

 

//::///////////////////////////////////////////////
//:: Shapechange
//:: NW_S0_ShapeChg.nss
//:: Copyright © 2001 Bioware Corp.
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Jan 22, 2002
//:://////////////////////////////////////////////
 
#include "x2_inc_spellhook"
 
void main()
{
 
/*
  Spellcast Hook Code
  Added 2003-06-23 by GeorgZ
  If you want to make changes to all spells,
  check x2_inc_spellhook.nss to find out more
 
*/
 
    if (!X2PreSpellCastCode())
    {
    // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
        return;
    }
 
// End of Spell Cast Hook
 
 
    //Declare major variables
    int nSpell = GetSpellId();
    object oTarget = GetSpellTargetObject();
    object oPC = OBJECT_SELF;
    effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
    effect ePoly;
    int nPoly;
    int nMetaMagic = GetMetaMagicFeat();
    int nDuration = GetCasterLevel(OBJECT_SELF);
    //Enter Metamagic conditions
    if (nMetaMagic == METAMAGIC_EXTEND)
    {
        nDuration = nDuration *2; //Duration is +100%
    }
 
    //Determine Polymorph subradial type
    if(nSpell == 392)
    {
        nPoly = POLYMORPH_TYPE_RED_DRAGON;
    }
    else if (nSpell == 393)
    {
        nPoly = POLYMORPH_TYPE_FIRE_GIANT;
    }
    else if (nSpell == 394)
    {
        nPoly = POLYMORPH_TYPE_BALOR;
    }
    else if (nSpell == 395)
    {
        nPoly = POLYMORPH_TYPE_DEATH_SLAAD;
    }
    else if (nSpell == 396)
    {
        nPoly = POLYMORPH_TYPE_IRON_GOLEM;
    }
 
    ePoly = EffectPolymorph(nPoly);
    //Fire cast spell at event for the specified target
    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_SHAPECHANGE, FALSE));
 
    //Apply the VFX impact and effects
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
    DelayCommand(0.4, AssignCommand(oTarget, ClearAllActions())); // prevents an exploit
    DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, oTarget, TurnsToSeconds(nDuration)));
    DelayCommand(0.6, AssignCommand(oPC,PlaySound("me_amidemon")));
    MusicBackgroundStop(GetArea(oTarget));
    DelayCommand(75.0, MusicBackgroundPlay(GetArea(oTarget)));
}


#2
henesua

henesua
  • Members
  • 3 879 messages

I don't believe this is "easily" possible. The problem is that an object has to have a cleared action queue to play a sound as far as i know.

 

What I mean is that I don't think you can merely use PlaySound.

 

 

One way to try this would be to adjust the creature sound list, and create a new one which has a droning sound that you want.  Create a new appearance (invisible model) in appearances.2da which has the creature sound that you created. Create a blueprint using this appearance. Spawn the creature and set to follow PC.

 

I don't know if this will work. But its the best that I think you can do. Unless maybe this can be done with a persistent vfx which has a sound and follows the PC. Haven't tried that either.


  • Rolo Kipp et GIANTSWORD aiment ceci

#3
GIANTSWORD

GIANTSWORD
  • Members
  • 88 messages

Nice suggestions!  I really like the invisible creature following the PC around, that gives me some good ideas for quest/area flavor.

 

I ended up settling with the PlaySound just working on the location and shortening the sound played from 1 minute to about 15 seconds.