CCCPaste

fb1aec7ec1218

local Rayfield = loadstring(game:HttpGet("https://sirius.menu/rayfield"))()
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local LP = Players.LocalPlayer
local Camera = workspace.CurrentCamera

-- ===================== CONFIG =====================
local DESIRED_FOV = 95
local DistanceCheck = 500

local espSettings = {
    Survivors  = {Enabled=true, Color=Color3.fromRGB(0,255,0)},
    Killers    = {Enabled=true, Color=Color3.fromRGB(255,0,0)},
    Generators = {Enabled=true, Color=Color3.fromRGB(0,170,255)},
    Pallets    = {Enabled=false, Color=Color3.fromRGB(139,69,19)},
    ExitGates  = {Enabled=false, Color=Color3.fromRGB(255,255,0)},
    Windows    = {Enabled=false, Color=Color3.fromRGB(0,255,255)},
}

-- ===================== ITEM SURVIVOR =====================
local displayNames = {
    ["Motion Tracker"] = "Motion Tracker",
    ["Gate"] = "Portal",
    ["Flashlight"] = "Flashlight",
    ["Bandage"] = "Bandage",
    ["Parrying Dagger"] = "Parrying Dagger",
    ["Adrenaline Shot"] = "Adrenaline Shot",
    ["Shadow Clone"] = "Shadow Clone",
}

local function getSurvivorItem(player)
    if not player.Character then return nil end
    for _, obj in pairs(player.Character:GetDescendants()) do
        if obj:IsA("Tool") or obj:IsA("Accessory") or obj:IsA("Model") then
            if displayNames[obj.Name] then
                return "("..displayNames[obj.Name]..")" --
            end
        end
    end
    return nil
end

-- ===================== TRACK OBJECT=====================
local trackedObjects = {}
local function trackObject(obj)
    local n = obj.Name:lower()
    if n:find("generator") then trackedObjects[obj] = "Generators"
    elseif n:find("pallet") then trackedObjects[obj] = "Pallets"
    elseif n:find("gate") then trackedObjects[obj] = "ExitGates"
    elseif n:find("window") then trackedObjects[obj] = "Windows" end
end
for _,v in ipairs(Workspace:GetDescendants()) do
    if v:IsA("Model") then trackObject(v) end
end
Workspace.DescendantAdded:Connect(function(obj)
    if obj:IsA("Model") then trackObject(obj) end
end)

-- ===================== ROLE =====================
local function getRole(p)
    if p.Team and p.Team.Name then
        local n = p.Team.Name:lower()
        if n:find("killer") then return "Killer" end
        if n:find("survivor") then return "Survivor" end
    end
    return "Survivor"
end

-- ===================== HIGHLIGHT & LABEL =====================
local function ensureHighlight(model, color)
    if not model then return end
    local hl = model:FindFirstChild("VD_HL")
    if not hl then
        hl = Instance.new("Highlight")
        hl.Name = "VD_HL"
        hl.Adornee = model
        hl.FillColor = color
        hl.FillTransparency = 0.7
        hl.OutlineColor = Color3.fromRGB(255,255,255)
        hl.OutlineTransparency = 0
        hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
        hl.Parent = model
    else
        hl.FillColor = color
        hl.OutlineColor = Color3.fromRGB(255,255,255)
    end
end
local function clearHighlight(model)
    if model and model:FindFirstChild("VD_HL") then
        model.VD_HL:Destroy()
    end
end

local function ensureLabel(model, text)
    if not model then return end
    local lbl = model:FindFirstChild("VD_Label")
    if not lbl then
        lbl = Instance.new("BillboardGui")
        lbl.Name = "VD_Label"
        lbl.Size = UDim2.new(0,150,0,18)
        lbl.StudsOffset = Vector3.new(0,4.5,0)
        lbl.AlwaysOnTop = true
        lbl.MaxDistance = 500
        lbl.Parent = model
        local textLabel = Instance.new("TextLabel")
        textLabel.Name = "TextLabel"
        textLabel.Size = UDim2.new(1,0,1,0)
        textLabel.BackgroundTransparency = 1
        textLabel.TextScaled = true
        textLabel.Font = Enum.Font.SourceSansBold
        textLabel.RichText = true
        textLabel.TextStrokeTransparency = 0.8
        textLabel.TextColor3 = Color3.fromRGB(255,255,255)
        textLabel.Text = text
        textLabel.Parent = lbl
    else
        local textLabel = lbl:FindFirstChild("TextLabel")
        if textLabel then
            textLabel.RichText = true
            textLabel.Text = text
        end
    end
end
local function clearLabel(model)
    if model and model:FindFirstChild("VD_Label") then
        model.VD_Label:Destroy()
    end
