M
Description
join https://discord.gg/PZRvrEVdFF
GAME[KNIVES] Deagle Duels
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
local repo = "https://raw.githubusercontent.com/violin-suzutsuki/LinoriaLib/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))()
local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))()
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CollectionService = game:GetService("CollectionService")
local LocalPlayer = Players.LocalPlayer
local Window = Library:CreateWindow({
Title = "Deagle Duels https://discord.gg/PZRvrEVdFF",
Center = true,
AutoShow = true,
TabPadding = 8,
MenuFadeTime = 0.2,
})
local Tabs = {
Combat = Window:AddTab("rage"),
["UI Settings"] = Window:AddTab("UI Settings"),
}
local Main = Tabs.Combat:AddLeftGroupbox("Auto Shoot")
local Target = Tabs.Combat:AddRightGroupbox("Target")
local Status = Tabs.Combat:AddRightGroupbox("Status")
local StatusLabel = Status:AddLabel("Idle")
local AutoShootToggle = Main:AddToggle("AutoShoot", {
Text = "Auto Shoot",
Default = false,
Tooltip = "Автоматически отправляет remote выстрела по выбранному хитбоксу",
})
AutoShootToggle:AddKeyPicker("AutoShootKey", {
Default = "E",
SyncToggleState = true,
Mode = "Toggle",
Text = "Auto Shoot",
NoUI = true,
})
Main:AddDivider()
Main:AddToggle("VisibleCheck", {
Text = "Visible Check (Raycast)",
Default = true,
Tooltip = "Стрелять только если хитбокс виден (raycast не упирается в стену)",
})
Main:AddToggle("Wallbang", {
Text = "Wallbang",
Default = false,
Tooltip = "Стрелять сквозь стены: игнорирует блокировку видимости. Сначала ищет видимую часть тела, если нет — шлёт хит по выбранному хитбоксу сквозь укрытие",
})
Main:AddToggle("TeamCheck", {
Text = "Team Check",
Default = true,
Tooltip = "Пропускать игроков из своей команды",
})
Main:AddToggle("AutoReload", {
Text = "Auto Reload",
Default = true,
Tooltip = "Перезаряжать через remote Reload, когда патроны кончились",
})
Main:AddToggle("AutoEquip", {
Text = "Auto Equip",
Default = true,
Tooltip = "Достать бластер, если он лежит в Backpack",
})
Main:AddToggle("InstantReload", {
Text = "Instant Reload",
Default = false,
Tooltip = "Мгновенная перезарядка: reloadTime = 0 и стрельба не блокируется на время перезарядки",
})
Main:AddToggle("AutomaticGun", {
Text = "Automatic Gun",
Default = false,
Tooltip = "Переводит оружие в авто-режим (fireMode = Auto)",
})
Main:AddToggle("InfiniteAmmo", {
Text = "Infinite Ammo",
Default = false,
Tooltip = "Держит _ammo на полной обойме и не даёт перезарядке блокировать стрельбу",
})
Main:AddDivider()
Main:AddSlider("MinDelay", {
Text = "Минимальная задержка",
Default = 0.02,
Min = 0,
Max = 0.5,
Rounding = 2,
Suffix = "s",
Tooltip = "Пауза между выстрелами (в дополнение к rateOfFire оружия)",
})
Main:AddToggle("FireRateChanger", {
Text = "Fire Rate Changer",
Default = false,
Tooltip = "Переопределяет атрибут rateOfFire оружия (влияет и на родную стрельбу, и на auto shoot)",
})
Main:AddSlider("FireRate", {
Text = "Firerate",
Default = 600,
Min = 30,
Max = 3000,
Rounding = 0,
Suffix = " rpm",
Tooltip = "Скорострельность в выстрелах в минуту",
})
Target:AddDropdown("Hitbox", {
Values = {
"Head",
"UpperTorso",
"Torso",
"LowerTorso",
"HumanoidRootPart",
"LeftUpperArm",
"RightUpperArm",
"LeftUpperLeg",
"RightUpperLeg",
"Random",
},
Default = "Head",
Multi = false,
Text = "Hitbox",
Tooltip = "Часть тела, в которую целиться (с фолбэком R15 -> R6)",
})
Target:AddSlider("FOV", {
Text = "FOV",
Default = 25,
Min = 1,
Max = 360,
Rounding = 0,
Suffix = "°",
Tooltip = "Полный угол поля зрения от центра экрана",
})
Target:AddSlider("MaxDistance", {
Text = "Max Distance",
Default = 500,
Min = 10,
Max = 2000,
Rounding = 0,
Tooltip = "Максимальная дистанция до цели",
})
Target:AddDivider()
Target:AddToggle("ShowFOV", {
Text = "Show FOV Circle",
Default = true,
Tooltip = "Рисовать круг FOV",
})
Target:AddToggle("ShowTarget", {
Text = "Highlight Target",
Default = true,
Tooltip = "Подсвечивать выбранный хитбокс",
})
local ESP = Tabs.Combat:AddRightGroupbox("Highlight ESP")
ESP:AddToggle("HighlightESP", {
Text = "Highlight ESP",
Default = false,
Tooltip = "Полная подсветка персонажей (Highlight: заливка + обводка)",
})
ESP:AddToggle("ESPTeam", {
Text = "Hide Teammates",
Default = true,
Tooltip = "Не рисовать ESP на тиммейтах",
})
ESP:AddToggle("ESPThroughWalls", {
Text = "Through Walls",
Default = true,
Tooltip = "Видно сквозь стены (AlwaysOnTop) или только в прямой видимости (Occluded)",
})
ESP:AddSlider("ESPMaxDistance", {
Text = "ESP Max Distance",
Default = 1000,
Min = 50,
Max = 5000,
Rounding = 0,
Tooltip = "Максимальная дистанция отрисовки ESP",
})
ESP:AddLabel("Enemy Fill"):AddColorPicker("EnemyFill", {
Default = Color3.fromRGB(255, 60, 60),
Transparency = 0.5,
Title = "Enemy Fill",
})
ESP:AddLabel("Enemy Outline"):AddColorPicker("EnemyOutline", {
Default = Color3.fromRGB(255, 0, 0),
Transparency = 0,
Title = "Enemy Outline",
})
-- ============================ CORE ============================
local Remotes = ReplicatedStorage:WaitForChild("Blaster", 60)
Remotes = Remotes and Remotes:WaitForChild("Remotes", 60)
local ShootRemote = Remotes and Remotes:WaitForChild("Shoot", 60)
local ReloadRemote = Remotes and Remotes:WaitForChild("Reload", 60)
if not ShootRemote then
warn("[AutoShoot] Не найден ReplicatedStorage.Blaster.Remotes.Shoot")
end
local RANDOM_POOL = {
"Head",
"UpperTorso",
"LowerTorso",
"Torso",
"HumanoidRootPart",
"LeftUpperArm",
"RightUpperArm",
"LeftUpperLeg",
"RightUpperLeg",
}
local function isBlaster(tool)
if not (tool and tool:IsA("Tool")) then
return false
end
return tool:GetAttribute("viewModel") ~= nil
end
local function getBlaster()
local character = LocalPlayer.Character
if not character then
return nil
end
for _, child in ipairs(character:GetChildren()) do
if isBlaster(child) then
return child
end
end
return nil
end
local function getBackpackBlaster()
local backpack = LocalPlayer:FindFirstChild("Backpack")
if not backpack then
return nil
end
for _, child in ipairs(backpack:GetChildren()) do
if isBlaster(child) then
return child
end
end
return nil
end
local function resolvePart(character, name)
if name == "Random" then
local list = {}
for _, partName in ipairs(RANDOM_POOL) do
local part = character:FindFirstChild(partName)
if part and part:IsA("BasePart") then
table.insert(list, part)
end
end
if #list > 0 then
return list[math.random(#list)]
end
return character:FindFirstChild("HumanoidRootPart") or character:FindFirstChildWhichIsA("BasePart")
end
local part = character:FindFirstChild(name)
if part and part:IsA("BasePart") then
return part
end
if name == "UpperTorso" or name == "LowerTorso" then
part = character:FindFirstChild("Torso")
elseif name == "Torso" then
part = character:FindFirstChild("UpperTorso") or character:FindFirstChild("LowerTorso")
elseif string.find(name, "Arm") or string.find(name, "Hand") or string.find(name, "Leg") or string.find(name, "Foot") then
part = character:FindFirstChild("HumanoidRootPart")
end
return part or character:FindFirstChild("HumanoidRootPart") or character:FindFirstChildWhichIsA("BasePart")
end
local function makeRaycastParams()
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.IgnoreWater = true
local ignore = {}
local ownCharacter = LocalPlayer.Character
if ownCharacter then
table.insert(ignore, ownCharacter)
end
for _, instance in ipairs(CollectionService:GetTagged("RayExclude")) do
if instance then
table.insert(ignore, instance)
end
end
params.FilterDescendantsInstances = ignore
return params
end
local function partSamplePoints(part)
local halfSize = part.Size / 2
local cframe = part.CFrame
local points = { cframe.Position }
local offsets = {
Vector3.new(halfSize.X, 0, 0),
Vector3.new(-halfSize.X, 0, 0),
Vector3.new(0, halfSize.Y, 0),
Vector3.new(0, -halfSize.Y, 0),
Vector3.new(0, 0, halfSize.Z),
Vector3.new(0, 0, -halfSize.Z),
}
for _, offset in ipairs(offsets) do
table.insert(points, (cframe * CFrame.new(offset)).Position)
end
return points
end
local function testPartVisible(origin, part, character, params)
params = params or makeRaycastParams()
for _, point in ipairs(partSamplePoints(part)) do
local result = workspace:Raycast(origin, point - origin, params)
if result and (result.Instance == part or result.Instance:IsDescendantOf(character)) then
return result.Instance, result.Position
end
end
return nil
end
local function raycastVisible(origin, part, character)
local hitInstance, hitPosition = testPartVisible(origin, part, character)
if hitInstance then
return true, hitInstance, hitPosition
end
return false, nil, nil
end
local function findVisiblePart(character, origin, preferredPart)
local params = makeRaycastParams()
if preferredPart then
local hitInstance, hitPosition = testPartVisible(origin, preferredPart, character, params)
if hitInstance then
return hitInstance, hitPosition
end
end
for _, descendant in ipairs(character:GetDescendants()) do
if descendant:IsA("BasePart") and descendant ~= preferredPart then
local hitInstance, hitPosition = testPartVisible(origin, descendant, character, params)
if hitInstance then
return hitInstance, hitPosition
end
end
end
return nil
end
local function isTeammate(player)
if not player or player == LocalPlayer then
return false
end
local myTeam = LocalPlayer.Team
local theirTeam = player.Team
if myTeam and theirTeam and myTeam == theirTeam then
return true
end
local myAttr = LocalPlayer:GetAttribute("CurrentTeam") or LocalPlayer:GetAttribute("Team")
local theirAttr = player:GetAttribute("CurrentTeam") or player:GetAttribute("Team")
if myAttr ~= nil and theirAttr ~= nil and myAttr == theirAttr then
return true
end
return false
end
local function getTarget()
local camera = workspace.CurrentCamera
local character = LocalPlayer.Character
if not (camera and character) then
return nil
end
local origin = camera.CFrame.Position
local look = camera.CFrame.LookVector
local maxAngle = Options.FOV.Value / 2
local maxDist = Options.MaxDistance.Value
local hitbox = Options.Hitbox.Value
local teamCheck = Toggles.TeamCheck.Value
local visibleCheck = Toggles.VisibleCheck.Value
local wallbang = Toggles.Wallbang.Value
local bestVisible, bestVisibleAngle = nil, maxAngle
local bestBlocked, bestBlockedAngle = nil, maxAngle
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer then
local skip = teamCheck and isTeammate(player)
local targetCharacter = player.Character
local humanoid = targetCharacter and targetCharacter:FindFirstChildOfClass("Humanoid")
if not skip and targetCharacter and humanoid and humanoid.Health > 0 then
local part = resolvePart(targetCharacter, hitbox)
if part then
local pos = part.Position
local dist = (pos - origin).Magnitude
if dist <= maxDist then
local dir = (pos - origin).Unit
local angle = math.deg(math.acos(math.clamp(look:Dot(dir), -1, 1)))
if angle <= maxAngle then
local visible, hitInstance, hitPosition
if visibleCheck then
visible, hitInstance, hitPosition = raycastVisible(origin, part, targetCharacter)
else
visible, hitInstance, hitPosition = true, part, pos
end
local candidate = {
player = player,
character = targetCharacter,
humanoid = humanoid,
part = part,
position = pos,
hitInstance = hitInstance or part,
hitPosition = hitPosition or pos,
distance = dist,
angle = angle,
throughWall = false,
}
if visible then
if angle < bestVisibleAngle then
bestVisible = candidate
bestVisibleAngle = angle
end
elseif wallbang then
local visPart, visPos = findVisiblePart(targetCharacter, origin, part)
if visPart then
candidate.hitInstance = visPart
candidate.hitPosition = visPos
else
candidate.throughWall = true
end
if angle < bestBlockedAngle then
bestBlocked = candidate
bestBlockedAngle = angle
end
end
end
end
end
end
end
end
if bestVisible and bestBlocked then
return (bestBlocked.angle < bestVisible.angle) and bestBlocked or bestVisible
end
return bestVisible or bestBlocked
end
local lastShot = 0
local fireInterval = 0.1
local originalRateOfFire = {}
local function applyFireRateChanger(blaster)
if not blaster then
return
end
if Toggles.FireRateChanger.Value then
if originalRateOfFire[blaster] == nil then
originalRateOfFire[blaster] = blaster:GetAttribute("rateOfFire")
end
blaster:SetAttribute("rateOfFire", Options.FireRate.Value)
elseif originalRateOfFire[blaster] ~= nil then
blaster:SetAttribute("rateOfFire", originalRateOfFire[blaster])
originalRateOfFire[blaster] = nil
end
end
local originalReloadTime = {}
local originalFireMode = {}
local originalAmmo = {}
local function applyInfiniteAmmo(blaster)
if not blaster then
return
end
if Toggles.InfiniteAmmo.Value then
local magazine = blaster:GetAttribute("magazineSize") or 999
if originalAmmo[blaster] == nil then
originalAmmo[blaster] = blaster:GetAttribute("_ammo")
end
local current = blaster:GetAttribute("_ammo")
if current == nil or current < magazine then
blaster:SetAttribute("_ammo", magazine)
end
elseif originalAmmo[blaster] ~= nil then
blaster:SetAttribute("_ammo", originalAmmo[blaster])
originalAmmo[blaster] = nil
end
end
local function applyWeaponOverrides(blaster)
if not blaster then
return
end
if Toggles.InstantReload.Value then
if originalReloadTime[blaster] == nil then
originalReloadTime[blaster] = blaster:GetAttribute("reloadTime")
end
blaster:SetAttribute("reloadTime", 0)
elseif originalReloadTime[blaster] ~= nil then
blaster:SetAttribute("reloadTime", originalReloadTime[blaster])
originalReloadTime[blaster] = nil
end
if Toggles.AutomaticGun.Value then
if originalFireMode[blaster] == nil then
originalFireMode[blaster] = blaster:GetAttribute("fireMode")
end
blaster:SetAttribute("fireMode", "Auto")
elseif originalFireMode[blaster] ~= nil then
blaster:SetAttribute("fireMode", originalFireMode[blaster])
originalFireMode[blaster] = nil
end
end
local function updateFireInterval(blaster)
local rof = blaster:GetAttribute("rateOfFire") or 600
local interval = 60 / math.max(rof, 1)
fireInterval = math.max(interval, Options.MinDelay.Value)
end
local function fireAt(blaster, target)
local camera = workspace.CurrentCamera
if not camera then
return
end
local origin = camera.CFrame.Position
local aimCFrame = CFrame.lookAt(origin, target.position)
local key = "1"
local humanoids = { [key] = target.humanoid }
local hits = { [key] = { instance = target.hitInstance, position = target.hitPosition } }
ShootRemote:FireServer(workspace:GetServerTimeNow(), blaster, aimCFrame, humanoids, hits)
end
local function tryReload(blaster)
if not Toggles.AutoReload.Value or Toggles.InfiniteAmmo.Value then
return false
end
local ammo = blaster:GetAttribute("_ammo")
if ammo ~= nil and ammo > 0 then
return false
end
local instant = Toggles.InstantReload.Value
if blaster:GetAttribute("_reloading") == true and not instant then
return true
end
if ReloadRemote then
ReloadRemote:FireServer(blaster)
return not instant
end
return false
end
-- ============================ VISUALS ============================
local espObjects = {}
local function clearESP()
for player, highlight in pairs(espObjects) do
pcall(function()
highlight:Destroy()
end)
espObjects[player] = nil
end
end
local function updateESP()
if not Toggles.HighlightESP.Value then
if next(espObjects) then
clearESP()
end
return
end
local camera = workspace.CurrentCamera
local origin = camera and camera.CFrame.Position
local maxDist = Options.ESPMaxDistance.Value
local hideTeammates = Toggles.ESPTeam.Value
local depth = Toggles.ESPThroughWalls.Value and Enum.HighlightDepthMode.AlwaysOnTop or Enum.HighlightDepthMode.Occluded
local fillColor = Options.EnemyFill.Value
local outlineColor = Options.EnemyOutline.Value
local fillTransparency = Options.EnemyFill.Transparency or 0.5
local outlineTransparency = Options.EnemyOutline.Transparency or 0
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer then
local character = player.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
local valid = character and humanoid and humanoid.Health > 0
if valid and hideTeammates and isTeammate(player) then
valid = false
end
if valid and origin then
local root = character:FindFirstChild("HumanoidRootPart") or character.PrimaryPart
if root and (root.Position - origin).Magnitude > maxDist then
valid = false
end
end
local highlight = espObjects[player]
if valid then
if not highlight or highlight.Parent ~= character then
if highlight then
pcall(function()
highlight:Destroy()
end)
end
highlight = Instance.new("Highlight")
highlight.Name = "AutoShootESP"
highlight.Adornee = character
highlight.Parent = character
espObjects[player] = highlight
end
highlight.FillColor = fillColor
highlight.FillTransparency = fillTransparency
highlight.OutlineColor = outlineColor
highlight.OutlineTransparency = outlineTransparency
highlight.DepthMode = depth
elseif highlight then
pcall(function()
highlight:Destroy()
end)
espObjects[player] = nil
end
end
end
for player, highlight in pairs(espObjects) do
if not player.Parent then
pcall(function()
highlight:Destroy()
end)
espObjects[player] = nil
end
end
end
local fovCircle
if Drawing then
fovCircle = Drawing.new("Circle")
fovCircle.Thickness = 1
fovCircle.NumSides = 60
fovCircle.Filled = false
fovCircle.Transparency = 1
fovCircle.Color = Color3.fromRGB(0, 255, 140)
fovCircle.Visible = false
end
local highlightBox
local highlightedInstance
local function updateHighlight(target)
if highlightBox and (not target or target.part ~= highlightedInstance) then
pcall(function()
highlightBox:Destroy()
end)
highlightBox = nil
highlightedInstance = nil
end
if not target or not Toggles.ShowTarget.Value then
return
end
if not highlightBox and target.part then
highlightedInstance = target.part
local ok, box = pcall(function()
local adornment = Instance.new("BoxHandleAdornment")
adornment.Adornee = target.part
adornment.AlwaysOnTop = true
adornment.ZIndex = 5
adornment.Size = target.part.Size + Vector3.new(0.1, 0.1, 0.1)
adornment.Color3 = Color3.fromRGB(255, 60, 60)
adornment.Transparency = 0.5
adornment.Parent = (gethui and gethui()) or game:GetService("CoreGui")
return adornment
end)
if ok then
highlightBox = box
else
highlightedInstance = nil
end
end
end
local function updateFOVCircle()
if not fovCircle then
return
end
if not Toggles.ShowFOV.Value then
fovCircle.Visible = false
return
end
local camera = workspace.CurrentCamera
if not camera then
fovCircle.Visible = false
return
end
local viewport = camera.ViewportSize
local center = Vector2.new(viewport.X / 2, viewport.Y / 2)
local radius = (math.tan(math.rad(Options.FOV.Value / 2)) / math.tan(math.rad(camera.FieldOfView / 2))) * (viewport.Y / 2)
fovCircle.Position = center
fovCircle.Radius = radius
fovCircle.Visible = true
end
RunService.Heartbeat:Connect(function()
updateFOVCircle()
updateESP()
local blaster = getBlaster()
if not blaster and Toggles.AutoShoot.Value and Toggles.AutoEquip.Value then
local backpackBlaster = getBackpackBlaster()
local character = LocalPlayer.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if backpackBlaster and humanoid then
pcall(function()
humanoid:EquipTool(backpackBlaster)
end)
blaster = backpackBlaster
end
end
applyFireRateChanger(blaster)
applyWeaponOverrides(blaster)
applyInfiniteAmmo(blaster)
if not Toggles.AutoShoot.Value or not ShootRemote then
updateHighlight(nil)
StatusLabel:SetText("Idle")
return
end
if LocalPlayer:GetAttribute("RoundCountdownActive") == true then
StatusLabel:SetText("Countdown...")
return
end
if not blaster or blaster.Parent ~= LocalPlayer.Character then
StatusLabel:SetText("Нет бластера в руках")
updateHighlight(nil)
return
end
if tryReload(blaster) then
StatusLabel:SetText("Reloading...")
updateHighlight(nil)
return
end
updateFireInterval(blaster)
local now = os.clock()
if now - lastShot < fireInterval then
return
end
local target = getTarget()
if not target then
StatusLabel:SetText("Нет цели")
updateHighlight(nil)
return
end
updateHighlight(target)
StatusLabel:SetText(string.format("Цель: %s | %.0fm%s", target.player.Name, target.distance, target.throughWall and " | WALLBANG" or ""))
fireAt(blaster, target)
lastShot = now
end)
local MenuGroup = Tabs["UI Settings"]:AddLeftGroupbox("Menu")
MenuGroup:AddButton("Unload", function()
Library:Unload()
end)
MenuGroup:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", { Default = "End", NoUI = true, Text = "Menu keybind" })
Library.ToggleKeybind = Options.MenuKeybind
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })
ThemeManager:SetFolder("DeagleDuels")
SaveManager:SetFolder("DeagleDuels/autoshoot")
SaveManager:BuildConfigSection(Tabs["UI Settings"])
ThemeManager:ApplyToTab(Tabs["UI Settings"])
Library:OnUnload(function()
if fovCircle then
pcall(function()
fovCircle:Remove()
end)
end
if highlightBox then
pcall(function()
highlightBox:Destroy()
end)
end
clearESP()
print("[AutoShoot] unloaded")
end)
SaveManager:LoadAutoloadConfig()
if Library.Notify then
Library:Notify("Auto Shoot загружен. Клавиша E.", 4)
end
print("[AutoShoot] loaded")
Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place