*D@,4,-߬}DNNoneClientMessage instantjailSystemEngineCore UnrealShare CheckMessageBeginDied Destroyed TakeDamagePhysicsTimerbHiddenLoop Activated SpawnJail GetHumanNamePostBeginPlayAnimate bPushable JailNameUnrealI ShakeViewHitWallTouchbCollideWorld BecomePickupLoop6BuildingBlockJailIDLoop2Loop3CollisionRadiusLoop33Loop999Loop5CriticalEvent KillJail ViewPrisonerJail SetJailType JailHelp JT_Endless JT_Animals JT_Eject JT_Noisy JT_Flare JT_GlassJT_FlakTextureJT_BeepJT_NoneEventbAdminRequiredbRoofOutBoxesZBoxesYBoxesXSSBSFireShakerCollisionHeight RoofBlock JailPupaJailFly JailFlare CountDownbBlockPlayers bBlockActorsJailCow PlayFiringBringUp JailBunnyJailBoxBeep JailBarrel TraceFireProjectileFirePickupMessageCheckVisibility PlayRecoil JailBabyCow AddVelocityPlaying DetonatedEvade JailAmmoEject explodedStyleEjecterActiveProcessTraceHit NormalFirewanderSetDimensions DestroyJailPickupAmmoCount AmmoNameToggleAdminLockJT_SpinbMeshEnviroMap skinnedFrag ViewSelfJT_BugsHealth ItemNameClientInstantFlashProjectileSpeedCalcDrawOffset DesiredFOV DefaultFOV shakemag shakevert shaketimeBB AmbientSound Location bWarnTarget MomentumP HitLocation HitNormalOther HurtRadiusbBouncebAdmin ViewTarget InstigatorOwnerKiller PlayerNameNetMode PawnList bBehindViewIdValue instigatedBybRotateToDesired Acceleration Rotation VelocityChargeActivateSoundDesiredRotation RotationRate bPointing bInstantHit bRapidFire FiringSpeed FireOffsetProjectileClass bMuzzleFlashWall nextPawn PlayerID LightRadiusRifleLightSaturationBS LightTypeBots AmbientGlowCow RespawnTimeFly NaliRabbitbFixedRotationDirLightBrightness ExploSound DrawScale SteelBarrelRingExplosion VoiceBoxBabyCow Fragment1RingExplosion3FlareSpriteBallExplosionHeavyWallHitEffect SteelBoxTarydiumBarrelRocket ShellCasePupaeGenericPickupsNDamageJsteelbarrel2bChainedExplosion bDestroy NumChunksTempXTempYbStasisVictimflarel1 bFirstTick bDamagedSkins RifleAmmo FlakShellPP DamageTypeXFXrevengeAYXVRollYawSOriginR ReturnValueZPitch ScriptTextWeapon LevelInfo Inventory DecorationPlayerReplicationInfoLevelActorPawn PlayerPawn FireTextureSound RemoteRoleRoleClassPackage TextBufferObjectEnum FunctionStateRotatorVectorStructName StrPropertyStructPropertyClassProperty NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty BytePropertyM bPrimaryA2Master JailKiller Prisoner EJailType JailType bCoveredCurrentLocationTheTagJailedListNextJailedListNext2JailedListFinal JailedCountDar9av$ ::$2d]H0vf=zx2zx20!$"`+0`+0            =  ޅ=zx2zx2 0W}00 0 zx2y@@y@@zx2zx2zx2zx2zx2= zx2<";":"87eQd"[Q]You got the Jailer's Rifle!mMJailer's Rifle3h@sEB ޠ]H]HMSSTXATAB p ]H]Hzx2]H]H]H]H]Hzx2]Hzx2,zt]H]Hzx2]Hzx2zx2zx2zx2zx2zx2 `'$@3@(|u=`+0zx2 W}oBcB=]HS\S @4~q?!$փzx2 mc]"zx2@.}WdL2,zt'R p &2% <7EpBB2;g Vލ p ?lH@*cY[mNBDx({tEtEl"S GSFSrYla+"R:.:$a:$? a?&? ! ,TFlCB2F+_{g p6RPOhD2M>ИlGaC_Y2QΒ$4 pKUfK 2SȂ p  5421kg0/.-,ReHB2Vg`FL" p "$A@$ BNU]dTB2ZV ΰ6z p "$A@I@MX^8{kO {Oy%-(-'UI! a>L>(-'[ ayw*b? n[-(w+*+[!&'+a W <%w. *. *WNG _ <%w. *. *_^X B <%w. *. *BYU f=!?==-'-(6%6D?6%6D?6@?6D?6@?6D?6@??,-(o$ g2v!o$#Ha>'a@6D?@ ?6D?@ ?6D?@ ?-'-'-(-'-' A [?AAY?,-(-(o$q!V -i}v!-'#Ha@6D? N?'o$$-'-( |> - >, Ha 6a #A"@6a6 @OGB! ->,i  #@F?, L <%w. *. *LPC b^/(a?a'''& Q/ =!Qw*a/a0 /HGr//a10 @0bp<(0, 0, 00-&'X2, 2, 2`-&'%% -.%,-. %, %-&'--.D-mppppppNew dimensions: S boxes long, S boxes wide, S box(es) high, has rooflppppppNew dimensions: S boxes long, S boxes wide, S box(es) high, no roof:-&o( Length and width must be > 2, height must be > 0 with no roof or > 2 with a roof. All must be < 10. ) J <%w. *. *JRK r]h dw *M ] '  ( s\`#\w#*E|#\#'##( w)u}& J%. rBJ r'ppPlayer #SJ not foundpp"" not found P' *w*a/a0 w.*w.!*w.*w."*ra10Jail destroyed x _Dhw.*.n̾#"DC>Ch..*a .! ?,<ծ333@6@?@?&Ow***@*TZծ>><ծL>L>?ծ>?@?,r a  `8?, P8w  w  w *w. *w . w. *r  aw. *r. /a0 w.*w.!*w.*w."*ra10aJail destroyed n5T#" w*a/a0 w. *w.! *w. *w." *r  a105 6?,,36?,,365?,5Jailed  7w * 6  6,6  6?,3P6  6,6  6?,3W6  6A,6  6?,3a{$pp$, $w   :ppYou've been jailed by !!&'yourself (U.R.N. Idyit!),}%z& }&|::$w. * a !.! ). ::$ a "." + ::$  a    .  . 1.3&  1X3,p3,ppp and $ppp, and $ '%' % &a  6?,3 %X&a  6?,3 % &a  6?,3 _%&a  6?,3'&6?,3'& &6?,36?,3i,,p&,,& % &a  --'a(((6?,3 *%z&a  a--'a(((6?,3w** % &a  --'a(((6?,3 w**%&a  i--'a(((6?,3r*a  --'a(((-7'4 64?, a  4 o*M9|Beep|Boop$Beep`|Flak$Flak|Glass|Mime$Glass|Bug|Bugs$Bugs|Spin|Insane$SpinH|Flare |Gas$Flare|Noisy|Noise$Noisy|Eject$Eject|Animal|Animals$ Animalsq|SSBSR::$w.*'w.*.-$ S.S. B.S.!$None pJail type set to  Ty>+u'q!`>w.*.-'I~- ?%. S-OP--R IzBclass SSBS expands Actor; var PlayerPawn Master; var Pawn P; event PostBeginPlay() { Super.PostBeginPlay(); SetTimer(10.0, True ); } function Timer() { if ( P != None && InstantJail(Owner) != None ) { if ( Master != None && P.Health > 0 && ( PlayerPawn(P) != None || Bots(P) != None ) ) Master.ClientMessage(P.PlayerReplicationInfo.PlayerName$" has boarded the S.S. B.S.!"); P.ClientMessage("All Aboard the S.S. B.S.!"); P.SetLocation(Location); } else Destroy(); } ]class Shaker expands Actor; var PlayerPawn PP; event PostBeginPlay() { Super.PostBeginPlay(); SetTimer(0.2, True ); } function Timer() { if ( PP != None && PP.Health > 0 && InstantJail(Owner) != None ) PP.ShakeView( 0.3, 50000, 50 ); else Destroy(); } uJh -('::$w.*'w.*.-AJailer's Rifle selected; type "JailHelp" for instructions5Sorry, the Jailer's Rifle is for admins only!a +u: Shoot a pawn to put it in a box jail; cut holes in the jail by shooting the boxes. Delete the jail by shooting the translucent box.---Console Commands---G[ Jail (Name or #) ]: Jail a player by their name or ID number.c[ ViewPrisoner ]: View from the pawn you jailed. Use this command again to reset your view.n[ KillJail ]: If you can't guess what this does, type "setjailtype bug", then "jail (your name here)".u[ ToggleAdminLock ]: Changes whether non-admins can use this gun (on by default). Be careful with this one...[ SetDimensions (#) (#) (#) (True/False) ]: Sets new dimensions for the jail ( in # of boxes ) and whether it has a roof.z[ SetJailType (Name) ]: Sets special "jail types" to annoy or annihilate your prisoners; a list of these is below.v"Beep": Insanely fast random beeps. | "Flak": A flak shell downpour. | "Glass": They're off to mime boot camp.x"Bug": Pours in some death insects. | "Spin": Leave a hole; they won't find it. | "Flare": Tarydium + fire = ..."Noisy": If "Beep" isn't annoying enough. | "Eject": Look! Up in the...never mind. | "Animals": It really is a zoo in there. ^,//==================================================================== // RoofBlocks are used for special jail effects... //==================================================================== class RoofBlock expands BuildingBlock; var vector V; var Actor A, A2; function Destroyed() { if ( A != None ) A.Destroy(); Super.Destroyed(); } Auto State Animate { Begin: SetRotation( rot(0,0,0) ); if ( InstantJail(Owner).JailType == JT_Beep ) { Loop: PlaySound( Beep, SLOT_None, 1.0,, ); sleep((FRand()*1)+1.0); GoTo('Loop'); } if ( InstantJail(Owner).JailType == JT_Flak ) { V = Location; V.Z -= 30; Loop2: sleep((FRand()*10)+5); A = Spawn( class'FlakShell',,, V ); A.Velocity = vect(0,0,0); GoTo('Loop2'); } if ( InstantJail(Owner).JailType == JT_Bugs && InstantJail(Owner).bRoof ) { V = Location; V.Z -= 30; Loop3: sleep((3.0*FRand()) + 3.0); if ( A == None && FRand() > 0.5 ) A = Spawn( class'JailPupa', Owner,, V ); else if ( A == None ) A = Spawn( class'JailFly', Owner,, V ); GoTo('Loop3'); } if ( InstantJail(Owner).JailType == JT_Bugs && !InstantJail(Owner).bRoof ) { V = Location; V.Z -= 30; Loop33: sleep((3.0*FRand()) + 3.0); if ( A == None ) A = Spawn( class'JailPupa', Owner,, V ); GoTo('Loop33'); } if ( InstantJail(Owner).JailType == JT_Flare ) { V = Location; V.Z -= 51; sleep(2.0); if ( A == None ) { A = Spawn( class'JailBarrel',,, V ); } sleep(3.0); if ( bPrimary ) { V.Z += 20; A2 = Spawn( class'JailFlare',,, V ); A2.GoToState('Activated'); } } if ( InstantJail(Owner).JailType == JT_Noisy ) { V = Location; V.Z -= 30; sleep(FRand()*10.0); Loop5: sleep(FRand()*1.0); if ( A == None ) { A = Spawn( class'JailBox',,, V ); A.GoToState('Activated'); JailBox(A).Dar = Self; } GoTo('Loop5'); } if ( InstantJail(Owner).JailType == JT_Eject && bHidden == False ) { sleep(10.9); bHidden = True; SetCollision(False,False,False); } if ( InstantJail(Owner).JailType == JT_Animals ) { V = Location; V.Z -= 50; Loop6: sleep((3.0*FRand()) + 1.0); if ( A == None && FRand() > 0.6 ) { A = Spawn( class'JailBunny', Owner,, V ); A.GoToState( 'Evade', 'Wander' ); } else if ( A == None && FRand() > 0.6 ) A = Spawn( class'JailCow', Owner,, V ); else if ( A == None ) A = Spawn( class'JailBabyCow', Owner,, V ); GoTo('Loop6'); } if ( InstantJail(Owner).JailType == JT_Endless) { V = Location; V.Z -= 30; Loop999: sleep(10.0); A = Spawn( class'Rocket',,, V ); A.SetRotation(rot(-16384,0,0)); A.Velocity = 900*Vector(A.Rotation); A.Acceleration = 50*Vector(A.Rotation); GoTo('Loop999'); } } SC xa+"f:.:$ -(aff.A-'a(((ǎ?-(a''' hL  u// Pointers aren't set to none when the thing they point to is destroyed...jenius. class JailPupa expands Pupae; function Died(pawn Killer, name damageType, vector HitLocation) { if ( RoofBlock(Owner) != None ) RoofBlock(Owner).A = None; Super.Died( Killer, DamageType, HitLocation ); } p// Pointers aren't set to none when the thing they point to is destroyed...jenius. class JailFly expands Fly; function Died(pawn Killer, name damageType, vector HitLocation) { if ( RoofBlock(Owner) != None ) RoofBlock(Owner).A = None; Super.Died( Killer, DamageType, HitLocation ); } DGJ#HKN Aclass JailFlare expands Flare; state Activated { function Timer() { if( bFirstTick ) { bFirstTick=False; PlayAnim('out',0.1); PlaySound(ActivateSound); LightType = LT_Steady; LightBrightness = 250; LightRadius = 33; LightSaturation = 89; AmbientGlow = 200; SetTimer(1.0,True); AmbientSound = sound'flarel1'; } Charge--; if (Charge<=0) TakeDamage(10,None, Vect(0,0,0), Vect(0,0,0), 'Detonated'); } function TakeDamage( int NDamage, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { if (bDamaged) Return; bDamaged = True; HurtRadius(50, 50, 'exploded', 0, Location); Destroy(); } simulated function HitWall( vector HitNormal, actor Wall ) { Velocity = 0.6*(( Velocity dot HitNormal ) * HitNormal * (-2.0) + Velocity); // Reflect off Wall w/damping bRotatetoDesired=True; bFixedRotationDir=False; DesiredRotation.Pitch=0; DesiredRotation.Yaw=FRand()*65536; DesiredRotation.Roll=0; RotationRate.Yaw = RotationRate.Yaw*0.75; RotationRate.Roll = RotationRate.Roll*0.75; RotationRate.Pitch = RotationRate.Pitch*0.75; If (VSize(Velocity) < 5) { bBounce = False; SetPhysics(PHYS_None); } } Begin: Disable('Touch'); SetPhysics(PHYS_Falling); Velocity = vect(0,0,-50); SetTimer(0.25,True); DesiredRotation = RotRand(); RotationRate.Yaw = 200000*FRand() - 100000; RotationRate.Pitch = 200000*FRand() - 100000; RotationRate.Roll = 200000*FRand() - 100000; bFixedRotationDir=True; bFirstTick=True; BecomePickup(); bStasis = false; bBounce=True; bCollideWorld=True; } q(w*w..-'.?pNow viewing from your prisoner, !6'w*.j tf- i:-(-((Admin lock is now OFFg-('Admin lock is now ON r// Pointers aren't set to none when the thing they point to is destroyed...jenius. class JailCow expands Cow; function Died(pawn Killer, name damageType, vector HitLocation) { if ( RoofBlock(Owner) != None ) RoofBlock(Owner).A = None; Super.Died( Killer, DamageType, HitLocation ); } EVa+"R:.:$a:$? a?&? !:.:$6?,a?, ?,a   # ! :.:$.-6?,a@@@@er* ?a ; r*a F  !!:.:$.-6?,a@@@@r*a ;  !#:.:$6?,3a@{r*a D a@@-76?,9a M 9q!Y:.:$6?,a Aa?Sr*a , q!.,- !%:.:$ -(aff.A-'a(((:.:$ 6?,2a@@?,r* ?a S  q!X!aar* ?a V r*a Z  !F:.:$ 6?,a Aa  a+" ?9  ?,29  !$ $%#! ,H{// Pointers aren't set to none when the thing they point to is destroyed...jenius. class JailBunny expands NaliRabbit; function Died(pawn Killer, name damageType, vector HitLocation) { if ( RoofBlock(Owner) != None ) RoofBlock(Owner).A = None; Super.Died( Killer, DamageType, HitLocation ); }  +w*a k class JailBox expands VoiceBox; var RoofBlock Dar; state Activated { function HitWall (vector HitNormal, actor Wall) { Velocity = 0.5*(( Velocity dot HitNormal ) * HitNormal * (-2.0) + Velocity); // Reflect off Wall w/damping If (VSize(Velocity) < 20) { bBounce = False; bStasis = false; SetPhysics(PHYS_None); GoToState('Playing'); } } Begin: Disable('Touch'); bBounce=True; Velocity = vect(0,0,-50); DesiredRotation = RotRand(); RotationRate.Yaw = 20000*FRand() - 10000; RespawnTime = 0.0; SetPhysics(PHYS_Falling); RemoteRole = ROLE_DumbProxy; BecomePickup(); bCollideWorld = true; bStasis = false; } function Destroyed() { if ( Dar != None ) Dar.A = None; } b  aclass JailBarrel expands TarydiumBarrel; auto state active { function Timer() { local int NumChunks; local SpriteBallExplosion s; local RingExplosion3 r; Super.Timer(); if (!bDestroy) Return; NumChunks = 12; s = spawn(class'SpriteBallExplosion'); r = spawn(class'RingExplosion3',,,Location - Vect(0,0,16),rot(16384,0,0)); r.PlaySound(r.ExploSound,,6); HurtRadius( 99999, 100, 'destroyed', 0, Location ); if (bChainedExplosion) NumChunks = 4; skinnedFrag(class'Fragment1', texture'JSteelBarrel2', Vect(20000,0,0),1.0, 7); } function TakeDamage( int NDamage, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { Health -= NDamage; if ( Health <= 0 ) { bChainedExplosion = False; bDestroy=True; if ( DamageType == 'destroyed' ) { SetTimer(FRand()*0.4+0.2,False); bChainedExplosion = True; } else Timer(); Instigator = InstigatedBy; if ( Instigator != None ) MakeNoise(1.0); } } Begin: sleep(1.5); SetCollision(True,True,True); Health = 1; } Zz// Pointers aren't set to none when the thing they point to is destroyed...jenius. class JailBabyCow expands BabyCow; function Died(pawn Killer, name damageType, vector HitLocation) { if ( RoofBlock(Owner) != None ) RoofBlock(Owner).A = None; Super.Died( Killer, DamageType, HitLocation ); } \$class JailAmmo expands RifleAmmo; ^p//====================================================================== // InstantJail: able to configure and create jails around annoying players on your server. // Remember, this is only for use on @$$holes (...and Nali). // By Missileguy //====================================================================== class InstantJail expands Rifle; var() int BoxesX; var() int BoxesY; var() int BoxesZ; var() bool bRoof; var() bool bAdminRequired; var DestroyJail JailKiller; var Pawn Prisoner; enum EJailType { JT_None, JT_Beep, JT_Flak, JT_Glass, JT_Bugs, JT_Spin, JT_Flare, JT_Noisy, JT_Eject, JT_Animals, JT_Endless, }; var() EJailType JailType; replication { reliable if ( Role < ROLE_Authority ) SetDimensions, SetJailType, JailHelp, Jail, ViewPrisoner, KillJail, ToggleAdminLock; } function Fire( float Value ) { if ( true ) { GotoState('NormalFire'); if ( PlayerPawn(Owner) != None ) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); bPointing=True; PlayFiring(); if ( !bRapidFire && (FiringSpeed > 0) ) Pawn(Owner).PlayRecoil(FiringSpeed); if ( bInstantHit ) TraceFire(0.0); else ProjectileFire(ProjectileClass, ProjectileSpeed, bWarnTarget); if ( Owner.bHidden ) CheckVisibility(); } } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { local shellcase s; local vector V; local Actor A; if ( PlayerPawn(Owner) != None ) { PlayerPawn(Owner).ClientInstantFlash( -0.4, vect(650, 450, 190)); if ( PlayerPawn(Owner).DesiredFOV == PlayerPawn(Owner).DefaultFOV ) bMuzzleFlash++; } s = Spawn(class'ShellCase',Pawn(Owner), '', Owner.Location + CalcDrawOffset() + 30 * X + (2.8 * FireOffset.Y+5.0) * Y - Z * 1); if ( s != None ) { s.DrawScale = 2.0; s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.2+0.2)*Y + (FRand()*0.3+1.0) * Z)*160); } if ( Other == Level ) Spawn(class'HeavyWallHitEffect',,, HitLocation+HitNormal*9, Rotator(HitNormal)); else if ( (Other != self) && (Other != Owner) && (Other != None) ) { if ( Pawn(Other) != None && Other.Owner != Self ) SpawnJail( Pawn(Other) ); else if ( BuildingBlock(Other) != None && Other.Owner == Self ) Other.Destroy(); else if ( DestroyJail(Other) != None && DestroyJail(Other) == JailKiller ) { foreach AllActors( class'Actor', A ) if ( ( BuildingBlock(A) != None || Shaker(A) != None || SSBS(A) != None || Ejecter(A) != None ) && A.Owner == Self ) A.Destroy(); JailKiller.Destroy(); Instigator.ClientMessage("Jail destroyed"); } } } function BringUp() { Super.BringUp(); if ( !bAdminRequired || ( Level.NetMode == NM_StandAlone && PlayerPawn(Owner) != None ) || ( PlayerPawn(Owner) != None && PlayerPawn(Owner).bAdmin ) ) Instigator.ClientMessage("Jailer's Rifle selected; type \"JailHelp\" for instructions"); else { Instigator.ClientMessage("Sorry, the Jailer's Rifle is for admins only!"); Destroy(); } } simulated exec function JailHelp() { Instigator.ClientMessage("Shoot a pawn to put it in a box jail; cut holes in the jail by shooting the boxes. Delete the jail by shooting the translucent box."); Instigator.ClientMessage("---Console Commands---"); Instigator.ClientMessage("[ Jail (Name or #) ]: Jail a player by their name or ID number."); Instigator.ClientMessage("[ ViewPrisoner ]: View from the pawn you jailed. Use this command again to reset your view."); Instigator.ClientMessage("[ KillJail ]: If you can't guess what this does, type \"setjailtype bug\", then \"jail (your name here)\"."); Instigator.ClientMessage("[ ToggleAdminLock ]: Changes whether non-admins can use this gun (on by default). Be careful with this one..."); Instigator.ClientMessage("[ SetDimensions (#) (#) (#) (True/False) ]: Sets new dimensions for the jail ( in # of boxes ) and whether it has a roof."); Instigator.ClientMessage("[ SetJailType (Name) ]: Sets special \"jail types\" to annoy or annihilate your prisoners; a list of these is below."); Instigator.ClientMessage("\"Beep\": Insanely fast random beeps. | \"Flak\": A flak shell downpour. | \"Glass\": They're off to mime boot camp."); Instigator.ClientMessage("\"Bug\": Pours in some death insects. | \"Spin\": Leave a hole; they won't find it. | \"Flare\": Tarydium + fire = ..."); Instigator.ClientMessage("\"Noisy\": If \"Beep\" isn't annoying enough. | \"Eject\": Look! Up in the...never mind. | \"Animals\": It really is a zoo in there."); } simulated exec function SetDimensions( int X, int Y, int Z, optional bool bCovered ) { local bool bS; if ( X > 2 && X < 10 ) BoxesX = X; else bS = True; if ( Y > 2 && Y < 10 ) BoxesY = Y; else bS = True; if ( ((Z > 0 && !bCovered) || (Z > 2 && bCovered)) && Z < 10 ) BoxesZ = Z; else bS = True; bRoof = bCovered; if ( bRoof ) Instigator.ClientMessage("New dimensions: "$BoxesX$" boxes long, "$BoxesY$" boxes wide, "$BoxesZ$" box(es) high, has roof"); else Instigator.ClientMessage("New dimensions: "$BoxesX$" boxes long, "$BoxesY$" boxes wide, "$BoxesZ$" box(es) high, no roof"); if ( bS ) Instigator.ClientMessage("( Length and width must be > 2, height must be > 0 with no roof or > 2 with a roof. All must be < 10. )"); } simulated exec function SetJailType( string S ) { if ( S ~= "Beep" || S ~= "Boop" ) { JailType = JT_Beep; S = "Beep"; } else if ( S ~= "Flak" ) { JailType = JT_Flak; S = "Flak"; } else if ( S ~= "Glass" || S ~= "Mime" ) { JailType = JT_Glass; S = "Glass"; } else if ( S ~= "Bug" || S ~= "Bugs" ) { JailType = JT_Bugs; S = "Bugs"; } else if ( S ~= "Spin" || S ~= "Insane" ) { JailType = JT_Spin; S = "Spin"; } else if ( S ~= "Flare" || S ~= "Gas" ) { JailType = JT_Flare; S = "Flare"; } else if ( S ~= "Noisy" || S ~= "Noise" ) { JailType = JT_Noisy; S = "Noisy"; } else if ( S ~= "Eject" ) { JailType = JT_Eject; S = "Eject"; } else if ( S ~= "Animal" || S ~= "Animals" ) { JailType = JT_Animals; S = "Animals"; } else if ( S ~= "SSBS" && ( ( Level.NetMode == NM_StandAlone && PlayerPawn(Owner) != None ) || ( PlayerPawn(Owner) != None && PlayerPawn(Owner).bAdmin ) ) ) { JailType = JT_Endless; S = "S.S. B.S.!"; } else { JailType = JT_None; S = "None"; } Instigator.ClientMessage("Jail type set to "$S); } simulated exec function Jail( string Name ) { if ( Len(Name) == 1 || Int(Name) != 0 ) // user may be trying to give an ID number... { if ( JailName(Name) ) // ...but check first anyway, and if that doesn't work... return; else if ( JailID(Int(Name)) ) // ...try the ID return; else Instigator.ClientMessage("Player #"$Int(Name)$" not found"); } else { if ( !JailName(Name) ) Instigator.ClientMessage("\""$Name$"\" not found"); } } function bool JailName( string Name ) { local vector V; local Pawn P; for ( P = Level.PawnList; P != None; P = P.nextPawn ) { if ( P.GetHumanName() ~= Name ) { SpawnJail( P ); return true; } } return false; } function bool JailID( int ID ) { local vector V; local Pawn P; for ( P = Level.PawnList; P != None; P = P.nextPawn ) { if ( P.PlayerReplicationInfo.PlayerID == ID ) { SpawnJail( P ); return true; } } return false; } simulated exec function ViewPrisoner() { if ( Prisoner != None && PlayerPawn(Owner).ViewTarget != Prisoner ) { PlayerPawn(Owner).bBehindView = True; PlayerPawn(Owner).ViewTarget = Prisoner; Instigator.ClientMessage("Now viewing from your prisoner, "$Prisoner.GetHumanName(), 'Event', true); } else if ( Prisoner != None ) PlayerPawn(Owner).ViewSelf(); } simulated exec function KillJail() { local Actor A; if ( JailKiller != None ) JailKiller.Destroy(); foreach AllActors( class'Actor', A ) if ( ( BuildingBlock(A) != None || Shaker(A) != None || SSBS(A) != None || Ejecter(A) != None ) && A.Owner == Self ) A.Destroy(); Instigator.ClientMessage("Jail destroyed"); } // Uh oh... simulated exec function ToggleAdminLock() { if ( bAdminRequired ) { bAdminRequired = False; Instigator.ClientMessage("Admin lock is now OFF"); } else { bAdminRequired = True; Instigator.ClientMessage("Admin lock is now ON"); } } function Destroyed() { local BuildingBlock BB; if ( JailKiller != None ) JailKiller.Destroy(); // do a cleanup of boxes from the previous jail ( Shakers & SSBSes destroy themselves automatically ) foreach AllActors( class'BuildingBlock', BB ) if ( BB.Owner == Self ) BB.Destroy(); Super.Destroyed(); } function SpawnJail( pawn Victim ) { local vector CurrentLocation, Origin, V; local Pawn P; local Actor A; local BuildingBlock BB; local name TheTag; local int TempX, TempY; local int x, y, z; local String JailedListNext, JailedListNext2, JailedListFinal; local int JailedCount; if ( JailKiller != None ) JailKiller.Destroy(); // do a cleanup of boxes / Shakers / SSBSes from the previous jail foreach AllActors( class'Actor', A ) if ( ( BuildingBlock(A) != None || Shaker(A) != None || SSBS(A) != None || Ejecter(A) != None ) && A.Owner == Self ) A.Destroy(); CurrentLocation = Victim.Location; CurrentLocation.X -= ((BoxesX/2)*51); CurrentLocation.Y -= ((BoxesY/2)*51); CurrentLocation.Z -= ( Victim.CollisionHeight / 2 ); Origin = CurrentLocation; Prisoner = Victim; // used to view inside the jail JailedListFinal = "Jailed "; for ( P = Level.PawnList; P != None; P = P.nextPawn ) { // giant mess to check if it's a player in the box if ( ( P.Location.X > Origin.X && P.Location.X < (Origin.X+(BoxesX*51)) ) && ( P.Location.Y > Origin.Y && P.Location.Y < (Origin.Y+(BoxesY*51)) ) && ( P.Location.Z > (Origin.Z-26.0) && P.Location.Z < (Origin.Z+(BoxesZ*51)) ) ) { if ( JailedListNext2 != "" ) JailedListFinal = JailedListFinal$JailedListNext2$", "; JailedListNext2 = JailedListNext; if ( P != Instigator ) { JailedListNext = P.GetHumanName(); P.ClientMessage("You've been jailed by "$Instigator.GetHumanName()$"!", 'CriticalEvent', True); } else JailedListNext = "yourself (U.R.N. Idyit!)"; // dumb fix to make things like " a Nali" not have a space in the front if ( Len(JailedListNext) > 0 && Left(JailedListNext, 1) == " " ) JailedListNext = Right(JailedListNext, Len(JailedListNext)-1); // jail type stuff, moved here for optimization if ( JailType == JT_Spin && PlayerPawn(P) != None ) { A = Spawn( class'Shaker', self ); Shaker(A).PP = PlayerPawn(P); } else if ( JailType == JT_Eject ) { A = Spawn( class'Ejecter', self ); Ejecter(A).P = P; } else if ( JailType == JT_Endless ) { A = Spawn( class'SSBS', self,, P.Location ); SSBS(A).P = P; SSBS(A).Master = PlayerPawn(Instigator); } JailedCount += 1; } } if ( JailedCount < 2 ) JailedListFinal = JailedListFinal$JailedListNext; else if ( JailedCount == 2 ) JailedListFinal = JailedListFinal$JailedListNext$" and "$JailedListNext2; else JailedListFinal = JailedListFinal$JailedListNext$", and "$JailedListNext2; Instigator.ClientMessage(JailedListFinal); for ( z = 0; z < BoxesZ; z++ ) { for ( x = 0; x < BoxesX-1; x++ ) { Spawn( class'BuildingBlock', self,, CurrentLocation ); CurrentLocation.X += 51; } for ( y = 0; y < BoxesY-1; y++ ) { Spawn( class'BuildingBlock', self,, CurrentLocation ); CurrentLocation.Y += 51; } for ( x = 0; x < BoxesX-1; x++ ) { Spawn( class'BuildingBlock', self,, CurrentLocation ); CurrentLocation.X -= 51; } for ( y = 0; y < BoxesY-1; y++ ) { Spawn( class'BuildingBlock', self,, CurrentLocation ); CurrentLocation.Y -= 51; } if ( (z + 1) < BoxesZ ) CurrentLocation.Z += 51; } // create roof, but make it invisible and non-colliding if bRoof is false ( roof blocks are needed for many JailTypes ) TempX = BoxesX; TempY = BoxesY; while ( TempX > 1 && TempY > 1 ) { CurrentLocation.X += 51; CurrentLocation.Y += 51; if ( TempX > 3 ) TempX -= 2; else TempX = 1; if ( TempY > 3 ) TempY -= 2; else TempY = 1; for ( x = 0; x < TempX-1; x++ ) { BB = Spawn( class'RoofBlock', self,, CurrentLocation ); if ( !bRoof ) { BB.bHidden = True; BB.SetCollision(False,False,False); } CurrentLocation.X += 51; } BB = None; for ( y = 0; y < TempY-1; y++ ) { BB = Spawn( class'RoofBlock', self,, CurrentLocation ); if ( !bRoof ) { BB.bHidden = True; BB.SetCollision(False,False,False); } CurrentLocation.Y += 51; } if ( BB != None ) { BB = None; for ( x = 0; x < TempX-1; x++ ) { BB = Spawn( class'RoofBlock', self,, CurrentLocation ); if ( !bRoof ) { BB.bHidden = True; BB.SetCollision(False,False,False); } CurrentLocation.X -= 51; } } if ( BB != None ) { BB = None; for ( y = 0; y < TempY-1; y++ ) { BB = Spawn( class'RoofBlock', self,, CurrentLocation ); if ( !bRoof ) { BB.bHidden = True; BB.SetCollision(False,False,False); } CurrentLocation.Y -= 51; } } if ( BB == None ) { BB = Spawn( class'RoofBlock', self,, CurrentLocation ); if ( !bRoof ) { BB.bHidden = True; BB.SetCollision(False,False,False); } } } BB.bPrimary = True; V = BB.Location; V.Z += (32*BoxesZ); JailKiller = Spawn( class'DestroyJail', self,, V ); } `j "w-*-*  Ob--(a!9=a$$$!$Y$a?' % , *##!W eg K7 - -'HBHB![a hijk|class Ejecter expands Actor; var Pawn P; auto state Countdown { Begin: sleep(1.0); CheckMessage("Don't worry, you'll be freed in 10 seconds!"); sleep(5.0); CheckMessage("5..."); sleep(1.0); CheckMessage("4..."); sleep(1.0); CheckMessage("3..."); sleep(1.0); CheckMessage("2..."); sleep(1.0); CheckMessage("1!"); sleep(1.0); P.AddVelocity( vect(0,0,2400) ); CheckMessage("U.R.B.S.!"); Destroy(); } function CheckMessage( String M ) { if ( P != None ) P.ClientMessage(M, 'CriticalEvent', true); else Destroy(); } +EIa?Don't worry, you'll be freed in 10 seconds!a@5...a?4...a?3...a?2...a?1!a?+U#EU.R.B.S.!a jclass DestroyJail expands SteelBox; var PlayerPawn Master; Auto State Animate { function TakeDamage( int NDamage, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { // IRBS } Begin: SetRotation( rot(0,0,0) ); if ( InstantJail(Owner).JailType == JT_Eject && bHidden == False ) { sleep(10.9); bHidden = True; SetCollision(False,False,False); sleep(1.1); bHidden = False; SetCollision(True,True,True); } } )PaL>' p YTw)*)%w.*)>PCGHBWa : o><r.*:.:$-( | class BuildingBlock expands SteelBox; var() Sound Beep; var bool bPrimary; event PostBeginPlay() { Super.PostBeginPlay(); if ( InstantJail(Owner) == None || InstantJail(Owner).JailType != JT_Glass ) bHidden = False; } Auto State Animate { function TakeDamage( int NDamage, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType) { // Do nothing, you jenius! } Begin: SetRotation( rot(0,0,0) ); if ( InstantJail(Owner).JailType == JT_Beep ) { Loop: PlaySound( Beep, SLOT_None, 1.0,, ); sleep((FRand()*1)+1.0); GoTo('Loop'); } } // bHidden is true to prevent a flicker effect when a JT_Glass jail is spawned 1_a A' t w*w.*w1*% w.*w.*1<p has boarded the S.S. B.S.!!All Aboard the S.S. B.S.!a a llkdknkeltszDkfkpkzzCkwwxk^k}kmkk{[tr|wP{Rktkxk_p {SkywTlkwk|kvkqzck`pwS}Vq}U}\kpqkbq^kzks|@|Ek`kn}lzHz]|H|@p khq~GwO||I}l|Azbp zBp |A|jk{}Qkakqkfkikup pJpp {XkK{t|W{u|VxZ{o|ywYp>~[kdzRkop ppkvky{glJ}^{rzll}{qkrl||U|I|M~_~a~k~e{mwN{@p~cpzw~i~jvF3p kohMhGp p k~k{khp_kL{slO>gqP Q \>$ti>wW ]OxiO T aQFnQvH |QvvIRA_WRv{ vVvQ CWu~PWvS ^WvR jWvJ vWvL BXC NX8 [X< gX=PsX; C[clO[{ {\vD H]su T]: `]vC l]tQ x]vX E^uQ R^D _^q{ l^?ly^]me`r{ RbvK _bo[ kbob wbv[ Cc7 Oc!M [cuWhc"{ vcLbCd,N eeoG renv ~eoS KfB WfoR dfvM pfvT |fvF IgkY Vg@ cgu} og A |gMIhBhWhuS ig}LjkB ZjuRgju[ uji}BkfEPkl| ^kNAkk~lmCcjod| MqkWZqbN hqpEtqp| BrlEOrDZ]rdN wsb~ DtlN QtY[^tpN yuKhFvEnwf| wHuLxdEAze| OzfN \zTnizc W|ru c|qJ p|eN }|eEJ}u| X}bLe}m ws}":jZ >dV >bS >`hp^MDNj^R,Qpm xAF >yD^Iw U@bsU; >H_FXe)a}'[^_jyDc*tg>d[xK bzKb|Y]4MguT t!]4hAJhi+bQ ]4i,sJ\ fN C;]4@OF]4{OzJ|XrZ frT sL@~ NqZ [qT hM]4Lu(fAfqgV]4}XB UE @bS]4Fb 1h,]4v YvI OE [N xD]4lDzpZ]4E~|CQ]4.QL]4|M~ Ii\ V, /ch VRh Hh~ pL}|KzYN gg\ s"]4G @"EqG]4ux!'m! `TBt]4G v'} Pd