Įƒ*žEv@Iof7¤dŅłŒēr„I¤ß‹1+lCIvNone SendTextCheckIP DawnsHPKick CheckLagChkIllegalName GetMutatorSetProgressMessageSetProgressColorCore ModifyPlayerClientMessageQueryDefaultsIPPolicyTickAdminUsername SaveIPNRSaveIP NoKickIP pingRecord KickTimeInit KickPing DHPKWebAdminFailAuthentication PlayerPawnQueryUWeb AdminRealmAdminPassword StartTimeClearProgressMessagesSetProgressTimePostBeginPlayEngine bEnabled bIsPlayerStruct StrPropertyStructPropertyGetPlayerNetworkAddressPingMutator DeltaTimeOtherIPPaPawn PlayerNamebIsABot LevelInfo nextPawn Password TimeSeconds PawnListPlayerReplicationInfo NextMutatorAddressMaskbAcceptAddressClassProperty PlayerIDALeveli ScriptTextSBRG ReturnValueStaticSaveConfigActor WebResponse WebRequestPawnPlayerWebApplication GetVariableRequest ResponseChURI UsernameObjectPropertyNetConnectionColorClass InitializedCheckLagRunningclMsgversionPackagelagLoglagTimesafeIP nChecked pingRecordsConstFloatPropertypLocpPinglTimecLpIPpID BoolProperty Function TextBuffer IntPropertyjObject DawnsHPKickM ByteProperty waKickPing waKickTime waStartTime waEnabledPName’H6’’’’’’’’’’’’’’’’’’0<1G’=$:e‘Ž”…žtČ…žtČ…žtČˆ{#Uæ†> £Y†> £Y…žtČ…žtČˆ{#Uæ†> £Y…žtČˆ{#U慞tČˆ{#Uæ†> £Y…žtČ…žtČ’=$:e‘Ž”…žtČ…žtČ…žtČˆ{#U慞tČˆ{#U慞tČˆ{#U摎”…žtČˆ{#Uæ†> £Y†> £Y†> £Y†> £Y†> £Y†> £Y†> £Y…žtČˆ{#U慞tČˆ{#U慞tČ…žtȆ> £Y…žtČ! Œ"Č" "] 127.0.0.*’€„I…2@@c2€„ €… …€‡@&,@+@"@@@@#˜3€@59€@ €‡@/F€@%@)@'@@-@@*.@@4€@?€ €@@7ń}„.„›~ģ,/’’’’›~ģ,\’’’’'%€–}v„–ķ&,!—ķ&,}'„5( 8$Ų~ $ēpSaving IP [DawnsHPKick]: $%f–,2\zf„;Œ–,2$—b˜FAILED$ :1¶5n ™žlw *L‚‚ -­| •1.„r.† *w.®.† ¢* .† ”C  € ~ :ēpSaving IP [DawnsHPKick]: %–,2z„ņC–,2 —b UFAILED   €=”Ąā~:1›’’’’€-%(%Ł‚–,2{&~&*ø›’’’’µz€&€-%'ĻĻz&-%'„@-%  0 Ō  ;(0–/³ a0 (kjzV(¦DawnsHPKick.DawnsHPKick(ē[~] DawnsHPKick found10”r*ē[E] DawnsHPKick NOT found «A y[:w.† *  š-6' .† ”'-6) ' •ēpp • has an illegal name: .† ” ' !!! Illegal characters in Name!-6) ( a-6) 'YwŸ*Ÿ   ±<  Źf l„‚{.{ė “ė.(‚{-{ė µė- 0 8DawnsHPKick Web AdminKM5i
¤ w* ² (/ /index.html &waKickPingS.SśJ%Č›.JēppKickPing set to :  by WebAdmin.J &waKickTimeS.SśJ%r›.JēppKickTime set to :  by WebAdmin.J 'waStartTimeS.SśJ%›.JēppStartTime set to :  by WebAdmin.J" &waEnabledT.-’ó.-|"trueŅz"trueēDawnsHPKick has been enabled by WebAdmin’ēDawnsHPKick has been disabled by WebAdmin.-|"true]
„pp…pp…pp‡ppJX
Dawn's High Ping Kick version: .1.0
Kick Ping :
Kick Time :
Start Time :
Enabled :

q
General Options | No Kick IPs

|  /ip 5 /ip.html | ’’8ERROR 404, could not find page :(

| .—.b ēERROR : no DawnsHPKick mutator found:ERROR : no DawnsHPKick mutator found

'UT99 Mutator by Dawn Knight


  "1.0"Z{class DHPKWebAdmin expands WebApplication config(DawnsHPKick); var config string AdminRealm; var config string AdminUsername; var config string AdminPassword; var Mutator DawnsHPKickM; event Init() { Super.Init(); GetMutator(); } function GetMutator() { local DawnsHPKick A; foreach Level.AllActors( class'DawnsHPKick', A ) { if (String(A.Class) == "DawnsHPKick.DawnsHPKick") { DawnsHPKickM = A; Log("[~] DawnsHPKick found"); } } if (DawnsHPKickM == none) Log("[E] DawnsHPKick NOT found"); } event Query(WebRequest Request, WebResponse Response) { local string waKickPing,waKickTime,waStartTime,waEnabled; if ((AdminUsername != "" && Caps(Request.Username) != Caps(AdminUsername)) || (AdminPassword != "" && Caps(Request.Password) != Caps(AdminPassword))) { Response.FailAuthentication(AdminRealm); return; } Response.SendText("DawnsHPKick Web Admin"); Response.SendText(""); Response.SendText(""); Response.SendText(""); Response.SendText("
"); if (DawnsHPKickM != none) { switch(Request.URI) { case "/": case "/index.html": waKickPing = Request.GetVariable("waKickPing", String(DawnsHPKick(DawnsHPKickM).KickPing)); waKickPing = String(max(int(waKickPing), 0)); if (DawnsHPKick(DawnsHPKickM).KickPing != int(waKickPing)) { log("KickPing set to : "$waKickPing$" by WebAdmin"); } DawnsHPKick(DawnsHPKickM).KickPing = int(waKickPing); waKickTime = Request.GetVariable("waKickTime", String(DawnsHPKick(DawnsHPKickM).KickTime)); waKickTime = String(max(int(waKickTime), 0)); if (DawnsHPKick(DawnsHPKickM).KickTime != int(waKickTime)) { log("KickTime set to : "$waKickTime$" by WebAdmin"); } DawnsHPKick(DawnsHPKickM).KickTime = int(waKickTime); waStartTime = Request.GetVariable("waStartTime", String(DawnsHPKick(DawnsHPKickM).StartTime)); waStartTime = String(max(int(waStartTime), 0)); if (DawnsHPKick(DawnsHPKickM).StartTime != int(waStartTime)) { log("StartTime set to : "$waStartTime$" by WebAdmin"); } DawnsHPKick(DawnsHPKickM).StartTime = int(waStartTime); waEnabled = Request.GetVariable("waEnabled", String(DawnsHPKick(DawnsHPKickM).bEnabled)); if (DawnsHPKick(DawnsHPKickM).bEnabled != (waEnabled ~= "true")) { if (waEnabled == "true") { log("DawnsHPKick has been enabled by WebAdmin"); } else { log("DawnsHPKick has been disabled by WebAdmin"); } } DawnsHPKick(DawnsHPKickM).bEnabled = (waEnabled ~= "true"); Response.SendText("
"); Response.SendText(""); Response.SendText(""); Response.SendText(""); Response.SendText(""); Response.SendText(""); Response.SendText("
Dawn's High Ping Kick version: "$ DawnsHPKick(DawnsHPKickM).version $"
Kick Ping :
Kick Time :
Start Time :
Enabled :
"); Response.SendText("
"); Response.SendText("
General Options | No Kick IPs

"); break; case "/ip": case "/ip.html": QueryDefaultsIPPolicy(Request, Response); break; default: Response.SendText("ERROR 404, could not find page :(

"); break; } DawnsHPKick(DawnsHPKickM).Static.StaticSaveConfig(); DawnsHPKick(DawnsHPKickM).SaveConfig(); } else { Log("ERROR : no DawnsHPKick mutator found"); Response.SendText("ERROR : no DawnsHPKick mutator found

"); } Response.SendText("UT99 Mutator by Dawn Knight
"); Response.SendText("

"); } function QueryDefaultsIPPolicy(WebRequest Request, WebResponse Response) { local int i, j; if(Request.GetVariable("Update") != "") { i = int(Request.GetVariable("PolicyNo", "-1")); if(i == -1) for(i = 0; i<50 && DawnsHPKick(DawnsHPKickM).NoKickIP[i] != ""; i++); if(i < 50) DawnsHPKick(DawnsHPKickM).NoKickIP[i] = Request.GetVariable("IPMask"); DawnsHPKick(DawnsHPKickM).Static.StaticSaveConfig(); DawnsHPKick(DawnsHPKickM).SaveConfig(); } if(Request.GetVariable("Delete") != "") { i = int(Request.GetVariable("PolicyNo", "-1")); if(i > 0) { for(i = i; i<49 && DawnsHPKick(DawnsHPKickM).NoKickIP[i] != ""; i++) DawnsHPKick(DawnsHPKickM).NoKickIP[i] = DawnsHPKick(DawnsHPKickM).NoKickIP[i + 1]; if(i == 49) DawnsHPKick(DawnsHPKickM).NoKickIP[49] = ""; DawnsHPKick(DawnsHPKickM).Static.StaticSaveConfig(); DawnsHPKick(DawnsHPKickM).SaveConfig(); } } Response.SendText("
"); Response.SendText(""); Response.SendText(""); for(i=0; i<50 && DawnsHPKick(DawnsHPKickM).NoKickIP[i] != ""; i++) { Response.SendText(""); Response.SendText(""); } Response.SendText(""); Response.SendText("
Dawns High Ping Kick version: "$ DawnsHPKick(DawnsHPKickM).version $"
No Kick IPs
"); Response.SendText(""); Response.SendText("
"); Response.SendText(""); Response.SendText("
"); Response.SendText("
General Options | No Kick IPs

"); } C?Ų@ - -'/%™ž6w*‚w*a/!§‚-© ›%š#D™Ŗ —Ź—“#¬„/.†.†<ppProxy infraction at S, Intn'l Border!%.† %.†#Kickable Proxy infraction.&.† &.† `@‡‚—“#6+-6*.†”Ä„-6' ņ-(ēpppppp• [S] was eligible to kick due to @ S : *qēpppppp• [S] has been kicked by DawnsHPKick @ S : *4 !!! Intn'l Border Proxy Infraction: Kicking!a-6(ĒĒņ-6(-6'6+# -6(-6'.†”-6(.-( €ØDB 1- ·2 Į'%-,-,'ē** starting DawnsHPKick mutator **ēpp** version : 1.0 **ē** (c) 2016 Dawn Knight **ēpp** KickPing : S **ēpp** KickTime : S **ēpp** StartTime : S **ē** --- **-(u! -'6£$Č6„$F6¤$  >! ~HCņ{!UpdateJ!PolicyNo-1š’’’’%‚–,2{.„XĶ–,2.!IPMask.—.b{!DeleteJ!PolicyNo-1—%ø‚–,1{..’&.„JŻš,1,1..—.b ]

 ƒpp G%ć‚–,2{. Bpp _pp„K $ ;
Dawns High Ping Kick version: .1.0
No Kick IPs
 I R
 8 !
 y
General Options | No Kick IPs

 €@“@E’’’’’’’’’’’’’’’’’’TGzMŅ“ ¼x‡Dˆ’¹‡Dˆ’¹<1G<1G‡Dˆ’¹<1G<1G‡Dˆ’¹‡Dˆ’¹<1G<1G<1G<1G<1G<1G„ «$~„ «$~<1G„ «$~<1G„ «$~„ «$~<1G„ «$~„ «$~„ «$~„ «$~„ «$~„ «$~„ «$~‡Dˆ’¹‡Dˆ’¹„ «$~„ «$~„ «$~„ «$~„ «$~„ «$~‡Dˆ’¹‡Dˆ’¹<1G<1G<1G‡Dˆ’¹<1G<1G<1G‡Dˆ’¹<1G<1G<1G‡Dˆ’¹<1G<1G<1G„ «$~„ «$~<1G„ «$~<1G„ «$~<1G„ «$~<1G„ «$~<1G„ «$~„ «$~„ «$~„ «$~„ «$~„ «$~„ «$~„ «$~„ «$~<1G<1G„ «$~„ «$~„ «$~‘Ž”<1G Œ]UT Remote Admin Server]nobody]noneA{//========================================================================================== // DawnsHPKick: A mutator to kick high ping players if their ping remains too high. //========================================================================================== class DawnsHPKick expands Mutator config(DawnsHPKick); var config int KickPing; // milliseconds var config int KickTime; // seconds var config int StartTime; // seconds var bool Initialized; var bool CheckLagRunning; var bool bEnabled; var color clMsg; const version = "1.0"; struct pingRecord //player ping records { var bool lagLog; // is player monitored var int lagTime; // start of monitor var bool safeIP; // player's IP is safe var bool nChecked; // player's name has been checked }; var pingRecord pingRecords[99]; //keep record of max 100 players var config string NoKickIP[50]; function PostBeginPlay() { if (!Initialized) { Initialized = true; log("** starting DawnsHPKick mutator **"); log("** version : " $ version $ " **"); log("** (c) 2016 Dawn Knight **"); log("** KickPing : " $ KickPing $ " **"); log("** KickTime : " $ KickTime $ " **"); log("** StartTime : " $ StartTime $ " **"); log("** --- **"); CheckLagRunning = false; Enable('Tick'); bEnabled = true; clMsg.R=200; clMsg.B=70; clMsg.G=32; } } function Tick(float DeltaTime) { if (!CheckLagRunning) { CheckLag(); } } function CheckLag() { local Pawn P; local int pLoc; local int pPing; local int lTime; local int cL; local String pIP; if (CheckLagRunning) { return; }; CheckLagRunning = true; cL = 0; for(p = level.pawnlist; p != None ; p = p.nextpawn) { if ((p != none) && (p.IsA('PlayerPawn'))) { pPing = P.PlayerReplicationInfo.Ping; // so it only gets called once if ((!P.PlayerReplicationInfo.bIsABot) && (pPing != 0)) // check for bot { pLoc = P.PlayerReplicationInfo.PlayerID; // get player ID lTime = Level.TimeSeconds; if (pPing > KickPing) { if ((lTime-P.PlayerReplicationInfo.StartTime) > StartTime) // start monitoring after StartTime sec { cL++; PlayerPawn(P).ClearProgressMessages(); PlayerPawn(P).SetProgressMessage("Proxy infraction at "$pPing*2$" Intn'l Border!",0); PlayerPawn(P).SetProgressColor(clMsg,0); PlayerPawn(P).SetProgressMessage("Kickable Proxy infraction.",1); PlayerPawn(P).SetProgressColor(clMsg,1); PlayerPawn(P).SetProgressTime(3.5); if (((lTime-pingRecords[pLoc].lagTime) > KickTime) && (pingRecords[pLoc].lagLog)) { pIP = PlayerPawn(P).GetPlayerNetworkAddress(); if ((pingRecords[pLoc].safeIP) || (bEnabled == false)) // kick when not in NoKickIP list; { log(P.PlayerReplicationInfo.PlayerName $" [" $ pLoc $ "] was eligible to kick due to @ " $ pPing $ " : " $ pIP ); // keep log } else { log(P.PlayerReplicationInfo.PlayerName $" [" $ pLoc $ "] has been kicked by DawnsHPKick @ " $ pPing $ " : " $ pIP ); // keep log //notify player about it P.ClientMessage("!!! Intn'l Border Proxy Infraction: Kicking!"); P.Destroy(); // kick player } pingRecords[pLoc].lagLog = false; } else { if (pingRecords[pLoc].lagLog == false) { pingRecords[pLoc].lagLog = true; // monitor player pingRecords[pLoc].lagTime = lTime; // start time } } } else { pingRecords[pLoc].lagLog = false; // disable monitor pingRecords[pLoc].safeIP = checkIP(PlayerPawn(P).GetPlayerNetworkAddress()); // set safe IP } } else { pingRecords[pLoc].lagLog = false; // clean start for Player ID } } } } CheckLagRunning = false; } function ModifyPlayer(Pawn Other) { local int pID; if (PlayerPawn(Other) != None) { pID = Other.PlayerReplicationInfo.PlayerID; pingRecords[pID].safeIP = checkIP(PlayerPawn(Other).GetPlayerNetworkAddress()); // set safe IP if (!pingRecords[pID].nChecked) { if (ChkIllegalName(Other.PlayerReplicationInfo.PlayerName)) { log(Other.PlayerReplicationInfo.PlayerName$" has an illegal name: "$PlayerPawn(Other).GetPlayerNetworkAddress()); Other.ClientMessage("!!! Illegal characters in Name!"); pingRecords[pID].nChecked = false; Other.Destroy(); // kick player } } pingRecords[pID].nChecked = true; } if ( NextMutator != None ) NextMutator.ModifyPlayer(Other); } // Based on GameInfo.uc (CheckIPPolicy) function bool CheckIP(string Address) { local int i, j; local string Mask; local bool bAcceptAddress; // strip port number j = InStr(Address, ":"); if(j != -1) Address = Left(Address, j); bAcceptAddress = false; for(i=0; i<50 && NoKickIP[i] != ""; i++) { Mask = NoKickIP[i]; j = InStr(Mask, "*"); if(j != -1) { if(Left(Mask, j) == Left(Address, j)) { bAcceptAddress = true; } } else { if(Mask == Address) { bAcceptAddress = true; } } } return bAcceptAddress; //true: don't kick, false: eligible to kick } // Based on PlayerPawn.uc (KickBan) function string SaveIP( string S ) //add players IP to NoKickIP list { local Pawn aPawn; local string IP; local int j; for( aPawn=Level.PawnList; aPawn!=None; aPawn=aPawn.NextPawn ) { if ( aPawn.bIsPlayer && aPawn.PlayerReplicationInfo.PlayerName~=S && (PlayerPawn(aPawn)==None || NetConnection(PlayerPawn(aPawn).Player)!=None ) ) { IP = PlayerPawn(aPawn).GetPlayerNetworkAddress(); if (!CheckIP(IP)) { IP = Left(IP, InStr(IP, ":")); Log("Saving IP [DawnsHPKick]: "$IP); for(j=0;j<50;j++) { if(NoKickIP[j] == "") { break; } } if(j < 50) { NoKickIP[j] = IP; StaticSaveConfig(); SaveConfig(); } } return IP; } else { return "FAILED"; } } } function string SaveIPNR( string IP ) //add IP to NoKickIP { local int j; if (!CheckIP(IP)) { Log("Saving IP [DawnsHPKick]: "$IP); for(j=0;j<50;j++) { if(NoKickIP[j] == "") { break; } } if(j < 50) { NoKickIP[j] = IP; StaticSaveConfig(); SaveConfig(); } } else { return "FAILED"; } return IP; } function bool ChkIllegalName( string pName ) //check for illegal name { local int i; local string ch; // "/" and "\" not allowed: if ((InStr(pName,Chr(47)) != -1) || (InStr(pName,Chr(92)) != -1)) { return True; } // ASCII chars must be between 33 and 125: for (i = 0; i < Len(pName); i++) { if (Asc(Mid(pName,i,1)) < 33 || Asc(Mid(pName,i,1)) > 125) { return True; } } return false; }  [! [ [ Vż’’’H V’’’’J V’’’’ Vż’’’I V’’’’6 Vž’’’% Vž’’’l Vž’’’j Vž’’’n Sū’’’6 Vž’’’S Vž’’’i jł’’’M V’’’’1 V’’’’) Vż’’’L jś’’’' %ų’’’/ V’’’’G jō’’’F $ō’’’U Sź’’’> lų’’’< Vž’’’V Vž’’’k Sū’’’2 Sļ’’’5 Sī’’’7 jķ’’’ Vž’’’& Sś’’’K pč’’’C pč’’’D pč’’’B ;ō’’’V lų’’’( jź’’’ ių’’’0 bļ’’’4 jī’’’ lų’’’ iū’’’# V’’’’T Vž’’’$ Vž’’’a jķ’’’ %ł’’’Q Sķ’’’> %ł’’’R %ł’’’3 Vž’’’b jź’’’ ’TtŽGo H$Ž>O U$ŠE? b$ŽA- o$‰ |$”` H%ŠAc U%ŽEO a%Ž=+ n%Ž8. {%Ž>N H&‰8, U&Š:m a&Š m&Š7m y&Š8m E'2\ Q'Š ]'" i'‰>s u'‰>r A(‰>q M(Š Y(ŠAd e(”Y q(‰6u ~(Š6? J)X V)Š:? b)‰:8 n)Š=h z)ŽEN F*‰>t S*ŠAe _*‰7, k*:: x*‰:9 D+2^ P+Ž<= \+2_ i+‰Ag u+Š2] A,W M,‰G Y,‰G e,ŠAf q,‰G },‰8A I-ÆU-6E g-‰8E s-‰6P -‹K.‹OJ0‹OY2:E h6‹jt6‹ G!^9‹GW9‹« @V<‹±GC'V@°Z YgœG@4e{dg‹A Ić¶C* Jļ‹Ø (Vļ‹· V~ļ‹G BTō‰7E V‰“j b‰œ@4L{L—ŠEm X’