Aller au contenu

Photo

Help with Door Script


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

#1
Tonden_Ockay

Tonden_Ockay
  • Members
  • 575 messages

I'm using this script on a CEP placeable door and it works, but it stays open. So I would like for it to have a 15.0 second delay then close. However I'm having no luck. So I could use some help with this.

/* Use a placeable wall door. This allows for locks and traps to be
 * placed on the door and plays an animation of the user opening
 * the door.
 *
 * Works for both standard and secret doors. For standard, the tag
 * of the waypoint destination must be set to LOC_<tag of door>.
 * For secret, the waypoint should be set to LOC_<tag of detect trigger>.
 *
 * This goes in the OnUsed event handler of the actual
 * placeable door object.
 */

#include "x0_i0_secret"

void main()
{
    object oUser = GetLastUsedBy();

    // Allow for traps and locks
    if (GetIsTrapped(OBJECT_SELF)) {return;}

    if (GetLocked(OBJECT_SELF)) {
        // See if we have the key and unlock if so
        string sKey = GetTrapKeyTag(OBJECT_SELF);
        object oKey = GetItemPossessedBy(oUser, sKey);
        if (sKey != "" && GetIsObjectValid(oKey)) {
            SendMessageToPC(oUser, GetStringByStrRef(7945));
            SetLocked(OBJECT_SELF, FALSE);
        } else {
            // Print '*locked*' message and play sound
            DelayCommand(0.1, PlaySound("as_dr_locked2"));
            FloatingTextStringOnCreature("*"
                                         + GetStringByStrRef(8307)
                                         + "*",
                                         oUser);
            SendMessageToPC(oUser, GetStringByStrRef(8296));
            return;
        }
    }

    // Handle opening/closing
    if (!GetIsSecretItemOpen(OBJECT_SELF)) {
        // play animation of user opening it
        AssignCommand(oUser, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID));
        DelayCommand(1.0, ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN));
        SetIsSecretItemOpen(OBJECT_SELF, TRUE);
    } else {
        // it's open -- go through and then close
        UseSecretTransport(GetLastUsedBy());
        ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE);
        SetIsSecretItemOpen(OBJECT_SELF, FALSE);

 }
}


#2
Proleric

Proleric
  • Members
  • 2 354 messages

The last two lines could read

 

DelayCommand(15.0, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE));
DelayCommand(15.0, SetIsSecretItemOpen(OBJECT_SELF, FALSE));

 

Better still, put the two commands in a function, then use DelayCommand on the function.



#3
GhostOfGod

GhostOfGod
  • Members
  • 863 messages

The last two lines could read

DelayCommand(15.0, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE));
DelayCommand(15.0, SetIsSecretItemOpen(OBJECT_SELF, FALSE));

Better still, put the two commands in a function, then use DelayCommand on the function.

Kinda strange that it's staying open though. The script as is looks like it should be closing as soon as the player gos through. I wonder if something else is going on?



#4
Shadooow

Shadooow
  • Members
  • 4 470 messages

In a bit larger modules placeable and door animations gets bugged, takes forever to start etc. Might be whats going on there or perhaps not.