Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Constants
- local REMOVE_BANANA_PEELS = true
- local REMOVE_JEFFTHEKILLER_HITBOX = true -- makes jeff unable to deal damage
- local REMOVE_GREED_RISK = true -- makes you unable to collect gold when you risk taking damage from greed
- local REMOVE_AMBIENCE_SOUNDS = true -- not that necessary but if you want to hear better keep it
- local REMOVE_EYES_DAMAGE = true -- makes eyes deal no damage
- local REMOVE_SCREECH = true
- local REMOVE_LIGHT_SHATTER = true -- makes lights not shatter from any entity moving (screech will still appear unless removed)
- -- creates a guiding light so you know where to go
- local MARK_NEXT_DOOR = true
- local MARK_GATE_LEVER = true
- local MARK_HINT_BOOKS = true
- local SPEED_BOOST_ENABLED = true
- local BOOST_EXTRA_WALKSPEED = 5.75 -- above makes you teleport back by anticheat
- local CREATE_ENTITY_HINTS = true -- watch your topbar for hints when entities spawn
- --- don't touch below (you can however change light properties, color is (red, green, blue) up to 255)
- -- Services
- local PlayersService = game:GetService("Players")
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- -- Vars
- local CurrentRooms = workspace:WaitForChild("CurrentRooms")
- local LocalPlayer = PlayersService.LocalPlayer
- --
- local Hint
- local function HandleModels(model)
- task.wait(0.1)
- local modelIdentifier = model.Name
- if modelIdentifier == "BananaPeel" and REMOVE_BANANA_PEELS then
- model:Destroy()
- elseif modelIdentifier == "JeffTheKiller" and REMOVE_JEFFTHEKILLER_HITBOX then
- local knife = model:WaitForChild("Knife", 10)
- if not knife then
- return
- end
- for _, descendant in ipairs(model:GetDescendants()) do
- if descendant:IsA("BasePart") then
- descendant.CanTouch = false
- descendant.CanQuery = false
- end
- end
- elseif (modelIdentifier == "RushMoving" or modelIdentifier == "AmbushMoving") and CREATE_ENTITY_HINTS then
- if Hint then
- return
- end
- task.wait(0.15)
- local primaryPart = model.PrimaryPart
- if not primaryPart or primaryPart.Position.Y < -100 then -- don't watch fake ones
- return
- end
- local entityIdentifier = primaryPart.Name
- local resultName = entityIdentifier == "RushNew" and string.gsub(model.Name, "Moving", "") or entityIdentifier
- Hint = Instance.new("Hint")
- Hint.Text = resultName.. " is coming! hide!!!"
- Hint.Parent = workspace
- -- yield until the entity is destroyed completely
- model:GetPropertyChangedSignal("Parent"):Wait()
- Hint:Destroy()
- Hint = nil
- end
- end
- local function HandleRooms(room)
- task.wait(2)
- local nextRoomId = tonumber(room.Name) + 1
- for _, descendant in ipairs(room:GetDescendants()) do
- local guidingLight = Instance.new("PointLight")
- if MARK_GATE_LEVER and descendant.Name == "LeverForGate" then
- guidingLight.Range = 60
- guidingLight.Color = Color3.fromRGB(0, 255, 255)
- guidingLight.Shadows = true
- guidingLight.Parent = descendant:WaitForChild("Main", 5)
- elseif MARK_HINT_BOOKS and descendant.Name == "LiveHintBook" then
- guidingLight.Range = 20
- guidingLight.Color = Color3.fromRGB(255, 0, 255)
- guidingLight.Shadows = false
- guidingLight.Parent = descendant:WaitForChild("Base", 5)
- elseif MARK_NEXT_DOOR and descendant:GetAttribute("RoomID") == nextRoomId then
- guidingLight.Range = 40
- guidingLight.Color = Color3.fromRGB(255, 255, 255)
- guidingLight.Shadows = false
- guidingLight.Parent = descendant:WaitForChild("Door", 5)
- end
- end
- end
- local function HandleLoot(prompt)
- if not REMOVE_GREED_RISK then
- return
- end
- if prompt.Name ~= "LootPrompt" or prompt.ActionText ~= "Collect" then
- return
- end
- -- if this isn't done script won't be able to use holdbegan signal to prevent collecting
- prompt.HoldDuration = 0.025
- local holdBeganConnection
- local ancestryChangedConnection
- holdBeganConnection = prompt.PromptButtonHoldBegan:Connect(function(playerWhoTriggered)
- if LocalPlayer ~= playerWhoTriggered or LocalPlayer:GetAttribute("Greed") ~= 6 or prompt.HoldDuration == 999999 then
- return
- end
- prompt.HoldDuration = 999999
- -- yield until greed level changes
- LocalPlayer:GetAttributeChangedSignal("Greed"):Wait()
- prompt.HoldDuration = 0.025
- end)
- ancestryChangedConnection = game.AncestryChanged:Connect(function()
- if prompt:IsDescendantOf(CurrentRooms) then
- return
- end
- -- prompt was removed from workspace; these connections will only take memory
- holdBeganConnection:Disconnect()
- ancestryChangedConnection:Disconnect()
- holdBeganConnection = nil
- ancestryChangedConnection = nil
- end)
- end
- local function HandleEntities()
- local entitiesFolder = ReplicatedStorage:WaitForChild("Entities", 5)
- if not entitiesFolder then
- return
- end
- if REMOVE_SCREECH then
- local screechModel = entitiesFolder:WaitForChild("Screech", 5)
- if not screechModel then
- return
- end
- screechModel:Destroy()
- end
- end
- local function HandleAmbience()
- if not REMOVE_AMBIENCE_SOUNDS then
- return
- end
- local ambience_dark = workspace:WaitForChild("Ambience_Dark", 5)
- if ambience_dark then
- ambience_dark.Volume = 0
- end
- local ambienceFolder = workspace:WaitForChild("Ambience", 5)
- if not ambienceFolder then
- return
- end
- for _, descendant in ipairs(ambienceFolder:GetDescendants()) do
- if descendant.ClassName == "Sound" then
- descendant.Volume = 0
- end
- end
- end
- local function HandleSpeedBoost()
- if not SPEED_BOOST_ENABLED then
- return
- end
- local function handleCharacter(character)
- local humanoid = character:WaitForChild("Humanoid")
- local updating = false
- local function updateSpeedBoost()
- if updating then
- return
- end
- -- basic debounce
- updating = true
- humanoid:SetAttribute("SpeedBoostBehind", BOOST_EXTRA_WALKSPEED)
- updating = false
- end
- humanoid:GetAttributeChangedSignal("SpeedBoostBehind"):Connect(updateSpeedBoost)
- updateSpeedBoost()
- end
- -- on revive
- LocalPlayer.CharacterAdded:Connect(handleCharacter)
- handleCharacter(LocalPlayer.Character)
- end
- local function HandleGameEvents()
- local function isValid(func)
- return type(func) == "function" and islclosure(func) and not is_synapse_function(func)
- end
- local gc = getgc()
- for _, value in pairs(gc) do
- if REMOVE_LIGHT_SHATTER then
- if isValid(value) then
- local info = debug.getinfo(value)
- if info.currentline == 14 and string.find(info.short_src, "Module_Events") then
- local functionEnvironment = getfenv(value)
- -- remove luau optimizations (thats necessary)
- setuntouched(functionEnvironment, false)
- -- overwrite spawn
- functionEnvironment.spawn = function()end
- break
- end
- end
- end
- end
- end
- local function HandleRemotes()
- local entityInfo = ReplicatedStorage:WaitForChild("EntityInfo", 5)
- if not entityInfo then
- return
- end
- if REMOVE_EYES_DAMAGE then
- local motorReplicationEvent = entityInfo:WaitForChild("MotorReplication", 5)
- if not motorReplicationEvent then
- return
- end
- local findFirstChild = game.FindFirstChild
- local originalNC
- originalNC = hookmetamethod(game, "__namecall", function(self, ...)
- if self and rawequal(self, motorReplicationEvent) then
- if findFirstChild(workspace, "Eyes") then
- local function filter(x, y, ...) -- x, y, z, crouching
- return x, -89 - math.random(), ...
- end
- return originalNC(self, filter(...))
- end
- end
- return originalNC(self, ...)
- end, true)
- end
- end
- local function SetUp()
- workspace.ChildAdded:Connect(HandleModels)
- for _, child in ipairs(workspace:GetChildren()) do
- task.spawn(HandleModels, child)
- end
- --
- CurrentRooms.ChildAdded:Connect(HandleRooms)
- --
- game.DescendantAdded:Connect(HandleLoot)
- for _, descendant in ipairs(game:GetDescendants()) do
- task.spawn(HandleLoot, descendant)
- end
- --
- task.spawn(HandleEntities)
- task.spawn(HandleAmbience)
- task.spawn(HandleSpeedBoost)
- task.spawn(HandleGameEvents)
- task.spawn(HandleRemotes)
- end
- SetUp()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement