Legacy:MCloudZone
From Unreal Wiki, The Unreal Engine Documentation Site
Another old class. It's mixed CloudZone and VacuumZone. It'll destroy everything (except CTF flags) like cloud zone. If player enters this zone, he can be killed instantly or like in VacuumZone.
//==========================================================
// Cloud zone is a good thing, but it destroys all actors
// that enter this zone. That's why I've created this class :)
//==========================================================
// Basicly it kills all pawns instantly or like Vacuum Zone.
// Bot's are killed instantly.
//==========================================================
// CTF flag stays :)
// Projectiles are destroyed
//==========================================================
// author: Raven
// I use Vacuum Zone code.
//==========================================================
// If You want to use this script put me in Credits.
class MCloudZone extends ZoneInfo;
var int Damage;
var name DamageType;
var() bool bKillInstantly; // Player should be killed instantly after entered this zone?
var() float KillTime; // How long to kill the player?
var() float StartFlashScale; // Fog values for client death sequence
var() Vector StartFlashFog;
var() float EndFlashScale;
var() Vector EndFlashFog;
var() float DieFOV; // Field of view when dead (interpolates)
var() float DieDrawScale; // Drawscale when dead
function BeginPlay()
{
Super.BeginPlay();
Disable('Tick');
DieFOV = FClamp( DieFOV, 1, 170 );
}
event ActorEntered( actor Other )
{
Super.ActorEntered(Other);
if (Other.IsA('Pawn'))
{
if(Other.IsA('PlayerPawn'))
{
Pawn(Other).PlaySound( Pawn(Other).Die, SLOT_Talk );
if(bKillInstantly)
{
Pawn(Other).TakeDamage(Damage, Pawn(Other),Pawn(Other).Location, Vect(0,0,0), DamageType);
}
else if(!bKillInstantly)
{
Enable('Tick');
}
}
else
Pawn(Other).TakeDamage(Damage, Pawn(Other),Pawn(Other).Location, Vect(0,0,0), DamageType);
}
else if(Other.IsA('FlagBase'))
{
return;
}
else if(Other.IsA('CTFFlag'))
{
return;
}
else if(Other.IsA('RedFlag'))
{
return;
}
else
{
Other.Destroy();
}
}
function Tick( float DeltaTime )
{
local float ratio, curScale;
local vector curFog;
local PlayerPawn pPawn;
local Pawn P;
local bool bActive;
local int OldFatness;
for ( P=Level.PawnList; P!=None; P=P.NextPawn )
{
// Ensure player hasn't been dispatched through other means already (suicide?)
if( (P.Region.Zone == self) && (P.Health > 0) )
{
ratio = FMax(0.01,float(Max(P.Fatness,128) - P.Default.Fatness)/FMax(1,(255 - P.Default.Fatness)));
ratio += DeltaTime/KillTime;
bActive = true;
// Fatness
OldFatness = P.Fatness;
P.Fatness = Max(P.Fatness,128) + Max(1, ratio * (255 - P.Default.Fatness) - (P.Fatness - P.Default.Fatness));
if ( P.Fatness < Max(OldFatness,P.Default.Fatness) )
P.Fatness = 255;
// Fog & Field of view
pPawn = PlayerPawn(P);
if( pPawn != None )
{
curScale = (EndFlashScale-StartFlashScale)*ratio + StartFlashScale;
curFog = (EndFlashFog -StartFlashFog )*ratio + StartFlashFog;
pPawn.ClientFlash( curScale, 1000 * curFog );
pPawn.SetFOVAngle( (DieFOV-pPawn.default.FOVAngle)*ratio + pPawn.default.FOVAngle);
}
if ( P.Fatness > 250 )
{
Level.Game.SpecialDamageString = DamageString;
P.TakeDamage
(
10000,
P,
P.Location,
Vect(0,0,0),
DamageType
);
MakeNormal(P);
}
}
}
if( !bActive )
Disable('Tick');
}
function MakeNormal(Pawn P)
{
local PlayerPawn PPawn;
// set the fatness back to normal
P.Fatness = P.Default.Fatness;
P.DrawScale = P.Default.DrawScale;
PPawn = PlayerPawn(P);
if( PPawn != None )
PPawn.SetFOVAngle( PPawn.Default.FOVAngle );
}
// When an actor leaves this zone.
event ActorLeaving( actor Other )
{
if( Other.bIsPawn )
MakeNormal(Pawn(Other));
Super.ActorLeaving(Other);
}
defaultproperties
{
Damage=999999
DamageType='Fell'
KillTime=2.500000
StartFlashScale=1.000000
EndFlashScale=1.000000
DieFOV=90.000000
DieDrawScale=1.000000
DamageString="%o flayed away."
bStatic=False
bKillInstantly=false;
}
Category:Legacy Mapping
Category:Legacy Custom Class (UT) \\