Mobile Ready

Duel TP

Tp Player When Hit

Updated 3/14/2026
0 Likes
3 Views
0 Downloads

Script Source


--// Source Buyer TP + Medusa Mode
--// Updated: 3-step anti-ragdoll TP for both left & right sides
--// Medusa Mode: Only performs first 2 TPs when enabled
repeat task.wait() until game:IsLoaded()
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
-- ────────────────────────────────────────────────
-- Anti-Ragdoll + 3-Step Return Positions
-- ────────────────────────────────────────────────
-- RIGHT side sequence
local RIGHT_STEP_1 = Vector3.new(-468, -6, 41) -- new starting point
local RIGHT_STEP_2 = Vector3.new(-473, -6, 24) -- old step 1
local RIGHT_STEP_3 = Vector3.new(-484, -4, 20) -- old step 2
-- LEFT side sequence
local LEFT_STEP_1 = Vector3.new(-469, -6, 78) -- new starting point
local LEFT_STEP_2 = Vector3.new(-471, -6, 96) -- old step 1
local LEFT_STEP_3 = Vector3.new(-484, -4, 99) -- old step 2
local ReturnLeftActive = true
local ReturnRightActive = false
local connections = {}
local justTeleported = false
local TP_COOLDOWN = 0.2 -- delay after final TP
local medusaMode = false -- New: Medusa mode flag
local function cleanup()
    for _, c in pairs(connections) do
        pcall(function() c:Disconnect() end)
    end
    connections = {}
end
local function isRagdolled(char)
    if not char then return false end
    local hum = char:FindFirstChildOfClass("Humanoid")
    if not hum then return false end
   
    local state = hum:GetState()
    if state == Enum.HumanoidStateType.Physics or
       state == Enum.HumanoidStateType.Ragdoll or
       state == Enum.HumanoidStateType.FallingDown then
        return true
    end
   
    for _, obj in ipairs(char:GetDescendants()) do
        if obj:IsA("Motor6D") and obj.Enabled == false then
            return true
        end
    end
   
    return false
end
local function forceExitRagdoll(char)
    if not char then return end
    if justTeleported then return end
   
    justTeleported = true
   
    local root = char:FindFirstChild("HumanoidRootPart")
    local hum = char:FindFirstChildOfClass("Humanoid")
    if not (root and hum) then
        task.delay(TP_COOLDOWN, function() justTeleported = false end)
        return
    end
   
    -- Select side
    local isLeft = ReturnLeftActive
    local step1 = isLeft and LEFT_STEP_1 or RIGHT_STEP_1
    local step2 = isLeft and LEFT_STEP_2 or RIGHT_STEP_2
    local step3 = isLeft and LEFT_STEP_3 or RIGHT_STEP_3
   
    -- Step 1: Initial recovery TP (slightly above)
    root.CFrame = CFrame.new(step1 + Vector3.new(0, 3, 0))
    root.Velocity = Vector3.new(0,0,0)
    root.AssemblyLinearVelocity = Vector3.new(0,0,0)
    root.AssemblyAngularVelocity = Vector3.new(0,0,0)
   
    -- Force recovery
    hum:ChangeState(Enum.HumanoidStateType.GettingUp)
    task.wait(0.04)
    hum:ChangeState(Enum.HumanoidStateType.Running)
    camera.CameraSubject = hum
   
    -- Re-enable Motor6D
    for _, obj in ipairs(char:GetDescendants()) do
        if obj:IsA("Motor6D") and not obj.Enabled then
            obj.Enabled = true
        end
    end
   
    -- Step 2: Intermediate TP
    task.spawn(function()
        task.wait(0.07)
        if root and root.Parent then
            root.CFrame = CFrame.new(step2 + Vector3.new(0, 2.5, 0))
            root.Velocity = Vector3.new(0,0,0)
            root.AssemblyLinearVelocity = Vector3.new(0,0,0)
        end
    end)
   
    -- Step 3: Final TP (skipped if Medusa mode is on)
    if not medusaMode then
        task.spawn(function()
            task.wait(0.14) -- total ~0.21s from start
            if root and root.Parent then
                root.CFrame = CFrame.new(step3 + Vector3.new(0, 2, 0))
                root.Velocity = Vector3.new(0,0,0)
                root.AssemblyLinearVelocity = Vector3.new(0,0,0)
            end
        end)
    end
   
    -- Allow next action after cooldown
    task.delay(TP_COOLDOWN, function()
        justTeleported = false
    end)