end

-- ===================== GENERATOR PROGRESS =====================
local function getGeneratorProgress(gen)
    local progress = 0
    if gen:GetAttribute("Progress") then
        progress = gen:GetAttribute("Progress")
    elseif gen:GetAttribute("RepairProgress") then
        progress = gen:GetAttribute("RepairProgress")
    else
        for _, child in ipairs(gen:GetDescendants()) do
            if child:IsA("NumberValue") or child:IsA("IntValue") then
                local n = child.Name:lower()
                if n:find("progress") or n:find("repair") or n:find("percent") then
                    progress = child.Value
                    break
                end
            end
        end
    end
    progress = (progress > 1) and progress / 100 or progress
    return math.clamp(progress, 0, 1)
end
local function getProgressColor(percent)
    local r = 255*(1-percent)
    local g = 255*percent
    return Color3.fromRGB(r,g,0)
end
local function generatorFinished(gen)
    return getGeneratorProgress(gen) >= 0.99 or gen:FindFirstChild("Finished") or gen:FindFirstChild("Repaired")
end

-- ===================== FOV CORRIGIDO =====================
local function applyFOV()
    if Camera and Camera.FieldOfView ~= DESIRED_FOV then
        Camera.FieldOfView = DESIRED_FOV
    end
end

workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(function()
    task.wait(0.1)
    Camera = workspace.CurrentCamera
end)

RunService.RenderStepped:Connect(function()
    applyFOV()
end)

-- ===================== HITBOX =====================
local playerHitboxes = {}
local hitboxEnabledKiller = false
local hitboxEnabledAll = false
local headSize = 12
local hitboxTransparency = 1

Players.PlayerRemoving:Connect(function(player)
    if playerHitboxes[player] then
        playerHitboxes[player]:Destroy()
        playerHitboxes[player] = nil
    end
end)

RunService.RenderStepped:Connect(function()
    local roleLP = getRole(LP)
    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LP and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
            local hrp = player.Character.HumanoidRootPart
            local apply = (hitboxEnabledAll or (hitboxEnabledKiller and roleLP == "Killer"))

            if apply then
                if not playerHitboxes[player] then
                    playerHitboxes[player] = hrp
                end
                hrp.Size = Vector3.new(headSize, headSize, headSize)
                hrp.Transparency = hitboxTransparency
                hrp.BrickColor = BrickColor.new("Really black")
                hrp.Material = Enum.Material.Neon
                hrp.CanCollide = false
            else
                if playerHitboxes[player] then
                    hrp.Size = Vector3.new(2,2,1)
                    hrp.Transparency = 0
                    hrp.BrickColor = BrickColor.new("Medium stone grey")
                    hrp.Material = Enum.Material.Plastic
                    hrp.CanCollide = true
                    playerHitboxes[player] = nil
                end
            end
        end
    end
end)

-- ===================== UPDATE ESP =====================
local function updatePlayersESP()
    local LPPos = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") and LP.Character.HumanoidRootPart.Position
    if not LPPos then return end

    for _,p in ipairs(Players:GetPlayers()) do
        if p ~= LP and p.Character then
            local hrp = p.Character:FindFirstChild("HumanoidRootPart")
            if hrp then
                local role = getRole(p)
                local set = (role=="Killer") and espSettings.Killers or espSettings.Survivors
                if set and set.Enabled then
                    local labelText = ""..p.DisplayName..""

                    if role=="Killer" then
                        local dist = math.floor((hrp.Position - LPPos).Magnitude)
                        if dist <= DistanceCheck then
                            ensureHighlight(p.Character, set.Color)
                            labelText = labelText.." ["..dist.."]"
                            ensureLabel(p.Character, labelText)
                        else
                            clearHighlight(p.Character)
                            clearLabel(p.Character)
                        end
                    else
                        -- Survivors: adicionar item
                        local item = getSurvivorItem(p)
                        if item then
                            labelText = labelText.." "..item..""
                        end
                        ensureHighlight(p.Character, set.Color)
                        ensureLabel(p.Character, labelText)
                    end
                else
                    clearHighlight(p.Character)
                    clearLabel(p.Character)
                end
            end
        end
    end
end

