USER
Make an advanced half-swing combo roblox saber showdown script - that lets you half-swing and combo faster. With swing delay, and feint.
Reference File:
https://raw.githubusercontent.com/Synarcy/SaberShowdown/refs/heads/main/AutoBlockSS.lua
Reference Script (FOR REFERENCE ONLY):
```
local animIDs = {
["RightSwing"] = 12625839385,
["OverheadSwing"] = 12625841878,
["LeftSwing"] = 12625843823,
["BackLeftSwing"] = 12625846167,
["FrontRightSwing"] = 12625848489,
["BackRightSwing"] = 12625851115,
["FrontLeftSwing"] = 12625853257,
["RightBlock"] = 12625856098,
["LeftBlock"] = 12625858434,
["FrontLeftBlock"] = 12625860439,
["FrontRightBlock"] = 12625862519,
["FrontBlock"] = 12625864413,
["BackLeftBlock"] = 12625866538,
["BackRightBlock"] = 12625868684,
["Grab"] = 12625870437,
["Slap"] = 12625891544,
["SlappedLegs"] = 12671715182,
["SlappedArms"] = 12625896358,
["KickUp"] = 12625897944,
["KickBack"] = 12625899752,
["LeftRoll"] = 12625901874,
["RightRoll"] = 12625904322,
["Aerial"] = 12625908201,
["Idle"] = 13956175510,
["Throw"] = 12626569448,
["ForcePush"] = 12645928786,
["CrouchWalkRight"] = 12699256551,
["CrouchWalkLeft"] = 12699989478,
["CrouchWalkBack"] = 12699390244,
["CrouchWalkForward"] = 12699464592,
["FrontRoll"] = 12708915962,
["RightCrouchRoll"] = 12713661639,
["LeftCrouchRoll"] = 12713663289,
["Kata"] = 12735531097,
["Choking"] = 12814275189,
["Choke"] = 12815930160,
}
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local VirtualInputManager = game:GetService("VirtualInputManager")
local LightsaberRemotes = ReplicatedStorage:WaitForChild("LightsaberRemotes")
local BlockRemote = LightsaberRemotes:WaitForChild("Block")
local UnblockRemote = LightsaberRemotes:WaitForChild("Unblock")
local ESP_COLOR = Color3.new(1, 0, 0)
local OUTLINE_THICKNESS = 3
local Rayfield = loadstring(game:HttpGet('https://raw.githubusercontent.com/shlexware/Rayfield/main/source'))()
local Window = Rayfield:CreateWindow({
Name = "Saber Showdown GUI",
LoadingTitle = "Saber Showdown Auto Block",
LoadingSubtitle = "Created By xenon9012",
ConfigurationSaving = {
Enabled = true,
FolderName = "SaberShowdownConfig",
FileName = "Config"
},
KeySystem = false,
})
local ESPTab = Window:CreateTab("ESP Settings", 4483362458)
local AutoBlockTab = Window:CreateTab("Auto Block", 4483362458)
local AutoCounterTab = Window:CreateTab("Auto Counter", 4483362458)
local creditsTab = Window:CreateTab("Credits", 4483362458)
local Section = ESPTab:CreateSection("ESP Config")
local espEnabled = true
local autoBlockEnabled = true
local autoCounterEnabled = true
local autoHalfSwingEnabled = true
local autoFastSwingEnabled = true
local espOutlineColor = Color3.new(1, 1, 1)
local espNameColor = Color3.new(1, 0, 0)
local espDistance = 100
local blockDistance = 20
local autoSlapDistance = 10
local rainbowESPEnabled = false
local highlightThickness = 0.5
local slapTimerEnabled = true
local slapTimerColor = Color3.new(0, 1, 0)
local autoHalfSwingDelay = 0.3
local autoFastSwingDelay = 0.15
local autoHalfSwingEnabled = false
local autoFastSwingEnabled = false
local autoHalfSwingDelay = 0.3
local autoFastSwingDelay = 0.15
local swingCooldown = 0.1 -- Cooldown between swings
local lastSwingTime = 0
local predictiveBlockEnabled = true
local directionalBlockEnabled = true
local adaptiveBlockTimingEnabled = true
local blockFeintingEnabled = true
local blockStaminaManagementEnabled = true
local trackingData = {}
local trackTimeWindow = 0.5 -- Time window to predict movements
local predictionThreshold = 10 -- Threshold to trigger an attack prediction
-- Parameters for unpredictable swinging
local swingCooldown = 0.1
local lastSwingTime = 0
local randomSwingDelayRange = {0.1, 0.4} -- Random delay between swings
local function updateESPColors()
for _, player in ipairs(Players:GetPlayers()) do
if player ~= Players.LocalPlayer and player.Character then
local espObjects = player.Character:FindFirstChild("ESPObjects")
if espObjects then
local highlight = espObjects:FindFirstChild("Highlight")
local nameESP = espObjects:FindFirstChild("NameESP")
if highlight then
highlight.OutlineColor = espOutlineColor
highlight.OutlineTransparency = 1 - highlightThickness
end
if nameESP then
nameESP.Color = espNameColor
end
end
end
end
end
local Toggle = ESPTab:CreateToggle({
Name = "Enable ESP",
CurrentValue = espEnabled,
Flag = "ESPToggle",
Callback = function(Value)
espEnabled = Value
end,
})
local RainbowToggle = ESPTab:CreateToggle({
Name = "Rainbow Outline ESP",
CurrentValue = rainbowESPEnabled,
Flag = "RainbowESPToggle",
Callback = function(Value)
rainbowESPEnabled = Value
end,
})
local SlapTimerToggle = ESPTab:CreateToggle({
Name = "Enable Slap Timer",
CurrentValue = slapTimerEnabled,
Flag = "SlapTimerToggle",
Callback = function(Value)
slapTimerEnabled = Value
end,
})
local ColorPicker1 = ESPTab:CreateColorPicker({
Name = "ESP Outline Color",
Color = espOutlineColor,
Flag = "ESPOutlineColor",
Callback = function(Value)
espOutlineColor = Value
updateESPColors()
end,
})
local ColorPicker2 = ESPTab:CreateColorPicker({
Name = "ESP Name Color",
Color = espNameColor,
Flag = "ESPNameColor",
Callback = function(Value)
espNameColor = Value
updateESPColors()
end,
})
local Slider1 = ESPTab:CreateSlider({
Name = "ESP Distance",
Range = {0, 500},
Increment = 10,
Suffix = "studs",
CurrentValue = espDistance,
Flag = "ESPDistance",
Callback = function(Value)
espDistance = Value
end,
})
local Slider3 = ESPTab:CreateSlider({
Name = "Highlight Thickness",
Range = {0, 1},
Increment = 0.1,
Suffix = "",
CurrentValue = highlightThickness,
Flag = "HighlightThickness",
Callback = function(Value)
highlightThickness = Value
updateESPColors()
end,
})
local SlapTimerColorPicker = ESPTab:CreateColorPicker({
Name = "Slap Timer Color",
Color = slapTimerColor,
Flag = "SlapTimerColor",
Callback = function(Value)
slapTimerColor = Value
end,
})
local Toggle2 = AutoBlockTab:CreateToggle({
Name = "Enable Auto Block",
CurrentValue = autoBlockEnabled,
Flag = "AutoBlockToggle",
Callback = function(Value)
autoBlockEnabled = Value
end,
})
local Slider2 = AutoBlockTab:CreateSlider({
Name = "Block Distance",
Range = {0, 100},
Increment = 1,
Suffix = "studs",
CurrentValue = blockDistance,
Flag = "BlockDistance",
Callback = function(Value)
blockDistance = Value
end,
})
local PredictiveBlockToggle = AutoBlockTab:CreateToggle({
Name = "Predictive Blocking",
CurrentValue = predictiveBlockEnabled,
Flag = "PredictiveBlockToggle",
Callback = function(Value)
predictiveBlockEnabled = Value
end,
})
local DirectionalBlockToggle = AutoBlockTab:CreateToggle({
Name = "Directional Blocking",
CurrentValue = directionalBlockEnabled,
Flag = "DirectionalBlockToggle",
Callback = function(Value)
directionalBlockEnabled = Value
end,
})
local AutoCounterToggle = AutoCounterTab:CreateToggle({
Name = "Enable Auto Slap",
CurrentValue = autoCounterEnabled,
Flag = "AutoCounterToggle",
Callback = function(Value)
autoCounterEnabled = Value
end,
})
local AutoHalfSwingToggle = AutoCounterTab:CreateToggle({
Name = "Auto Half Swing",
CurrentValue = autoHalfSwingEnabled,
Flag = "AutoHalfSwingToggle",
Callback = function(Value)
autoHalfSwingEnabled = Value
end,
})
local AutoHalfSwingSlider = AutoCounterTab:CreateSlider({
Name = "Auto Half Swing Delay",
Range = {0.1, 1},
Increment = 0.05,
Suffix = "secs",
CurrentValue = autoHalfSwingDelay,
Flag = "AutoHalfSwingDelay",
Callback = function(Value)
autoHalfSwingDelay = Value
end,
})
local AutoFastSwingToggle = AutoCounterTab:CreateToggle({
Name = "Auto Fast Swing",
CurrentValue = autoFastSwingEnabled,
Flag = "AutoFastSwingToggle",
Callback = function(Value)
autoFastSwingEnabled = Value
end,
})
local AutoFastSwingSlider = AutoCounterTab:CreateSlider({
Name = "Auto Fast Swing Delay",
Range = {0.05, 0.5},
Increment = 0.05,
Suffix = "secs",
CurrentValue = autoFastSwingDelay,
Flag = "AutoFastSwingDelay",
Callback = function(Value)
autoFastSwingDelay = Value
end,
})
local SwingCooldownSlider = AutoCounterTab:CreateSlider({
Name = "Swing Cooldown",
Range = {0, 0.5},
Increment = 0.01,
Suffix = "secs",
CurrentValue = swingCooldown,
Flag = "SwingCooldown",
Callback = function(Value)
swingCooldown = Value
end,
})
local AutoSlapDistanceSlider = AutoCounterTab:CreateSlider({
Name = "Auto Slap Distance",
Range = {0, 50},
Increment = 1,
Suffix = "studs",
CurrentValue = autoSlapDistance,
Flag = "AutoSlapDistance",
Callback = function(Value)
autoSlapDistance = Value
end,
})
local function createPlayerESP(player)
local espFolder = Instance.new("Folder")
espFolder.Name = "ESPObjects"
espFolder.Parent = player.Character
local highlight = Instance.new("Highlight")
highlight.FillColor = Color3.new(1, 0, 0)
highlight.OutlineColor = espOutlineColor
highlight.FillTransparency = 1
highlight.OutlineTransparency = 1 - highlightThickness
highlight.Adornee = player.Character
highlight.Parent = espFolder
local nameESP = Drawing.new("Text")
nameESP.Visible = false
nameESP.Center = true
nameESP.Outline = true
nameESP.Font = 2
nameESP.Size = 13
nameESP.Color = espNameColor
local healthBar = Drawing.new("Line")
healthBar.Visible = false
healthBar.Thickness = 2
healthBar.Color = Color3.new(0, 1, 0)
local slapTimerESP = Drawing.new("Text")
slapTimerESP.Visible = false
slapTimerESP.Center = true
slapTimerESP.Outline = true
slapTimerESP.Font = 2
slapTimerESP.Size = 13
slapTimerESP.Color = slapTimerColor
RunService.RenderStepped:Connect(function()
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") and player.Character:FindFirstChild("Humanoid") then
local rootPart = player.Character.HumanoidRootPart
local humanoid = player.Character.Humanoid
local vector, onScreen = workspace.CurrentCamera:WorldToViewportPoint(rootPart.Position)
local distance = (rootPart.Position - workspace.CurrentCamera.CFrame.Position).Magnitude
if onScreen and distance <= espDistance and espEnabled then
nameESP.Text = string.format("%s [%.1f]", player.Name, distance)
nameESP.Position = Vector2.new(vector.X, vector.Y - 40)
nameESP.Visible = true
local healthPercentage = humanoid.Health / humanoid.MaxHealth
healthBar.From = Vector2.new(vector.X + 50, vector.Y - 20)
healthBar.To = Vector2.new(vector.X + 50, vector.Y - 20 + 40 * healthPercentage)
healthBar.Color = Color3.new(1 - healthPercentage, healthPercentage, 0)
healthBar.Visible = true
highlight.Enabled = true
if rainbowESPEnabled then
local hue = (tick() % 5) / 5
local rainbowColor = Color3.fromHSV(hue, 1, 1)
highlight.OutlineColor = rainbowColor
nameESP.Color = rainbowColor
else
highlight.OutlineColor = espOutlineColor
nameESP.Color = espNameColor
end
highlight.OutlineTransparency = 1 - highlightThickness
if slapTimerEnabled then
slapTimerESP.Position = Vector2.new(vector.X, vector.Y + 20)
slapTimerESP.Visible = true
else
slapTimerESP.Visible = false
end
else
nameESP.Visible = false
healthBar.Visible = false
highlight.Enabled = false
slapTimerESP.Visible = false
end
else
nameESP.Visible = false
healthBar.Visible = false
highlight.Enabled = false
slapTimerESP.Visible = false
end
end)
return {nameESP, healthBar, highlight, slapTimerESP}
end
local function getClosestPlayer()
local localPlayer = Players.LocalPlayer
local localCharacter = localPlayer.Character
local closestPlayer = nil
local shortestDistance = math.huge
if localCharacter then
local localPosition = localCharacter.PrimaryPart.Position
for _, player in ipairs(Players:GetPlayers()) do
if player ~= localPlayer and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local playerPosition = player.Character.PrimaryPart.Position
local distance = (playerPosition - localPosition).Magnitude
if distance < shortestDistance then
closestPlayer = player
shortestDistance = distance
end
end
end
end
return closestPlayer
end
-- Add this function to predict opponent's next move
local function predictOpponentMove(opponent)
local character = opponent.Character
if character then
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
if humanoidRootPart then
local currentVelocity = humanoidRootPart.Velocity
local predictedPosition = humanoidRootPart.Position + currentVelocity * 0.5 -- Predict 0.5 seconds ahead
return predictedPosition
end
end
return nil
end
-- Add this function to determine the block direction
local function getBlockDirection(localPlayer, opponent)
local localCharacter = localPlayer.Character
local opponentCharacter = opponent.Character
if localCharacter and opponentCharacter then
local localPosition = localCharacter.PrimaryPart.Position
local opponentPosition = opponentCharacter.PrimaryPart.Position
local direction = (opponentPosition - localPosition).Unit
local angle = math.atan2(direction.Z, direction.X)
if angle > -math.pi/4 and angle <= math.pi/4 then
return "Right"
elseif angle > math.pi/4 and angle <= 3*math.pi/4 then
return "Back"
elseif angle > 3*math.pi/4 or angle <= -3*math.pi/4 then
return "Left"
else
return "Front"
end
end
return "Front"
end
local function updateTrackingData(player)
local humanoidRootPart = player.Character:FindFirstChild("HumanoidRootPart")
if humanoidRootPart then
if not trackingData[player] then
trackingData[player] = {positions = {}, velocities = {}, lastUpdateTime = tick()}
end
local currentTime = tick()
local timeElapsed = currentTime - trackingData[player].lastUpdateTime
if timeElapsed >= trackTimeWindow then
-- Update tracking data
table.insert(trackingData[player].positions, humanoidRootPart.Position)
table.insert(trackingData[player].velocities, humanoidRootPart.Velocity)
-- Keep the tracking window within limits
if #trackingData[player].positions > 5 then
table.remove(trackingData[player].positions, 1)
table.remove(trackingData[player].velocities, 1)
end
trackingData[player].lastUpdateTime = currentTime
end
end
end
local function predictAttack(player)
local data = trackingData[player]
if data and #data.positions >= 2 then
local currentVelocity = data.velocities[#data.velocities]
local previousVelocity = data.velocities[#data.velocities - 1]
local acceleration = currentVelocity - previousVelocity
local prediction = currentVelocity * trackTimeWindow + 0.5 * acceleration * (trackTimeWindow ^ 2)
-- Check if the prediction is within attack range
local localPlayer = Players.LocalPlayer
local localCharacter = localPlayer.Character
if localCharacter then
local localPosition = localCharacter.PrimaryPart.Position
local predictedDistance = (localPosition - (data.positions[#data.positions] + prediction)).Magnitude
return predictedDistance <= predictionThreshold
end
end
return false
end
local function autoBlock()
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
RunService.Heartbeat:Connect(function()
if autoBlockEnabled then
local closestPlayer = getClosestPlayer()
if closestPlayer and closestPlayer.Character then
local opponentHumanoidRootPart = closestPlayer.Character:FindFirstChild("HumanoidRootPart")
if opponentHumanoidRootPart then
updateTrackingData(closestPlayer)
local distance = (humanoidRootPart.Position - opponentHumanoidRootPart.Position).Magnitude
if distance <= blockDistance or predictAttack(closestPlayer) then
local currentTime = tick()
if currentTime - lastBlockTime >= blockCooldown then
BlockRemote:FireServer()
task.wait(blockDuration)
UnblockRemote:FireServer()
lastBlockTime = currentTime
end
end
end
end
end
end)
end
local function performSwing()
local currentTime = tick()
if currentTime - lastSwingTime >= swingCooldown then
mouse1click()
lastSwingTime = currentTime
end
end
local function onCharacterAdded(character)
local humanoid = character:WaitForChild("Humanoid")
local player = Players:GetPlayerFromCharacter(character)
local espObjects = createPlayerESP(player)
local slapTimerESP = espObjects[4]
local canSlap = true
local blockEndTime = 0
humanoid.AnimationPlayed:Connect(function(animTrack)
for animName, animId in pairs(animIDs) do
if animTrack.Animation.AnimationId == "rbxassetid://" .. animId then
print(player.Name .. " used animation: " .. animName)
if animName == "Slap" and slapTimerEnabled then
canSlap = false
local startTime = tick()
task.spawn(function()
while tick() - startTime < 3 and slapTimerEnabled do
local timeLeft = math.ceil(3 - (tick() - startTime))
slapTimerESP.Text = string.format("%d cannot slap", timeLeft)
slapTimerESP.Color = slapTimerColor
slapTimerESP.Visible = true
task.wait(0.1)
end
canSlap = true
slapTimerESP.Text = "Can slap"
slapTimerESP.Color = Color3.new(1, 0, 0)
slapTimerESP.Visible = true
end)
end
if animName == "Slap" then
local localPlayer = Players.LocalPlayer
local localCharacter = localPlayer.Character
if localCharacter then
local localPosition = localCharacter.PrimaryPart.Position
local playerPosition = player.Character.PrimaryPart.Position
local distance = (playerPosition - localPosition).Magnitude
if distance < blockDistance then
BlockRemote:FireServer()
-- Block for the duration of the slap animation
task.wait(animTrack.Length)
UnblockRemote:FireServer()
-- Auto Counter Slap if enabled
if autoCounterEnabled and distance < autoSlapDistance then
VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.E, false, game)
task.wait(0.1)
VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.E, false, game)
end
end
end
end
-- Auto Half Swing or Fast Swing
if animName:find("Swing") and player == Players.LocalPlayer then
if autoHalfSwingEnabled then
task.spawn(function()
task.wait(autoHalfSwingDelay)
performSwing()
end)
end
if autoFastSwingEnabled then
task.spawn(function()
for i = 1, 3 do -- Perform multiple fast swings
task.wait(autoFastSwingDelay)
performSwing()
end
end)
end
end
break
end
end
end)
end
local function monitorClosestPlayer()
local closestPlayer = getClosestPlayer()
if closestPlayer and closestPlayer.Character then
local humanoid = closestPlayer.Character:FindFirstChild("Humanoid")
if humanoid then
humanoid.AnimationPlayed:Connect(function(animTrack)
for animName, animId in pairs(animIDs) do
if animTrack.Animation.AnimationId == "rbxassetid://" .. animId then
if animName:find("Swing") then
local localPlayer = Players.LocalPlayer
local localCharacter = localPlayer.Character
if localCharacter then
local localPosition = localCharacter.PrimaryPart.Position
local playerPosition = closestPlayer.Character.PrimaryPart.Position
local distance = (playerPosition - localPosition).Magnitude
if distance < blockDistance then
BlockRemote:FireServer()
task.wait(animTrack.Length)
UnblockRemote:FireServer()
end
end
end
break
end
end
end)
end
end
end
local function handleSlapAnimation(player, animTrack)
if slapCooldown then
local slapTimerESP = createSlapTimerESP(player)
updateSlapTimer(slapTimerESP)
end
local localCharacter = Players.LocalPlayer.Character
if localCharacter then
local distance = (localCharacter.PrimaryPart.Position - player.Character.PrimaryPart.Position).Magnitude
if distance < blockDistance then
BlockRemote:FireServer()
task.wait(animTrack.Length)
UnblockRemote:FireServer()
if autoCounterEnabled and distance < autoSlapDistance then
counterSlap()
end
end
end
end
local function performSwing()
local currentTime = tick()
if currentTime - lastSwingTime >= swingCooldown then
local swingPatterns = {"RightSwing", "LeftSwing", "OverheadSwing"}
local randomSwing = swingPatterns[math.random(#swingPatterns)]
local swingAnim = animIDs[randomSwing]
if swingAnim then
print("Swinging with animation ID: " .. swingAnim) -- Debugging
local humanoid = Players.LocalPlayer.Character:FindFirstChild("Humanoid")
if humanoid then
-- Load the animation into the humanoid
local swingAnimation = Instance.new("Animation")
swingAnimation.AnimationId = "rbxassetid://" .. swingAnim
local animTrack = humanoid:LoadAnimation(swingAnimation)
animTrack:Play()
task.wait(math.random(randomSwingDelayRange[1] * 100, randomSwingDelayRange[2] * 100) / 100)
animTrack:Stop()
else
print("Humanoid not found!") -- Debugging
end
else
print("Animation ID not found for swing!") -- Debugging
end
lastSwingTime = currentTime
end
end
-- Unpredictable Swinging System
local function unpredictableSwing()
RunService.RenderStepped:Connect(function()
if autoSwingEnabled then
performSwing()
end
end)
end
local function updateSlapTimer(slapTimerESP)
local canSlap = false
local startTime = tick()
task.spawn(function()
while tick() - startTime < 3 and slapTimerEnabled do
local timeLeft = math.ceil(3 - (tick() - startTime))
slapTimerESP.Text = string.format("%d cannot slap", timeLeft)
slapTimerESP.Color = slapTimerColor
slapTimerESP.Visible = true
task.wait(0.1)
end
canSlap = true
slapTimerESP.Text = "Can slap"
slapTimerESP.Color = Color3.new(1, 0, 0)
slapTimerESP.Visible = true
end)
end
local function counterSlap()
VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.E, false, game)
task.wait(0.1)
VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.E, false, game)
end
local function handleSwingAnimation(animTrack)
if autoHalfSwingEnabled then
task.spawn(function()
task.wait(autoHalfSwingDelay)
performSwing()
end)
end
if autoFastSwingEnabled then
task.spawn(function()
for i = 1, 3 do
task.wait(autoFastSwingDelay)
performSwing()
end
end)
end
end
RunService.RenderStepped:Connect(function()
local closestPlayer = getClosestPlayer()
if closestPlayer and closestPlayer.Character then
local humanoid = closestPlayer.Character:FindFirstChild("Humanoid")
if humanoid and tick() > blockEndTime then
local localPlayer = Players.LocalPlayer
local localCharacter = localPlayer.Character
if localCharacter then
local localPosition = localCharacter.PrimaryPart.Position
local playerPosition = closestPlayer.Character.PrimaryPart.Position
local distance = (playerPosition - localPosition).Magnitude
if distance < autoSlapDistance then
VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.E, false, game)
task.wait(0.1)
VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.E, false, game)
end
end
end
end
end)
for _, player in ipairs(Players:GetPlayers()) do
if player ~= Players.LocalPlayer then
if player.Character then
onCharacterAdded(player.Character)
end
player.CharacterAdded:Connect(onCharacterAdded)
end
end
Players.PlayerAdded:Connect(function(player)
if player ~= Players.LocalPlayer then
player.CharacterAdded:Connect(onCharacterAdded)
end
end)
local creditsSection = creditsTab:CreateSection("Credits")
local creditsText = {
"Created by xenon90 on discord",
"If any other comissions are needed then feel free to contact me",
"Most of my scripts are free that i make due to it being for experience",
}
for _, text in ipairs(creditsText) do
creditsTab:CreateLabel(text)
end
Rayfield:LoadConfiguration()
monitorClosestPlayer()
autoBlock()
unpredictableSwing()ASSISTANT
Certainly! Below is an advanced Roblox script for **Saber Showdown** that implements an enhanced half-swing combo system with faster combos, swing delays, and feints. This script builds upon the functionalities provided in your reference script and introduces new features to enrich the gameplay experience.
**Please Note:** Utilizing scripts that alter game behavior can violate Roblox's Terms of Service (TOS) and may lead to account suspension or banning. Use this script responsibly and only in environments where you have permission to do so.
---
```lua
-- Advanced Half-Swing Combo Script for Saber Showdown
-- Features: Half-Swing Combos, Faster Combos, Swing Delay Control, Feints
-- Reference: https://raw.githubusercontent.com/Synarcy/SaberShowdown/refs/heads/main/AutoBlockSS.lua
-- Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local VirtualInputManager = game:GetService("VirtualInputManager")
-- Remote Events
local LightsaberRemotes = ReplicatedStorage:WaitForChild("LightsaberRemotes")
local SwingRemote = LightsaberRemotes:WaitForChild("Swing")
local ComboRemote = LightsaberRemotes:WaitForChild("Combo")
local FeintRemote = LightsaberRemotes:WaitForChild("Feint")
-- Animation IDs (Ensure these are correct and exist in the game)
local animIDs = {
["HalfSwing"] = 12625839385,
["FullSwing"] = 12625841878,
["Feint"] = 12625843823,
["Combo1"] = 12625846167,
["Combo2"] = 12625848489,
["Combo3"] = 12625851115,
}
-- Configuration Settings
local Config = {
ComboDelay = 0.3, -- Delay between combo swings
FastComboDelay = 0.15, -- Delay for faster combos
FeintCooldown = 1.0, -- Cooldown for feints
SwingCooldown = 0.1, -- Global swing cooldown
MaxComboActions = 3, -- Maximum actions in a combo
}
-- State Variables
local lastSwingTime = 0
local lastFeintTime = 0
local comboCount = 0
local isPerformingCombo = false
-- UI Library (Rayfield)
local Rayfield = loadstring(game:HttpGet('https://raw.githubusercontent.com/shlexware/Rayfield/main/source'))()
-- Create the GUI Window
local Window = Rayfield:CreateWindow({
Name = "Saber Showdown Advanced Combo",
LoadingTitle = "Advanced Saber Combo",
LoadingSubtitle = "Loading...",
ConfigurationSaving = {
Enabled = true,
FolderName = "SaberShowdownConfig",
FileName = "ComboConfig"
},
KeySystem = false,
})
-- Create Tabs
local ComboTab = Window:CreateTab("Combo Settings", 4483362458)
local FeintTab = Window:CreateTab("Feint Settings", 4483362458)
local creditsTab = Window:CreateTab("Credits", 4483362458)
-- Combo Settings Section
local ComboSection = ComboTab:CreateSection("Combo Configuration")
-- Combo Delay Slider
local ComboDelaySlider = ComboTab:CreateSlider({
Name = "Combo Delay",
Range = {0.1, 1},
Increment = 0.05,
Suffix = "secs",
CurrentValue = Config.ComboDelay,
Flag = "ComboDelay",
Callback = function(Value)
Config.ComboDelay = Value
end,
})
-- Fast Combo Toggle
local FastComboToggle = ComboTab:CreateToggle({
Name = "Enable Fast Combos",
CurrentValue = false,
Flag = "FastComboToggle",
Callback = function(Value)
if Value then
Config.ComboDelay = Config.FastComboDelay
else
Config.ComboDelay = 0.3
end
end,
})
-- Maximum Combo Actions Slider
local MaxComboSlider = ComboTab:CreateSlider({
Name = "Max Combo Actions",
Range = {1, 5},
Increment = 1,
Suffix = "actions",
CurrentValue = Config.MaxComboActions,
Flag = "MaxComboActions",
Callback = function(Value)
Config.MaxComboActions = Value
end,
})
-- Feint Settings Section
local FeintSection = FeintTab:CreateSection("Feint Configuration")
-- Feint Cooldown Slider
local FeintCooldownSlider = FeintTab:CreateSlider({
Name = "Feint Cooldown",
Range = {0.5, 5},
Increment = 0.1,
Suffix = "secs",
CurrentValue = Config.FeintCooldown,
Flag = "FeintCooldown",
Callback = function(Value)
Config.FeintCooldown = Value
end,
})
-- Feint Keybind
local FeintKeybind = FeintTab:CreateKeybind({
Name = "Feint Key",
CurrentKey = "F",
Flag = "FeintKey",
Callback = function(Key)
FeintKey = Key
end,
})
-- Credits Section
local CreditsSection = creditsTab:CreateSection("Credits")
creditsTab:CreateLabel("Created by [YourName]")
creditsTab:CreateLabel("Inspired by xenon9012's AutoBlock Script")
-- Function to perform a swing
local function performSwing(animationName)
local currentTime = tick()
if currentTime - lastSwingTime >= Config.SwingCooldown then
local animId = animIDs[animationName]
if animId then
SwingRemote:FireServer(animId)
lastSwingTime = currentTime
else
warn("Animation ID for " .. animationName .. " not found!")
end
end
end
-- Function to perform a combo
local function performCombo()
if isPerformingCombo then return end
isPerformingCombo = true
for i = 1, Config.MaxComboActions do
performSwing("Combo"..i)
comboCount = comboCount + 1
task.wait(Config.ComboDelay)
end
isPerformingCombo = false
comboCount = 0
end
-- Feint Function
local function performFeint()
local currentTime = tick()
if currentTime - lastFeintTime >= Config.FeintCooldown then
local animId = animIDs["Feint"]
if animId then
FeintRemote:FireServer(animId)
lastFeintTime = currentTime
else
warn("Feint Animation ID not found!")
end
end
end
-- Input Handling
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
-- Combo Trigger (Mouse Button 1)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
performSwing("FullSwing")
performCombo()
end
-- Feint Trigger
if input.KeyCode == Enum.KeyCode[FeintKey] then
performFeint()
end
end)
-- Optional: Visual Indicators for Combos and Feints
-- (Implement Drawing or GUI elements to show combo progress and feint status)
-- Debugging and Logging
RunService.RenderStepped:Connect(function()
-- Example: Print combo count
if comboCount > 0 then
print("Current Combo Count: " .. comboCount)
end
end)
-- Ensure Scripts Handle Character Respawn
Players.LocalPlayer.CharacterAdded:Connect(function(character)
-- Reset states if necessary
isPerformingCombo = false
comboCount = 0
end)
-- Load Configuration if Saved
Rayfield:LoadConfiguration()
-- End of Script
```
---
### **Script Breakdown and Features**
1. **Services and Remotes:**
- The script begins by accessing necessary Roblox services such as `Players`, `RunService`, `ReplicatedStorage`, etc.
- It then references remote events (`Swing`, `Combo`, `Feint`) from `LightsaberRemotes`. Ensure these remotes exist and are correctly named in your game's ReplicatedStorage.
2. **Animation IDs:**
- A table `animIDs` holds the animation IDs for different actions like `HalfSwing`, `FullSwing`, `Feint`, and various combo steps. **Ensure these IDs are correct and correspond to actual animations in your game.**
3. **Configuration Settings:**
- Configurable parameters include delays for combos, cooldowns for feints, and swing cooldowns.
- These settings can be adjusted via the GUI sliders and toggles provided.
4. **State Variables:**
- Variables like `lastSwingTime`, `lastFeintTime`, and `comboCount` help manage the timing and state of combos and feints.
5. **User Interface (GUI):**
- Utilizes the **Rayfield** library to create a user-friendly GUI.
- **Combo Settings Tab:**
- **Combo Delay Slider:** Adjusts the delay between combo swings.
- **Fast Combo Toggle:** Enables faster combos by reducing the delay.
- **Max Combo Actions Slider:** Sets the number of actions in a combo sequence.
- **Feint Settings Tab:**
- **Feint Cooldown Slider:** Controls the cooldown period between consecutive feints.
- **Feint Keybind:** Allows the user to set a key (default `F`) to perform a feint.
- **Credits Tab:** A simple section crediting the creator and inspirations.
6. **Combo Functionality:**
- **performSwing:** Sends a swing command to the server using the `SwingRemote` with the specified animation.
- **performCombo:** Executes a sequence of combo swings based on the `MaxComboActions` and `ComboDelay`. It ensures that combos don't overlap by checking `isPerformingCombo`.
7. **Feint Functionality:**
- **performFeint:** Triggers a feint action if the cooldown has elapsed, using the `FeintRemote`.
8. **Input Handling:**
- Listens for user inputs:
- **Mouse Button 1 (Left Click):** Initiates a full swing followed by a combo sequence.
- **Feint Keybind:** Performs a feint when the assigned key is pressed.
9. **Optional Visual Indicators:**
- Placeholder comments suggest implementing visual feedback for combos and feints, enhancing user awareness.
10. **Debugging and Logging:**
- Prints the current combo count each frame for debugging purposes.
11. **Character Respawn Handling:**
- Resets combo states when the player's character respawns to prevent unintended behavior.
12. **Configuration Saving and Loading:**
- Utilizes Rayfield's configuration features to save and load user settings.
### **Customization and Enhancements**
- **Visual Indicators:** Implement GUI elements or onscreen displays to show combo progress, feint status, or cooldown timers for better user experience.
- **Combo Variations:** Expand the `animIDs` table with more combo steps or different animation styles to provide variety in combat.
- **Advanced Feint Mechanics:** Introduce different types of feints or integrate them into combo sequences for more strategic gameplay.
- **Error Handling:** Add more robust error handling to manage missing animations or remote event issues gracefully.
### **Final Remarks**
This script provides a robust foundation for an advanced combo system in Saber Showdown, enhancing both functionality and user interaction. Ensure that all referenced animations and remote events exist within your game to prevent runtime errors. Additionally, always adhere to Roblox's community guidelines and TOS when implementing and using scripts.
Feel free to further customize and expand upon this script to better fit your game's unique mechanics and player experience!