-- depso -- This MUST be in Autoexec as the Actor will disable itself to prevent tamper --// Auto exec check, must run before ReplicatedFirst if game:IsLoaded() then warn("Script must be in Autoexec!") return end const function HookActor(Actor: Actor, TrampolineCommID: number) -- You could use script:GetActor() but some executors like Potassium don't have a script global run_on_actor(Actor, [[ const ActorName, TrampolineCommID = ... const Trampoline = get_comm_channel(TrampolineCommID) const Actor = game:GetService("ReplicatedFirst"):WaitForChild(ActorName) if not Trampoline then warn("Unable to fetch trampoline comm, UNSAFE") return end --// [EXAMPLE PAYLOAD] - dumps functions from the ClientRoot script const ClientRoot = require(Actor.Start.Client.ClientRoot) for Index, Value in next, debug.getupvalues(ClientRoot.Init) do if typeof(Value) == "function" then print(debug.info(Value, "n")) else print(Value) end end --// Trampoline back Trampoline:Fire() ]], Actor.Name, TrampolineCommID) end const Actor = cloneref(game:GetService("ReplicatedFirst"):WaitForChild("Workspace")) --// Fake a LocalScript to keep the actor active with the init disabled const FakeInit = cloneref(Instance.new("LocalScript", Actor)) FakeInit.Enabled = true FakeInit.Name = "Start" --// Disable Actor init script const RealInit = cloneref(Actor:WaitForChild("Start")) RealInit.Enabled = false --// Trampoline comm const TrampolineCommID, Trampoline = create_comm_channel() Trampoline.Event:Once(function() RealInit.Enabled = true -- If you want to keep the Actor disabled for saveinstance reasons, comment this line out but the game will timeout and kick you after some time FakeInit:Destroy() warn("Successfully ran payload!") end) --// Wait for the actor to become active while true do const Success = pcall(HookActor, Actor, TrampolineCommID) if Success then break end task.wait() end