-- NOT OBFUSCATED LOL BC VIBECODED FULL, ENJOY 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 CollectionService = game:GetService("CollectionService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local Lighting = game:GetService("Lighting") local Camera = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer if not (ReplicatedStorage:FindFirstChild("Shared") and ReplicatedStorage.Shared:FindFirstChild("Constants") and ReplicatedStorage.Shared.Constants:FindFirstChild("GunConfig")) then return end local GunConfig = require(ReplicatedStorage.Shared.Constants.GunConfig) local ItemRegistry = require(ReplicatedStorage.Shared.Constants.ItemRegistry) local ShopConfig = require(ReplicatedStorage.Shared.Constants.ShopConfig) local GunController = nil for _, v in pairs(getgc(true)) do if type(v) == "table" and rawget(v, "_caster") ~= nil and rawget(v, "_networkController") ~= nil then GunController = v break end end local NetworkController = GunController and GunController._networkController local OriginalViewmodel = {} if GunConfig and GunConfig.VIEWMODEL then OriginalViewmodel.CameraRecoilAffectsCamera = GunConfig.VIEWMODEL.CameraRecoilAffectsCamera OriginalViewmodel.ViewBobFrequency = GunConfig.VIEWMODEL.ViewBobFrequency OriginalViewmodel.ViewBobPosition = GunConfig.VIEWMODEL.ViewBobPosition OriginalViewmodel.ViewBobRotation = GunConfig.VIEWMODEL.ViewBobRotation OriginalViewmodel.BreathAmplitude = GunConfig.VIEWMODEL.BreathAmplitude OriginalViewmodel.SwayAmplitude = GunConfig.VIEWMODEL.SwayAmplitude OriginalViewmodel.StrafeConeYawMaxDeg = GunConfig.VIEWMODEL.StrafeConeYawMaxDeg end local RarityColors = { Common = Color3.fromRGB(200, 200, 200), Uncommon = Color3.fromRGB(100, 255, 100), Rare = Color3.fromRGB(100, 150, 255), Epic = Color3.fromRGB(200, 100, 255), Legendary = Color3.fromRGB(255, 150, 50) } -- Settings State local Cfg = { SilentAim = false, DrawFOV = false, FOVColor = Color3.fromRGB(255,255,255), FOVRadius = 150, Wallbang = false, VisibleCheck = false, ExcludeNPC = false, AntiSwitch = false, MaxAimDist = 500, FireDelay = 0, TargetLine = false, TargetLineColor = Color3.fromRGB(255,50,50), TargetPart = "Head", Tracers = false, TracersColor = Color3.fromRGB(255,50,50), Hitmarker = false, HitmarkerColor = Color3.fromRGB(255,255,255), HitPoints = false, HitPointsColor = Color3.fromRGB(255,80,80), PlayerESP = false, PlayerColor = Color3.fromRGB(255,255,255), PlayerBoxes = false, PlayerNames = false, PlayerHealthbar = false, PlayerDistance = false, PlayerWeapon = false, PlayerMaxDist = 1500, PlayerChams = false, BotESP = false, BotColor = Color3.fromRGB(255,80,80), BotBoxes = false, BotNames = false, BotHealthbar = false, BotDistance = false, BotMaxDist = 1000, BotChams = false, LootESP = false, LootColor = Color3.fromRGB(255,215,0), LootUseRarityColor = true, LootMinPrice = 0, LootNames = false, LootShowPrice = true, LootBoxes = false, LootDistance = false, LootMaxDist = 500, ContainerESP = false, ContainerColor = Color3.fromRGB(0,200,255), ContainerNames = false, ContainerBoxes = false, ContainerDistance = false, ContainerShowValue = true, ContainerMinValue = 0, CorpsePlayer = false, CorpsePlayerColor = Color3.fromRGB(200,100,255), CorpseBot = false, CorpseBotColor = Color3.fromRGB(150,80,80), CorpseNames = false, CorpseBoxes = false, CorpseDistance = false, ExtractionESP = false, ExtractionColor = Color3.fromRGB(0,255,120), InfStamina = false, InfShield = false, NoRecoil = false, NoBob = false, NoSpread = false, InstantBullet = false, InstantADS = false, FastEquip = false, FastEquipSpeed = 30, Fullbright = false, StretchRes = false, StretchValue = 80, ThirdPerson = false, TPDist = 6, TPOffsetX = 2.5, Zoom = false, ZoomFOV = 15, VMThroughWall = true, VMHands = false, VMHandsColor = Color3.fromRGB(80,180,255), VMWeapon = false, VMWeaponColor = Color3.fromRGB(255,50,50), VMAlpha = 40, VMX = 0, VMY = 0, VMZ = 0, VMChamsType = "Highlight", Arrows = false, ArrowsColor = Color3.fromRGB(255,80,80), ArrowsName = true, ArrowsDist = true, ArrowsMaxDist = 1000, ArrowsEdge = 50, ArrowsSize = 12, LootRarities = {}, LootMap_MinPrice = 0, LootMap_MaxItems = 5, LootMap_Rarities = {}, ExtractTP = "" } -- ========================================== -- UI -- ========================================== local Window = Library:CreateWindow({ Title = 'protohook', Center = true, AutoShow = true, TabPadding = 8, MenuFadeTime = 0.2 }) local Tabs = { Combat = Window:AddTab('Combat'), Visuals = Window:AddTab('Visuals'), Misc = Window:AddTab('Misc'), ['UI Settings'] = Window:AddTab('UI Settings'), } -- Combat: Silent Aim (left) local SilentAimGroup = Tabs.Combat:AddLeftGroupbox('Silent Aim') SilentAimGroup:AddToggle('S_Aim', { Text = 'Enabled', Default = false, Callback = function(v) Cfg.SilentAim = v end }) SilentAimGroup:AddToggle('S_DrawFOV', { Text = 'Draw FOV', Default = false, Callback = function(v) Cfg.DrawFOV = v end }) :AddColorPicker('FOVCol', { Default = Color3.fromRGB(255,255,255), Title = 'FOV Color', Callback = function(v) Cfg.FOVColor = v end }) SilentAimGroup:AddSlider('S_FOVR', { Text = 'FOV Radius', Default = 150, Min = 10, Max = 800, Rounding = 0, Callback = function(v) Cfg.FOVRadius = v end }) SilentAimGroup:AddDropdown('S_Part', { Values = {'Head', 'UpperTorso', 'HumanoidRootPart'}, Default = 1, Multi = false, Text = 'Target Part', Callback = function(v) Cfg.TargetPart = v end }) SilentAimGroup:AddToggle('S_Line', { Text = 'Target Line', Default = false, Callback = function(v) Cfg.TargetLine = v end }) :AddColorPicker('TargLineCol', { Default = Color3.fromRGB(255,50,50), Title = 'Line Color', Callback = function(v) Cfg.TargetLineColor = v end }) SilentAimGroup:AddToggle('S_Wallbang', { Text = 'Wallbang', Default = false, Callback = function(v) Cfg.Wallbang = v end }) SilentAimGroup:AddToggle('S_Vis', { Text = 'Visible Check', Default = false, Callback = function(v) Cfg.VisibleCheck = v end }) SilentAimGroup:AddToggle('S_NPC', { Text = 'Exclude NPC', Default = false, Callback = function(v) Cfg.ExcludeNPC = v end }) SilentAimGroup:AddToggle('S_Anti', { Text = 'Anti-Switch Target', Default = false, Callback = function(v) Cfg.AntiSwitch = v end }) SilentAimGroup:AddSlider('S_MaxD', { Text = 'Max Distance', Default = 500, Min = 50, Max = 3000, Rounding = 0, Callback = function(v) Cfg.MaxAimDist = v end }) SilentAimGroup:AddSlider('S_Delay', { Text = 'Fire Delay (ms)', Default = 0, Min = 0, Max = 500, Rounding = 0, Callback = function(v) Cfg.FireDelay = v end }) -- Combat: Hit Effects (right) local HitFXGroup = Tabs.Combat:AddRightGroupbox('Hit Effects') HitFXGroup:AddToggle('H_HM', { Text = 'Hitmarker', Default = false, Callback = function(v) Cfg.Hitmarker = v end }) :AddColorPicker('HmCol', { Default = Color3.fromRGB(255,255,255), Title = 'Color', Callback = function(v) Cfg.HitmarkerColor = v end }) HitFXGroup:AddToggle('H_HP', { Text = 'Hit Points', Default = false, Callback = function(v) Cfg.HitPoints = v end }) :AddColorPicker('HpCol', { Default = Color3.fromRGB(255,80,80), Title = 'Color', Callback = function(v) Cfg.HitPointsColor = v end }) HitFXGroup:AddToggle('H_Trc', { Text = 'Bullet Tracers', Default = false, Callback = function(v) Cfg.Tracers = v end }) :AddColorPicker('TrcCol', { Default = Color3.fromRGB(255,50,50), Title = 'Color', Callback = function(v) Cfg.TracersColor = v end }) -- Visuals: Players ESP (left) local PlayerESPGroup = Tabs.Visuals:AddLeftGroupbox('Players ESP') PlayerESPGroup:AddToggle('P_ESP', { Text = 'Enabled', Default = false, Callback = function(v) Cfg.PlayerESP = v end }) :AddColorPicker('PEspCol', { Default = Color3.fromRGB(255,255,255), Title = 'Color', Callback = function(v) Cfg.PlayerColor = v end }) PlayerESPGroup:AddToggle('P_Box', { Text = 'Boxes', Default = false, Callback = function(v) Cfg.PlayerBoxes = v end }) PlayerESPGroup:AddToggle('P_Name', { Text = 'Names', Default = false, Callback = function(v) Cfg.PlayerNames = v end }) PlayerESPGroup:AddToggle('P_Hp', { Text = 'Healthbar', Default = false, Callback = function(v) Cfg.PlayerHealthbar = v end }) PlayerESPGroup:AddToggle('P_Dist', { Text = 'Distance', Default = false, Callback = function(v) Cfg.PlayerDistance = v end }) PlayerESPGroup:AddToggle('P_Wep', { Text = 'Weapon', Default = false, Callback = function(v) Cfg.PlayerWeapon = v end }) PlayerESPGroup:AddToggle('P_Chams', { Text = 'Chams', Default = false, Callback = function(v) Cfg.PlayerChams = v end }) PlayerESPGroup:AddSlider('P_MaxD', { Text = 'Max Distance', Default = 1500, Min = 0, Max = 5000, Rounding = 0, Callback = function(v) Cfg.PlayerMaxDist = v end }) -- Visuals: Off-Screen Arrows (left) local ArrowsGroup = Tabs.Visuals:AddLeftGroupbox('Off-Screen Arrows') ArrowsGroup:AddToggle('A_ESP', { Text = 'Enabled', Default = false, Callback = function(v) Cfg.Arrows = v end }) :AddColorPicker('ArrCol', { Default = Color3.fromRGB(255,80,80), Title = 'Color', Callback = function(v) Cfg.ArrowsColor = v end }) ArrowsGroup:AddToggle('A_Name', { Text = 'Show Name', Default = true, Callback = function(v) Cfg.ArrowsName = v end }) ArrowsGroup:AddToggle('A_Dist', { Text = 'Show Distance', Default = true, Callback = function(v) Cfg.ArrowsDist = v end }) ArrowsGroup:AddSlider('A_MaxD', { Text = 'Max Distance', Default = 1000, Min = 50, Max = 5000, Rounding = 0, Callback = function(v) Cfg.ArrowsMaxDist = v end }) -- Visuals: Bots ESP (right) local BotESPGroup = Tabs.Visuals:AddRightGroupbox('Bots ESP') BotESPGroup:AddToggle('B_ESP', { Text = 'Enabled', Default = false, Callback = function(v) Cfg.BotESP = v end }) :AddColorPicker('BEspCol', { Default = Color3.fromRGB(255,80,80), Title = 'Color', Callback = function(v) Cfg.BotColor = v end }) BotESPGroup:AddToggle('B_Box', { Text = 'Boxes', Default = false, Callback = function(v) Cfg.BotBoxes = v end }) BotESPGroup:AddToggle('B_Name', { Text = 'Names', Default = false, Callback = function(v) Cfg.BotNames = v end }) BotESPGroup:AddToggle('B_Hp', { Text = 'Healthbar', Default = false, Callback = function(v) Cfg.BotHealthbar = v end }) BotESPGroup:AddToggle('B_Dist', { Text = 'Distance', Default = false, Callback = function(v) Cfg.BotDistance = v end }) BotESPGroup:AddToggle('B_Chams', { Text = 'Chams', Default = false, Callback = function(v) Cfg.BotChams = v end }) BotESPGroup:AddSlider('B_MaxD', { Text = 'Max Distance', Default = 1000, Min = 0, Max = 5000, Rounding = 0, Callback = function(v) Cfg.BotMaxDist = v end }) -- Visuals: Loot tabs (right tabbox) local LootTabbox = Tabs.Visuals:AddRightTabbox() local TabItems = LootTabbox:AddTab('Items') local TabContainers = LootTabbox:AddTab('Containers') local TabCorpses = LootTabbox:AddTab('Corpses') local TabExtracts = LootTabbox:AddTab('Extracts') TabItems:AddToggle('L_ESP', { Text = 'Enabled', Default = false, Callback = function(v) Cfg.LootESP = v end }) :AddColorPicker('IEspCol', { Default = Color3.fromRGB(255,215,0), Title = 'Color', Callback = function(v) Cfg.LootColor = v end }) TabItems:AddToggle('L_Rar', { Text = 'Use Rarity Colors', Default = true, Callback = function(v) Cfg.LootUseRarityColor = v end }) TabItems:AddToggle('L_Name', { Text = 'Item Names', Default = false, Callback = function(v) Cfg.LootNames = v end }) TabItems:AddToggle('L_Price', { Text = 'Show Price', Default = true, Callback = function(v) Cfg.LootShowPrice = v end }) TabItems:AddToggle('L_Box', { Text = 'Item Boxes', Default = false, Callback = function(v) Cfg.LootBoxes = v end }) TabItems:AddToggle('L_Dist', { Text = 'Item Distance', Default = false, Callback = function(v) Cfg.LootDistance = v end }) TabItems:AddSlider('L_MaxD', { Text = 'Max Distance', Default = 500, Min = 0, Max = 3000, Rounding = 0, Callback = function(v) Cfg.LootMaxDist = v end }) TabItems:AddInput('L_MinP', { Text = 'Min Sell Price', Default = '0', Numeric = true, Callback = function(v) Cfg.LootMinPrice = tonumber(v) or 0 end }) TabItems:AddDropdown('L_RarF', { Values = {'Common', 'Uncommon', 'Rare', 'Epic', 'Legendary'}, Default = 1, Multi = true, Text = 'Allowed Rarities', Callback = function(v) local set = {} if type(v) == "table" then for k, val in pairs(v) do if type(k) == "string" and val == true then set[k] = true end end end Cfg.LootRarities = set end }) TabContainers:AddToggle('C_ESP', { Text = 'Enabled', Default = false, Callback = function(v) Cfg.ContainerESP = v end }) :AddColorPicker('CEspCol', { Default = Color3.fromRGB(0,200,255), Title = 'Color', Callback = function(v) Cfg.ContainerColor = v end }) TabContainers:AddToggle('C_Name', { Text = 'Names', Default = false, Callback = function(v) Cfg.ContainerNames = v end }) TabContainers:AddToggle('C_Box', { Text = 'Boxes', Default = false, Callback = function(v) Cfg.ContainerBoxes = v end }) TabContainers:AddToggle('C_Dist', { Text = 'Distance', Default = false, Callback = function(v) Cfg.ContainerDistance = v end }) TabContainers:AddToggle('C_Val', { Text = 'Show Value', Default = true, Callback = function(v) Cfg.ContainerShowValue = v end }) TabContainers:AddInput('C_MinP', { Text = 'Min Total Value', Default = '0', Numeric = true, Callback = function(v) Cfg.ContainerMinValue = tonumber(v) or 0 end }) TabCorpses:AddToggle('CP_ESP', { Text = 'Player Corpses', Default = false, Callback = function(v) Cfg.CorpsePlayer = v end }) :AddColorPicker('PCorpCol', { Default = Color3.fromRGB(200,100,255), Title = 'Color', Callback = function(v) Cfg.CorpsePlayerColor = v end }) TabCorpses:AddToggle('CB_ESP', { Text = 'Bot Corpses', Default = false, Callback = function(v) Cfg.CorpseBot = v end }) :AddColorPicker('BCorpCol', { Default = Color3.fromRGB(150,80,80), Title = 'Color', Callback = function(v) Cfg.CorpseBotColor = v end }) TabCorpses:AddToggle('CO_Name', { Text = 'Names', Default = false, Callback = function(v) Cfg.CorpseNames = v end }) TabCorpses:AddToggle('CO_Box', { Text = 'Boxes', Default = false, Callback = function(v) Cfg.CorpseBoxes = v end }) TabCorpses:AddToggle('CO_Dist', { Text = 'Distance', Default = false, Callback = function(v) Cfg.CorpseDistance = v end }) TabExtracts:AddToggle('E_ESP', { Text = 'Extraction Points', Default = false, Callback = function(v) Cfg.ExtractionESP = v end }) :AddColorPicker('ExCol', { Default = Color3.fromRGB(0,255,120), Title = 'Color', Callback = function(v) Cfg.ExtractionColor = v end }) -- Misc: Local Player (left) local LocalGroup = Tabs.Misc:AddLeftGroupbox('Local Player') LocalGroup:AddToggle('M_Stam', { Text = 'Infinite Stamina', Default = false, Callback = function(v) Cfg.InfStamina = v end }) LocalGroup:AddToggle('M_Shld', { Text = 'Infinite Shield', Default = false, Callback = function(v) Cfg.InfShield = v end }) LocalGroup:AddDropdown('M_ExDrop', { Values = {'Loading...'}, Default = 1, Multi = false, Text = 'Extractions', Callback = function(v) Cfg.ExtractTP = v end }) LocalGroup:AddButton('Teleport to Extraction', function() if Cfg.ExtractTP and Cfg.ExtractTP ~= "" and Cfg.ExtractTP ~= "Loading..." then local extracts = CollectionService:GetTagged("Extract") for _, ext in ipairs(extracts) do if ext.Name == Cfg.ExtractTP then local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local pos = ext:IsA("BasePart") and ext.Position or (ext:IsA("Model") and ext:GetPivot().Position) if hrp and pos then hrp.CFrame = CFrame.new(pos + Vector3.new(0, 3, 0)) Library:Notify("Teleported to " .. ext.Name, 3) end break end end end end) -- Misc: Visual / World (left) local VisGroup = Tabs.Misc:AddLeftGroupbox('Visual / World') VisGroup:AddToggle('V_FB', { Text = 'Fullbright', Default = false, Callback = function(v) Cfg.Fullbright = v end }) VisGroup:AddToggle('V_SR', { Text = 'Stretch Res', Default = false, Callback = function(v) Cfg.StretchRes = v end }) VisGroup:AddSlider('V_SRV', { Text = 'Stretch Value', Default = 80, Min = 50, Max = 100, Rounding = 0, Callback = function(v) Cfg.StretchValue = v end }) VisGroup:AddToggle('V_TP', { Text = 'Third Person', Default = false, Callback = function(v) Cfg.ThirdPerson = v end }) VisGroup:AddLabel('Third Person Bind'):AddKeyPicker('V_TPK', { Default = 'None', NoUI = true, Text = 'Third Person' }) VisGroup:AddSlider('V_TPD', { Text = 'TP Distance', Default = 6, Min = 2, Max = 20, Rounding = 1, Callback = function(v) Cfg.TPDist = v end }) VisGroup:AddToggle('V_ZM', { Text = 'Zoom', Default = false, Callback = function(v) Cfg.Zoom = v end }) VisGroup:AddLabel('Zoom Bind'):AddKeyPicker('V_ZMK', { Default = 'None', NoUI = true, Text = 'Zoom' }) VisGroup:AddSlider('V_ZMF', { Text = 'Zoom FOV', Default = 15, Min = 5, Max = 50, Rounding = 0, Callback = function(v) Cfg.ZoomFOV = v end }) -- Misc: Loot Exploits (left) local LootExploitGroup = Tabs.Misc:AddLeftGroupbox('Loot Exploits') LootExploitGroup:AddInput('LM_MinP', { Text = 'Min Sell Price', Default = '0', Numeric = true, Callback = function(v) Cfg.LootMap_MinPrice = tonumber(v) or 0 end }) LootExploitGroup:AddDropdown('LM_RarF', { Values = {'Common', 'Uncommon', 'Rare', 'Epic', 'Legendary'}, Default = 1, Multi = true, Text = 'Rarities Filter', Callback = function(v) local set = {} if type(v) == "table" then for k, val in pairs(v) do if type(k) == "string" and val == true then set[k] = true end end end Cfg.LootMap_Rarities = set end }) LootExploitGroup:AddSlider('LM_Max', { Text = 'Max Items', Default = 5, Min = 1, Max = 50, Rounding = 0, Callback = function(v) Cfg.LootMap_MaxItems = v end }) LootExploitGroup:AddButton('Loot Whole Map', function() if not NetworkController then return end local WorldItems = workspace:FindFirstChild("WorldItems") if not WorldItems then return end local char = LocalPlayer.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end local items = {} local seen = {} for _, desc in ipairs(WorldItems:GetDescendants()) do if desc:IsA("BasePart") then local nodeId = desc:GetAttribute("WorldItemNodeId") local itemId = desc:GetAttribute("WorldItemId") if type(nodeId) == "string" and nodeId ~= "" and type(itemId) == "string" and itemId ~= "" and not seen[nodeId] then local itemData = ItemRegistry.Items and ItemRegistry.Items[itemId] local rarity = itemData and itemData.Rarity if next(Cfg.LootMap_Rarities) then if not rarity or not Cfg.LootMap_Rarities[rarity] then continue end end local sellPrice = ShopConfig.SellPrices and ShopConfig.SellPrices[itemId] or 0 if Cfg.LootMap_MinPrice > 0 and sellPrice < Cfg.LootMap_MinPrice then continue end seen[nodeId] = true table.insert(items, {nodeId = nodeId, pos = desc.Position}) end end end local savedCFrame = hrp.CFrame local looted = 0 task.spawn(function() local function hasPocketRoom() local inv = NetworkController.Inventory if type(inv) ~= "table" then return true end local used = 0 if type(inv.pockets) == "table" then for _, ps in pairs(inv.pockets) do if type(ps) == "table" and type(ps.itemId) == "string" and ps.itemId ~= "" then used = used + 1 end end end if used < 5 then return true end if type(inv.backpack) == "table" and inv.backpack.equipped then local cap = inv.backpack.capacity or 0 local usedBp = 0 if type(inv.backpack.slots) == "table" then for _, ps in pairs(inv.backpack.slots) do if type(ps) == "table" and type(ps.itemId) == "string" and ps.itemId ~= "" then usedBp = usedBp + 1 end end end if cap > 0 and usedBp < cap then return true end end return false end for _, item in ipairs(items) do if looted >= Cfg.LootMap_MaxItems then Library:Notify("Loot Whole Map: reached max items ("..Cfg.LootMap_MaxItems..")", 3) break end if not hasPocketRoom() then Library:Notify("Loot Whole Map: inventory full", 3) break end if not hrp or not hrp.Parent then break end hrp.CFrame = CFrame.new(item.pos + Vector3.new(0, 2, 0)) task.wait(0.21) pcall(function() NetworkController:RequestPickupWorldItem(item.nodeId) end) looted = looted + 1 task.wait(0.28) end if hrp and hrp.Parent then hrp.CFrame = savedCFrame end Library:Notify("Loot Whole Map: done ("..looted.." items)", 3) end) end) -- Misc: Gun Mods (right) local GunModsGroup = Tabs.Misc:AddRightGroupbox('Gun Mods') GunModsGroup:AddToggle('M_NR', { Text = 'No Recoil', Default = false, Callback = function(v) Cfg.NoRecoil = v end }) GunModsGroup:AddToggle('M_NB', { Text = 'No Camera Bob', Default = false, Callback = function(v) Cfg.NoBob = v end }) GunModsGroup:AddToggle('M_NS', { Text = 'No Spread', Default = false, Callback = function(v) Cfg.NoSpread = v end }) GunModsGroup:AddToggle('M_IB', { Text = 'Instant Bullet',Default = false, Callback = function(v) Cfg.InstantBullet = v end }) GunModsGroup:AddToggle('M_IADS', { Text = 'Instant ADS', Default = false, Callback = function(v) Cfg.InstantADS = v end }) GunModsGroup:AddToggle('M_FE', { Text = 'Fast Equip', Default = false, Callback = function(v) Cfg.FastEquip = v end }) GunModsGroup:AddSlider('M_FES', { Text = 'Equip Speed', Default = 30, Min = 2, Max = 100, Rounding = 0, Callback = function(v) Cfg.FastEquipSpeed = v end }) -- Misc: View Model (right) local VMGroup = Tabs.Misc:AddRightGroupbox('View Model') VMGroup:AddDropdown('VM_Style', { Values = {'Highlight', 'ForceField'}, Default = 1, Multi = false, Text = 'Chams Style', Callback = function(v) Cfg.VMChamsType = v end }) VMGroup:AddToggle('VM_Wall', { Text = 'Draw Through Wall', Default = true, Callback = function(v) Cfg.VMThroughWall = v end }) VMGroup:AddToggle('VM_Hands', { Text = 'Hands Chams', Default = false, Callback = function(v) Cfg.VMHands = v end }) :AddColorPicker('VMHCol', { Default = Color3.fromRGB(80,180,255), Title = 'Color', Callback = function(v) Cfg.VMHandsColor = v end }) VMGroup:AddToggle('VM_Wep', { Text = 'Weapon Chams', Default = false, Callback = function(v) Cfg.VMWeapon = v end }) :AddColorPicker('VMWCol', { Default = Color3.fromRGB(255,50,50), Title = 'Color', Callback = function(v) Cfg.VMWeaponColor = v end }) VMGroup:AddSlider('VM_Alpha', { Text = 'Fill Alpha %', Default = 40, Min = 0, Max = 100, Rounding = 0, Callback = function(v) Cfg.VMAlpha = v end }) VMGroup:AddSlider('VM_OffX', { Text = 'Offset X', Default = 0, Min = -300, Max = 300, Rounding = 0, Callback = function(v) Cfg.VMX = v / 100 end }) VMGroup:AddSlider('VM_OffY', { Text = 'Offset Y', Default = 0, Min = -300, Max = 300, Rounding = 0, Callback = function(v) Cfg.VMY = v / 100 end }) VMGroup:AddSlider('VM_OffZ', { Text = 'Offset Z', Default = 0, Min = -300, Max = 300, Rounding = 0, Callback = function(v) Cfg.VMZ = v / 100 end }) -- UI Settings footer 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('EFR_Hack') SaveManager:SetFolder('EFR_Hack/config') SaveManager:BuildConfigSection(Tabs['UI Settings']) ThemeManager:ApplyToTab(Tabs['UI Settings']) SaveManager:LoadAutoloadConfig() -- ========================================== -- Unified Entity & Rendering Engine -- ========================================== local Entities = { List = {} } local Drawings = {} local ArrowPool = {} local function CreateDrawing(type, props) local d = Drawing.new(type) for k, v in pairs(props) do d[k] = v end return d end local function GetDrawings(inst) if not Drawings[inst] then Drawings[inst] = { Box = CreateDrawing("Square", {Thickness = 1, Filled = false, Visible = false}), Name = CreateDrawing("Text", {Size = 14, Center = true, Outline = true, Visible = false}), Dist = CreateDrawing("Text", {Size = 13, Center = true, Outline = true, Visible = false}), HealthBg = CreateDrawing("Line", {Thickness = 3, Visible = false}), Health = CreateDrawing("Line", {Thickness = 2, Visible = false}) } end return Drawings[inst] end local function GetArrowDrawing(inst) if not ArrowPool[inst] then ArrowPool[inst] = { t2 = CreateDrawing("Triangle", {Thickness = 1, Filled = true, Visible = false, Color = Color3.new(0,0,0)}), t1 = CreateDrawing("Triangle", {Thickness = 1, Filled = true, Visible = false}), txt = CreateDrawing("Text", {Size = 13, Center = true, Outline = true, Visible = false}) } end return ArrowPool[inst] end local function RemoveEntity(inst) Entities.List[inst] = nil if Drawings[inst] then for _, d in pairs(Drawings[inst]) do pcall(function() d:Remove() end) end Drawings[inst] = nil end if ArrowPool[inst] then for _, d in pairs(ArrowPool[inst]) do pcall(function() d:Remove() end) end ArrowPool[inst] = nil end local hl = inst:FindFirstChildWhichIsA("Highlight") if hl then pcall(function() hl:Destroy() end) end end local function UpdateExtractList() local e = CollectionService:GetTagged("Extract") local list = {} for _, ext in ipairs(e) do table.insert(list, ext.Name) end if #list == 0 then list = {"No extractions found"} end pcall(function() Options.M_ExDrop:SetValues(list) end) end task.spawn(function() task.wait(1) UpdateExtractList() end) local function CheckDescendant(desc) if desc:IsA("Model") and desc.Name:sub(-6) == "Corpse" then Entities.List[desc] = {Type = "CorpsePlayer", Inst = desc} return end if desc:IsA("BasePart") then if desc:GetAttribute("WorldItemId") then Entities.List[desc] = {Type = "Loot", Inst = desc} end if desc:GetAttribute("WorldItemHasContainer") or CollectionService:HasTag(desc, "Container") then Entities.List[desc] = {Type = "Container", Inst = desc} end if CollectionService:HasTag(desc, "Extract") then Entities.List[desc] = {Type = "Extract", Inst = desc} UpdateExtractList() end end if desc:IsA("Model") and CollectionService:HasTag(desc, "Extract") then Entities.List[desc] = {Type = "Extract", Inst = desc} UpdateExtractList() end end CollectionService:GetInstanceAddedSignal("RaidPlayerCharacter"):Connect(function(inst) if inst:GetAttribute("RaidPlayerUserId") ~= LocalPlayer.UserId then Entities.List[inst] = {Type = "Player", Inst = inst} end end) for _, inst in ipairs(CollectionService:GetTagged("RaidPlayerCharacter")) do if inst:GetAttribute("RaidPlayerUserId") ~= LocalPlayer.UserId then Entities.List[inst] = {Type = "Player", Inst = inst} end end CollectionService:GetInstanceAddedSignal("Enemy"):Connect(function(inst) Entities.List[inst] = {Type = "Bot", Inst = inst} end) for _, inst in ipairs(CollectionService:GetTagged("Enemy")) do Entities.List[inst] = {Type = "Bot", Inst = inst} end workspace.DescendantAdded:Connect(CheckDescendant) for _, desc in ipairs(workspace:GetDescendants()) do CheckDescendant(desc) end workspace.DescendantRemoving:Connect(RemoveEntity) CollectionService:GetInstanceRemovedSignal("RaidPlayerCharacter"):Connect(RemoveEntity) CollectionService:GetInstanceRemovedSignal("Enemy"):Connect(RemoveEntity) local function DrawTracerBeam(origin, hitPos) if (hitPos - origin).Magnitude < 1 then return end local p0 = Instance.new("Part") p0.Anchored = true; p0.CanCollide = false; p0.CanQuery = false p0.CastShadow = false; p0.Transparency = 1; p0.Size = Vector3.one * 0.01 p0.CFrame = CFrame.new(origin); p0.Parent = workspace local p1 = Instance.new("Part") p1.Anchored = true; p1.CanCollide = false; p1.CanQuery = false p1.CastShadow = false; p1.Transparency = 1; p1.Size = Vector3.one * 0.01 p1.CFrame = CFrame.new(hitPos); p1.Parent = workspace local a0 = Instance.new("Attachment", p0) local a1 = Instance.new("Attachment", p1) local beam = Instance.new("Beam") beam.Attachment0 = a0; beam.Attachment1 = a1 beam.Width0 = 0.08; beam.Width1 = 0.02 beam.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Cfg.TracersColor), ColorSequenceKeypoint.new(1, Color3.fromRGB(255,255,255)) }) beam.LightEmission = 1; beam.LightInfluence = 0 beam.FaceCamera = true; beam.Segments = 1 beam.Transparency = NumberSequence.new(0, 0) beam.Parent = workspace local startT = tick() local conn conn = RunService.Heartbeat:Connect(function() local t = (tick() - startT) / 0.35 if t >= 1 then beam:Destroy(); p0:Destroy(); p1:Destroy(); conn:Disconnect(); return end local a = 1 - t beam.Width0 = 0.08 * a; beam.Width1 = 0.02 * a beam.Transparency = NumberSequence.new(1-a, 1-a) end) end local function ShowHitEffect(worldPos, damage) local sp3, onScr = Camera:WorldToViewportPoint(worldPos) if not onScr then return end local sp = Vector2.new(sp3.X, sp3.Y) local lines = {} local GAP, SIZE, THICK = 5, 9, 1.5 local dirs = {Vector2.new(-1,0), Vector2.new(1,0), Vector2.new(0,-1), Vector2.new(0,1)} if Cfg.Hitmarker then for _, d in ipairs(dirs) do local ln = Drawing.new("Line") ln.Color = Cfg.HitmarkerColor; ln.Thickness = THICK; ln.Visible = true ln.From = sp + d * GAP; ln.To = sp + d * (GAP + SIZE) table.insert(lines, {draw = ln, dir = d}) end end local txt if Cfg.HitPoints and damage and damage > 0 then txt = Drawing.new("Text") txt.Text = "-"..math.floor(damage + 0.5); txt.Color = Cfg.HitPointsColor txt.Size = 17; txt.Outline = true; txt.Center = true txt.Position = Vector2.new(sp.X, sp.Y - 26); txt.Visible = true end local startT = tick() local conn conn = RunService.RenderStepped:Connect(function() local t = math.min((tick() - startT) / 0.5, 1) local alpha = 1 - t local cs3, vis = Camera:WorldToViewportPoint(worldPos) local cur = vis and Vector2.new(cs3.X, cs3.Y) or sp local expand = t * 6 for _, e in ipairs(lines) do e.draw.Transparency = 1 - alpha e.draw.From = cur + e.dir * (GAP + expand) e.draw.To = cur + e.dir * (GAP + SIZE + expand) end if txt then txt.Transparency = 1 - alpha; txt.Position = Vector2.new(cur.X, cur.Y - 26 - t * 20) end if t >= 1 then for _, e in ipairs(lines) do e.draw:Remove() end if txt then txt:Remove() end conn:Disconnect() end end) end local FOVCircle = CreateDrawing("Circle", {Filled = false, Thickness = 1}) local TargetLine = CreateDrawing("Line", {Thickness = 1.5, Transparency = 0.3}) local WallbangText = CreateDrawing("Text", {Text = "[ WALLBANG ]", Size = 14, Outline = true, Center = true, Color = Color3.fromRGB(255,165,0)}) local LockedTarget = nil local _wasZoomed = false local function IsVisible(part) local origin = Camera.CFrame.Position local rp = RaycastParams.new() rp.FilterType = Enum.RaycastFilterType.Exclude rp.FilterDescendantsInstances = {Camera, LocalPlayer.Character} local ray = workspace:Raycast(origin, part.Position - origin, rp) return not ray or ray.Instance:IsDescendantOf(part.Parent) end local function ProjectToScreen(worldPos) local pos, onScreen = Camera:WorldToViewportPoint(worldPos) if pos.Z <= 0 then return nil, false end return Vector2.new(pos.X, pos.Y), onScreen end local function UpdateChams(inst, enabled, col) local hl = inst:FindFirstChildWhichIsA("Highlight") if enabled then if not hl then hl = Instance.new("Highlight") hl.Name = "\\0" hl.OutlineColor = Color3.fromRGB(0,0,0) hl.OutlineTransparency = 0 hl.Parent = inst end hl.Adornee = inst hl.FillColor = col hl.FillTransparency = 0.5 hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop hl.Enabled = true else if hl then hl.Enabled = false end end end local ContainerCache = {} if NetworkController then NetworkController.SearchedContainerChanged:Connect(function(data) if not (data and data.nodeId and data.slots) then return end local totalValue = 0 for _, slot in ipairs(data.slots) do if slot.occupied and slot.itemId and ShopConfig.SellPrices and ShopConfig.SellPrices[slot.itemId] then totalValue = totalValue + ShopConfig.SellPrices[slot.itemId] * (slot.quantity or 1) end end ContainerCache[data.nodeId] = totalValue end) end local OrigLighting = { Ambient = Lighting.Ambient, OutdoorAmbient = Lighting.OutdoorAmbient, Brightness = Lighting.Brightness, GlobalShadows = Lighting.GlobalShadows, } local function ProcessESP(inst, data, dist, onScreen, screenPos, root, nameStr, enabled, boxOn, nameOn, distOn, hpOn, chamsOn, maxD, col) local isChar = (data.Type == "Player" or data.Type == "Bot") if not enabled or dist > maxD then if isChar then UpdateChams(inst, false, col) end return end if isChar then UpdateChams(inst, chamsOn, col) end local draw = GetDrawings(inst) if onScreen then local size = Vector3.new(4, 5, 4) if inst:IsA("Model") then local _, sz = inst:GetBoundingBox(); size = sz elseif inst:IsA("BasePart") then size = inst.Size end local spTop, _ = ProjectToScreen(root.Position + Vector3.new(0, size.Y/2, 0)) local spBot, _ = ProjectToScreen(root.Position - Vector3.new(0, size.Y/2, 0)) if spTop and spBot then local height = math.abs(spBot.Y - spTop.Y) local width = height * 0.65 local boxPos = Vector2.new(screenPos.X - width/2, screenPos.Y - height/2) if boxOn then draw.Box.Size = Vector2.new(width, height) draw.Box.Position = boxPos draw.Box.Color = col draw.Box.Visible = true end local textY = boxPos.Y - 16 if nameOn then draw.Name.Text = nameStr draw.Name.Position = Vector2.new(screenPos.X, textY) draw.Name.Color = col draw.Name.Visible = true textY = textY - 14 end if distOn then draw.Dist.Text = math.floor(dist) .. "m" draw.Dist.Position = Vector2.new(screenPos.X, boxPos.Y + height + 2) draw.Dist.Color = col draw.Dist.Visible = true end if hpOn and isChar then local hum = inst:FindFirstChild("Humanoid") if hum then local pct = math.clamp(hum.Health / hum.MaxHealth, 0, 1) draw.HealthBg.From = Vector2.new(boxPos.X - 5, boxPos.Y + height) draw.HealthBg.To = Vector2.new(boxPos.X - 5, boxPos.Y) draw.HealthBg.Color = Color3.new(0,0,0) draw.HealthBg.Visible = true draw.Health.From = Vector2.new(boxPos.X - 5, boxPos.Y + height) draw.Health.To = Vector2.new(boxPos.X - 5, boxPos.Y + height - (height * pct)) draw.Health.Color = Color3.new(1-pct, pct, 0) draw.Health.Visible = true end end end else if Cfg.Arrows and isChar and dist <= Cfg.ArrowsMaxDist then local arr = GetArrowDrawing(inst) local vp = Camera.ViewportSize local center = Vector2.new(vp.X / 2, vp.Y / 2) local wp3 = Camera:WorldToViewportPoint(root.Position) local wvp = Vector2.new(wp3.X, wp3.Y) local dir2d = wp3.Z < 0 and (center - wvp) or (wvp - center) if dir2d.Magnitude < 1 then dir2d = Vector2.new(0, -1) end dir2d = dir2d.Unit local ep = Cfg.ArrowsEdge local tx = dir2d.X ~= 0 and ((dir2d.X > 0 and (vp.X-ep-center.X) or (ep-center.X)) / dir2d.X) or math.huge local ty = dir2d.Y ~= 0 and ((dir2d.Y > 0 and (vp.Y-ep-center.Y) or (ep-center.Y)) / dir2d.Y) or math.huge local ePos = center + dir2d * math.min(math.abs(tx), math.abs(ty)) local sz = Cfg.ArrowsSize local perp = Vector2.new(-dir2d.Y, dir2d.X) arr.t2.PointA = ePos + dir2d * 2 arr.t2.PointB = ePos - dir2d * sz - perp * (sz * 0.5 + 1.5) arr.t2.PointC = ePos - dir2d * sz + perp * (sz * 0.5 + 1.5) arr.t1.PointA = ePos arr.t1.PointB = ePos - dir2d * sz - perp * (sz * 0.5) arr.t1.PointC = ePos - dir2d * sz + perp * (sz * 0.5) arr.t1.Color = Cfg.ArrowsColor arr.t1.Visible = true arr.t2.Visible = true if Cfg.ArrowsName or Cfg.ArrowsDist then arr.txt.Text = (Cfg.ArrowsName and nameStr or "") .. (Cfg.ArrowsName and Cfg.ArrowsDist and " " or "") .. (Cfg.ArrowsDist and math.floor(dist).."m" or "") arr.txt.Position = Vector2.new(ePos.X, ePos.Y + 14) arr.txt.Color = Cfg.ArrowsColor arr.txt.Visible = true end end end end local function UpdateEntity(inst, data, camPos, center, vp) local draw = GetDrawings(inst) local arrow = ArrowPool[inst] if arrow then arrow.t1.Visible = false; arrow.t2.Visible = false; arrow.txt.Visible = false end local isChar = (data.Type == "Player" or data.Type == "Bot") local root = inst:IsA("BasePart") and inst or inst:FindFirstChild("HumanoidRootPart") or inst:FindFirstChildWhichIsA("BasePart", true) draw.Box.Visible = false draw.Name.Visible = false draw.Dist.Visible = false draw.Health.Visible = false draw.HealthBg.Visible = false if not root or not root.Parent then return nil, math.huge end local dist = (root.Position - camPos).Magnitude local sp, onScreen = ProjectToScreen(root.Position) if not sp then if not (isChar and Cfg.Arrows and dist <= Cfg.ArrowsMaxDist) then return nil, dist end onScreen = false end local screenPos = sp or center local nameStr = inst.Name local col = Color3.new(1,1,1) if data.Type == "Player" then nameStr = inst:GetAttribute("RaidPlayerName") or nameStr if Cfg.PlayerWeapon then for _, child in ipairs(inst:GetChildren()) do if child:IsA("Tool") then nameStr = nameStr .. " [" .. child.Name .. "]" break end end end ProcessESP(inst, data, dist, onScreen, screenPos, root, nameStr, Cfg.PlayerESP, Cfg.PlayerBoxes, Cfg.PlayerNames, Cfg.PlayerDistance, Cfg.PlayerHealthbar, Cfg.PlayerChams, Cfg.PlayerMaxDist, Cfg.PlayerColor) elseif data.Type == "Bot" then ProcessESP(inst, data, dist, onScreen, screenPos, root, nameStr, Cfg.BotESP, Cfg.BotBoxes, Cfg.BotNames, Cfg.BotDistance, Cfg.BotHealthbar, Cfg.BotChams, Cfg.BotMaxDist, Cfg.BotColor) elseif data.Type == "Loot" then local ok = true local iId = inst:GetAttribute("WorldItemId") if Cfg.LootMinPrice > 0 then local val = iId and ShopConfig.SellPrices and ShopConfig.SellPrices[iId] or 0 if val < Cfg.LootMinPrice then ok = false end end if ok and next(Cfg.LootRarities) then local itm = iId and ItemRegistry.Items and ItemRegistry.Items[iId] local rarity = itm and itm.Rarity if not rarity or not Cfg.LootRarities[rarity] then ok = false end end if ok then local itm = iId and ItemRegistry.Items and ItemRegistry.Items[iId] nameStr = itm and itm.Name or nameStr if Cfg.LootShowPrice and ShopConfig.SellPrices and ShopConfig.SellPrices[iId] then nameStr = nameStr .. " [$"..ShopConfig.SellPrices[iId].."]" end col = Cfg.LootColor if Cfg.LootUseRarityColor and itm and itm.Rarity and RarityColors[itm.Rarity] then col = RarityColors[itm.Rarity] end ProcessESP(inst, data, dist, onScreen, screenPos, root, nameStr, Cfg.LootESP, Cfg.LootBoxes, Cfg.LootNames, Cfg.LootDistance, false, false, Cfg.LootMaxDist, col) end elseif data.Type == "Container" then local ok = true if Cfg.ContainerMinValue > 0 then local nId = inst:GetAttribute("WorldItemNodeId") local val = nId and ContainerCache[nId] or 0 if val < Cfg.ContainerMinValue then ok = false end end if ok then if Cfg.ContainerShowValue then local nId = inst:GetAttribute("WorldItemNodeId") if nId and ContainerCache[nId] and ContainerCache[nId] > 0 then nameStr = nameStr .. " [$"..ContainerCache[nId].."]" end end ProcessESP(inst, data, dist, onScreen, screenPos, root, nameStr, Cfg.ContainerESP, Cfg.ContainerBoxes, Cfg.ContainerNames, Cfg.ContainerDistance, false, false, Cfg.LootMaxDist, Cfg.ContainerColor) end elseif data.Type == "CorpsePlayer" then ProcessESP(inst, data, dist, onScreen, screenPos, root, nameStr, Cfg.CorpsePlayer, Cfg.CorpseBoxes, Cfg.CorpseNames, Cfg.CorpseDistance, false, false, Cfg.LootMaxDist, Cfg.CorpsePlayerColor) elseif data.Type == "CorpseBot" then ProcessESP(inst, data, dist, onScreen, screenPos, root, nameStr, Cfg.CorpseBot, Cfg.CorpseBoxes, Cfg.CorpseNames, Cfg.CorpseDistance, false, false, Cfg.LootMaxDist, Cfg.CorpseBotColor) elseif data.Type == "Extract" then ProcessESP(inst, data, dist, onScreen, screenPos, root, nameStr, Cfg.ExtractionESP, false, true, true, false, false, math.huge, Cfg.ExtractionColor) end return root, dist end local function UpdateSilentAim(inst, data, dist, center, root, bestDist, bestTarget) if not (data.Type == "Player" or data.Type == "Bot") then return bestDist, bestTarget end if not Cfg.SilentAim then return bestDist, bestTarget end if Cfg.ExcludeNPC and data.Type == "Bot" then return bestDist, bestTarget end local hum = inst:FindFirstChild("Humanoid") if hum and hum.Health > 0 and not inst:GetAttribute("IsDead") then if dist <= Cfg.MaxAimDist then local aimPart = inst:FindFirstChild(Cfg.TargetPart) or root local sp2, onScr = ProjectToScreen(aimPart.Position) if onScr then local aimDist = (sp2 - center).Magnitude if aimDist < bestDist then local canTarget = true if Cfg.VisibleCheck and not IsVisible(aimPart) then canTarget = false end if Cfg.Wallbang and not IsVisible(aimPart) then canTarget = true end if canTarget then return aimDist, aimPart end end end end end return bestDist, bestTarget end local function UpdateLocalMods() if Cfg.InstantADS and GunController then GunController._aimAlpha = GunController._isAiming and 1 or 0 end if GunConfig and GunConfig.VIEWMODEL then if Cfg.NoRecoil then GunConfig.VIEWMODEL.CameraRecoilAffectsCamera = false else GunConfig.VIEWMODEL.CameraRecoilAffectsCamera = OriginalViewmodel.CameraRecoilAffectsCamera end if Cfg.NoBob then GunConfig.VIEWMODEL.ViewBobFrequency = 0 GunConfig.VIEWMODEL.ViewBobPosition = Vector3.zero GunConfig.VIEWMODEL.ViewBobRotation = Vector3.zero GunConfig.VIEWMODEL.BreathAmplitude = 0 GunConfig.VIEWMODEL.SwayAmplitude = 0 GunConfig.VIEWMODEL.StrafeConeYawMaxDeg = 0 else GunConfig.VIEWMODEL.ViewBobFrequency = OriginalViewmodel.ViewBobFrequency GunConfig.VIEWMODEL.ViewBobPosition = OriginalViewmodel.ViewBobPosition GunConfig.VIEWMODEL.ViewBobRotation = OriginalViewmodel.ViewBobRotation GunConfig.VIEWMODEL.BreathAmplitude = OriginalViewmodel.BreathAmplitude GunConfig.VIEWMODEL.SwayAmplitude = OriginalViewmodel.SwayAmplitude GunConfig.VIEWMODEL.StrafeConeYawMaxDeg = OriginalViewmodel.StrafeConeYawMaxDeg end end if Cfg.NoSpread and GunController and GunController._getCurrentWeaponDef then local wd = GunController:_getCurrentWeaponDef() if wd then wd.MOA = 0; wd.SpreadMinDeg = 0 end end if Cfg.NoRecoil and GunController then GunController._cameraRecoilPitch = 0; GunController._cameraRecoilYaw = 0; GunController._cameraRecoilRoll = 0 GunController._recoilPos = Vector3.zero; GunController._recoilRot = Vector3.zero GunController._recoilYawBias = 0; GunController._recoilRollBias = 0; GunController._cameraRecoilYawBias = 0 end if Cfg.FastEquip and GunController then local st = rawget(GunController, "_equipTransitionState") if st == "Equipping" or st == "Unequipping" then pcall(function() local animator = GunController._viewmodelAnimator if animator and animator.LoadAnimation then for _, t in pairs(animator:GetPlayingAnimationTracks()) do t:AdjustSpeed(Cfg.FastEquipSpeed) end end end) if st == "Equipping" then GunController._equipTransitionState = "Equipped" else GunController._equipTransitionState = "Empty" end pcall(function() GunController:_setGunTransitionLocked(false) end) end end end local function UpdateViewModel() if not GunController then return end local handsOn = Cfg.VMHands local weaponOn = Cfg.VMWeapon local vm = GunController._viewmodel or GunController._viewmodelModel or GunController._viewmodelInstance or GunController._viewmodelRig if not vm and GunController._viewmodelAnimator then vm = GunController._viewmodelAnimator.Parent end local style = Cfg.VMChamsType local through = Cfg.VMThroughWall local alpha = 1 - (Cfg.VMAlpha / 100) local handsColor = Cfg.VMHandsColor local weaponColor = Cfg.VMWeaponColor local S = _G.VM_Effects or {} _G.VM_Effects = S local function ensureFx(name, adornee, colr) local rec = S[name] if rec and (rec.style ~= style or (rec.inst and rec.inst.Parent == nil)) then pcall(function() rec.inst:Destroy() end) S[name] = nil rec = nil end if not adornee then if rec and rec.inst then rec.inst.Enabled = false end return end if not rec then if style == "ForceField" then local ff = Instance.new("ForceField") ff.Name = "\0" ff.Visible = true ff.Parent = adornee S[name] = { inst = ff, style = style } else local hl = Instance.new("Highlight") hl.Name = "\0" hl.Parent = LocalPlayer:FindFirstChildOfClass("PlayerGui") or LocalPlayer S[name] = { inst = hl, style = style } end rec = S[name] end rec.inst.Enabled = true if style == "ForceField" then if rec.inst.Parent ~= adornee then rec.inst.Parent = adornee end else rec.inst.Adornee = adornee rec.inst.FillColor = colr rec.inst.FillTransparency = alpha rec.inst.OutlineColor = Color3.fromRGB(0, 0, 0) rec.inst.OutlineTransparency = 0 rec.inst.DepthMode = through and Enum.HighlightDepthMode.AlwaysOnTop or Enum.HighlightDepthMode.Occluded end end if not (vm and (handsOn or weaponOn)) then for k, rec in pairs(S) do pcall(function() rec.inst:Destroy() end); S[k] = nil end else local gunModel, handsRoot local gunId = GunController.GunState and GunController.GunState.gunId for _, child in ipairs(vm:GetChildren()) do if child:IsA("Model") then local lname = child.Name:lower() if gunId and child.Name == gunId then gunModel = child elseif not gunModel and (lname:find("gun") or lname:find("weapon")) then gunModel = child elseif lname:find("arm") or lname:find("hand") then handsRoot = child end end end if not gunModel and not handsRoot then ensureFx("hands", handsOn and vm or nil, handsColor) ensureFx("weapon", nil, weaponColor) else ensureFx("hands", handsOn and (handsRoot or vm) or nil, handsColor) ensureFx("weapon", weaponOn and gunModel or nil, weaponColor) end end local ox, oy, oz = Cfg.VMX, Cfg.VMY, Cfg.VMZ if vm and (ox ~= 0 or oy ~= 0 or oz ~= 0) then pcall(function() vm.WorldPivot = vm.WorldPivot * CFrame.new(ox, oy, oz) end) end end RunService.RenderStepped:Connect(function(dt) Camera = workspace.CurrentCamera local camPos = Camera.CFrame.Position local vp = Camera.ViewportSize local center = Vector2.new(vp.X / 2, vp.Y / 2) local bestTarget, bestDist = nil, Cfg.FOVRadius if Cfg.AntiSwitch and LockedTarget then if LockedTarget:IsDescendantOf(workspace) then local sp, on = ProjectToScreen(LockedTarget.Position) if on and (sp - center).Magnitude <= Cfg.FOVRadius then bestTarget = LockedTarget else LockedTarget = nil end else LockedTarget = nil end end for inst, data in pairs(Entities.List) do local root, dist = UpdateEntity(inst, data, camPos, center, vp) if root and dist then bestDist, bestTarget = UpdateSilentAim(inst, data, dist, center, root, bestDist, bestTarget) end end if Cfg.DrawFOV and Cfg.SilentAim then FOVCircle.Position = center FOVCircle.Radius = Cfg.FOVRadius FOVCircle.Color = Cfg.FOVColor FOVCircle.Visible = true else FOVCircle.Visible = false end if Cfg.AntiSwitch then LockedTarget = bestTarget end if Cfg.SilentAim and bestTarget and Cfg.TargetLine then local sp, onScr = ProjectToScreen(bestTarget.Position) if onScr then TargetLine.From = center TargetLine.To = sp TargetLine.Color = Cfg.TargetLineColor TargetLine.Visible = true else TargetLine.Visible = false end else TargetLine.Visible = false end if Cfg.SilentAim and Cfg.Wallbang and bestTarget then if not IsVisible(bestTarget) then local sp, onScr = ProjectToScreen(bestTarget.Position) if onScr then WallbangText.Position = Vector2.new(sp.X, sp.Y - 28) WallbangText.Visible = true else WallbangText.Visible = false end else WallbangText.Visible = false end else WallbangText.Visible = false end if Cfg.Fullbright then Lighting.Ambient = Color3.new(1,1,1) Lighting.OutdoorAmbient = Color3.new(1,1,1) Lighting.Brightness = 2 Lighting.GlobalShadows = false else Lighting.Ambient = OrigLighting.Ambient Lighting.OutdoorAmbient = OrigLighting.OutdoorAmbient Lighting.Brightness = OrigLighting.Brightness Lighting.GlobalShadows = OrigLighting.GlobalShadows end if Cfg.StretchRes then Camera.CFrame = Camera.CFrame * CFrame.new(0,0,0, 1,0,0, 0,Cfg.StretchValue/100,0, 0,0,1) end local tpActive = Cfg.ThirdPerson or (Options.V_TPK and Options.V_TPK:GetState()) if tpActive then Camera.CFrame = Camera.CFrame * CFrame.new(Cfg.TPOffsetX, 0, Cfg.TPDist) end local zoomActive = Cfg.Zoom or (Options.V_ZMK and Options.V_ZMK:GetState()) if zoomActive then Camera.FieldOfView = Cfg.ZoomFOV _wasZoomed = true elseif _wasZoomed then Camera.FieldOfView = 70 _wasZoomed = false end UpdateLocalMods() UpdateViewModel() _G.SharedBestTarget = bestTarget end) if GunController and rawget(GunController, "_getWeaponAnimationLengthSeconds") then local origLen = GunController._getWeaponAnimationLengthSeconds GunController._getWeaponAnimationLengthSeconds = function(self, ...) local orig = origLen(self, ...) if Cfg.FastEquip then return math.max(0.01, (tonumber(orig) or 0.5) / Cfg.FastEquipSpeed) end return orig end end local oldNamecall oldNamecall = hookmetamethod(game, "__namecall", newcclosure(function(self, ...) local method = getnamecallmethod() local args = {...} if not checkcaller() and method == "GetAttribute" then if self == LocalPlayer or (LocalPlayer.Character and self == LocalPlayer.Character) then if Cfg.InfStamina then if args[1] == "Stamina" then return 9999 end if args[1] == "StaminaExhausted" then return false end end if Cfg.InfShield then if args[1] == "ShieldChargeCurrent" or args[1] == "ShieldDurability" then return 9999 end end end end return oldNamecall(self, ...) end)) if NetworkController then local origRequestFire = NetworkController.RequestGunFire NetworkController.RequestGunFire = function(self, origin, dir, ...) local target = _G.SharedBestTarget local aimDir = dir local silentTarget = nil if Cfg.SilentAim and target then aimDir = (target.Position - origin).Unit silentTarget = target if Cfg.Wallbang and not IsVisible(target) then local wbHum = target.Parent and target.Parent:FindFirstChildOfClass("Humanoid") if wbHum then task.spawn(function() pcall(function() self:RequestGunHitReport( wbHum, target, target.Name, target.Position, -aimDir, 0, 1 ) end) end) end end end if Cfg.Tracers or Cfg.Hitmarker or Cfg.HitPoints then local weaponDef = GunController and GunController._getCurrentWeaponDef and GunController:_getCurrentWeaponDef() local range = (weaponDef and weaponDef.Range) or 500 local rp = RaycastParams.new() rp.FilterType = Enum.RaycastFilterType.Exclude local ign = {Camera} if LocalPlayer.Character then table.insert(ign, LocalPlayer.Character) end rp.FilterDescendantsInstances = ign local ray = workspace:Raycast(origin, aimDir * range, rp) local hitPos = ray and ray.Position or (origin + aimDir * range) if Cfg.Tracers then task.spawn(DrawTracerBeam, origin, hitPos) end if Cfg.Hitmarker or Cfg.HitPoints then local function watchHealth(hum, pos) local baseline = hum.Health local shown = false local conn conn = hum.HealthChanged:Connect(function(newHP) local dmg = baseline - newHP if dmg > 0.5 and not shown then shown = true; conn:Disconnect() ShowHitEffect(pos, dmg) end end) task.delay(0.6, function() if not shown then shown = true; conn:Disconnect() if Cfg.Hitmarker then ShowHitEffect(pos, 0) end end end) end if silentTarget and Cfg.Wallbang and not IsVisible(silentTarget) then local wbHum = silentTarget.Parent and silentTarget.Parent:FindFirstChildOfClass("Humanoid") if wbHum then watchHealth(wbHum, silentTarget.Position) end elseif ray and ray.Instance then local hitChar = ray.Instance:FindFirstAncestorOfClass("Model") local hum = hitChar and hitChar:FindFirstChildOfClass("Humanoid") if hum then watchHealth(hum, ray.Position) end end end end return origRequestFire(self, origin, aimDir, ...) end end if GunController and rawget(GunController, "_caster") then local origFire = GunController._caster.Fire GunController._caster.Fire = function(self, origin, dir, vel, behavior, ...) local target = _G.SharedBestTarget local aimDir = dir if Cfg.SilentAim and target then aimDir = (target.Position - origin).Unit end if Cfg.InstantBullet then vel = 9999 end if Cfg.FireDelay > 0 then local rest = {...} task.delay(Cfg.FireDelay/1000, function() origFire(self, origin, aimDir, vel, behavior, unpack(rest)) end) return end return origFire(self, origin, aimDir, vel, behavior, ...) end end