YawTeleporter
A special Teleporter that makes the player always change yaw (after exit from YawTeleporter) to face the direction of the directional arrow of the YawTeleporter.
Code
To use this actor, subclass Teleporter with the following code. This class has been tested offline only. See Create A Subclass and Embedding Code for how to use this script.
//============================================================================= // YawTeleporter. By Wormbo http://www.koehler-homepage.de/wormbo/ // Additional changes by AX000 // Makes actors always face the direction of the directional teleporter upon exit //============================================================================= class YawTeleporter extends Teleporter; var UTTeleEffect T; simulated function Destroyed() { if ( T != None ) T.Destroy(); Super.Destroyed(); } simulated function PostBeginPlay() { LoopAnim('Teleport', 2.0, 0.0); T = spawn(class'UTTeleeffect'); T.lifespan = 0.0; } // Accept an actor that has teleported in. simulated function bool Accept( actor Incoming, Actor Source ) { local rotator newRot, oldRot; local pawn P; // Move the actor here. Disable('Touch'); //log("Move Actor here "$tag); newRot = Incoming.Rotation; if ( bChangesYaw ) { oldRot = Incoming.Rotation; newRot.Yaw = Rotation.Yaw; } if ( Pawn(Incoming) != None ) { //tell enemies about teleport if ( Role == ROLE_Authority ) { P = Level.PawnList; While ( P != None ) { if ( P.Enemy == Incoming ) P.LastSeenPos = Incoming.Location; P = P.nextPawn; } } Pawn(Incoming).SetLocation(Location); if ( Role == ROLE_Authority || Level.TimeSeconds - LastFired > 0.5 ) { Pawn(Incoming).SetRotation(newRot); Pawn(Incoming).ViewRotation = newRot; LastFired = Level.TimeSeconds; } Pawn(Incoming).MoveTimer = -1.0; Pawn(Incoming).MoveTarget = self; PlayTeleportEffect( Incoming, false); } else { if ( !Incoming.SetLocation(Location) ) { Enable('Touch'); return false; } if ( bChangesYaw ) Incoming.SetRotation(newRot); } Enable('Touch'); if ( bChangesVelocity ) Incoming.Velocity = TargetVelocity; else { if ( bChangesYaw ) { if ( Incoming.Physics == PHYS_Walking ) OldRot.Pitch = 0; Incoming.Velocity = Incoming.Velocity << OldRot; Incoming.Velocity = Incoming.Velocity >> NewRot; (Incoming.Rotation); } if ( bReversesX ) Incoming.Velocity.X *= -1.0; if ( bReversesY ) Incoming.Velocity.Y *= -1.0; if ( bReversesZ ) Incoming.Velocity.Z *= -1.0; } // Play teleport-in effect. return true; }
Credits
Made by Wormbo.
Visible texture effect added by AX000.
History / Discussion
AX000: I wanted a teleporter that made the player always face the direction of the direction arrow when the player exited the teleporter. I asked Wormbo to make this.
Wormbo: I only changed the Teleporter script. I didn't compile or even test it, but I've heard of problems in network games. Whoever can solve these gets a cookie.
Mychaeel: What kind of network problems? (By the way, Teleporter is bStatic, so the visible animation of YawTeleporter probably doesn't play. Set bStatic=False and bNoDelete=True.)
Wormbo: As far as I've heard it the player's rotation isn't set correctly, but only in network games. I don't know if this occurs only on the clients or also on the server. Like I mentioned before: I never ha a compiled version of this teleporter.
Dante: Uhm, as far as it seems,
simulated function bool Accept( actor Incoming, Actor Source ) { return super.Accept( Incoming, None ); }
does the same, or did I miss some hidden stuff ?
Wormbo: Sounds good. I'll have someone test it.
Wormbo: This was the last fix for this script. Have a look at DelayedTeleporter for a more flexible teleporter class.
Unfallzeuge Wormbo's script doesn't work with the newer build but the 2 lines code by Dante make a damn fine job if you need a teleporter with this characteristics
Fyfe: Dante's fix works for both UT and UT200*, it's the spawn effect part that only works in UT, UT200* already spawns an effect. The above code should refact to:
For UT:
//============================================================================= // YawTeleporter. By Wormbo http://www.koehler-homepage.de/wormbo/ // Additional changes by AX000 // Makes actors always face the direction of the directional teleporter upon exit //============================================================================= class YawTeleporter extends Teleporter; var UTTeleEffect T; simulated function Destroyed() { if ( T != None ) T.Destroy(); Super.Destroyed(); } simulated function PostBeginPlay() { LoopAnim('Teleport', 2.0, 0.0); T = spawn(class'UTTeleeffect'); T.lifespan = 0.0; } // Accept an actor that has teleported in. simulated function bool Accept( actor Incoming, Actor Source ) { return Super.Accept( Incoming, None ); } DefaultProperties { bStatic=False bNoDelete=True }
For UT200*:
//============================================================================= // YawTeleporter. By Wormbo http://www.koehler-homepage.de/wormbo/ // Additional changes by AX000 // Makes actors always face the direction of the directional teleporter upon exit //============================================================================= class YawTeleporter extends Teleporter; // Accept an actor that has teleported in. simulated function bool Accept( actor Incoming, Actor Source ) { return Super.Accept( Incoming, None ); } DefaultProperties { bNoDelete=True bStatic=False }
Unless there are any objections, I'll drop this in place of the above. Unless someone sees the need for a seperate page for UT and UT200*
Category Custom Class
Category Class (UT)
Refactor Me – possibly rename to [YawTeleporter (UT)]? and use the Dante's tip to create YawTeleporter for UT2003