// Shoot it, and it spawns damaging flames that last for a duration. // :Alex class BurningFuel extends Actor Placeable; var () int BurnThreshold; // Minimum damage before it ignites? var bool bBurning,bDoneBurning,bClientBurning; // is this fuel burning? var FuelFlame Flames; // our flames! var() float BurnDuration; replication { // Variables the server should send to the client. reliable if( bNetDirty && (Role==ROLE_Authority) ) bBurning; } function TakeDamage( int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class damageType, optional int HitIndex) { if( Damage>=BurnThreshold && !bBurning && !bDoneBurning ) { SetTimer(BurnDuration,False); bBurning = true; Flames = Spawn(class 'KFMod.FuelFlame',,,location,rotation); Flames.Parent = self; if( Level.NetMode!=NM_DedicatedServer ) Spawn(class 'Old2k4.LavaDeath',,,location,rotation); } } simulated function Tick( float DeltaTime) { if( Level.NetMode==NM_DedicatedServer ) { Disable('Tick'); Return; } If( bBurning && DrawScale>0.1 ) SetDrawScale(DrawScale - 0.1*DeltaTime); } function Timer() { bBurning = false; bDoneBurning = True; if( Flames!=None ) Flames.Destroy(); } simulated function PostNetReceive() { if( bClientBurning!=bBurning ) { bClientBurning = bBurning; if( bBurning ) { Flames = Spawn(class 'KFMod.FuelFlame',,,location,rotation); Flames.Parent = self; Spawn(class 'Old2k4.LavaDeath',,,location,rotation); } else if( Flames!=None ) Flames.Destroy(); } } defaultproperties { DrawType=DT_StaticMesh bShadowCast=false bStaticLighting=true bCollideActors=true bAcceptsProjectors=false bWorldGeometry=false BurnDuration=10 RemoteRole=ROLE_SimulatedProxy bNetNotify=True }