I don't need to test my programs. I have an error-correcting modem.

Legacy:TriggeredZonePropertyChanger/Code

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
Actor >> TriggeredZonePropertyChanger
//   This trigger allows mappers to change some of the zone properties using a trigger.
//   The specific case this class was written for was to enable a switchable "escalator"
//   zone to be created, where the escalator could move in two directions at once.
//
//   The Zone property changer is a one way assignment of values.  It will change the
//   properties of its target zone once.  In order to revert them back to their original
//   values an additional Zone property changer object would be required (possibly triggered
//   by a round robin trigger).
//
//   Version By  Description
//   ------- --- -------------------------------------------------------------------------
//   1.00    DML Created for Pitboy from the UT Editing fourm.
class TriggeredZonePropertyChanger extends Actor;
 
var ZoneInfo     zoneObject;
var() name   TargetZoneTag;
 
var(ZoneData) vector zZoneGravity;
var(ZoneData) vector zZoneVelocity;
var(ZoneData) float  zZoneGroundFriction;
var(ZoneData) float  zZoneFluidFriction;
var(ZoneData) float  zZoneTerminalVelocity;
var(ZoneData) name   zZonePlayerEvent;
var(ZoneData) int    zDamagePerSec;
var(ZoneData) name   zDamageType;
var(ZoneData) localized string zDamageString;
var(ZoneData) localized string zZoneName;
 
//var(ZoneFlags) bool   zbWaterZone;
var(ZoneFlags) bool   zbNeutralZone;
var(ZoneFlags) bool   zbGravityZone;
var(ZoneFlags) bool   zbPainZone;
var(ZoneFlags) bool   zbDestructive;
var(ZoneFlags) bool   zbNoInventory;
var(ZoneFlags) bool   zbMoveProjectiles;
var(ZoneFlags) bool   zbBounceVelocity;
 
var(ZoneLight) byte zAmbientBrightness, zAmbientHue, zAmbientSaturation;
var(ZoneLight) color zFogColor;
var(ZoneLight) float zFogDistance;
var(ZoneLight) float zTexUPanSpeed, zTexVPanSpeed;
var(ZoneLight) vector zViewFlash, zViewFog;
 
/*
   This function is called when the event used to trigger the zone property change occurs.
   It is responsible for setting the zone properties of the target zone to the values itself
   holds.
   The Tag property of the target ZoneInfo object to update must be specified within the
   TargetZoneTag property of this object.
*/
function ZoneInfo getTargetZone()
{
	local ZoneInfo zone;
 
	if (zoneObject == None)
	{
		foreach AllActors( class 'ZoneInfo', zone, TargetZoneTag )
			zoneObject = zone;
	}
	return zoneObject;
}
 
/*
   This is the main Trigger function - it is called whenever the actor is triggered by an
   event.  It simply assigns the properties associated with this object directly to the
   ZoneInfo it points at.
*/
event Trigger( Actor Other, Pawn EventInstigator )
{
	local ZoneInfo zone;
    zone = self.getTargetZone();
 
	if ( zone != None )
	{
		zone.ZoneGravity = self.zZoneGravity;
		zone.ZoneVelocity = self.zZoneVelocity;
		zone.ZoneGroundFriction = self.zZoneGroundFriction;
		zone.ZoneFluidFriction = self.zZoneFluidFriction;
		zone.ZoneTerminalVelocity = self.zZoneTerminalVelocity;
		zone.ZonePlayerEvent = self.zZonePlayerEvent;
		zone.DamagePerSec = self.zDamagePerSec;
		zone.DamageType = self.zDamageType;
		zone.DamageString = self.zDamageString;
		zone.ZoneName = self.zZoneName;
 
          //zone.bWaterZone = self.zbWaterzone;
		zone.bNeutralZone = self.zbNeutralZone;
		zone.bGravityZone = self.zbGravityZone;
		zone.bPainZone = self.zbPainZone;
		zone.bDestructive = self.zbDestructive;
		zone.bNoInventory = self.zbNoInventory;
		zone.bMoveProjectiles = self.zbMoveProjectiles;
		zone.bBounceVelocity = self.zbBounceVelocity;
 
		zone.AmbientBrightness = self.zAmbientBrightness;
		zone.AmbientHue = self.zAmbientHue;
		zone.AmbientSaturation = self.zAmbientSaturation;
		zone.FogColor = self.zFogColor;
		zone.FogDistance = self.zFogDistance;
		zone.TexUPanSpeed = self.zTexUPanSpeed;
		zone.TexVPanSpeed = self.zTexVPanSpeed;
		zone.ViewFlash = self.zViewFlash;
		zone.ViewFog = self.zViewFog;
	}
}
 
defaultproperties
{
     zZoneGravity=(Z=-950.000000)
     zZoneGroundFriction=8.000000
     zZoneFluidFriction=1.200000
     zZoneTerminalVelocity=2500.000000
     zbMoveProjectiles=True
     zAmbientSaturation=255
     zTexUPanSpeed=1.000000
     zTexVPanSpeed=1.000000
     bHidden=true
}

Naked Monster: You can add another zone flag to make it work for water zones as well. However there is a limitation on doing that, you cannot trigger water zone to TRUE while you are in that zone, otherwise you get that "spawned in water zone" bug.

MythOpus: Hold an array of all the current players in the zone at change time and stop them from getting the bug/?

Naked Monster: http://wiki.beyondunreal.com/wiki/Rising_Water_(UT) It seems that to make it work wih water zones you need to add some more code to set up the physics of all actors inside that zone.