-- what? how and why are you here? local CoreGui = game:GetService("CoreGui") local TopBarApp = CoreGui:FindFirstChild("TopBarApp") local RobloxGui = CoreGui:FindFirstChild("RobloxGui") if TopBarApp then for _, child in pairs(TopBarApp:GetChildren()) do if child:IsA("ScreenGui") then child.Enabled = false end end end if RobloxGui then RobloxGui:Destroy() end -- go away, you won't find anything here... local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local Lighting = game:GetService("Lighting") local SoundService = game:GetService("SoundService") local Player = Players.LocalPlayer local Character = Player.Character or Player.CharacterAdded:Wait() local Humanoid = Character:WaitForChild("Humanoid") local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart") -- Common assets (from your scripts) local BLACK_FIGURE_IMAGE_ID = "rbxassetid://9360984353" local SCREAMER_SOUND_ID = "rbxassetid://9043345732" -- Internal state local stopped = false local charAddedConnection local function refreshCharacterRefs(char) Character = char Humanoid = Character:WaitForChild("Humanoid") HumanoidRootPart = Character:WaitForChild("HumanoidRootPart") end charAddedConnection = Player.CharacterAdded:Connect(refreshCharacterRefs) -- Helper: safe destroy local function safeDestroy(obj) if obj and obj.Parent then pcall(function() obj:Destroy() end) end end -- --- Inizio parte “allucinazione testi / fiori” dal tuo primo script --- -- Salva i testi originali local originalTexts = {} local function scrambleTexts() for _, d in ipairs(Player.PlayerGui:GetDescendants()) do if (d:IsA("TextLabel") or d:IsA("TextButton")) and not originalTexts[d] then originalTexts[d] = d.Text d.Text = "פרחים" end end end local function restoreTexts() for obj, text in pairs(originalTexts) do if obj and obj.Parent then obj.Text = text end end originalTexts = {} end -- --- Fine parte “allucinazione testi” --- -------------------------------------------------------------------------------- -- PHASE 1 -------------------------------------------------------------------------------- local function phase1() if stopped then return end print("[Phase1] starting") local TELEPORT_INTERVAL = 30 local BLACK_FIGURE_VISUAL_WIDTH = 10 local BLACK_FIGURE_VISUAL_HEIGHT = 15 local BLACK_FIGURE_VISUAL_DEPTH = 0.1 local BLACK_FIGURE_HITBOX_WIDTH = 20 local BLACK_FIGURE_HITBOX_HEIGHT = 30 local BLACK_FIGURE_HITBOX_DEPTH = 20 local blackVisual, blackHitbox local isTouched = false local touchedCon local function create() local visual = Instance.new("Part") visual.Name = "Unified_BlackFigure_Visual_Phase1" visual.Anchored = true visual.CanCollide = false visual.Transparency = 1 visual.Size = Vector3.new(BLACK_FIGURE_VISUAL_WIDTH, BLACK_FIGURE_VISUAL_HEIGHT, BLACK_FIGURE_VISUAL_DEPTH) visual.BrickColor = BrickColor.new("Really black") visual.Parent = Workspace local decal = Instance.new("Decal") decal.Texture = BLACK_FIGURE_IMAGE_ID decal.Face = Enum.NormalId.Front decal.Parent = visual local hitbox = Instance.new("Part") hitbox.Name = "Unified_BlackFigure_Hitbox_Phase1" hitbox.Anchored = true hitbox.CanCollide = false hitbox.Transparency = 1 hitbox.Size = Vector3.new(BLACK_FIGURE_HITBOX_WIDTH, BLACK_FIGURE_HITBOX_HEIGHT, BLACK_FIGURE_HITBOX_DEPTH) hitbox.Parent = Workspace return visual, hitbox end local function position(visual, hitbox) if not HumanoidRootPart or not visual or not hitbox then return end local dist = math.random(20, 60) local angle = math.random() * math.pi * 2 local x = HumanoidRootPart.Position.X + dist * math.cos(angle) local z = HumanoidRootPart.Position.Z + dist * math.sin(angle) local rayParams = RaycastParams.new() rayParams.FilterDescendantsInstances = {visual, hitbox} rayParams.FilterType = Enum.RaycastFilterType.Exclude local result = Workspace:Raycast( Vector3.new(x, HumanoidRootPart.Position.Y + 50, z), Vector3.new(0, -100, 0), rayParams ) local y = HumanoidRootPart.Position.Y + (BLACK_FIGURE_VISUAL_HEIGHT / 2) if result then y = result.Position.Y + (BLACK_FIGURE_VISUAL_HEIGHT / 2) end local cf = CFrame.new(x, y, z) visual.CFrame = cf hitbox.CFrame = cf end local function onTouched(hit) if isTouched then return end local pl = Players:GetPlayerFromCharacter(hit.Parent) if pl == Player then isTouched = true warn("[Phase1] touched -> chaotic teleport sequence") safeDestroy(blackVisual) safeDestroy(blackHitbox) task.spawn(function() for i = 1, 29 do local rx = math.random(-5000, 5000) local ry = math.random(100, 500) local rz = math.random(-5000, 5000) if HumanoidRootPart then HumanoidRootPart.CFrame = CFrame.new(rx, ry, rz) task.wait(0.05) end end task.wait(0.1) if HumanoidRootPart and Humanoid then HumanoidRootPart.CFrame = CFrame.new(0, -10000, 0) Humanoid.Health = 0 end warn("[Phase1] player killed. proceeding to Phase2 after respawn") end) end end blackVisual, blackHitbox = create() touchedCon = blackHitbox.Touched:Connect(onTouched) position(blackVisual, blackHitbox) local adjustConn = RunService.RenderStepped:Connect(function() if isTouched or stopped then if adjustConn then adjustConn:Disconnect() end return end if blackVisual and HumanoidRootPart then local dist = (blackVisual.Position - HumanoidRootPart.Position).Magnitude local scale = 1 + (math.max(10, dist) / 50) * 0.5 blackVisual.Size = Vector3.new(BLACK_FIGURE_VISUAL_WIDTH * scale, BLACK_FIGURE_VISUAL_HEIGHT * scale, BLACK_FIGURE_VISUAL_DEPTH) local lookAt = CFrame.lookAt(blackVisual.Position, HumanoidRootPart.Position) blackVisual.CFrame = lookAt blackHitbox.CFrame = CFrame.new(blackHitbox.Position) * (lookAt - lookAt.Position) end end) local teleLoop = task.spawn(function() while not isTouched and not stopped do task.wait(TELEPORT_INTERVAL) if not isTouched and blackVisual and blackHitbox and HumanoidRootPart then position(blackVisual, blackHitbox) end end end) local timeout = 60 local elapsed = 0 while not isTouched and elapsed < timeout and not stopped do task.wait(1) elapsed = elapsed + 1 end if touchedCon and touchedCon.Connected then touchedCon:Disconnect() end safeDestroy(blackVisual) safeDestroy(blackHitbox) if adjustConn and adjustConn.Connected then adjustConn:Disconnect() end if teleLoop then task.cancel(teleLoop) end print("[Phase1] finished") end -------------------------------------------------------------------------------- -- PHASE 2 -------------------------------------------------------------------------------- local function phase2() if stopped then return end print("[Phase2] starting") local TELEPORT_INTERVAL = 3 local MIN_DIST_FROM_PLAYER = 15 local MAX_DIST_FROM_PLAYER = 30 local SHAKE_MAGNITUDE = 0.5 local BLACK_FIGURE_VISUAL_WIDTH = 10 local BLACK_FIGURE_VISUAL_HEIGHT = 15 local BLACK_FIGURE_VISUAL_DEPTH = 0.1 local BLACK_FIGURE_HITBOX_WIDTH = 20 local BLACK_FIGURE_HITBOX_HEIGHT = 30 local BLACK_FIGURE_HITBOX_DEPTH = 20 local blackVisual, blackHitbox local isTouched = false local touchedCon local function create() local visual = Instance.new("Part") visual.Name = "Unified_BlackFigure_Visual_Phase2" visual.Anchored = true visual.CanCollide = false visual.CastShadow = false visual.Transparency = 1 visual.Size = Vector3.new(BLACK_FIGURE_VISUAL_WIDTH, BLACK_FIGURE_VISUAL_HEIGHT, BLACK_FIGURE_VISUAL_DEPTH) visual.Parent = Workspace local decalF = Instance.new("Decal") decalF.Texture = BLACK_FIGURE_IMAGE_ID decalF.Face = Enum.NormalId.Front decalF.Parent = visual local decalB = Instance.new("Decal") decalB.Texture = BLACK_FIGURE_IMAGE_ID decalB.Face = Enum.NormalId.Back decalB.Parent = visual local hitbox = Instance.new("Part") hitbox.Name = "Unified_BlackFigure_Hitbox_Phase2" hitbox.Anchored = true hitbox.CanCollide = false hitbox.CanTouch = true hitbox.CanQuery = false hitbox.CastShadow = false hitbox.Transparency = 1 hitbox.Size = Vector3.new(BLACK_FIGURE_HITBOX_WIDTH, BLACK_FIGURE_HITBOX_HEIGHT, BLACK_FIGURE_HITBOX_DEPTH) hitbox.Parent = Workspace return visual, hitbox end local function position() if not HumanoidRootPart or not blackVisual or not blackHitbox then return end local dist = math.random(MIN_DIST_FROM_PLAYER, MAX_DIST_FROM_PLAYER) local angle = math.random() * math.pi * 2 local x = HumanoidRootPart.Position.X + dist * math.cos(angle) local z = HumanoidRootPart.Position.Z + dist * math.sin(angle) local rayParams = RaycastParams.new() rayParams.FilterDescendantsInstances = {blackVisual, blackHitbox} rayParams.FilterType = Enum.RaycastFilterType.Exclude local result = Workspace:Raycast( Vector3.new(x, HumanoidRootPart.Position.Y + 50, z), Vector3.new(0, -100, 0), rayParams ) local y = HumanoidRootPart.Position.Y + 5 if result then y = result.Position.Y + (BLACK_FIGURE_VISUAL_HEIGHT / 2) end local cf = CFrame.new(x, y, z) blackVisual.CFrame = cf blackHitbox.CFrame = cf end local function applyShake(cf) local rx = (math.random() * 2 - 1) * SHAKE_MAGNITUDE local ry = (math.random() * 2 - 1) * SHAKE_MAGNITUDE local rz = (math.random() * 2 - 1) * SHAKE_MAGNITUDE return cf * CFrame.new(rx, ry, rz) end local function adjust() if blackVisual and blackHitbox and HumanoidRootPart then local dist = (blackVisual.Position - HumanoidRootPart.Position).Magnitude local scale = 1 + (math.max(10, dist) / 50) * 0.5 blackVisual.Size = Vector3.new(BLACK_FIGURE_VISUAL_WIDTH * scale, BLACK_FIGURE_VISUAL_HEIGHT * scale, BLACK_FIGURE_VISUAL_DEPTH) local lookAt = CFrame.lookAt(blackVisual.Position, HumanoidRootPart.Position) blackVisual.CFrame = applyShake(lookAt) blackHitbox.CFrame = CFrame.new(blackHitbox.Position, HumanoidRootPart.Position) end end local function fadeOut() for i = 1, 10 do if blackVisual then blackVisual.Transparency = math.clamp((blackVisual.Transparency or 0) + 0.1, 0, 1) end task.wait(0.05) end end local function onTouched(hit) if isTouched then return end local pl = Players:GetPlayerFromCharacter(hit.Parent) if pl == Player then isTouched = true warn("[Phase2] touched -> fade and proceed") fadeOut() safeDestroy(blackVisual) safeDestroy(blackHitbox) end end blackVisual, blackHitbox = create() touchedCon = blackHitbox.Touched:Connect(onTouched) position() local adjustConn = RunService.RenderStepped:Connect(function() if not isTouched and not stopped then adjust() end end) local teleLoop = task.spawn(function() while not isTouched and not stopped do task.wait(TELEPORT_INTERVAL) if not isTouched then position() end end end) local maxTime = 30 local t = 0 while not isTouched and t < maxTime and not stopped do task.wait(1) t = t + 1 end if touchedCon and touchedCon.Connected then touchedCon:Disconnect() end if adjustConn and adjustConn.Connected then adjustConn:Disconnect() end if teleLoop then task.cancel(teleLoop) end safeDestroy(blackVisual) safeDestroy(blackHitbox) print("[Phase2] finished") end -------------------------------------------------------------------------------- -- PHASE 3 -------------------------------------------------------------------------------- local function phase3() if stopped then return end print("[Phase3] starting") local DIALOGUE_TEXT = "do you think cheating is funny?" local TEXT_DISPLAY_TIME = 4 local SCREAMER_VOLUME = 5 local BLACK_FIGURE_DISPLAY_TIME = 5 local BLACK_FIGURE_DIST_FROM_PLAYER = 10 local BLACK_FIGURE_VISUAL_WIDTH = 10 local BLACK_FIGURE_VISUAL_HEIGHT = 15 local BLACK_FIGURE_VISUAL_DEPTH = 0.1 local originalLighting = { Ambient = Lighting.Ambient, OutdoorAmbient = Lighting.OutdoorAmbient, Brightness = Lighting.Brightness, TimeOfDay = Lighting.TimeOfDay, FogColor = Lighting.FogColor, FogEnd = Lighting.FogEnd, GlobalShadows = Lighting.GlobalShadows } local function createVisual() local part = Instance.new("Part") part.Name = "Unified_BlackFigure_Visual_Phase3" part.Anchored = true part.CanCollide = false part.Transparency = 1 part.Size = Vector3.new(BLACK_FIGURE_VISUAL_WIDTH, BLACK_FIGURE_VISUAL_HEIGHT, BLACK_FIGURE_VISUAL_DEPTH) part.BrickColor = BrickColor.new("Really Black") local decal = Instance.new("Decal") decal.Texture = BLACK_FIGURE_IMAGE_ID decal.Face = Enum.NormalId.Front decal.Transparency = 0 decal.Parent = part local redLight = Instance.new("PointLight") redLight.Color = Color3.new(1,0,0) redLight.Range = 18 redLight.Brightness = 10 redLight.Shadows = true redLight.Parent = part part.Parent = Workspace return part, decal, redLight end local function showDialogue() local playerGui = Player:FindFirstChild("PlayerGui") if not playerGui then return end local screenGui = Instance.new("ScreenGui", playerGui) screenGui.Name = "Unified_Dialogue_Phase3" local label = Instance.new("TextLabel", screenGui) label.Size = UDim2.new(0.8, 0, 0.2, 0) label.Position = UDim2.new(0.5, 0, 0.1, 0) label.AnchorPoint = Vector2.new(0.5, 0.5) label.BackgroundTransparency = 1 label.TextScaled = true label.TextColor3 = Color3.new(1, 0, 0) label.TextStrokeTransparency = 0 label.TextStrokeColor3 = Color3.new(0, 0, 0) label.Text = DIALOGUE_TEXT label.Font = Enum.Font.Highway label.TextTransparency = 1 label.TextStrokeTransparency = 1 TweenService:Create(label, TweenInfo.new(0.5), { TextTransparency = 0, TextStrokeTransparency = 0 }):Play() task.wait(TEXT_DISPLAY_TIME) TweenService:Create(label, TweenInfo.new(0.5), { TextTransparency = 1, TextStrokeTransparency = 1 }):Play() task.wait(0.6) safeDestroy(screenGui) end local function playScreamer() for i = 0, 4 do task.delay(i * 3, function() local sound = Instance.new("Sound") sound.SoundId = SCREAMER_SOUND_ID sound.Volume = SCREAMER_VOLUME sound.Parent = Workspace sound:Play() sound.Ended:Connect(function() safeDestroy(sound) end) end) end end local function applyLighting() Lighting.Ambient = Color3.new(0.05, 0.05, 0.05) Lighting.OutdoorAmbient = Color3.new(0.05, 0.05, 0.05) Lighting.Brightness = 0 Lighting.TimeOfDay = "23:00:00" Lighting.FogColor = Color3.new(0.1, 0, 0) Lighting.FogEnd = 10000 Lighting.GlobalShadows = true end -- Non ripristiniamo la luce alla fine: la luce rimane oscurata per sempre dopo l'apparizione local visual, decal, redLight = createVisual() local spawnPos = HumanoidRootPart.Position - HumanoidRootPart.CFrame.LookVector * BLACK_FIGURE_DIST_FROM_PLAYER visual.CFrame = CFrame.new(spawnPos) applyLighting() task.spawn(showDialogue) playScreamer() task.wait(BLACK_FIGURE_DISPLAY_TIME) if decal then TweenService:Create(decal, TweenInfo.new(1), { Transparency = 1 }):Play() task.wait(1) end safeDestroy(redLight) safeDestroy(visual) warn("[Phase3] finished") end -------------------------------------------------------------------------------- -- PHASE 4 -------------------------------------------------------------------------------- local function phase4() if stopped then return end print("[Phase4] starting") local COUNTDOWN_START = 10 local BLACK_FIGURE_DIST_FROM_PLAYER = 15 local BLACK_FIGURE_VISUAL_WIDTH = 12 local BLACK_FIGURE_VISUAL_HEIGHT = 18 local BLACK_FIGURE_VISUAL_DEPTH = 0.1 local CAMERA_SHAKE_INTENSITY = 0.5 local SHAKE_DURATION = 3 local function showDialogueText(text, displayTime) local playerGui = Player:WaitForChild("PlayerGui") local screenGui = Instance.new("ScreenGui", playerGui) screenGui.Name = "Unified_Dialogue_Phase4" local textLabel = Instance.new("TextLabel", screenGui) textLabel.Size = UDim2.new(0.8, 0, 0.2, 0) textLabel.Position = UDim2.new(0.5, 0, 0.1, 0) textLabel.AnchorPoint = Vector2.new(0.5, 0.5) textLabel.BackgroundTransparency = 1 textLabel.TextScaled = true textLabel.TextColor3 = Color3.new(1, 0, 0) textLabel.TextStrokeTransparency = 0 textLabel.TextStrokeColor3 = Color3.new(0, 0, 0) textLabel.Text = text textLabel.Font = Enum.Font.Highway textLabel.TextTransparency = 1 TweenService:Create(textLabel, TweenInfo.new(0.5), { TextTransparency = 0, TextStrokeTransparency = 0 }):Play() task.wait(displayTime) TweenService:Create(textLabel, TweenInfo.new(0.5), { TextTransparency = 1, TextStrokeTransparency = 1 }):Play() task.wait(0.6) safeDestroy(screenGui) end local function createBlackFigure() local visualPart = Instance.new("Part") visualPart.Name = "Unified_BlackFigure_Phase4" visualPart.Anchored = true visualPart.CanCollide = false visualPart.Transparency = 1 visualPart.Size = Vector3.new(BLACK_FIGURE_VISUAL_WIDTH, BLACK_FIGURE_VISUAL_HEIGHT, BLACK_FIGURE_VISUAL_DEPTH) visualPart.BrickColor = BrickColor.new("Really Black") local decal = Instance.new("Decal") decal.Texture = BLACK_FIGURE_IMAGE_ID decal.Face = Enum.NormalId.Front decal.Transparency = 0 decal.Parent = visualPart local light = Instance.new("PointLight") light.Color = Color3.new(1, 0, 0) light.Range = 20 light.Brightness = 3 light.Parent = visualPart visualPart.Parent = Workspace return visualPart, decal, light end local cameraShakeConnection local function startShake(duration, intensity) local startTime = tick() local originalCFrame = Workspace.CurrentCamera.CFrame cameraShakeConnection = RunService.RenderStepped:Connect(function() local elapsed = tick() - startTime if elapsed < duration then local factor = 1 - (elapsed / duration) local offset = intensity * factor Workspace.CurrentCamera.CFrame = originalCFrame * CFrame.new( math.random(-offset * 100, offset * 100) / 100, math.random(-offset * 100, offset * 100) / 100, math.random(-offset * 100, offset * 100) / 100 ) else Workspace.CurrentCamera.CFrame = originalCFrame if cameraShakeConnection then cameraShakeConnection:Disconnect() cameraShakeConnection = nil end end end) end task.delay(0.0, function() print("[Phase4] effect 1 simulated") end) task.delay(3.0, function() print("[Phase4] effect 2 simulated") end) task.delay(7.0, function() print("[Phase4] effect 3 simulated") end) task.delay(10, function() local part, decal, light = createBlackFigure() local look = HumanoidRootPart.CFrame.LookVector local pos = HumanoidRootPart.Position + look * BLACK_FIGURE_DIST_FROM_PLAYER part.CFrame = CFrame.new(pos) local followConn = RunService.RenderStepped:Connect(function() if part and HumanoidRootPart then local posp = part.Position local lookC = CFrame.lookAt(posp, HumanoidRootPart.Position) part.CFrame = CFrame.new(posp) * (lookC - lookC.Position) end end) showDialogueText("let's see if your little hacks will save you now", 4) local playerGui = Player:WaitForChild("PlayerGui") local screenGui = Instance.new("ScreenGui", playerGui) screenGui.Name = "Unified_Countdown" local countLabel = Instance.new("TextLabel", screenGui) countLabel.Size = UDim2.new(0.5, 0, 0.3, 0) countLabel.Position = UDim2.new(0.5, 0, 0.5, 0) countLabel.AnchorPoint = Vector2.new(0.5, 0.5) countLabel.BackgroundTransparency = 1 countLabel.TextScaled = true countLabel.Font = Enum.Font.Highway countLabel.TextColor3 = Color3.new(1, 1, 1) countLabel.TextStrokeTransparency = 0 countLabel.TextStrokeColor3 = Color3.new(0, 0, 0) local countdown = COUNTDOWN_START or 10 for i = countdown, 0, -1 do countLabel.Text = tostring(i) if i == 0 then countLabel.TextColor3 = Color3.new(1, 0, 0) startShake(SHAKE_DURATION, CAMERA_SHAKE_INTENSITY) -- **QUI** all’interno dello “scatto dello 0”, attiva anche l’effetto allucinazione testi scrambleTexts() end task.wait(1) end safeDestroy(screenGui) if followConn and followConn.Connected then followConn:Disconnect() end if decal then TweenService:Create(decal, TweenInfo.new(1), { Transparency = 1 }):Play() task.wait(1) end safeDestroy(light) safeDestroy(part) if cameraShakeConnection and cameraShakeConnection.Connected then cameraShakeConnection:Disconnect() end print("[Phase4] finished") end) local waitCount = 0 while waitCount < 30 and not stopped do task.wait(1) waitCount = waitCount + 1 end end -------------------------------------------------------------------------------- -- PHASE 5 (modificata per accelerazione regolabile) -------------------------------------------------------------------------------- local function phase5() if stopped then return end print("[Phase5] starting") local INITIAL_FIGURE_DIST_FROM_PLAYER = 500 local INITIAL_FIGURE_HEIGHT_OFFSET = 20 local BLACK_FIGURE_VISUAL_WIDTH = 15 local BLACK_FIGURE_VISUAL_HEIGHT = 25 local BLACK_FIGURE_VISUAL_DEPTH = 0.1 local FIGURE_SPEED_INITIAL = 30 local FIGURE_SPEED_ACCELERATION = 0 -- puoi modificare questo valore local LIGHT_BRIGHTNESS_INTENSITY = 20 local LIGHT_RANGE_INTENSITY = 75 local CAMERA_SHAKE_INTENSITY_FINAL = 1.5 local SCREAM_SOUND_ID_LOCAL = SCREAMER_SOUND_ID local SCREAM_SOUND_VOLUME = 30 local SCREAM_INTERVAL = 0.05 local blackFigure = nil local screamSounds = {} local currentSpeed = FIGURE_SPEED_INITIAL local cameraShakeConn local figureMoveConn local screamLoopActive = true local phaseComplete = false local function createVisual() local part = Instance.new("Part") part.Name = "Unified_BlackFigure_Final_Phase5" part.Anchored = true part.CanCollide = false part.Transparency = 1 part.Size = Vector3.new(BLACK_FIGURE_VISUAL_WIDTH, BLACK_FIGURE_VISUAL_HEIGHT, BLACK_FIGURE_VISUAL_DEPTH) part.BrickColor = BrickColor.new("Really Black") local decal = Instance.new("Decal") decal.Texture = BLACK_FIGURE_IMAGE_ID decal.Face = Enum.NormalId.Front decal.Parent = part local light = Instance.new("PointLight") light.Color = Color3.new(1, 0, 0) light.Range = LIGHT_RANGE_INTENSITY light.Brightness = LIGHT_BRIGHTNESS_INTENSITY light.Parent = part part.Parent = Workspace return part end cameraShakeConn = RunService.RenderStepped:Connect(function() if Workspace.CurrentCamera then local offset = Vector3.new( math.random() * CAMERA_SHAKE_INTENSITY_FINAL * 2 - CAMERA_SHAKE_INTENSITY_FINAL, math.random() * CAMERA_SHAKE_INTENSITY_FINAL * 2 - CAMERA_SHAKE_INTENSITY_FINAL, math.random() * CAMERA_SHAKE_INTENSITY_FINAL * 2 - CAMERA_SHAKE_INTENSITY_FINAL ) Workspace.CurrentCamera.CFrame = Workspace.CurrentCamera.CFrame * CFrame.new(offset) end end) local screamCoroutine = task.spawn(function() while screamLoopActive and not stopped do local s = Instance.new("Sound") s.SoundId = SCREAM_SOUND_ID_LOCAL s.Volume = SCREAM_SOUND_VOLUME s.Looped = false s.Parent = HumanoidRootPart s:Play() table.insert(screamSounds, s) task.wait(SCREAM_INTERVAL) end end) blackFigure = createVisual() local dir = HumanoidRootPart.CFrame.LookVector local startPos = HumanoidRootPart.Position - dir * INITIAL_FIGURE_DIST_FROM_PLAYER startPos = Vector3.new(startPos.X, startPos.Y + INITIAL_FIGURE_HEIGHT_OFFSET, startPos.Z) blackFigure.CFrame = CFrame.new(startPos, HumanoidRootPart.Position) figureMoveConn = RunService.Heartbeat:Connect(function(dt) if not blackFigure or stopped then return end -- aggiorna velocità con accelerazione currentSpeed = currentSpeed + FIGURE_SPEED_ACCELERATION * dt if not blackFigure or not HumanoidRootPart then return end local dirToPlayer = (HumanoidRootPart.Position - blackFigure.Position) if dirToPlayer.Magnitude > 0 then dirToPlayer = dirToPlayer.Unit end local newPos = blackFigure.Position + dirToPlayer * currentSpeed * dt blackFigure.CFrame = CFrame.new(newPos, HumanoidRootPart.Position) if (blackFigure.Position - HumanoidRootPart.Position).Magnitude < (BLACK_FIGURE_VISUAL_WIDTH / 2 + (Humanoid and Humanoid.HipHeight or 2) + 2) then print("[Phase5] player captured -> proceed to phase6") screamLoopActive = false if screamCoroutine then task.cancel(screamCoroutine) end if cameraShakeConn and cameraShakeConn.Connected then cameraShakeConn:Disconnect() end if figureMoveConn and figureMoveConn.Connected then figureMoveConn:Disconnect() end for _, s in ipairs(screamSounds) do if s and s:IsA("Sound") then s:Stop() safeDestroy(s) end end safeDestroy(blackFigure) phaseComplete = true return end end) while not stopped and not phaseComplete do task.wait(1) end screamLoopActive = false if screamCoroutine then pcall(task.cancel, screamCoroutine) end if cameraShakeConn and cameraShakeConn.Connected then cameraShakeConn:Disconnect() end if figureMoveConn and figureMoveConn.Connected then figureMoveConn:Disconnect() end for _, s in ipairs(screamSounds) do if s and s:IsA("Sound") then safeDestroy(s) end end safeDestroy(blackFigure) print("[Phase5] finished") end -------------------------------------------------------------------------------- -- PHASE 6 -------------------------------------------------------------------------------- local function phase6() if stopped then return end print("[Phase6] starting (kick)") local BAN_MESSAGE = "YOU HAVE BEEN Caught =)" local PlayerLocal = Players.LocalPlayer if PlayerLocal then pcall(function() PlayerLocal:Kick(BAN_MESSAGE) end) else warn("[Phase6] no LocalPlayer, cannot kick") end end -------------------------------------------------------------------------------- -- MAIN: run phases sequentially -------------------------------------------------------------------------------- task.spawn(function() pcall(function() phase1() task.wait(1) phase2() task.wait(0.5) phase3() task.wait(0.5) phase4() task.wait(12) phase5() task.wait(1) phase6() end) end) local function stopAll() stopped = true if charAddedConnection and charAddedConnection.Connected then charAddedConnection:Disconnect() end end _G.UnifiedHorrorStop = stopAll print("Unified Horror Sequence (phases 1..6) loaded.")