RunService.Heartbeat:Connect(function()
    local LPPos = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") and LP.Character.HumanoidRootPart.Position
    if not LPPos then return end

    for obj,typeName in pairs(trackedObjects) do
        if obj and obj.Parent then
            local set = espSettings[typeName]
            if set and set.Enabled then
                local hl = obj:FindFirstChild("VD_HL")
                if not hl then
                    hl = Instance.new("Highlight")
                    hl.Name = "VD_HL"
                    hl.Adornee = obj
                    hl.FillTransparency = 1
                    hl.OutlineColor = set.Color
                    hl.OutlineTransparency = 0
                    hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
                    hl.Parent = obj
                else
                    hl.OutlineColor = set.Color
                end

                if typeName=="Generators" then
                    local progress = getGeneratorProgress(obj)
                    if not generatorFinished(obj) then
                        local percent = math.floor(progress*100)
                        if percent==0 and progress>0 then percent=1 end
                        local color = getProgressColor(progress)
                        local text = "["..percent.."%]"
                        ensureLabel(obj, text)
                    else
                        clearLabel(obj)
                    end
                else
                    clearLabel(obj)
                end
            else
                clearHighlight(obj)
                clearLabel(obj)
            end
        end
    end

    updatePlayersESP()
end)

-- ===================== GUI =====================
local Window = Rayfield:CreateWindow({
    Name="-",
    LoadingTitle="(ESP)",
    LoadingSubtitle="By SonOfJeksen",
    ConfigurationSaving={Enabled=true,FolderName="VD_Suite",FileName="vd_config"},
    KeySystem=false
})

-- ===================== TOGGLES =====================
local TabToggles = Window:CreateTab("ESP Toggles")
TabToggles:CreateToggle({Name="Windows ESP", CurrentValue=espSettings.Windows.Enabled, Flag="WindowsESP", Callback=function(v) espSettings.Windows.Enabled=v end})
TabToggles:CreateToggle({Name="Generators ESP", CurrentValue=espSettings.Generators.Enabled, Flag="GeneratorsESP", Callback=function(v) espSettings.Generators.Enabled=v end})
TabToggles:CreateToggle({Name="Pallets ESP", CurrentValue=espSettings.Pallets.Enabled, Flag="PalletsESP", Callback=function(v) espSettings.Pallets.Enabled=v end})
TabToggles:CreateToggle({Name="Exit Gates ESP", CurrentValue=espSettings.ExitGates.Enabled, Flag="ExitGatesESP", Callback=function(v) espSettings.ExitGates.Enabled=v end})
TabToggles:CreateToggle({Name="Killers ESP", CurrentValue=espSettings.Killers.Enabled, Flag="KillersESP", Callback=function(v) espSettings.Killers.Enabled=v end})
TabToggles:CreateToggle({Name="Survivors ESP", CurrentValue=espSettings.Survivors.Enabled, Flag="SurvivorsESP", Callback=function(v) espSettings.Survivors.Enabled=v end})

TabToggles:CreateSlider({
    Name="DISTANCE",
    Range={50,1000},
    Increment=10,
    Suffix=" studs",
    CurrentValue=DistanceCheck,
    Flag="DistanceCheck",
    Callback=function(v) DistanceCheck=v end
})

TabToggles:CreateSlider({
    Name="FOV",
    Range={70,120},
    Increment=1,
    Suffix="°",
    CurrentValue=DESIRED_FOV,
    Flag="FOVSlider",
    Callback=function(v) DESIRED_FOV=v end
})

-- ===================== COLORS =====================
local TabColors = Window:CreateTab("ESP Colors")
local function createColorPicker(name, setName)
    TabColors:CreateColorPicker({
        Name=name,
        Color=espSettings[setName].Color,
        Flag=name:gsub(" ",""),
        Default=espSettings[setName].Color,
        Callback=function(c)
            espSettings[setName].Color=c
        end
    })
end
for _, setName in pairs({"Windows","Generators","Pallets","ExitGates","Killers","Survivors"}) do
    createColorPicker(setName.." ESP Color", setName)
end

-- ===================== HITBOX =====================
local TabHitbox = Window:CreateTab("Hitbox")
TabHitbox:CreateToggle({Name="Hitbox (Killer Only)", CurrentValue=false, Flag="HitboxToggleKiller", Callback=function(v) hitboxEnabledKiller=v end})
TabHitbox:CreateToggle({Name="Hitbox (All Players)", CurrentValue=false, Flag="HitboxToggleAll", Callback=function(v) hitboxEnabledAll=v end})
TabHitbox:CreateSlider({Name="Hitbox Size", Range={4,30}, Increment=1, Suffix=" studs", CurrentValue=headSize, Flag="HitboxSize", Callback=function(v) headSize=v end})
TabHitbox:CreateSlider({Name="Hitbox Transparency", Range={0,1}, Increment=0.05, Suffix="", CurrentValue=hitboxTransparency, Flag="HitboxTransparency", Callback=function(v) hitboxTransparency=v end})

-- ===================== NOTIFICATION =====================
if Rayfield.Notify then Rayfield.Notify = function() end end