end
-- Main loop
local hb = RunService.Heartbeat:Connect(function()
    local char = player.Character
    if char and isRagdolled(char) then
        forceExitRagdoll(char)
       
        -- Retry if still ragdolled
        task.delay(0.2, function()
            if char and char.Parent and isRagdolled(char) then
                forceExitRagdoll(char)
            end
        end)
    end
end)
table.insert(connections, hb)
-- Handle respawn
player.CharacterAdded:Connect(function(newChar)
    task.wait(0.4)
    cleanup()
   
    local newHb = RunService.Heartbeat:Connect(function()
        if newChar and newChar.Parent and isRagdolled(newChar) then
            forceExitRagdoll(newChar)
        end
    end)
   
    table.insert(connections, newHb)
end)
-- ────────────────────────────────────────────────
-- Midnight Purple Color Palette (80% Black, 20% Purple)
local PURPLE_ACCENT = Color3.fromRGB(147, 51, 234)  -- Vibrant purple accent
local DARK_BG = Color3.fromRGB(20, 20, 25)          -- Almost black background
local HEADER_BG = Color3.fromRGB(30, 25, 40)        -- Slightly lighter purple-black
local BUTTON_OFF = Color3.fromRGB(35, 30, 45)       -- Dark purple-grey
local BUTTON_ON = Color3.fromRGB(147, 51, 234)      -- Purple when active
local TEXT_WHITE = Color3.fromRGB(240, 240, 255)    -- Slight purple tint white
local TEXT_GREY = Color3.fromRGB(180, 170, 200)     -- Purple-grey text
local DISCORD_PURPLE = Color3.fromRGB(88, 101, 242)
-- ────────────────────────────────────────────────
-- Enhanced GUI
-- ────────────────────────────────────────────────
local sg = Instance.new("ScreenGui")
sg.Name = "Source BuyerTP"
sg.ResetOnSpawn = false
sg.Parent = player:WaitForChild("PlayerGui")
local frame = Instance.new("Frame", sg)
frame.Size = UDim2.new(0, 260, 0, 300)  -- Smaller GUI
frame.Position = UDim2.new(0.5, -130, 0.5, -150)
frame.BackgroundColor3 = DARK_BG
frame.BackgroundTransparency = 0.05
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
local frameCorner = Instance.new("UICorner", frame)
frameCorner.CornerRadius = UDim.new(0, 12)
local frameStroke = Instance.new("UIStroke", frame)
frameStroke.Color = PURPLE_ACCENT
frameStroke.Thickness = 2
frameStroke.Transparency = 0.3
local headerBg = Instance.new("Frame", frame)
headerBg.Size = UDim2.new(1, 0, 0, 85)
headerBg.BackgroundColor3 = HEADER_BG
headerBg.BorderSizePixel = 0
local headerCorner = Instance.new("UICorner", headerBg)
headerCorner.CornerRadius = UDim.new(0, 12)
local headerBottomCover = Instance.new("Frame", headerBg)
headerBottomCover.Size = UDim2.new(1, 0, 0, 12)
headerBottomCover.Position = UDim2.new(0, 0, 1, -12)
headerBottomCover.BackgroundColor3 = HEADER_BG
headerBottomCover.BorderSizePixel = 0
local title = Instance.new("TextLabel", headerBg)
title.Size = UDim2.new(1, -50, 0, 35)
title.Position = UDim2.new(0, 0, 0, 8)
title.BackgroundTransparency = 1
title.Text = "Kirat Hub Duel"
title.Font = Enum.Font.GothamBlack
title.TextSize = 24
title.TextColor3 = PURPLE_ACCENT
title.TextXAlignment = Enum.TextXAlignment.Center
local credit = Instance.new("TextLabel", headerBg)
credit.Size = UDim2.new(1, -50, 0, 16)
credit.Position = UDim2.new(0, 0, 0, 42)
credit.BackgroundTransparency = 1
credit.Text = "Made By Kirat Hub Owner"
credit.TextColor3 = TEXT_GREY
credit.TextSize = 10
credit.Font = Enum.Font.Gotham
credit.TextXAlignment = Enum.TextXAlignment.Center
local discordContainer = Instance.new("Frame", headerBg)
discordContainer.Size = UDim2.new(1, -16, 0, 22)
discordContainer.Position = UDim2.new(0, 8, 0, 60)
discordContainer.BackgroundTransparency = 1
local discordLabel = Instance.new("TextLabel", discordContainer)
discordLabel.Size = UDim2.new(0, 50, 1, 0)
discordLabel.BackgroundTransparency = 1
discordLabel.Text = "Discord:"
discordLabel.Font = Enum.Font.GothamBold
discordLabel.TextSize = 10
discordLabel.TextColor3 = DISCORD_PURPLE
discordLabel.TextXAlignment = Enum.TextXAlignment.Left
local linksContainer = Instance.new("Frame", discordContainer)
linksContainer.Size = UDim2.new(1, -55, 1, 0)
linksContainer.Position = UDim2.new(0, 55, 0, 0)
linksContainer.BackgroundTransparency = 1
local discordBtn = Instance.new("TextButton", linksContainer)
discordBtn.Size = UDim2.new(1, 0, 1, 0)
discordBtn.Position = UDim2.new(0, 0, 0, 0)
discordBtn.BackgroundColor3 = DISCORD_PURPLE
discordBtn.BackgroundTransparency = 0.15
discordBtn.Text = "TAP FOR DISCORD"
discordBtn.Font = Enum.Font.GothamSemibold
discordBtn.TextSize = 10
discordBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
discordBtn.BorderSizePixel = 0
discordBtn.AutoButtonColor = false
local discordBtnCorner = Instance.new("UICorner", discordBtn)
discordBtnCorner.CornerRadius = UDim.new(0, 6)
local discordBtnStroke = Instance.new("UIStroke", discordBtn)
discordBtnStroke.Color = DISCORD_PURPLE
discordBtnStroke.Thickness = 1
discordBtnStroke.Transparency = 0.5
discordBtn.MouseEnter:Connect(function()
    discordBtn.BackgroundTransparency = 0
    discordBtnStroke.Transparency = 0.2
end)
discordBtn.MouseLeave:Connect(function()
    discordBtn.BackgroundTransparency = 0.15
    discordBtnStroke.Transparency = 0.5
end)
discordBtn.MouseButton1Click:Connect(function()
    setclipboard("https://discord.gg/8dHxTB7bbN")
    discordBtn.Text = "✓ Copied!"
    task.wait(1.5)
    discordBtn.Text = "TAP TO COPY DISCORD"
end)
local close = Instance.new("TextButton", frame)
close.Size = UDim2.new(0, 28, 0, 28)
close.Position = UDim2.new(1, -34, 0, 6)
close.BackgroundColor3 = Color3.fromRGB(200, 60, 60)
close.Text = "X"
close.TextColor3 = Color3.new(1,1,1)
close.Font = Enum.Font.GothamBold
close.TextSize = 15
close.BorderSizePixel = 0
close.AutoButtonColor = false
local closeCorner = Instance.new("UICorner", close)
closeCorner.CornerRadius = UDim.new(1,0)
close.MouseEnter:Connect(function()
    close.BackgroundColor3 = Color3.fromRGB(230, 80, 80)
end)
close.MouseLeave:Connect(function()
    close.BackgroundColor3 = Color3.fromRGB(200, 60, 60)
end)
close.MouseButton1Click:Connect(function()
    sg:Destroy()
    cleanup()
end)
local separator = Instance.new("Frame", frame)
separator.Size = UDim2.new(0.9, 0, 0, 1)
separator.Position = UDim2.new(0.05, 0, 0, 90)
separator.BackgroundColor3 = PURPLE_ACCENT
separator.BackgroundTransparency = 0.6
separator.BorderSizePixel = 0
local y = 102
local function createToggle(label, default, callback)
    local tog = Instance.new("TextButton", frame)
    tog.Size = UDim2.new(0.88, 0, 0, 38)
    tog.Position = UDim2.new(0.06, 0, 0, y)
    tog.BackgroundColor3 = default and BUTTON_ON or BUTTON_OFF
    tog.Text = label
    tog.Font = Enum.Font.GothamSemibold
    tog.TextSize = 13
    tog.TextColor3 = default and Color3.new(1,1,1) or TEXT_WHITE
    tog.BorderSizePixel = 0
    tog.AutoButtonColor = false
   
    local togCorner = Instance.new("UICorner", tog)
    togCorner.CornerRadius = UDim.new(0, 8)
   
    local togStroke = Instance.new("UIStroke", tog)
    togStroke.Color = default and PURPLE_ACCENT or Color3.fromRGB(60, 55, 75)
    togStroke.Thickness = 1.5
    togStroke.Transparency = default and 0.2 or 0.7
   
    local state = default
   
    tog.MouseEnter:Connect(function()
        if not state then
            tog.BackgroundColor3 = Color3.fromRGB(50, 45, 60)
            togStroke.Transparency = 0.5
        end
    end)
   
    tog.MouseLeave:Connect(function()
        if not state then
            tog.BackgroundColor3 = BUTTON_OFF
            togStroke.Transparency = 0.7
        end
    end)
   
    tog.MouseButton1Click:Connect(function()
        state = not state
        tog.BackgroundColor3 = state and BUTTON_ON or BUTTON_OFF
        tog.TextColor3 = state and Color3.new(1,1,1) or TEXT_WHITE
        togStroke.Color = state and PURPLE_ACCENT or Color3.fromRGB(60, 55, 75)
        togStroke.Transparency = state and 0.2 or 0.7
        callback(state)
    end)
   
    y = y + 45
    return function(newState)
        state = newState
        tog.BackgroundColor3 = newState and BUTTON_ON or BUTTON_OFF
        tog.TextColor3 = newState and Color3.new(1,1,1) or TEXT_WHITE
        togStroke.Color = newState and PURPLE_ACCENT or Color3.fromRGB(60, 55, 75)
        togStroke.Transparency = newState and 0.2 or 0.7
    end
end
local setLeft = createToggle("Return-Left", ReturnLeftActive, function(v)
    if v then
        ReturnLeftActive = true
        ReturnRightActive = false
        setRight(false)
    else
        ReturnLeftActive = false
    end
end)
local setRight = createToggle("Return->Right", ReturnRightActive, function(v)
    if v then
        ReturnRightActive = true
        ReturnLeftActive = false
        setLeft(false)
    else
        ReturnRightActive = false
    end
end)
local setMedusa = createToggle("Medusa Mode", false, function(v)
    medusaMode = v
end)
local status = Instance.new("TextLabel", frame)
status.Size = UDim2.new(0.88, 0, 0, 24)
status.Position = UDim2.new(0.06, 0, 0, y + 3)
status.BackgroundTransparency = 1
status.Text = "Ready"
status.TextColor3 = PURPLE_ACCENT
status.TextSize = 12
status.Font = Enum.Font.GothamSemibold
status.TextXAlignment = Enum.TextXAlignment.Center

Comments

Loading comments...