local Repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
if not firetouchinterest or not hookfunction or not fireproximityprompt then
game:GetService("Players").LocalPlayer:Kick("So sorry, your executor is not supported ):")
end
loadstring(game:HttpGet('https://raw.githubusercontent.com/gigimoose23/LegitHub/refs/heads/main/reviveInf.luau'))()
local Library = loadstring(game:HttpGet(Repo .. "Library.lua"))()
local SaveManager = loadstring(game:HttpGet(Repo .. "addons/SaveManager.lua"))()
local ThemeManager = loadstring(game:HttpGet(Repo .. "addons/ThemeManager.lua"))()
local RepStorage = game:GetService("ReplicatedStorage")
local Lighting = game:GetService("Lighting")
local Players = game:GetService("Players")
local ClientMain = Players.LocalPlayer.PlayerGui:WaitForChild("NotBrokenUI").CLIENT_MAIN
Players.LocalPlayer.PlayerGui.DescendantAdded:Connect(function(Object)
if Object.Name == "CLIENT_MAIN" and Object:IsA("LocalScript") then
ClientMain = Object
end
end)
local AntiEntityInternal = {}
local FPLoop = false
local CageDone
local FlySpeed
local IsFlying = false
local espCategories = {
Entity = false,
Objectives = false,
HidingSpots = false,
Doors = false,
Coins = false,
Containers = false,
}
local LocalPlayer = Players.LocalPlayer
local mouse = LocalPlayer:GetMouse()
local FLYING = false
local QEfly = true
local iyflyspeed = 1
local vehicleflyspeed = 1
local flyKeyDown, flyKeyUp
local function getRoot(char)
return char:FindFirstChild("HumanoidRootPart")
end
local TargetSpeed = 10
local SPEED = 0
function sFLY(vfly)
repeat task.wait() until LocalPlayer and LocalPlayer.Character and getRoot(LocalPlayer.Character) and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if flyKeyDown then flyKeyDown:Disconnect() end
if flyKeyUp then flyKeyUp:Disconnect() end
local character = LocalPlayer.Character
local root = getRoot(character)
local CONTROL = {F = 0, B = 0, L = 0, R = 0, Q = 0, E = 0}
local lCONTROL = {F = 0, B = 0, L = 0, R = 0, Q = 0, E = 0}
local function FLY()
FLYING = true
local BG = Instance.new("BodyGyro")
BG.P = 9e4
BG.maxTorque = Vector3.new(9e9, 9e9, 9e9)
BG.CFrame = root.CFrame
BG.Parent = root
local BV = Instance.new("BodyVelocity")
BV.Velocity = Vector3.zero
BV.MaxForce = Vector3.new(9e9, 9e9, 9e9)
BV.Parent = root
task.spawn(function()
while FLYING do
task.wait()
local camCF = workspace.CurrentCamera.CFrame
local moveVec = (camCF.LookVector * (CONTROL.F + CONTROL.B)) +
((camCF * CFrame.new(CONTROL.L + CONTROL.R, (CONTROL.Q + CONTROL.E) * 0.2, 0)).Position - camCF.Position)
if moveVec.Magnitude > 0 then
SPEED = TargetSpeed
BV.Velocity = moveVec.Unit * SPEED
lCONTROL = {F = CONTROL.F, B = CONTROL.B, L = CONTROL.L, R = CONTROL.R, Q = CONTROL.Q, E = CONTROL.E}
else
SPEED = 0
BV.Velocity = Vector3.zero
end
BG.CFrame = camCF
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid and not vfly then
humanoid.PlatformStand = true
end
end
CONTROL = {F = 0, B = 0, L = 0, R = 0, Q = 0, E = 0}
lCONTROL = {F = 0, B = 0, L = 0, R = 0, Q = 0, E = 0}
SPEED = 0
BG:Destroy()
BV:Destroy()
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.PlatformStand = false
end
end)
end
flyKeyDown = mouse.KeyDown:Connect(function(key)
key = key:lower()
local speed = vfly and vehicleflyspeed or iyflyspeed
if key == "w" then
CONTROL.F = speed
elseif key == "s" then
CONTROL.B = -speed
elseif key == "a" then
CONTROL.L = -speed
elseif key == "d" then
CONTROL.R = speed
elseif QEfly and key == "e" then
CONTROL.Q = speed * 2
elseif QEfly and key == "q" then
CONTROL.E = -speed * 2
end
pcall(function()
workspace.CurrentCamera.CameraType = Enum.CameraType.Track
end)
end)
flyKeyUp = mouse.KeyUp:Connect(function(key)
key = key:lower()
if key == "w" then
CONTROL.F = 0
elseif key == "s" then
CONTROL.B = 0
elseif key == "a" then
CONTROL.L = 0
elseif key == "d" then
CONTROL.R = 0
elseif key == "e" then
CONTROL.Q = 0
elseif key == "q" then
CONTROL.E = 0
end
end)
FLY()
end
function NOFLY()
FLYING = false
if flyKeyDown then flyKeyDown:Disconnect() end
if flyKeyUp then flyKeyUp:Disconnect() end
local humanoid = Players.LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.PlatformStand = false
end
pcall(function()
workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
end)
end
local allTrackedESPs = {}
local function updateESPVisibility()
for _, data in pairs(allTrackedESPs) do
local shouldBeVisible = espCategories[data.Category]
if shouldBeVisible then
data.ESP:Show()
else
data.ESP:Hide()
end
end
end
local IsCaged = false
for _, Item in getgc(false) do
if typeof(Item) == "function" and getinfo(Item).name == "minigameComplete" then
warn("Found")
CageDone = Item
old = hookfunction(Item, function(...)
IsCaged = false
old(...)
end)
end
end
local Options = Library.Options
Options.MenuKeybind = "P"
local Toggles = Library.Toggles
Library.ForceCheckbox = false
Library.ShowToggleFrameInKeybinds = true
local Window = Library:CreateWindow({
Title = "Foundation Hub",
Footer = "made by @wicked",
Icon = 117293507901367,
NotifySide = "Right",
ShowCustomCursor = false
})
local Tabs = {
Main = Window:AddTab("Main", "user"),
Visuals = Window:AddTab("Visuals", "camera"),
Exploits = Window:AddTab("Exploits", "shield-alert"),
["UI Settings"] = Window:AddTab("UI Settings", "settings"),
}
local stateLib = true
repeat wait() until Library and typeof(Library.Toggle) == "function"
if not game:GetService("UserInputService").TouchEnabled then
old = hookfunction(Library.Toggle, function()
stateLib = not stateLib
Library.ScreenGui.Enabled = stateLib
task.spawn(function()
while wait() do
getrenv()._G.lockMouse = not stateLib
end
end)
old()
end)
end
local LeftGroupBox = Tabs.Main:AddLeftGroupbox("LocalPlayer")
local WSLoopEnabled = false
local WSLoopVal = 16
LeftGroupBox:AddToggle("WSEnable", {
Text = "Enable Walkspeed",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
WSLoopEnabled = Value
end,
})
LeftGroupBox:AddToggle("Fly", {
Text = "Fly",
Default = false,
Callback = function(Value)
IsFlying = Value
if Value then
NOFLY()
wait()
sFLY()
else
NOFLY()
end
end,
}):AddKeyPicker("FlyKey", {
Mode = "Toggle",
Default = "F",
Text = "Fly",
SyncToggleState = true
})
local dai_enabled = false
local function toggle_proximity_connections(enabled)
for _, prompt in workspace.GeneratedRooms:GetDescendants() do
if prompt:IsA("ProximityPrompt") then
for _, con in getconnections(prompt.Triggered) do
if enabled then
con:Enable()
else
con:Disable()
end
end
end
end
end
--[[LeftGroupBox:AddToggle("AI", {
Text = "Auto Interact",
Default = false,
Callback = function(value)
dai_enabled = value
toggle_proximity_connections(not value)
end,
}):AddKeyPicker("AIKey", {
Mode = "Toggle",
Default = "R",
Text = "Auto Interact",
SyncToggleState = true
})]]
local player = Players.LocalPlayer
task.spawn(function()
while task.wait(0.1) do
if dai_enabled then
local hrp = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
for _, prompt in workspace.GeneratedRooms:GetDescendants() do
if prompt:IsA("ProximityPrompt") and prompt:IsDescendantOf(workspace.GeneratedRooms) then
local prompt_pos = prompt.Parent:IsA("Model") and prompt.Parent:GetPivot().Position or prompt.Parent.Position
if not (prompt:FindFirstAncestor("Toolshed_Hiding") or
prompt:FindFirstAncestor("Locker") or
prompt:FindFirstAncestor("OpenedSTORAGE") or
(prompt.Parent.Parent and prompt.Parent.Parent:FindFirstChild("OpenedSTORAGE"))) and
(prompt_pos - hrp.Position).Magnitude < prompt.MaxActivationDistance then
fireproximityprompt(prompt)
end
end
end
end
end
end)
local JumpTog =LeftGroupBox:AddToggle("Jump", {
Text = "Allow Jumping",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
if Players.LocalPlayer.Character then
Players.LocalPlayer.Character:SetAttribute("AllowedToJump", Value)
end
end,
})
local Noclipping
local Clip = true
local RunService = game:GetService("RunService")
LeftGroupBox:AddToggle("Noclip", {
Text = "Noclip",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
if Value == false then
if Noclipping then
Noclipping:Disconnect()
end
for _, child in pairs(Players.LocalPlayer.Character:GetDescendants()) do
if child:IsA("BasePart") and child.CanCollide == false and child.Name ~= "Head" then
child.CanCollide = true
end
end
Clip = true
else
Clip = false
wait(0.1)
local function NoclipLoop()
if Clip == false and Players.LocalPlayer.Character ~= nil then
for _, child in pairs(Players.LocalPlayer.Character:GetDescendants()) do
if child:IsA("BasePart") and child.CanCollide == true then
child.CanCollide = false
end
end
end
end
Noclipping = RunService.Stepped:Connect(NoclipLoop)
end
end,
})
LeftGroupBox:AddSlider("WSSlider", {
Text = "WalkSpeed",
Default = WSLoopVal,
Min = 5,
Max = 100,
Rounding = 1,
Compact = true,
Callback = function(Value)
WSLoopVal = Value
end,
Disabled = false,
Visible = true,
})
LeftGroupBox:AddSlider("FSpeed", {
Text = "Fly Speed",
Default = 16,
Min = 10,
Max = 300,
Rounding = 1,
Compact = true,
Callback = function(Value)
TargetSpeed = Value
end,
Disabled = false,
Visible = true,
})
task.spawn(function()
while wait() do
if WSLoopEnabled and Players.LocalPlayer.Character and Players.LocalPlayer.Character:FindFirstChild("Humanoid") then
Players.LocalPlayer.Character.Humanoid.WalkSpeed = WSLoopVal
end
if IsFlying and not FPLoop then
for _, Obj in Players.LocalPlayer.Character:GetDescendants() do
if Obj.Name == "Handle" then
Obj.Transparency = 1
pcall(function()
Obj.LocalTransparencyModifier = 1
end)
end
end
end
end
end)
local RightGroupBox = Tabs.Main:AddRightGroupbox("Quick Buttons")
RightGroupBox:AddButton({
Text = "Lobby",
Func = function()
RepStorage.Events.PlayerActions.LeaveToLobby:FireServer()
end,
DoubleClick = true,
Disabled = false,
Visible = true,
})
RightGroupBox:AddButton({
Text = "Play Again",
Func = function()
RepStorage.Events.PlayerActions.PlayAgain:FireServer()
end,
DoubleClick = true,
Disabled = false,
Visible = true,
})
RightGroupBox:AddButton({
Text = "Reset",
Func = function()
RepStorage.Events.EntityEvents.DamageFromClient:FireServer({
AttackedBy = "Legit Hub",
IsSet = true,
IgnoresHide = false,
Damage = 0
})
end,
DoubleClick = true,
Disabled = false,
Visible = true,
})
local LeftGroupBox = Tabs.Main:AddLeftGroupbox("Prompts")
local InstaRact = false
LeftGroupBox:AddToggle("InstantInteract", {
Text = "Instant Interact",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
InstaRact = Value
if Value == false then
for _, Prompt in workspace:GetDescendants() do
if Prompt:IsA("ProximityPrompt") and Prompt:GetAttribute("OrigHold") ~= nil then
Prompt.HoldDuration = Prompt:GetAttribute("OrigHold")
end
end
elseif Value == true then
for _, Prompt in workspace:GetDescendants() do
if Prompt:IsA("ProximityPrompt") then
Prompt:SetAttribute("OrigHold", Prompt.HoldDuration)
Prompt.HoldDuration = 0
end
end
end
end,
})
workspace.DescendantAdded:Connect(function(Prompt)
if Prompt:GetAttribute("Open") ~= nil and Prompt.Name ~= "Door" then
Prompt:GetAttributeChangedSignal("Open"):Once(function()
Prompt.Name = "OpenedSTORAGE"
end)
end
if Prompt:IsA("ProximityPrompt") and InstaRact then
Prompt:SetAttribute("OrigHold", Prompt.HoldDuration)
Prompt.HoldDuration = 0
end
end)
local PM = 1
local PR = false
LeftGroupBox:AddToggle("PromptReach", {
Text = "Prompt Reach",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
PR = Value
if Value == false then
for _, Prompt in workspace:GetDescendants() do
if Prompt:IsA("ProximityPrompt") and Prompt:GetAttribute("OrigHold") ~= nil then
Prompt.RequiresLineOfSight = Prompt:GetAttribute("OrigLOSReq")
Prompt.MaxActivationDistance = Prompt:GetAttribute("OrigMAD")
end
end
elseif Value == true then
for _, Prompt in workspace:GetDescendants() do
if Prompt:IsA("ProximityPrompt") then
Prompt:SetAttribute("OrigLOSReq", Prompt.RequiresLineOfSight)
Prompt:SetAttribute("OrigMAD", Prompt.MaxActivationDistance)
Prompt.RequiresLineOfSight = false
Prompt.MaxActivationDistance = Prompt.MaxActivationDistance * PM
end
end
end
end,
})
LeftGroupBox:AddSlider("PM", {
Text = "Prompt Reach Multiplier",
Default = PM,
Min = 1,
Max = 1.4,
Rounding = 1,
Compact = true,
Callback = function(Value)
PM = Value
if PR then
for _, Prompt in workspace:GetDescendants() do
if Prompt:IsA("ProximityPrompt") then
Prompt:SetAttribute("OrigLOSReq", Prompt.RequiresLineOfSight)
Prompt:SetAttribute("OrigMAD", Prompt.MaxActivationDistance)
Prompt.RequiresLineOfSight = false
Prompt.MaxActivationDistance = Prompt.MaxActivationDistance * PM
end
end
end
end,
Disabled = false,
Visible = true,
})
workspace.DescendantAdded:Connect(function(Prompt)
if Prompt:IsA("ProximityPrompt") and PR then
Prompt:SetAttribute("OrigLOSReq", Prompt.RequiresLineOfSight)
Prompt:SetAttribute("OrigMAD", Prompt.MaxActivationDistance)
Prompt.RequiresLineOfSight = false
Prompt.MaxActivationDistance = Prompt.MaxActivationDistance * PM
end
end)
local RightGroupBox = Tabs.Main:AddLeftGroupbox("Auto-Rooms")
local ARTargetReach = 205
RightGroupBox:AddSlider("ARRoomReach", {
Text = "Room to Reach",
Default = ARTargetReach,
Min = 102,
Max = 205,
Rounding = 0,
Compact = true,
Callback = function(Value)
end,
Disabled = false,
Visible = true,
})
local CollectionService = game:GetService("CollectionService")
local Rooms = workspace.GeneratedRooms
local ARGoing = false
local FiredPrompts = {}
local DoggedRooms = {}
local CutFolder = Instance.new("Folder")
local ARCon
RightGroupBox:AddButton({
Text = "Start/Stop",
Func = function()
ARGoing = not ARGoing
if ARGoing then
for _, scene in ClientMain.CLIENT.CutsceneHandler.Cutscenes:GetChildren() do
scene.Parent = CutFolder
end
Library:Notify("Auto rooms started")
ARCon = RunService.Stepped:Connect(function()
local Character = Players.LocalPlayer.Character
local RoomNumbers = {}
for _, Room in Rooms:GetChildren() do
CollectionService:RemoveTag(Room, "DarkRoom")
local Number = Room.Name:gsub("Room", "")
table.insert(RoomNumbers, tonumber(Number))
end
local LastRoom = math.max(unpack(RoomNumbers)) - 1
local foundRoom = Rooms:FindFirstChild("Room" .. tostring(LastRoom + 1))
if not table.find(DoggedRooms, foundRoom) then
table.insert(DoggedRooms, foundRoom)
if ARGoing and Options.RMUnify.Value == "Current Room" then
Library:Notify("Auto Rooms: Room " .. foundRoom.Name:split("Room")[2])
end
if ARGoing and Options.RMUnify.Value == "Special Room" and foundRoom:GetAttribute("Chance") == 0 then
Library:Notify("Auto Rooms: Special room '" .. foundRoom:GetAttribute("RawName") .. "' reached")
end
end
if not Character then return end
for _, Room in Rooms:GetChildren() do
if Room.Name == "Room195" then
RepStorage.Events.TheObservatory.BeatPuzzle:FireServer()
end
local Door = Room:FindFirstChild("Door") or Room:FindFirstChild("DoorNormal")
local Scriptable = Room:FindFirstChild("Scriptable")
local Hitbox = (Door and Door:FindFirstChild("Hitbox")) or (Scriptable and Scriptable:FindFirstChild("Trigger"))
local Lever = Room:FindFirstChild("CaveLever")
local Prompt = Lever and Lever.ProximityPrompt
local Elevator = Scriptable and Scriptable:FindFirstChild("Elevator")
local ElevatorControl = Elevator and Elevator:FindFirstChild("Control")
local ElevatorPrompt = ElevatorControl and ElevatorControl.Button.ProximityPrompt
if LastRoom ==Options.ARRoomReach.Value - 1 then
FiredPrompts = {}
DoggedRooms = {}
ARCon = ARCon and ARCon:Disconnect()
ARGoing = false
for _, scene in CutFolder:GetChildren() do
scene.Parent = ClientMain.CLIENT.CutsceneHandler.Cutscenes
end
Library:Notify("Auto rooms done")
task.wait(0.5)
RepStorage.Events.VoidEvent:FireServer()
end
if not ARCon then break end
if Prompt and not FiredPrompts[Prompt] then
while Prompt.Enabled do
Character:PivotTo(Lever:GetPivot())
fireproximityprompt(Prompt)
FiredPrompts[Prompt] = true
task.wait()
end
end
if not Hitbox then continue end
local _LastRoom = Rooms:FindFirstChild(`Room{LastRoom}`)
local _CFrame = _LastRoom:GetPivot() * CFrame.new(0, 150, 0)
Character:PivotTo(_CFrame)
Hitbox.CFrame = _CFrame
Hitbox.Size = Vector3.new(2048, 2048, 2048)
end
end)
else
for _, scene in CutFolder:GetChildren() do
scene.Parent = ClientMain.CLIENT.CutsceneHandler.Cutscenes
end
Library:Notify("Auto rooms stopped")
FiredPrompts = {}
DoggedRooms = {}
ARCon = ARCon and ARCon:Disconnect()
ARGoing = false
RepStorage.Events.VoidEvent:FireServer()
end
end,
Disabled = false,
Visible = true,
})
RightGroupBox:AddDropdown("RMUnify", {
Values = { "Current Room", "Special Room"},
Default = 1,
Multi = false,
Text = "Notifications",
Searchable = false,
Disabled = false,
Visible = true,
})
local LeftGroupBox = Tabs.Visuals:AddLeftGroupbox("General")
LeftGroupBox:AddToggle("Fullbright", {
Text = "Fullbright",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
if Value == true then
Lighting.Brightness = 3
Lighting.GlobalShadows = false
elseif Value == false then
Lighting.Brightness = 0
Lighting.GlobalShadows = true
end
end,
})
local noFog = false
LeftGroupBox:AddToggle("NoFog", {
Text = "No-Fog",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
if Value == true then
noFog = true
Lighting.Atmosphere.Density = 0
elseif Value == false then
noFog = false
Lighting.Atmosphere.Density = 0.6
end
end,
})
task.spawn(function()
while wait() do
if noFog then
Lighting.Atmosphere.Density = 0
else
Lighting.Atmosphere.Density = 0.6
end
end
end)
LeftGroupBox:AddToggle("FP", {
Text = "Third Person",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
FPLoop = Value
if Value == true then
if Players.LocalPlayer.Character and Players.LocalPlayer.Character:FindFirstChild("Humanoid") then
ClientMain.Scripts.cameraMain.Enabled = false
workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
Players.LocalPlayer.Character.Humanoid.AutoRotate = true
Players.LocalPlayer.CameraMaxZoomDistance = 10
Players.LocalPlayer.CameraMinZoomDistance = 10
end
elseif Value == false then
if Players.LocalPlayer.Character and Players.LocalPlayer.Character:FindFirstChild("Humanoid") then
ClientMain.Scripts.cameraMain.Enabled = true
end
end
end,
}):AddKeyPicker("KeyPicker", {
Default = "V",
SyncToggleState = true,
Mode = "Toggle",
Text = "Third Person",
NoUI = false,
})
task.spawn(function()
while wait() do
if FPLoop and Players.LocalPlayer.Character then
Players.LocalPlayer.Character.Head.Transparency = 0
Players.LocalPlayer.Character.Head.LocalTransparencyModifier = 0
for _, Obj in Players.LocalPlayer.Character:GetDescendants() do
if Obj.Name == "face" or Obj.Name == "Handle" then
Obj.Transparency = 0
pcall(function()
Obj.LocalTransparencyModifier = 0
end)
end
end
end
end
end)
local NotifyEntities = {"Rush", "Screech", "Ram", "Ambush", "Hoardbats", "Eyes", "Stare", "Onslaught"}
local NotifyEntitiesInternal = {}
local RightGroupBox = Tabs.Visuals:AddRightGroupbox("Notifications")
for _, Entity in NotifyEntities do
NotifyEntitiesInternal[Entity] = false
RightGroupBox:AddToggle("Notify" .. Entity, {
Text = "Notify " .. Entity,
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
NotifyEntitiesInternal[Entity] = Value
end,
})
end
local LeftGroupBox = Tabs.Exploits:AddRightGroupbox("Anti-Trigger")
local AntiTrigger = {"Seek-Chase-Start", "Seek-Chase-Planks-Fall", "Seek-Chase-Obstruction", "Seek-Chase-Boat-Start", "Death-Trigger", "Seek-Last-Room-Start","Prison-Start", "Watcher-Chase-Start","Observatory-Door"}
local AntiTriggerInternal = {}
local function processTrigger(trigger)
if trigger.Name == "Trigger" and trigger:FindFirstChild("Chase") then
trigger.CanTouch = not AntiTriggerInternal["Seek-Chase-Start"]
end
if trigger.Name == "Hitbox" and trigger.Parent:FindFirstChild("Planks") then
trigger.CanTouch = not AntiTriggerInternal["Seek-Chase-Planks-Fall"]
end
if trigger.Name == "EndSequenceHitbox" then
trigger.CanTouch = not AntiTriggerInternal["Seek-Last-Room-Start"]
end
if trigger.Name == "DeathPit" then
trigger.CanTouch = not AntiTriggerInternal["Death-Trigger"]
end
if trigger.Name == "Hitbox" and trigger.Parent:FindFirstChild("AnimatedShelf") then
trigger.CanTouch = not AntiTriggerInternal["Watcher-Chase-Start"]
end
if trigger.Name == "DoorTrigger" and trigger.Parent:FindFirstChild("BigDoor") then
trigger.CanTouch = not AntiTriggerInternal["Observatory-Door"]
end
if trigger.Name == "StartCutscene" and trigger.Parent:FindFirstChild("PivotWatcherCutscene") and trigger.Parent:FindFirstChild("GuidingLight") then
trigger.CanTouch = not AntiTriggerInternal["Prison-Start"]
end
if trigger.Name == "Cube" and trigger.Parent.Name == "Piper" then
trigger.CanTouch = not AntiTriggerInternal["Death-Trigger"]
end
if trigger.Name == "Trigger" and trigger.Parent:FindFirstChild("ObstructionHolder") then
trigger.CanTouch = not AntiTriggerInternal["Seek-Chase-Obstruction"]
end
if trigger.Name == "Trigger" and trigger.Parent:FindFirstChild("2ndPivot") and trigger.Parent:FindFirstChild("Cutscene") then
trigger.CanTouch = not AntiTriggerInternal["Seek-Chase-Boat-Start"]
end
end
for _, Trigger in AntiTrigger do
AntiTriggerInternal[Trigger] = false
LeftGroupBox:AddToggle("Anti" .. Trigger, {
Text = "Anti-" .. Trigger,
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
AntiTriggerInternal[Trigger] = Value
for _, object in workspace:GetDescendants() do
processTrigger(object)
end
end,
})
end
workspace.DescendantAdded:Connect(function(object)
processTrigger(object)
end)
local LeftGroupBox = Tabs.Visuals:AddLeftGroupbox("ESP")
local ESPTracersEnabled: boolean = true
LeftGroupBox:AddToggle("ESPTracers", {
Text = "Tracers",
Default = true,
Disabled = false,
Visible = false,
Callback = function(Value)
ESPTracersEnabled = Value
end,
})
local ESPThings = {"Entity", "Objectives", "Doors", "HidingSpots", "Coins", "Containers"}
for _, Thing in ESPThings do
LeftGroupBox:AddToggle("ESP" .. Thing, {
Text = "ESP " .. Thing,
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
espCategories[Thing] = Value
updateESPVisibility()
end,
})
end
local LeftGroupBox = Tabs.Exploits:AddLeftGroupbox("Exploits")
LeftGroupBox:AddButton({
Text = "Skip Watcher 150",
Func = function()
if ClientMain and ClientMain.CLIENT.Values.CurrentRoom.Value.Name == "Room150" then
RepStorage.Events.ThePrision.FinishedTerminal:FireServer()
else
Library:Notify("You must be in room 150!")
end
end,
Disabled = false,
Visible = true,
})
LeftGroupBox:AddButton({
Text = "+1 Revive (FE)",
Func = function()
shared.giveIt()
end,
Disabled = false,
Visible = true,
})
local function get_latest_room()
local rooms_folder = workspace:FindFirstChild("GeneratedRooms")
if not rooms_folder then return nil end
local room_numbers = {}
for _, child in ipairs(rooms_folder:GetChildren()) do
if child:IsA("Model") then
local num = tonumber(child.Name:match("Room(%d+)"))
if num then
table.insert(room_numbers, num)
end
end
end
table.sort(room_numbers, function(a, b) return a > b end)
if #room_numbers < 2 then return nil end
local latest_room_number = room_numbers[2]
local latest_room_name = "Room" .. latest_room_number
return rooms_folder:FindFirstChild(latest_room_name)
end
LeftGroupBox:AddButton({
Text = "Open Current Room Door",
Func = function()
if ClientMain and ClientMain.CLIENT.Values.CurrentRoom.Value and ClientMain.CLIENT.Values.CurrentRoom.Value.Name:find("Room") then
local Room = ClientMain.CLIENT.Values.CurrentRoom.Value
if Room:FindFirstChild("Door") and Room.Door:FindFirstChild("Hitbox") then
Room.Door.Hitbox.CFrame = Players.LocalPlayer.Character.HumanoidRootPart.CFrame
end
else
Library:Notify("You are not in a room!")
end
end,
Disabled = false,
Visible = true,
})
LeftGroupBox:AddButton({
Text = "Open Latest Room Door",
Func = function()
local Room = get_latest_room()
if Room:FindFirstChild("Door") and Room.Door:FindFirstChild("Hitbox") then
Room.Door.Hitbox.CFrame = Players.LocalPlayer.Character.HumanoidRootPart.CFrame
end
end,
Disabled = false,
Visible = true,
})
LeftGroupBox:AddButton({
Text = "Enable Observatory Lever",
Func = function()
if ClientMain and ClientMain.CLIENT.Values.CurrentRoom.Value.Name == "Room194" then
ClientMain.CLIENT.Values.CurrentRoom.Value:FindFirstChild("CaveLever", true).ProximityPrompt.Enabled = true
else
Library:Notify("You must be in the observatory!")
end
end,
Disabled = false,
Visible = true,
})
local PartialGod = false
LeftGroupBox:AddToggle("PartialGod", {
Text = "Infinite Healing",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
PartialGod = Value
end,
})
local InfRev = false
LeftGroupBox:AddToggle("InfRev", {
Text = "Infinite Revives",
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
InfRev = Value
end,
})
task.spawn(function()
while wait() do
if InfRev then task.spawn(shared.giveIt) end
end
end)
local SIP
LeftGroupBox:AddDropdown("StealItemsPicker", {
SpecialType = "Player",
ExcludeLocalPlayer = true,
Text = "Steal Item Target",
Callback = function(Value)
SIP = Value
end,
})
local expectingDrop = false
LeftGroupBox:AddButton({
Text = "Steal target's equipped item",
Func = function()
if SIP and SIP.Character and SIP.Character:FindFirstChildWhichIsA("Tool") then
expectingDrop = true
print("RE")
RepStorage.Events.PlayerActions.DropItem:InvokeServer( SIP.Character:FindFirstChildWhichIsA("Tool"))
else
Library:Notify("Failed to steal!")
end
end,
Disabled = false,
Visible = true,
})
workspace.DroppedItems.ChildAdded:Connect(function(item)
if not expectingDrop then return end
task.wait(0.5)
fireproximityprompt(item:FindFirstChild("Pickup", true))
Library:Notify("Stole item!")
expectingDrop = false
end)
local AutoCage = false
local DoConLoop = false
LeftGroupBox:AddToggle("AutoCage", {
Text = "Auto Escape Watcher-cage",
Default = true,
Disabled = false,
Visible = false,
Callback = function(Value)
DoConLoop = Value
if Value then
for _, Connection in getconnections(RepStorage.Events.ThePrision.PlayerCaged.OnClientEvent) do
Connection:Disable()
end
else
for _, Connection in getconnections(RepStorage.Events.ThePrision.PlayerCaged.OnClientEvent) do
Connection:Enable()
end
end
end,
})
task.spawn(function()
while wait() do
if DoConLoop then
for _, Connection in getconnections(RepStorage.Events.ThePrision.PlayerCaged.OnClientEvent) do
Connection:Disable()
end
else
for _, Connection in getconnections(RepStorage.Events.ThePrision.PlayerCaged.OnClientEvent) do
Connection:Enable()
end
end
end
end)
RepStorage.Events.ThePrision.PlayerCaged.OnClientEvent:Connect(function()
if not AutoCage then return end
task.wait(4)
RepStorage.Events.ThePrision.MinigameFinished:FireServer()
end)
task.spawn(function()
while wait() do
if PartialGod then
RepStorage.Events.EntityEvents.DamageFromClient:FireServer({
AttackedBy = "Blacklight",
IsSet = true,
IgnoresHide = false,
Damage = math.huge
})
end
end
end)
local RightGroupBox = Tabs.Exploits:AddRightGroupbox("Anti-Entity")
local AntiEntity = {"Blacklight", "Screech", "Void", "Decoy", "Seek"}
for _, Entity in AntiEntity do
AntiEntityInternal[Entity] = false
RightGroupBox:AddToggle("Anti" .. Entity, {
Text = "Anti-" .. Entity,
Default = false,
Disabled = false,
Visible = true,
Callback = function(Value)
if Entity == "Screech" and Value == false and ClientMain then
ClientMain.CLIENT.Values.ScreechActive.Value = false
end
if Entity == "Decoy" and Value == false then
for _, Obj in workspace:GetDescendants() do
if Obj.Name == "AttackRange" then
Obj.CanTouch = true
end
end
elseif Entity == "Decoy" and Value then
for _, Obj in workspace:GetDescendants() do
if Obj.Name == "AttackRange" then
Obj.CanTouch = false
end
end
end
if Entity == "Seek" and Value == false then
for _, Obj in workspace:GetDescendants() do
if Obj.Name == "Hitbox" and Obj.Parent.Name == "Seek" then
Obj.CanTouch = true
end
end
elseif Entity == "Seek" and Value then
for _, Obj in workspace:GetDescendants() do
if Obj.Name == "Hitbox" and Obj.Parent.Name == "Seek" then
Obj.CanTouch = false
end
end
end
AntiEntityInternal[Entity] = Value
end,
})
end
workspace.DescendantAdded:Connect(function(Obj)
if Obj.Name == "AttackRange" and AntiEntityInternal["Decoy"] then
Obj.CanTouch = false
end
if Obj.Name == "Hitbox" and Obj.Parent.Name == "Seek" and AntiEntityInternal["Seek"] then
Obj.CanTouch = false
end
end)
task.spawn(function()
while wait() do
if AntiEntityInternal["Screech"] then
ClientMain.CLIENT.Values.ScreechActive.Value = true
end
if AntiEntityInternal["Watcher"] then
RepStorage:WaitForChild("Events"):WaitForChild("PlayerCrouching"):FireServer(true)
end
end
end)
task.spawn(function()
while wait() do
if workspace:FindFirstChild("WanderWatcher") then
workspace.WanderWatcher:FindFirstChild("PickupArea", true).CanTouch = not AntiEntityInternal["Watcher"]
end
end
end)
old = hookfunction(require(ClientMain.CLIENT.CurrentRoomDependency.Modules.Void).VoidPlayer, function(...)
if AntiEntityInternal["Void"] then
return
else
return old(...)
end
end)
task.spawn(function()
while wait() do
workspace.GameInfo.BlacklightDisabled.Value = AntiEntityInternal["Blacklight"]
end
end)
workspace.ChildAdded:Connect(function(Object)
if Object.Name == 'Eyes' and NotifyEntitiesInternal["Eyes"] then
Library:Notify('Eyes has spawned')
end
if Object.Name == 'Stare' and NotifyEntitiesInternal["Stare"] then
Library:Notify('Stare has spawned')
end
if Object.Name == 'Ram' and NotifyEntitiesInternal["Ram"] then
Library:Notify('Ram has spawned')
end
if Object.Name == 'Ambush' and NotifyEntitiesInternal["Ambush"] then
Library:Notify('Ambush has spawned')
end
if Object.Name == 'Rush' and NotifyEntitiesInternal["Rush"] then
Library:Notify('Rush has spawned')
end
end)
workspace.DescendantAdded:Connect(function(Object)
if Object.Name == 'ScreechAHHHH' and NotifyEntitiesInternal["Screech"] then
Library:Notify('Screech has spawned')
end
end)
workspace.GameInfo.HoardbatsActive:GetPropertyChangedSignal("Value"):Connect(function()
if workspace.GameInfo.HoardbatsActive.Value == true and NotifyEntitiesInternal["Hoardbats"] then
Library:Notify('Hoardbats Swarm has spawned')
end
end)
workspace.GameInfo.LureActive:GetPropertyChangedSignal("Value"):Connect(function()
if workspace.GameInfo.LureActive.Value == true and NotifyEntitiesInternal["Onslaught"]then
Library:Notify('Onslaught has spawned')
end
end)
local MenuGroup = Tabs["UI Settings"]:AddLeftGroupbox("Menu")
MenuGroup:AddToggle("KeybindMenuOpen", {
Default = Library.KeybindFrame.Visible,
Text = "Open Keybind Menu",
Callback = function(value)
Library.KeybindFrame.Visible = value
end,
})
MenuGroup:AddToggle("ShowCustomCursor", {
Text = "Custom Cursor",
Default = true,
Callback = function(Value)
Library.ShowCustomCursor = Value
end,
})
MenuGroup:AddDropdown("NotificationSide", {
Values = { "Left", "Right" },
Default = "Right",
Text = "Notification Side",
Callback = function(Value)
Library:SetNotifySide(Value)
end,
})
MenuGroup:AddDropdown("DPIDropdown", {
Values = { "50%", "75%", "100%", "125%", "150%", "175%", "200%" },
Default = "100%",
Text = "DPI Scale",
Callback = function(Value)
Value = Value:gsub("%%", "")
local DPI = tonumber(Value)
Library:SetDPIScale(DPI)
end,
})
MenuGroup:AddButton("Unload", function()
Library:Unload()
end)
Library:OnUnload(function()
ARCon = ARCon and ARCon:Disconnect()
shared.giveIt = nil
Toggles["FP"]:SetValue(true)
Toggles["FP"]:SetValue(false)
for _, toggle in Toggles do
toggle:SetValue(false)
end
end)
MenuGroup:AddDivider()
MenuGroup:AddLabel("Menu bind")
:AddKeyPicker("MenuKeybind", { Default = "RightShift", NoUI = true, Text = "Menu keybind" })
Library.ToggleKeybind = Options.MenuKeybind
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })
ThemeManager:SetFolder("LegitHub")
SaveManager:SetFolder("LegitHub/foundation")
SaveManager:SetSubFolder("game")
ThemeManager:ApplyToTab(Tabs["UI Settings"])
SaveManager:LoadAutoloadConfig()
SaveManager:BuildConfigSection(Tabs["UI Settings"])
local ESPLibrary = loadstring(game:HttpGet(
'https://raw.githubusercontent.com/mstudio45/MSESP/refs/heads/main/source.luau'
))()
local colors = {
Entity = Color3.fromRGB(255, 0, 0),
Objectives = Color3.fromRGB(0, 255, 0),
HidingSpots = BrickColor.new('Gray').Color,
Doors = Color3.fromRGB(0, 0, 150),
Coins = Color3.new(0.898039, 0.913725, 0.000000),
Containers = BrickColor.new('Gray').Color,
}
local function addESP(part, name, category)
local esp = ESPLibrary:Add({
Name = name,
Model = part,
Color = colors[category],
MaxDistance = math.huge,
TextSize = 17,
ESPType = 'Highlight',
FillColor = colors[category],
OutlineColor = colors[category],
Tracer = {
Enabled = true,
Color = colors[category],
},
})
table.insert(allTrackedESPs, {
ESP = esp,
Category = category,
})
if not espCategories[category] then
esp:Hide()
end
return esp
end
local roomSpecESPs = {}
local function processRoom(room)
for _, object in room:GetDescendants() do
task.spawn(function()
if espCategories.HidingSpots then
if object.Name == 'Locker' or object.Name == 'Toolshed_Hiding' then
table.insert(roomSpecESPs, addESP(object, 'Hiding-Spot', 'HidingSpots'))
elseif object.Name == 'decoyLocker' then
table.insert(roomSpecESPs, addESP(object, 'Decoy', 'Entity'))
end
end
if espCategories.Objectives then
if object.Name == 'OilCanister' then
table.insert(roomSpecESPs, addESP(object, 'Oil Can', 'Objectives'))
elseif object.Name == 'GasCanister' then
table.insert(roomSpecESPs, addESP(object, 'Gas Canister', 'Objectives'))
elseif object.Name == 'GeneratorPuzzle' then
table.insert(roomSpecESPs, addESP(object, 'Generator', 'Objectives'))
elseif object.Name == 'Terminal' then
table.insert(roomSpecESPs, addESP(object, 'Terminal', 'Objectives'))
elseif object.Name == 'Switch' and not object:FindFirstAncestor('Switch') and not object:FindFirstAncestor('Flashlight') then
table.insert(roomSpecESPs, addESP(object, 'Fuse', 'Objectives'))
elseif object.Name == 'GivingCoins' then
table.insert(roomSpecESPs, addESP(object.Parent, 'Coins', 'Coins'))
elseif object.Name == 'Container' and not object.Parent:HasTag("ContainerMarked") then
object.Parent:AddTag("ContainerMarked")
table.insert(roomSpecESPs, addESP(object.Parent, 'Container', 'Containers'))
elseif object.Name == 'Minigame' and object:FindFirstChild('Switches') then
table.insert(roomSpecESPs, addESP(object, 'Breaker Minigame', 'Objectives'))
elseif object.Name == 'ObservatoryKey' then
table.insert(roomSpecESPs, addESP(object, 'Key', 'Objectives'))
elseif object.Name == 'SignModel' then
local sign = object:WaitForChild('Sign')
table.insert(roomSpecESPs, addESP(sign, 'Directional Sign', 'Objectives'))
sign.Material = Enum.Material.Neon
sign.Color = Color3.fromRGB(255, 255, 255)
elseif object.Name == 'Control'
and object.Parent.Name == 'Elevator'
and object.Parent.Parent:FindFirstChild('ElevatorHandler') then
table.insert(roomSpecESPs, addESP(object, 'Exit Elevator', 'Objectives'))
object:WaitForChild('Sign').Material = Enum.Material.Neon
elseif object.Name == 'OxygenTank' then
table.insert(roomSpecESPs, addESP(object, 'Oxygen Can', 'Objectives'))
elseif (object.Name == 'CaveLever' or object.Name == 'Lever')
and not object:FindFirstAncestor('GeneratorPuzzle')
and not object:FindFirstAncestor('EndPanel')
and not object:FindFirstAncestor('GeneratorDeco') then
if object:GetAttribute('Order') then
table.insert(roomSpecESPs, addESP(object, 'Lever ' .. object:GetAttribute('Order'), 'Objectives'))
else
table.insert(roomSpecESPs, addESP(object, 'Lever', 'Objectives'))
end
end
end
if espCategories.Doors then
if (object.Name == 'Door' and object.Parent.Parent.Name == 'GeneratedRooms') or object.Name == 'Chunk_Watcher' then
table.insert(roomSpecESPs, addESP(object, 'Door', 'Doors'))
end
end
end)
end
end
local function doProcVal(object)
local foundRoom = object.Value
if foundRoom then
for _, ESP in roomSpecESPs do
ESP:Hide()
end
table.clear(roomSpecESPs)
processRoom(foundRoom)
end
end
local function processLocalPlayerDescendant(object)
if object.Name == 'CurrentRoom' and object:IsA('ObjectValue') then
print('Found val at ' .. object:GetFullName())
task.delay(1, function()
doProcVal(object)
end)
object:GetPropertyChangedSignal('Value'):Connect(function()
doProcVal(object)
end)
end
end
game.Players.LocalPlayer.DescendantAdded:Connect(processLocalPlayerDescendant)
for _, object: Instance in game.Players.LocalPlayer:GetDescendants() do
processLocalPlayerDescendant(object)
end
local function processObject(object)
if object:FindFirstAncestor('Game Configuration') then return end
if espCategories.Entity then
if object.Name == 'HoardbatClient' or object.Name == "HoardBat" then
addESP(object, 'Hoardbat', 'Entity')
elseif object.Name == 'Eyes' and not object.Parent.Name == 'Bob' then
addESP(object, 'Eyes', 'Entity')
elseif object.Name == 'Stare' then
addESP(object, 'Stare', 'Entity')
elseif object.Name == 'Ram' then
addESP(object, 'Ram', 'Entity')
elseif object.Name == 'Ambush' then
addESP(object, 'Ambush', 'Entity')
elseif object.Name == 'Rush' then
addESP(object, 'Rush', 'Entity')
elseif object.Name == 'FigureRig' then
addESP(object, 'Figure', 'Entity')
elseif object.Name == 'WanderWatcher' then
addESP(object, 'Watcher', 'Entity')
elseif object.Name == 'Seek' then
addESP(object, 'Seek', 'Entity')
end
end
end
workspace.DescendantAdded:Connect(processObject)
for _, object in workspace:GetDescendants() do
processObject(object)
end