-- Patch 309: Relax false-positive cooldown UI detection and allow Drag V2 to reach check 7. -- Patch 305: Slasher/Sixer Drag V2 uses a 1.75x normal ABH hitbox on check 7. -- Patch 303: reliable hitbox visualization folder and nil-safe ShowHitboxes setting. -- Patch 191 base: Restore loading from Patch 189. -- Forsaken Plus Made by Naiko Scripts -- -- Copies of this script must contain the original credits and be open source -- if workspace.DistributedGameTime < 4 then task.wait(4 - workspace.DistributedGameTime) end local ExistingPlusMarker = game.CoreGui:FindFirstChild("Plus") local ExistingPlusScreen pcall(function() local ExistingPlayer = game:GetService("Players").LocalPlayer local ExistingPlayerGui = ExistingPlayer and ExistingPlayer:FindFirstChildOfClass("PlayerGui") local ExistingMainUI = ExistingPlayerGui and ExistingPlayerGui:FindFirstChild("MainUI") ExistingPlusScreen = ExistingMainUI and ExistingMainUI:FindFirstChild("PlusScreen") end) -- A failed startup can leave the old CoreGui marker behind. Only treat the -- script as running when its actual PlusScreen was created; otherwise remove -- the stale marker so the repaired script can start on the next attempt. if ExistingPlusMarker and ExistingPlusScreen then return warn("Script already running") elseif ExistingPlusMarker then ExistingPlusMarker:Destroy() end if game.GameId == 6331902150 or game.GameId == 7464167604 or workspace:GetAttribute("ServerType") then Instance.new("BoolValue", game.CoreGui).Name = "Plus" else return warn("Incorrect game") end game:GetService("Players").LocalPlayer.Idled:Connect(function() game:GetService("VirtualUser"):ClickButton2(Vector2.new()) end) -- General Variables -- Version = "1.8" Players = game:GetService("Players") LocalPlayer = Players.LocalPlayer LocalCharacter = LocalPlayer.Character LocalHumanoid = LocalCharacter and (LocalCharacter:FindFirstChildOfClass("Humanoid") or LocalCharacter:WaitForChild("Humanoid",2)) or nil LocalHead = LocalCharacter and (LocalCharacter:FindFirstChild("Head") or LocalCharacter:WaitForChild("Head",2)) or nil LocalRoot = LocalCharacter and ((LocalHumanoid and LocalHumanoid.RootPart) or LocalCharacter:FindFirstChild("HumanoidRootPart") or LocalCharacter:WaitForChild("HumanoidRootPart",2)) or nil LocalAnimator = LocalHumanoid and (LocalHumanoid:FindFirstChildOfClass("Animator") or LocalHumanoid:WaitForChild("Animator",2)) or nil SpeedMultipliers = LocalCharacter and (LocalCharacter:FindFirstChild("SpeedMultipliers")) or nil ResistanceMultipliers = LocalCharacter and (LocalCharacter:FindFirstChild("ResistanceMultipliers")) or nil FOVMultipliers = LocalCharacter and (LocalCharacter:FindFirstChild("FOVMultipliers")) or nil CoreGui = game:GetService("CoreGui") PlayerGui = LocalPlayer:FindFirstChildOfClass("PlayerGui") or LocalPlayer:WaitForChild("PlayerGui", 20) MainUI = PlayerGui:FindFirstChild("MainUI") or PlayerGui:WaitForChild("MainUI", 80) PlayerData = LocalPlayer:FindFirstChild("PlayerData") or LocalPlayer:WaitForChild("PlayerData", 20) PlusFolderSettings = Instance.new("Folder") SideBar = MainUI:FindFirstChild("Sidebar") or MainUI:WaitForChild("Sidebar", 20) Buttons = SideBar:FindFirstChild("Buttons") or SideBar:FindFirstChild("Middle") or SideBar:WaitForChild("Buttons", 20) or SideBar:WaitForChild("Middle", 20) MainButton = Buttons:FindFirstChild("Settings") or Buttons:FindFirstChild("Stats") or Buttons:WaitForChild("Settings", 20) or Buttons:FindFirstChild("Stats") or Buttons:WaitForChild("Stats", 20) SidePlusButton = MainButton and MainButton:Clone() PlusButton = SidePlusButton and SidePlusButton:FindFirstChild("Button") or nil PulloutFramePlus = SidePlusButton and SidePlusButton:FindFirstChild("PulloutHolder") and SidePlusButton.PulloutHolder:FindFirstChild("PulloutFrame") NewUIVersion = not PulloutFramePlus SettingsMenu = MainUI:FindFirstChild("SettingsScreen") or MainUI:WaitForChild("SettingsScreen", 20) TempUI = PlayerGui:FindFirstChild("TemporaryUI") or PlayerGui:WaitForChild("TemporaryUI",5) PlusMenu = SettingsMenu and SettingsMenu:Clone() PlayersFolder = workspace:FindFirstChild("Players") KillersFolder = PlayersFolder and PlayersFolder:FindFirstChild("Killers") SurvivorsFolder = PlayersFolder and PlayersFolder:FindFirstChild("Survivors") RagdollsFolder = workspace:FindFirstChild("Ragdolls") Hitboxes = workspace:FindFirstChild("Hitboxes") -- Patch 303: refresh/recreate the visualization folder if the game replaces it. local function GetHitboxesFolder() local CurrentFolder = workspace:FindFirstChild("Hitboxes") if not CurrentFolder then CurrentFolder = Instance.new("Folder") CurrentFolder.Name = "Hitboxes" CurrentFolder.Parent = workspace end Hitboxes = CurrentFolder return CurrentFolder end local function AreHitboxesShown() -- The settings object may load after the detector starts; don't error if it's missing. local Settings = PlayerData and PlayerData:FindFirstChild("Settings") local Setting = Settings and Settings:FindFirstChild("ShowHitboxes", true) if Setting and Setting:IsA("BoolValue") then ShowHitboxesSetting = Setting return Setting.Value end return ShowHitboxesSetting ~= nil and ShowHitboxesSetting.Value == true end MarketplaceService = game:GetService("MarketplaceService") ReplicatedStorage = game:GetService("ReplicatedStorage") UserInputService = game:GetService("UserInputService") TextChatService = game:GetService("TextChatService") PhysicsService = game:GetService("PhysicsService") TweenService = game:GetService("TweenService") GroupService = game:GetService("GroupService") HttpService = game:GetService("HttpService") LogService = game:GetService("LogService") RunService = game:GetService("RunService") StarterGui = game:GetService("StarterGui") Lighting = game:GetService("Lighting") Debris = game:GetService("Debris") AssetsFolder = ReplicatedStorage:FindFirstChild("Assets") or ReplicatedStorage:WaitForChild("Assets",3) SkinsAssets = AssetsFolder and AssetsFolder:FindFirstChild("Skins") SurvivorAssets = AssetsFolder and AssetsFolder:FindFirstChild("Survivors") KillerAssets = AssetsFolder and AssetsFolder:FindFirstChild("Killers") FlowGame = ReplicatedStorage:FindFirstChild("FlowGame",true) Network = ReplicatedStorage:FindFirstChild("Modules") and (ReplicatedStorage:FindFirstChild("Modules"):FindFirstChild("Network",true) and ReplicatedStorage:FindFirstChild("Modules"):FindFirstChild("Network",true):FindFirstChild("Network")) or ReplicatedStorage:FindFirstChild("Modules"):FindFirstChild("Network",true) or nil InGame = workspace:FindFirstChild("Map") and workspace:FindFirstChild("Map"):FindFirstChild("Ingame") GameMap = InGame and InGame:FindFirstChild("Map") or nil RoundEvent = Instance.new("BindableEvent") local BindableShouldStop = Instance.new("BindableEvent") local UIScale = Instance.new("UIScale") IsUnderground,IsFixingGenerator,WarnedAboutFilesCompatability = false,false,false local AutoDoAllInvincibleToken = 0 local IsAutoDoAllGeneratorsRunning = false local AutoDoAllPuzzleWasEnabled = nil OverriddenAnimations,AllAnimations,Values = {},{["Default Roblox"] = {["Idle"] = "http://www.roblox.com/asset/?id=180435571",["Walk"] = "http://www.roblox.com/asset/?id=180426354",["Run"] = "http://www.roblox.com/asset/?id=180426354"}},{} local ModulesOptions,LastTrack,NoliConfig,GetAnimationType,LastAnimOriginalUsed,UpdateAnim,CanPlayOverrideAnim,CurrentQTEAzure,TeleportSound,GetFunction ColorPresets = {["White"] = Color3.fromRGB(255,255,255),["Teal"] = Color3.fromRGB(3,252,157),["Green"] = Color3.fromRGB(0,255,0),["Purple"] = Color3.fromRGB(158, 0, 179),["Red"] = Color3.fromRGB(255,0,0),["Blue"] = Color3.fromRGB(0,0,255),["Cyan"] = Color3.fromRGB(0,255,255),["Gold"] = Color3.fromRGB(255,215,0),["Orange"] = Color3.fromRGB(255,165,0)} IgnoreKeybinds = {"W", "A", "S", "D"} GameVersionForScript = "2026-10-06" -- Patch 198: Drag Block Helpless/cooldown handling. -- Patch 199: Added WallCheck gate for Auto Block and Drag Block. -- Patch 302: Allow both Drag Block and Drag V2 follow calls immediately after their own successful Block trigger, while preserving cooldown checks for ordinary calls. -- Patch 307: Enforce Block cooldown before firing and retain the follow throttle. -- Physically walks toward the killer while Auto Block is active. -- Helpless pauses an existing follow instead of resetting/cancelling it. -- New Drag Block triggers are rejected during Helpless; cooldown time still advances. -- All survivor movement inputs are blocked until the routine finishes. local DragBlockBusy = false local DragBlockToken = 0 local DragBlockLastFollowAt = -math.huge -- Drag Block now follows the game's actual Block cooldown instead of a hardcoded timer. -- The value is refreshed from the Block ability UI whenever the block is used. local FOLLOW_KILLER_COOLDOWN = 0 local LastKnownBlockCooldown = 0 local CancelDragBlockFollow = nil -- Exact Helpless detection from ReplicatedStorage.Modules.Schematics.StatusEffects.Helpless. -- The game's Applied handler sets Character.AbilitiesDisabled = true. local function IsHelplessActive() if not LocalCharacter or not LocalCharacter.Parent then return false end return LocalCharacter:GetAttribute("AbilitiesDisabled") == true end -- Patch 199: WallCheck prevents Auto Block and Drag Block from triggering -- when a solid obstacle is between the survivor and the attacking killer. -- It uses the same local/client-side raycast idea as the standalone tracer. local function IsWallCheckBlocked(Killer) if not GetValue("WallCheck", true) then return false end local Character = LocalCharacter local Root = LocalRoot or (Character and Character:FindFirstChild("HumanoidRootPart")) if not Character or not Character.Parent or not Root or not Root.Parent or not Killer or not Killer.Parent then return false end local KillerRoot = Killer:FindFirstChild("HumanoidRootPart") or Killer:FindFirstChild("LowerTorso") or Killer:FindFirstChild("Torso") if not KillerRoot then return false end local Origin = Root.Position local Destination = KillerRoot.Position local Direction = Destination - Origin if Direction.Magnitude <= 0.05 then return false end local Params = RaycastParams.new() Params.FilterType = Enum.RaycastFilterType.Exclude Params.FilterDescendantsInstances = {Character, Killer} Params.IgnoreWater = true -- Skip non-solid/query-only decorative parts and keep checking until the -- line reaches the killer. Terrain or a solid collidable part counts as a wall. local CurrentOrigin = Origin local Remaining = Direction for _ = 1, 12 do local Result = workspace:Raycast(CurrentOrigin, Remaining, Params) if not Result then return false end local Hit = Result.Instance if Hit:IsA("Terrain") then return true end if Hit:IsA("BasePart") and Hit.CanCollide and Hit.Transparency < 1 then return true end local ToHit = Result.Position - CurrentOrigin local RemainingDistance = Remaining.Magnitude if ToHit.Magnitude >= RemainingDistance - 0.05 then return false end local Step = math.max(0.05, ToHit.Magnitude + 0.05) CurrentOrigin += Remaining.Unit * Step Remaining = Destination - CurrentOrigin if Remaining.Magnitude <= 0.05 then return false end end return true end -- Read the game's current Block cooldown from the Block ability UI. -- Different game versions can expose it as an attribute or as a countdown label, -- so support both without changing the game's Block cooldown itself. local function UpdateDragBlockCooldownFromBlockUI(BlockButton) if not BlockButton then return end local function AcceptNumber(Value) local Number = tonumber(Value) if Number and Number > 0 and Number < 120 then LastKnownBlockCooldown = Number FOLLOW_KILLER_COOLDOWN = Number return true end return false end for _, AttributeName in {"Cooldown", "CooldownTime", "CooldownDuration", "Duration"} do if AcceptNumber(BlockButton:GetAttribute(AttributeName)) then return end end for _, Descendant in BlockButton:GetDescendants() do for _, AttributeName in {"Cooldown", "CooldownTime", "CooldownDuration", "Duration", "Time"} do if AcceptNumber(Descendant:GetAttribute(AttributeName)) then return end end if Descendant:IsA("TextLabel") or Descendant:IsA("TextButton") then local Name = string.lower(Descendant.Name or "") local Text = tostring(Descendant.Text or "") local Number = tonumber(Text:match("(%d+%.?%d*)")) if Number and (Name:find("cooldown", 1, true) or Name:find("cd", 1, true)) then if AcceptNumber(Number) then return end end end end end -- Patch 307: gate the actual ABH trigger before attempting to activate Block. -- BlockJustTriggered is only for the one follow associated with a real trigger; -- it must not let later hitbox checks fire Block again while its UI is cooling down. local function IsDragBlockCooldownActive(BlockButton) if not BlockButton then return true end if BlockButton:GetAttribute("OnCooldown") == true or BlockButton:GetAttribute("CooldownActive") == true or BlockButton:GetAttribute("Disabled") == true then return true end for _, Descendant in BlockButton:GetDescendants() do local Name = string.lower(Descendant.Name or "") if Descendant:GetAttribute("OnCooldown") == true or Descendant:GetAttribute("CooldownActive") == true then return true end if (Descendant:IsA("TextLabel") or Descendant:IsA("TextButton")) and (Name:find("cooldown", 1, true) or Name == "cd") then local Remaining = tonumber(tostring(Descendant.Text or ""):match("(%d+%.?%d*)")) if Remaining and Remaining > 0 then return true end end end return false end -- Normal Drag Block only. Cooldown is recorded when a valid follow trigger -- starts, so repeated ABH/sound callbacks cannot restart it early. local function DragBlockAttackingKiller(Killer, FeatureName, BlockJustTriggered) FeatureName = FeatureName or "DragBlock" if DragBlockBusy or not GetValue(FeatureName, false) then return end if IsWallCheckBlocked(Killer) then return end -- A new follow may not start while Helpless is active. if IsHelplessActive() then return end local AbilityContainer = MainUI and MainUI:FindFirstChild("AbilityContainer") local BlockButton = AbilityContainer and AbilityContainer:FindFirstChild("Block") if not BlockButton then return end UpdateDragBlockCooldownFromBlockUI(BlockButton) -- Preserve this patch's existing Block UI/cooldown checks for normal Drag Block. -- Drag V2 is invoked immediately after a successful fourth ABH check, so its -- just-triggered Block cooldown UI must not reject that same follow request. if not BlockJustTriggered then if BlockButton:GetAttribute("OnCooldown") == true or BlockButton:GetAttribute("CooldownActive") == true or BlockButton:GetAttribute("Disabled") == true or BlockButton.Active == false then return end for _, Descendant in BlockButton:GetDescendants() do local Name = string.lower(Descendant.Name or "") if Descendant:GetAttribute("OnCooldown") == true or Descendant:GetAttribute("CooldownActive") == true or ((Name:find("cooldown", 1, true) or Name == "cd") and Descendant:IsA("GuiObject") and Descendant.Visible) then return end if (Descendant:IsA("TextLabel") or Descendant:IsA("TextButton")) and (Name:find("cooldown", 1, true) or Name == "cd") then local Remaining = tonumber(tostring(Descendant.Text or ""):match("(%d+%.?%d*)")) if Remaining and Remaining > 0 then return end end end end local Now = time() local CurrentBlockCooldown = LastKnownBlockCooldown if CurrentBlockCooldown <= 0 then CurrentBlockCooldown = FOLLOW_KILLER_COOLDOWN end -- Patch 306: BlockJustTriggered only bypasses the UI's newly-started -- cooldown state; it must NOT bypass the reader-based follow throttle. -- This allows the first valid follow immediately, then prevents both -- Drag Block and Drag V2 from retriggering until the learned cooldown ends. if CurrentBlockCooldown > 0 and Now - DragBlockLastFollowAt < CurrentBlockCooldown then return end if not Killer or not Killer.Parent then return end local Character = LocalCharacter local Humanoid = LocalHumanoid local Root = LocalRoot local KillerRoot = Killer:FindFirstChild("HumanoidRootPart") if not Character or not Humanoid or not Root or not KillerRoot then return end local PathfindingService = game:GetService("PathfindingService") local ContextActionService = game:GetService("ContextActionService") local Players = game:GetService("Players") local MovementActionName = "AutoBlockFollowMovementOverride" local KillerNameLower = string.lower(Killer.Name or "") local STOP_DISTANCE = tonumber(GetValue("DragBlockStopDistance")) or (KillerNameLower:find("c00lkidd", 1, true) and 2 or 3) local FOLLOW_DURATION = tonumber(GetValue("DragBlockHoldDuration")) or 0.2 local WALK_DISTANCE_ONCE = 3 local MOVE_TIMEOUT = math.max(1.5, FOLLOW_DURATION + 1.0) local function GetFlatDistance() if not Root or not Root.Parent or not KillerRoot or not KillerRoot.Parent then return math.huge end local Delta = Vector3.new(KillerRoot.Position.X - Root.Position.X, 0, KillerRoot.Position.Z - Root.Position.Z) return Delta.Magnitude end if GetFlatDistance() <= STOP_DISTANCE then return end DragBlockLastFollowAt = Now DragBlockBusy = true DragBlockToken += 1 local Token = DragBlockToken local OriginalWalkSpeed = Humanoid.WalkSpeed local OriginalJumpPower = Humanoid.JumpPower local OriginalJumpHeight = Humanoid.JumpHeight local OriginalAutoRotate = Humanoid.AutoRotate local PlayerControls pcall(function() local PlayerScripts = Players.LocalPlayer:FindFirstChildOfClass("PlayerScripts") local PlayerModule = PlayerScripts and PlayerScripts:FindFirstChild("PlayerModule") if PlayerModule then local Controls = require(PlayerModule):GetControls() if Controls then PlayerControls = Controls PlayerControls:Disable() end end end) local function SinkMovementInput() return Enum.ContextActionResult.Sink end pcall(function() ContextActionService:BindActionAtPriority( MovementActionName, SinkMovementInput, false, Enum.ContextActionPriority.High.Value, Enum.PlayerActions.CharacterForward, Enum.PlayerActions.CharacterBackward, Enum.PlayerActions.CharacterLeft, Enum.PlayerActions.CharacterRight, Enum.PlayerActions.CharacterJump, Enum.PlayerActions.CharacterToggleAutoRun ) end) local Finished = false local function FinishDragBlock(ReachedStopDistance) if Finished then return end Finished = true if ReachedStopDistance then FOLLOW_DURATION = 0 end if Token == DragBlockToken then DragBlockToken += 1 end if Humanoid and Humanoid.Parent then pcall(function() if Root and Root.Parent then Humanoid:MoveTo(Root.Position) end end) Humanoid.WalkSpeed = OriginalWalkSpeed Humanoid.JumpPower = OriginalJumpPower Humanoid.JumpHeight = OriginalJumpHeight Humanoid.AutoRotate = OriginalAutoRotate Humanoid:Move(Vector3.zero, true) end pcall(function() ContextActionService:UnbindAction(MovementActionName) end) pcall(function() if PlayerControls then PlayerControls:Enable() end end) DragBlockBusy = false if CancelDragBlockFollow == FinishDragBlock then CancelDragBlockFollow = nil end end CancelDragBlockFollow = FinishDragBlock Humanoid.WalkSpeed = 27 Humanoid.JumpPower = 0 Humanoid.JumpHeight = 0 Humanoid.AutoRotate = false task.spawn(function() local Started = os.clock() local Direction = Vector3.new(KillerRoot.Position.X - Root.Position.X, 0, KillerRoot.Position.Z - Root.Position.Z) if Direction.Magnitude <= 0.05 then FinishDragBlock(false) return end -- Issue one stable MoveTo target (as in Patch 151). Reissuing MoveTo -- every frame can continually cancel the Humanoid's current movement. local MoveDistance = math.max(0, GetFlatDistance() - STOP_DISTANCE) MoveDistance = math.min(WALK_DISTANCE_ONCE, MoveDistance) local TargetPosition = Root.Position + Direction.Unit * MoveDistance if MoveDistance > 0.05 then Humanoid:MoveTo(TargetPosition) end while DragBlockBusy and Token == DragBlockToken and GetValue(FeatureName, false) and not IsHelplessActive() and Humanoid.Health > 0 and Killer.Parent and KillerRoot.Parent and os.clock() - Started < MOVE_TIMEOUT do local CurrentDistance = GetFlatDistance() if CurrentDistance <= STOP_DISTANCE then FinishDragBlock(true) return end local LookPosition = Vector3.new(KillerRoot.Position.X, Root.Position.Y, KillerRoot.Position.Z) if (LookPosition - Root.Position).Magnitude > 0.05 then Root.CFrame = CFrame.lookAt(Root.Position, LookPosition) end if (Root.Position - TargetPosition).Magnitude <= 0.75 then break end task.wait(0.03) end FinishDragBlock(GetFlatDistance() <= STOP_DISTANCE) end) end local function StopCurrentDragBlockFollow() local CancelFollow = CancelDragBlockFollow if CancelFollow then CancelFollow() end end -- Returns true when the local player is currently spectating. -- Spectators do not run the Auto Do All Generators automation. local function IsLocalPlayerSpectating() if LocalCharacter and LocalCharacter.Parent and LocalCharacter.Parent.Name == "Spectator" then return true end if LocalPlayer and LocalPlayer.Team and string.lower(LocalPlayer.Team.Name or "") == "spectator" then return true end return false end local function StopAutoDoAllInvincibility() AutoDoAllInvincibleToken += 1 IsAutoDoAllGeneratorsRunning = false workspace:SetAttribute("Invincible", nil) local Invincible = GetValue("Invincible", true) if Invincible then Invincible.Value = false pcall(function() Invincible:GoUnder(false) end) end local AutoPuzzle = GetValue("AutoGeneratorPuzzle", true) if AutoDoAllPuzzleWasEnabled == false and AutoPuzzle then AutoPuzzle.Value = false end AutoDoAllPuzzleWasEnabled = nil end local function EnableAutoDoAllPuzzleAssist() local AutoPuzzle = GetValue("AutoGeneratorPuzzle", true) if not AutoPuzzle then return end if AutoDoAllPuzzleWasEnabled == nil then AutoDoAllPuzzleWasEnabled = AutoPuzzle.Value == true end if not AutoPuzzle.Value then AutoPuzzle.Value = true end end -- Finds a clear interaction position around a generator. -- This prevents another survivor standing on the preferred side -- from blocking the normal generator interaction. local function GetClearGeneratorPosition(GeneratorMain) local Root = LocalRoot or (LocalCharacter and LocalCharacter:FindFirstChild("HumanoidRootPart")) if not GeneratorMain or not Root then return nil end local GeneratorCFrame = GeneratorMain.CFrame local GeneratorSize = GeneratorMain.Size local CheckDistance = math.max(4.5, math.max(GeneratorSize.X, GeneratorSize.Z) * 0.5 + 3) -- Only use the two sides and the front. Never use the back. local Positions = { GeneratorCFrame.Position + GeneratorCFrame.RightVector * CheckDistance, GeneratorCFrame.Position - GeneratorCFrame.RightVector * CheckDistance, GeneratorCFrame.Position + GeneratorCFrame.LookVector * CheckDistance } local RaycastParams = RaycastParams.new() RaycastParams.FilterType = Enum.RaycastFilterType.Exclude RaycastParams.FilterDescendantsInstances = {LocalCharacter, GeneratorMain.Parent} local FallbackPosition = Positions[1] for _, Position in Positions do local Clear = true -- Make sure the player's body would not overlap solid geometry. local OccupyingParts = workspace:GetPartBoundsInBox( CFrame.new(Position), Vector3.new(3, 5, 3), RaycastParams ) for _, Part in ipairs(OccupyingParts) do if Part.CanCollide then Clear = false break end end if Clear then for _, Player in Players:GetPlayers() do if Player ~= LocalPlayer and Player.Character then local OtherRoot = Player.Character:FindFirstChild("HumanoidRootPart") if OtherRoot and (OtherRoot.Position - Position).Magnitude < 4 then Clear = false break end end end end if Clear then -- Make sure there is no wall directly between the generator and -- the interaction position. local Direction = Position - GeneratorCFrame.Position local WallCheck = workspace:Raycast( GeneratorCFrame.Position, Direction.Unit * Direction.Magnitude, RaycastParams ) if WallCheck then Clear = false end end if Clear then return Position end end -- A blocked test should not prevent the automation from trying the -- generator. The prompt/interaction retry logic handles the fallback. return FallbackPosition end local FeatureLoadout; FeatureLoadout = { ["EnviromentFunctions"] = { ["TabAttributes"] = { ["DisplayTitle"] = "Script Made by Naiko Scripts | " .. tostring(Version), ["LayoutOrder"] = 666 }, ["hookmetamethod"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "hookmetamethod", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = true, ["Requirement"] = true }, ["getgc"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "getgc", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = true, ["Requirement"] = true }, ["require"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "require", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = true, ["Requirement"] = true }, ["files"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "files", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = true, ["Requirement"] = true }, ["OfficialGame"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "Official Game", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = game.GameId == 6331902150 or game.GameId == 7464167604, ["Requirement"] = true }, ["PrivateServer"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "Private Server", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = workspace:GetAttribute("ServerType") == "VIP", ["Requirement"] = true }, ["PrivateServerOwner"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "Private Server", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = workspace:GetAttribute("ServerOwnerID") == LocalPlayer.UserId, ["Requirement"] = true }, ["NServer"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "N Server", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = game.PlaceId == 83645629621104, ["Requirement"] = true }, ["Computer"] = { ["DisplayDescription"] = " ", ["DisplayTitle"] = "Computer", ["LayoutOrder"] = 666, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = UserInputService.KeyboardEnabled, ["Requirement"] = true, ["OnLoop"] = function(self) self.Instance.Value = UserInputService.KeyboardEnabled end }, }, ["Automation"] = { ["TabAttributes"] = { ["DisplayTitle"] = "Automation", ["LayoutOrder"] = 1 }, ["AutoGeneratorPuzzle"] = { ["DisplayDescription"] = "Auto Completes Generator Puzzles", ["DisplayTitle"] = "Auto Generator(s)", ["LayoutOrder"] = 1, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["GenCheck"] = function() return not IsFixingGenerator or not LocalCharacter or not SpeedMultipliers or not PlayerGui:FindFirstChild("PuzzleUI") or PlayerGui:FindFirstChild("PuzzleUI"):FindFirstChildWhichIsA("GuiObject").Size ~= ReplicatedStorage:FindFirstChild("PuzzleUI",true):FindFirstChildWhichIsA("GuiObject").Size or not (GetValue("AutoGeneratorPuzzle")) end, ["IsPlayersNear"] = function(self,Distance) if LocalCharacter and LocalRoot then for i,v in Players:GetPlayers() do if v ~= LocalPlayer and v.Character and v.Character:FindFirstChild("HumanoidRootPart") and (v.Character:FindFirstChild("HumanoidRootPart").Position-LocalRoot.Position).Magnitude < Distance then return true end end end return false end, ["RNG"] = Random.new(), ["OnLoop"] = function(self) task.spawn(function() if LocalRoot and not IsFixingGenerator and (GetValue("AutoGeneratorPuzzle")) and GameMap then for i,Object in GameMap:QueryDescendants("Model#Generator:has(#Main)") do if LocalRoot and LocalRoot.Anchored ~= true and (Object:FindFirstChild("Main").Position - LocalRoot.Position).Magnitude < 6.7 then task.spawn(function() IsFixingGenerator = true local Remotes = Object:FindFirstChild("Remotes") local Progress = Remotes and Object:FindFirstChild("Progress") local RemoteEvent = Progress and Remotes:FindFirstChildOfClass("RemoteEvent") if RemoteEvent and PlayerGui:FindFirstChild("PuzzleUI") then while true do if self:GenCheck() then break end local IsNear = self:IsPlayersNear(32) local GenCD = (not IsNear and GetValue("SpeedUpCooldown") and GetValue("GeneratorCooldown") > 2 and (GetValue("GeneratorCooldown",true):GetAttribute("MinValue"))) or GetValue("GeneratorCooldown") task.wait(self.RNG:NextNumber(GenCD - 0.1 * GenCD,GenCD + 0.1 * GenCD)) if self:GenCheck() then break end if not GetValue("require") then RemoteEvent:FireServer() PlaySound("puzzleDone", {["Parent"] = Object:FindFirstChild("Main")}) end end end IsFixingGenerator = false end) break end end end end) end, ["CustomSetup"] = function(self) local LoadUI = Instance.new("TextButton") local Folder = Instance.new("Folder") local Dot1 = Instance.new("TextLabel") local TextButton = Instance.new("TextLabel") LoadUI.Name = "load" LoadUI.BackgroundColor3 = Color3.new(0, 0, 0) LoadUI.BackgroundTransparency = 0.4 LoadUI.BorderSizePixel = 0 LoadUI.Active = true LoadUI.Interactable = true LoadUI.AutoButtonColor = false LoadUI.Size = UDim2.new(1, 0, 1, 0) LoadUI.ZIndex = 7 LoadUI.Text = "" Folder.Parent = LoadUI Dot1.Name = "1" Dot1.Parent = Folder Dot1.AnchorPoint = Vector2.new(0.5, 0) Dot1.BackgroundColor3 = Color3.new(1, 1, 1) Dot1.BackgroundTransparency = 1 Dot1.BorderSizePixel = 0 Dot1.Position = UDim2.new(0.5, 0, -0.05, 0) Dot1.Size = UDim2.new(0.1, 0, 1, 0) Dot1.ZIndex = 4 Dot1.Font = Enum.Font.Cartoon Dot1.Text = "." Dot1.TextColor3 = Color3.new(1, 1, 1) Dot1.TextSize = 50 Dot1.TextScaled = true Dot1.TextStrokeTransparency = 0.9 local Dot2 = Dot1:Clone() Dot2.Name = "2" Dot2.Parent = Folder local Dot3 = Dot1:Clone() Dot3.Name = "3" Dot3.Parent = Folder TextButton.Name = "TextButton" TextButton.Parent = LoadUI TextButton.BackgroundColor3 = Color3.new(1, 1, 1) TextButton.BackgroundTransparency = 1 TextButton.BorderSizePixel = 0 TextButton.AnchorPoint = Vector2.new(0.5, 0.5) TextButton.Position = UDim2.new(0.5, 0, 0.6, 0) TextButton.Selectable = false TextButton.Size = UDim2.new(0.4, 0, 0.4, 0) TextButton.ZIndex = 7 TextButton.Font = Enum.Font.SciFi TextButton.Text = "Completing" TextButton.TextColor3 = Color3.new(1, 1, 1) TextButton.TextSize = 20 TextButton.TextScaled = true TextButton.TextStrokeTransparency = 0.9 PlayerGui.ChildAdded:Connect(function(Child) if Child.Name == "PuzzleUI" then local ClonedLoadUI = LoadUI:Clone() ClonedLoadUI.Parent = Child.Container.GridHolder local InstanceAuto = GetValue("AutoGeneratorPuzzle",true) ClonedLoadUI.Visible = InstanceAuto.Value InstanceAuto:GetPropertyChangedSignal("Value"):Connect(function() ClonedLoadUI.Visible = InstanceAuto.Value end) task.spawn(function() while task.wait() and ClonedLoadUI and ClonedLoadUI.Parent do if ClonedLoadUI.Visible then for i = 1, 3 do ClonedLoadUI.Folder[i].Rotation = math.cos(tick() + i * 10) * 360 end else wait(0.1) end end end) end end) end }, ["ResetAfterAllGenerators"] = { ["DisplayDescription"] = "Resets the player after Auto Do All Generators finishes every unfinished generator", ["DisplayTitle"] = "Reset After All Generators", ["LayoutOrder"] = 2.5, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "AutoDoAllGenerators" }, ["AutoDoAllGenerators"] = { ["DisplayDescription"] = "Teleports to each unfinished generator and automatically completes it", ["DisplayTitle"] = "Auto Do All Generators", ["LayoutOrder"] = 2, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ScriptFunction"] = function(self, Value) AutoDoAllInvincibleToken += 1 local Token = AutoDoAllInvincibleToken if not Value then StopAutoDoAllInvincibility() return end if IsLocalPlayerSpectating() then return end EnableAutoDoAllPuzzleAssist() local Invincible = GetValue("Invincible", true) if Invincible and not Invincible.Value then Invincible.Value = true end end, ["OnLoop"] = function(self) if IsLocalPlayerSpectating() then if IsAutoDoAllGeneratorsRunning then IsAutoDoAllGeneratorsRunning = false end return end if IsAutoDoAllGeneratorsRunning then return end if not GetValue("AutoDoAllGenerators") or not GameMap or not LocalCharacter then return end EnableAutoDoAllPuzzleAssist() IsAutoDoAllGeneratorsRunning = true task.spawn(function() local function IsActive() return Token == AutoDoAllInvincibleToken and GetValue("AutoDoAllGenerators") == true and not IsLocalPlayerSpectating() and GameMap and LocalCharacter end if not IsActive() then IsAutoDoAllGeneratorsRunning = false return end for _, Object in GameMap:QueryDescendants("Model#Generator:has(#Main)") do if not IsActive() then break end local Main = Object:FindFirstChild("Main") local ProgressValue = Object:FindFirstChild("Progress") local Remotes = Object:FindFirstChild("Remotes") local RemoteEvent = Remotes and (Remotes:FindFirstChild("Progress") or Remotes:FindFirstChildOfClass("RemoteEvent")) if Main and ProgressValue and ProgressValue.Value < 100 then local TargetPosition = GetClearGeneratorPosition(Main) if TargetPosition and LocalCharacter.PivotTo then LocalCharacter:PivotTo(CFrame.new(TargetPosition)) task.wait(0.15) else task.wait(0.5) end local GeneratorPrompt = Object:FindFirstChildWhichIsA("ProximityPrompt", true) local HasClearPosition = TargetPosition ~= nil if GeneratorPrompt and HasClearPosition then -- Try to open this generator from up to three positions. -- If all three attempts fail, move to another available side -- of the same generator and try again. local GeneratorOpened = false local GeneratorPositions = {} if Main then local GeneratorCFrame = Main.CFrame local GeneratorSize = Main.Size local CheckDistance = math.max(4.5, math.max(GeneratorSize.X, GeneratorSize.Z) * 0.5 + 3) -- Retry only from the left, right, or front. -- Never retry from behind the generator. GeneratorPositions = { GeneratorCFrame.Position + GeneratorCFrame.RightVector * CheckDistance, GeneratorCFrame.Position - GeneratorCFrame.RightVector * CheckDistance, GeneratorCFrame.Position + GeneratorCFrame.LookVector * CheckDistance } end local function TryOpenFromPosition(Position) if not IsActive() or not Position or not LocalCharacter then return false end if LocalCharacter.PivotTo then local SafeParams = RaycastParams.new() SafeParams.FilterType = Enum.RaycastFilterType.Exclude SafeParams.FilterDescendantsInstances = {LocalCharacter, Object} local OccupyingParts = workspace:GetPartBoundsInBox( CFrame.new(Position), Vector3.new(3, 5, 3), SafeParams ) for _, Part in ipairs(OccupyingParts) do if Part.CanCollide then return false end end LocalCharacter:PivotTo(CFrame.new(Position)) task.wait(0.15) end local BeforeProgress = ProgressValue.Value for _ = 1, 3 do if not IsActive() or not LocalCharacter or not ProgressValue.Parent then return false end if typeof(fireproximityprompt) == "function" then pcall(function() fireproximityprompt(GeneratorPrompt, 1, true) end) end pcall(function() GeneratorPrompt:InputHoldBegin() end) -- Complete the generator directly as well as -- opening its prompt. This keeps Do All -- independent from Auto Generator(s). if RemoteEvent and RemoteEvent:IsA("RemoteEvent") then pcall(function() RemoteEvent:FireServer() end) end -- Give the generator up to 3 seconds to actually respond. local WaitStart = os.clock() local LastRemoteFire = os.clock() while os.clock() - WaitStart < 3 do if not IsActive() or not LocalCharacter or not ProgressValue.Parent then pcall(function() GeneratorPrompt:InputHoldEnd() end) return false end if ProgressValue.Value > BeforeProgress then pcall(function() GeneratorPrompt:InputHoldEnd() end) return true end if RemoteEvent and RemoteEvent:IsA("RemoteEvent") and os.clock() - LastRemoteFire >= 0.15 then LastRemoteFire = os.clock() pcall(function() RemoteEvent:FireServer() end) end task.wait(0.05) end pcall(function() GeneratorPrompt:InputHoldEnd() end) -- Small pause before the next open attempt. task.wait(0.15) -- Refresh the prompt in case the generator recreated it. local RefreshedPrompt = Object:FindFirstChildWhichIsA("ProximityPrompt", true) if RefreshedPrompt then GeneratorPrompt = RefreshedPrompt end end return false end -- First try the original clear position. GeneratorOpened = TryOpenFromPosition(TargetPosition) -- If three attempts fail, switch to another clear generator position. if not GeneratorOpened and #GeneratorPositions > 0 then for _, Position in ipairs(GeneratorPositions) do if (Position - TargetPosition).Magnitude > 0.5 then local Clear = true for _, Player in Players:GetPlayers() do if Player ~= LocalPlayer and Player.Character then local OtherRoot = Player.Character:FindFirstChild("HumanoidRootPart") if OtherRoot and (OtherRoot.Position - Position).Magnitude < 4 then Clear = false break end end end if Clear then GeneratorOpened = TryOpenFromPosition(Position) if GeneratorOpened then break end end end end end -- If the generator still did not open, skip it and let the -- next generator be processed rather than getting stuck here. if not GeneratorOpened then pcall(function() GeneratorPrompt:InputHoldEnd() end) task.wait(0.25) end end -- Keep the existing Auto Generator(s) solver alive long -- enough to finish the puzzle opened above. local CompletionDeadline = os.clock() + 8 while IsActive() and HasClearPosition and LocalCharacter and ProgressValue.Parent and ProgressValue.Value < 100 and os.clock() < CompletionDeadline do if IsLocalPlayerSpectating() then break end if RemoteEvent and RemoteEvent:IsA("RemoteEvent") then pcall(function() RemoteEvent:FireServer() end) end task.wait(0.1) end if GeneratorPrompt and HasClearPosition then pcall(function() GeneratorPrompt:InputHoldEnd() end) end end task.wait(math.max(0.1, tonumber(GetValue("AutoDoAllGeneratorInterval")) or 1.5)) end if Token == AutoDoAllInvincibleToken then IsAutoDoAllGeneratorsRunning = false if GetValue("ResetAfterAllGenerators") then local Humanoid = LocalCharacter and LocalCharacter:FindFirstChildOfClass("Humanoid") if Humanoid and Humanoid.Health > 0 then Humanoid.Health = 0 end end end end) end }, ["AutoDoAllGeneratorInterval"] = { ["DisplayDescription"] = "Cooldown in seconds between Auto Do All Generator completions", ["DisplayTitle"] = "Auto Do All Generator Interval", ["LayoutOrder"] = 2.25, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 1.5, ["Requirement"] = "AutoDoAllGenerators", ["ExtraData"] = { ["MaxValue"] = 8, ["MinValue"] = 0.1, ["Step"] = 0.1 } }, ["GeneratorCooldown"] = { ["DisplayDescription"] = "The cooldown in seconds before completing a generator", ["DisplayTitle"] = "Cooldown Between Auto Completions", ["LayoutOrder"] = 2, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 4, ["Requirement"] = "AutoGeneratorPuzzle", ["ExtraData"] = { ["MaxValue"] = 8, ["MinValue"] = 1.5, ["Step"] = 0.25, ["CurrentSpeed"] = 0.4, ["CurrentGrid"] = 6 }, ["IsPlayersNear"] = function(self,Distance) if LocalCharacter and LocalRoot then for i,v in Players:GetPlayers() do if v ~= LocalPlayer and v.Character and v.Character:FindFirstChild("HumanoidRootPart") and (v.Character:FindFirstChild("HumanoidRootPart").Position-LocalRoot.Position).Magnitude < Distance then return true end end end return false end, ["OnLoop"] = function(self) local IsNear = self:IsPlayersNear(32) local CurrentGrid = self.Instance:GetAttribute("CurrentGrid") local RNG = Random.new() local GenCD = (not IsNear and GetValue("SpeedUpCooldown") and self.Instance:GetAttribute("MinValue")) or RNG:NextNumber(GetValue("GeneratorCooldown") - 0.1 * GetValue("GeneratorCooldown"),GetValue("GeneratorCooldown") + 0.1 * GetValue("GeneratorCooldown")) self.Instance:SetAttribute("CurrentSpeed",(GenCD / math.pow(CurrentGrid,2))) end }, ["SpeedUpCooldown"] = { ["DisplayDescription"] = "Make the cooldown low when nobody is near to look at you", ["DisplayTitle"] = "Speed Up When Nobodys Near", ["LayoutOrder"] = 3, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "AutoGeneratorPuzzle|GeneratorCooldown~1.5|GeneratorCooldown~1.75|GeneratorCooldown~2" }, ["AutoPickup"] = { ["DisplayDescription"] = "Auto-Picks up Items near you", ["DisplayTitle"] = "Auto Pickup", ["LayoutOrder"] = 4, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["CustomSetup"] = function(self) if InGame then InGame.ChildAdded:Connect(function(Child) if Child:IsA("Tool") then Child:SetAttribute("JustDropped", true) task.delay(1.5, function() if Child then Child:SetAttribute("JustDropped", nil) end end) end end) end end }, ["AutoEscape"] = { ["DisplayDescription"] = "Auto-Escapes Nosferatu's Hook", ["DisplayTitle"] = "Auto Escape", ["LayoutOrder"] = 5, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = not (KillerAssets and KillerAssets:FindFirstChild("Nosferatu")) }, ["EscapeCooldown"] = { ["DisplayDescription"] = "The cooldown in seconds before pressing a key", ["DisplayTitle"] = "Cooldown Between Auto Escape Presses", ["LayoutOrder"] = 6, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0.5, ["Requirement"] = (KillerAssets and KillerAssets:FindFirstChild("Nosferatu")) and "AutoEscape" or true, ["ExtraData"] = { ["MaxValue"] = 1.2, ["MinValue"] = 0.2, ["Step"] = 0.1, }, ["ScriptFunction"] = function(self, Value) if Value <= 0.3 then GetValue("EscapeCooldown",true):SetAttribute("DisplayDescription",self["DisplayDescription"] .. " " .. RichTextGradientColor("(TOO FAST)",{Color3.fromRGB(251, 107, 43),Color3.fromRGB(251, 165, 43),Color3.fromRGB(251, 107, 43)})) else GetValue("EscapeCooldown",true):SetAttribute("DisplayDescription",self["DisplayDescription"]) end end, ["CustomSetup"] = function(self) TempUI.ChildAdded:Connect(function(UIElement) if UIElement.Name:upper() == "QTE" and UIElement:FindFirstChildOfClass("UIAspectRatioConstraint") then while UIElement and UIElement.Visible do local Cooldown = GetValue("EscapeCooldown") task.wait(Random.new():NextNumber(Cooldown - 0.2 * Cooldown,Cooldown + 0.2 * Cooldown)) if GetValue("AutoEscape") then for i,v in KillersFolder:GetChildren() do if v.Name:lower() == "nosferatu" then local Player = Players:GetPlayerFromCharacter(v) if Player then Network:FindFirstChildOfClass("RemoteEvent"):FireServer(Player.Name.."NosHookQTE",{true}) end end end end end end end) end }, ["AutoDisarm"] = { ["DisplayDescription"] = "Auto-Disarms Azure's Traps Instantly", ["DisplayTitle"] = "Auto Disarm", ["LayoutOrder"] = 7, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ExtraData"] = { ["Requirement"] = (KillerAssets and KillerAssets:FindFirstChild("Azure") and "require" or true) }, ["ScriptFunction"] = function(self, Value) if CurrentQTEAzure and Value then CurrentQTEAzure:AddProgress(100) CurrentQTEAzure = nil end end }, }, ["Features"] = { ["TabAttributes"] = { ["DisplayTitle"] = "Features", ["LayoutOrder"] = 3 }, ["Invincible"] = { ["DisplayDescription"] = "Makes you invisible & god mode (you can still use abilities)", ["DisplayTitle"] = "Invincible", ["LayoutOrder"] = 1, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "hookmetamethod|require|OfficialGame", ["ScriptFunction"] = function(self, Value) if workspace:GetAttribute("Invincible") == nil then workspace:SetAttribute("Invincible", Value) self.Instance.Value = Value if Value then GetValue("DisableToxicTrails",true).Value = true GetValue("DisableFootprints",true).Value = true end task.delay(1.5, function() workspace:SetAttribute("Invincible",nil) end) self:GoUnder(Value) else self.Instance.Value = workspace:GetAttribute("Invincible") end end, ["IsHitboxNotNear"] = function(self,HitboxPart,Position) if HitboxPart and Position and LocalRoot then local IsHitboxNotNearParams = OverlapParams.new() IsHitboxNotNearParams.FilterType = Enum.RaycastFilterType.Include IsHitboxNotNearParams.MaxParts = 1 IsHitboxNotNearParams.FilterDescendantsInstances = {HitboxPart} local Result = workspace:GetPartBoundsInRadius(Position, 2.5, IsHitboxNotNearParams) return #Result == 0 else ColoredPrint("HitboxPart/Position/HumanoidRootPart is nil while trying to check if near", "info", Color3.new(1,0.25,0)) return false end end, ["VelocityToPosition"] = function(self,target) local TimeLimit = workspace.DistributedGameTime + 7 local OGCG = LocalRoot.CollisionGroup local AllParts = LocalCharacter:QueryDescendants("BasePart:not([CollisonGroup=Default])") for i,v in AllParts do v.CollisionGroup = "None" end local Body = Instance.new("BodyVelocity") Body.MaxForce = Vector3.new(9e9, 9e9, 9e9) Body.Velocity = Vector3.new(0, 0, 0) Body.Parent = LocalRoot while (LocalRoot.Position - target).Magnitude > 2 and not (workspace.DistributedGameTime >= TimeLimit) do Body.Velocity = (target - LocalRoot.Position).Unit * 100 RunService.RenderStepped:Wait() end if workspace.DistributedGameTime >= TimeLimit then warn("Failed to do in time") end Body:Destroy() for i,v in AllParts do v.CollisionGroup = OGCG end end, ["GoUnder"] = function(self,Value) local Offset = 22 if Value == nil then IsUnderground = false Value = GetValue("Invincible") end if Value and not SideBar:GetAttribute("WasVisible") and not IsUnderground then IsUnderground = false if not (LocalRoot and LocalHead and LocalHumanoid and MainUI.Enabled) then repeat task.wait(0.25) until (LocalRoot and LocalHead and LocalHumanoid and MainUI.Enabled) end local MapName if GameMap and GameMap:FindFirstChild("Config") then local MapData = require(GameMap:FindFirstChild("Config")) if MapData and MapData["DisplayName"] ~= nil then MapName = MapData["DisplayName"] end end local OldCFrame:CFrame = LocalRoot.CFrame local UnderCFrame if MapName == "Underground War" then local SelfParams = OverlapParams.new() SelfParams.FilterType = Enum.RaycastFilterType.Include SelfParams.MaxParts = 1 SelfParams.FilterDescendantsInstances = {LocalRoot} local BoxCheck = workspace:GetPartBoundsInBox(CFrame.new(-172,4444,-20,1,0,0,0,1,0,0,0,1),Vector3.new(230, 35, 300),SelfParams) if #BoxCheck > 0 then Offset = 50 end local MapPart = GameMap:FindFirstChild("DirtSlabs",true) and GameMap:FindFirstChild("DirtSlabs",true):FindFirstChildWhichIsA("BasePart") if MapPart then UnderCFrame = CFrame.new(Vector3.new(OldCFrame.X + 0.5,MapPart.Position.Y - 7.5,OldCFrame.Z + 0.5)) else UnderCFrame = OldCFrame * CFrame.new(0, -Offset, 0) end else UnderCFrame = OldCFrame * CFrame.new(0, -Offset, 0) end LocalHumanoid.CameraOffset = Vector3.new(0, 12e12 ,0) task.wait(0.1) LocalRoot.CFrame = UnderCFrame local Tries = 0 local TimerStop = workspace.DistributedGameTime + 3.5 repeat Tries += 1 LocalRoot.Velocity = Vector3.zero self:VelocityToPosition(UnderCFrame.Position) LocalHead.Anchored = true repeat task.wait() until self:IsHitboxNotNear(LocalCharacter:FindFirstChild("QueryHitbox"),OldCFrame.Position) or not LocalRoot or not LocalCharacter or TimerStop < workspace.DistributedGameTime IsUnderground = true task.wait() LocalRoot.Velocity = Vector3.zero LocalHead.Anchored = false LocalRoot.CFrame = OldCFrame RunService.Heartbeat:Wait() LocalRoot.Velocity = Vector3.zero until self:IsHitboxNotNear(LocalCharacter:FindFirstChild("QueryHitbox"),OldCFrame.Position) or Tries >= 3 if Tries >= 3 then IsUnderground = false workspace:SetAttribute("Invincible",nil) GetValue("Invincible",true).Value = false if GetValue("OfficialGame") then StarterGui:SetCore("SendNotification",{ Title = "Fail", Text = "Failed to become invincible, if this keeps happning please report this in the discord server", Icon = "rbxasset://textures/DevConsole/Warning.png", Duration = 4.5 }) else StarterGui:SetCore("SendNotification",{ Title = "Fail", Text = "Failed to become invincible, this feature is not supported here", Icon = "rbxasset://textures/DevConsole/Warning.png", Duration = 4.5 }) GetValue("Invincible",true):SetAttribute("Requirement", true) end return ColoredPrint("Failed to go invincible! Tried 3 Times and still failed.", "info", Color3.new(1,0.25,0)) end else IsUnderground = false end end, ["CharacterAdded"] = function(self) task.delay(1,self.GoUnder,self) if not LocalRoot then repeat task.wait() until LocalRoot end LocalRoot:GetPropertyChangedSignal("Anchored"):Connect(function() if not LocalRoot.Anchored then task.delay(0.75,self.GoUnder,self) end end) end, ["CustomSetup"] = function(self) if GetValue("OfficialGame") then task.spawn(function() export type DesyncHook = {DesyncNumber:number,BufferCorruption:buffer} export type CorruptArguments = {Number:number,Table1:table,NilObject:any,Table2:table} local hookmetamethod = GetFunction(hookmetamethod, hook_metamethod) local HookSuccess, HookResult = pcall(function() local UnreliableRemoteEvent = Network:WaitForChild("UnreliableRemoteEvent") local newcclosure = GetFunction(newcclosure, new_cclosure) local checkcaller = GetFunction(checkcaller, check_caller) if not newcclosure or not checkcaller then return end local FeatureInstance = GetValue("Invincible",true) if not FeatureInstance.Value then FeatureInstance:GetPropertyChangedSignal("Value"):Wait() end local TypeEnum = "invalidnumber" local __namecall __namecall = hookmetamethod(game, "__namecall", newcclosure(function(self, ...): DesyncHook if not checkcaller() and IsUnderground and getnamecallmethod() == "FireServer" and self == UnreliableRemoteEvent and FeatureInstance and FeatureInstance.Value then local Args: CorruptArguments = {...} if Args[1] == math.pow(#TypeEnum,0) then return function() return nil end end end return __namecall(self, ...) end)) return __namecall end) end) end end }, ["DisableKillerWalls"] = { ["DisplayDescription"] = "Disables Thin Killer Walls", ["DisplayTitle"] = "Disable Killer Walls", ["LayoutOrder"] = 2, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["HandleDisableKillerWalls"] = function(self,MainValue,Tween) local KillerDoorsFolder = GameMap and (GameMap:FindFirstChild("KillerDoors",true) or GameMap:FindFirstChild("Killer Doors",true)) local KillerCollisions = GameMap and GameMap:FindFirstChild("KillerOnly",true) local MainTweenInfo = TweenInfo.new(0.5,Enum.EasingStyle.Quad,Enum.EasingDirection.InOut) local function ColorBrightness(Color,Brightness) local H, S, V = Color:ToHSV() return Color3.fromHSV(H, S, math.clamp(V * Brightness, 0, 1)) end if KillerDoorsFolder then for i,v in KillerDoorsFolder:GetChildren() do if v:IsA("BasePart") then if math.min(v.Size.X,v.Size.Z) > 5 then continue end v.CanTouch = true local Value = not v:GetAttribute("WalkedThrough") and MainValue or false local Color = Value and Color3.new(0,1,0) or Color3.new(1,0,0) local VertexColor = Value and Vector3.new(0,255,0) or Vector3.new(255,0,0) local ShouldTween --= Tween and v:GetAttribute("WalkedThrough") ~= nil if ShouldTween then TweenService:Create(v,MainTweenInfo,{Color = Color}):Play() else v.Color = Color end if v:GetAttribute("OriginalCanCollide") == nil then v:SetAttribute("OriginalCanCollide", v.CanCollide) end v.CanCollide = v:GetAttribute("OriginalCanCollide") ~= false and not Value or false if v:FindFirstChildOfClass("SpecialMesh") then if ShouldTween then TweenService:Create(v:FindFirstChildOfClass("SpecialMesh"),MainTweenInfo,{VertexColor = VertexColor}):Play() else v:FindFirstChildOfClass("SpecialMesh").VertexColor = VertexColor end end if KillerCollisions then local Params = OverlapParams.new() Params.FilterType = Enum.RaycastFilterType.Include Params.BruteForceAllSlow = true Params.FilterDescendantsInstances = {KillerCollisions} local Params2 = OverlapParams.new() Params2.FilterType = Enum.RaycastFilterType.Include Params2.BruteForceAllSlow = true Params2.FilterDescendantsInstances = {KillerDoorsFolder:QueryDescendants("#KillerWallDetail")} local Hitbox = workspace:GetPartBoundsInRadius(v.Position, 25, Params) local DecorationHitbox = workspace:GetPartBoundsInRadius(v.Position, 25, Params2) for i,v in Hitbox do v.CanCollide = not Value end for i,v2 in DecorationHitbox do local MainDecoration = v2:FindFirstAncestor("KillerWallDetail") if not MainDecoration then continue end local FloorSpikes = MainDecoration:FindFirstChildOfClass("MeshPart") if ShouldTween then TweenService:Create(FloorSpikes,MainTweenInfo,{Color = ColorBrightness(Color, 0.43)}):Play() else FloorSpikes.Color = ColorBrightness(Color, 0.43) end for i,v in FloorSpikes:QueryDescendants("Texture") do if ShouldTween then TweenService:Create(v,MainTweenInfo,{Color3 = Value and Color3.new(0,0,0) or Color3.new(1,1,1)}):Play() else v.Color3 = Value and Color3.new(0,0,0) or Color3.new(1,1,1) end end local Effects = MainDecoration:QueryDescendants("ParticleEmitter") for i,v in Effects do if not v:GetAttribute("OGColor") then v:SetAttribute("OGColor",v.Color) end v.Color = (Value and ColorSequence.new(Color)) or v:GetAttribute("OGColor") end end end end end end end, ["ScriptFunction"] = function(self, Value, Starting) if Starting then if GetValue("PrivateServer") then self.Instance:SetAttribute("DisplayDescription",self.Instance:GetAttribute("DisplayDescription"):gsub("%s?.-", "")) end end self:HandleDisableKillerWalls(Value) end, ["CharacterAdded"] = function(self) LocalRoot.Touched:Connect(function(Hit) if Hit and Hit.Parent and (Hit:FindFirstAncestor("KillerDoors") or Hit:FindFirstAncestor("Killer Doors")) then if GetValue("DisableKillerWalls") and Hit.CanQuery and (Hit:GetAttribute("WalkedThrough") ~= false or Hit:GetAttribute("WalkedThrough") == nil) then local KillerDoorsFolder = GameMap and (GameMap:FindFirstChild("KillerDoors",true) or GameMap:FindFirstChild("Killer Doors",true)) if not KillerDoorsFolder then return end local Params = OverlapParams.new() Params.FilterType = Enum.RaycastFilterType.Include Params.BruteForceAllSlow = true Params.FilterDescendantsInstances = {KillerDoorsFolder} local Gates = workspace:GetPartBoundsInRadius(Hit.Position,15,Params) for i,v in Gates do if v:IsA("BasePart") then v:SetAttribute("WalkedThrough","Ignore") end end Hit:SetAttribute("WalkedThrough","Ignore") task.delay(0.3,function() if Hit and Hit.Parent then for i,v in Gates do if v:IsA("BasePart") then v:SetAttribute("WalkedThrough",true) end end Hit:SetAttribute("WalkedThrough",true) task.wait() self:HandleDisableKillerWalls(GetValue("DisableKillerWalls"),true) end end) task.delay(4.5,function() if Hit and Hit.Parent then for i,v in Gates do if v:IsA("BasePart") then v:SetAttribute("WalkedThrough",nil) end end Hit:SetAttribute("WalkedThrough",nil) task.wait() self:HandleDisableKillerWalls(GetValue("DisableKillerWalls"),true) end end) end end end) end, ["CustomSetup"] = function(self) InGame.ChildAdded:Connect(function(Child) if Child.Name == "Map" then GameMap = Child task.delay(2,self.HandleDisableKillerWalls,self,GetValue("DisableKillerWalls")) end end) end }, ["DisableToxicTrails"] = { ["DisplayDescription"] = "Disables damaging trails for john doe", ["DisplayTitle"] = "Disable John Doe's Trails", ["LayoutOrder"] = 3, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ScriptFunction"] = function(self, Value) for i,v in InGame:GetChildren() do if v:IsA("Folder") and (v.Name):find("JohnDoeTrail") then for i,v2 in v:GetChildren() do if v2:IsA("BasePart") then v2.CanTouch = not Value end end end end end, ["CustomSetup"] = function(self) --self.DisplayTitle = self.DisplayTitle:gsub("John Doe's",RichTextGradientColor("John Doe's",{Color3.fromRGB(255, 190, 71), Color3.fromRGB(168, 3, 0),Color3.fromRGB(184, 171, 255)})) if InGame then InGame.ChildAdded:Connect(function(Child) if Child:IsA("Folder") and (Child.Name):find("JohnDoeTrail") then task.wait() for i,v in Child:GetChildren() do if v:IsA("BasePart") then v.CanTouch = not GetValue("DisableToxicTrails") end end if not Child:GetAttribute("Checked") then Child:SetAttribute("Checked", true) Child.ChildAdded:Connect(function(v) if v:IsA("BasePart") then v.CanTouch = not GetValue("DisableToxicTrails") end end) end end end) end end }, ["DisableFootprints"] = { ["DisplayDescription"] = "Disables footprints made by john doe", ["DisplayTitle"] = "Disable John Doe's Footprints", ["LayoutOrder"] = 4, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ScriptFunction"] = function(self, Value) for i,v in InGame:GetChildren() do if v:IsA("Folder") and (v.Name):find("Shadows") then for i,v2 in v:GetChildren() do if v2:IsA("BasePart") then v2.CanTouch = not Value end end if not v:GetAttribute("Checked") then v:SetAttribute("Checked", true) v.ChildAdded:Connect(function(GrandChild) if GrandChild:IsA("BasePart") then GrandChild.CanTouch = not GetValue("DisableFootprints") end end) end end end end, ["CustomSetup"] = function(self) --self.DisplayTitle = self.DisplayTitle:gsub("John Doe's",RichTextGradientColor("John Doe's",{Color3.fromRGB(255, 190, 71), Color3.fromRGB(168, 3, 0),Color3.fromRGB(184, 171, 255)})) if InGame then InGame.ChildAdded:Connect(function(Child) if Child:IsA("Folder") and (Child.Name):find("Shadows") then task.wait() for i,v in Child:GetChildren() do if v:IsA("BasePart") then v.CanTouch = not GetValue("DisableFootprints") end end if not Child:GetAttribute("Checked") then Child:SetAttribute("Checked", true) Child.ChildAdded:Connect(function(v) if v:IsA("BasePart") then v.CanTouch = not GetValue("DisableFootprints") end end) end end end) end end }, ["SmallerSpikeCollisions"] = { ["DisplayDescription"] = "Makes spike collisions smaller for john doe's ability", ["DisplayTitle"] = "Smaller Spike Collisions", ["LayoutOrder"] = 5, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ScriptFunction"] = function(self, Value) for i,v in InGame:GetChildren() do if v.Name == "SpikeCollision" then v.Size = Value and Vector3.new(11,3.5,3.5) or Vector3.new(11, 5, 5) v.Shape = Value and Enum.PartType.Cylinder or Enum.PartType.Block end end end, ["CustomSetup"] = function(self) if InGame then InGame.ChildAdded:Connect(function(Child) if Child.Name == "SpikeCollision" then task.delay(3.5,function() Child.Size = GetValue("SmallerSpikeCollisions") and Vector3.new(11,3.5,3.5) or Vector3.new(11, 5, 5) Child.Shape = GetValue("SmallerSpikeCollisions") and Enum.PartType.Cylinder or Enum.PartType.Block end) end end) end end }, ["EnableJumping"] = { ["DisplayDescription"] = "Enables Jumping for when its disabled", ["DisplayTitle"] = "Enable Jumping", ["LayoutOrder"] = 7, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["HandleAllowJumping"] = function(self,Value) if LocalHumanoid and not LocalHumanoid:GetAttribute("JumpingConnection") then if Value then if not LocalHumanoid:GetAttribute("JumpingConnection") then LocalHumanoid:SetAttribute("JumpingConnection",LocalHumanoid.JumpPower) else return end local Connection;Connection = LocalHumanoid.StateChanged:Connect(function(old,new) if LocalHumanoid.FloorMaterial == Enum.Material.Air then return end if LocalCharacter.Parent ~= "Spectator" and new == Enum.HumanoidStateType.Jumping or new == Enum.HumanoidStateType.Freefall and LocalHumanoid.JumpPower > 0 and (GetValue("EnableJumping") or false) and not LocalHumanoid:GetAttribute("CDJump") then if not(GetValue("EnableJumping")) then Connection:Disconnect() LocalHumanoid.JumpPower = LocalHumanoid:GetAttribute("JumpingConnection") or 0 LocalHumanoid:SetAttribute("JumpingConnection",nil) return end LocalHumanoid:GetPropertyChangedSignal("FloorMaterial"):Wait() if LocalHumanoid.FloorMaterial == Enum.Material.Air then LocalHumanoid.JumpPower = 0 else return end LocalHumanoid:SetAttribute("CDJump",true) task.wait(1.25) if GetValue("EnableJumping") then LocalHumanoid.JumpPower = 47 else Connection:Disconnect() LocalHumanoid.JumpPower = LocalHumanoid:GetAttribute("JumpingConnection") or 0 LocalHumanoid:SetAttribute("JumpingConnection",nil) end LocalHumanoid:SetAttribute("CDJump",nil) end end) end LocalHumanoid.JumpPower = Value and 47 or 0 end end, ["ScriptFunction"] = function(self, Value) self:HandleAllowJumping(Value) end, ["CharacterAdded"] = function(self) task.delay(0.25,self.HandleAllowJumping,self,GetValue("EnableJumping")) end }, ["StaminaPreset"] = { ["DisplayDescription"] = "Select a Stamina Preset", ["DisplayTitle"] = "Stamina Preset", ["LayoutOrder"] = 8, ["Savable"] = true, ["InstanceType"] = "StringValue", ["DefaultInstanceValue"] = "Original", ["Requirement"] = "require", ["ExtraData"] = { ["Options"] = "Original|Realistic|Semi-Realistic|Infinite" }, ["OnLoop"] = function() local StaminaPreset = GetValue("StaminaPreset") if StaminaPreset ~= "Original" and MainModule and MainModule.MaxStamina then if StaminaPreset == "Infinite" then rawset(MainModule, "Stamina", MainModule.MaxStamina) else local MaxStamina = MainModule.MaxStamina if MainModule.Stamina < MaxStamina * 0.8 then rawset(MainModule, "Stamina", math.min(MainModule.Stamina + MaxStamina * (StaminaPreset == "Semi-Realistic" and 0.005 or 0.0025), MaxStamina)) end end end end, ["CharacterAdded"] = function(self) if TempUI then task.spawn(function() local AmountUI = (TempUI:FindFirstChild("PlayerInfo") or TempUI:WaitForChild("PlayerInfo")) and TempUI.PlayerInfo:FindFirstChild("Bars") and TempUI.PlayerInfo.Bars:FindFirstChild("Stamina") and TempUI.PlayerInfo.Bars.Stamina:FindFirstChild("Amount") if AmountUI and MainModule then local OriginalAmountUI = AmountUI local InfiniteStaminaElement = OriginalAmountUI:Clone() local CenterStaminaCounter = TempUI:FindFirstChild("CenterStaminaCounter") local CenterDrainBar = TempUI:FindFirstChild("Drain") if CenterStaminaCounter then CenterStaminaCounter:SetAttribute("WasVisible", CenterStaminaCounter.Visible) CenterStaminaCounter.Visible = GetValue("StaminaPreset") ~= "Infinite" and CenterStaminaCounter:GetAttribute("WasVisible") end if CenterDrainBar then CenterDrainBar:SetAttribute("WasVisible", CenterDrainBar.Visible) CenterDrainBar.Visible = GetValue("StaminaPreset") ~= "Infinite" and CenterDrainBar:GetAttribute("WasVisible") end InfiniteStaminaElement.Name = "InfiniteAmount" InfiniteStaminaElement.Text = "∞" InfiniteStaminaElement.Parent = OriginalAmountUI.Parent InfiniteStaminaElement.Visible = GetValue("StaminaPreset") == "Infinite" InfiniteStaminaElement.Size = UDim2.new(0.225,0,0.7,14) OriginalAmountUI.Visible = GetValue("StaminaPreset") ~= "Infinite" if not GetValue("StaminaPreset",true) then return end local InfViewConnection;InfViewConnection = GetValue("StaminaPreset",true):GetPropertyChangedSignal("Value"):Connect(function() if InfiniteStaminaElement and OriginalAmountUI then InfiniteStaminaElement.Visible = GetValue("StaminaPreset") == "Infinite" OriginalAmountUI.Visible = GetValue("StaminaPreset") ~= "Infinite" if CenterStaminaCounter then CenterStaminaCounter.Visible = GetValue("StaminaPreset") ~= "Infinite" and CenterStaminaCounter:GetAttribute("WasVisible") end if CenterDrainBar then CenterDrainBar.Visible = GetValue("StaminaPreset") ~= "Infinite" and CenterDrainBar:GetAttribute("WasVisible") end else InfViewConnection:Disconnect() end end) TempUI.Destroying:Once(function() InfViewConnection:Disconnect() end) end end) for i,v in TempUI:QueryDescendants("#redFlash,#injuredVignette") do v.Visible = not GetValue("HideInjury") end end end }, ["AntiSlowness"] = { ["DisplayDescription"] = "Removes all types of Slowness Effects", ["DisplayTitle"] = "Anti Slowness", ["LayoutOrder"] = 9, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Check"] = function(self,ValueInstance) if GetValue("AntiSlowness") then if ValueInstance and ValueInstance.Name ~= "Sprinting" then if ValueInstance.Name == "DirectionalMovement" or ValueInstance.Name == "FixingGenerator" or ValueInstance.Name:upper() == "ENRAGED" then if ValueInstance.Value < 1 then ValueInstance.Value = 1 end elseif ValueInstance.Value > 0.05 and ValueInstance.Value < 1 then --ValueInstance:Destroy() --else ValueInstance.Value = 1 ValueInstance:GetPropertyChangedSignal("Value"):Connect(function() if ValueInstance.Value > 0.05 and ValueInstance.Value < 1 then ValueInstance.Value = 1 --ValueInstance:Destroy() end end) end end end end, ["ScriptFunction"] = function(self,Value) if not Value or not SpeedMultipliers then return end for i,Child in SpeedMultipliers:GetChildren() do self:Check(Child) end end, ["CharacterAdded"] = function(self) if SpeedMultipliers ~= nil and typeof(SpeedMultipliers) == "Instance" then SpeedMultipliers.ChildAdded:Connect(function(Child) if not Child:IsA("NumberValue") or Child.Name == "Sprinting" then return end self:Check(Child) Child:GetPropertyChangedSignal("Value"):Connect(function() self:Check(Child) end) end) end end }, ["AnimationChanger"] = { ["DisplayDescription"] = "Select a character/skin to override the animations", ["DisplayTitle"] = "Animation Changer", ["LayoutOrder"] = 10, ["Savable"] = false, ["InstanceType"] = "StringValue", ["DefaultInstanceValue"] = "Original", ["Requirement"] = "require", ["ExtraData"] = { ["Options"] = "Original|Jason|Jason IV|Slasher|Slasher IV|c00lkidd|c00lkidd IV|c0llabk1dd|John Doe|JohnDoe IV|Noli|Noli IV|1x1x1x1|1x1x1x1 IV|Nosferatu|Azure|Dusekkar|Artful|Erlking|Herobrine|Sukuna|Retro|Mafioso|The Admin|Deceiver|The Pestilence|Celebration|P4rtyPwny|Alfred Drevis|Killer Kyle|Pursuer|TV TIME|c00lskeleton95|dragondudes3|Eye of The Abyss|White Pumpkin|Nerfed Demoman|Voidbound test|Sniper|Little Guy|Crouch|NPC Zombie|Default Roblox" }, ["ScriptFunction"] = function(self, Value, Starting) if Starting then return end if Value == "Original" then GetValue("ChangeInLobby",true).Value = false if LocalAnimator then local AllTracks = LocalAnimator:GetPlayingAnimationTracks() for i,v in AllTracks do v:Stop(0) end end if LastAnimOriginalUsed then LastAnimOriginalUsed:Play(0) end else if LocalAnimator and CanPlayOverrideAnim(LocalCharacter) then local AllTracks = LocalAnimator:GetPlayingAnimationTracks() for i,v in AllTracks do v:Stop(0) end UpdateAnim(LocalHumanoid) end end end }, ["ChangeInLobby"] = { ["DisplayDescription"] = "If it should change the animation in the lobby too", ["DisplayTitle"] = "Change In Lobby", ["LayoutOrder"] = 11, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "AnimationChanger~Original", ["ScriptFunction"] = function(self, Value, Starting) if Starting then return end local CanPlay = CanPlayOverrideAnim(LocalCharacter) if Value == true then UpdateAnim(LocalHumanoid) else if LocalAnimator then local AllTracks = LocalAnimator:GetPlayingAnimationTracks() for i,v in AllTracks do v:Stop(0) end if LastAnimOriginalUsed then LastAnimOriginalUsed:Play(0) end UpdateAnim(LocalHumanoid) end end end }, ["NoliControl"] = { ["DisplayDescription"] = "Allows you to have better control of Void Rush Ability", ["DisplayTitle"] = "Better Void Rush", ["LayoutOrder"] = 12, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "require", ["ScriptFunction"] = function(self, Value, Starting) if not Value and Starting then return end if NoliConfig then for i, Entry in { {Name = "InitialTurnDuration", Value = 0.005, Default = 1.5}, {Name = "TurnSpeed", Value = 10000, Default = 1}, {Name = "InitialTurnMult", Value = 1000, Default = 6.6}, } do local CurrentValue, Key, Parent = TableValueFind(NoliConfig, function(i, v) return type(i) == "string" and i:find(Entry.Name) and not i:find(Entry.Name .. "OG") end) if Key and Parent then if Value then if not Parent[Key .. "OG"] then Parent[Key .. "OG"] = Parent[Key] end Parent[Key] = Entry.Value else Parent[Key] = Parent[Key .. "OG"] or Entry.Default end end end if LocalCharacter and LocalCharacter.Parent.Name == "Killers" and not workspace:GetAttribute("NotifCD") then StarterGui:SetCore("SendNotification", { Title = "Information", Text = "Changes only apply the time you become the killer", Duration = 5 }) workspace:SetAttribute("NotifCD", true) task.delay(10, function() workspace:SetAttribute("NotifCD", nil) end) end elseif not NoliConfig and not Starting then self.Instance:SetAttribute("Requirement",true) StarterGui:SetCore("SendNotification", { Title = "Information", Text = `Failed to find Noli's Config Module{GetValue("OfficialGame") and ". Please Report This issue!" or ""}`, Duration = GetValue("OfficialGame") and 12 or 7 }) end end }, ["ControllableDash"] = { ["DisplayDescription"] = "Allows you to control where the dash goes just like Void Rush Ability", ["DisplayTitle"] = "Make Coolkidd's Dash Controllable", ["LayoutOrder"] = 13, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["CharacterAdded"] = function(self) LocalRoot.ChildAdded:Connect(function(Child) if Child:IsA("LinearVelocity") and LocalHumanoid then local OriginalVelocity = Child.LineDirection local OriginalVelocityMag = Child.LineDirection.Magnitude for i,v in SpeedMultipliers:GetChildren() do if v.Name == "HinderedMovement" and GetValue("ControllableDash") and v.Value == 0 then v.Value = 0.005 end end local function UpdateVelocity() if GetValue("ControllableDash") and (LocalCharacter.Name:gsub("0","O"):lower():find("coolkid")) and LocalHumanoid.MoveDirection ~= Vector3.zero then Child.LineDirection = LocalHumanoid.MoveDirection * OriginalVelocityMag elseif GetValue("ControllableDash") and (LocalCharacter.Name:gsub("0","O"):lower():find("coolkid")) and workspace.CurrentCamera then local CameraDirection = Vector3.new(workspace.CurrentCamera.CFrame.LookVector.X, 0, workspace.CurrentCamera.CFrame.LookVector.Z) Child.LineDirection = CameraDirection.Unit * OriginalVelocityMag if Child.LineVelocity > 0 then LocalRoot.CFrame = LocalRoot.CFrame:Lerp(CFrame.lookAt(LocalRoot.Position, LocalRoot.Position + CameraDirection),0.05) end else Child.LineDirection = OriginalVelocity end end UpdateVelocity() local Connection1;Connection1 = LocalHumanoid:GetPropertyChangedSignal("MoveDirection"):Connect(UpdateVelocity) local Connection2;Connection2 = workspace.CurrentCamera:GetPropertyChangedSignal("CFrame"):Connect(UpdateVelocity) Child.Destroying:Once(function() if Connection1 then Connection1:Disconnect() Connection1 = nil end if Connection2 then Connection2:Disconnect() Connection2 = nil end end) end end) end }, ["AutoBlockHitboxAllKiller"] = { ["DisplayDescription"] = "Adjust the Auto Block hitbox size for every killer (studs)", ["DisplayTitle"] = "All Killer ABH", ["LayoutOrder"] = 17, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitboxSlasher"] = { ["DisplayDescription"] = "Slasher ABH size adjustment (studs)", ["DisplayTitle"] = "Slasher ABH", ["LayoutOrder"] = 18, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitboxJohnDoe"] = { ["DisplayDescription"] = "John Doe ABH size adjustment (studs)", ["DisplayTitle"] = "John Doe ABH", ["LayoutOrder"] = 19, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitboxSixer"] = { ["DisplayDescription"] = "Sixer ABH size adjustment (studs)", ["DisplayTitle"] = "Sixer ABH", ["LayoutOrder"] = 20, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitboxNosferatu"] = { ["DisplayDescription"] = "Nosferatu ABH size adjustment (studs)", ["DisplayTitle"] = "Nosferatu ABH", ["LayoutOrder"] = 21, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitboxNoli"] = { ["DisplayDescription"] = "Noli ABH size adjustment (studs)", ["DisplayTitle"] = "Noli ABH", ["LayoutOrder"] = 22, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitboxC00lkidd"] = { ["DisplayDescription"] = "C00lkidd ABH size adjustment (studs)", ["DisplayTitle"] = "C00lkidd ABH", ["LayoutOrder"] = 23, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitboxAzure"] = { ["DisplayDescription"] = "Azure ABH size adjustment (studs)", ["DisplayTitle"] = "Azure ABH", ["LayoutOrder"] = 24, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitbox1x1x1x1"] = { ["DisplayDescription"] = "1x1x1x1 ABH size adjustment (studs)", ["DisplayTitle"] = "1x1x1x1 ABH", ["LayoutOrder"] = 25, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["AutoBlockHitboxGolemslash"] = { ["DisplayDescription"] = "Golem Slash ABH size adjustment (studs)", ["DisplayTitle"] = "Golem Slash ABH", ["LayoutOrder"] = 26, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0, ["Requirement"] = "AutoBlock", ["ExtraData"] = { ["MaxValue"] = 5, ["MinValue"] = -3, ["Step"] = 0.25 } }, ["WallCheck"] = { ["DisplayDescription"] = "Prevents Auto Block and Drag Block from firing when a solid wall is between you and the killer", ["DisplayTitle"] = "WallCheck", ["LayoutOrder"] = 14.9, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = true }, ["AutoBlock"] = { ["DisplayDescription"] = "Uses the block ability automatically when about to get hit (REQUIRES GOOD PING)", ["DisplayTitle"] = "Guest1337 Auto Block", ["LayoutOrder"] = 15, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ScriptFunction"] = function(self, Value) local BlockAbilityUI = MainUI and MainUI:FindFirstChild("AbilityContainer") and MainUI:FindFirstChild("AbilityContainer"):FindFirstChild("Block") local AutoImage = BlockAbilityUI and BlockAbilityUI:FindFirstChild("AutoImage") if Value and AutoImage then AutoImage.Visible = true elseif AutoImage then AutoImage.Visible = false end end, ["HandleKiller"] = function(self,Killer) local BlockableAttacks = {"slash","enragedslash","stab","attack","punch",--[["behead",]]"swing","golemslash"} local CustomHitboxes = { ["golemslash"] = { Size = Vector3.new(6, 2, 7), Offset = CFrame.new(0,0,-5.5) }, -- Patch 92 hitbox values, excluding c00lkidd as requested. ["slasher"] = { Size = Vector3.new(5, 6.75, 3), Offset = CFrame.new(0,0,-3.5), Linger = 0.25 }, ["johndoe"] = { Size = Vector3.new(4, 5.75, 4), Offset = CFrame.new(0,0,-3.5) }, ["noli"] = { Size = Vector3.new(5.75, 5.75, 4.75), Offset = CFrame.new(0,0,-3.5), Linger = 0.3 }, ["sixer"] = { Size = Vector3.new(5, 5, 6), Offset = CFrame.new(0,0,-3.5) }, ["nosferatu"] = { Size = Vector3.new(3, 5.75, 3), Offset = CFrame.new(0,0,-3.5), Linger = 0.6 }, } local FireSignal = GetFunction(firesignal,FireSignal) local SelfParams = OverlapParams.new() SelfParams.MaxParts = 1 SelfParams.FilterType = Enum.RaycastFilterType.Include local UseActorAbility = Network and Network:FindFirstChildOfClass("RemoteEvent") local ShowHitboxesSetting = PlayerData and PlayerData:FindFirstChild("Settings") and PlayerData.Settings:FindFirstChild("ShowHitboxes",true) local Humanoid = Killer:FindFirstChildOfClass("Humanoid") or Killer:WaitForChild("Humanoid") local QueryHitbox = Killer:FindFirstChild("QueryHitbox") or Killer:WaitForChild("QueryHitbox") local KillerAnimator = Humanoid:FindFirstChildOfClass("Animator") -- Patch 200: recognize C00lkidd skins by their model name or -- character/skin attributes instead of requiring the model to be -- named exactly "c00lkidd". local function IsC00lkiddKiller(Character) if not Character then return false end local function Matches(Value) if type(Value) ~= "string" then return false end local Name = string.lower(Value) local Compact = Name:gsub("[%s_%-]", "") if Compact == "c00lkidd" or Compact:find("^c00lkidd") or Compact == "c0llabk1dd" or Compact == "c00lskeleton95" or Compact == "dragondudes3" then return true end return false end if Matches(Character.Name) then return true end for _, AttributeName in { "Killer", "KillerName", "Character", "CharacterName", "Skin", "SkinName", "DisplayName", "ActorDisplayName" } do if Matches(Character:GetAttribute(AttributeName)) then return true end end return false end -- C00lkidd ABH is triggered by the M1 animation, not attack sounds. local C00lkiddM1AnimationId = "121858217776572" local C00lkiddM1Tracks = {} local RunC00lkiddSoundAutoBlock if KillerAnimator then KillerAnimator.AnimationPlayed:Connect(function(Track) local Animation = Track and Track.Animation local AnimationId = Animation and tostring(Animation.AnimationId or ""):match("%d+") if AnimationId == C00lkiddM1AnimationId then C00lkiddM1Tracks[Track] = true Track.Stopped:Connect(function() C00lkiddM1Tracks[Track] = nil end) task.spawn(function() RunC00lkiddSoundAutoBlock(true) end) end end) end local function IsC00lkiddM1Playing() for Track in pairs(C00lkiddM1Tracks) do if Track.IsPlaying then return true end C00lkiddM1Tracks[Track] = nil end return false end RunC00lkiddSoundAutoBlock = function(RequireM1Animation) if not GetValue("AutoBlock") or IsHelplessActive() then return end if IsWallCheckBlocked(Killer) then return end if not IsC00lkiddKiller(Killer) then return end if not LocalCharacter or not LocalCharacter:FindFirstChild("QueryHitbox") or LocalCharacter.Parent ~= SurvivorsFolder then return end local AbilityContainer = MainUI and MainUI:FindFirstChild("AbilityContainer") local BlockButton = AbilityContainer and AbilityContainer:FindFirstChild("Block") if not BlockButton then return end local CustomHitbox = CustomHitboxes["c00lkidd"] local KillerNameLower = Killer.Name:lower() for i = 1, 9 do if IsHelplessActive() or not GetValue("AutoBlock") then return end -- This specific M1 uses animation detection; other listed sounds keep audio detection. if RequireM1Animation and not IsC00lkiddM1Playing() then return end SelfParams.FilterDescendantsInstances = {LocalCharacter:FindFirstChild("QueryHitbox")} local Part = Instance.new("Part") Part.Name = "KillerDetectHitbox" Part.Color = BrickColor.new("Really black").Color local BaseHitboxSize = (CustomHitbox and CustomHitbox["Size"] or Vector3.new(5.2, 6, 5.65)) * 2.2 local GlobalHitboxAdjustment = GetCurrentHitboxAdjustment("AutoBlockHitboxAllKiller") local IndividualHitboxAdjustment = GetCurrentHitboxAdjustment("AutoBlockHitboxC00lkidd") local TotalHitboxAdjustment = GlobalHitboxAdjustment + IndividualHitboxAdjustment Part.Size = BaseHitboxSize + Vector3.new(TotalHitboxAdjustment, TotalHitboxAdjustment, TotalHitboxAdjustment) Part.Size = Vector3.new(math.max(0.1, Part.Size.X), math.max(0.1, Part.Size.Y), math.max(0.1, Part.Size.Z)) local DetectionOffset = CustomHitbox and CustomHitbox["Offset"] or CFrame.new(0,0,-3.5) if GetValue("DragBlock", false) then Part.Size = Part.Size + Vector3.new(0,0,2) Part.CFrame = QueryHitbox.CFrame * DetectionOffset * CFrame.new(0,0,-1) else Part.CFrame = QueryHitbox.CFrame * DetectionOffset end if IsC00lkiddKiller(Killer) then -- Reduce only the forward reach by 2 studs while keeping the rear edge fixed. Part.Size = Vector3.new( math.max(0.1, Part.Size.X), math.max(0.1, Part.Size.Y), math.max(0.1, Part.Size.Z - 2) ) Part.CFrame = Part.CFrame * CFrame.new(0, 0, 1) end Part.CanCollide = false Part.Anchored = true Part.CastShadow = false Part.Material = Enum.Material.ForceField Part.Transparency = AreHitboxesShown() and 0.1 or 1 Part.Parent = GetHitboxesFolder() Debris:AddItem(Part, 0.4) local Hitbox = workspace:GetPartsInPart(Part, SelfParams) if #Hitbox > 0 and not IsWallCheckBlocked(Killer) and not IsDragBlockCooldownActive(BlockButton) then if FireSignal and BlockButton then FireSignal(BlockButton.MouseButton1Click) task.defer(function() task.wait() UpdateDragBlockCooldownFromBlockUI(BlockButton) end) elseif GetValue("OfficialGame") and UseActorAbility then UseActorAbility:FireServer("UseActorAbility", {"Block"}) elseif UseActorAbility then UseActorAbility:FireServer("UseActorAbility", "Block") UseActorAbility:FireServer("UseActorAbility", {"Block"}) end if GetValue("DragBlock", false) and not IsHelplessActive() then DragBlockAttackingKiller(Killer, "DragBlock", true) end break end task.wait(0.02) end end -- Keep C00lkidd's other audio detections; only 75330693422988 -- is excluded because it is detected through the M1 animation instead. local C00lkiddAttackSounds = { ["80516583309685"] = true, ["84307400688050"] = true, ["82221759983649"] = true, ["105516183226360"] = true, ["124234993291213"] = true, ["128195973631079"] = true } local C00lkiddSoundConnections = {} local C00lkiddSoundLastTrigger = {} local function GetC00lkiddSoundAssetId(Sound) if not Sound or not Sound:IsA("Sound") then return nil end return tostring(Sound.SoundId or ""):match("%d+") end local function WatchC00lkiddSound(Sound) if not Sound or not Sound:IsA("Sound") then return end local SoundId = GetC00lkiddSoundAssetId(Sound) if not SoundId or not C00lkiddAttackSounds[SoundId] or C00lkiddSoundConnections[Sound] then return end local function Trigger() if not Sound.Parent or not Sound.Playing then return end if not GetValue("AutoBlock") or IsHelplessActive() then return end local Now = os.clock() if C00lkiddSoundLastTrigger[Sound] and Now - C00lkiddSoundLastTrigger[Sound] < 0.08 then return end C00lkiddSoundLastTrigger[Sound] = Now task.spawn(function() RunC00lkiddSoundAutoBlock(false) end) end C00lkiddSoundConnections[Sound] = Sound:GetPropertyChangedSignal("Playing"):Connect(Trigger) if Sound.Playing then Trigger() end end if IsC00lkiddKiller(Killer) then for _, Descendant in Killer:GetDescendants() do if Descendant:IsA("Sound") then WatchC00lkiddSound(Descendant) end end Killer.DescendantAdded:Connect(function(Descendant) if Descendant:IsA("Sound") then WatchC00lkiddSound(Descendant) end end) end -- Treachstone is sound-only. Use the same ABH/sound logic as C00lkidd, -- but search Workspace as well because the attack sound may not be parented -- directly under the killer model. local TreachstoneAttackSounds = { ["140242176732868"] = true } local TreachstoneSoundConnections = {} local TreachstoneSoundLastTrigger = {} local function GetTreachstoneSoundAssetId(Sound) if not Sound or not Sound:IsA("Sound") then return nil end return tostring(Sound.SoundId or ""):match("%d+") end local function RunTreachstoneSoundAutoBlock() if not GetValue("AutoBlock") or IsHelplessActive() then return end if IsWallCheckBlocked(Killer) then return end if string.lower(Killer.Name or "") ~= "treachstone" then return end if not LocalCharacter or not LocalCharacter:FindFirstChild("QueryHitbox") or LocalCharacter.Parent ~= SurvivorsFolder then return end local AbilityContainer = MainUI and MainUI:FindFirstChild("AbilityContainer") local BlockButton = AbilityContainer and AbilityContainer:FindFirstChild("Block") if not BlockButton then return end local CustomHitbox = CustomHitboxes["johndoe"] local KillerNameLower = Killer.Name:lower() for i = 1, 12 do if IsHelplessActive() or not GetValue("AutoBlock") then return end SelfParams.FilterDescendantsInstances = {LocalCharacter:FindFirstChild("QueryHitbox")} local Part = Instance.new("Part") Part.Name = "KillerDetectHitbox" Part.Color = BrickColor.new("Really black").Color local BaseHitboxSize = (CustomHitbox and CustomHitbox["Size"] or Vector3.new(5.2, 6, 5.65)) * 2.2 local GlobalHitboxAdjustment = GetCurrentHitboxAdjustment("AutoBlockHitboxAllKiller") local IndividualHitboxAdjustment = GetCurrentHitboxAdjustment("AutoBlockHitboxJohnDoe") local TotalHitboxAdjustment = GlobalHitboxAdjustment + IndividualHitboxAdjustment Part.Size = BaseHitboxSize + Vector3.new(TotalHitboxAdjustment, TotalHitboxAdjustment, TotalHitboxAdjustment) Part.Size = Vector3.new(math.max(0.1, Part.Size.X), math.max(0.1, Part.Size.Y), math.max(0.1, Part.Size.Z)) local DetectionOffset = CustomHitbox and CustomHitbox["Offset"] or CFrame.new(0,0,-3.5) if GetValue("DragBlock", false) then Part.Size = Part.Size + Vector3.new(0,0,2) Part.CFrame = QueryHitbox.CFrame * DetectionOffset * CFrame.new(0,0,-1) else Part.CFrame = QueryHitbox.CFrame * DetectionOffset end Part.CanCollide = false Part.Anchored = true Part.CastShadow = false Part.Material = Enum.Material.ForceField Part.Transparency = AreHitboxesShown() and 0.1 or 1 Part.Parent = GetHitboxesFolder() Debris:AddItem(Part, 0.4) local Hitbox = workspace:GetPartsInPart(Part, SelfParams) if #Hitbox > 0 and not IsWallCheckBlocked(Killer) and not IsDragBlockCooldownActive(BlockButton) then if FireSignal and BlockButton then FireSignal(BlockButton.MouseButton1Click) task.defer(function() task.wait() UpdateDragBlockCooldownFromBlockUI(BlockButton) end) elseif GetValue("OfficialGame") and UseActorAbility then UseActorAbility:FireServer("UseActorAbility", {"Block"}) elseif UseActorAbility then UseActorAbility:FireServer("UseActorAbility", "Block") UseActorAbility:FireServer("UseActorAbility", {"Block"}) end if GetValue("DragBlock", false) and not IsHelplessActive() then DragBlockAttackingKiller(Killer, "DragBlock", true) end break end task.wait(0.02) end end local function WatchTreachstoneSound(Sound) if not Sound or not Sound:IsA("Sound") then return end if TreachstoneSoundConnections[Sound] then return end local function TryWatch() local SoundId = GetTreachstoneSoundAssetId(Sound) if not SoundId or not TreachstoneAttackSounds[SoundId] then return end if TreachstoneSoundConnections[Sound] then return end local function Trigger() if not Sound.Parent or not Sound.Playing then return end if not GetValue("AutoBlock") or IsHelplessActive() then return end local Now = os.clock() if TreachstoneSoundLastTrigger[Sound] and Now - TreachstoneSoundLastTrigger[Sound] < 0.08 then return end TreachstoneSoundLastTrigger[Sound] = Now task.spawn(RunTreachstoneSoundAutoBlock) end TreachstoneSoundConnections[Sound] = Sound:GetPropertyChangedSignal("Playing"):Connect(Trigger) if Sound.Playing then Trigger() end end TryWatch() Sound:GetPropertyChangedSignal("SoundId"):Connect(TryWatch) end if string.lower(Killer.Name or "") == "treachstone" then -- Match C00lkidd's watcher, while also covering sounds that are -- created outside the killer model. for _, Descendant in workspace:GetDescendants() do if Descendant:IsA("Sound") then WatchTreachstoneSound(Descendant) end end workspace.DescendantAdded:Connect(function(Descendant) if Descendant:IsA("Sound") then WatchTreachstoneSound(Descendant) end end) end if KillerAnimator then KillerAnimator.AnimationPlayed:Connect(function(Track) if Players:GetPlayerFromCharacter(Killer) then local AnimationId = tostring(Track.Animation.AnimationId or "") local NumericAnimationId = AnimationId:match("%d+") local AnimType,KillerName = GetAnimationType(AnimationId) -- Route only C00lkidd's specified M1 animation through the -- shared ABH detector so Show ABH Hitbox displays it too. if IsC00lkiddKiller(Killer) then if NumericAnimationId == C00lkiddM1AnimationId then AnimType = "attack" else AnimType = nil end end -- John Doe attack animation detected from the logged animation ID. if string.lower(Killer.Name or "") == "johndoe" and (AnimationId:match("%d+") == "87347358451124" or AnimationId:match("%d+") == "121778755277919") then AnimType = "attack" end if AnimType and type(AnimType) == type("") and table.find(BlockableAttacks,AnimType:lower()) then local CustomHitbox = CustomHitboxes[AnimType:lower()] or CustomHitboxes[Killer.Name:lower()] -- Patch 159: show the same Auto Block hitbox while the local player is the killer. -- This is a visualization-only preview and does not attempt to block while playing killer. if LocalCharacter == Killer then local PreviewHitbox = Instance.new("Part") PreviewHitbox.Name = "KillerDetectHitboxPreview" PreviewHitbox.Color = BrickColor.new("Really black").Color local BasePreviewSize = (CustomHitbox and CustomHitbox["Size"] or Vector3.new(5.2, 6, 5.65)) * 2.2 local GlobalPreviewAdjustment = GetCurrentHitboxAdjustment("AutoBlockHitboxAllKiller") local PreviewKillerNameLower = Killer.Name:lower() local PreviewKillerHitboxKeys = { ["slasher"] = "AutoBlockHitboxSlasher", ["johndoe"] = "AutoBlockHitboxJohnDoe", ["sixer"] = "AutoBlockHitboxSixer", ["nosferatu"] = "AutoBlockHitboxNosferatu", ["noli"] = "AutoBlockHitboxNoli", ["1x1x1x1"] = "AutoBlockHitbox1x1x1x1", ["c00lkidd"] = "AutoBlockHitboxC00lkidd", ["azure"] = "AutoBlockHitboxAzure", ["treachstone"] = "AutoBlockHitboxJohnDoe", ["vanity"] = "AutoBlockHitboxSlasher", ["vanity slasher"] = "AutoBlockHitboxSlasher", ["combat initiation"] = "AutoBlockHitboxSlasher", ["combat initiation slasher"] = "AutoBlockHitboxSlasher" } local PreviewKillerHitboxKey = IsC00lkiddKiller(Killer) and "AutoBlockHitboxC00lkidd" or (PreviewKillerHitboxKeys[PreviewKillerNameLower] or ("AutoBlockHitbox" .. Killer.Name:gsub("[^%w]", ""))) if AnimType:lower() == "golemslash" then PreviewKillerHitboxKey = "AutoBlockHitboxGolemslash" end local IndividualPreviewAdjustment = GetCurrentHitboxAdjustment(PreviewKillerHitboxKey) local TotalPreviewAdjustment = GlobalPreviewAdjustment + IndividualPreviewAdjustment PreviewHitbox.Size = BasePreviewSize + Vector3.new(TotalPreviewAdjustment, TotalPreviewAdjustment, TotalPreviewAdjustment) PreviewHitbox.Size = Vector3.new( math.max(0.1, PreviewHitbox.Size.X), math.max(0.1, PreviewHitbox.Size.Y), math.max(0.1, PreviewHitbox.Size.Z) ) local PreviewOffset = CustomHitbox and CustomHitbox["Offset"] or CFrame.new(0,0,-3.5) if GetValue("DragBlock", false) then PreviewHitbox.Size = PreviewHitbox.Size + Vector3.new(0,0,2) PreviewHitbox.CFrame = QueryHitbox.CFrame * PreviewOffset * CFrame.new(0,0,-1) else PreviewHitbox.CFrame = QueryHitbox.CFrame * PreviewOffset end if IsC00lkiddKiller(Killer) then PreviewHitbox.Size = Vector3.new( math.max(0.1, PreviewHitbox.Size.X), math.max(0.1, PreviewHitbox.Size.Y), math.max(0.1, PreviewHitbox.Size.Z - 2) ) PreviewHitbox.CFrame = PreviewHitbox.CFrame * CFrame.new(0, 0, 1) end PreviewHitbox.CanCollide = false PreviewHitbox.Anchored = true PreviewHitbox.CastShadow = false PreviewHitbox.Material = Enum.Material.ForceField PreviewHitbox.Transparency = 0.1 PreviewHitbox.Parent = GetHitboxesFolder() Debris:AddItem(PreviewHitbox, 0.4) return end if GetValue("AutoBlock") and LocalCharacter and LocalCharacter:FindFirstChild("QueryHitbox") and LocalCharacter.Parent == SurvivorsFolder and MainUI:FindFirstChild("AbilityContainer") and MainUI:FindFirstChild("AbilityContainer"):FindFirstChild("Block") then local CustomHitbox = CustomHitboxes[AnimType:lower()] or CustomHitboxes[Killer.Name:lower()] for i = 1,(IsC00lkiddKiller(Killer) and 9 or (Killer.Name:lower() == "noli" and 10 or 10)) do SelfParams.FilterDescendantsInstances = {LocalCharacter:FindFirstChild("QueryHitbox")} local Part = Instance.new("Part") Part.Name = "KillerDetectHitbox" Part.Color = BrickColor.new("Really black").Color local BaseHitboxSize = (CustomHitbox and CustomHitbox["Size"] or Vector3.new(5.2, 6, 5.65)) * 2.2 local GlobalHitboxAdjustment = GetCurrentHitboxAdjustment("AutoBlockHitboxAllKiller") local KillerNameLower = Killer.Name:lower() local KillerHitboxKeys = { ["slasher"] = "AutoBlockHitboxSlasher", ["johndoe"] = "AutoBlockHitboxJohnDoe", ["sixer"] = "AutoBlockHitboxSixer", ["nosferatu"] = "AutoBlockHitboxNosferatu", ["noli"] = "AutoBlockHitboxNoli", ["1x1x1x1"] = "AutoBlockHitbox1x1x1x1", ["c00lkidd"] = "AutoBlockHitboxC00lkidd", ["azure"] = "AutoBlockHitboxAzure", ["treachstone"] = "AutoBlockHitboxJohnDoe", ["vanity"] = "AutoBlockHitboxSlasher", ["vanity slasher"] = "AutoBlockHitboxSlasher", ["combat initiation"] = "AutoBlockHitboxSlasher", ["combat initiation slasher"] = "AutoBlockHitboxSlasher" } local KillerHitboxKey = IsC00lkiddKiller(Killer) and "AutoBlockHitboxC00lkidd" or (KillerHitboxKeys[KillerNameLower] or ("AutoBlockHitbox" .. Killer.Name:gsub("[^%w]", ""))) if AnimType and AnimType:lower() == "golemslash" then KillerHitboxKey = "AutoBlockHitboxGolemslash" end local IndividualHitboxAdjustment = GetCurrentHitboxAdjustment(KillerHitboxKey) local TotalHitboxAdjustment = GlobalHitboxAdjustment + IndividualHitboxAdjustment Part.Size = BaseHitboxSize + Vector3.new(TotalHitboxAdjustment, TotalHitboxAdjustment, TotalHitboxAdjustment) Part.Size = Vector3.new( math.max(0.1, Part.Size.X), math.max(0.1, Part.Size.Y), math.max(0.1, Part.Size.Z) ) local DetectionOffset = CustomHitbox and CustomHitbox["Offset"] or CFrame.new(0,0,-3.5) if GetValue("DragBlock", false) then -- Make the detection hitbox 2 studs deeper toward the killer/front. -- The rear edge stays in the same place; this changes the hitbox size, not just its offset. Part.Size = Part.Size + Vector3.new(0,0,2) Part.CFrame = QueryHitbox.CFrame * DetectionOffset * CFrame.new(0,0,-1) else Part.CFrame = QueryHitbox.CFrame * DetectionOffset end if IsC00lkiddKiller(Killer) then -- Reduce only the forward reach by 2 studs while keeping the rear edge fixed. Part.Size = Vector3.new( math.max(0.1, Part.Size.X), math.max(0.1, Part.Size.Y), math.max(0.1, Part.Size.Z - 2) ) Part.CFrame = Part.CFrame * CFrame.new(0, 0, 1) end if i == 7 and GetValue("DragV2", false) then -- Patch 305: Drag V2 uses a 75% larger hitbox than normal ABH for Slasher/Sixer. local DragV2KillerName = string.lower(Killer.Name):gsub("[%s_%-]", "") if DragV2KillerName == "slasher" or DragV2KillerName == "sixer" then Part.Size = Part.Size * 1.75 if DragV2KillerName == "slasher" then -- Patch 308: Slasher's forward depth matches its side width for Drag V2. Part.Size = Vector3.new(Part.Size.X, Part.Size.Y, Part.Size.X) end else Part.Size = Part.Size * 1.5 end end Part.CanCollide = false Part.Anchored = true Part.CastShadow = false Part.Material = Enum.Material.ForceField Part.Transparency = AreHitboxesShown() and 0.1 or 1 Part.Parent = GetHitboxesFolder() Debris:AddItem(Part,0.4) local Hitbox = workspace:GetPartsInPart(Part,SelfParams) -- Auto Block can use any ABH normally. When Drag V2 is enabled by itself, -- wait for its dedicated 7th ABH so Auto Block and Drag V2 start together there. -- Drag Block retains its own ability to trigger on any ABH. local DragV2Enabled = GetValue("DragV2", false) local DragBlockEnabled = GetValue("DragBlock", false) local IsDragV2Check = i == 7 local ShouldTriggerThisHitbox = #Hitbox > 0 and (not DragV2Enabled or IsDragV2Check or DragBlockEnabled) if ShouldTriggerThisHitbox and not IsWallCheckBlocked(Killer) and not IsDragBlockCooldownActive(MainUI:FindFirstChild("AbilityContainer"):FindFirstChild("Block")) then if FireSignal and MainUI:FindFirstChild("AbilityContainer"):FindFirstChild("Block") then FireSignal(MainUI.AbilityContainer.Block.MouseButton1Click) task.defer(function() task.wait() UpdateDragBlockCooldownFromBlockUI(MainUI.AbilityContainer.Block) end) if GetValue("DragBlock", false) and not IsHelplessActive() then DragBlockAttackingKiller(Killer, "DragBlock", true) elseif GetValue("DragV2", false) and not IsHelplessActive() then DragBlockAttackingKiller(Killer, "DragV2", true) end break end if GetValue("OfficialGame") then UseActorAbility:FireServer("UseActorAbility",{"Block"}) else UseActorAbility:FireServer("UseActorAbility","Block") UseActorAbility:FireServer("UseActorAbility",{"Block"}) end if GetValue("DragBlock", false) and not IsHelplessActive() then DragBlockAttackingKiller(Killer, "DragBlock", true) elseif GetValue("DragV2", false) and not IsHelplessActive() then DragBlockAttackingKiller(Killer, "DragV2", true) end break end task.wait(0.02) end end end end end) end end, ["SetupUI"] = function(AbilityContainer) if AbilityContainer.Name == "AbilityContainer" then if AbilityContainer:FindFirstChild("Block") and not AbilityContainer:FindFirstChild("Block"):FindFirstChild("AutoImage") then local AutoImage = Instance.new("ImageLabel") AutoImage.Name = "AutoImage" AutoImage.Interactable = false AutoImage.Parent = AbilityContainer:FindFirstChild("Block") AutoImage.Image = "rbxassetid://114159864966636" AutoImage.BackgroundTransparency = 1 AutoImage.Size = UDim2.fromScale(0.8,0.8) AutoImage.Position = UDim2.fromScale(0.5,0) AutoImage.AnchorPoint = Vector2.new(0.5,0.4) AutoImage.Visible = GetValue("AutoBlock") and LocalCharacter.Parent.Name:find("Survi") end end end, ["CustomSetup"] = function(self) self.DisplayTitle = self.DisplayTitle:gsub("Guest1337",RichTextGradientColor("Guest1337",{Color3.fromRGB(16, 47, 185), Color3.fromRGB(146, 202, 93)})) if MainUI:FindFirstChild("AbilityContainer") then self:SetupUI(MainUI:FindFirstChild("AbilityContainer")) end MainUI.ChildAdded:Connect(self.SetupUI) if KillersFolder then KillersFolder.ChildAdded:Connect(function(Killer) self:HandleKiller(Killer) end) for i,Killer in KillersFolder:GetChildren() do self:HandleKiller(Killer) end end end }, ["PunchWait"] = { ["DisplayDescription"] = "How long Auto Punch waits after a successful block before punching (seconds)", ["DisplayTitle"] = "Punch Wait", ["LayoutOrder"] = 14.1, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0.15, ["Requirement"] = "AutoPunch", ["ExtraData"] = { ["MaxValue"] = 1, ["MinValue"] = 0, ["Step"] = 0.05 } }, ["AutoPunch"] = { ["DisplayDescription"] = "Uses the punch ability when you block successfully", ["DisplayTitle"] = "Guest1337 Auto Punch", ["LayoutOrder"] = 14, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ScriptFunction"] = function(self, Value) local BlockAbilityUI = MainUI and MainUI:FindFirstChild("AbilityContainer") and MainUI:FindFirstChild("AbilityContainer"):FindFirstChild("Punch") local AutoImage = BlockAbilityUI and BlockAbilityUI:FindFirstChild("AutoImage") if Value and AutoImage then AutoImage.Visible = true elseif AutoImage then AutoImage.Visible = false end end, ["SetupUI"] = function(AbilityContainer) if AbilityContainer.Name == "AbilityContainer" then if AbilityContainer:FindFirstChild("Punch") and not AbilityContainer:FindFirstChild("Punch"):FindFirstChild("AutoImage") then local AutoImage = Instance.new("ImageLabel") AutoImage.Name = "AutoImage" AutoImage.Interactable = false AutoImage.Parent = AbilityContainer:FindFirstChild("Punch") AutoImage.Image = "rbxassetid://114159864966636" AutoImage.BackgroundTransparency = 1 AutoImage.Size = UDim2.fromScale(0.8,0.8) AutoImage.Position = UDim2.fromScale(0.5,0) AutoImage.AnchorPoint = Vector2.new(0.5,0.4) AutoImage.Visible = GetValue("AutoPunch") and LocalCharacter.Parent.Name:find("Survi") end end end, ["GetClosestKiller"] = function() local Distance = 55 local SelectedKiller for i,v in KillersFolder:GetChildren() do if Players:GetPlayerFromCharacter(v) and LocalRoot and v:FindFirstChild("HumanoidRootPart") and (v:FindFirstChild("HumanoidRootPart").Position - LocalRoot.Position).Magnitude < Distance then Distance = (v:FindFirstChild("HumanoidRootPart").Position - LocalRoot.Position).Magnitude SelectedKiller = v end end return SelectedKiller,Distance end, ["CharacterAdded"] = function(self) local FireSignal = GetFunction(firesignal,FireSignal) local UseActorAbility = Network and Network:FindFirstChildOfClass("RemoteEvent") if not LocalHumanoid then return warn("no humanoid found") end LocalCharacter:GetAttributeChangedSignal("TimesHit"):Connect(function() if GetValue("AutoPunch") and SpeedMultipliers:FindFirstChild("GuestBlocking") and LocalHumanoid:GetAttribute("Overheal") ~= nil and LocalHumanoid:GetAttribute("Overheal") >= 10 and (self:GetClosestKiller()) then -- Auto Punch takes priority over dragging the player -- toward the killer. Stop follow before the Punch Wait. StopCurrentDragBlockFollow() -- Patch 173: read the current Punch Wait slider directly each trigger. local PunchWaitValue = PlusFolderSettings and PlusFolderSettings:FindFirstChild("PunchWait", true) local PunchWait = math.clamp(tonumber(PunchWaitValue and PunchWaitValue.Value) or 0.15, 0, 1) if PunchWait > 0 then task.wait(PunchWait) end LocalCharacter:SetAttribute("DisableShiftLockMovement",true) if FireSignal and MainUI:FindFirstChild("AbilityContainer"):FindFirstChild("Punch") then FireSignal(MainUI.AbilityContainer.Punch.MouseButton1Click) else if GetValue("OfficialGame") then UseActorAbility:FireServer("UseActorAbility",{"Punch"}) else UseActorAbility:FireServer("UseActorAbility","Punch") UseActorAbility:FireServer("UseActorAbility",{"Punch"}) end end local CameraTarget -- Patch 178: keep Auto Punch facing locked to the killer for the full 0.5s. -- Do not depend on PunchAbility still existing; the ability can end before the aim window. local LookAtUntil = os.clock() + 0.5 local PreviousAutoRotate = LocalHumanoid.AutoRotate LocalHumanoid.AutoRotate = false LocalCharacter:SetAttribute("DisableShiftLockMovement",true) local function FaceClosestKiller() if not LocalRoot or not LocalRoot.Parent or not LocalHumanoid or LocalHumanoid.Health <= 0 then return end local ClosestKiller = self:GetClosestKiller() if not ClosestKiller then return end local KillerRoot = ClosestKiller:FindFirstChild("HumanoidRootPart") if not KillerRoot then return end local RootPosition = LocalRoot.Position local TargetPosition = Vector3.new(KillerRoot.Position.X, RootPosition.Y, KillerRoot.Position.Z) if (TargetPosition - RootPosition).Magnitude <= 0.05 then return end local TargetCFrame = CFrame.lookAt(RootPosition, TargetPosition) LocalRoot.CFrame = TargetCFrame end FaceClosestKiller() CameraTarget = RunService.RenderStepped:Connect(function() if os.clock() >= LookAtUntil or not LocalCharacter.Parent then if CameraTarget then CameraTarget:Disconnect() CameraTarget = nil end return end FaceClosestKiller() end) repeat task.wait(0.05) until os.clock() >= LookAtUntil or not LocalCharacter.Parent or not LocalHumanoid or LocalHumanoid.Health <= 0 if CameraTarget then CameraTarget:Disconnect() CameraTarget = nil end LocalHumanoid.AutoRotate = PreviousAutoRotate LocalCharacter:SetAttribute("DisableShiftLockMovement",false) task.wait(0.2) end end) end, ["CustomSetup"] = function(self) self.DisplayTitle = self.DisplayTitle:gsub("Guest1337",RichTextGradientColor("Guest1337",{Color3.fromRGB(16, 47, 185), Color3.fromRGB(146, 202, 93)})) if MainUI:FindFirstChild("AbilityContainer") then self:SetupUI(MainUI:FindFirstChild("AbilityContainer")) end MainUI.ChildAdded:Connect(self.SetupUI) end }, ["DragV2"] = { ["DisplayDescription"] = "Uses the seventh Auto Block hitbox check; Slasher/Sixer use a hitbox 75% larger than normal ABH, with the basic Drag Block cooldown", ["DisplayTitle"] = "Drag V2", ["LayoutOrder"] = 15.9, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ExtraData"] = { ["Requirement"] = "AutoBlock" }, ["ScriptFunction"] = function(self, Value) end }, ["DragBlock"] = { ["DisplayDescription"] = "Follows the killer who triggered Auto Block for a short time", ["DisplayTitle"] = "Drag Block", ["LayoutOrder"] = 16, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ExtraData"] = { ["Requirement"] = "AutoBlock" }, ["ScriptFunction"] = function(self, Value) end }, ["DragBlockStopDistance"] = { ["DisplayDescription"] = "How close Drag Block stops the player near the killer (studs)", ["DisplayTitle"] = "Stop Near Killer (Studs)", ["LayoutOrder"] = 16.1, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 3, ["Requirement"] = "AutoBlock|DragBlock", ["ExtraData"] = { ["MaxValue"] = 10, ["MinValue"] = 0.5, ["Step"] = 0.25 } }, ["DragBlockHoldDuration"] = { ["DisplayDescription"] = "How long Drag Block holds/moves the player toward the killer (seconds)", ["DisplayTitle"] = "Hold Player Duration", ["LayoutOrder"] = 16.2, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 0.2, ["Requirement"] = "AutoBlock|DragBlock", ["ExtraData"] = { ["MaxValue"] = 2, ["MinValue"] = 0.01, ["Step"] = 0.01 } }, ["EnableOverride"] = { ["DisplayDescription"] = "Overrides the puzzle grid size of the generators", ["DisplayTitle"] = "Override Generator(s) Grid Size", ["LayoutOrder"] = 27, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "require", }, ["GridSize"] = { ["DisplayDescription"] = "The Size to override for the Generator's Puzzle", ["DisplayTitle"] = "Generator(s) Grid Size", ["LayoutOrder"] = 28, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 6, ["Requirement"] = "require|EnableOverride", ["ExtraData"] = { ["MaxValue"] = 12, ["MinValue"] = 4, ["Step"] = 1, }, ["HandlePuzzle"] = function(Data) PuzzleData = {} local function GetDirection(Row1,Col1,Row2,Col2) if Row2 < Row1 then return "up" end if Row2 > Row1 then return "down" end if Col2 < Col1 then return "left" end if Col2 > Col1 then return "right" end end local function GetPuzzleConnections(Last, New, Next) local Connections = {} if Last and New then local Direction = GetDirection(New.row, New.col, Last.row, Last.col) if Direction == "up" then Direction = "down" elseif Direction == "down" then Direction = "up" elseif Direction == "left" then Direction = "right" elseif Direction == "right" then Direction = "left" end if Direction ~= "" and Direction then Connections[Direction] = true end end if Next and New then local Direction = GetDirection(New.row, New.col, Next.row, Next.col) if Direction ~= "" and Direction then Connections[Direction] = true end end return Connections end local function NearbyDirection(Row1, Col1, Row2, Col2) if Row2 == Row1 - 1 and Col2 == Col1 then return "up" end if Row2 == Row1 + 1 and Col2 == Col1 then return "down" end if Row2 == Row1 and Col2 == Col1 - 1 then return "left" end if Row2 == Row1 and Col2 == Col1 + 1 then return "right" end return false end local function GetPlaceKey(Point) return `{Point.row}-{Point.col}` end local function PathEndpoints(Path, endpoints) if not Path or #Path == 0 then return Path end local UniquePoint for i, Point in endpoints or {} do for i, v in Path do if v.row == Point.row and v.col == Point.col then UniquePoint = {row = Point.row,col = Point.col} break end end if UniquePoint then break end end if not UniquePoint then local PointsInPath = {} for i, Point in Path do local TableKey = GetPlaceKey(Point) PointsInPath[TableKey] = Point end for i, Point in Path do local Nearby = 0 local Directions = {{Point.row - 1,Point.col}, {Point.row + 1,Point.col},{Point.row,Point.col - 1}, {Point.row,Point.col + 1}} for i, Data in Directions do local Row = Data[1] local Col = Data[2] local TableKey = `{Row}-{Col}` if PointsInPath[TableKey] ~= nil then Nearby += 1 end end if Nearby == 1 then UniquePoint = {row = Point.row,col = Point.col} break end end end if not UniquePoint then UniquePoint = {row = Path[1].row,col = Path[1].col} end local Remaining = {} for i,Point in Path do local TableKey = GetPlaceKey(Point) local CurrentTableKey = {row = Point.row,col = Point.col} Remaining[TableKey] = CurrentTableKey end local Ordered = {} local CurrentTableKey = {row = UniquePoint.row,col = UniquePoint.col} local ClonedTable = table.clone(CurrentTableKey) setmetatable(ClonedTable, nil) table.insert(Ordered, ClonedTable) local TableKey = GetPlaceKey(CurrentTableKey) Remaining[TableKey] = nil while true do local Size = 0 for i in Remaining do Size += 1 end if not (Size > 0) then break end local foundNext = false for key, Point in Remaining do local Direction = NearbyDirection(CurrentTableKey.row,CurrentTableKey.col,Point.row,Point.col) if Direction ~= "" and Direction then local ClonedPoint = table.clone(Point) setmetatable(ClonedPoint, nil) table.insert(Ordered, ClonedPoint) Remaining[key] = nil CurrentTableKey = Point foundNext = true break end end if not foundNext then return Path end end return Ordered end local function ActivatePuzzlePathfind(self, Puzzle, UI) if not Puzzle or not Puzzle.Solution then return nil end local TotalPaths = #Puzzle.Solution local PuzzlePoints = {} local CanIncrease = false for i = 1,TotalPaths do table.insert(PuzzlePoints, i) end for i = #PuzzlePoints-1, 2, -1 do local RandomChoice = math.random(1,i) local Temp = PuzzlePoints[i+1] PuzzlePoints[i+1] = PuzzlePoints[RandomChoice+1] PuzzlePoints[RandomChoice+1] = Temp end local IsActiveConnection local function Restart() if not GetValue("AutoGeneratorPuzzle") then return end for i, Color in PuzzlePoints do local Path = Puzzle.Solution[Color] local endpoints = Puzzle.targetPairs[Color] local CompletePath = PathEndpoints(Path, endpoints) Puzzle.paths[Color] = {} for i = 0, #CompletePath - 1 do local Point = CompletePath[i + 1] local ColorData = Puzzle.paths[Color] local TableKey = {row = Point.row,col = Point.col} table.insert(ColorData,TableKey) local Last = CompletePath[i] local Next = CompletePath[i + 2] local PuzzleConnections = GetPuzzleConnections(Last, Point, Next) Puzzle.gridConnections = Puzzle.gridConnections or {} Puzzle.gridConnections[`{Point.row}-{Point.col}`] = PuzzleConnections if not GetValue("AutoGeneratorPuzzle") then break elseif not UI or not UI.Parent then IsActiveConnection:Disconnect() break end Puzzle:updateGui() task.wait(GetValue("GeneratorCooldown",true):GetAttribute("CurrentSpeed")) if not GetValue("AutoGeneratorPuzzle") then break elseif not UI or not UI.Parent then IsActiveConnection:Disconnect() break end end if not GetValue("AutoGeneratorPuzzle") then break elseif not UI or not UI.Parent then IsActiveConnection:Disconnect() break end Puzzle:checkForWin() end end IsActiveConnection = GetValue("AutoGeneratorPuzzle",true):GetPropertyChangedSignal("Value"):Connect(Restart) Restart() end ActivatePuzzlePathfind(PuzzleData,Data[1],Data[2]) end, ["CustomSetup"] = function(self) if GetValue("require") and FlowGame then if FlowGame:FindFirstChild("Settings") then local SettingsModule = require(FlowGame:FindFirstChild("Settings")) self.DefaultInstanceValue = SettingsModule and SettingsModule.DefaultGridSize or self.DefaultInstanceValue end local FlowGameFunctions = require(FlowGame) local Original = FlowGameFunctions.new function FlowGameFunctions.new(...) local Args = {...} if type(Args[2]) == type(0) or not Args[2] then Args[2] = GetValue("EnableOverride") and GetValue("GridSize") or Args[2] GetValue("GeneratorCooldown",true):SetAttribute("CurrentGrid",Args[2]) local Result = {Original(table.unpack(Args))} task.delay(0.35,self.HandlePuzzle,{Result[1],Args[1]}) return Result[1] else self.Requirement = true Original(...) end end else self.Requirement = true end end }, }, ["Visuals"] = { ["TabAttributes"] = { ["DisplayTitle"] = "Visuals", ["LayoutOrder"] = 6 }, ["DisableNoliNPC"] = { ["DisplayDescription"] = "Disables Noli's Distracting NPC", ["DisplayTitle"] = "Disable Noli's NPC", ["LayoutOrder"] = 1, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["HandleNoliNPC"] = function(self,Value) -- Keep hidden Noli clones out of collision/query/physics work. -- Moving the model to Lighting alone does not make its BaseParts -- non-physical, so the clone could continue participating in -- engine spatial/physics processing while hidden. self.NoliNPCFrozenState = self.NoliNPCFrozenState or setmetatable({}, {__mode = "k"}) local function FreezeHiddenNoli(Model) if not Model or Players:GetPlayerFromCharacter(Model) then return end if not self.NoliNPCFrozenState[Model] then local State = {Parts = {}, Humanoids = {}} for _,Descendant in Model:GetDescendants() do if Descendant:IsA("BasePart") then State.Parts[Descendant] = { Anchored = Descendant.Anchored, CanCollide = Descendant.CanCollide, CanTouch = Descendant.CanTouch, CanQuery = Descendant.CanQuery, Massless = Descendant.Massless } Descendant.Anchored = true Descendant.CanCollide = false Descendant.CanTouch = false Descendant.CanQuery = false Descendant.Massless = true elseif Descendant:IsA("Humanoid") then State.Humanoids[Descendant] = {AutoRotate = Descendant.AutoRotate} Descendant.AutoRotate = false end end self.NoliNPCFrozenState[Model] = State else for Part in pairs(self.NoliNPCFrozenState[Model].Parts) do if Part and Part.Parent then Part.Anchored = true Part.CanCollide = false Part.CanTouch = false Part.CanQuery = false Part.Massless = true end end end end local function RestoreNoli(Model) local State = self.NoliNPCFrozenState and self.NoliNPCFrozenState[Model] if not State then return end for Part,Original in pairs(State.Parts) do if Part and Part.Parent then Part.Anchored = Original.Anchored Part.CanCollide = Original.CanCollide Part.CanTouch = Original.CanTouch Part.CanQuery = Original.CanQuery Part.Massless = Original.Massless end end for Humanoid,Original in pairs(State.Humanoids) do if Humanoid and Humanoid.Parent then Humanoid.AutoRotate = Original.AutoRotate end end self.NoliNPCFrozenState[Model] = nil end if Value then for i,v in KillersFolder:GetChildren() do if v.Name:lower() == "noli" and not Players:GetPlayerFromCharacter(v) then FreezeHiddenNoli(v) v.Parent = Lighting v:PivotTo(v:GetPivot() * CFrame.new(0,-100,0)) end end if workspace:FindFirstChild("Themes") then for i,v in pairs(workspace.Themes:GetChildren()) do if v.Name:find("FakeLayer") and v:IsA("Sound") then v:Destroy() end end end else for i,v in Lighting:GetChildren() do if v.Name:lower() == "noli" then v.Parent = InGame v:PivotTo(v:GetPivot() * CFrame.new(0,100,0)) RestoreNoli(v) end end end end, ["ScriptFunction"] = function(self, Value) self:HandleNoliNPC(Value) end, ["CustomSetup"] = function(self) if KillersFolder then KillersFolder.ChildAdded:Connect(function(Child) task.wait(0.5) self:HandleNoliNPC(GetValue("DisableNoliNPC")) end) end end }, ["Disable007n7NPC"] = { ["DisplayDescription"] = "Disables 007n7's Distracting NPC", ["DisplayTitle"] = "Disable 007n7's NPC", ["LayoutOrder"] = 1, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Handle007n7NPC"] = function(self,Value) if Value then for i,v in InGame:GetChildren() do if v.Name:lower() == "007n7" and not Players:GetPlayerFromCharacter(v) then v.Parent = Lighting if v:FindFirstChild("HumanoidRootPart") then v:FindFirstChild("HumanoidRootPart").ChildAdded:Connect(function(Child) if Child:IsA("Sound") and GetValue("Disable007n7NPC") then Child:Destroy() end end) end end end else for i,v in Lighting:GetChildren() do if v.Name:lower() == "007n7" then v.Parent = InGame end end end end, ["ScriptFunction"] = function(self, Value) self:Handle007n7NPC(Value) end, ["CustomSetup"] = function(self) if InGame then InGame.ChildAdded:Connect(function(Child) task.wait(0.02) self:Handle007n7NPC(GetValue("Disable007n7NPC")) end) end end }, ["ESP"] = { ["DisplayDescription"] = "Track things in the game through walls", ["DisplayTitle"] = "ESP", ["LayoutOrder"] = 2, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["CheckHighlightDistance"] = function(self,Highlight,TargetRoot,Settings) local Camera = TargetRoot and workspace.CurrentCamera if not Camera or (Highlight:GetAttribute("Frozen") and not Settings.Instant) then return end local Distance = (Camera.CFrame.Position - TargetRoot.Position).Magnitude local MinDistance = Settings.MinDistance local ShouldHide = Distance < MinDistance or Distance > 1200 if ShouldHide and Highlight.FillTransparency ~= 1 then local Tween = TweenService:Create(Highlight,TweenInfo.new(Settings.Instant and 0 or 0.1),{ FillTransparency = 1, OutlineTransparency = 1 }) Tween.Parent = Highlight Tween:Play() Debris:AddItem(Tween,0.2) return end if not ShouldHide and Distance >= MinDistance and Distance < 1200 then local TransparencyAmount = math.clamp(1 - math.clamp((Distance - MinDistance) / math.max(Settings.MaxDistance - MinDistance, 0.001),0,1),0.45,1) if math.abs(Highlight.FillTransparency - TransparencyAmount) > 0 then local Tween = TweenService:Create(Highlight,TweenInfo.new(Settings.Instant and 0 or 0.1),{ FillTransparency = math.clamp(TransparencyAmount + 0.05,0,1), OutlineTransparency = TransparencyAmount <= 0.95 and TransparencyAmount - 0.05 or TransparencyAmount }) Tween.Parent = Highlight Tween:Play() Debris:AddItem(Tween,0.2) end end end, ["CheckTextDistance"] = function(self,Text,TargetRoot,Settings) local Camera = TargetRoot and workspace.CurrentCamera if not Camera or (Text:GetAttribute("Frozen") and not Settings.Instant) then return end local Distance = (Camera.CFrame.Position - TargetRoot.Position).Magnitude local MinDistance = Settings.MinDistance if Distance > MinDistance and Distance < 1200 and Text.TextTransparency ~= 0 then local Tween = TweenService:Create(Text,TweenInfo.new(Settings.Instant and 0 or 0.1),{TextTransparency = 0,TextStrokeTransparency = 0}) Tween.Parent = TargetRoot Tween:Play() Debris:AddItem(Tween,0.2) elseif Distance <= MinDistance or Distance >= 1200 and Text.TextTransparency ~= 1 then local Tween = TweenService:Create(Text,TweenInfo.new(Settings.Instant and 0 or 0.1),{TextTransparency = 1,TextStrokeTransparency = 1}) Tween.Parent = TargetRoot Tween:Play() Debris:AddItem(Tween,0.2) end end, ["CreateDynamicHighlight"] = function(self,Enabled,ItemInstance,TargetRoot,Settings) Settings = type(Settings) == "table" and Settings or {["MaxDistance"] = 100,["MinDistance"] = 10,["Color"] = Color3.new(1,1,1)} local Highlight:Highlight? = ItemInstance:QueryDescendants("Highlight[$Dynamic]") if Enabled and GetValue("ESP") then if not Highlight[1] then Highlight = Instance.new("Highlight") Highlight.Name = HttpService:GenerateGUID(false):sub(1,7) Highlight.Archivable = false local H, S, V = Settings.Color:ToHSV() Highlight.FillColor = Color3.fromHSV(H, S, V * 0.8) Highlight.OutlineColor = Color3.fromHSV(H, S, V * 1.1) Highlight:SetAttribute("Dynamic",true) Highlight.Parent = ItemInstance Highlight.Adornee = ItemInstance Highlight.FillTransparency = 1 Highlight.OutlineTransparency = 1 self:CheckHighlightDistance(Highlight, TargetRoot, Settings) local Connection;Connection = workspace.CurrentCamera:GetPropertyChangedSignal("CameraSubject"):Connect(function() if Highlight and Highlight.Parent then for i,v in Highlight:GetChildren() do v:Cancel() end Highlight.FillTransparency = 0.95 Highlight.OutlineTransparency = 0.95 else Connection:Disconnect() end end) Highlight.Destroying:Once(function() if Connection then Connection:Disconnect() end end) Highlight.Parent:GetPropertyChangedSignal("Parent"):Once(function() Highlight:Destroy() end) else Highlight = Highlight[1] local H, S, V = Settings.Color:ToHSV() Highlight.FillColor = Color3.fromHSV(H, S, V * 0.8) Highlight.OutlineColor = Color3.fromHSV(H, S, V * 1.1) self:CheckHighlightDistance(Highlight, TargetRoot, Settings) end elseif Highlight[1] then Highlight[1]:Destroy() end end, ["CreateText"] = function(self,Enabled,ItemInstance,TargetRoot,Settings) Settings = type(Settings) == "table" and Settings or {["MinDistance"] = 10,["Color"] = Color3.new(1,1,1)} local BillboardGui = ItemInstance:QueryDescendants("BillboardGui[$Dynamic]") if Enabled and GetValue("ShowText") and GetValue("ESP") then if not BillboardGui[1] then BillboardGui = Instance.new("BillboardGui") local TextLabel = Instance.new("TextLabel") BillboardGui.Name = HttpService:GenerateGUID(false):sub(1,7) BillboardGui.Archivable = false BillboardGui.Size = ItemInstance:IsA("Tool") and UDim2.new(1.5, 30, 0.75, 30) or UDim2.new(1.5,60,0.75,25) BillboardGui["StudsOffset" .. (ItemInstance:IsA("Tool") and "WorldSpace" or "")] = ItemInstance:IsA("Tool") and Vector3.new(0,3,0) or Vector3.new(0,4,0) BillboardGui.AlwaysOnTop = true BillboardGui.ResetOnSpawn = false BillboardGui.Adornee = TargetRoot BillboardGui:SetAttribute("Dynamic",true) TextLabel.Text = Settings.Text or "Unknown" local H, S, V = Settings.Color:ToHSV() TextLabel.TextColor3 = Color3.fromHSV(H, S, V * 1.1) TextLabel.AnchorPoint = Vector2.new(0.5,0.5) TextLabel.Position = UDim2.fromScale(0.5,0.5) TextLabel.Size = UDim2.fromScale(1,1) TextLabel.BackgroundTransparency = 1 TextLabel.TextScaled = true TextLabel.Parent = BillboardGui BillboardGui.Parent = TargetRoot self:CheckTextDistance(TextLabel,TargetRoot,Settings) local Connection;Connection = workspace.CurrentCamera:GetPropertyChangedSignal("CameraSubject"):Connect(function() if BillboardGui and BillboardGui.Parent then for i,v in TextLabel:GetChildren() do v:Cancel() end TextLabel.TextTransparency = 0.95 TextLabel.TextStrokeTransparency = 0.95 else Connection:Disconnect() end end) BillboardGui.Destroying:Once(function() if Connection then Connection:Disconnect() end end) BillboardGui.Parent:GetPropertyChangedSignal("Parent"):Once(function() BillboardGui:Destroy() end) else BillboardGui = BillboardGui[1] local H, S, V = Settings.Color:ToHSV() local TextLabel = BillboardGui.TextLabel TextLabel.TextColor3 = Color3.fromHSV(H, S, V * 1.1) self:CheckTextDistance(TextLabel,TargetRoot,Settings) end elseif BillboardGui[1] then BillboardGui[1]:Destroy() end end, ["OnLoop"] = function(self) local fireprompt = fireproximitypromptFunction and function(ProximityPrompt) return ProximityPrompt and fireproximitypromptFunction(ProximityPrompt) end or function(ProximityPrompt) if ProximityPrompt then ProximityPrompt:InputHoldBegin();ProximityPrompt:InputHoldEnd() end end for i,v in PlayersFolder:QueryDescendants("#Killers > Instance,#Survivors > Instance") do task.spawn(function() local Player = v ~= LocalPlayer.Character and Players:GetPlayerFromCharacter(v) if Player and v:FindFirstChildOfClass("Humanoid") and v:FindFirstChildOfClass("Humanoid").Health > 0 and MainUI.Enabled == true then local FolderName = v.Parent.Name local FeatureValue, ColorValue, TargetRoot = GetValue(FolderName.."ESP"), ColorPresets[GetValue(FolderName.."Color")], v:FindFirstChild("HumanoidRootPart") self:CreateDynamicHighlight(FeatureValue, v, TargetRoot, {MaxDistance = 100,MinDistance = 10,Color = ColorValue }) self:CreateText(FeatureValue, v, TargetRoot, {MinDistance = 25,Text = Player.Name,Color = ColorValue}) else self:CreateDynamicHighlight(false, v) self:CreateText(false, v) end end) end if InGame and GameMap then task.spawn(function() local Tools = InGame:QueryDescendants("#Map > Tool") local DroppedTools = InGame.Parent:QueryDescendants("Folder > Tool") for i,v in table.move(Tools,1,#Tools,#DroppedTools+1,DroppedTools) do local FeatureValue, ColorValue, TargetRoot = GetValue("ItemsESP"), ColorPresets[GetValue("ItemsColor")], v:FindFirstChildWhichIsA("BasePart") self:CreateDynamicHighlight(FeatureValue, v, TargetRoot, {MaxDistance = 100,MinDistance = 12,Color = ColorValue}) self:CreateText(FeatureValue, v, TargetRoot, {MinDistance = 25,Text = v.Name, Color = ColorValue}) if v:IsA("Tool") and not LocalCharacter:FindFirstChild(v.Name) and not LocalPlayer:FindFirstChildOfClass("Backpack"):FindFirstChild(v.Name) and not v:GetAttribute("JustDropped") and GetValue("AutoPickup") then local Param = OverlapParams.new() Param.FilterType = Enum.RaycastFilterType.Include Param.FilterDescendantsInstances = {v} local Result = workspace:GetPartBoundsInRadius(LocalRoot.Position, 4.5, Param) if LocalRoot and #Result > 0 then fireprompt(v:FindFirstChildWhichIsA("ProximityPrompt",true)) end end end end) for i,v in GameMap:QueryDescendants("Model#Generator:has(#Main)") do task.spawn(function() if (GetValue("GeneratorsCheck")) == true and v:FindFirstChild("Progress") and v:FindFirstChild("Progress").Value >= 100 then self:CreateDynamicHighlight(false, v) self:CreateText(false, v) elseif v:FindFirstChild("Progress") then local FeatureValue, ColorValue, TargetRoot = GetValue("GeneratorsESP"), ColorPresets[GetValue("GeneratorsColor")], v:FindFirstChild("Main") or v:WaitForChild("Main") self:CreateDynamicHighlight(FeatureValue, v, TargetRoot, { MaxDistance = 100,MinDistance = 12,Color = ColorValue}) self:CreateText(FeatureValue, v, TargetRoot, { MinDistance = 25,Text = v.Name,Color = ColorValue}) end end) end end end }, ["ShowText"] = { ["DisplayDescription"] = "Show text over the highlighted objects", ["DisplayTitle"] = "Show Text", ["LayoutOrder"] = 3, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "ESP", }, ["KillersESP"] = { ["DisplayDescription"] = "Enables ESP for the killer(s)", ["DisplayTitle"] = "Killer(s) (ESP)", ["LayoutOrder"] = 4, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "ESP", }, ["KillersColor"] = { ["DisplayDescription"] = "Select a Color for Killer(s) (ESP)", ["DisplayTitle"] = "Killer(s) Color", ["LayoutOrder"] = 5, ["Savable"] = true, ["InstanceType"] = "StringValue", ["DefaultInstanceValue"] = "Red", ["Requirement"] = "ESP|KillersESP", ["ExtraData"] = { ["Options"] = "Red|Orange|Purple|Gold", }, ["ScriptFunction"] = function(self, Value) local Name = "Killer(s)" local H, S, V = ColorPresets[Value]:ToHSV() local Color = ColorPresets[Value] local DarkerColor = Color3.fromHSV(H, S, V * 0.7) for i,v in FeatureLoadout["Visuals"] do if v["DisplayTitle"]:find(Name,1,true) then local ColoredName = RichTextGradientColor(Name,{Color,DarkerColor}) local FormattedName = Name:gsub("([%(%)])", "%%%1") local ColoredText = v["DisplayTitle"]:gsub(FormattedName, ColoredName, 1) if v["Instance"] then v["Instance"]:SetAttribute("DisplayTitle",ColoredText) else v["DisplayTitle"] = ColoredText end end end end }, ["SurvivorsESP"] = { ["DisplayDescription"] = "Enables ESP for the survivor(s)", ["DisplayTitle"] = "Survivor(s) (ESP)", ["LayoutOrder"] = 6, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "ESP", ["ScriptFunction"] = function(self, Value) end }, ["SurvivorsColor"] = { ["DisplayDescription"] = "Select a Color for Survivor(s) (ESP)", ["DisplayTitle"] = "Survivor(s) Color", ["LayoutOrder"] = 7, ["Savable"] = true, ["InstanceType"] = "StringValue", ["DefaultInstanceValue"] = "Green", ["Requirement"] = "ESP|SurvivorsESP", ["ExtraData"] = { ["Options"] = "Green|Orange|Purple|Gold", }, ["ScriptFunction"] = function(self, Value) local Name = "Survivor(s)" local H, S, V = ColorPresets[Value]:ToHSV() local Color = ColorPresets[Value] local DarkerColor = Color3.fromHSV(H, S, V * 0.7) for i,v in FeatureLoadout["Visuals"] do if v["DisplayTitle"]:find(Name,1,true) then local ColoredName = RichTextGradientColor(Name,{Color,DarkerColor}) local FormattedName = Name:gsub("([%(%)])", "%%%1") local ColoredText = v["DisplayTitle"]:gsub(FormattedName, ColoredName, 1) if v["Instance"] then v["Instance"]:SetAttribute("DisplayTitle",ColoredText) else v["DisplayTitle"] = ColoredText end end end end }, ["GeneratorsESP"] = { ["DisplayDescription"] = "Enables ESP for the Generator(s)", ["DisplayTitle"] = "Generator(s) (ESP)", ["LayoutOrder"] = 9, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "ESP", ["ScriptFunction"] = function(self, Value) end }, ["GeneratorsColor"] = { ["DisplayDescription"] = "Select a Color for Generator(s) (ESP)", ["DisplayTitle"] = "Generator(s) Color", ["LayoutOrder"] = 10, ["Savable"] = true, ["InstanceType"] = "StringValue", ["DefaultInstanceValue"] = "Cyan", ["Requirement"] = "ESP|GeneratorsESP", ["ExtraData"] = { ["Options"] = "Cyan|Blue|Green|Orange|Purple|Gold", }, ["ScriptFunction"] = function(self, Value) local Name = "Generator(s)" local H, S, V = ColorPresets[Value]:ToHSV() local Color = ColorPresets[Value] local DarkerColor = Color3.fromHSV(H, S, V * 0.7) local ExtraSelected = {GetValue("GridSize",true),GetValue("AutoGeneratorPuzzle",true),GetValue("EnableOverride",true)} for i,v in FeatureLoadout["Visuals"] do if v["DisplayTitle"]:find(Name,1,true) then local ColoredName = RichTextGradientColor(Name,{Color,DarkerColor}) local FormattedName = Name:gsub("([%(%)])", "%%%1") local ColoredText = v["DisplayTitle"]:gsub(FormattedName, ColoredName, 1) if v["Instance"] then v["Instance"]:SetAttribute("DisplayTitle",ColoredText) else v["DisplayTitle"] = ColoredText end end end for i,v in ExtraSelected do local ColoredName = RichTextGradientColor(Name,{Color,DarkerColor}) local FormattedName = Name:gsub("([%(%)])", "%%%1") local CleanTitle = v:GetAttribute("DisplayTitle"):gsub("<[^>]->", "") local ColoredText = CleanTitle:gsub(FormattedName, ColoredName, 1) v:SetAttribute("DisplayTitle",ColoredText) end end }, ["GeneratorsCheck"] = { ["DisplayDescription"] = "Hides Generator(s) That are Completed (ESP)", ["DisplayTitle"] = "Hide Completed Generator(s)", ["LayoutOrder"] = 11, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = true, ["Requirement"] = "ESP|GeneratorsESP", ["ScriptFunction"] = function(self, Value) end }, ["ItemsESP"] = { ["DisplayDescription"] = "Enables ESP for the Item(s)", ["DisplayTitle"] = "Item(s) (ESP)", ["LayoutOrder"] = 12, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "ESP", ["ScriptFunction"] = function(self, Value) end }, ["ItemsColor"] = { ["DisplayDescription"] = "Select a Color for Item(s) (ESP)", ["DisplayTitle"] = "Item(s) Color", ["LayoutOrder"] = 13, ["Savable"] = true, ["InstanceType"] = "StringValue", ["DefaultInstanceValue"] = "Gold", ["Requirement"] = "ESP|ItemsESP", ["ExtraData"] = { ["Options"] = "Gold|Cyan|Purple|White", }, ["ScriptFunction"] = function(self, Value) local Name = "Item(s)" local H, S, V = ColorPresets[Value]:ToHSV() local Color = ColorPresets[Value] local DarkerColor = Color3.fromHSV(H, S, V * 0.7) for i,v in FeatureLoadout["Visuals"] do if v["DisplayTitle"]:find(Name,1,true) then local ColoredName = RichTextGradientColor(Name,{Color,DarkerColor}) local FormattedName = Name:gsub("([%(%)])", "%%%1") local ColoredText = v["DisplayTitle"]:gsub(FormattedName, ColoredName, 1) if v["Instance"] then v["Instance"]:SetAttribute("DisplayTitle",ColoredText) else v["DisplayTitle"] = ColoredText end end end GetValue("AutoPickup",true):SetAttribute("DisplayDescription",string.format("Auto-Picks up %s near you",RichTextGradientColor("Items",{Color,DarkerColor}))) end } }, ["Miscellaneous"] = { ["TabAttributes"] = { ["DisplayTitle"] = "Miscellaneous", ["LayoutOrder"] = 10 }, ["ExtendedFOV"] = { ["DisplayDescription"] = "A extended version of the FOV inside the normal settings", ["DisplayTitle"] = "Extended FOV", ["LayoutOrder"] = 1, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["FovSetting"] = PlayerData:FindFirstChild("FieldOfView",true) or PlayerData:FindFirstChild("FOV",true), ["DefaultInstanceValue"] = PlayerData:FindFirstChild("FieldOfView",true) and PlayerData:FindFirstChild("FieldOfView",true).Value or 70, ["ExtraData"] = { ["MaxValue"] = 120, ["MinValue"] = 10, ["Step"] = 5, }, ["ScriptFunction"] = function(self, Value) if self.FovSetting then self.FovSetting.Value = Value end end, ["CustomSetup"] = function(self) if self.FovSetting and self.FovSetting:IsA("NumberValue") then self.FovSetting:GetPropertyChangedSignal("Value"):Connect(function() self.Instance.Value = self.FovSetting.Value end) end end }, ["ExtendedZoom"] = { ["DisplayDescription"] = "Extends the Maximum Zoom Distance for the camera", ["DisplayTitle"] = "Extended Zoom Distance", ["LayoutOrder"] = 2, ["Savable"] = true, ["InstanceType"] = "NumberValue", ["DefaultInstanceValue"] = 10, ["ExtraData"] = { ["MaxValue"] = 100, ["MinValue"] = 0, ["Step"] = 5, }, ["ScriptFunction"] = function(self, Value) LocalPlayer.CameraMaxZoomDistance = game:GetService("StarterPlayer").CameraMaxZoomDistance + (Value * 0.25) end }, ["ShowChat"] = { ["DisplayDescription"] = "Shows the Full Chat while in the Round", ["DisplayTitle"] = "Show Chat", ["LayoutOrder"] = 3, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = not game:GetService("Chat"):CanUserChatAsync(LocalPlayer.UserId) and true or nil, ["ScriptFunction"] = function(self, Value) if not SideBar:GetAttribute("WasVisible") and TextChatService:FindFirstChildOfClass("ChatWindowConfiguration") then TextChatService:FindFirstChildOfClass("ChatWindowConfiguration").Enabled = Value end end, ["CustomSetup"] = function(self) if TextChatService:FindFirstChildOfClass("ChatWindowConfiguration") then TextChatService:FindFirstChildOfClass("ChatWindowConfiguration"):GetPropertyChangedSignal("Enabled"):Connect(function() if GetValue("ShowChat") then TextChatService:FindFirstChildOfClass("ChatWindowConfiguration").Enabled = true end end) end end }, ["ShowPrivacy"] = { ["DisplayDescription"] = "Shows everyones privacy info", ["DisplayTitle"] = "Shows Privacy Info", ["LayoutOrder"] = 4, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["HandlePrivacySettings"] = function(self,Player) if Player then local Data = Player:FindFirstChild("PlayerData") if Data then local PrivacySettings = Data:FindFirstChild("Privacy",true) if PrivacySettings then for i,v in PrivacySettings:GetChildren() do if not v:GetAttribute("OriginalValue") and v:IsA("BoolValue") then v:SetAttribute("OriginalValue", v.Value) v:GetPropertyChangedSignal("Value"):Connect(function() local ShowPrivacy = FeatureLoadout["Miscellaneous"]["ShowPrivacy"]["Instance"] if ShowPrivacy and ShowPrivacy.Value then v.Value = false else v.Value = v:GetAttribute("OriginalValue") end end) local ShowPrivacy = FeatureLoadout["Miscellaneous"]["ShowPrivacy"]["Instance"] if ShowPrivacy and ShowPrivacy.Value then v.Value = false else v.Value = v:GetAttribute("OriginalValue") end elseif v:IsA("BoolValue") then local ShowPrivacy = FeatureLoadout["Miscellaneous"]["ShowPrivacy"]["Instance"] if ShowPrivacy and ShowPrivacy.Value then v.Value = false else v.Value = v:GetAttribute("OriginalValue") end end end end end end end, ["HandleCheckForMod"] = function(self,Player) if not Player then return end if game.CreatorType ~= Enum.CreatorType.Group then return end local Rank = Player:GetRoleInGroupAsync(game.CreatorId) if Rank and (Rank:lower():find("mod") or Rank:lower():find("admin")) and not workspace:GetAttribute("ModFound") then workspace:SetAttribute("ModFound",true) StarterGui:SetCore("SendNotification",{ Title = "WARNING", Text = "A Moderator is in your server all features are now disabled", Icon = "rbxasset://textures/DevConsole/Warning.png", Duration = 10 }) FeatureLoadout["EnviromentFunctions"]["files"]["DefaultInstanceValue"] = true for i,v in FeatureLoadout do if i ~= "EnviromentFunctions" then if i ~= "TabAttributes" then for i2,v2 in v do if v2["Instance"] and i2 ~= "DisableAllFeatures" then v2["Instance"].Value = v2["DefaultInstanceValue"] end end end end end end end, ["ScriptFunction"] = function(self, Value) for i,v in Players:GetPlayers() do if v ~= LocalPlayer then self:HandlePrivacySettings(v) end end end, ["CustomSetup"] = function(self) task.spawn(function() for i,v in Players:GetPlayers() do if v ~= LocalPlayer then self:HandlePrivacySettings(v) self:HandleCheckForMod(v) end end end) Players.PlayerAdded:Connect(function(Player) self:HandleCheckForMod(Player) task.delay(2, function() self:HandlePrivacySettings(Player) end) end) end }, ["HideInjury"] = { ["DisplayDescription"] = "Hides the injured screen and effects used when you are low health", ["DisplayTitle"] = "Hide Injured UI/Effects", ["LayoutOrder"] = 5, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = true, ["ScriptFunction"] = function(self, Value) for i,v in TempUI and TempUI:QueryDescendants("#redFlash,#injuredVignette") or {} do v.Visible = not Value end if Lighting:FindFirstChild("HealthDesaturation") then Lighting:FindFirstChild("HealthDesaturation").Enabled = not Value end end, ["CustomSetup"] = function(self) Lighting.ChildAdded:Connect(function(Child) if Child.Name == "HealthDesaturation" then Child.Enabled = not GetValue("HideInjury") end end) if Lighting:FindFirstChild("HealthDesaturation") then Lighting.HealthDesaturation.Enabled = not GetValue("HideInjury") end end }, ["DisableBlindness"] = { ["DisplayDescription"] = "Disables the blindness effect", ["DisplayTitle"] = "Disable Blindness", ["LayoutOrder"] = 6, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = true, ["ScriptFunction"] = function(self, Value) for i,v in Lighting:QueryDescendants("#BlindnessBlur BlurEffect") do v.Enabled = not Value end end, ["CustomSetup"] = function(self) Lighting.ChildAdded:Connect(function(Child) if Child.Name == "BlindnessBlur" and Child:IsA("BlurEffect") then Child.Enabled = not GetValue("DisableBlindness") end end) if Lighting:FindFirstChild("BlindnessBlur") then Lighting:FindFirstChild("BlindnessBlur").Enabled = not GetValue("DisableBlindness") end end }, ["DeleteRagdolls"] = { ["DisplayDescription"] = "Deletes ALL Ragdolls regardless the type of ragdoll for performance", ["DisplayTitle"] = "Delete All Ragdolls", ["LayoutOrder"] = 7, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "PrivateServer", ["ScriptFunction"] = function(self, Value) if Value and RagdollsFolder then RagdollsFolder:ClearAllChildren() elseif not RagdollsFolder then self.Value = false self.Instance:SetAttribute("Requirement",true) end end, ["CustomSetup"] = function(self) if RagdollsFolder then RagdollsFolder.ChildAdded:Connect(function(Ragdoll) if GetValue("DeleteRagdolls") and GetValue("PrivateServer") then RagdollsFolder:ClearAllChildren() else for i,v in Ragdoll:QueryDescendants("Highlight[$Dynamic],BillboardGui[$Dynamic]") do v:Destroy() end end end) end end }, ["PlayerSelectCrash"] = { ["DisplayDescription"] = "Select a player to crash", ["DisplayTitle"] = "Player to crash", ["LayoutOrder"] = 8, ["Savable"] = false, ["InstanceType"] = "StringValue", ["DefaultInstanceValue"] = "None", ["Requirement"] = ReplicatedStorage:FindFirstChild("Nausea",true) and "PrivateServerOwner", ["UpdatePlayerCrashDrop"] = function(self) local OriginString = self.DefaultInstanceValue local CurrentPlayers = Players:GetPlayers() for i,v in CurrentPlayers do if v ~= LocalPlayer then OriginString ..= "|" .. v.Name end end local PlayerCount = #CurrentPlayers if PlayerCount == 3 then OriginString ..= "|Both" elseif PlayerCount > 3 then OriginString ..= "|Everyone" end if GetValue("PlayerSelectCrash",true) then GetValue("PlayerSelectCrash",true):SetAttribute("Options", OriginString) end if GetValue("PlayerSelectCrash") ~= self.DefaultInstanceValue and not Players:FindFirstChild(GetValue("PlayerSelectCrash")) then self.Instance.Value = self.DefaultInstanceValue end end, ["ExtraData"] = { ["Options"] = "None", }, ["CustomSetup"] = function(self) local function Upd() self:UpdatePlayerCrashDrop() end Players.PlayerAdded:Connect(Upd) Players.PlayerRemoving:Connect(Upd) task.delay(0.5,Upd) end }, ["CrashTheTarget"] = { ["DisplayDescription"] = "Crashes the selected target (Host Exclusive)", ["DisplayTitle"] = "Crash Target", ["LayoutOrder"] = 9, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = ReplicatedStorage:FindFirstChild("Nausea",true) and "PlayerSelectCrash~None|PrivateServerOwner", ["ScriptFunction"] = function(self, Value) if Value then self.Instance.Value = false local PlayerName = GetValue("PlayerSelectCrash") if PlayerName == "Everyone" or PlayerName == "Both" then for i,Player in Players:GetPlayers() do if Player ~= LocalPlayer then local Name = Player.Name task.spawn(function() repeat if GetValue("OfficialGame") then Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus", Name, "Nausea", math.huge, 1}) else Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus", Name, "Nausea", math.huge, 1}) Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand","GiveStatus", Name, "Nausea", math.huge, 1) end task.wait(1.5) until not Players:FindFirstChild(Name) end) end end else task.spawn(function() repeat if GetValue("OfficialGame") then Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus", PlayerName, "Nausea", math.huge, 1}) else Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus", PlayerName, "Nausea", math.huge, 1}) Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand","GiveStatus", PlayerName, "Nausea", math.huge, 1) end task.wait(1.5) until not Players:FindFirstChild(PlayerName) end) end end end }, ["SkyGlitch"] = { ["DisplayDescription"] = "Gives sky glitching effect to everyone (Host Exclusive)", ["DisplayTitle"] = "Sky Glitch", ["LayoutOrder"] = 10, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = ReplicatedStorage:FindFirstChild("Nausea",true) and "PrivateServerOwner", ["ScriptFunction"] = function(self, Value) if Value and not workspace:GetAttribute("EffectActive") then workspace:SetAttribute("EffectActive",true) self.Instance.Value = false if PlayerData:FindFirstChild("EpilepsyMode",true) and PlayerData:FindFirstChild("EpilepsyMode",true).Value then StarterGui:SetCore("SendNotification", { Title = "Warning", Text = "Disabled your Epilepsy Mode Temporarily for the effect to work", Duration = 5 }) PlayerData:FindFirstChild("EpilepsyMode",true).Value = false task.delay(10, function() PlayerData:FindFirstChild("EpilepsyMode",true).Value = true end) end if GetValue("OfficialGame") then Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus","All","Nausea",-1e11,10}) else Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus","All","Nausea",-1e11,10}) Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand","GiveStatus","All","Nausea",-1e11,10) end task.delay(10, function() workspace:SetAttribute("EffectActive",nil) self.Instance.Value = false end) elseif workspace:GetAttribute("EffectActive") then self.Instance.Value = true end end }, ["InstaKill"] = { ["DisplayDescription"] = "Allows you to instantly kill anyone (Host Exclusive)", ["DisplayTitle"] = "Instant Kill", ["LayoutOrder"] = 11, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = ReplicatedStorage:FindFirstChild("Weakness",true) and "PrivateServerOwner", ["ScriptFunction"] = function(self, Value) if workspace:GetAttribute("InstaKill") == nil then workspace:SetAttribute("InstaKill", Value) self.Instance.Value = Value task.delay(1.5, function() workspace:SetAttribute("InstaKill",nil) end) if Value then repeat if GetValue("OfficialGame") then Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus",LocalPlayer.Name,"Weakness",-1e11,2}) else Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus",LocalPlayer.Name,"Weakness",-1e11,2}) Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand","GiveStatus",LocalPlayer.Name,"Weakness",-1e11,2) end task.wait(1.25) until not self.Instance.Value end else self.Instance.Value = workspace:GetAttribute("InstaKill") end end }, ["DisableDamage"] = { ["DisplayDescription"] = "Disables dealing damage for everyone (Host Exclusive)", ["DisplayTitle"] = "Disable Damage", ["LayoutOrder"] = 12, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = ReplicatedStorage:FindFirstChild("Strength",true) and "PrivateServerOwner", ["ScriptFunction"] = function(self, Value) if workspace:GetAttribute("DisableDamage") == nil then workspace:SetAttribute("DisableDamage", Value) self.Instance.Value = Value task.delay(2.25, function() workspace:SetAttribute("DisableDamage",nil) end) if Value then repeat for i,v in Players:GetPlayers() do if v.UserId == LocalPlayer.UserId and GetValue("InstaKill") then continue end if GetValue("OfficialGame") then Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus",v.Name,"Strength",-1e11,2}) else Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus",v.Name,"Strength",-1e11,2}) Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand","GiveStatus",v.Name,"Strength",-1e11,2) end end task.wait(1.25) until not self.Instance.Value end else self.Instance.Value = workspace:GetAttribute("DisableDamage") end end }, ["DisableAbilityCooldown"] = { ["DisplayDescription"] = "Disables the ability cooldown only for you (Host Exclusive)", ["DisplayTitle"] = "Disable Ability Cooldown", ["LayoutOrder"] = 13, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = ReplicatedStorage:FindFirstChild("Fatigue",true) and "PrivateServerOwner" or true, ["ScriptFunction"] = function(self, Value) if workspace:GetAttribute("DisableAbilityCooldownSelf") == nil then workspace:SetAttribute("DisableAbilityCooldownSelf", Value) self.Instance.Value = Value task.delay(1.5, function() workspace:SetAttribute("DisableAbilityCooldownSelf",nil) end) if Value then repeat if GetValue("OfficialGame") then Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus",LocalPlayer.Name,"Fatigue",-1e8,2}) else Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand",{"GiveStatus",LocalPlayer.Name,"Fatigue",-1e8,2}) Network:WaitForChild("RemoteEvent"):FireServer("ExecuteCommand","GiveStatus",LocalPlayer.Name,"Fatigue",-1e8,2) end task.wait(1.25) until not self.Instance.Value end else self.Instance.Value = workspace:GetAttribute("DisableAbilityCooldownSelf") end end }, ["DisableAllFeatures"] = { ["DisplayDescription"] = "Disables all features when the script is outdated/not tested", ["DisplayTitle"] = "Disable Features When Outdated", ["LayoutOrder"] = 18, ["Savable"] = true, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "OfficialGame", ["ScriptFunction"] = function(self, Value) end }, ["OfficialJoin"] = { ["DisplayDescription"] = "Makes you join the official forsaken game", ["DisplayTitle"] = "Join the official version", ["LayoutOrder"] = 19, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["Requirement"] = "OfficialGame~true", ["ScriptFunction"] = function(self, Value) if Value and not workspace:GetAttribute("LoadingTeleport") then workspace:SetAttribute("LoadingTeleport",true) local A = workspace:FindFirstChild("Sounds") and workspace.Sounds:ClearAllChildren() local B = workspace:FindFirstChild("Themes") and workspace.Themes:ClearAllChildren() TeleportSound.TimePosition = 0.4 TeleportSound.Volume = 4 TeleportSound.Playing = true local OtherInstance = GetValue("Rejoin",true) OtherInstance:SetAttribute("Requirement",true) task.wait(0.5) local FrequencyData = HttpService:JSONDecode(ReturnData("AccountType.txt", true)) local PlaceId = 83645629621104 if FrequencyData["New"] and FrequencyData["New"] < FrequencyData["Normal"] then PlaceId = 18687417158 end game:GetService("ExperienceService"):LaunchExperience({placeId = PlaceId}) elseif workspace:GetAttribute("LoadingTeleport") then self.Instance.Value = true end end }, ["Rejoin"] = { ["DisplayDescription"] = "Makes you rejoin the exact same server", ["DisplayTitle"] = "Rejoin", ["LayoutOrder"] = 20, ["Savable"] = false, ["InstanceType"] = "BoolValue", ["DefaultInstanceValue"] = false, ["ScriptFunction"] = function(self, Value) if Value and not workspace:GetAttribute("LoadingTeleport") then workspace:SetAttribute("LoadingTeleport",true) local A = workspace:FindFirstChild("Sounds") and workspace.Sounds:ClearAllChildren() local B = workspace:FindFirstChild("Themes") and workspace.Themes:ClearAllChildren() TeleportSound.TimePosition = 0.4 TeleportSound.Volume = 4 TeleportSound.Playing = true local OtherInstance = GetValue("OfficialJoin",true) OtherInstance:SetAttribute("Requirement",true) task.wait(0.25) game:GetService("TeleportService").TeleportInitFailed:Once(function() workspace:SetAttribute("LoadingTeleport",nil) TeleportSound.Playing = false warn("Failed to teleport, please try again. (Rejoin manually if it repeats)") self.Instance.Value = false end) if workspace:GetAttribute("ServerType") == "VIP" then game:GetService("TeleportService"):Teleport(game.PlaceId) else game:GetService("TeleportService"):TeleportToPlaceInstance(game.PlaceId,game.JobId) end elseif workspace:GetAttribute("LoadingTeleport") then self.Instance.Value = true end end }, } } -- UI Creation -- MainUI.DisplayOrder = 5 PlusFolderSettings.Name = "Plus" PlusFolderSettings.Parent = PlayerData SidePlusButton.Name = "Plus" SidePlusButton.Parent = Buttons SidePlusButton.LayoutOrder = MainButton.Name == "Settings" and MainButton.LayoutOrder - 1 or MainButton.LayoutOrder + 1 if NewUIVersion then PlusButton:FindFirstChild("Icon").ImageColor3 = Color3.fromRGB(0, 170, 127) PlusButton:FindFirstChild("Icon").Image = "rbxassetid://118860705115878" PlusButton:FindFirstChild("Text"):FindFirstChild("Name").Text = "Plus" PlusButton:FindFirstChild("Line").ImageColor3 = Color3.fromRGB(0, 170, 127) PlusButton:FindFirstChild("Highlight").ImageColor3 = Color3.fromRGB(0, 170, 127) PlusButton:FindFirstChild("Text"):FindFirstChild("Name").TextColor3 = Color3.fromRGB(0, 170, 127) PlusButton:FindFirstChild("Texture").ImageColor3 = Color3.fromRGB(0, 170, 127) for i,v in PlusButton:FindFirstChild("Text"):GetChildren() do if v:IsA("ImageLabel") then v.ImageColor3 = Color3.fromRGB(0, 17, 13) end end PlusButton:FindFirstChild("BG").ImageColor3 = Color3.fromRGB(0, 17, 13) PlusButton:FindFirstChild("Grunge").ImageColor3 = Color3.fromRGB(0, 37, 24) PlusButton:FindFirstChild("Grunge").ImageTransparency = 0.2 PlusButton:FindFirstChild("GrungeMain").ImageTransparency = 1 UIScale.Parent = PlusButton else SidePlusButton.Button.ImageColor3 = Color3.fromRGB(0, 170, 127) SidePlusButton.Icon.ImageColor3 = Color3.fromRGB(0, 170, 127) SidePlusButton.Icon.Image = "rbxassetid://118860705115878" SidePlusButton.Inverted.ImageColor3 = Color3.fromRGB(105, 255, 212) SidePlusButton.Inverted.ImageTransparency = 1 SidePlusButton.InvertedIcon.ImageColor3 = Color3.fromRGB(105, 255, 212) SidePlusButton.InvertedIcon.Image = "rbxassetid://85001556314176" SidePlusButton.InvertedIcon.ImageTransparency = 1 PulloutFramePlus.Title.TextColor3 = Color3.fromRGB(0, 170, 127) PulloutFramePlus.Position = UDim2.fromScale(0,0.5) PulloutFramePlus.ArtAsset.ImageColor3 = Color3.fromRGB(0, 170, 127) PulloutFramePlus.Inverted.ImageColor3 = Color3.fromRGB(105, 255, 212) PulloutFramePlus.Inverted.ImageTransparency = 1 end local Arrow = ReplicatedStorage:FindFirstChild("DropdownArrow",true):Clone() Arrow.ImageColor3 = Color3.fromRGB(0, 170, 127) Arrow.Parent = SidePlusButton Arrow.Position = UDim2.fromScale(1.6,0.5) Arrow.AnchorPoint = Vector2.new(0.5,0.5) Arrow.Rotation = 90 Arrow.Size = UDim2.fromScale(0.67,0.67) Arrow.Visible = false Arrow.Active = false PlusMenu.Name = "PlusScreen" PlusMenu.Parent = MainUI PlusMenu.Visible = false PlusMenu.Size = UDim2.new(1,-20,0,0) PlusMenu.SettingsContainer.ImageColor3 = Color3.fromRGB(0, 170, 127) PlusMenu.SettingsContainer.BackgroundTransparency = 1 PlusMenu.SettingsContainer.Contents.ScrollBarImageColor3 = Color3.fromRGB(0, 170, 127) PlusMenu.SettingsContainer.Contents.Size = UDim2.fromScale(0.95,0.935) PlusMenu.SettingsContainer.Contents.Position = UDim2.fromScale(0.5,0.035) PlusMenu.ZIndex += 25 for i,v in PlusMenu.SettingsContainer:GetChildren() do if not (v:IsA("UIAspectRatioConstraint") or v.Name == "Contents") then v:Destroy() end end for i,v in PlusMenu.SettingsContainer.Contents:QueryDescendants("Frame,ImageLabel") do v:Destroy() end -- Functions -- function ColoredPrint(Text, Icon, Color) task.spawn(function() task.spawn(function() if not _G.Initialized and not _G.Initizalling then _G.Initizalling = true _G.PrintedData = {} local CoreGuiConnection local function Handle(child) if child.Name == "DevConsoleMaster" then CoreGuiConnection:Disconnect() local DevConsoleMaster = child local DevConsoleUI = DevConsoleMaster:FindFirstChild("DevConsoleUI",true) or DevConsoleMaster:WaitForChild("DevConsoleWindow",999999):WaitForChild("DevConsoleUI",999999) local IconData = { ["error"] = {"rbxasset://textures/DevConsole/Error.png","rbxassetid://97467062933153",Color3.fromRGB(215,90,74)}, ["information"] = {"rbxasset://textures/DevConsole/Info.png","rbxassetid://98895588220731",Color3.fromRGB(0,162,255)}, ["warning"] = {"rbxasset://textures/DevConsole/Warning.png","rbxassetid://129253285072281",Color3.fromRGB(255,218,68)}, ["plus"] = {"rbxassetid://127360009371476","rbxassetid://127360009371476",Color3.fromRGB(255,255,255)}, ["success"] = {"rbxassetid://75097763556603","rbxassetid://87889653826033",Color3.fromRGB(105,215,74)}, } local function GetIcon(Icon) if type(Icon) == "string" then local iconLower = Icon:lower() for i,v in pairs(IconData) do if string.lower(string.sub(i, 1, #iconLower)) == iconLower then return v end end end return IconData["information"] end local function RunChecks(ins) local Log = ins:FindFirstChild("ClientLog") local function RunChecks2(ins2,Log) local TextLabel = ins2:FindFirstChildWhichIsA("TextLabel") local Image = ins2:FindFirstChildWhichIsA("ImageLabel") if TextLabel then local function Update() local ID = string.sub(TextLabel.Text, -7, -1) if _G.PrintedData[ID] then local Data = _G.PrintedData[ID] local Icon = Data[1] or nil local Color = Data[2] or nil local ImageColored = false TextLabel.RichText = true if type(Icon) ~= type("") and typeof(Color) ~= typeof(Color3.new()) then Icon = GetIcon("info")[1] ImageColored = false Color = Color3.new(1,1,1) elseif type(Icon) == type("") and typeof(Color) ~= typeof(Color3.new()) then Color = GetIcon(Icon)[3] ImageColored = false Icon = GetIcon(Icon)[1] elseif type(Icon) ~= type("") and typeof(Color) == typeof(Color3.new()) then Icon = "" ImageColored = false elseif type(Icon) == type("") and typeof(Color) == typeof(Color3.new()) then ImageColored = true Icon = GetIcon(Icon)[2] end local OriginalText = TextLabel.Text local function Update2() TextLabel.Text = string.format("%s",Color:ToHex(),string.gsub(OriginalText,ID,"")) if Image then Image.Image = Icon if ImageColored then Image.ImageColor3 = Color end end end Update2() else Image.ImageColor3 = Color3.new(1,1,1) Image.Image = TextLabel.TextColor3 == Color3.fromRGB(255,218,68) and GetIcon("warning")[1] or TextLabel.TextColor3 == Color3.fromRGB(215,90,74) and GetIcon("error")[1] or TextLabel.TextColor3 == Color3.fromRGB(0,162,255) and GetIcon("info")[1] or "" end TextLabel:GetPropertyChangedSignal("Text"):Once(Update) end Update() end end if Log then for i,ins2 in pairs(Log:GetChildren()) do RunChecks2(ins2, Log) end Log.ChildAdded:Connect(function(ins2) RunChecks2(ins2, Log) end) end ins.ChildAdded:Connect(function(Log) if Log.Name == "ClientLog" then for i,ins2 in pairs(Log:GetChildren()) do RunChecks2(ins2, Log) end Log.ChildAdded:Connect(function(ins2) RunChecks2(ins2, Log) end) end end) end if DevConsoleUI:FindFirstChild("MainView") then RunChecks(DevConsoleUI:FindFirstChild("MainView")) end DevConsoleUI.ChildAdded:Connect(function(ins) if ins.Name == "MainView" then RunChecks(ins) end end) _G.Initialized = true _G.Initizalling = nil end end CoreGuiConnection = game:GetService("CoreGui").ChildAdded:Connect(Handle) if game:GetService("CoreGui"):FindFirstChild("DevConsoleMaster") then Handle(game:GetService("CoreGui"):FindFirstChild("DevConsoleMaster")) end end end) local UniqueID = string.sub(game:GetService("HttpService"):GenerateGUID(false), 1, 7) game:GetService("LogService"):Output((type(Text) == "string" and Text or "") .. UniqueID) _G.PrintedData[UniqueID] = {Icon,Color} end) end function PlaySound(SoundName,Settings,KeepPlaying) local Sound = typeof(SoundName) == "string" and AssetsFolder.Sounds:FindFirstChild(SoundName,true) or (typeof(SoundName) == "Instance" and SoundName) or nil if Sound then task.spawn(function() Sound = Sound:Clone() Sound.Parent = workspace:FindFirstChild("Sounds") or workspace if type(Settings) == "table" then for i,v in Settings do Sound[i] = v end end if KeepPlaying then Sound.Playing = true else Sound:Play() end Debris:AddItem(Sound, Sound.TimeLength + 1) return Sound end) else warn("Failed to play sound: ".. tostring(SoundName)) end end local function SetButtonState(Active) task.spawn(function() local u4 = {} local BGData = { ["Active"] = { ["ImageColor3"] = Color3.fromRGB(0, 170, 127) }, ["Inactive"] = { ["ImageColor3"] = Color3.fromRGB(0, 17, 13) } } u4.BG = BGData local GrungeMainData = { ["Active"] = { ["ImageColor3"] = Color3.fromRGB(0, 37, 24) }, ["Inactive"] = { ["ImageColor3"] = Color3.fromRGB(80, 80, 80) } } u4.GrungeMain = GrungeMainData local GrungeData = { ["Active"] = { ["ImageTransparency"] = 0, ["ImageColor3"] = Color3.fromRGB(0, 229, 171) }, ["Inactive"] = { ["ImageTransparency"] = 0.2, ["ImageColor3"] = Color3.fromRGB(0, 37, 24) } } u4.Grunge = GrungeData local HighlightData = { ["Active"] = { ["ImageColor3"] = Color3.fromRGB(0, 37, 24) }, ["Inactive"] = { ["ImageColor3"] = Color3.fromRGB(0, 170, 127) } } u4.Highlight = HighlightData local IconData = { ["Active"] = { ["ImageColor3"] = Color3.fromRGB(0, 37, 24) }, ["Inactive"] = { ["ImageColor3"] = Color3.fromRGB(0, 170, 127) } } u4.Icon = IconData local LineData = { ["Active"] = { ["ImageColor3"] = Color3.fromRGB(0, 37, 24) }, ["Inactive"] = { ["ImageColor3"] = Color3.fromRGB(0, 170, 127) } } u4.Line = LineData local TextLabelUI = PlusButton:FindFirstChild("Text") for i, Child in TextLabelUI and TextLabelUI:GetChildren() or {} do if Child:IsA("TextLabel") then TweenService:Create(Child, TweenInfo.new(0.25), { ["TextColor3"] = Active and Color3.fromRGB(0, 37, 24) or Color3.fromRGB(0, 170, 127) }):Play() elseif Child:IsA("ImageLabel") then TweenService:Create(Child, TweenInfo.new(0.25), { ["ImageColor3"] = Active and Color3.fromRGB(0, 170, 127) or Color3.fromRGB(0, 17, 13) }):Play() end end local v28 = Active and "Active" or "Inactive" for v29, v30 in u4 do local v31 = PlusButton:FindFirstChild(v29) if v31 then TweenService:Create(v31, TweenInfo.new(0.25), v30[v28]):Play() end end end) end function GetValue(FeatureName,InstanceOnly) local FeatureInstance = Values[FeatureName] if not FeatureInstance then FeatureInstance = PlusFolderSettings:FindFirstChild(FeatureName,true) Values[FeatureName] = FeatureInstance end if InstanceOnly then return FeatureInstance else return FeatureInstance and FeatureInstance.Value end end function GetFunction(Function1, Function2) return typeof(Function1) == "function" and Function1 or (typeof(Function2) == "function" and Function2) or nil end -- Patch 168: Always read the current ABH NumberValue from the settings folder. -- Some menu implementations can replace the NumberValue when a slider changes, -- which would leave the cached Values[] entry pointing at the old value. function GetCurrentHitboxAdjustment(FeatureName) local CurrentInstance = PlusFolderSettings and PlusFolderSettings:FindFirstChild(FeatureName, true) if CurrentInstance and CurrentInstance:IsA("NumberValue") then return tonumber(CurrentInstance.Value) or 0 end -- Never fall back to Values[] here: a replaced slider instance must not -- leave an old individual-killer ABH adjustment active. return 0 end function RichTextGradientColor(Text:string,Colors) local Count = 0 for Char in Text:gmatch(utf8.charpattern) do if Char ~= " " then Count += 1 end end if Count == 0 then return Text end local MaxIndex = math.max(1,Count-1) local Segments = #Colors-1 local Result,Used = "",0 for Char in Text:gmatch(utf8.charpattern) do if Char == " " then Result..=Char elseif Char:byte() >= 128 then else local T = Used/MaxIndex Used += 1 local Segment= math.min(math.floor(T*Segments),Segments-1) Result..=('%s'):format(Colors[Segment+1]:Lerp(Colors[Segment+2],T*Segments-Segment):ToHex(),Char) end end return Result end local function collidewith(gui1,gui2) local gui1_topLeft,gui1_bottomRight = gui1.AbsolutePosition, gui1.AbsolutePosition + gui1.AbsoluteSize local gui2_topLeft,gui2_bottomRight = gui2.AbsolutePosition, gui2.AbsolutePosition + gui2.AbsoluteSize return ((gui1_topLeft.x < gui2_bottomRight.x and gui1_bottomRight.x > gui2_topLeft.x) and (gui1_topLeft.y < gui2_bottomRight.y and gui1_bottomRight.y > gui2_topLeft.y)) end function TableValueFind(Table, MatchFn, Seen) if type(Table) ~= "table" or type(MatchFn) ~= "function" then return nil end Seen = Seen or {} if Seen[Table] then return nil end Seen[Table] = true for Key, Value in Table do if MatchFn(Key, Value) then return Value, Key, Table elseif type(Value) == "table" then local FoundValue, FoundKey, FoundParent = TableValueFind(Value, MatchFn, Seen) if FoundKey ~= nil then return FoundValue, FoundKey, FoundParent end end end return nil end function CanPlayOverrideAnim(Character) return Character and Character.Parent and GetValue("AnimationChanger") ~= "Original" and ((GetValue("ChangeInLobby") and Character.Parent.Name == "Spectating") or Character.Parent.Name ~= "Spectating") end function GetAnimationType(ID) for i,v in AllAnimations do for animtype,animId in v do if type(animId) == "table" then for i2,v2 in animId do if type(v2) == "string" and v2:find(tostring(ID)) then return animtype,i,i2 end end else if type(animId) == "string" and animId:find(tostring(ID)) then return animtype,i end end end end end local function AddOverridenAnimation(ID) if LocalCharacter and ID then if OverriddenAnimations[ID] then return table.unpack(OverriddenAnimations[ID]) end local OverrideFolder = LocalCharacter:FindFirstChild("OverrideAnimation") or Instance.new("Folder", LocalCharacter) OverrideFolder.Name = "OverrideAnimation" local AnimType,CharName = GetAnimationType(ID) or "Unknown" local Animation = Instance.new("Animation") Animation.Name = AnimType .. tostring(ID) Animation.AnimationId = tostring(ID):find("id") and tostring(ID) or "http://www.roblox.com/asset/?id=" .. tostring(ID) Animation.Parent = OverrideFolder Animation:SetAttribute("Overriden",true) if LocalAnimator then local Track = LocalAnimator:LoadAnimation(Animation) OverriddenAnimations[ID] = {Track,Animation} return Track,Animation end else return end end local SupportedOverrides = {"idle","walk","run"} function UpdateAnim(Humanoid) local AnimSelected = GetValue("AnimationChanger") if not CanPlayOverrideAnim(LocalCharacter) then return end local AnimString local Type if MainModule["IsSprinting"] and Humanoid.MoveDirection ~= Vector3.zero then AnimString = AllAnimations[AnimSelected] and AllAnimations[AnimSelected]["Run"] Type = "Run" elseif Humanoid.MoveDirection ~= Vector3.zero then AnimString = AllAnimations[AnimSelected] and AllAnimations[AnimSelected]["Walk"] Type = "Walk" else AnimString = AllAnimations[AnimSelected] and AllAnimations[AnimSelected]["Idle"] Type = "Idle" end if AnimString then local FoundAction = false for i,v in Humanoid:GetPlayingAnimationTracks() do if v.Animation and v.Animation:GetAttribute("Overriden") then v:Stop(0.2) continue end if not v.IsPlaying then continue end local AnimType,Char,Name = GetAnimationType(v.Animation.AnimationId) local IsSupported = false for i,v in SupportedOverrides do if AnimType and AnimType:lower():find(v:lower()) then IsSupported = true end end if not IsSupported then FoundAction = v end end local OverrideTrack,Animation = AddOverridenAnimation(AnimString) if OverrideTrack and CanPlayOverrideAnim(LocalCharacter) then OverrideTrack:Play(not FoundAction and 0.1 or 0.3) end end end function DefaultData(Path, Option) if isfile("NaikoScript/ForsakenPlus/" .. Path) then ColoredPrint("Option already exists", "info", Color3.fromRGB(252, 210, 150)) else writefile("NaikoScript/ForsakenPlus/" .. Path, Option) ColoredPrint("Set default data", "success", Color3.fromRGB(125, 230, 75)) end return end function ChangeData(Path, Option, WithFolder) if WithFolder == false then if isfile(Path) then writefile(Path,Option) end else if isfile("NaikoScript/ForsakenPlus/" .. Path) then writefile("NaikoScript/ForsakenPlus/" .. Path, Option) end end end function ReturnData(Path, WithFolder) if WithFolder == false then if isfile(Path) ~= false then return readfile(Path) end else if isfile("NaikoScript/ForsakenPlus/" .. Path) ~= false then return readfile("NaikoScript/ForsakenPlus/" .. Path) end return nil end end -- General Scripting -- if not (game.GameId == 6331902150 or game.GameId == 7464167604) then FeatureLoadout["Unofficial"] = { ["TabAttributes"] = { ["DisplayTitle"] = '⚠' .. RichTextGradientColor(" SOME FEATURES MAY NOT WORK HERE ",{Color3.fromRGB(255, 166, 0), Color3.fromRGB(243, 227, 0)}) .. '⚠', ["LayoutOrder"] = -1 } } ColoredPrint("This is not the official game which means some of the features may not work as expected.", "warning", Color3.fromRGB(255, 166, 0)) end FeatureLoadout["EnviromentFunctions"]["TabAttributes"]["DisplayTitle"] = string.format( "Script Made by %s | %s ", RichTextGradientColor("N‎aiko Sc‎ripts",{Color3.fromRGB(0, 255, 128),Color3.fromRGB(0, 102, 255)}), RichTextGradientColor("V"..Version,{Color3.fromRGB(87, 160, 255),Color3.fromRGB(0, 132, 255)}) ) -- Tryna edit something here?? i can see that... you ain taking that you know.. FeatureLoadout["Visuals"]["DisableNoliNPC"]["DisplayTitle"] = string.format("Disable %s NPC", RichTextGradientColor("Noli's",{Color3.fromRGB(130, 72, 255), Color3.fromRGB(77, 0, 185)})) FeatureLoadout["Visuals"]["Disable007n7NPC"]["DisplayTitle"] = string.format("Disable %s NPC", RichTextGradientColor("007n7's",{Color3.fromRGB(117, 161, 255), Color3.fromRGB(13, 70, 175)})) FeatureLoadout["Features"]["NoliControl"]["DisplayTitle"] = string.format("Better %s", RichTextGradientColor("Void Rush",{Color3.fromRGB(240, 90, 253), Color3.fromRGB(141, 0, 197)})) FeatureLoadout["Features"]["ControllableDash"]["DisplayTitle"] = string.format("Make %s Dash Controllable", RichTextGradientColor("Coolkidd's",{Color3.fromRGB(255, 22, 22), Color3.fromRGB(175, 13, 13)})) FeatureLoadout["Automation"]["AutoEscape"]["DisplayDescription"] = string.format("Auto-Escapes %s Hook",RichTextGradientColor("Nosferatu's",{Color3.fromRGB(192, 15, 24), Color3.fromRGB(108, 20, 9)})) FeatureLoadout["Automation"]["AutoDisarm"]["DisplayDescription"] = string.format("Auto-Disarms %s Traps",RichTextGradientColor("Azure's",{Color3.fromRGB(130, 72, 255), Color3.fromRGB(49, 0, 228)})) local ThreadBindable = Instance.new("BindableEvent") task.spawn(function() while task.wait(0.1) do ThreadBindable:Fire() end end) local InputDeviceType = {Keyboard = "PC", MouseButton1 = "PC", MouseButton2 = "PC", MouseMovement = "PC", Touch = "Mobile", Gamepad1 = "Console"} local Device = InputDeviceType[UserInputService:GetLastInputType().Name] local getgc = GetFunction(getgc, get_gc) local IsRequireSupported = false task.spawn(function() local generaltest,result = pcall(function() return require(LocalPlayer:FindFirstChildOfClass("PlayerScripts"):FindFirstChild("PlayerModule")) end) local s,Err = pcall(function() LogService:Info("",result) end) local Success,Result if tostring(Err):find("cyclic") or s then if s then --ColoredPrint("Require does not function completely correctly some features could bug out!","warn", Color3.new(1,0.25,0)) end if Device == "PC" then Success, Result = pcall(function() local Module = require(ReplicatedStorage:WaitForChild("Systems",4):WaitForChild("Character",4):WaitForChild("Game",4):WaitForChild("Sprinting",4)) if Module and type(Module) == "table" and Module["StaminaChanged"] then IsRequireSupported = true return Module end end) else Success, Result = pcall(function() for i,Object in getgc(true) do if type(Object) == "table" then if rawget(Object, "Stamina") and rawget(Object, "StaminaChanged") then return Object end end end end) end end if not (Success and type(Result) == "table") then FeatureLoadout["EnviromentFunctions"]["require"]["DefaultInstanceValue"] = false else IsRequireSupported = true MainModule = Result end local AnimationPreset = FeatureLoadout["Features"]["AnimationChanger"] if IsRequireSupported and KillerAssets and SurvivorAssets and SkinsAssets then if ReplicatedStorage:FindFirstChild("Modules") and ReplicatedStorage:FindFirstChild("Modules"):FindFirstChild("Util",true) then --UtilModule = require(ReplicatedStorage:FindFirstChild("Modules"):FindFirstChild("Util",true)) end local AllAssets = {} for i,v in KillerAssets:QueryDescendants("ModuleScript#Config") do table.insert(AllAssets,v) end for i,v in SurvivorAssets:QueryDescendants("ModuleScript#Config") do table.insert(AllAssets,v) end for i,v in SkinsAssets:QueryDescendants("ModuleScript#Config") do table.insert(AllAssets,v) end for i,ConfigModule in AllAssets do if ConfigModule.Parent:IsA("Model") then continue end local ConfigData = require(ConfigModule) local AnimationData = ConfigData and ConfigData.Animations if ConfigModule.Parent.Name == "Noli" and ConfigData and TableValueFind(ConfigData, function(Key, Value) return type(Key) == "string" and Key:find("InitialTurnMult") end) then NoliConfig = ConfigData end if ConfigModule.Parent.Name == "TwoTime" and AnimationData and TableValueFind(AnimationData, function(Key, Value) return type(Key) == "string" and Key:find("CrouchIdle") end) then AllAnimations["Crouch"] = {["Idle"] = AnimationData["CrouchIdle"],["Walk"] = AnimationData["CrouchWalk"],["Run"] = AnimationData["CrouchRun"]} end if ConfigModule.Parent.Name == "1x1x1x1" and AnimationData and TableValueFind(ConfigData, function(Key, Value) return type(Key) == "string" and Key:find("ZombieAnimations") end) then AllAnimations["NPC Zombie"] = TableValueFind(ConfigData, function(Key, Value) return type(Key) == "string" and Key:find("ZombieAnimations") end) end if not AnimationData or not ConfigData.DisplayName then continue end local ChosenName = ConfigData.DisplayName:find("Milestone") and string.format("%s %s",ConfigModule.Parent.Parent.Name,ConfigData.DisplayName:gsub("Milestone ","")) or ConfigData.DisplayName AllAnimations[ChosenName] = AnimationData end for i,v in string.split(AnimationPreset["ExtraData"]["Options"], "|") do if v ~= "Original" then if not AllAnimations[v] or not AllAnimations[v]["Idle"] then AnimationPreset["ExtraData"]["Options"] = AnimationPreset["ExtraData"]["Options"]:gsub("|" .. v, "") end end end if AnimationPreset["ExtraData"]["Options"]:gsub("|Default Roblox","") == "Original" then AnimationPreset["Requirement"] = true end --[[if UtilModule then local AllPlayersSideUI = MainUI:FindFirstChild(LocalPlayer.Name,true) and MainUI:FindFirstChild(LocalPlayer.Name,true).Parent local function HandlePlayerForUI(Player) if AllPlayersSideUI:FindFirstChild(Player.Name) then local PlayersUI = AllPlayersSideUI:FindFirstChild(Player.Name) local PlayersData = Player:FindFirstChild("PlayerData") local Settings = PlayersData and PlayersData:FindFirstChild("Settings") local Pron = Settings and Settings:FindFirstChild("Pronouns",true) if Pron and Pron.Value == "discord.gg/Fs47aNrdGF" then local NoChat = PlayersUI:FindFirstChild("NoChat") if NoChat then NoChat.Visible = false end local ClonedUI = ReplicatedStorage:FindFirstChild("NoChat",true) and ReplicatedStorage:FindFirstChild("NoChat",true):Clone() if ClonedUI then ClonedUI.Name = "FSUser" ClonedUI.Image = "rbxassetid://118860705115878" ClonedUI.Parent = PlayersUI ClonedUI.Visible = true ClonedUI.AnchorPoint = Vector2.new(0.5,0.425) ClonedUI.MouseEnter:Connect(function() UtilModule:CreateTooltip("This is a Forsaken Plus user.") end) ClonedUI.MouseLeave:Connect(function() UtilModule:CreateTooltip("") end) if ClonedUI:FindFirstChildOfClass("UIAspectRatioConstraint") then ClonedUI:FindFirstChildOfClass("UIAspectRatioConstraint").AspectRatio = 1 end end end end end if AllPlayersSideUI then for i,v in Players:GetPlayers() do HandlePlayerForUI(v) end Players.PlayerAdded:Connect(function(v) task.delay(1.5,function() HandlePlayerForUI(v) end) end) else ColoredPrint("Failed to find PlayerList UI","error") end end]] else AnimationPreset["Requirement"] = true end if not NoliConfig then FeatureLoadout["Features"]["NoliControl"]["Requirement"] = true end end) local SupportedOverrides = {"idle","walk","run"} local function StartSprintDetection() repeat task.wait(0.1) until MainModule["__sprintedEvent"] MainModule["__sprintedEvent"].Event:Connect(function() if GetValue("AnimationChanger") ~= "Original" then UpdateAnim(LocalHumanoid) end end) MainModule["__sprintedEvent"].Destroying:Once(function() StartSprintDetection() end) end if MainModule then task.spawn(StartSprintDetection) end local function ActionOnCharacter(Character) LocalCharacter = Character LocalHumanoid = LocalCharacter and (LocalCharacter:FindFirstChildOfClass("Humanoid") or LocalCharacter:WaitForChild("Humanoid",2)) or nil LocalHead = LocalCharacter and (LocalCharacter:FindFirstChild("Head") or LocalCharacter:WaitForChild("Head",2)) or nil LocalRoot = LocalCharacter and ((LocalHumanoid and LocalHumanoid.RootPart) or LocalCharacter:FindFirstChild("HumanoidRootPart") or LocalCharacter:WaitForChild("HumanoidRootPart",2)) or nil LocalAnimator = LocalHumanoid and (LocalHumanoid:FindFirstChildOfClass("Animator") or LocalHumanoid:WaitForChild("Animator",2)) or nil SpeedMultipliers = LocalCharacter and (Character:FindFirstChild("SpeedMultipliers") or Character:WaitForChild("SpeedMultipliers",5)) or nil ResistanceMultipliers = LocalCharacter and (Character:FindFirstChild("ResistanceMultipliers") or Character:WaitForChild("ResistanceMultipliers",5)) or nil FOVMultipliers = LocalCharacter and (Character:FindFirstChild("FOVMultipliers") or Character:WaitForChild("FOVMultipliers",5)) or nil task.spawn(function() SetButtonState(false) OverriddenAnimations = {} LastAnimOriginalUsed = LocalAnimator:GetPlayingAnimationTracks()[1] LocalAnimator.AnimationPlayed:Connect(function(Track) if CanPlayOverrideAnim(LocalCharacter) and MainModule then local Override = Track.Animation:GetAttribute("Overriden") if Override then --return end LastAnimOriginalUsed = not Override and Track or LastAnimOriginalUsed local AnimType,CharName = GetAnimationType(tonumber(Track.Animation.AnimationId:match("%d+"))) if not Override then for i,v in SupportedOverrides do if AnimType and AnimType:lower():find(v:lower()) then Track:Stop(0) elseif not AnimType and Track.Looped then Track:Stop(0) end end end local FoundAction = false for i,v in LocalAnimator:GetPlayingAnimationTracks() do task.spawn(function() local AnimType,Char,Name = GetAnimationType(v.Animation.AnimationId) local IsSupported = false for i,v in SupportedOverrides do if AnimType and AnimType:lower():find(v:lower()) then IsSupported = true end end if v.IsPlaying and not IsSupported and not v:GetAttribute("Ignored") then FoundAction = v end end) end if FoundAction and Override then Track:Stop(0.2) task.wait(not FoundAction.Looped and FoundAction.Length * 0.95 or 0) if FoundAction.Looped then FoundAction.Stopped:Wait() end FoundAction:SetAttribute("Ignored",true) task.delay(0.2,function() FoundAction:SetAttribute("Ignored",nil) end) UpdateAnim(LocalHumanoid) end end end) local MoreThanZero = 0 LocalHumanoid:GetPropertyChangedSignal("MoveDirection"):Connect(function() if GetValue("AnimationChanger") ~= "Original" and MoreThanZero ~= (LocalHumanoid.MoveDirection.Magnitude == 0) then MoreThanZero = (LocalHumanoid.MoveDirection.Magnitude == 0) UpdateAnim(LocalHumanoid) end end) task.delay(0.05,UpdateAnim,LocalHumanoid) end) end if not MainModule then ColoredPrint("Failed to load required modules, some features may be hidden.\n use a different executor that supports 'require' and 'getgc'", "warn", Color3.new(1,0.25,0)) FeatureLoadout["EnviromentFunctions"]["getgc"]["DefaultInstanceValue"] = false end if FeatureLoadout["EnviromentFunctions"]["getgc"]["DefaultInstanceValue"] then task.spawn(function() if game.GameId ~= 6331902150 then task.wait(0.5) if IsRequireSupported then for i,v in getgc(true) do if type(v) == type({}) then if not rawget(v,"Idle") or not rawget(v,"Run") then if i%250 == 0 then task.wait() end continue end local num = 0 for i,v in v do num += 1 end if num > 3 then AllAnimations[HttpService:GenerateGUID(false):sub(1,5)] = v end end end end end end) end --local readfile = GetFunction(readfile, read_file) --local writefile = GetFunction(writefile, write_file) --local isfolder = GetFunction(isfolder, is_folder) --local isfile = GetFunction(isfile, is_file) --local makefolder = GetFunction(makefolder, make_folder) local UserType = 1 if not (readfile and writefile and isfolder and isfile) then FeatureLoadout["EnviromentFunctions"]["files"]["DefaultInstanceValue"] = false else if not isfolder("NaikoScript") and not isfolder("NaikoScript/ForsakenPlus") then makefolder("NaikoScript") makefolder("NaikoScript/ForsakenPlus") UserType = 1 elseif isfolder("NaikoScript") and not isfolder("NaikoScript/ForsakenPlus") then UserType = 2 makefolder("NaikoScript/ForsakenPlus") elseif isfolder("NaikoScript") and isfolder("NaikoScript/ForsakenPlus") then UserType = 3 end DefaultData("Data.txt", "{}") DefaultData("AccountType.txt","{}") makefolder("NaikoScript/ForsakenPlus/Plugins") end if UserType < 3 then task.spawn(function() Arrow.Visible = true local MovingTween = TweenService:Create(Arrow, TweenInfo.new(0.6, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true), {Position = UDim2.fromScale(1.4, 0.5)}) MovingTween:Play() SidePlusButton.Button.MouseEnter:Wait() local DisappearTween = TweenService:Create(Arrow, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = UDim2.fromScale(1.6, 0.5),Size = UDim2.fromScale(0.2, 0.2),ImageTransparency = 1}) MovingTween:Pause() MovingTween:Cancel() DisappearTween:Play() DisappearTween.Completed:Wait() Arrow.Visible = false end) end local hookmetamethod = GetFunction(hookmetamethod, hook_metamethod) if not hookmetamethod then FeatureLoadout["EnviromentFunctions"]["hookmetamethod"]["DefaultInstanceValue"] = false end if GetValue("OfficialGame") then task.spawn(function() local FrequencyData = HttpService:JSONDecode(ReturnData("AccountType.txt", true)) FrequencyData["Normal"] = FrequencyData["Normal"] or 0 FrequencyData["New"] = FrequencyData["New"] or 0 ChangeData("AccountType.txt",HttpService:JSONEncode(FrequencyData),true) if GetValue("PrivateServer") then return end for i,v in Players:GetPlayers() do if v:IsFriendsWithAsync(LocalPlayer.UserId) then return end end if UserType < 3 then task.wait(26) if PlayerGui:FindFirstChild("LoadingGui") then return end if game.PlaceId ~= 83645629621104 then FrequencyData["Normal"] = 3 else FrequencyData["New"] = 5 end else task.wait(18) if PlayerGui:FindFirstChild("LoadingGui") then return end if game.PlaceId ~= 83645629621104 then FrequencyData["Normal"] += 2 FrequencyData["New"] -= 1 else FrequencyData["New"] += 2 FrequencyData["Normal"] -= 1 end end ChangeData("AccountType.txt",HttpService:JSONEncode(FrequencyData),true) end) end task.spawn(function() local AzureQTE = KillerAssets and KillerAssets:FindFirstChild("Azure") and KillerAssets:FindFirstChild("Azure"):FindFirstChild("cl_ConstructQTE",true) if IsRequireSupported and AzureQTE then local RequiredModule = require(AzureQTE) task.delay(1,function() local origin;origin = hookfunction(RequiredModule.new,function(...) local QTEAzure = origin(...) task.delay(0.05,function() if typeof(QTEAzure) == "table" and QTEAzure.AddProgress then if GetValue("AutoDisarm") then QTEAzure:AddProgress(100) else CurrentQTEAzure = QTEAzure end else warn("Failed Doing QTE For Azure") end end) return QTEAzure end) end) end end) LocalPlayer.CharacterAdded:Connect(ActionOnCharacter) ActionOnCharacter(LocalCharacter or LocalPlayer.Character) TeleportSound = Instance.new("Sound") TeleportSound.Name = "TeleportSound" TeleportSound.SoundId = "rbxassetid://130359426691991" TeleportSound.Parent = CoreGui TeleportSound.Volume = 0.001 TeleportSound:Play() local fireproximitypromptFunction = GetFunction(fireproximityprompt, fire_proximity_prompt) local fireprompt = fireproximitypromptFunction and function(ProximityPrompt) return ProximityPrompt and fireproximitypromptFunction(ProximityPrompt) end or function(ProximityPrompt) if ProximityPrompt then ProximityPrompt:InputHoldBegin();ProximityPrompt:InputHoldEnd() end end RoundEvent.Event:Connect(function(Data) IsUnderground = false end) local Graf2 = workspace:FindFirstChild("Graf2",true) if Graf2 and math.round(Graf2.Position.X) == -3600 and Graf2:FindFirstChildWhichIsA("ImageLabel",true) then Graf2.Position = Vector3.new(-3600, 19.25, 232.5) Graf2.Size = Vector3.new(4.25, 1.5, 0.13) Graf2.Rotation = Vector3.new(7, 90, 0) Graf2:FindFirstChildWhichIsA("ImageLabel",true).Image = "rbxassetid://86461599034861" Graf2:FindFirstChildWhichIsA("ImageLabel",true).ImageTransparency = 0.2 end local BaseTweenInfo = TweenInfo.new(0.25) local MenuData if NewUIVersion then local suc,err if IsRequireSupported then suc,err = pcall(function() MenuData = require(ReplicatedStorage.Systems.Player:FindFirstChild("SidebarHandler",true)) end) end if not suc or not MenuData then ColoredPrint('\n\n⚠ YOUR EXECUTOR DOES NOT SUPPORT THIS SCRIPT ⚠\n\n Switch to a different executor or play a forsaken clone game that uses the V1 UI.\n The executor must fully support "require" function for the script to work here\n', "error", Color3.new(1,0.4,0.25)) SidePlusButton:Destroy() PlusMenu:Destroy() StarterGui:SetCore("DevConsoleVisible", true) if MainUI:FindFirstChild("UpdateScreen") then MainUI:FindFirstChild("UpdateScreen").Visible = false end return end MenuData.__index = MenuData local UICreator = {} UICreator.__index = UICreator function UICreator.new(MenuName, MenuScreen) local Metaverse = setmetatable({}, UICreator) Metaverse.Menu = MenuScreen:Clone() local MenuToggleBin = Instance.new("BindableEvent") Metaverse.Toggled = MenuToggleBin Metaverse.Button = nil Metaverse.MenuName = MenuName Metaverse.Menu.Visible = false Metaverse.Menu.Size = UDim2.fromScale() Metaverse.Menu.Parent = MainUI for i,v in Metaverse.Menu:QueryDescendants("ScrollingFrame") do v:GetPropertyChangedSignal("AbsoluteSize"):Connect(function() v.ScrollBarThickness = v.AbsoluteSize.X / 44 end) end return Metaverse end function UICreator.ToggleMenu(selfdata) local DataSideBar = selfdata._sidebar if DataSideBar.TogglingMenus then return elseif DataSideBar.MenusHidden and selfdata.SidebarButton then return elseif not (false and selfdata.Menu.Visible) then DataSideBar.TogglingMenus = true local VisibleUI = selfdata.Menu.Visible PlaySound("select") local SideBarMenu for i, v in DataSideBar.SidebarMenus do if v.Menu ~= selfdata.Menu or VisibleUI then if v.Menu ~= selfdata.Menu then if v.Menu.Visible then SideBarMenu = v end end if v.Menu.Visible then v.Toggled:Fire(false) local UIModule = ReplicatedStorage.Systems.Player.UI.Menus:FindFirstChild(v.MenuName) local success, result = pcall(require, UIModule) if success and (result and result.OnTransitionState) then result.OnTransitionState(false) else TweenService:Create(v.Menu, BaseTweenInfo, { ["Size"] = UDim2.new(1, -20, 0, 0) }):Play() task.delay(0.25, function() v.Menu.Visible = false end) end SetButtonState(false) if v.Button then v.Button:SetAppearanceState(false) end end end end task.delay(0.3 + (SideBarMenu and 0.125 or 0), function() DataSideBar.TogglingMenus = nil end) if SideBarMenu then task.wait(0.125) if DataSideBar.MenusHidden then DataSideBar.TogglingMenus = nil return end end if not VisibleUI then selfdata.Toggled:Fire(true) local UIModule = ReplicatedStorage.Systems.Player.UI.Menus:FindFirstChild(selfdata.MenuName) local success, result = pcall(require, UIModule) if success and (result and result.OnTransitionState) then result.OnTransitionState(true) else selfdata.Menu.Visible = true TweenService:Create(selfdata.Menu, BaseTweenInfo, { ["Size"] = UDim2.new(1, -20, 1, -20) }):Play() end SetButtonState(true) if selfdata.Button then selfdata.Button:SetAppearanceState(true) end end end end function MenuData.CreateSidebarMenu(self, MenuName, MenuScreen) local Data = UICreator.new(MenuName, MenuScreen) Data._sidebar = self Data.SidebarButton = Buttons:FindFirstChild(MenuName) task.delay(0, function() Data.Button = MenuData.SidebarButtons[MenuName] end) MenuData.SidebarMenus[MenuName] = Data return Data end else MenuData = { ["SidebarMenus"] = {}, ["Sidebars"] = { ["Sidebar"] = MainUI.Sidebar, ["Bottombar"] = MainUI.Sidebar:FindFirstChild("Bottombar") or nil } } MenuData.__index = MenuData function MenuData.CreateSidebarMenu(self, ButtonName, Menu, Bottom) local Data = setmetatable({}, MenuData) Data.Menu = Menu Data.Menu.Visible = false Data.Menu.Size = UDim2.fromScale() Data.Menu.Parent = MainUI Data.SidebarButton = Buttons:FindFirstChild(ButtonName) local BindableEvent = Instance.new("BindableEvent") BindableEvent.Parent = Data.Menu Data.Toggled = BindableEvent.Event Data.__toggleEvent = BindableEvent for i,v in pairs(Data.Menu:QueryDescendants("ScrollingFrame")) do v:GetPropertyChangedSignal("AbsoluteSize"):Connect(function() v.ScrollBarThickness = v.AbsoluteSize.X / 44 end) end self.SidebarMenus[ButtonName] = Data return Data end function MenuData.ToggleMenu(UIData, p24) if MenuData.TogglingMenus then return elseif MenuData.MenusHidden and UIData.SidebarButton then return elseif not (p24 and UIData.Menu.Visible) then MenuData.TogglingMenus = true PlaySound("select") local Visible = UIData.Menu.Visible for i,v in SideBar:QueryDescendants(`#{Buttons.Name} > Frame:not(#Credits):not(#Spectate):not(#Plus):not(#TesterUi)`) do v.Button.Interactable = false task.delay(0.3, function() v.Button.Interactable = true end) end for i,Menu in pairs(MenuData.SidebarMenus) do if Menu.Menu ~= UIData.Menu or Visible then if Menu.Menu.Visible then Menu.__toggleEvent:Fire(false) TweenService:Create(Menu.Menu, BaseTweenInfo, {["Size"] = UDim2.new(1, -20, 0, 0)}):Play() if Menu.SidebarButton then TweenService:Create(Menu.SidebarButton.Inverted, BaseTweenInfo, {["ImageTransparency"] = 1}):Play() TweenService:Create(Menu.SidebarButton.InvertedIcon, BaseTweenInfo, {["ImageTransparency"] = 1}):Play() TweenService:Create(Menu.SidebarButton.PulloutHolder.PulloutFrame.Inverted, BaseTweenInfo, {["ImageTransparency"] = 1}):Play() TweenService:Create(Menu.SidebarButton.PulloutHolder.PulloutFrame.Title, BaseTweenInfo, { ["TextColor3"] = Menu.Menu.Name == "PlusScreen" and Color3.fromRGB(0, 170, 127) or Color3.new(1,1,1) }):Play() end task.delay(0.25, function() Menu.Menu.Visible = false end) end end end task.delay(0.3, function() MenuData.TogglingMenus = nil end) if MenuData.MenusHidden then return end if not Visible then UIData.__toggleEvent:Fire(true) UIData.Menu.Visible = true TweenService:Create(UIData.Menu, BaseTweenInfo, {["Size"] = UDim2.new(1, -20, 1, -20)}):Play() if UIData.SidebarButton then TweenService:Create(UIData.SidebarButton.Inverted, BaseTweenInfo, {["ImageTransparency"] = 0}):Play() TweenService:Create(UIData.SidebarButton.InvertedIcon, BaseTweenInfo, {["ImageTransparency"] = 0}):Play() TweenService:Create(UIData.SidebarButton.PulloutHolder.PulloutFrame.Inverted, BaseTweenInfo, {["ImageTransparency"] = 0}):Play() TweenService:Create(UIData.SidebarButton.PulloutHolder.PulloutFrame.Title, BaseTweenInfo, {["TextColor3"] = Color3.new()}):Play() end end end end end ModulesOptions = { ["Textbox"] = [=[ local u1 = {} u1.__index = u1 local PlaySound = ({...})[1] function u1.CreateSettingUI(_, u2, p3, u4) if not u2 then u2 = Instance.new("StringValue") u2.Name = "SettingValue" end local v6 = u1 local u7 = setmetatable({ ["SettingValue"] = u2 }, v6) u7.Value = u2.Value u7.Instance = p3 or game:GetService("ReplicatedStorage").Systems.Player.UI.Menus.Settings.Templates.Textbox.Textbox:Clone() u7.Instance.TextboxBackground.Textbox.Focused:Connect(function() PlaySound("click") end) u7.Instance.TextboxBackground.Textbox.FocusLost:Connect(function() if u2.Name == "SettingValue" or u2.Name == "Value" then u7.Value = u7.Instance.TextboxBackground.Textbox.Text u7:OnUpdate() if u4 then u4(u7.Value) end else u2.Value = u7.Instance.TextboxBackground.Textbox.Text end PlaySound("click") end) return u7 end function u1.OnUpdate(p8) p8.Instance.TextboxBackground.Textbox.Text = p8.Value or "" end return u1 ]=], ["String"] = [=[ local u1 = {} u1.__index = u1 local u2 = 200 local PlaySound = ({...})[1] function u1.CreateSettingUI(_, u3, p4, u5) if not u3 then u3 = Instance.new("StringValue") u3.Name = "SettingValue" end local v7 = u1 local u8 = setmetatable({ ["SettingValue"] = u3 }, v7) u8.Value = u3.Value u8.Instance = p4 or game:GetService("ReplicatedStorage").Systems.Player.UI.Menus.Settings.Templates.String.Dropdown:Clone() u8.DropdownVisible = false local UIListLayout = u8.Instance.DropdownFrame.Options:FindFirstChildOfClass("UIListLayout") or Instance.new("UIListLayout") UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout.Parent = u8.Instance.DropdownFrame.Options u8.Instance.DropdownFrame.MouseButton1Click:Connect(function() PlaySound("click") local MainZIndex = u8.Instance.LayoutOrder u8.DropdownVisible = not u8.DropdownVisible u8.Instance.DropdownFrame.DropdownArrow.Rotation = u8.DropdownVisible and 180 or 0 u8.Instance.DropdownFrame.Options.Visible = u8.DropdownVisible u8.Instance.ZIndex = 50000 - (MainZIndex * 2) for i, v9 in pairs(u8.Instance.DropdownFrame.Options:GetChildren()) do if v9:IsA("GuiObject") then v9:Destroy() end end local function Update() local v10 = u3:GetAttribute("Options") if v10 then v10 = string.split(u3:GetAttribute("Options"), "|") end for i, v9 in pairs(u8.Instance.DropdownFrame.Options:GetChildren()) do if v9:IsA("GuiObject") then v9:Destroy() end end for v11, u12 in pairs(v10 or {}) do local v13 = game:GetService("ReplicatedStorage").Systems.Player.UI.Menus.Settings.Templates.String.DropdownOption:Clone() v13.Name = u12 v13.LayoutOrder = v11 v13.Title.Text = v13.Name v13.Parent = u8.Instance.DropdownFrame.Options v13.MouseButton1Click:Connect(function() if u3.Name == "SettingValue" or u3.Name == "Value" then u8.Value = u12 u8:OnUpdate() if u5 then u5(u8.Value) end else u3.Value = u12 end PlaySound("switch0".. tostring(math.random(1,4))) end) end end Update() u3:GetAttributeChangedSignal("Options"):Connect(Update) end) return u8 end function u1.OnUpdate(p14) p14.Instance.DropdownFrame.ChosenValue.Title.Text = p14.Value p14.Instance.DropdownFrame.Options.Visible = false p14.Instance.DropdownFrame.DropdownArrow.Rotation = 0 p14.DropdownVisible = false end return u1 ]=], ["Number"] = [=[ local u1 = {} u1.__index = u1 local PlaySound = ({...})[1] function u1.CreateSettingUI(_, u2, p3, u4) if not u2 then u2 = Instance.new("NumberValue") u2.Name = "SettingValue" end local v6 = u1 local u7 = setmetatable({ ["SettingValue"] = u2 }, v6) u7.Instance = p3 or game:GetService("ReplicatedStorage").Systems.Player.UI.Menus.Settings.Templates.Number.Slider:Clone() u7.Value = u2.Value local u8 = u7.Instance.DragBar local u9 = u8.Dragger local u10 = game.Players.LocalPlayer:GetMouse() local u11 = u2:GetAttribute("MinValue") u2:GetAttributeChangedSignal("MinValue"):Connect(function() u11 = u2:GetAttribute("MinValue") end) local u12 = u2:GetAttribute("MaxValue") u2:GetAttributeChangedSignal("MaxValue"):Connect(function() u12 = u2:GetAttribute("MaxValue") end) local u13 = u2:GetAttribute("Step") u2:GetAttributeChangedSignal("Step"):Connect(function() u13 = u2:GetAttribute("Step") end) u7.__displayValue = Instance.new("NumberValue") u7.__displayValue.Name = "__displayValue" u7.__displayValue.Value = u2.Value u7.__displayValue.Parent = u7.Instance u7.__displayValue:GetPropertyChangedSignal("Value"):Connect(function() local v14 = u9.Title local v15 = u7.__displayValue.Value local v16 = tonumber(string.format("%.10g", math.floor((v15/u13) + 0.5) * u13)) v14.Text = v16 end) local v17 = u9.Title local v18 = u7.__displayValue.Value local v19 = tonumber(string.format("%.10g", math.floor((v18/u13) + 0.5) * u13)) v17.Text = tostring(v19) u9.MouseButton1Down:Connect(function() u7.Dragging = true PlaySound("switch0" .. tostring(math.random(1, 4))) while task.wait() and u7.Dragging do local v20 = u10.X local v21 = u8.AbsoluteSize.X local v22 = (v20 - u8.AbsolutePosition.X) / v21 local v23 = u11 local v24 = u12 local v25 = v23 + (v24 - v23) * v22 local v26 = math.clamp(v25, v23, v24) local RoundedNumber = tonumber(string.format("%.10g", math.floor((v26/u13) + 0.5) * u13)) local v27 = u13 if v27 ~= 0 or not v26 then local v28 = (v26 + v27 / 2) / v27 v26 = math.floor(v28) * v27 end if u7.Value ~= RoundedNumber then PlaySound("tick0"..tostring(math.random(1,3)), { ["Volume"] = 0.025 }) u7.Value = RoundedNumber u7:OnUpdate() if u7.__updatedEvent then u7.__updatedEvent:Fire() end end end end) game.UserInputService.InputEnded:Connect(function(p29) if u7.Dragging then if p29.UserInputType == Enum.UserInputType.MouseButton1 or (p29.UserInputType == Enum.UserInputType.Touch or p29.UserInputType == Enum.UserInputType.Gamepad1 and p29.KeyCode == Enum.KeyCode.ButtonR2) then u7.Dragging = false PlaySound("switch0".. tostring(math.random(1,4))) if u2.Name ~= "SettingValue" and u2.Name ~= "Value" then u2.Value = u7.Value end u7:OnUpdate() if u4 then u4(u7.Value) end end end end) return u7 end function u1.OnUpdate(p30) local v31 = p30.SettingValue:GetAttribute("MinValue") local v32 = p30.SettingValue:GetAttribute("MaxValue") local v33 = (p30.Value - v31) / (v32 - v31) local v34 = math.clamp(v33, 0, 1) local v35 = p30.Instance.DragBar.Dragger local v36 = math.clamp(v34, 0, 1) game.TweenService:Create(v35, TweenInfo.new(0.1), { ["Position"] = UDim2.fromScale(v36, 0.5) }):Play() game.TweenService:Create(p30.__displayValue, TweenInfo.new(0.1), { ["Value"] = p30.Value }):Play() end return u1 ]=], ["Keybind"] = [=[ local u1 = {} u1.__index = u1 local PlaySound = ({...})[1] function u1.CreateSettingUI(_, u2, p3) if not u2 then u2 = Instance.new("StringValue") u2.Name = "SettingValue" end local v6 = u1 local u7 = setmetatable({ ["SettingValue"] = u2 }, v6) u7.Instance = p3 or game:GetService("ReplicatedStorage").Systems.Player.UI.Menus.Settings.Templates.Keybind.KeybindFrame:Clone() u7.IsKeybind = true local u8 = { "None", "Unknown", "MouseMovement", "Focus", "Accelerometer", "TextInput" } u7.Instance.KeybindButton.MouseButton1Click:Connect(function() PlaySound("click") if u1.__currentConnection then return elseif not u7.__debounce then u7.__debounce = true task.delay(0.25, function() u7.__debounce = nil end) task.wait(0.05) u7.Instance.KeybindButton.CurrentBind.Title.Text = "..." u1.__currentConnection = game.UserInputService.InputEnded:Connect(function(p9) if u1.__currentConnection then local v10 = p9.KeyCode == Enum.KeyCode.Unknown and p9.UserInputType.Name or p9.KeyCode.Name if table.find(u8, v10) or p9.KeyCode == Enum.KeyCode.Unknown and u2:GetAttribute("KeycodeOnly") then PlaySound("error") return end local v11 = require(game.ReplicatedStorage.Initializer) for v12, v13 in pairs(v11.PlayerSettings) do if v13.IsKeybind and (v13.Value == v10 and v12 ~= u2.Name) then PlaySound("error") return end end u2.Value = v10 PlaySound("switch0".. tostring(math.random(1,4))) if u1.__currentConnection then u1.__currentConnection:Disconnect() u1.__currentConnection = nil end u7.Instance.KeybindButton.CurrentBind.Title.Text = v10 end end) end end) local function v15() local v14 = "PC" if v14 == "Console" and u2.Name:find("~Console") then u7.Instance.Visible = true return elseif v14 == "PC" and not u2.Name:find("~Console") then u7.Instance.Visible = true else u7.Instance.Visible = false end end v15() return u7 end function u1.OnUpdate(p16) p16.Instance.KeybindButton.CurrentBind.Title.Text = p16.Value end return u1 ]=], ["Bool"] = [=[ local u1 = {} u1.__index = u1 local PlaySound = ({...})[1] function u1.CreateSettingUI(_, u2, p3) if not u2 then u2 = Instance.new("BoolValue") u2.Name = "SettingValue" end local v4 = u1 local u5 = setmetatable({ ["SettingValue"] = u2 }, v4) u5.isDebounce = false u5.Instance = p3 or game:GetService("ReplicatedStorage").Systems.Player.UI.Menus.Settings.Templates.Bool.Checkbox:Clone() u5.Instance.CheckboxButton.MouseButton1Click:Connect(function() if not u5.isDebounce then u5.isDebounce = true task.delay(0.25, function() u5.isDebounce = false end) PlaySound("switch0".. tostring(math.random(1,4))) u2.Value = not u2.Value end end) return u5 end function u1.OnUpdate(p6) p6.Value = p6.SettingValue.Value p6.Instance.CheckboxButton.Checked.Visible = p6.Value end return u1 ]=] } local SettingsData local Contents local Templates local function SetupSettingUI(SettingInstance, TabSectionFolder,TableFeature) local LayoutOrder = SettingInstance:GetAttribute("LayoutOrder") local DisplayTitle = SettingInstance:GetAttribute("DisplayTitle") if LayoutOrder and DisplayTitle then if SettingInstance:IsA("Folder") then local Seperator = Templates.Seperator:Clone() Seperator.Name = SettingInstance.Name Seperator.LayoutOrder = LayoutOrder * 100 + (TabSectionFolder and TabSectionFolder:GetAttribute("LayoutOrder") * 100 or 0) SettingInstance:GetAttributeChangedSignal("LayoutOrder"):Connect(function() if SettingInstance.Name ~= "EnviromentFunctions" then Seperator.LayoutOrder = SettingInstance:GetAttribute("LayoutOrder") * 100 + (TabSectionFolder and TabSectionFolder:GetAttribute("LayoutOrder") * 100 or 0) end end) Seperator.Title.Text = DisplayTitle SettingInstance:GetAttributeChangedSignal("DisplayTitle"):Connect(function() if SettingInstance.Name ~= "EnviromentFunctions" then Seperator.Title.Text = SettingInstance:GetAttribute("DisplayTitle") end end) Seperator.Parent = Contents --[[for i,v in pairs(SettingInstance:GetChildren()) do SetupSettingUI(v,SettingInstance,TableFeature) end]] elseif SettingInstance:IsA("ValueBase") then local SettingType = Templates:FindFirstChild(SettingInstance:GetAttribute("TemplateType") or string.gsub(SettingInstance.ClassName, "Value", "")) for i,Child in pairs(Templates:GetChildren()) do if SettingInstance.Parent.Name:find(Child.Name) then SettingType = Child end end if SettingType then local ModuleType = ModulesOptions[tostring(SettingType.Name)] SettingType = loadstring(tostring(ModuleType))(PlaySound) end if SettingType and SettingType.CreateSettingUI then local SettingUI = SettingType:CreateSettingUI(SettingInstance) SettingUI.Instance.Name = SettingInstance.Name TabSectionFolder = SettingInstance.Parent SettingUI.Instance.LayoutOrder = LayoutOrder + (TabSectionFolder and TabSectionFolder:GetAttribute("LayoutOrder") * 100 or 0) TabSectionFolder:GetAttributeChangedSignal("LayoutOrder"):Connect(function() SettingUI.Instance.LayoutOrder = SettingInstance:GetAttribute("LayoutOrder") + (TabSectionFolder and TabSectionFolder:GetAttribute("LayoutOrder") * 100 or 0) end) SettingUI.Instance.Parent = Contents local Requirement = SettingInstance:GetAttribute("Requirement") local BindableCallCheckRequirement = Instance.new("BindableEvent") local Requirements = {} BindableCallCheckRequirement.Event:Connect(function() local AllTrue = true for i,v in pairs(Requirements) do if not v then AllTrue = false break end end if AllTrue then SettingUI.Instance.Visible = true else SettingUI.Instance.Visible = false end end) if type(Requirement) == "string" and Requirement:find("|") then for i,v in (string.split(Requirement, "|")) do Requirements[v] = false end else Requirements = Requirement and {[Requirement] = false} or {} end for Requirement,v in pairs(Requirements) do Requirements[Requirement] = false local InstanceValue = type(Requirement) == "string" and PlusFolderSettings:FindFirstChild(Requirement, true) or nil if InstanceValue and Requirement ~= true then Requirements[Requirement] = InstanceValue.Value InstanceValue:GetPropertyChangedSignal("Value"):Connect(function() Requirements[Requirement] = InstanceValue.Value BindableCallCheckRequirement:Fire() end) elseif Requirement == true then Requirements[Requirement] = false BindableCallCheckRequirement:Fire() elseif Requirement:find("=") then local SplitData = string.split(Requirement, "=") local Value = SplitData[2] local function BindChecker(CheckerInstance) local function Update() if tostring(CheckerInstance.Value) == Value or tostring(CheckerInstance.Value):lower() == "both" or tostring(CheckerInstance.Value):lower() == "all" then Requirements[Requirement] = true else Requirements[Requirement] = false end BindableCallCheckRequirement:Fire() end Update() CheckerInstance:GetPropertyChangedSignal("Value"):Connect(Update) end local CheckerInstance = PlusFolderSettings:FindFirstChild(SplitData[1], true) if CheckerInstance then BindChecker(CheckerInstance) else PlusFolderSettings.DescendantAdded:Connect(function(Child) if Child.Name == SplitData[1] and Child:IsA("ValueBase") then BindChecker(Child) end end) end elseif Requirement:find("~") then local SplitData = string.split(Requirement, "~") local Value = SplitData[2] local function BindChecker(CheckerInstance) local function Update() if tostring(CheckerInstance.Value) ~= Value then Requirements[Requirement] = true else Requirements[Requirement] = false end BindableCallCheckRequirement:Fire() end Update() CheckerInstance:GetPropertyChangedSignal("Value"):Connect(Update) end local CheckerInstance = PlusFolderSettings:FindFirstChild(SplitData[1], true) if CheckerInstance then BindChecker(CheckerInstance) else PlusFolderSettings.DescendantAdded:Connect(function(Child) if Child.Name == SplitData[1] and Child:IsA("ValueBase") then BindChecker(Child) end end) end end end PlusFolderSettings.DescendantAdded:Connect(function(Child) if not Child:IsA("ValueBase") then return end for Requirement,v in pairs(Requirements) do if type(Requirement) == "string" and not Requirement:find("=") and not Requirement:find("~") and Requirement == Child.Name then Requirements[Requirement] = Child.Value Child:GetPropertyChangedSignal("Value"):Connect(function() Requirements[Requirement] = Child.Value BindableCallCheckRequirement:Fire() end) BindableCallCheckRequirement:Fire() end end end) BindableCallCheckRequirement:Fire() SettingInstance:GetAttributeChangedSignal("Requirement"):Connect(function() Requirement = SettingInstance:GetAttribute("Requirement") Requirements = {} if type(Requirement) == "string" and Requirement:find("|") then for i,v in (string.split(Requirement, "|")) do Requirements[v] = false end else Requirements = Requirement and {[Requirement] = false} or {} end BindableCallCheckRequirement:Fire() end) local SettingFeature = TableFeature local ResetButton = Templates.Reset:Clone() ResetButton.Parent = SettingUI.Instance ResetButton.MouseButton1Click:Connect(function() SettingInstance.Value = SettingFeature["DefaultInstanceValue"] PlaySound("switch0".. tostring(math.random(1,4))) end) ResetButton.MouseEnter:Connect(function() PlaySound("hover") end) ResetButton.MouseLeave:Connect(function() PlaySound("hoverEnd") end) SettingUI.Instance:FindFirstChild("SettingName", true).Text = (DisplayTitle or "") SettingInstance:GetAttributeChangedSignal("DisplayTitle"):Connect(function() SettingUI.Instance:FindFirstChild("SettingName", true).Text = (SettingInstance:GetAttribute("DisplayTitle") or "") end) SettingUI.Instance:FindFirstChild("SettingDesc", true).Text = (SettingInstance:GetAttribute("DisplayDescription") or "") SettingInstance:GetAttributeChangedSignal("DisplayDescription"):Connect(function() SettingUI.Instance:FindFirstChild("SettingDesc", true).Text = (SettingInstance:GetAttribute("DisplayDescription") or "") end) SettingUI.__updatedEvent = Instance.new("BindableEvent", SettingUI.Instance) SettingUI.Updated = SettingUI.__updatedEvent.Event if SettingFeature then if SettingFeature.CustomSetup then task.spawn(SettingFeature.CustomSetup,SettingFeature) end SettingUI.Updated:Connect(function(Starting) if SettingFeature.ScriptFunction and SettingUI.Value ~= nil then SettingFeature:ScriptFunction(SettingUI.Value,Starting or false) end end) if LocalCharacter then if SettingFeature.CharacterAdded then task.spawn(SettingFeature.CharacterAdded,SettingFeature) end end LocalPlayer.CharacterAdded:Connect(function() if SettingFeature.CharacterAdded then task.delay(0,SettingFeature.CharacterAdded,SettingFeature) end end) if SettingFeature.OnLoop then ThreadBindable.Event:Connect(function() SettingFeature:OnLoop(SettingFeature) end) end end SettingUI.Value = SettingInstance.Value if SettingUI.OnUpdate then SettingUI:OnUpdate() end SettingUI.__updatedEvent:Fire(true) SettingInstance:GetPropertyChangedSignal("Value"):Connect(function() SettingUI.Value = SettingInstance.Value if SettingUI.OnUpdate then SettingUI:OnUpdate() end SettingUI.__updatedEvent:Fire() end) SettingsData.PlayerSettings[SettingInstance.Name] = SettingUI task.wait() end end else return end end local function HandleUIFeatures(TabName,TabContents) local Folder = Instance.new("Folder") Folder.Name = TabName Folder.Parent = PlusFolderSettings if not TabContents["TabAttributes"] then Folder:Destroy() warn(`Failed to create section : {TabName}\nERROR: There is no TabAttributes attached to the section`) return end for Attribute, Value in TabContents["TabAttributes"] do Folder:SetAttribute(Attribute, Value) end for SettingName, SettingData in TabContents do task.spawn(function() if SettingName == "TabAttributes" then return end if type(SettingData) ~= "table" or type(SettingData.InstanceType) ~= "string" then return end local NewInstance = Instance.new(SettingData.InstanceType) local TableEvent = table.clone(SettingData) table.clear(SettingData) setmetatable(SettingData,{ __index = TableEvent, __newindex = function(Table,i,v) TableEvent[i] = v if i == "DisplayDescription" or i == "DisplayTitle" or i == "LayoutOrder" then NewInstance:SetAttribute("DisplayDescription",type(TableEvent["DisplayDescription"]) == type("") and TableEvent["DisplayDescription"] or "") NewInstance:SetAttribute("DisplayTitle",type(TableEvent["DisplayTitle"]) == type("") and TableEvent["DisplayTitle"] or "Untitled Feature") NewInstance:SetAttribute("LayoutOrder",type(TableEvent["LayoutOrder"]) == type(1) and TableEvent["LayoutOrder"] or #NewInstance:GetAttribute("DisplayTitle")) end if i == "Requirement" then NewInstance:SetAttribute("Requirement",(type(TableEvent["Requirement"]) == type(true) or TableEvent["Requirement"] == type("") and TableEvent["Requirement"])) end end }) NewInstance.Name = SettingName NewInstance.Value = SettingData.DefaultInstanceValue local TableData = HttpService:JSONDecode(ReturnData("Data.txt", true)) if SettingData["Savable"] and FeatureLoadout["EnviromentFunctions"]["files"]["DefaultInstanceValue"] then if TableData[SettingName] ~= nil and NewInstance:GetAttribute("Requirement") ~= true then NewInstance.Value = TableData[SettingName] end NewInstance:GetPropertyChangedSignal("Value"):Connect(function() if NewInstance:GetAttribute("Requirement") == true or not SettingData["Savable"] then return end local TableData2 = HttpService:JSONDecode(ReturnData("Data.txt", true)) TableData2[SettingName] = SettingData.DefaultInstanceValue == NewInstance.Value and nil or NewInstance.Value if FeatureLoadout["EnviromentFunctions"]["files"]["DefaultInstanceValue"] then ChangeData("Data.txt",HttpService:JSONEncode(TableData2),true) end end) elseif not FeatureLoadout["EnviromentFunctions"]["files"]["DefaultInstanceValue"] and SettingData["Savable"] and not WarnedAboutFilesCompatability then WarnedAboutFilesCompatability = true ColoredPrint("Failed to load a savable feature.\nIf this bothers you then you should use a different executor that supports 'writefile' and 'readfile'", "info", Color3.new(1,0.25,0)) end if SettingData["DisplayDescription"] then SettingData.DisplayDescription = SettingData.DisplayDescription:gsub("%(NO FUNCTIONALITY%)", RichTextGradientColor("(NO FUNCTIONALITY)",{Color3.fromRGB(255, 83, 53), Color3.fromRGB(255, 123, 0),Color3.fromRGB(255, 83, 53)})) end SettingData["Instance"] = NewInstance NewInstance:SetAttribute("DisplayDescription",SettingData["DisplayDescription"] or "") NewInstance:SetAttribute("DisplayTitle",SettingData["DisplayTitle"] or "Untitled Feature") NewInstance:SetAttribute("LayoutOrder",SettingData["LayoutOrder"] or #NewInstance:GetAttribute("DisplayTitle")) NewInstance:SetAttribute("Requirement",SettingData["Requirement"]) if SettingData["ExtraData"] then for ExtraDataIndex, ExtraDataValue in SettingData.ExtraData do NewInstance:SetAttribute(ExtraDataIndex, ExtraDataValue) end end NewInstance.Parent = Folder SetupSettingUI(NewInstance,Folder,SettingData) end) end SetupSettingUI(Folder) return Folder end local Initializer = {} function Initializer.Start() SettingsData = {} SettingsData.PlayerSettings = {} Initializer.SettingsMenu = MenuData:CreateSidebarMenu("Plus", PlusMenu) if NewUIVersion then PlusMenu:Destroy() PlusMenu = Initializer.SettingsMenu.Menu end Contents = Initializer.SettingsMenu.Menu.SettingsContainer.Contents Templates = ReplicatedStorage.Systems.Player.UI.Menus.Settings.Templates local PluginsFolderDir = "NaikoScript/ForsakenPlus/Plugins" local FilterDir = PluginsFolderDir:gsub("/","\\") .. "\\" local PluginDefaultSettings = { PluginVersion = "1.0", PluginName = "Plugin", PluginCredits = "Someone", HidePluginInfoTab = false } if FeatureLoadout["EnviromentFunctions"]["files"]["DefaultInstanceValue"] then local PluginFiles = isfolder(PluginsFolderDir) and listfiles(PluginsFolderDir) or nil if PluginFiles then local StartTime = workspace.DistributedGameTime for i,v in PluginFiles do local PluginFileData = ReturnData(v,false) local FeatureErrors = 0 if string.gsub(PluginFileData,"[\n ]",""):sub(1,7) == "return{" then local Plugin,err = loadstring(PluginFileData) local Success,Features,PluginSettings if Plugin == nil then task.spawn(error,`Failed to load Plugin : {v:gsub(FilterDir,"")}\n{err}`,5) continue end local suc,err = pcall(function() setfenv(Plugin, getfenv()) Features,PluginSettings = Plugin() end) if not suc then task.spawn(error,`Failed to load Plugin : {v:gsub(FilterDir,"")}\n{err}`,5) continue end if typeof(Features) == typeof({}) then for TabName, TabContents in Features do if type(TabName) == type("") and typeof(TabContents) == typeof({}) then FeatureLoadout[TabName] = FeatureLoadout[TabName] or {} for FeatureName,FeatureData in TabContents do if FeatureName == "TabAttributes" and TabName == "EnviromentFunctions" then continue end if (FeatureLoadout[TabName][FeatureName] and FeatureData.InstanceType == FeatureLoadout[TabName][FeatureName].InstanceType) or not FeatureLoadout[TabName][FeatureName] then FeatureLoadout[TabName][FeatureName] = FeatureData else FeatureErrors += 1 warn(`Failed to load {TabName} from {v:gsub(FilterDir,"")}\nERROR: to override the InstanceType must be the same as the original feature`) end end else FeatureErrors += 1 warn(`Failed to load {TabName} from {v:gsub(FilterDir,"")}\nERROR: Tab Name is not a string or Tab Contents is not a table`) end end if PluginSettings and type(PluginSettings) == type({}) then for i,v in PluginDefaultSettings do PluginSettings[i] = PluginSettings[i] or v end if not PluginSettings["HidePluginInfoTab"] then FeatureLoadout[PluginSettings["PluginName"] .. HttpService:GenerateGUID(false):sub(1,7)] = { ["TabAttributes"] = { ["DisplayTitle"] = string.format( "%s Made by %s | %s", PluginSettings["PluginName"], PluginSettings["PluginCredits"], RichTextGradientColor("V"..PluginSettings["PluginVersion"],{Color3.fromRGB(87, 160, 255),Color3.fromRGB(0, 132, 255)}) ), ["LayoutOrder"] = 1000 } } end end else warn(`Failed to load Plugin : {v:gsub(FilterDir,"")}\nERROR: The features returned is not a table value`) continue end else warn(`Failed to load Plugin : {v:gsub(FilterDir,"")} | This is for security. If you made this plugin please read the documentation.\nERROR: Return is not at the start of the first line without anything behind it and make sure it is infact correct`) continue end local LoadDelay = workspace.DistributedGameTime - StartTime if FeatureErrors > 0 then ColoredPrint(`Loaded Plugin : {v:gsub(FilterDir,"")} with {FeatureErrors} Feature Error(s)`,"info",Color3.fromRGB(251, 109, 43)) else ColoredPrint(`Loaded Plugin : {v:gsub(FilterDir,"")} successfully`,"suc",Color3.fromRGB(193,251,43)) end end else --warn("No Plugins found or directory/folder is removed") end end for TabName, TabContents in FeatureLoadout do task.spawn(HandleUIFeatures,TabName,TabContents) end --[[task.spawn(function() for i,Child in pairs(PlusFolderSettings:GetChildren()) do SetupSettingUI(Child) end end)]] task.spawn(function() if game.GameId == 6331902150 then local JsonVersionData task.delay(5,function() if not JsonVersionData then ColoredPrint("Getting game version info is taking longer than usual.\nRovalra API has not responded in expected time.","warn") end task.wait(12) if not JsonVersionData then ColoredPrint(`Since it still has not gotten a response API still (after 17 seconds)\nYou can Manually check if the game has updated before the script has!\n(Last Script Update/Test : {GameVersionForScript})`,"info") end end) JsonVersionData = (game:HttpGet("https://apis.rovalra.com/v1/games/history?place_id=18687417158")) if not JsonVersionData then ColoredPrint(`Failed to get game version info.\n Automatic update check failed.\n `) return end local Success,TableVersionData = pcall(function() return HttpService:JSONDecode(tostring(JsonVersionData)) end) local CurrentGameVersion = (Success and TableVersionData and type(TableVersionData) == "table" and TableVersionData["history"] and TableVersionData["history"][1] and TableVersionData["history"][1]["first_seen"]) or GameVersionForScript CurrentGameVersion = CurrentGameVersion:sub(1,10) local y,m,d = GameVersionForScript:match("(%d+)-(%d+)-(%d+)") local ThenTime = os.time{year=y, month=m, day=d} y,m,d = CurrentGameVersion:match("(%d+)-(%d+)-(%d+)") local CurrentTime = os.time{year=y, month=m, day=d} local DaysSinceScriptUpdate = math.floor(math.abs(ThenTime - os.time()) / 86400) local DaysSinceGameUpdate = math.floor(math.abs(CurrentTime - os.time()) / 86400) if ThenTime < CurrentTime and DaysSinceScriptUpdate > 1 then ColoredPrint("Days since last script update: " .. DaysSinceScriptUpdate,"info", Color3.fromRGB(236, 48, 120)) ColoredPrint("Days since game update: " .. DaysSinceGameUpdate,"info", Color3.fromRGB(236, 48, 120)) FeatureLoadout["Outdated"] = { ["TabAttributes"] = { ["DisplayTitle"] = '⚠' .. RichTextGradientColor(" SCRIPT ISN'T TESTED FOR THIS GAME VERSION ",{Color3.fromRGB(255, 166, 0), Color3.fromRGB(243, 227, 0)}) .. '⚠', ["LayoutOrder"] = -10 } } local Folder = HandleUIFeatures("Outdated",FeatureLoadout["Outdated"]) --SetupSettingUI(Folder) ColoredPrint(`The game has updated and it has been detected that the script has not been tested/updated for this version.\n{GetValue("DisableAllFeatures") and "All features have been disabled by default to prevent from you possibly getting detected.\n" or ""}Use the features with caution or wait for a update from the script.`, "warning", Color3.fromRGB(255, 166, 0)) if GetValue("DisableAllFeatures") then print("Disabling all features") for i,v in FeatureLoadout do for i2,v2 in v do if i2 == "DisableAllFeatures" then continue end v2["Savable"] = false if type(v2["DefaultInstanceValue"]) == "boolean" and v2["Instance"] and i ~= "Outdated" and i ~= "EnviromentFunctions" then v2["DefaultInstanceValue"] = false v2["Instance"].Value = false elseif type(v2["DefaultInstanceValue"]) ~= "boolean" and v2["Instance"] and i ~= "Outdated" and i ~= "EnviromentFunctions" then v2["Instance"].Value = v2["DefaultInstanceValue"] end end end end end end end) end --[[for TabName, TabContents in FeatureLoadout do task.spawn(HandleUIFeatures,TabName,TabContents) end]] Initializer.Start() if SidePlusButton:IsA("Frame") then task.spawn(function() local Menu = MenuData.SidebarMenus[SidePlusButton.Name] if NewUIVersion then local CountingMod = false if Menu then SidePlusButton.Button.MouseButton1Click:Connect(function() MenuData.SidebarMenus["Plus"]["_sidebar"]["MenusHidden"] = false if not PlusMenu.Visible then for i,v in MainUI:GetChildren() do if v ~= PlusMenu and (v.Name):find("Screen") or v.Name == "Shop" then local ButtonName = v.Name:gsub("Screen","") local Button = SideBar:FindFirstChild(ButtonName,true) if not Button and ButtonName ~= "Mod" then continue end if (MenuData.SidebarMenus[ButtonName] and not MenuData.SidebarMenus[ButtonName]["Checked"]) or (ButtonName == "Mod" and not CountingMod) then if ButtonName == "Mod" then CountingMod = true else MenuData.SidebarMenus[ButtonName]["Checked"] = true end if Button then Button.Button.MouseButton1Click:Connect(function() if PlusMenu.Visible and MenuData.TogglingMenus == nil then SetButtonState(false) end end) elseif ButtonName == "Mod" and PlayerGui.TopbarStandard.Holders.Left:FindFirstChild("Widget") then local TopMod for i,v in PlayerGui.TopbarStandard.Holders.Left:GetChildren() do if v:FindFirstChildWhichIsA("TextLabel",true) and v:FindFirstChildWhichIsA("TextLabel",true).Text == "Command Panel" then TopMod = v break end end if TopMod then TopMod.IconButton.Menu.IconSpot.ClickRegion.MouseButton1Click:Connect(function() if PlusMenu.Visible and MenuData.TogglingMenus == nil then SetButtonState(false) end end) end end end end end end if MenuData.TogglingMenus == nil then Menu:ToggleMenu() end end) end else if Menu then SidePlusButton.Button.MouseButton1Click:Connect(function() if not PlusMenu.Visible then for i,v in MainUI:GetChildren() do if v ~= PlusMenu and (v.Name):find("Screen") then local ButtonName = v.Name:gsub("Screen","") local Button = Buttons:FindFirstChild(ButtonName) or (SideBar:FindFirstChild("Bottombar") and SideBar.Bottombar.Buttons:FindFirstChild(ButtonName)) or nil if not Button and ButtonName ~= "Mod" then continue end local Event = v:FindFirstChildOfClass("BindableEvent") if MenuData.SidebarMenus[ButtonName] == nil then if Button then Button.Button.MouseButton1Click:Connect(function() if PlusMenu.Visible and MenuData.TogglingMenus == nil then Menu:ToggleMenu() end end) elseif v.Name == "ModScreen" and PlayerGui.TopbarStandard.Holders.Left:FindFirstChild("Widget") then PlayerGui.TopbarStandard.Holders.Left.Widget.IconButton.Menu.IconSpot.ClickRegion.MouseButton1Click:Connect(function() if PlusMenu.Visible and MenuData.TogglingMenus == nil then Menu:ToggleMenu() end end) end MenuData.SidebarMenus[ButtonName] = { ["Toggled"] = Event and Event.Event or nil, ["SidebarButton"] = Buttons:FindFirstChild(ButtonName) or nil, ["Menu"] = MainUI:FindFirstChild(v.Name), ["__toggleEvent"] = Event or nil } end end end end if MenuData.TogglingMenus == nil then Menu:ToggleMenu() end end) end end end) if NewUIVersion then local OriginalSize = SidePlusButton.Size SidePlusButton.MouseEnter:Connect(function() TweenService:Create(SidePlusButton, BaseTweenInfo, { ["Size"] = UDim2.fromScale(OriginalSize.X.Scale * 1.1, OriginalSize.Y.Scale * 1.13) }):Play() PlaySound("hover") end) SidePlusButton.MouseLeave:Connect(function() TweenService:Create(SidePlusButton, BaseTweenInfo, { ["Size"] = OriginalSize }):Play() PlaySound("hoverEnd") end) else local IsBottomBar = SidePlusButton.Parent.Parent.Name == "Bottombar" local PulloutHolder = SidePlusButton.PulloutHolder PulloutHolder.Parent = IsBottomBar and (MenuData.Sidebars.Bottombar.Pullouts or SidePlusButton) or SidePlusButton local PulloutFrame = PulloutHolder.PulloutFrame PulloutFrame.Title.Text = SidePlusButton.Name SidePlusButton.MouseEnter:Connect(function() if SidePlusButton.Button.ImageTransparency <= 0.1 then TweenService:Create(SidePlusButton, BaseTweenInfo, { ["Size"] = UDim2.fromScale(1.05, IsBottomBar and 1.15 or 0.25) }):Play() if IsBottomBar then TweenService:Create(PulloutHolder, BaseTweenInfo, {["Position"] = UDim2.fromScale(0.65, 0.85),["Size"] = UDim2.fromScale(0.35, 0.75)}):Play() TweenService:Create(PulloutFrame.Display, BaseTweenInfo, {["ImageTransparency"] = 0}):Play() TweenService:Create(PulloutFrame.Title, BaseTweenInfo, {["TextTransparency"] = 0}):Play() else TweenService:Create(PulloutFrame, BaseTweenInfo, {["Position"] = UDim2.new(0.225, PulloutFrame.Title.AbsoluteSize.X ^ 1.03, 0.5, 0)}):Play() end PlaySound("hover") end end) SidePlusButton.MouseLeave:Connect(function() TweenService:Create(SidePlusButton, BaseTweenInfo, {["Size"] = UDim2.fromScale(1, IsBottomBar and 1 or 0.2)}):Play() if IsBottomBar then TweenService:Create(PulloutHolder, BaseTweenInfo, {["Position"] = UDim2.fromScale(0.65, 1),["Size"] = UDim2.fromScale(0.15, 0.45)}):Play() TweenService:Create(PulloutFrame.Display, BaseTweenInfo, {["ImageTransparency"] = 1}):Play() TweenService:Create(PulloutFrame.Title, BaseTweenInfo, {["TextTransparency"] = 1}):Play() else TweenService:Create(PulloutFrame, BaseTweenInfo, {["Position"] = UDim2.fromScale(0, 0.5)}):Play() end if SidePlusButton.Button.ImageTransparency <= 0.1 then PlaySound("hoverEnd") end end) end end local function UICheck() local Status = SideBar:GetAttribute("WasVisible") SetButtonState(false) if Status then if not NewUIVersion then local LayoutInstance = Buttons:FindFirstChildOfClass("UIListLayout") or Buttons:FindFirstChildOfClass("UIGridLayout") if LayoutInstance then LayoutInstance.VerticalAlignment = Enum.VerticalAlignment.Top end else SideBar:FindFirstChildOfClass("UIPadding").PaddingRight = UDim.new(0.2,0) SideBar:FindFirstChildOfClass("UIPadding").PaddingLeft = UDim.new(0,0) UIScale.Scale = 1 end PlusMenu.SettingsContainer.ImageTransparency = 0 PlusMenu.SettingsContainer.Contents.ScrollBarImageTransparency = 0 if SideBar:IsA("ImageLabel") then SideBar.ImageTransparency = 0 end for i,v in PlusMenu.SettingsContainer.Contents:GetChildren() do if v:IsA("ImageLabel") then v.ImageTransparency = 0 elseif v:IsA("Frame") then for i,v in v:GetChildren() do if v:IsA("ImageLabel") or v:IsA("ImageButton") then v.ImageTransparency = 0 end end end end else if NewUIVersion then MenuData.SidebarMenus["Plus"]["_sidebar"]["MenusHidden"] = false task.delay(0.5,function() MenuData.SidebarMenus["Plus"]["_sidebar"]["MenusHidden"] = false end) SideBar:FindFirstChildOfClass("UIPadding").PaddingRight = UDim.new(0,0) SideBar:FindFirstChildOfClass("UIPadding").PaddingLeft = UDim.new(0.2,0) UIScale.Scale = 1.3 end local LayoutInstance = Buttons:FindFirstChildOfClass("UIListLayout") or Buttons:FindFirstChildOfClass("UIGridLayout") if LayoutInstance then LayoutInstance.VerticalAlignment = Enum.VerticalAlignment.Center end PlusMenu.SettingsContainer.ImageTransparency = 0.3 PlusMenu.SettingsContainer.Contents.ScrollBarImageTransparency = 0.45 if SideBar:IsA("ImageLabel") then SideBar.ImageTransparency = 1 end for i,v in PlusMenu.SettingsContainer.Contents:GetChildren() do if v:IsA("ImageLabel") then v.ImageTransparency = 0.4 elseif v:IsA("Frame") then for i,v in v:GetChildren() do if v:IsA("ImageLabel") or v:IsA("ImageButton") then v.ImageTransparency = 0.3 end end end end end for i,v in SideBar:QueryDescendants(`#Bottom > Frame, #Money , #Bottombar , #{Buttons} > Frame {((not NewUIVersion) and ":not(#Credits)" or "")} :not(#TesterUi)`) do if not v:GetAttribute("Visibility") then v:SetAttribute("Visibility",v.Visible) end v.Visible = Status and v:GetAttribute("Visibility") end SidePlusButton.Visible = true if not Status then RoundEvent:Fire("Start") else RoundEvent:Fire("End") end end -- Floating Auto Block toggle (Patch 92 GUI) do local AutoBlockToggleGui = Instance.new("ScreenGui") AutoBlockToggleGui.Name = "AutoBlockFloatingToggle" AutoBlockToggleGui.ResetOnSpawn = false AutoBlockToggleGui.IgnoreGuiInset = true AutoBlockToggleGui.Parent = CoreGui local AutoBlockToggle = Instance.new("TextButton") AutoBlockToggle.Name = "Toggle" AutoBlockToggle.Parent = AutoBlockToggleGui AutoBlockToggle.Size = UDim2.new(0, 150, 0, 48) AutoBlockToggle.Position = UDim2.new(1, -170, 0.5, -24) AutoBlockToggle.BackgroundTransparency = 0.15 AutoBlockToggle.BorderSizePixel = 0 AutoBlockToggle.TextColor3 = Color3.new(1, 1, 1) AutoBlockToggle.TextScaled = true AutoBlockToggle.Font = Enum.Font.GothamBold AutoBlockToggle.ZIndex = 100 AutoBlockToggle.Active = true AutoBlockToggle.Selectable = true local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 10) Corner.Parent = AutoBlockToggle local Stroke = Instance.new("UIStroke") Stroke.Thickness = 2 Stroke.Parent = AutoBlockToggle local AutoBlockValue = GetValue("AutoBlock", true) local function UpdateAutoBlockToggle() local Enabled = AutoBlockValue and AutoBlockValue.Value or false AutoBlockToggle.Text = Enabled and "Auto Block: ON" or "Auto Block: OFF" AutoBlockToggle.BackgroundColor3 = Enabled and Color3.fromRGB(0, 170, 85) or Color3.fromRGB(45, 45, 45) end AutoBlockToggle.MouseButton1Click:Connect(function() if AutoBlockValue then AutoBlockValue.Value = not AutoBlockValue.Value UpdateAutoBlockToggle() end end) if AutoBlockValue then AutoBlockValue:GetPropertyChangedSignal("Value"):Connect(UpdateAutoBlockToggle) end UpdateAutoBlockToggle() -- Drag ONLY from the left/right side handles. -- The center of the button remains click-only, which prevents -- two-finger touches from fighting over the toggle. local Dragging = false local DragStart local StartPosition local function MakeDragHandle(Name, XPosition) local Handle = Instance.new("Frame") Handle.Name = Name Handle.Parent = AutoBlockToggle Handle.Size = UDim2.new(0, 28, 1, 0) Handle.Position = UDim2.new(XPosition, 0, 0, 0) Handle.BackgroundTransparency = 1 Handle.BorderSizePixel = 0 Handle.Active = true Handle.ZIndex = 101 Handle.InputBegan:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then Dragging = true DragStart = Input.Position StartPosition = AutoBlockToggle.Position Input.Changed:Connect(function() if Input.UserInputState == Enum.UserInputState.End then Dragging = false end end) end end) return Handle end MakeDragHandle("LeftDragHandle", 0) MakeDragHandle("RightDragHandle", 1) UserInputService.InputChanged:Connect(function(Input) if Dragging and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then local Delta = Input.Position - DragStart AutoBlockToggle.Position = UDim2.new( StartPosition.X.Scale, StartPosition.X.Offset + Delta.X, StartPosition.Y.Scale, StartPosition.Y.Offset + Delta.Y ) end end) end MainUI.ChildAdded:Connect(function(Child) if Child.Name == "AbilityContainer" then --[[if Child:FindFirstChild("Block") and not Child:FindFirstChild("Block"):FindFirstChild("AutoImage") then local AutoImage = Instance.new("ImageLabel") AutoImage.Name = "AutoImage" AutoImage.Interactable = false AutoImage.Parent = Child:FindFirstChild("Block") AutoImage.Image = "rbxassetid://114159864966636" AutoImage.BackgroundTransparency = 1 AutoImage.Size = UDim2.fromScale(0.8,0.8) AutoImage.Position = UDim2.fromScale(0.5,0) AutoImage.AnchorPoint = Vector2.new(0.5,0.4) AutoImage.Visible = GetValue("AutoBlock") and LocalCharacter.Parent.Name:find("Survi") end]] SideBar:SetAttribute("WasVisible", false) UICheck() end end) MainUI.ChildRemoved:Connect(function(Child) if Child.Name == "AbilityContainer" then SideBar:SetAttribute("WasVisible", true) UICheck() end end) SideBar:GetPropertyChangedSignal("Visible"):Connect(function() SideBar.Visible = true end) SideBar:SetAttribute("WasVisible",(MainUI:FindFirstChild("AbilityContainer") == nil)) UICheck() SideBar.Visible = true ColoredPrint("Forsaken plus has loaded successfully","success",Color3.fromRGB(0, 200, 125))