Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- SERVICES
- local Players = game:GetService("Players")
- local TweenService = game:GetService("TweenService")
- local RunService = game:GetService("RunService")
- local LocalPlayer = Players.LocalPlayer
- -- COLORS (Updated to Reaper theme)
- local pitchBlack = Color3.fromRGB(5, 5, 10)
- local bloodGlow = Color3.fromRGB(170, 0, 0)
- local ghostWhite = Color3.fromRGB(255, 255, 255)
- local dimGray = Color3.fromRGB(30, 30, 30)
- local standardBtnColor = dimGray
- local darkGold = Color3.fromRGB(180, 140, 30)
- local whiteText = ghostWhite
- local defaultBtnColor = pitchBlack
- -- STATES
- local toggleOpen = false
- local loopList = {}
- local playerButtons = {}
- local speedBoostOn = false
- local antiLagOn = false
- local frontLoopMode = false
- local loopbringAllActive = false
- local attachModeOn = false
- local twoSidePositionOn = false
- local myDeaths = 0
- -- KILL TRACKING DATA
- local killCounts = {}
- local damageTracker = {}
- -- GUI
- local gui = Instance.new("ScreenGui", LocalPlayer:WaitForChild("PlayerGui"))
- gui.Name = "ReaperLoopbringUI"
- gui.ResetOnSpawn = false
- gui.IgnoreGuiInset = true
- -- Toggle Button (Updated to Reaper theme)
- local toggle = Instance.new("TextButton", gui)
- toggle.Size = UDim2.new(0, 130, 0, 30)
- toggle.Position = UDim2.new(0, 10, 0, 60) -- Positioned on the left side, pulled down more
- toggle.BackgroundColor3 = bloodGlow
- toggle.TextColor3 = ghostWhite
- toggle.Font = Enum.Font.Antique
- toggle.Text = "☠ Reaper Toll ☠"
- toggle.TextScaled = true
- toggle.BorderSizePixel = 0
- toggle.ZIndex = 10
- -- Floating Words (Reaper theme effect)
- local horrorWords = {"DEATH", "SOULS", "FEAR"}
- for i = 1, 3 do
- local word = horrorWords[i]
- local lbl = Instance.new("TextLabel", toggle)
- lbl.Size = UDim2.new(0, 35, 0, 12)
- lbl.BackgroundTransparency = 1
- lbl.TextColor3 = Color3.fromRGB(255, 50, 50) -- Bright red color
- lbl.Text = word
- lbl.Font = Enum.Font.GothamBlack
- lbl.TextSize = 8
- lbl.TextScaled = false
- lbl.Rotation = math.random(-15, 15) -- Random slight rotation
- lbl.ZIndex = 12
- -- Position words below the toggle button
- local xOffset = (i - 2) * 35 -- Space them out horizontally
- lbl.Position = UDim2.new(0.5, xOffset - 17, 1, 2) -- Below toggle (y = 1 + 2 offset)
- -- Add a subtle glow effect
- lbl.TextStrokeTransparency = 0.5
- lbl.TextStrokeColor3 = Color3.fromRGB(100, 0, 0)
- end
- -- Main Frame (Updated to Reaper theme) - Positioned on the left side
- local frame = Instance.new("Frame", gui)
- frame.Size = UDim2.new(0, 230, 0, 340)
- frame.Position = UDim2.new(0, 10, 0, 100) -- Positioned on the left side, below the toggle
- frame.BackgroundColor3 = pitchBlack
- frame.BorderSizePixel = 0
- frame.Visible = false
- frame.Active = true
- frame.Draggable = true
- -- Title (Updated to Reaper theme)
- local title = Instance.new("TextLabel", frame)
- title.Size = UDim2.new(1, -20, 0, 30)
- title.Position = UDim2.new(0, 10, 0, 5)
- title.BackgroundTransparency = 1
- title.Text = "☠ Psycho Loopbring ☠"
- title.TextColor3 = bloodGlow
- title.TextScaled = true
- title.Font = Enum.Font.Fondamento
- title.TextXAlignment = Enum.TextXAlignment.Left
- -- Death Counter (Updated to Reaper theme)
- local myDeathLabel = Instance.new("TextLabel", frame)
- myDeathLabel.Size = UDim2.new(1, -20, 0, 30)
- myDeathLabel.Position = UDim2.new(0, 10, 0, 35)
- myDeathLabel.BackgroundTransparency = 1
- myDeathLabel.Text = "☠ My Deaths: 0"
- myDeathLabel.TextColor3 = bloodGlow
- myDeathLabel.TextScaled = true
- myDeathLabel.Font = Enum.Font.Antique
- myDeathLabel.TextXAlignment = Enum.TextXAlignment.Left
- -- Scroll Panel
- local scroll = Instance.new("ScrollingFrame", frame)
- scroll.Position = UDim2.new(0, 10, 0, 70)
- scroll.Size = UDim2.new(1, -20, 1, -80)
- scroll.BackgroundTransparency = 1
- scroll.BorderSizePixel = 0
- scroll.CanvasSize = UDim2.new(0, 0, 0, 0)
- scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
- scroll.ScrollBarThickness = 5
- scroll.ClipsDescendants = true
- local layout = Instance.new("UIListLayout", scroll)
- layout.SortOrder = Enum.SortOrder.LayoutOrder
- layout.Padding = UDim.new(0, 3)
- -- UTILITIES
- local function tweenColor(object, color, duration)
- TweenService:Create(object, TweenInfo.new(duration or 0.25), {BackgroundColor3 = color}):Play()
- end
- local function setNoClip(character, state)
- for _, part in pairs(character:GetDescendants()) do
- if part:IsA("BasePart") then
- part.CanCollide = not state
- end
- end
- end
- -- IMPROVED KILL TRACKING SYSTEM (FIXED)
- local function initializeKillTracking(player)
- if not killCounts[player.Name] then
- killCounts[player.Name] = 0
- end
- local function setupCharacterTracking(character)
- local humanoid = character:WaitForChild("Humanoid", 10)
- if not humanoid then return end
- -- Track damage dealt to this player
- local lastHealth = humanoid.Health
- local damageConnection
- damageConnection = humanoid.HealthChanged:Connect(function(newHealth)
- if newHealth < lastHealth and newHealth > 0 then
- -- Player took damage, mark us as potential killer
- damageTracker[player.Name] = {
- attacker = LocalPlayer,
- timestamp = tick(),
- lastDamage = lastHealth - newHealth
- }
- end
- lastHealth = newHealth
- end)
- -- Clean up on character removal
- character.AncestryChanged:Connect(function()
- if not character.Parent then
- if damageConnection then
- damageConnection:Disconnect()
- end
- damageTracker[player.Name] = nil
- end
- end)
- -- SINGLE KILL DETECTION METHOD - Only use creator tag
- humanoid.Died:Connect(function()
- wait(0.1) -- Small delay to let creator tag appear
- local creatorTag = humanoid:FindFirstChild("creator")
- if creatorTag and creatorTag.Value == LocalPlayer then
- killCounts[player.Name] = killCounts[player.Name] + 1
- -- Update kill label
- local button = playerButtons[player.Name]
- if button then
- local killLabel = button:FindFirstChild("KillLabel")
- if killLabel then
- killLabel.Text = "Kills: " .. killCounts[player.Name]
- end
- end
- end
- end)
- end
- -- Setup for current character
- if player.Character then
- setupCharacterTracking(player.Character)
- end
- -- Setup for future characters
- player.CharacterAdded:Connect(setupCharacterTracking)
- end
- -- TOGGLE UI
- toggle.MouseButton1Click:Connect(function()
- toggleOpen = not toggleOpen
- frame.Visible = toggleOpen
- -- Update floating words when toggle is opened
- if toggleOpen then
- for i, child in pairs(toggle:GetChildren()) do
- if child:IsA("TextLabel") then
- local word = child.Text
- if word == "DEATH" then
- child.Text = "DEATH"
- elseif word == "SOULS" then
- child.Text = "SOULS"
- elseif word == "FEAR" then
- child.Text = "FEAR"
- end
- end
- end
- end
- end)
- -- SPEED BOOST BUTTON
- local speedButton = Instance.new("TextButton", scroll)
- speedButton.Size = UDim2.new(1, 0, 0, 28)
- speedButton.BackgroundColor3 = standardBtnColor
- speedButton.TextColor3 = whiteText
- speedButton.Font = Enum.Font.GothamBold
- speedButton.TextSize = 13
- speedButton.Text = "Speed Boost"
- speedButton.LayoutOrder = 0
- local function applySpeedBoost(state)
- local char = LocalPlayer.Character
- if char then
- local humanoid = char:FindFirstChildOfClass("Humanoid")
- if humanoid then
- humanoid.WalkSpeed = state and 120 or 16
- humanoid.JumpPower = state and 120 or 50
- tweenColor(speedButton, state and darkGold or standardBtnColor)
- end
- end
- end
- speedButton.MouseButton1Click:Connect(function()
- speedBoostOn = not speedBoostOn
- applySpeedBoost(speedBoostOn)
- end)
- -- LOOPBRING POSITION TOGGLE
- local loopbringToggleButton = Instance.new("TextButton", scroll)
- loopbringToggleButton.Size = UDim2.new(1, 0, 0, 28)
- loopbringToggleButton.BackgroundColor3 = standardBtnColor
- loopbringToggleButton.TextColor3 = whiteText
- loopbringToggleButton.Font = Enum.Font.GothamBold
- loopbringToggleButton.TextSize = 13
- loopbringToggleButton.Text = "Toggle Loopbring Position"
- loopbringToggleButton.LayoutOrder = 1
- loopbringToggleButton.MouseButton1Click:Connect(function()
- frontLoopMode = not frontLoopMode
- tweenColor(loopbringToggleButton, frontLoopMode and darkGold or standardBtnColor)
- end)
- -- LOOPBRING ALL BUTTON
- local loopbringAllButton = Instance.new("TextButton", scroll)
- loopbringAllButton.Size = UDim2.new(1, 0, 0, 28)
- loopbringAllButton.BackgroundColor3 = standardBtnColor
- loopbringAllButton.TextColor3 = whiteText
- loopbringAllButton.Font = Enum.Font.GothamBold
- loopbringAllButton.TextSize = 13
- loopbringAllButton.Text = "Loopbring All"
- loopbringAllButton.LayoutOrder = 2
- loopbringAllButton.MouseButton1Click:Connect(function()
- loopbringAllActive = not loopbringAllActive
- tweenColor(loopbringAllButton, loopbringAllActive and darkGold or standardBtnColor)
- for _, player in pairs(Players:GetPlayers()) do
- if player ~= LocalPlayer and playerButtons[player.Name] then
- loopList[player.Name] = loopbringAllActive or nil
- tweenColor(playerButtons[player.Name], loopbringAllActive and darkGold or defaultBtnColor)
- end
- end
- end)
- -- TWO SIDE POSITION BUTTON
- local twoSidePositionButton = Instance.new("TextButton", scroll)
- twoSidePositionButton.Size = UDim2.new(1, 0, 0, 28)
- twoSidePositionButton.BackgroundColor3 = standardBtnColor
- twoSidePositionButton.TextColor3 = whiteText
- twoSidePositionButton.Font = Enum.Font.GothamBold
- twoSidePositionButton.TextSize = 13
- twoSidePositionButton.Text = "2 Side Position: OFF"
- twoSidePositionButton.LayoutOrder = 2.5
- twoSidePositionButton.MouseButton1Click:Connect(function()
- twoSidePositionOn = not twoSidePositionOn
- tweenColor(twoSidePositionButton, twoSidePositionOn and darkGold or standardBtnColor)
- twoSidePositionButton.Text = twoSidePositionOn and "2 Side Position: ON" or "2 Side Position: OFF"
- end)
- -- ATTACH MODE BUTTON
- local attachModeButton = Instance.new("TextButton", scroll)
- attachModeButton.Size = UDim2.new(1, 0, 0, 28)
- attachModeButton.BackgroundColor3 = standardBtnColor
- attachModeButton.TextColor3 = whiteText
- attachModeButton.Font = Enum.Font.GothamBold
- attachModeButton.TextSize = 13
- attachModeButton.Text = "Attach Mode: OFF"
- attachModeButton.LayoutOrder = 3
- attachModeButton.MouseButton1Click:Connect(function()
- attachModeOn = not attachModeOn
- attachModeButton.Text = attachModeOn and "Attach Mode: ON" or "Attach Mode: OFF"
- tweenColor(attachModeButton, attachModeOn and darkGold or standardBtnColor)
- end)
- -- ADD PLAYER BUTTONS
- local function addPlayerButton(targetPlayer)
- if targetPlayer == LocalPlayer then return end
- local button = Instance.new("TextButton")
- button.Size = UDim2.new(1, 0, 0, 28)
- button.BackgroundColor3 = defaultBtnColor
- button.TextColor3 = whiteText
- button.Font = Enum.Font.GothamBold
- button.TextSize = 13
- button.Text = targetPlayer.Name
- button.LayoutOrder = 100
- button.Parent = scroll
- local killLabel = Instance.new("TextLabel", button)
- killLabel.Name = "KillLabel"
- killLabel.Size = UDim2.new(0, 60, 1, 0)
- killLabel.Position = UDim2.new(1, -65, 0, 0)
- killLabel.BackgroundTransparency = 1
- killLabel.TextColor3 = Color3.new(1, 0.2, 0.2)
- killLabel.Font = Enum.Font.GothamBold
- killLabel.TextSize = 12
- killLabel.TextXAlignment = Enum.TextXAlignment.Right
- killLabel.Text = "Kills: 0"
- -- Initialize kill tracking for this player
- initializeKillTracking(targetPlayer)
- button.MouseButton1Click:Connect(function()
- local name = targetPlayer.Name
- loopList[name] = not loopList[name]
- tweenColor(button, loopList[name] and darkGold or defaultBtnColor)
- end)
- playerButtons[targetPlayer.Name] = button
- end
- -- CLEANUP ON PLAYER LEAVE
- Players.PlayerRemoving:Connect(function(player)
- if playerButtons[player.Name] then
- playerButtons[player.Name]:Destroy()
- playerButtons[player.Name] = nil
- end
- killCounts[player.Name] = nil
- damageTracker[player.Name] = nil
- loopList[player.Name] = nil
- end)
- -- INIT ALL PLAYERS
- for _, p in ipairs(Players:GetPlayers()) do
- addPlayerButton(p)
- end
- Players.PlayerAdded:Connect(addPlayerButton)
- -- CHARACTER SPAWN (Updated to match first script)
- LocalPlayer.CharacterAdded:Connect(function(char)
- if speedBoostOn then
- local humanoid = char:WaitForChild("Humanoid", 5)
- if humanoid then
- applySpeedBoost(true)
- end
- end
- -- Death tracking
- local humanoid = char:WaitForChild("Humanoid", 5)
- if humanoid then
- humanoid.Died:Connect(function()
- myDeaths = myDeaths + 1
- myDeathLabel.Text = "☠ My Deaths: " .. myDeaths
- end)
- end
- end)
- -- Two Side Position loopbring function
- local function loopbringTwoSidePosition(myHRP, activeTargets)
- for i, char in ipairs(activeTargets) do
- local hrp = char:FindFirstChild("HumanoidRootPart")
- if hrp then
- setNoClip(char, true)
- hrp.Velocity = Vector3.new(0, 0, 0)
- hrp.RotVelocity = Vector3.new(0, 0, 0)
- local side = (i % 2 == 1) and -1 or 1
- local targetPos = Vector3.new(
- myHRP.Position.X + (myHRP.CFrame.RightVector * (side * 1)).X + (myHRP.CFrame.LookVector * 2).X,
- myHRP.Position.Y,
- myHRP.Position.Z + (myHRP.CFrame.RightVector * (side * 1)).Z + (myHRP.CFrame.LookVector * 2).Z
- )
- hrp.CFrame = CFrame.new(targetPos) * CFrame.Angles(0, math.rad(myHRP.Orientation.Y), 0)
- end
- end
- end
- -- LOOPBRING CORE LOOP
- task.spawn(function()
- while true do
- local myHRP = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
- if myHRP then
- local activeTargets = {}
- for name, active in pairs(loopList) do
- if active then
- local target = Players:FindFirstChild(name)
- if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then
- table.insert(activeTargets, target.Character)
- end
- end
- end
- if twoSidePositionOn and #activeTargets > 0 then
- loopbringTwoSidePosition(myHRP, activeTargets)
- else
- for name, active in pairs(loopList) do
- if active then
- local target = Players:FindFirstChild(name)
- if target and target.Character then
- local hrp = target.Character:FindFirstChild("HumanoidRootPart")
- if hrp then
- setNoClip(target.Character, true)
- hrp.Velocity = Vector3.zero
- hrp.RotVelocity = Vector3.zero
- local offset
- if attachModeOn then
- myHRP.CFrame = hrp.CFrame
- else
- if frontLoopMode then
- offset = myHRP.CFrame.LookVector * 3 + Vector3.new(0, 1, 0)
- else
- offset = myHRP.CFrame.RightVector * 3 + myHRP.CFrame.LookVector + Vector3.new(0, 1, 0)
- end
- hrp.CFrame = myHRP.CFrame + offset
- end
- end
- end
- end
- end
- end
- end
- task.wait(0)
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement