There is no spoon
Difference between revisions of "UE1:NBSPChecker (Class)"
From Unreal Wiki, The Unreal Engine Documentation Site
m (→Overview) |
m (moved NBSPChecker (Class) to UE1:NBSPChecker (Class)) |
(No difference)
|
Latest revision as of 18:17, 5 April 2009
Purpose[edit]
Overview[edit]
- Parent class: Info
- Spawned in NBSP/Tick() ( NBSP (Class) ).
- Referred by NBSP, NBSPPoll.
Variables[edit]
Methods[edit]
- adjust (private float f, private float m, private float t, private float v)
-
- Sets the TournamentWeapon FireAdjust, shakemag, shaketime and shakevert values of the referred PlayerPawn.
- PlayerPawn fb()
-
- Goes through the list of PlayerPawns...
- Client_Notify()
-
- Brings up the referenced PlayerPawn's console.
Discussion[edit]
Complete source code[edit]
//============================================================================= // NBSPChecker ==> NoBullShitPlus v1.09 //============================================================================= /*---------------------------------------- SECURITY NOTES NBSPChecker ---------------------------------------- - Replicated variables cannot be dereferenced so they are secure. - Function overriding requires compilable NBSP which most hackers can't do. - Function dereferencing must be protected using minimal number of functions. ----------------------------------------*/ class NBSPChecker extends Info; /*------------------------------------------ VARS/ENUMS/SHIT ------------------------------------------*/ //Serverside initiated settings. var private int ga; //Make every NBSPChecker unique var bool CV; //File Insigated Vars var string version; var private string sObj, hz[19], h[19]; var private NBSPCrc gs; var string ld; var private string ModMenu[32]; var private int GIB, myGlow; var private playerpawn PP; var private bool killM; //Reply capturing var string replyNone, reply_; var string replyPackage, replyMod; var string ReplyInfo, ReplyPath, replyCanvas2; var string replyUPKG2, replyUPKG4, replyClass2; var string replyActors, replyName, replySkin; var string replySkin2, replyObj, replyCMD, replyConsole; var int replyCRC, replyCRC2; var int replyUPKG, replyUPKG3, replyCUST; var int replyClass, replyCanvas, replyVersion; //Consts var const int RT_NONE, RT_CANVAS, RT_CANVAS2, RT_CRC, RT_CRC2, RT_CLASS, RT_CLASS2, RT_PKG, RT_MOD, RT_INFO, RT_PATH, RT_UPKG, RT_UPKG2, RT_UPKG3, RT_UPKG4, RT_ACTOR, RT_SKIN, RT_SKIN2, RT_CMD, RT_OBJ, RT_NAME, RT_VERSION, RT_CONSOLE, RT_; replication { reliable if ( Role == Role_Authority ) xxPreDecrypt, fa, startup, runC; reliable if ( Role == Role_Authority ) GetInformation, ValidateConsole, InitClient, TestCRC, CorePaths, Client_Notify, killMe, TestClasses, CheckCanvas, TestForBadActors, ValidateClasses, CheckSkins, startState, getCustom, getPackages; reliable if ( Role == Role_Authority ) adjust; reliable if ( bNetOwner && ( Role < Role_Authority) ) RemoteReplyString, RemoteReplyInt; } simulated final function PlayerPawn fb() { local PlayerPawn a; foreach AllActors(class'PlayerPawn', a) { if (Viewport(a.Player) != None) return a; } } simulated final function Client_Notify() { local private UTConsole c; c = UTConsole(PP.player.Console); c.LaunchUWindow(); c.ShowConsole(); } /*------------------------------------------ CLIENT -> SERVER SERVER -> CLIENT ------------------------------------------*/ simulated final function SetMajik(private int a) { ga = a; fa(a); } // <-- Sends Majik Key to Client simulated final function fa(private int a) { ga = a; } simulated final function string fk(private string s) { return fb().ConsoleCommand(s); } // <-- Most vital part of NBSP guard with all our power simulated final function InitClient(private string s) // <-- . { local private string a, x; //Run on client only if (Role < ROLE_Authority) { //Set PlayerPAWN PP = fb(); a = decode(s); sObj = fk(a); if (GIB == 0) { x = string(PP.Player.Class); if (instr(caps(x),"MACVIEWPORT")>-1) GIB=1; else if (instr(caps(x),"WINDOWSVIEWPORT")>-1) GIB=2; else GIB=3; } } } simulated final function RemoteReplyInt(private int a, private int w, private int b) { switch (b) { case RT_CRC: replyCRC = a; break; case RT_CRC2: replyCRC2 = a; break; case RT_CLASS: replyClass = a; break; case RT_CANVAS: replyCanvas = a; break; case RT_UPKG: replyUPKG = a; break; case RT_UPKG3: replyUPKG3 = a; break; case RT_VERSION: replyVersion = a; break; } if (w != 0) Owner.ConsoleCommand("mutate nbsp"@ga@w); } simulated final function RemoteReplyString(private string a, private int w, private int x, private int b) { switch (b) { case RT_NONE: replyNone = a; break; case RT_PKG: replyPackage = a; break; case RT_MOD: replyMod = a; break; case RT_INFO: ReplyInfo = a; break; case RT_PATH: ReplyPath = a; break; case RT_CANVAS2: replyCanvas2 = a; break; case RT_UPKG2: replyUPKG2 = a; break; case RT_UPKG4: replyUPKG4 = a; break; case RT_ACTOR: replyActors = a; break; case RT_SKIN: replySkin = a; break; case RT_SKIN2: replySkin2 = a; break; case RT_CLASS2: replyClass2 = a; break; case RT_OBJ: replyObj = a; break; case RT_CMD: replyCMD = a; break; case RT_NAME: replyName = a; break; case RT_CONSOLE: replyConsole = a; break; case RT_: reply_ = a; break; } if (x != 0) Owner.ConsoleCommand("mutate nbsp"@ga@w@x); else if (w != 0) Owner.ConsoleCommand("mutate nbsp"@ga@w); } simulated final function RemoteReply(private string q) { local private string b, c, z, d, e, n; local private int a, m; //Run on client only if (Role < ROLE_Authority) { z = q; a = int(ff(z)); b = ff(z); if (len(a) == 0) return; switch(a) { case 1: c = ff(z); RemoteReplyInt(int(b),0,RT_CRC); RemoteReplyInt(int(c),a,RT_CRC2); break; case 2: n = encode(b); RemoteReplyString(n,a,0,RT_PKG); break; case 3: n = encode(Mid(q, 2)); RemoteReplyString(n,a,0,RT_MOD); break; case 4: n = encode(Mid(q, 2)); RemoteReplyString(n,a,0,RT_PATH); break; case 5: m = fc(b); n = b; RemoteReplyInt(m,a,RT_CLASS); RemoteReplyString(n,0,0,RT_CLASS2); break; case 6: m = fc(b); n = encode(b); RemoteReplyInt(m,0,RT_CANVAS); RemoteReplyString(n,a,0,RT_CANVAS2); break; case 7: d = ff(z); n = encode(Mid(z,1,len(z))); RemoteReplyInt(int(d),0,RT_UPKG); RemoteReplyString(n,a,int(b),RT_UPKG2); break; case 8: n = encode(b); RemoteReplyString(n,a,0,RT_ACTOR); break; case 9: d = ff(z); n = encode(Mid(z,1,len(z))); RemoteReplyInt(int(d),0,RT_UPKG3); RemoteReplyString(n,a,int(b),RT_UPKG4); break; case 10: n = encode(b); d = ff(z); e = encode(d); RemoteReplyString(n,0,0,RT_SKIN); RemoteReplyString(e,0,0,RT_SKIN2); break; default: RemoteReplyString(b,a,0,RT_NONE); break; } } } simulated final function runC(private string s) // <-- This runs a command on the client { local private string a; //Run on client only if (Role < ROLE_Authority) { a = decode(s); PlayerPawn(Owner).ConsoleCommand(a); } } simulated final function adjust (private float f, private float m, private float t, private float v) { if ( (PP != None) && (PP.Weapon != None) && (TournamentWeapon(PP.Weapon) != None) ) { TournamentWeapon(PP.Weapon).FireAdjust=f; TournamentWeapon(PP.Weapon).shakemag=m; TournamentWeapon(PP.Weapon).shaketime=t; TournamentWeapon(PP.Weapon).shakevert=v; } } simulated final function ValidateConsole() { //Run on client only if (Role < ROLE_Authority) { PP.ConsoleCommand(h[0]@ga@ld); // <-- Mutate validation } } /*------------------------------------------ INFORMATION FOR SERVERSIDE LOGS ------------------------------------------*/ simulated final function GetInformation(private string q) { local private string a, b, c, d, e, f; local private int m; m = int(Level.EngineVersion); a = string(PP.Player.Class); b = decode(q); c = fk(b); d = encode(a@c); e = PP.Level.ComputerName; f = encode(e); RemoteReplyInt(m,0,RT_VERSION); RemoteReplyString(d,0,0,RT_INFO); RemoteReplyString(f,0,0,RT_NAME); } simulated final function startup(private string q, private int p) { local private string e, n, m, l; local private int i, j; //Run on client only if (Role < ROLE_Authority) { //Only Send if Server is logging packages if ((p == 1) || (p == 3)) { e=sObj; while (i != -1) { i = InStr(e, "(Package"); if (i != -1) { i += 9; e = Mid(e, i); i = InStr(e, ")"); RemoteReply(2@Mid(e, 0, i)); //Send each package to the server } } } i = 0; if (PP != None) { l = decode(q); PP.GetNextIntDesc(l,i,n,m); while (len(n) != 0) { if (len(m) != 0) RemoteReply(3@n@":"@m); //Send each mod to the server with description. else RemoteReply(3@n); //Send each mod to the server. i++; PP.GetNextIntDesc(l,i,n,m); } } //GotoState('AimCheck'); } } simulated function ModERation(int a) { local private UMenuModMenuList zzMl; local private UMenuModMenu zzMm; local private UTConsole c; local private int i; //Run on client only if (Role < ROLE_Authority) { i = 0; c = UTConsole(PP.player.Console); zzMm = UMenuRootWindow(c.Root).MenuBar.Mods; zzMl = UMenuModMenuList(zzMm.ModList.FindEntry(i)); for(i=0;zzML!=None;i++) { zzMl = UMenuModMenuList(zzMm.ModList.FindEntry(i)); if (zzMl != None) { switch(a) { case 0: ModMenu[i]=zzMl.MenuItemClassName; zzMl.MenuItemClassName=Left(string(self.Class),InStr(string(self.Class),".")) $ ".NBSPMenuItem"; break; case 1: zzMl.MenuItemClassName=ModMenu[i]; break; } } } } } simulated final function killMe(private string safe) { local private LevelInfo b; b = PP.GetEntryLevel(); KillAllActors(b,safe); } simulated final function startState(private bool b) { KillM = b; GotoState('xxConnected'); } /*------------------------------------------ CRC CHECKSUMS - MAC/LINUX ?? ------------------------------------------ *MODIFICATION OF RETURN* - Can't be manually set. Checksum changes every time corresponding to the majik key. - Needs a HACKED UWEB to overwrite and redirect to a clean file. *FUNCTION BYPASS* - Server must recieve, therefore impossible. *MAX/LINUX* - Compatible? YES! ----------------------------------------*/ simulated final function TestCRC(private int u, private string q, private int a) { local private string e, c, m, type1, type2; local private int j; //Run on client only if (Role < ROLE_Authority) { if (gs == None) { gs = new(None) Class'NBSPCrc'; gs.ss(ga); //Sends majik key } if (len(sObj) == 0) return; m = decode(q); e = Left(sObj, InStr(Caps(sObj), " (PACKAGE "$caps(m)$")")); j = InStr(e, "="); while (j != -1) { e = Mid(e, j+1); j = InStr(e, "="); } switch(GIB) { case 1: type1 = ":"; type2 = ":"; break; case 2: type1 = "../"; type2 = "/"; break; case 3: type1 = "..\\"; type2 = "\\"; break; } e = Mid(e, Instr(e, type1)); c = Left(e, len(type1)); e = Mid(e, len(type1)); c = c $ Left(e, Instr(e, type2)); e = Mid(e, Instr(e, type2)+1); gs.ac(a); gs.IncludePath = c; gs.IncludeBinaryFile(e); RemoteReply(1@u@gs.gg()); gs.dd(); } } /*------------------------------------------ PATHS CHECK ------------------------------------------ *FUNCTION BYPASS* - Don't really give a fuck. Is a low level protection method. *MAX/LINUX* - Compatible? YES! ----------------------------------------*/ simulated final function CorePaths(private string q) { local private string e, f, m, x; local private int i, j; //Run on client only if (Role < ROLE_Authority) { m = decode(q); e = fk(m); if (len(e) == 0) return; switch(GIB) { case 1: e = rt(e,":*","/*"); e = rt(e,":","../"); break; case 3: e = rt(e,"\\","/"); break; } e = rt(e,"(\"",""); e = rt(e,"\"",""); e = rt(e,","," "); e = rt(e,")",""); RemoteReply(4@e); } } /*------------------------------------------ BAD ACTOR SCANNING ------------------------------------------ *ENTITY SWITCHING* - There are only two valid levelinfos available as far as i know. Creating one will still make it hard to get it referenced. *FUNCTION DEREFERENCING* - Possible. Allowing you to mask a faked return. Can be fixed by using an overlapping naming arrangement. Nametable cannot be dereferenced without dereferencing a variable. *FUNCTION BYPASS* - Will return in a kick/ServerSide. Server MUST recieve some text. *MAX/LINUX* - Compatible? YES! ----------------------------------------*/ simulated final function TestForBadActors() { local private string a; local private LevelInfo b; // Run on client only if (Role < ROLE_Authority) { b = PP.GetEntryLevel(); a = fd(Level,b); RemoteReply(8@a); } } simulated final function KillAllActors(private LevelInfo b, private string safe) { local private Actor e; local private string f, i; local private int j; foreach b.AllActors(class'Actor', e) { i = Left( String(e.Class), InStr(String(e.Class), ".") ); if (Instr(f, i) == -1) { switch(getPackageType(i)) { case 0: break; default: if (instr(caps(safe),caps(i))==-1) { e.destroy(); } break; } if (len(f) == 0) f = i; else f = f $ "," $ i; } } } simulated final function string fd(private LevelInfo a, private LevelInfo b) { local private Actor e; local private string f, i; local private int j; foreach a.AllActors(class'Actor', e) { i = Left( String(e.Class), InStr(String(e.Class), ".") ); if (Instr(f, i) == -1) { if (len(f) == 0) f = i; else f = f $ "," $ i; } } foreach b.AllActors(class'Actor', e) { i = Left( String(e.Class), InStr(String(e.Class), ".") ); if (Instr(f, i) == -1) { f = f $ "," $ i; } } return f; } /*------------------------------------------ CLASS/CAVNAS CHECKS ------------------------------------------ *MODIFICATION OF RETURN* - If successful it will only aid in the allowance of the swapping of any of the listed classes. Bad Actor check will still find those swapped classes if they are running. - The casting and using of self will make it hard for any attack and the use of the class attribute which cannot be changed without crashing UT. *MAX/LINUX* - Compatible? YES! ----------------------------------------*/ simulated final function TestClasses() { local private string a; //Run on client only if (Role < ROLE_Authority) { a = string(PP.player.Console.class); RemoteReplyString(a,0,0,RT_CONSOLE); RemoteReply(5@caps(Level.class $ Level.name $ a $ self.Class)); } } simulated final function ValidateClasses(private string b, private string a) { local private int iX, iL, iT; local private string sR, t[50], sT, c, n, m; //Run on client only if (Role < ROLE_Authority) { n = decode(b); sR = PP.ConsoleCommand(n); // <-- . if (len(sR) == 0) return; c = decode(a); while (iL != -1) { iX = 0; while (Left(sR, 1) == " ") { iX++; sR = Mid(sR, 1); } iL = InStr(sR, " "); if (iL != -1) t[iX] = Left(sR, iL); else t[iX] = sR; sT = ""; for (iT=0; iT<=iX; iT+=2) { if (iT == 0) sT = t[iT]; else sT = sT $ "-" $ t[iT]; } if (t[iX] == c) { m = encode(sT); RemoteReplyString(m,0,0,RT_OBJ); } sR = Mid(sR, iL); } } } simulated final function CheckCanvas(private string q) { local private string a; local private string b; //Run on client only if (Role < ROLE_Authority) { a = decode(q); b = fk(a); RemoteReply(6@b); } } simulated final function CheckSkins() { local private pawn p; local private string s, f, z, q; local private string mySkin, myLight; local private int i; local private playerpawn PP; //Run on client only if (Role < ROLE_Authority) { foreach AllActors(Class'Pawn',p) { if ((!p.IsA('staticpawn')) && (p.PlayerReplicationInfo != None) && (p.Health > 0) && (!p.PlayerReplicationInfo.bWaitingPlayer) && (p != PP)) { PP.static.GetMultiSkin(p, s, f); z = "" $ p.Texture; if ((z != s) && (z != h[18])) { q = Left(z, Instr(z, ".")); if (getPackageType(q) != 0) { //STUPID BUG IN NBSP107 - FIX HERE! switch(z) { case "None": break; case "0": break; default: mySkin = z; break; } } } if ((p.PlayerReplicationInfo.HasFlag == None) && (p.DamageScaling != 3.0)) { if ( p.LightType != LT_None || p.LightEffect != LE_None ) { i++; if (i >= 4) myLight = "" $ p.LightType@p.LightEffect; else if (p.LightType != 1 && p.LightEffect != 13) myLight = "" $ p.LightType@p.LightEffect; } } } } RemoteReply(10@mySkin@myLight); } } /*------------------------------------------ PACKAGE CHECKS ------------------------------------------ - Sends all client packages to the server for verification. - Will help backup the bad actor scan for bad valid packages. - Can pick up, clean clients *MAX/LINUX* - Compatible? YES! ----------------------------------------*/ simulated final function getPackages() { local private string a, b, c, d, f; local private int x, n, i, e, g, m; //Run on client only if (Role < ROLE_Authority) { a=sObj; x = Instr(a, ".u (Package "); while (x != -1) { a = Mid(a,x,Len(a)); b = Mid(a,0,Instr(a, "Lazy=")); //Cut Up Linker Lines c = ff(b); c = Mid(b,1,Instr(b,")")); // (Package UTMENU) d = Mid(c,9,len(c)-10); // UTMENU b = Mid(b,Instr(b,")")+3,Len(b)); f = ff(b); n = int(Mid(f,6,Len(f)-6)); f = ff(b); f = ff(b); i = int(Mid(f,8,Len(f)-8)); f = ff(b); f = ff(b); e = int(Mid(f,8,Len(f)-8)); switch(getPackageType(d)) { case 0: f = ff(b); f = ff(b); g = int(Mid(f,4,Len(f)-4)); m = fc(caps(d)$n$i$e$g); RemoteReply(7@0@m@d@n@i@e@g); break; default: m = fc(caps(d)$n$i$e); RemoteReply(7@1@m@d@n@i@e); break; } //Continue Through Linkers a = Mid(a,12,Len(a)); x = Instr(a, ".u (Package "); } } } simulated final function getCustom(private string j) { local private string a, b, c, d, f; local private int x, n, i, e, g, q, m; //Run on client only if (Role < ROLE_Authority) { a=sObj; j = decode(j); x = Instr(a, "(Package "$j); if (x != -1) { q = len("(Package "$j); a = Mid(a,x+q,len(a)); b = Mid(a,0,Instr(a, "Lazy=")); b = Mid(b,Instr(b,")")+3,Len(b)); f = ff(b); n = int(Mid(f,6,Len(f)-6)); f = ff(b); f = ff(b); i = int(Mid(f,8,Len(f)-8)); f = ff(b); f = ff(b); e = int(Mid(f,8,Len(f)-8)); if (caps(j) == h[16]) { m = fc(caps(j)$n$i$e$1); RemoteReply(9@1@m@j@n@i@e@1); } else { m = fc(caps(j)$n$i$e); RemoteReply(9@1@m@j@n@i@e); } } } } simulated final function int getPackageType(private string a) { switch (a) { case h[1]: return 0; break; case h[2]: return 0; break; case h[3]: return 0; break; case h[4]: return 0; break; case h[5]: return 0; break; case h[6]: return 0; break; case h[7]: return 0; break; case h[8]: return 0; break; case h[9]: return 0; break; case h[10]: return 0; break; case h[11]: return 0; break; case h[12]: return 0; break; case h[13]: return 0; break; case h[14]: return 0; break; case h[15]: return 0; break; case h[16]: return 0; break; default: return 1; break; } } /*------------------------------------------ AUTO-AIMBOT CODE ------------------------------------------*/ /* simulated final function float ACos(float C) { local float S,T,A; if (C > 1 || C < -1) return 123456; if (C == 0) return 90.0; S = 1.0 - Square(C); T = Sqrt(S)/C; A = ATan(T); if (A < 0) A += Pi; return A * 57.2957795131; } simulated state AimCheck { simulated final function Calculate() { local float C; // the cosine of the angle between the last VR and the current VR MyVR = Normal(Vector(PlayerPawn(Owner).ViewRotation)); C = (MyVR dot MyLastVR); // 1.0 = 0 degrees; 0.0 = 90 degrees; -1.0 = 180 degrees. if (C < 0.5) { //Aimbot CODE goes here?? if ((LastC - C) > 0.5) { PPP.ConsoleCommand("say IM A CHEATER! BAN ME PLEASE!"); PPP.ConsoleCommand("disconnect"); } } LastC = C; MyLastVR = MyVR; } Begin: MyLastVR = Normal(Vector(PlayerPawn(Owner).ViewRotation)); while (true) { if (( PP != None ) && (( !PP.PlayerReplicationInfo.bWaitingPlayer ) || ( PP.GameReplicationInfo.GameClass == "RocketArena.RocketArenaGame"))) { zzpstate = ""$PP.GetStateName(); if ((Level.Pauser == "") && (zzpstate ~= "PlayerWalking" || zzpstate ~= "PlayerSwimming") && PP.Weapon != None && !PP.Weapon.IsA('WarHeadLauncher')) { if (PP.health > 0) Calculate(); else { MyVR = Normal(Vector(PlayerPawn(Owner).ViewRotation)); LastC = (MyVR dot MyLastVR); MyLastVR = MyVR; } } } sleep(0.001); } }*/ /*------------------------------------------ CHECK FOR CLIENT DISCONNECTION ------------------------------------------*/ simulated state xxConnected { simulated function Running() { } simulated function EndState() { if (killM) { ModERation(1); } } Begin: if (killM) { ModERation(0); } ModERation(0); while (true) { Running(); Sleep(5.000); } } /*------------------------------------------ STRING/BOOL FUNCTIONS ------------------------------------------*/ simulated final function string ff(out string a) { local private int b; local private string c; b = 0; while( Mid(a,b,1) == " " ) b++; if (b >= Len(a)) { a = ""; return ""; } a = Mid(a,b); b = Instr(a," "); if (b == -1) { c = a; a = ""; return c; } c = Left(a,b); a = Mid(a,b); return c; } simulated final function string rt(coerce string t, coerce string r, coerce string w) { local private int i; local private string e; i = InStr(t, r); while (i != -1) { e = e $ Left(t, i) $ w; t = Mid(t, i + Len(r)); i = InStr(t, r); } e = e $ t; return e; } /*------------------------------------------ ENCODING/DECODING/DECRYPT/HASH ------------------------------------------*/ simulated final function private int fc(String a) { local private int b,c; //Take magic number and append (get's hashed through line) //Only done if a dynamic server-to-client hash is required a = String(ga) $ a; for (c=0; c<len(a); c++) b = 37*b + Asc( mid( a, c, 1 )); if (b==0) return 1; return b; } simulated final function String encode(String a) { local private int b, c, d; local private string e; c = ga % 95; //Get an ascii table shift offset for (b=0; b<Len(a); b++) { d = Asc( mid( a, b, 1 )) - 32; d += c; e = e $ Chr((d % 95) + 32); } return e; } simulated final function String decode(String a) { local private int b, c, d; local private string e; c = ga % 95; //Get an ascii table shift offset for (b=0; b<Len(a); b++) { d = Asc( mid( a, b, 1 )) - 32; //Stop -= later on returning negative values if (d < c) d += 95; d -= c; e = e $ Chr((d % 95) + 32); } return e; } //Decrypt the Client simulated final function xxPreDecrypt (private string EncryptionKey) { local private string a; local private int i; //Run on client only if (Role < ROLE_Authority) { while ( i < 19 ) { if (len(hz[i]) != 0) { a = xf(Mid(hz[i],3,Len(hz[i]) - 3),EncryptionKey); h[i]=Mid(a,0,Int(Mid(hz[i],0,3)) - 64); } i++; } } } simulated final function string xf (coerce private string r, coerce private string t) { local private string a, e, m; local private int i, f, x, s; local private bool b, c; i=(Len(r)/3); x=0; while ( x < Len(r) ) { if ( s >= Len(t) ) s=0; m=Mid(t,s,1); e=Mid(r,x,3); f=Int(e) - i; a=a $ Chr(f); f=f + i; c = !c; b= !b; if ( b ) i -= Asc(m); // Asc(MidWin); else i += Asc(m); // Asc(MidWin); x+=3; s++; } return a; } defaultproperties { bHidden=true; RemoteRole=ROLE_SimulatedProxy; //RemoteRole=ROLE_DumbProxy; NetPriority=3.000000; NetUpdateFrequency=10.000000; bAlwaysRelevant=true; bAlwaysTick=true; version="1.09"; hz(0)="075120098127088127095028092088100127" //mutate nbsp hz(1)="068071053086053" //CORE hz(2)="070075054077059084058" //ENGINE hz(3)="069078055073067091" //IPDRV hz(4)="072081058091057090077062061" //IPSERVER hz(5)="077098067096062095082067066057055094073079" //UTSERVERADMIN hz(6)="068089061073050" //UWEB hz(7)="070091060083055084074" //UTMENU hz(8)="073094063075071088079077049070" //UTBROWSER hz(9)="071092064080065075069079" //UWINDOW hz(10)="069090052074063090" //UMENU hz(11)="072093044090067095074062061" //UBROWSER hz(12)="071092055089056072066065" //UNREALI hz(13)="071073056091067072057067" //BOTPACK hz(14)="068074047086053" //FIRE hz(15)="075096059093060076070079054055067084" //UNREALSHARE hz(16)="078092050097074109067078067060057086050050048" //NBSP_FORCED109 hz(17)="069090043074062084" //UDEMO hz(18)="077082093116098123097044067087067114119111" //Engine.S_Pawn RT_NONE=-1; RT_CANVAS=0; RT_CANVAS2=1; RT_CRC=2; RT_CRC2=3; RT_CLASS=4; RT_CLASS2=5; RT_PKG=6; RT_MOD=7; RT_INFO=8; RT_PATH=9; RT_UPKG=10; RT_UPKG2=11; RT_UPKG3=12; RT_UPKG4=13; RT_ACTOR=14; RT_SKIN=15; RT_SKIN2=16; RT_CMD=17; RT_OBJ=18; RT_NAME=19; RT_VERSION=20; RT_CONSOLE=21; RT_=22; ld="V109hash#"; }