ScriptDumper.lua
ScriptDumper.lua
if not RunService:IsRunning() then --// So you can dump scripts in games that do a
bit of funny business (I'm mainly trying to patch the things I come up with)
local function IsNetworkOwner(Object)
if Object:IsA("BasePart") and isnetworkowner(Object) then
return true
elseif not Object.Parent then
return false
end
return IsNetworkOwner(Object.Parent)
end
game.DescendantAdded:Connect(function(Obj)
if Obj:IsA("LocalScript") then
--if not Obj:IsDescendantOf(workspace) then --// when will I be able to
spoof network replication :(
Obj.Disabled = true --// Not my fault if a game dev is actually
smart (or maybe it is)
--end
end
end)
repeat
task.wait(0.5) --// There's no rush
until RunService:IsRunning()
end
if isfile(MainDirectory..SubDirectory..FileName..FileType) then
local Name, Count = "", 0
repeat
Count += 1
Name = FileName..(" (%d)"):format(Count)
until not isfile(MainDirectory..SubDirectory..Name..FileType)
FileName = Name
end
Final = MainDirectory..SubDirectory..FileName..FileType
return function()
local Chars = { "|", "/", "—", "\\" }
SpinnerCount += 1
if Complete then
return;
end
PreviousCur = Current
PreviousMax = Max
rconsoleprint(GiveColour(Current, Max))
rconsoleprint(("\13%s%s %s%s"):format(("#"):rep(Progress), ("."):rep(Size -
Progress), Percentage.."%", Percentage == 100 and "!\n" or Extra_After or
LoadingChar))
rconsoleprint("@@WHITE@@")
rconsoleprint(Header.."\n")
task.spawn(function()
while not Complete and (not Thread and true or coroutine.status(Thread) ~=
"dead") do
LoadingChar = Loading()
Update(PreviousCur, PreviousMax, LoadingChar)
task.wait(0.25)
end
end)
return function(...)
task.spawn(Update, ...)
end
end
return false
end
local function FindService(Service)
local Success, Response = pcall(game.FindService, game, Service)
return false
end
return "Folder"
end
return IntResult
end
writefile(Final, Result)
end
PGB(i, #Table)
table.insert(Scripts, v)
end
PGB(1, 1)
end
Completed = true
task.delay(Timeout, function()
if Completed then
return;
end
coroutine.close(DecompThread)
return coroutine.resume(Thread)
end)
return coroutine.yield()]]
end
return v
end
end
while true do
if Ended then
break;
elseif ThreadingGroup.Active == Threads then
ThreadingGroup.Available:Wait("fg", Threads)
end
ThreadingGroup:Add(function()
local Script = FindNextScript()
Decompiled += 1
PGB(Decompiled, #Scripts)
end)
end
ThreadingGroup.Ended:Wait()
end
RunService:Set3dRenderingEnabled(false)
rconsoleclear()
rconsolename("Script Dumper")
GetScripts(getscripts(), "Running")
GetScripts(getnilinstances(), "Nil")
GetScripts(game:GetDescendants(), "Game")
DecompileScripts()
Result..= MakeInstance({
ClassName = "Folder";
Name = "Nil Instances";
Parent = game;
GetChildren = function()
return getnilinstances()
end;
GetDebugId = function()
return Instance.new("Folder"):GetDebugId(0)
end;
FindFirstChildWhichIsA = function()
return true
end;
IsA = function(_, IsA)
return IsA == "Folder"
end
}, InstanceCreatedPGB)
InstanceCreatedPGB(1, 1)
Save()
rconsoleprint("\nFinished")
RunService:Set3dRenderingEnabled(true)