*E@[JGYCKPjNoneClientMessage CheatKeybindConsoleCommand PlayerPawn BadActorEngineCoreKissAnnouncerVoiceSystem AntiShockHoPreCacheClient CheckAdminIPPreCacheClientStubGetPlayerPawnByPlayerName CheckActor GetHumanNameTickAddCheatKeybindMutatorTakeDamageRemoveBadActorColor SpectatorBotpack AddBadActorProcessNextActorProcessNextKeySetASHKeyBindNewPlayerLoginReceiveLocalizedMessagePostBeginPlayGetPlayerPawnByIPRemoveCheatKeybindPreCacheClientIfNecessary ShockRifleMutateAntiShockRiflePCRIASHWeaponAnitShockHoPCRIASHSpawnCatcherbScanKeybindsbKickBadActorsSpawnNotificationPostNetBeginPlaybLogAimbotKeybindsbAnnounceAimbotKeybinds YellowColorSuperShockRiflePreCacheReferences FontSizeAltFire RemoteRole NetPrioritybShockTauntKillerSuicideSetSwitchPriorityszReplacementABKeyBindThrustTimer ASHAIMBOTKB ASHBADACTORCheckReplacement DrawColor GetStringWave Victory1Taunt1AntiShockHoMessage PreventDeath GetOffset LifetimebCenter GetColor ReplaceWithRegisterDamageMutatorYPos bFadeMessagebIsConsoleMessage bIsSpecial ASHWarnIPPKiller actualDamage Momentum HitLocation MutateStringWeaponPriorityaPawn PlayerName bSnapToLevelPRIbAdminGame nextPawnOwner RelatedPRI_1OptionalObject TimeSecondsNetMode PawnList CurrentID NextMutatorbSuperRelevantValueYLNextDamageMutatorVictimIPOther DeltaTimeGetPlayerNetworkAddressbAlwaysMouseLookClipY instigatedByInv PlayerIDSender ViewRotation bSnapLevelAutoSwitchPriority Location bIsPlayer LocalMessage AnimSequenceAliasKilled bInitialized DamageTypeAPitchKeyNameiLocalMessagePluspPawn AltFireTime ScriptText ReturnValueMutator LevelInfo GameInfoPlayerReplicationInfoReplicationInfo ASHParent SpawnNotify InventoryLevelActor bLogKeybinds bLogActorsPawnbChangeAimbotKeybindsbCenterviewLimiterPlayerNetConnectionRole bReplicatedbCKBReplicatedbBAReplicated bHaveKeys bSnapDonebSnapInProgress iCurrentKBaiCheatKeybindLenaiBadActorLenaiBadActorLoggedaiUCHumanNameLeniLastCViTimer2iLastCheatKeyBindiLastBadActor iTickCounteriTimerCounter iNumActorsiNumLoggedActorsasKeysClassasCheatKeybind1asCheatKeybind2asCheatKeybind3asCheatKeybind4Package asBadActor1 asBadActor2SwitchasUCHumanName asHumanNamepMeASHSC sHumanName sUCHumanName iRelativebMoreCheatKeyBindsbMoreBadActors TextBufferxCheatKeyBindObjectNewCheatKeyBind Function xBadActorRotator NewBadActorVectorStruct StrProperty bSuicideKeybBroadcastChangeStructProperty NumASHPCRIsbPenalizeAimbotKeybindsAdminIP aiCheatersasLoggedServerActoraiLoggedServerActorLenasPlayerEventaiPlayerEventIdxiEventsPerPlayer aASHPCRI IPStringiColon SenderIP bSpectatorPIDCommandStringParameterStringCapsParameterStringPawnIPi2 bASHAdmin bPawnAdminppAdminsTempiPlayerEventIdxiMaxIDbEventsListed NamePropertyASHPCRIObjectProperty iAsterickIPOnly AdminIPOnlyFloatProperty BoolProperty iPlayerIndexiLenIP IntProperty ByteProperty RelatedPRI_2 :@@Wmq'6 ::$ܖWr8> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> YwԝX >D@M@c@@@[l2@@ @@\d@Q@mT6Bi(%&@_ @aU Nds,O7@AJ@@@H Zkkq@@@@<0yG@DY@ @@E2 @2 @ 2 @A@@F2 @?@I2 @J@K2 @L@9@N@P@o j}1@^XB@g[@]vI@d@@G@+@V@@Tr sn~ p@E eb[(wmܖԝXԝX H )4R@"@ut M @`w.@$@C@x Yz @_g5d!`apD2Q:vâ= <]?>A player with an aimbot keybind has been found on the server.=]76A player has been kicked for having a banned mutator.P]>=Bad language will result in your IP being sent to EVERYONE!!/*2"ONSMG"?*L$DCHhL@8@oeo% ::$Wr8YQZ 45$ AS@Oa@ p#jb@ ;Vc]@ ^e=ONZ@rTQ H' tW>f}$Wa/!&-GWa/!"Wa/!$Wa/!0JWAntiShockHoPlusBeta3.AntiShockRifle(}$'}$' @x#j ?$w*##D?? ~ :% - --_a/!4-w.* ~ :% -> %<->'z,ASHKS ,稨ASH[InitialKeyBind]:S%?z,ASHLA ,%!V%zl!{l[Actor]:S%pASH&D?#!?#+?!&jppp(U)#+?Yz,ASHKF ,稨ASH[KeyBindFrom]:S%?z,ASHKT ,稨ASH[KeyBindTo]:S%?z,ASHAB ,[AIMBOTKeyBind]:S%pASHHw*ya/!1 .~ :m -y m1--y-?  Q%AntiShockHo:U#c&&D?#!?#+?!&jppp(U)#+?`z,ASHBA ,ps[ActorBad]:Sps%-AmpYou have been kicked for using. Remove it from your UT System folder, And Dont come back.w.*a[ActorBad]:(Kicked)Sps%w*Na/! .~ :m -y m  Q&AntiShockHo:*pASH&D?#!?#+?!&jppp(U)#+??- ->zASHzANTISHOCKHOAntiShockHo Commands.FMUTATE ASH ScanKeybinds - Scan Player Keybinds.DMUTATE ASH LogKeybinds - Log Player Keybinds.MMUTATE ASH LogABKeybinds - Log Player Aimbot Keybinds.KMUTATE ASH LogActors - Logs all the Player's Actors.PMUTATE ASH AnnounceABKeybinds - Announce Aimbot Keybinds.kMUTATE ASH PenalizeABKeybinds - Players with Aimbot Keybinds can NOT frag opponents.LMUTATE ASH ChangeABKeybinds - Change Aimbot Keybinds.^MUTATE ASH ReplacementABKeybinds - Keybind to change Aimbot Keybinds to.IMUTATE ASH CenterviewLimiter - CenterView Limiter.HMUTATE ASH ShockTauntKiller - Shock Taunt Killer.OMUTATE ASH KickBadActors - Kick Players with Bad Actors.HMUTATE ASH ListAdmins - Lists the IPs of the AntiShockHo Admins.JMUTATE ASH AddAdmin - Add an AntiShockHo Admin.PMUTATE ASH RemoveAdmin - Remove an AntiShockHo Admin.>MUTATE ASH ListABKeybinds - Lists the Aimbot Keybinds.BMUTATE ASH AddABKeybind - Add an Aimbot Keybind.HMUTATE ASH RemoveABKeybind - Remove an Aimbot Keybind.8MUTATE ASH ListBadActors - Lists the Bad Actors.9MUTATE ASH AddBadActor - Add a Bad Actor.?MUTATE ASH RemoveBadActor - Remove a Bad Actor.QMUTATE ASH ListEvents - Lists events and abnormailities during this game.c*HINT: Make the console window larger by clicking and dragging on the console window frame.??z, ANTISHOCKHO z,ASH jz, ANTISHOCKHO , y,z, SCANKEYBINDS , 9z&?-0AntiShockHo: Scanning of Keybinds is ON!61AntiShockHo: Scanning of Keybinds is OFF!z&Oz,ON-'AntiShockHo: Scanning of Keybinds is now ACTIVE!8AntiShockHo: Scanning of Keybinds is now ACTIVE!b-(AntiShockHo: Scanning of Keybinds is now IN-ACTIVE!;AntiShockHo: Scanning of Keybinds is now IN-ACTIVE!%w*-'-ib^pAntiShockHo: Unrecognized command 'mutate' valid options are (:z, LOGKEYBINDS , z&?-Q/AntiShockHo: Logging of Keybinds is ON!0AntiShockHo: Logging of Keybinds is OFF!z&Oz,ON-'-Q'AntiShockHo: Scanning and Logging of Keybinds is now ACTIVE!7AntiShockHo: Logging of Keybinds is now ACTIVE!-Q(AntiShockHo: Logging of Keybinds is now IN-ACTIVE!:AntiShockHo: Logging of Keybinds is now IN-ACTIVE!%uw*-'--U-Qb^pAntiShockHo: Unrecognized command 'mutate' valid options are (:z,LOGABKEYBINDS ,z&?y-J6AntiShockHo: Logging of Aimbot Keybinds is ON!7AntiShockHo: Logging of Aimbot Keybinds is OFF!z&Oz,ON-'-J'AntiShockHo: Scanning and Logging of Aimbot Keybinds is now ACTIVE!>AntiShockHo: Logging of Aimbot Keybinds is now ACTIVE!-J(AntiShockHo: Logging of Aimbot Keybinds is now IN-ACTIVE!AAntiShockHo: Logging of Aimbot Keybinds is now IN-ACTIVE!%{qw*-'--E-Jb^pAntiShockHo: Unrecognized command 'mutate' valid options are (:z, LOGACTORS , z&?q-Y6AntiShockHo: Logging of Player's Actors is ON!7AntiShockHo: Logging of Player's Actors is OFF!Uz&Osz,ON-Y'AntiShockHo: Scanning and Logging of Player's Actors is now ACTIVE!>AntiShockHo: Logging of Player's Actors is now ACTIVE!-Y(AntiShockHo: Logging of Player's Actors is now IN-ACTIVE!AAntiShockHo: Logging of Player's Actors is now IN-ACTIVE!%OEw*-o-Y b^pAntiShockHo: Unrecognized command 'mutate' valid options are (:z,ANNOUNCEABKEYBINDS ,z&?Q-?9AntiShockHo: Announcing of Aimbot Keybinds is ON!:AntiShockHo: Announcing of Aimbot Keybinds is OFF!hz&Odz,ON-'-?'AntiShockHo: Scanning and Announcing of Aimbot Keybinds is now ACTIVE!AAntiShockHo: Announcing of Aimbot Keybinds is now ACTIVE!-?(AntiShockHo: Announcing of Aimbot Keybinds is now IN-ACTIVE!DAntiShockHo: Announcing of Aimbot Keybinds is now IN-ACTIVE!%bXw*-'--x-?b^pAntiShockHo: Unrecognized command 'mutate' valid options are (:J"z,CHANGEABKEYBINDS ,z&?`-P7AntiShockHo: Changing of Aimbot Keybinds is ON!8AntiShockHo: Changing of Aimbot Keybinds is OFF!G"!z&O z,ON-'-P'ppAntiShockHo: Scanning and Changing of Aimbot Keybinds is now ACTIVE! Aimbot Keybinds will be changed to '1'~ppAntiShockHo: Scanning and Changing of Aimbot Keybinds is now ACTIVE! Aimbot Keybinds will be changed to '1'q!-P(AntiShockHo: Changing of Aimbot Keybinds is now IN-ACTIVE!DAntiShockHo: Announcing of Aimbot Keybinds is now IN-ACTIVE!%!!w*-'--~-Px!bG"^pAntiShockHo: Unrecognized command 'mutate' valid options are (::%z,PENALIZEABKEYBINDS ,*#z&?"-N?AntiShockHo: Players with Aimbot Keybinds are IMPOTENT!'#<AntiShockHo: Players with Aimbot Keybinds is POTENT!7%$z&O#z,ON-'-N'AntiShockHo: Players with Aimbot Keybinds are now IMPOTENT!CAntiShockHo: Players with Aimbot Keybinds are now IMPOTENT!}$-N(AntiShockHo: Players with Aimbot Keybinds are now POTENT!AAntiShockHo: Players with Aimbot Keybinds are now POTENT!%$$w*-'-$b7%^pAntiShockHo: Unrecognized command 'mutate' valid options are (:\&z,REPLACEMENTABKEYBINDS ,%z&?ppAntiShockHo: Replacement Aimbot Keybind is '1'Y&1ppAntiShockHo: Replacement Aimbot Keybind is now '1'%V&L&w*1&b(:(z,CENTERVIEWLIMITER ,'z&?&-L.AntiShockHo: Centerview Limiter is ON!'/AntiShockHo: Centerview Limiter is OFF!((z&O'z,ON-L'AntiShockHo: Centerview Limiter is now ACTIVE!6AntiShockHo: Centerview Limiter is now ACTIVE!>(-L(AntiShockHo: Centerview Limiter is now IN-ACTIVE!9AntiShockHo: Centerview Limiter is now IN-ACTIVE!%((w*-t-LE(b(^pAntiShockHo: Unrecognized command 'mutate' valid options are (:+z,SHOCKTAUNTKILLER ,)z&?)-G.AntiShockHo: Shock Taunt Killer is ON!)/AntiShockHo: Shock Taunt Killer is OFF!+/+z&O]*z,ON-G'AntiShockHo: Shock Taunt Killer is now ACTIVE!6AntiShockHo: Shock Taunt Killer is now ACTIVE!*-G(AntiShockHo: Shock Taunt Killer is now IN-ACTIVE!9AntiShockHo: Shock Taunt Killer is now IN-ACTIVE!%)++w*-H-G*b+^pAntiShockHo: Unrecognized command 'mutate' valid options are (:".z,KICKBADACTORS ,P,z&?,-A+AntiShockHo: Kick Bad Actors is ON!M,,AntiShockHo: Kick Bad Actors is OFF!.-z&O,z,ON-A'AntiShockHo: Kick Bad Actors is now ACTIVE!3AntiShockHo: Kick Bad Actors is now ACTIVE!e--A(AntiShockHo: Kick Bad Actors is now IN-ACTIVE!6AntiShockHo: Kick Bad Actors is now IN-ACTIVE!%--w*-r-Al-b.^pAntiShockHo: Unrecognized command 'mutate' valid options are (:/z, ADDADMIN /- , ).w)*B)~B: B. /z CPlayernot found not found (or has no IP listed)./%C/,}%//,*Adding AntiShockHo Admin IP   bLISTADMINS/4This command is restricted to Server Admins.(:X2z, REMOVEADMIN 2- , )0w)*B)~B: B0 0z 9Playernot found (or has no IP listed).2%-1,}%{ 02| ,Removing AntiShockHo Admin IP 1,c}&%&&1bLISTADMINSU24This command is restricted to Server Admins.(:&4z, ADDABKEYBIND 3- , %2,} %23,ppAntiShockHo: Adding '' to the list of Aimbot Keybinds;ppAdding '' to the list of Aimbot Keybinds  b %3 3w *   3LISTABKEYBINDS#44This command is restricted to Server Admins.(:K6z,REMOVEABKEYBIND  6- ,:%4,} %{ :t46z :;Removingfrom the list of Aimbot Keybinds5,1}& % &  & 5  b %5 5w *    5LISTABKEYBINDSH64This command is restricted to Server Admins.(: 8z, ADDBADACTOR 7- , %6,}%67,ppAntiShockHo: Adding '' to the list of Bad Actors6ppAdding '' to the list of Bad Actorsb %7 7w *  i7LISTBADACTORS 84This command is restricted to Server Admins.(:(:z,REMOVEBADACTOR 9- ,:%8,}%{:Z89z:6Removingfrom the list of Bad Actorsa9,1}&%&&8b %9 9w *  9LISTBADACTORS(:4This command is restricted to Server Admins.;z, LISTADMINS;- #Current AntiShockHo Admins:%W;,}%p  &M; %) C;w)*6p )) J; %::;%  No Admin IPs assigned.;4This command is restricted to Server Admins.? Current Aimbot Keybinds:%}<,} %p  2<<%% No Aimbot Keybinds defined.<-This command is restricted to Admins.? >z, LISTBADACTORS=- ->Current Bad Actors:%=,d}%p P==%  No Bad Actors defined.>-This command is restricted to Admins.??z, LISTEVENTS?- ->Events by Player ID:a>aa-v(%?ax?+%-v' PlayerID:S&+?&!&! !x? !&p  j /?>?-v No Events to list.?-This command is restricted to Admins. vri*ib=w=*=b=b==@ b#b************************************** AntiShockHo ** Version Beta 8 ** By BDB And TheCatcher ** Recompiled by {KISS}FrEE ver.1.0 **************************************X-Ob%%!,%q*c%V%+%$K/a0 TW88TV{8%V%zl8VV%l8V}810-O' n\ uy|ّ=$:ettt> Yttttt{#Uttt{#Utttt{#Ut=$:e> Yܖ> Y{#U> Y> Y{#U{#U{#Uܖܖܖܖܖܖܖܖܖܖܖܖܖܖܖܖܖܖܖܖܖtttt{#UtԝXԝXԝXԝX=$:e> Y{#U> Y{#U> Y> Y> Y> Y{#U{#U{#U{#U{#U{#U{#U{#U{#U{#Utt> Yt{#Uttt{#U{#U> Y> Y> Ytt> Yttt> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Yܖ> Y> Y> Y> Y> Yܖܖ> Y> Y> Y> Y> Yܖܖ> Y> Y> Y> Y> Yܖ> Y> Y> Y> Y> Yܖܖ> Y> Y> Y> Y> Yܖܖ> Y> Y> Y> Y> Yܖ> Yܖ> Y> Y> Y> Yܖ> Y> Y> Y> Y> Yܖ> Y> Y> Y> Y> Yܖ> Y> Y> Y> Y> Y> Y> Y> Y> Y> Yܖ> Y> Yܖ> Y> Yܖ> Y> Yܖ> Y> Y> Y> Y> Y{#U> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> Y> YԝX )-.6*9] SUICIDE] set_Do_infoset_Do_headshot  set_Do_team  set_radar  set_do_pingset_do_noninstant set_do_shock  set_Do_180sset_Do_Technic set_do_slow set_do_auto set_Do_Behind set_Do_xyz ChocoTChocoZChocoIChocoSChocoDChocoE EZRadarEZType EZTeamShow  EZTarget  EZWeaponEZBase EZTimerEZInfo EZVoiceEZSkinEZTeamEZView]ElfBot ServerKill  ServerLaglkuSKTB_BotMyBot  ChocoBot  whPM;rh*ha/!h-  .h }u&t1e%e,dupKEYNAME Se{dIupKEYBINDING d|IGETWEAPON SHOCKRIFLEuMppSET INPUT d getweapon AntiShockRifle | getweapon ShockRiflee z3 3a/! #r3* /a0 MONr3M0 10ASH: Creating a new AntiShockHo for3 a 3 3 r *ASH: Could not spawn AnitShockHoPCRI g3'ggGD?g?G  -'- -U-Q -~-P -t-L -E-J -x-? 1 -r-A -o-Y%,d{r,2 D,d,2 E!,2 DLASTBADACTOR,d,2 ELASTBADACTOR%,{ k,2 M ,d,2 K ,,d I ,, F G,2 MLASTCHEATKEYBIND,d,2 KLASTCHEATKEYBIND,,d ILASTCHEATKEYBIND,, FLASTCHEATKEYBIND *+-q(-n(*.,*KEYNAMES{,7*KEYBINDING,-^07-U {7*0MUTATE ASHKSS,0-n'{07N-U*0MUTATE ASHKFS,007-U*0MUTATE ASHKTS,0-n'T%{T zT 7T}-n3-E*0MUTATE ASHABS,0}-x*7say AIMBOT KEYBIND:S,0-q'T-q-~*SET INPUT,,%-^'  KA~A)tr<; <,<5%K.K!MUTATE ASHLA<B< Df[&&-r%,d(%N%zf.MUTATE ASHBAf'"-oif%;{\i";;Bf\i5}i( |PQ#-N`a/!]a/! w`]-+%D?]?c`XYou were shot by a player with aimbot keybinds - so the damage has been reduced.P?,!w*$P`]g^p EBp!::$-t.-.-:.%-X-[?6. ? .$-['.$-X'-[(-X'-[(-X( F|d"%G",d"(%{"|"",d"(%{"|"|"(}"  GUQ%I,d}%{UzU,d}&%(&(&i(%  HCCC$%G$,$%{$ C$$,$%{$ C$ C$}$   KY 0.%I,} %{ Yz Y,}& %& & i%   C_E-N_a/! w_@-+%D?@?c_QYou were shot by a player with aimbot keybinds - so you have been spared.'_@`j MI; Q-z-4-6'R-6,2[zM-6(zMLASTCHEATKEYBIND -4' M} o,d,2zK-6(l<zKLASTCHEATKEYBIND -4'l K} ,,dzI-6(zILASTCHEATKEYBIND -4' I} ,AzF-6(|zFLASTCHEATKEYBIND -4' F} )-Z-k'h-kp,2zD-k(m=zDLASTBADACTOR-Z'mD(},d,2zE-k(zELASTBADACTOR-Z'E(}N-4-Z-z'N-H.`-'-o-'-^ -'a?(  o'L Vb::$'-z(-4(-Z(-^(%R%k%-[(-X(..%,%5%u%,d(%N%Aa w+rA*Could not spawn KissAnnouncerVoice.ASHSpawnCatcherAZ;%<%/a0 [FOO[99OE{9%,5%z\9E,5%OBO\95}9;10e%c%a?(' RJ{ &&@~{:0@%D{@;D{2%2,}2%@~2:@%C2@C2H~C*H%H}CzCHDH'2B( 2\US :r\.hr\*ASH - Error: Attempted to precache on something other than a PlayerPawn( ' V!-!::$   W,%!  ^ PmB-w-*u---a/!|-m.---* -ZF+ 5-ZFFaF  XSPJ}S/w/*/-/a/!#z./JSLL%.///!* ^X8(T`^w.X*S%^S,TS.X!"=S S `l *l(R?%?R?,R(w*a/!(!A!:!C!Bp. used the Wave-Shock-Combo cheat.R.7 /Rq3m!qR [// // AntiShockHoMessage Unreal Tournament Message // Version: 1.0 // Author: Steven Yaeger (from KIC by Boden Maddox) // UT Version Coded/Tested: 4.28 // class AntiShockHoMessage expands LocalMessagePlus; var(AntiShockHo) localized string ASHAIMBOTKB; var(AntiShockHo) localized string ASHBADACTOR; var(AntiShockHo) localized string ASHWarnIP; var color YellowColor; static function color GetColor( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 ) { return Default.YellowColor; } static function float GetOffset(int Switch, float YL, float ClipY ) { return ClipY - YL*8 - 0.0833*ClipY; } static function string GetString(optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject) { switch (Switch) { case 0: return Default.ASHAIMBOTKB; break; case 1: return Default.ASHBADACTOR; break; case 2: return Default.ASHWarnIP; break; } return ""; } //static simulated function ClientReceive(PlayerPawn P, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject) //{ // Super.ClientReceive(P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject); //} M// ASHSpawnCatcher //============================================================================ class ASHSpawnCatcher extends SpawnNotify; var AnitShockHoPCRI ASHParent ; simulated event Actor SpawnNotification(Actor A) { if ( ASHParent.CheckActor( A.GetHumanName() ) ) A.Destroy(); return( A ); } Nclass AntiShockRifle extends ShockRifle; var float AltFireTime; function AltFire( float Value ) { Super.AltFire(Value); AltFireTime = Level.TimeSeconds; } function Tick(float DeltaTime) { Super.Tick(DeltaTime); if(AltFireTime > 0) { if(Level.TimeSeconds - AltFireTime > 4) // 4 seconds after altfire AltFireTime = 0; if(Owner != none && Owner.IsA('PlayerPawn')) { if(Owner.AnimSequence == 'Wave' || Owner.AnimSequence == 'Thrust' || Owner.AnimSequence == 'Taunt1' || Owner.AnimSequence == 'Victory1') { log(PlayerPawn(Owner).PlayerReplicationInfo.PlayerName $ " used the Wave-Shock-Combo cheat."); AltFireTime = 0; PlayerPawn(Owner).Suicide(); } } } } function SetSwitchPriority(pawn Other) { local int i; // log("SetSwitchPriority"); if( PlayerPawn(Other) != None ) { for( i=0; i<20; i++) { if ( PlayerPawn(Other).WeaponPriority[i] == 'ShockRifle' ) { AutoSwitchPriority = i; return; } } } } c]$ 2 dɡ> YԝXԝXԝXԝXԝX> Y{#U> Y r//============================================================================= // PreCacheReplicationInfo. // // The PCRIASH is used to PreCache classes on the client. Most likely you will // want to expand this actor in to a child. It has no built in functionality // //============================================================================= class PCRIASH expands ReplicationInfo; //var bool bInitialized; // Replicated Server->Client Variables replication { // Functions that Server calls on the Client reliable if ( Role == ROLE_Authority) PreCacheClient; } // PostBeginPlay is called on the client if it is simulated, but it is before the variables have been replicated // Thus, Owner is not replicated yet // PostNetBeginPlay is called after the variables have been replicated, and so is appropriate // It is not called on the server machine (NM_Standalone or NM_Listen) because no variables are replicated to that machine // And so, PostBeginPlay is needed for those types of servers event PostBeginPlay() { //log("PostBeginPlay"); Super.PostBeginPlay(); // PreCacheClientIfNecessary(); } simulated event PostNetBeginPlay () { //log("PostNetBeginPlay"); Super.PostBeginPlay(); PreCacheClientIfNecessary(); } simulated function PreCacheClientIfNecessary () { //log("PreCacheClientIfNecessary"); if( Level.NetMode == NM_DedicatedServer ) // don't run on server return; PreCacheClient(); } simulated function bool PreCacheClient() { local PlayerPawn P; //log("PreCacheClient"); P = PlayerPawn(Owner); if (P==None) { log("ASH - Error: Attempted to precache on something other than a PlayerPawn"); return false; } PreCacheClientStub(); return true; } simulated function bool PreCacheClientStub() { return true; } fgI!b  hijflF"Vd?,1=V  dRclass AnitShockHoPCRI expands PCRIASH; var bool bScanKeybinds , bLogKeybinds , bLogActors , bKickBadActors , bChangeAimbotKeybinds , bCenterviewLimiter , bLogAimbotKeybinds , bAnnounceAimbotKeybinds , bShockTauntKiller , bReplicated , bCKBReplicated , bBAReplicated , bHaveKeys , bSnapDone , bSnapInProgress ; var int iCurrentKB , aiCheatKeybindLen[ 200 ] , aiBadActorLen[ 100 ] , aiBadActorLogged[ 100 ] , aiUCHumanNameLen[ 200 ] , iLastCV , iTimer2 , iLastCheatKeyBind , iLastBadActor , iTickCounter , iTimerCounter , iNumActors , iNumLoggedActors ; var string asKeys[ 256 ] , szReplacementABKeyBind , asCheatKeybind1[ 50 ] , asCheatKeybind2[ 50 ] , asCheatKeybind3[ 50 ] , asCheatKeybind4[ 50 ] , CheatKeybind[ 200 ] , asBadActor1[ 50 ] , asBadActor2[ 50 ] , BadActor[ 100 ] , asUCHumanName[ 200 ] , asHumanName[ 200 ] ; var PlayerPawn pMe ; var ASHSpawnCatcher ASHSC ; replication { reliable if ( Role == ROLE_Authority) bScanKeybinds , bLogKeybinds , bLogActors , bKickBadActors , bChangeAimbotKeybinds , bCenterviewLimiter , bLogAimbotKeybinds , bAnnounceAimbotKeybinds , bShockTauntKiller , szReplacementABKeyBind , asCheatKeybind1 , asCheatKeybind2 , asCheatKeybind3 , asCheatKeybind4 , asBadActor1 , asBadActor2 ; } simulated function bool PreCacheClientStub () { local int i ; local Actor A ; local String sHumanName , sUCHumanName ; if( Level.NetMode == NM_DedicatedServer ) // don't run on server return true; bReplicated = FALSE; bCKBReplicated = FALSE; bBAReplicated = FALSE; bHaveKeys = FALSE; iCurrentKB = 0; iLastCheatKeyBind = 0; iLastCV = 0; bSnapDone = False; bSnapInProgress = False; pMe = PlayerPawn( Owner ); for( i = 0; i < 200; i++ ) { aiCheatKeyBindLen[ i ] = 0; aiUCHumanNameLen[ i ] = 0; } for( i = 0; i < 100; i++ ) { aiBadActorLen[ i ] = 0; aiBadActorLogged[ i ] = 0; } ASHSC = Spawn(class 'KissAnnouncerVoice.ASHSpawnCatcher'); if (ASHSC==None) log("Could not spawn KissAnnouncerVoice.ASHSpawnCatcher"); ASHSC.ASHParent = self; iNumActors = 0; iNumLoggedActors = 0; ForEach AllActors(class 'Actor', A) { sHumanName = ""; sHumanName = A.GetHumanName(); sUCHumanName = ""; sUCHumanName = CAPS(sHumanName); if ( sUCHumanName != "" ) { for ( i = 0; ( ( i < 200 ) && ( aiUCHumanNameLen[ i ] != 0 ) ); i++ ) { if ( asUCHumanName[ i ] == sUCHumanName ) Break; } if ( ( i < 200 ) && ( aiUCHumanNameLen[ i ] == 0 ) ) { CheckActor( sHumanName ); asHumanName[ i ] = sHumanName; asUCHumanName[ i ] = sUCHumanName; aiUCHumanNameLen[ i ] = len( sUCHumanName ); iNumActors++; } } } iTickCounter = 0; iTimerCounter = 0; settimer(1,false); // check every second return true; } simulated function timer() { local PlayerPawn P ; local int i , iRelative ; local bool bMoreCheatKeyBinds , bMoreBadActors ; if ( ! bReplicated ) { if ( ! bCKBReplicated ) { bMoreCheatKeyBinds = TRUE; for( i = iLastCheatKeyBind; bMoreCheatKeyBinds; i++ ) { if ( i < 50 ) { if ( asCheatKeybind1[ i ] == "" ) bMoreCheatKeyBinds = FALSE; else if ( asCheatKeybind1[ i ] == "LASTCHEATKEYBIND" ) { CheatKeybind[ i ] = ""; bCKBReplicated = TRUE; } else { CheatKeyBind[ i ] = asCheatKeyBind1[ i ]; aiCheatKeyBindLen[ i ] = len( CheatKeyBind[ i ] ); } } else if ( i < 100 ) { iRelative = i - 50; if ( asCheatKeybind2[ iRelative ] == "" ) bMoreCheatKeyBinds = FALSE; else if ( asCheatKeybind2[ iRelative ] == "LASTCHEATKEYBIND" ) { CheatKeybind[ i ] = ""; bCKBReplicated = TRUE; } else { CheatKeyBind[ i ] = asCheatKeyBind2[ iRelative ]; aiCheatKeyBindLen[ i ] = len( CheatKeyBind[ i ] ); } } else if ( i < 150 ) { iRelative = i - 100; if ( asCheatKeybind3[ iRelative ] == "" ) bMoreCheatKeyBinds = FALSE; else if ( asCheatKeybind3[ iRelative ] == "LASTCHEATKEYBIND" ) { CheatKeybind[ i ] = ""; bCKBReplicated = TRUE; } else { CheatKeyBind[ i ] = asCheatKeyBind3[ iRelative ]; aiCheatKeyBindLen[ i ] = len( CheatKeyBind[ i ] ); } } else { iRelative = i - 150; if ( asCheatKeybind4[ iRelative ] == "" ) bMoreCheatKeyBinds = FALSE; else if ( asCheatKeybind4[ iRelative ] == "LASTCHEATKEYBIND" ) { CheatKeybind[ i ] = ""; bCKBReplicated = TRUE; } else { CheatKeyBind[ i ] = asCheatKeyBind4[ iRelative ]; aiCheatKeyBindLen[ i ] = len( CheatKeyBind[ i ] ); } } } } if ( ! bBAReplicated ) { bMoreBadActors = TRUE; for( i = iLastBadActor; bMoreBadActors; i++ ) { if ( i < 50 ) { if ( asBadActor1[ i ] == "" ) bMoreBadActors = FALSE; else if ( asBadActor1[ i ] == "LASTBADACTOR" ) { BadActor[ i ] = ""; bBAReplicated = TRUE; } else { BadActor[ i ] = asBadActor1[ i ]; aiBadActorLen[ i ] = len( BadActor[ i ] ); } } else if ( i < 100 ) { iRelative = i - 50; if ( asBadActor2[ iRelative ] == "" ) bMoreBadActors = FALSE; else if ( asBadActor2[ iRelative ] == "LASTBADACTOR" ) { BadActor[ i ] = ""; bBAReplicated = TRUE; } else { BadActor[ i ] = asBadActor2[ iRelative ]; aiBadActorLen[ i ] = len( BadActor[ i ] ); } } } } if ( ( bCKBReplicated ) && ( bBAReplicated ) ) { bReplicated = TRUE; if ( bShockTauntKiller ) SetASHKeyBind( PlayerPawn( Owner ) ); } } else { if ( bScanKeybinds ) ProcessNextKey(); if ( bLogActors ) { if ( ( ( bScanKeybinds ) && ( bHaveKeys ) ) // Don't log actors till after the keys have been logged || ( ! bScanKeyBinds ) ) // Or we aren't scaning keybinds ProcessNextActor(); } } settimer(1,false); return; } simulated function RemoveCheatKeybind( string xCheatKeyBind ) { local int i ; for ( i = 0; ( ( i < 200 ) && ( Len( CheatKeybind[ i ] ) > 0 ) && ( CheatKeybind[ i ] != xCheatKeyBind ) ); i++ ); if ( ( CheatKeybind[ i ] == xCheatKeyBind ) ) { for ( i = i; ( ( i < 200 ) && ( Len( CheatKeybind[ i + 1 ] ) > 0 ) ); i++ ) { aiCheatKeybindLen[ i ] = aiCheatKeybindLen[ i + 1 ]; CheatKeybind[ i ] = CheatKeybind[ i + 1 ]; } aiCheatKeybindLen[ i ] = 0; CheatKeybind[ i ] = ""; } return; } simulated function AddCheatKeybind( string NewCheatKeyBind ) { local int i ; for ( i = 0; ( ( i < 200 ) && ( aiCheatKeybindLen[ i ] != 0 ) && ( CheatKeybind[ i ] != NewCheatKeyBind ) ); i++ ); if ( ( i < 200 ) && ( aiCheatKeybindLen[ i ] == 0 ) && ( CheatKeybind[ i ] != NewCheatKeyBind ) ) { CheatKeybind[ i ] = NewCheatKeybind; aiCheatKeybindLen[ i ] = len(CheatKeybind[ i ] ); } return; } simulated function RemoveBadActor( string xBadActor ) { local int i ; for ( i = 0; ( ( i < 100 ) && ( Len( BadActor[ i ] ) > 0 ) && ( BadActor[ i ] != xBadActor ) ); i++ ); if ( ( BadActor[ i ] == xBadActor ) ) { for ( i = i; ( ( i < 100 ) && ( Len( BadActor[ i + 1 ] ) > 0 ) ); i++ ) { aiBadActorLen[ i ] = aiBadActorLen[ i + 1 ]; BadActor[ i ] = BadActor[ i + 1 ]; } aiBadActorLen[ i ] = 0; BadActor[ i ] = ""; } return; } simulated function AddBadActor( string NewBadActor ) { local int i ; for ( i = 0; ( ( i < 100 ) && ( aiBadActorLen[ i ] != 0 ) && ( BadActor[ i ] != NewBadActor ) ); i++ ); if ( ( i < 100 ) && ( aiBadActorLen[ i ] == 0 ) && ( BadActor[ i ] != NewBadActor ) ) { BadActor[ i ] = NewBadActor; aiBadActorLen[ i ] = len(BadActor[ i ] ); } return; } simulated function tick(float deltatime) { if (Level.NetMode == NM_Client) { if ( bCenterviewLimiter ) { if ( ( ( pMe.bSnapToLevel ) && ( ! pMe.bAlwaysMouseLook ) ) || ( pMe.bSnapLevel != 0 ) ) { if ( bSnapInProgress ) { if ( ! bSnapDone ) { if ( abs( pMe.ViewRotation.Pitch ) < 3000 ) { pMe.bSnapLevel = 0; bSnapDone = True; } } else { pMe.bSnapLevel = 0; } bSnapInProgress = TRUE; } else { bSnapDone = False; bSnapInProgress = True; } } else { bSnapDone = False; bSnapInProgress = False; } } } // if ( pMe.bSnapLevel != 0 ) // { // if ( bSnapViewLast ) // Allow one frame of CV for joystick users // { // if ( bCenterviewLimiter ) // { // iTime = Level.TimeSeconds; // if ( ( iTime - iLastMessage ) > 5 ) // { // pMe.ClientMessage("CenterView is now "); // // pMe.consolecommand("say I cant use centerview (Im a Cheater KICK me Plz?)!"); // iLastMessage = iTime; // } // pMe.bSnapLevel = 0; // } // } // bSnapViewLast = TRUE; // } // else // bSnapViewLast = FALSE; // } } simulated function bool CheckActor( string sHumanName ) { local int i ; local string sUCHumanName ; if ( bKickBadActors ) { for ( i = 0; ( ( i < 100 ) && ( aiBadActorLen[ i ] != 0 ) ); i++ ) { if ( ( aiBadActorLogged[ i ] == 0 ) && ( BadActor[ i ] == CAPS(sHumanName) ) ) { pMe.ConsoleCommand("MUTATE ASHBA"@sHumanName); return( True ); } } } if ( bLogActors ) { sUCHumanName = CAPS(sHumanName); for( i = 0; ( ( i < iNumActors ) && ( asUCHumanName[ i ] != sUCHumanName ) ); i++ ); if ( i == iNumActors ) { iNumActors++; asHumanName[ i ] = sHumanName; asUCHumanName[ i ] = sUCHumanName; aiUCHumanNameLen[ i ] = len( sUCHumanName ); } } return( False ); } simulated function ProcessNextActor() { local int i ; local PlayerPawn P ; if ( ( iNumLoggedActors < iNumActors ) && ( iNumLoggedActors < 200 ) && ( aiUCHumanNameLen[ iNumLoggedActors ] != 0 ) ) { P = PlayerPawn(Owner); P.ConsoleCommand("MUTATE ASHLA"@asHumanName[ iNumLoggedActors ]); iNumLoggedActors++; } } simulated function ProcessNextKey() { local PlayerPawn P; local string KeyName; local string Alias; local bool bSuicideKey; local bool bBroadcastChange; local int i; //log("Timer"); bSuicideKey = FALSE; bBroadcastChange = FALSE; P = PlayerPawn(Owner); KeyName = P.ConsoleCommand( "KEYNAME"@iCurrentKB ); if( KeyName != "" ) { Alias = P.ConsoleCommand( "KEYBINDING"@KeyName ); if ( ! bHaveKeys ) { asKeys[ iCurrentKB ] = Alias; if ( ( bLogKeybinds ) && ( Alias != "" ) ) P.ConsoleCommand("MUTATE ASHKS"@iCurrentKB@KeyName@ASKeys[iCurrentKB]); bBroadcastChange = TRUE; } else { if ( Caps(asKeys[ iCurrentKB ]) != Caps(Alias) ) { if ( bLogKeybinds ) P.ConsoleCommand("MUTATE ASHKF"@iCurrentKB@KeyName@ASKeys[iCurrentKB]); asKeys[ iCurrentKB ] = Alias; if ( bLogKeybinds ) P.ConsoleCommand("MUTATE ASHKT"@iCurrentKB@KeyName@ASKeys[iCurrentKB]); bBroadcastChange = TRUE; } } for ( i = 0; CheatKeybind[ i ] != ""; i++ ) { if ( CheatKeybind[ i ] == Caps(left(Alias,aiCheatKeybindLen[ i ]))) { if ( bBroadcastChange ) { if ( bLogAimbotKeybinds ) P.ConsoleCommand("MUTATE ASHAB"@iCurrentKB@KeyName@ASKeys[iCurrentKB]); if ( bAnnounceAimbotKeybinds ) P.ConsoleCommand("say AIMBOT KEYBIND:"@iCurrentKB@KeyName@ASKeys[iCurrentKB]); } bSuicideKey = TRUE; } } if ( ( bSuicideKey ) && ( bChangeAimbotKeybinds ) ) P.ConsoleCommand("SET INPUT"@KeyName@szReplacementABKeyBind); } iCurrentKB++; if ( iCurrentKB > 255 ) { iCurrentKB = 0; bHaveKeys = TRUE; } return; } simulated function SetASHKeyBind(PlayerPawn P) { local int i; local string KeyName; local string Alias; //log("SetKeyBind"); // check for GetWeapon key binding for(i=0; i<255; i++) { KeyName = P.ConsoleCommand( "KEYNAME "$i ); if( KeyName != "" ) { Alias = P.ConsoleCommand( "KEYBINDING "$KeyName ); if( Alias ~= "GETWEAPON SHOCKRIFLE") { P.ConsoleCommand("SET INPUT "$KeyName$" getweapon AntiShockRifle | getweapon ShockRifle"); //break; } } } } simulated function PreCacheReferences() { //never called - here to force precaching of meshes // spawn(class'Unreali.Brute'); } Iclass AntiShockHo extends Mutator config(AntiShockHo); var int CurrentID; var int NumASHPCRIs; var config bool bScanKeybinds; // scanning of keybinds var config bool bLogKeybinds; // Log ALL Keybinds var config bool bChangeAimbotKeybinds; // Change Aimbot keybinds var config bool bPenalizeAimbotKeybinds; // Penalize Players with Aimbot keybinds var config bool bCenterviewLimiter; // Limit Centerview var config bool bLogAimbotKeybinds; // logging of aimbot keybinds var config bool bAnnounceAimbotKeybinds; // Announcing of aimbot keybinds var config bool bShockTauntKiller; // Disable Alt-fire Shock - Taunt var config bool bKickBadActors; // Kick players with bad actors var config bool bLogActors; // Log all player's actors var config string szReplacementABKeybind; // Keybind to replace Aimbot Keybinds with var config string AdminIP[20]; // 20 administrator IPs (or fractions of IPs) var config string CheatKeybind[200]; // Aimbot Keybinds var int aiCheaters[ 256 ]; var config string BadActor[50]; // Bad Actors var string asLoggedServerActor[256]; var int aiLoggedServerActorLen[256]; var string asPlayerEvent[7680]; // Strings of player events (256 * 30) iEventsPerPlayer must be 30 var int aiPlayerEventIdx[256]; // Index to the next String of player events var bool bInitialized; var int iEventsPerPlayer; var AnitShockHoPCRI aASHPCRI[256]; function PostBeginPlay() { local int i; local Actor A; local string sHumanName; Super.PostBeginPlay(); log("*************************************"); log("* AntiShockHo *"); log("* Version Beta 8 *"); log("* By BDB And TheCatcher *"); log("* Recompiled by {KISS}FrEE ver.1.0 *"); log("*************************************"); if ( ! bInitialized ) { CurrentID = 0; NumASHPCRIs = 0; iEventsPerPlayer = 30; for ( i = 0; i < 256; i++ ) { aASHPCRI[ i ] = None; aiCheaters[ i ] = 0; aiLoggedServerActorLen[ i ] = 0; aiPlayerEventIdx[ i ] = 0; } Level.Game.RegisterDamageMutator(Self); // register ourselves as a damage mutator ForEach AllActors(class 'Actor', A) { sHumanName = ""; sHumanName = CAPS(A.GetHumanName()); if ( sHumanName != "" ) { for ( i = 0; ( ( i < 256 ) && ( aiLoggedServerActorLen[ i ] != 0 ) ); i++ ) { if ( asLoggedServerActor[ i ] == sHumanName ) Break; } if ( ( i < 256 ) && ( aiLoggedServerActorLen[ i ] == 0 ) ) { asLoggedServerActor[ i ] = sHumanName; aiLoggedServerActorLen[ i ] = len( sHumanName ); } } } } bInitialized = TRUE; } function Mutate(string MutateString, PlayerPawn Sender) { local PlayerReplicationInfo PRI; local string IP; local string IPString; local int iColon; local string SenderIP; local bool bAdmin; local bool bSpectator; local int PID; local string CommandString; local string ParameterString; local string CapsParameterString; local Pawn pPawn; local string PawnIP; local int i, i2; local bool bASHAdmin; local bool bPawnAdmin; local PlayerPawn ppAdmin; local string PlayerName; local int PlayerID; local string sHumanName; local string sTemp; local int iPlayerEventIdx; local int iMaxID; local bool bEventsListed; if ( NextMutator != None ) NextMutator.Mutate(MutateString, Sender); PRI = Sender.PlayerReplicationInfo; PID = PRI.PlayerID % 256; IPString = Sender.GetPlayerNetworkAddress(); iColon = InStr( IPString, ":" ); SenderIP = Left( IPString, iColon ); //Log("ASH[RAW]:"@PRI.PlayerID@PRI.PlayerName@SenderIP@MutateString); bAdmin = PRI.bAdmin; bSpectator = Sender.IsA('Spectator'); if ( ( Sender.bIsPlayer ) && ( NetConnection(Sender.Player)!=None ) ) { IPString = Sender.GetPlayerNetworkAddress(); iColon = InStr( IPString, ":" ); SenderIP = Left( IPString, iColon ); bASHAdmin = CheckAdminIP( SenderIP ); } else bASHAdmin = true; // No net connection - assume this person has privs if ( ( Left(Caps(MutateString),6) == "ASHKS " ) ) { ParameterString = Mid(MutateString,6); Log("ASH[InitialKeyBind]:"@PRI.PlayerID@PRI.PlayerName@SenderIP@ParameterString); } else if ( ( Left(Caps(MutateString),6) == "ASHLA " ) ) { ParameterString = Mid(MutateString,6); for( i = 0; ( ( i < 256 ) && ( aiLoggedServerActorLen[ i ] > 0 ) ); i++ ) { // Don't log actors that exist on the server also if ( CAPS( ParameterString ) == asLoggedServerActor[ i ] ) Break; } if ( CAPS( ParameterString ) != asLoggedServerActor[ i ] ) { sTemp = "[Actor]:"@PRI.PlayerID@PRI.PlayerName@SenderIP@ParameterString; Log("ASH"$sTemp); iPlayerEventIdx = ( PID * iEventsPerPlayer ) + ( aiPlayerEventIdx[ PID ] % iEventsPerPlayer ); asPlayerEvent[ iPlayerEventIdx ] = "("$Level.TimeSeconds$")"$sTemp; aiPlayerEventIdx[ PID ]++; } } else if ( ( Left(Caps(MutateString),6) == "ASHKF " ) ) { ParameterString = Mid(MutateString,6); Log("ASH[KeyBindFrom]:"@PRI.PlayerID@PRI.PlayerName@SenderIP@ParameterString); } else if ( ( Left(Caps(MutateString),6) == "ASHKT " ) ) { ParameterString = Mid(MutateString,6); Log("ASH[KeyBindTo]:"@PRI.PlayerID@PRI.PlayerName@SenderIP@ParameterString); } else if ( ( Left(Caps(MutateString),6) == "ASHAB " ) ) { ParameterString = Mid(MutateString,6); sTemp = "[AIMBOTKeyBind]:"@PRI.PlayerID@PRI.PlayerName@SenderIP@ParameterString; Log("ASH"$sTemp); for (pPawn = Level.PawnList; pPawn != None; pPawn = pPawn.NextPawn) { if (!pPawn.IsA('PlayerPawn')) { continue; } IPString = PlayerPawn(pPawn).GetPlayerNetworkAddress(); iColon = InStr( IPString, ":" ); PawnIP = Left( IPString, iColon ); bPawnAdmin = CheckAdminIP( PawnIP ); if ( ( pPawn.PlayerReplicationInfo.bAdmin ) || ( bPawnAdmin ) || ( bAnnounceAimbotKeybinds ) ) { pPawn.ReceiveLocalizedMessage(class'AntiShockHoMessage', 0); pPawn.ClientMessage("AntiShockHo:"@sTemp); } } aiCheaters[ PID ] = 1; iPlayerEventIdx = ( PID * iEventsPerPlayer ) + ( aiPlayerEventIdx[ PID ] % iEventsPerPlayer ); asPlayerEvent[ iPlayerEventIdx ] = "("$Level.TimeSeconds$")"$sTemp; aiPlayerEventIdx[ PID ]++; } else if ( ( Left(Caps(MutateString),6) == "ASHBA " ) ) { ParameterString = Mid(MutateString,6); PlayerID = PRI.PlayerID; PlayerName = PRI.PlayerName; sTemp = "[ActorBad]:"@PlayerID@PlayerName@SenderIP@ParameterString; if ( bKickBadActors ) { Sender.ClientMessage("You have been kicked for using"@ParameterString$". Remove it from your UT System folder, And Dont come back."); if (NetConnection(Sender.Player) != None) Sender.Destroy(); sTemp = "[ActorBad]:(Kicked)"@PlayerID@PlayerName@SenderIP@ParameterString; for (pPawn = Level.PawnList; pPawn != None; pPawn = pPawn.NextPawn) { if (!pPawn.IsA('PlayerPawn')) { continue; } IPString = PlayerPawn(pPawn).GetPlayerNetworkAddress(); iColon = InStr( IPString, ":" ); PawnIP = Left( IPString, iColon ); bPawnAdmin = CheckAdminIP( PawnIP ); pPawn.ReceiveLocalizedMessage(class'AntiShockHoMessage', 1); pPawn.ClientMessage("AntiShockHo:"@sTemp); } } Log("ASH"$sTemp); iPlayerEventIdx = ( PID * iEventsPerPlayer ) + ( aiPlayerEventIdx[ PID ] % iEventsPerPlayer ); asPlayerEvent[ iPlayerEventIdx ] = "("$Level.TimeSeconds$")"$sTemp; aiPlayerEventIdx[ PID ]++; } else if ( ( bAdmin ) || ( bASHAdmin ) ) { if ( ( Caps(MutateString) == "ASH" ) || ( Caps(MutateString) == "ANTISHOCKHO" ) ) { Sender.ClientMessage("AntiShockHo Commands."); Sender.ClientMessage("MUTATE ASH ScanKeybinds - Scan Player Keybinds."); Sender.ClientMessage("MUTATE ASH LogKeybinds - Log Player Keybinds."); Sender.ClientMessage("MUTATE ASH LogABKeybinds - Log Player Aimbot Keybinds."); Sender.ClientMessage("MUTATE ASH LogActors - Logs all the Player's Actors."); Sender.ClientMessage("MUTATE ASH AnnounceABKeybinds - Announce Aimbot Keybinds."); Sender.ClientMessage("MUTATE ASH PenalizeABKeybinds - Players with Aimbot Keybinds can NOT frag opponents."); Sender.ClientMessage("MUTATE ASH ChangeABKeybinds - Change Aimbot Keybinds."); Sender.ClientMessage("MUTATE ASH ReplacementABKeybinds - Keybind to change Aimbot Keybinds to."); Sender.ClientMessage("MUTATE ASH CenterviewLimiter - CenterView Limiter."); Sender.ClientMessage("MUTATE ASH ShockTauntKiller - Shock Taunt Killer."); Sender.ClientMessage("MUTATE ASH KickBadActors - Kick Players with Bad Actors."); Sender.ClientMessage("MUTATE ASH ListAdmins - Lists the IPs of the AntiShockHo Admins."); Sender.ClientMessage("MUTATE ASH AddAdmin - Add an AntiShockHo Admin."); Sender.ClientMessage("MUTATE ASH RemoveAdmin - Remove an AntiShockHo Admin."); Sender.ClientMessage("MUTATE ASH ListABKeybinds - Lists the Aimbot Keybinds."); Sender.ClientMessage("MUTATE ASH AddABKeybind - Add an Aimbot Keybind."); Sender.ClientMessage("MUTATE ASH RemoveABKeybind - Remove an Aimbot Keybind."); Sender.ClientMessage("MUTATE ASH ListBadActors - Lists the Bad Actors."); Sender.ClientMessage("MUTATE ASH AddBadActor - Add a Bad Actor."); Sender.ClientMessage("MUTATE ASH RemoveBadActor - Remove a Bad Actor."); Sender.ClientMessage("MUTATE ASH ListEvents - Lists events and abnormailities during this game."); Sender.ClientMessage("*HINT: Make the console window larger by clicking and dragging on the console window frame."); } else if ( ( Left(Caps(MutateString),12) == "ANTISHOCKHO " ) || ( Left(Caps(MutateString),4) == "ASH " ) ) { if ( Left(Caps(MutateString),12) == "ANTISHOCKHO " ) CommandString = Mid(MutateString,12); else CommandString = Mid(MutateString,4); if ( ( Left(Caps(CommandString),13) == "SCANKEYBINDS " ) ) { ParameterString = Mid(CommandString,13); if ( Left( ParameterString, 1 ) == "?" ) { if ( bScanKeybinds ) Sender.ClientMessage("AntiShockHo: Scanning of Keybinds is ON!"); else Sender.ClientMessage("AntiShockHo: Scanning of Keybinds is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bScanKeybinds = TRUE; Log("AntiShockHo: Scanning of Keybinds is now ACTIVE!"); Sender.ClientMessage("AntiShockHo: Scanning of Keybinds is now ACTIVE!"); } else { bScanKeybinds = FALSE; Log("AntiShockHo: Scanning of Keybinds is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Scanning of Keybinds is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) aASHPCRI[ i ].bScanKeybinds = bScanKeybinds; } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),12) == "LOGKEYBINDS " ) ) { ParameterString = Mid(CommandString,12); if ( Left( ParameterString, 1 ) == "?" ) { if ( bLogKeybinds ) Sender.ClientMessage("AntiShockHo: Logging of Keybinds is ON!"); else Sender.ClientMessage("AntiShockHo: Logging of Keybinds is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bScanKeybinds = TRUE; bLogKeybinds = TRUE; Log("AntiShockHo: Scanning and Logging of Keybinds is now ACTIVE!"); Sender.ClientMessage("AntiShockHo: Logging of Keybinds is now ACTIVE!"); } else { bLogKeybinds = FALSE; Log("AntiShockHo: Logging of Keybinds is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Logging of Keybinds is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) { aASHPCRI[ i ].bScanKeybinds = bScanKeybinds; aASHPCRI[ i ].bLogKeybinds = bLogKeybinds; } } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),14) == "LOGABKEYBINDS " ) ) { ParameterString = Mid(CommandString,14); if ( Left( ParameterString, 1 ) == "?" ) { if ( bLogAimbotKeybinds ) Sender.ClientMessage("AntiShockHo: Logging of Aimbot Keybinds is ON!"); else Sender.ClientMessage("AntiShockHo: Logging of Aimbot Keybinds is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bScanKeybinds = TRUE; bLogAimbotKeybinds = TRUE; Log("AntiShockHo: Scanning and Logging of Aimbot Keybinds is now ACTIVE!"); Sender.ClientMessage("AntiShockHo: Logging of Aimbot Keybinds is now ACTIVE!"); } else { bLogAimbotKeybinds = FALSE; Log("AntiShockHo: Logging of Aimbot Keybinds is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Logging of Aimbot Keybinds is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) { aASHPCRI[ i ].bScanKeybinds = bScanKeybinds; aASHPCRI[ i ].bLogAimbotKeybinds = bLogAimbotKeybinds; } } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),10) == "LOGACTORS " ) ) { ParameterString = Mid(CommandString,10); if ( Left( ParameterString, 1 ) == "?" ) { if ( bLogActors ) Sender.ClientMessage("AntiShockHo: Logging of Player's Actors is ON!"); else Sender.ClientMessage("AntiShockHo: Logging of Player's Actors is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bLogActors = TRUE; Log("AntiShockHo: Scanning and Logging of Player's Actors is now ACTIVE!"); Sender.ClientMessage("AntiShockHo: Logging of Player's Actors is now ACTIVE!"); } else { bLogActors = FALSE; Log("AntiShockHo: Logging of Player's Actors is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Logging of Player's Actors is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) aASHPCRI[ i ].bLogActors = bLogActors; } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),19) == "ANNOUNCEABKEYBINDS " ) ) { ParameterString = Mid(CommandString,19); if ( Left( ParameterString, 1 ) == "?" ) { if ( bAnnounceAimbotKeybinds ) Sender.ClientMessage("AntiShockHo: Announcing of Aimbot Keybinds is ON!"); else Sender.ClientMessage("AntiShockHo: Announcing of Aimbot Keybinds is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bScanKeybinds = TRUE; bAnnounceAimbotKeybinds = TRUE; Log("AntiShockHo: Scanning and Announcing of Aimbot Keybinds is now ACTIVE!"); Sender.ClientMessage("AntiShockHo: Announcing of Aimbot Keybinds is now ACTIVE!"); } else { bAnnounceAimbotKeybinds = FALSE; Log("AntiShockHo: Announcing of Aimbot Keybinds is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Announcing of Aimbot Keybinds is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) { aASHPCRI[ i ].bScanKeybinds = bScanKeybinds; aASHPCRI[ i ].bAnnounceAimbotKeybinds = bAnnounceAimbotKeybinds; } } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),17) == "CHANGEABKEYBINDS " ) ) { ParameterString = Mid(CommandString,17); if ( Left( ParameterString, 1 ) == "?" ) { if ( bChangeAimbotKeybinds ) Sender.ClientMessage("AntiShockHo: Changing of Aimbot Keybinds is ON!"); else Sender.ClientMessage("AntiShockHo: Changing of Aimbot Keybinds is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bScanKeybinds = TRUE; bChangeAimbotKeybinds = TRUE; Log("AntiShockHo: Scanning and Changing of Aimbot Keybinds is now ACTIVE! Aimbot Keybinds will be changed to '"$szReplacementABKeybind$"'"); Sender.ClientMessage("AntiShockHo: Scanning and Changing of Aimbot Keybinds is now ACTIVE! Aimbot Keybinds will be changed to '"$szReplacementABKeybind$"'"); } else { bChangeAimbotKeybinds = FALSE; Log("AntiShockHo: Changing of Aimbot Keybinds is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Announcing of Aimbot Keybinds is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) { aASHPCRI[ i ].bScanKeybinds = bScanKeybinds; aASHPCRI[ i ].bChangeAimbotKeybinds = bChangeAimbotKeybinds; } } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),19) == "PENALIZEABKEYBINDS " ) ) { ParameterString = Mid(CommandString,19); if ( Left( ParameterString, 1 ) == "?" ) { if ( bPenalizeAimbotKeybinds ) Sender.ClientMessage("AntiShockHo: Players with Aimbot Keybinds are IMPOTENT!"); else Sender.ClientMessage("AntiShockHo: Players with Aimbot Keybinds is POTENT!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bScanKeybinds = TRUE; bPenalizeAimbotKeybinds = TRUE; Log("AntiShockHo: Players with Aimbot Keybinds are now IMPOTENT!"); Sender.ClientMessage("AntiShockHo: Players with Aimbot Keybinds are now IMPOTENT!"); } else { bPenalizeAimbotKeybinds = FALSE; Log("AntiShockHo: Players with Aimbot Keybinds are now POTENT!"); Sender.ClientMessage("AntiShockHo: Players with Aimbot Keybinds are now POTENT!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) aASHPCRI[ i ].bScanKeybinds = bScanKeybinds; } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),22) == "REPLACEMENTABKEYBINDS " ) ) { ParameterString = Mid(CommandString,22); if ( Left( ParameterString, 1 ) == "?" ) { Log("AntiShockHo: Replacement Aimbot Keybind is '"$szReplacementABKeybind$"'"); } else { szReplacementABKeybind = ParameterString; Log("AntiShockHo: Replacement Aimbot Keybind is now '"$szReplacementABKeybind$"'"); for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) { aASHPCRI[ i ].szReplacementABKeybind = szReplacementABKeybind; } } SaveConfig(); } } else if ( ( Left(Caps(CommandString),18) == "CENTERVIEWLIMITER " ) ) { ParameterString = Mid(CommandString,18); if ( Left( ParameterString, 1 ) == "?" ) { if ( bCenterviewLimiter ) Sender.ClientMessage("AntiShockHo: Centerview Limiter is ON!"); else Sender.ClientMessage("AntiShockHo: Centerview Limiter is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bCenterviewLimiter = TRUE; Log("AntiShockHo: Centerview Limiter is now ACTIVE!"); Sender.ClientMessage("AntiShockHo: Centerview Limiter is now ACTIVE!"); } else { bCenterviewLimiter = FALSE; Log("AntiShockHo: Centerview Limiter is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Centerview Limiter is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) aASHPCRI[ i ].bCenterviewLimiter = bCenterviewLimiter; } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),17) == "SHOCKTAUNTKILLER " ) ) { ParameterString = Mid(CommandString,17); if ( Left( ParameterString, 1 ) == "?" ) { if ( bShockTauntKiller ) Sender.ClientMessage("AntiShockHo: Shock Taunt Killer is ON!"); else Sender.ClientMessage("AntiShockHo: Shock Taunt Killer is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bShockTauntKiller = TRUE; Log("AntiShockHo: Shock Taunt Killer is now ACTIVE!"); Sender.ClientMessage("AntiShockHo: Shock Taunt Killer is now ACTIVE!"); } else { bShockTauntKiller = FALSE; Log("AntiShockHo: Shock Taunt Killer is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Shock Taunt Killer is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) aASHPCRI[ i ].bShockTauntKiller = bShockTauntKiller; } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( ( Left(Caps(CommandString),14) == "KICKBADACTORS " ) ) { ParameterString = Mid(CommandString,14); if ( Left( ParameterString, 1 ) == "?" ) { if ( bKickBadActors ) Sender.ClientMessage("AntiShockHo: Kick Bad Actors is ON!"); else Sender.ClientMessage("AntiShockHo: Kick Bad Actors is OFF!"); } else if ( Caps( Left( ParameterString, 1 ) ) == "O" ) { if ( Caps( Left( ParameterString, 2 ) ) == "ON" ) { bKickBadActors = TRUE; Log("AntiShockHo: Kick Bad Actors is now ACTIVE!"); Sender.ClientMessage("AntiShockHo: Kick Bad Actors is now ACTIVE!"); } else { bKickBadActors = FALSE; Log("AntiShockHo: Kick Bad Actors is now IN-ACTIVE!"); Sender.ClientMessage("AntiShockHo: Kick Bad Actors is now IN-ACTIVE!"); } for( i = 0; i < NumASHPCRIs; i++ ) { if ( aASHPCRI[ i ] != none ) aASHPCRI[ i ].bKickBadActors = bKickBadActors; } SaveConfig(); } else Sender.ClientMessage("AntiShockHo: Unrecognized command 'mutate"@CommandString$"' valid options are "); } else if ( Left(Caps(CommandString),9) == "ADDADMIN " ) { if ( bAdmin ) { ParameterString = Mid(CommandString,9); ppAdmin = GetPlayerPawnByPlayerName( ParameterString ); if ( ppAdmin != None ) { IP = ppAdmin.GetPlayerNetworkAddress(); iColon = InStr( IP, ":" ); IPString = Left( IP, iColon ); } else IPString = ParameterString; if ( IPString == "" ) Sender.ClientMessage( "Player"@ParameterString@"not found not found (or has no IP listed)." ); else { for ( i = 0; ( ( i < 20 ) && ( Len( AdminIP[ i ] ) > 0 ) ); i++ ); if ( i < 20 ) { Sender.ClientMessage("Adding AntiShockHo Admin IP"@IPString); AdminIP[ i ] = IPString; default.AdminIP[ i ] = IPString; SaveConfig(); } CommandString = "LISTADMINS"; } } else Sender.ClientMessage("This command is restricted to Server Admins."); } else if ( Left(Caps(CommandString),12) == "REMOVEADMIN " ) { if ( bAdmin ) { ParameterString = Mid(CommandString,12); ppAdmin = GetPlayerPawnByPlayerName( ParameterString ); if ( ppAdmin != None ) { IP = ppAdmin.GetPlayerNetworkAddress(); iColon = InStr( IP, ":" ); IPString = Left( IP, iColon ); } else IPString = ParameterString; if ( IPString == "" ) Sender.ClientMessage( "Player"@ParameterString@"not found (or has no IP listed)." ); else { for ( i = 0; ( ( i < 20 ) && ( Len( AdminIP[ i ] ) > 0 ) && ( AdminIP[ i ] != IPString ) ); i++ ); if ( AdminIP[ i ] ~= IPString ) { Sender.ClientMessage("Removing AntiShockHo Admin IP"@IPString); for ( i = i; ( ( i < 99 ) && ( Len( AdminIP[ i + 1 ] ) > 0 ) ); i++ ) { AdminIP[ i ] = AdminIP[ i + 1 ]; default.AdminIP[ i ] = AdminIP[ i + 1 ]; } AdminIP[ i ] = ""; default.AdminIP[ i ] = ""; SaveConfig(); } CommandString = "LISTADMINS"; } } else Sender.ClientMessage("This command is restricted to Server Admins."); } else if ( Left(Caps(CommandString),13) == "ADDABKEYBIND " ) { if ( bAdmin ) { ParameterString = Mid(CommandString,13); for ( i = 0; ( ( i < 200 ) && ( Len( CheatKeybind[ i ] ) > 0 ) ); i++ ); if ( i < 200 ) { Log("AntiShockHo: Adding '"$ParameterString$"' to the list of Aimbot Keybinds"); Sender.ClientMessage("Adding '"$ParameterString$"' to the list of Aimbot Keybinds"); CheatKeybind[ i ] = ParameterString; default.CheatKeybind[ i ] = ParameterString; SaveConfig(); for( i2 = 0; i2 < NumASHPCRIs; i2++ ) { if ( aASHPCRI[ i2 ] != none ) aASHPCRI[ i2 ].AddCheatKeybind( Caps(CheatKeybind[i]) ); } } CommandString = "LISTABKEYBINDS"; } else Sender.ClientMessage("This command is restricted to Server Admins."); } else if ( Left(Caps(CommandString),16) == "REMOVEABKEYBIND " ) { if ( bAdmin ) { ParameterString = Mid(CommandString,16); CapsParameterString = Caps(ParameterString); for ( i = 0; ( ( i < 200 ) && ( Len( CheatKeybind[ i ] ) > 0 ) && ( Caps(CheatKeybind[ i ]) != CapsParameterString ) ); i++ ); if ( ( Caps(CheatKeybind[ i ]) == CapsParameterString ) ) { Sender.ClientMessage("Removing"@ParameterString@"from the list of Aimbot Keybinds"); for ( i = i; ( ( i < 49 ) && ( Len( CheatKeybind[ i + 1 ] ) > 0 ) ); i++ ) { CheatKeybind[ i ] = CheatKeybind[ i + 1 ]; default.CheatKeybind[ i ] = CheatKeybind[ i + 1 ]; } CheatKeybind[ i ] = ""; default.CheatKeybind[ i ] = ""; SaveConfig(); for( i2 = 0; i2 < NumASHPCRIs; i2++ ) { if ( aASHPCRI[ i2 ] != none ) aASHPCRI[ i2 ].RemoveCheatKeybind( Caps(CheatKeybind[i]) ); } CommandString = "LISTABKEYBINDS"; } } else Sender.ClientMessage("This command is restricted to Server Admins."); } else if ( Left(Caps(CommandString),12) == "ADDBADACTOR " ) { if ( bAdmin ) { ParameterString = Mid(CommandString,13); for ( i = 0; ( ( i < 200 ) && ( Len( BadActor[ i ] ) > 0 ) ); i++ ); if ( i < 200 ) { Log("AntiShockHo: Adding '"$ParameterString$"' to the list of Bad Actors"); Sender.ClientMessage("Adding '"$ParameterString$"' to the list of Bad Actors"); BadActor[ i ] = ParameterString; default.BadActor[ i ] = ParameterString; SaveConfig(); for( i2 = 0; i2 < NumASHPCRIs; i2++ ) { if ( aASHPCRI[ i2 ] != none ) aASHPCRI[ i2 ].AddBadActor( Caps(BadActor[i]) ); } } CommandString = "LISTBADACTORS"; } else Sender.ClientMessage("This command is restricted to Server Admins."); } else if ( Left(Caps(CommandString),15) == "REMOVEBADACTOR " ) { if ( bAdmin ) { ParameterString = Mid(CommandString,16); CapsParameterString = Caps(ParameterString); for ( i = 0; ( ( i < 200 ) && ( Len( BadActor[ i ] ) > 0 ) && ( Caps(BadActor[ i ]) != CapsParameterString ) ); i++ ); if ( ( Caps(BadActor[ i ]) == CapsParameterString ) ) { Sender.ClientMessage("Removing"@ParameterString@"from the list of Bad Actors"); for ( i = i; ( ( i < 49 ) && ( Len( BadActor[ i + 1 ] ) > 0 ) ); i++ ) { BadActor[ i ] = BadActor[ i + 1 ]; default.BadActor[ i ] = BadActor[ i + 1 ]; } BadActor[ i ] = ""; default.BadActor[ i ] = ""; SaveConfig(); for( i2 = 0; i2 < NumASHPCRIs; i2++ ) { if ( aASHPCRI[ i2 ] != none ) aASHPCRI[ i2 ].RemoveBadActor( Caps(BadActor[i]) ); } CommandString = "LISTBADACTORS"; } } else Sender.ClientMessage("This command is restricted to Server Admins."); } if ( Left(Caps(CommandString),10) == "LISTADMINS" ) { if ( bAdmin ) { Sender.ClientMessage("Current AntiShockHo Admins:"); for ( i = 0; ( ( i < 20 ) && ( Len( AdminIP[ i ] ) > 0 ) ); i++ ) { Sender.ClientMessage(" "$AdminIP[ i ]); i2 = 1; While ( i2 > 0 ) { ppAdmin = GetPlayerPawnByIP( AdminIP[ i ], i2 ); if ( ppAdmin != None ) { Sender.ClientMessage(" "$ppAdmin.PlayerReplicationInfo.PlayerName@ppAdmin.GetPlayerNetworkAddress()); i2++; } else i2 = 0; } } if ( 0 == i ) Sender.ClientMessage(" No Admin IPs assigned."); } else Sender.ClientMessage("This command is restricted to Server Admins."); } else if ( Left(Caps(CommandString),14) == "LISTABKEYBINDS" ) { if ( ( bAdmin ) || ( bASHAdmin ) ) { Sender.ClientMessage("Current Aimbot Keybinds:"); for ( i = 0; ( ( i < 200 ) && ( Len( CheatKeybind[ i ] ) > 0 ) ); i++ ) Sender.ClientMessage(" "$CheatKeybind[ i ]); if ( 0 == i ) Sender.ClientMessage(" No Aimbot Keybinds defined."); } else Sender.ClientMessage("This command is restricted to Admins."); } else if ( Left(Caps(CommandString),13) == "LISTBADACTORS" ) { if ( ( bAdmin ) || ( bASHAdmin ) ) { Sender.ClientMessage("Current Bad Actors:"); for ( i = 0; ( ( i < 100 ) && ( Len( BadActor[ i ] ) > 0 ) ); i++ ) Sender.ClientMessage(" "$BadActor[ i ]); if ( 0 == i ) Sender.ClientMessage(" No Bad Actors defined."); } else Sender.ClientMessage("This command is restricted to Admins."); } else if ( Left(Caps(CommandString),10) == "LISTEVENTS" ) { if ( ( bAdmin ) || ( bASHAdmin ) ) { Sender.ClientMessage("Events by Player ID:"); iMaxID = Level.Game.CurrentID; if ( iMaxID > 256 ) iMaxID = 256; bEventsListed = False; for ( i = 0; i < iMaxID; i++ ) { if ( aiPlayerEventIdx[ i ] > 0 ) { bEventsListed = True; Sender.ClientMessage(" PlayerID:"@i); iPlayerEventIdx = aiPlayerEventIdx[ i ]; if ( iPlayerEventIdx > iEventsPerPlayer ) iPlayerEventIdx = iEventsPerPlayer; for( i2 = i * iEventsPerPlayer; i2 < ( i * iEventsPerPlayer ) + iPlayerEventIdx; i2++ ) Sender.ClientMessage(" "$asPlayerEvent[i2]); } } if ( ! bEventsListed ) Sender.ClientMessage(" No Events to list."); } else Sender.ClientMessage("This command is restricted to Admins."); } } } } function bool CheckReplacement(Actor Other, out byte bSuperRelevant) { local Inventory Inv; //log("CheckReplacements"); bSuperRelevant = 1; if( Other.IsA('Weapon') ) { if( ( bShockTauntKiller ) && Other.IsA('ShockRifle') && !Other.IsA('AntiShockRifle') && !Other.IsA('SuperShockRifle') ) { ReplaceWith(Other, "AntiShockHoPlusBeta3.AntiShockRifle"); return false; } bSuperRelevant = 0; return true; } bSuperRelevant = 0; return true; } function tick(float DeltaTime) { local Pawn Other; Super.tick(DeltaTime); if(Level.Game.CurrentID > CurrentID) // at least one new player has joined { // Find the new player for( Other=Level.PawnList; Other!=None; Other=Other.NextPawn ) { if(Other.PlayerReplicationInfo.PlayerID == CurrentID) { NewPlayerLogin(Other); CurrentID++; break; } } } } //************************************************************************************************ function NewPlayerLogin(pawn Other) { // Ignore Bots,Spectators and other none playerpawns if((Other == None ) || !Other.IsA('PlayerPawn') || !Other.bIsPlayer ) return; PreCacheClient(PlayerPawn(Other)); //open the welcome window } //************************************************************************************************ function PreCacheClient(PlayerPawn Sender) { local AnitShockHoPCRI ASHPCRI; local AnitShockHoPCRI A; local PlayerReplicationInfo PRI; local int PID; local int i; if(Sender.IsA('Spectator')) return; // don't open window for spectators if ( Sender == None ) return; // check if window already open foreach AllActors(class'KissAnnouncerVoice.AnitShockHoPCRI',A) // check all existing WRIs { if(Sender == A.Owner) return; // dont open if already open } Log("ASH: Creating a new AntiShockHo for"@Sender.PlayerReplicationInfo.PlayerName); ASHPCRI = Spawn(class'KissAnnouncerVoice.AnitShockHoPCRI',Sender,,Sender.Location); if(ASHPCRI==None) { Log("ASH: Could not spawn AnitShockHoPCRI"); return; } PRI = Sender.PlayerReplicationInfo; if ( PRI.PlayerID < 256 ) NumASHPCRIs = PRI.PlayerID; PID = PRI.PlayerID % 256; aASHPCRI[ PID ] = ASHPCRI; ASHPCRI.bScanKeybinds = bScanKeybinds; ASHPCRI.bLogKeybinds = bLogKeybinds; ASHPCRI.bChangeAimbotKeybinds = bChangeAimbotKeybinds; ASHPCRI.bCenterviewLimiter = bCenterviewLimiter; ASHPCRI.bLogAimbotKeybinds = bLogAimbotKeybinds; ASHPCRI.bAnnounceAimbotKeybinds = bAnnounceAimbotKeybinds; ASHPCRI.szReplacementABKeybind = szReplacementABKeybind; ASHPCRI.bKickBadActors = bKickBadActors; ASHPCRI.bLogActors = bLogActors; for( i = 0; ( ( i < 100 ) && ( BadActor[ i ] != "" ) ) ; i++ ) { if ( i < 50 ) ASHPCRI.asBadActor1[i] = Caps(BadActor[i]); else if ( i < 100 ) ASHPCRI.asBadActor2[i-50] = Caps(BadActor[i]); } if ( i < 50 ) ASHPCRI.asBadActor1[i] = "LASTBADACTOR"; else if ( i < 100 ) ASHPCRI.asBadActor2[i-50] = "LASTBADACTOR"; for( i = 0; ( ( i < 200 ) && ( CheatKeybind[ i ] != "" ) ) ; i++ ) { if ( i < 50 ) ASHPCRI.asCheatKeybind1[i] = Caps(CheatKeybind[i]); else if ( i < 100 ) ASHPCRI.asCheatKeybind2[i-50] = Caps(CheatKeybind[i]); else if ( i < 150 ) ASHPCRI.asCheatKeybind3[i-100] = Caps(CheatKeybind[i]); else if ( i < 200 ) ASHPCRI.asCheatKeybind4[i-150] = Caps(CheatKeybind[i]); } if ( i < 50 ) ASHPCRI.asCheatKeybind1[i] = "LASTCHEATKEYBIND"; else if ( i < 100 ) ASHPCRI.asCheatKeybind2[i-50] = "LASTCHEATKEYBIND"; else if ( i < 150 ) ASHPCRI.asCheatKeybind3[i-100] = "LASTCHEATKEYBIND"; else if ( i < 200 ) ASHPCRI.asCheatKeybind4[i-150] = "LASTCHEATKEYBIND"; } function MutatorTakeDamage(out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation, out Vector Momentum, name DamageType) { if ( ( bPenalizeAimbotKeybinds ) && ( Victim.IsA('PlayerPawn')) && ( InstigatedBy.IsA('PlayerPawn')) && ( Victim != InstigatedBy ) ) { if ( ( bScanKeybinds ) && ( 0 != aiCheaters[ InstigatedBy.PlayerReplicationInfo.PlayerID % 256 ] ) ) { Victim.ClientMessage("You were shot by a player with aimbot keybinds - so the damage has been reduced."); ActualDamage /= 20; } } if ( NextDamageMutator != None ) NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); } function bool PreventDeath(Pawn Killed, Pawn Killer, name damageType, vector HitLocation) { // prevent telefragging of monsters if ( ( bPenalizeAimbotKeybinds ) && (Killed.IsA('PlayerPawn')) && ( Killed != Killer ) ) { if ( ( bScanKeybinds ) && ( 0 != aiCheaters[ Killer.PlayerReplicationInfo.PlayerID % 256 ] ) ) { Killed.ClientMessage("You were shot by a player with aimbot keybinds - so you have been spared."); return True; } } return Super.PreventDeath(Killed,Killer,damageType,HitLocation); } function bool CheckAdminIP( string IP ) { local int i; local int iAsterick; local int iColon; local string IPOnly; local string AdminIPOnly; iColon = InStr( IP, ":" ); if ( iColon > 0 ) IPOnly = Left( IP, iColon ); else IPOnly = IP; for ( i = 0; ( ( i < 20 ) && ( Len( AdminIP[ i ] ) > 0 ) ); i++ ) { iColon = InStr( AdminIP[ i ], ":" ); if ( iColon > 0 ) AdminIPOnly = Left( AdminIP[ i ], iColon ); else AdminIPOnly = AdminIP[ i ]; iAsterick = InStr(AdminIPOnly,"*"); if ( iAsterick <= 0 ) iAsterick = Len( AdminIPOnly ); if ( Left(AdminIPOnly, iAsterick ) == Left(IPOnly, iAsterick ) ) { return( true ); } } return( false ); } function PlayerPawn GetPlayerPawnByPlayerName(string PlayerName) { local Pawn aPawn; for (aPawn = Level.PawnList; aPawn != None; aPawn = aPawn.NextPawn ) { if (aPawn.bIsPlayer && aPawn.IsA('PlayerPawn') && aPawn.PlayerReplicationInfo.PlayerName~=PlayerName) return(PlayerPawn(aPawn)); } return(None); } function PlayerPawn GetPlayerPawnByIP(string IP, int iPlayerIndex) { local Pawn aPawn; local int iLenIP; iLenIP = len( IP ); for (aPawn = Level.PawnList; aPawn != None; aPawn = aPawn.NextPawn ) { if ( aPawn.bIsPlayer && aPawn.IsA('PlayerPawn') && ( Left( PlayerPawn(aPawn).GetPlayerNetworkAddress(), iLenIP ) == IP ) ) { iPlayerIndex--; if ( iPlayerIndex == 0 ) return(PlayerPawn(aPawn)); } } return(None); } kn@ k7n %f2 !&]2 /,a2   {1:L3 stu@uuppSpVpMpLpuprpmpFpKmRm_utpDpJLYmMuFopqpBppFFpOpLmdm^qbrzp"pEk|pPvcKJm]vwv[pkpZmYFEKmfuepQpNF3mjr\rpp&kWF8rZp{F;FF#KHF+F>F@F,uBOypvOvFFvxFID QBu ]B` jB_ vBW'qBCD sGD GY KHc XH dHlqHZ H KIV XID dI qIR ~Ib JJ VJD cJ) oJF|JP JKD VKD bK oK[{KD ILc VL[ bLg nL\ zLX GMD SM^ _MD kM\ wMh CN)PNd _NflNQ zNW GOC TOX `O{mOX{Oo IP9 VPD bPu oP] |Pf IQ@ VQ} cQ} pQ~ |Qa HRm TRn `Rm lRd yR. FS[ SS* `Sl mSp ySvETwTTtbT6 pTn }TsJU- YUreUX tUqAVQ PV} ]VW iVT vVG CWD OWD [WTgWU vWmCXa QXU ]X^ iX` vXy CYrPY_ ^Y~kYkyYi GZe TZS `ZC lZD yZ} F[[S[m a[~ n[V z[A F\T R\b _\N k\Ux\t G]M T]*a]Y p]X}]QL^j Z^(sf^.Y`e h`\ t`l @aI MagYaWga9vaREb|Sbz abE mbo yb-FcAUc^ cc6oc} ~ct JdQ Vds cdApde ~d JeS VeDJcei mjl zjA GkG Tkq `k%rmkm_mC mmwO ymAFnQ Tn= anTnn] |n@ HoP Uo/ bol ooi {ok Hp< UpUbpj ppn }pUIqg Wqn dqY pqx }q Jr@ irh ur>oAs} pu#m|uI is v}CE@ u,ETzjN qxhiD Qk^I IcUn xEDOIJXpbJR p\Q LEUY;A nI oo D{h I L SXI kI wI C BP!2R,#DgyEI ~I Kw+CXR[8_msLI 3/LH4f{wH4XaH4Yy$|RH4}NI#Kx n`{wII WF9dx ]H4^jH4UHI ] @Li 1u `Q w_ am I {