Rivals  Sem Key e OP Silent aim, rage bot, fly, ESP, e etc... thumbnail

Rivals Sem Key e OP Silent aim, rage bot, fly, ESP, e etc...

201 Views
11d atrás
Verificado

Descrição

Nenhuma descrição fornecida.

Como Utilizar?

Script

Script Patched

Clique para revelar

1--[[
2	Rivals Cheat v2.2 - Rayfield UI
3	Optional Mobile Buttons + Fixed Config System + Fixed Aimbot Checks
4]]
5
6local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))()
7
8local RunService = game:GetService("RunService")
9local Players = game:GetService("Players")
10local LocalPlayer = Players.LocalPlayer
11local Workspace = game:GetService("Workspace")
12local ReplicatedStorage = game:GetService("ReplicatedStorage")
13local UserInputService = game:GetService("UserInputService")
14local Camera = Workspace.CurrentCamera
15
16-- Connection storage for proper cleanup
17local connections = {}
18local mobileButtons = {}
19local mobileButtonsEnabled = {
20	Aimbot = false,
21	Fly = false,
22	NoClip = false
23}
24
25local Window = Rayfield:CreateWindow({
26	Name = "Rivals - thegxx v2.2",
27	LoadingTitle = "Rivals Cheat",
28	LoadingSubtitle = "by thegxx",
29	ConfigurationSaving = {
30		Enabled = true,
31		FolderName = "RivalsCheat",
32		FileName = "RivalsConfig"
33	},
34	Discord = {
35		Enabled = false,
36		Invite = "noinvite",
37		RememberJoins = true
38	},
39	KeySystem = false,
40})
41
42local Tabs = {
43	Aimbot = Window:CreateTab("🎯 Aimbot & Precision", 4483362458),
44	Visuals = Window:CreateTab("👁️ Visuals & ESP", 4483362458),
45	Movement = Window:CreateTab("🏃 Movement & Mobility", 4483362458),
46	Protection = Window:CreateTab("🛡️ Protection & Survival", 4483362458),
47	Extras = Window:CreateTab("⚙️ UI & Extras", 4483362458),
48	Settings = Window:CreateTab("⚙️ Settings", 4483362458),
49}
50
51-- Utility functions
52local function getCharacter()
53	return LocalPlayer.Character
54end
55
56local function getHumanoid()
57	local character = getCharacter()
58	return character and character:FindFirstChild("Humanoid")
59end
60
61local function getRoot()
62	local character = getCharacter()
63	return character and character:FindFirstChild("HumanoidRootPart")
64end
65
66-- Mobile Button Creator
67local function createMobileButton(name, position, callback)
68	local ScreenGui = LocalPlayer.PlayerGui:FindFirstChild("MobileButtons") or Instance.new("ScreenGui")
69	ScreenGui.Name = "MobileButtons"
70	ScreenGui.ResetOnSpawn = false
71	ScreenGui.Parent = LocalPlayer.PlayerGui
72	
73	local button = Instance.new("TextButton")
74	button.Name = name
75	button.Size = UDim2.new(0, 80, 0, 80)
76	button.Position = position
77	button.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
78	button.BorderSizePixel = 2
79	button.BorderColor3 = Color3.fromRGB(255, 255, 255)
80	button.Text = name
81	button.TextColor3 = Color3.fromRGB(255, 255, 255)
82	button.TextSize = 14
83	button.Font = Enum.Font.GothamBold
84	button.Visible = false
85	button.Parent = ScreenGui
86	
87	local corner = Instance.new("UICorner")
88	corner.CornerRadius = UDim.new(0, 10)
89	corner.Parent = button
90	
91	local toggled = false
92	button.MouseButton1Click:Connect(function()
93		if not mobileButtonsEnabled[name] then return end
94		toggled = not toggled
95		button.BackgroundColor3 = toggled and Color3.fromRGB(0, 255, 0) or Color3.fromRGB(40, 40, 40)
96		callback(toggled)
97	end)
98	
99	mobileButtons[name] = button
100	return button
101end
102
103local function updateMobileButtonVisibility(buttonName, shouldShow)
104	if mobileButtons[buttonName] then
105		mobileButtons[buttonName].Visible = shouldShow and mobileButtonsEnabled[buttonName]
106	end
107end
108
109-- ========== Aimbot / Silent Aim / Trigger / Settings ==========
110
111-- Aimbot Variables
112local aimbotEnabled = false
113local aimbotLock = "Head"
114local aimbotPrediction = false
115local aimbotAutoLock = false
116local aimbotShowFOV = false
117local aimbotFOVColor = Color3.fromRGB(255, 255, 255)
118local fovCircle = nil
119
120-- Keybinds (fixed handling)
121local aimbotKeyEnum = Enum.KeyCode.Q
122local flyKeyEnum = Enum.KeyCode.F
123
124local function parseKeybindInput(k)
125	-- Supports Enum.KeyCode, string ("Q") or table return types from UI
126	if typeof(k) == "EnumItem" and k.EnumType == Enum.KeyCode then
127		return k
128	elseif typeof(k) == "string" then
129		local name = k:upper()
130		if Enum.KeyCode[name] then
131			return Enum.KeyCode[name]
132		end
133	elseif type(k) == "table" and #k > 0 then
134		-- Rayfield sometimes returns table like {"Q"} or similar
135		local first = k[1]
136		if typeof(first) == "EnumItem" and first.EnumType == Enum.KeyCode then
137			return first
138		elseif type(first) == "string" then
139			local name = first:upper()
140			if Enum.KeyCode[name] then return Enum.KeyCode[name] end
141		end
142	end
143	return nil
144end
145
146-- Sections
147local AimbotSection = Tabs.Aimbot:CreateSection("Rage Aimbot")
148
149local AimbotToggle = Tabs.Aimbot:CreateToggle({
150	Name = "Enable Rage Aimbot",
151	CurrentValue = false,
152	Flag = "AimbotToggle",
153	Callback = function(Value)
154		aimbotEnabled = Value
155		if mobileButtons["Aimbot"] then
156			mobileButtons["Aimbot"].BackgroundColor3 = Value and Color3.fromRGB(0, 255, 0) or Color3.fromRGB(40, 40, 40)
157		end
158	end,
159})
160
161local AimbotKeybind = Tabs.Aimbot:CreateKeybind({
162	Name = "Rage Aimbot Keybind",
163	CurrentKeybind = "Q",
164	HoldToInteract = false,
165	Flag = "AimbotKeybind",
166	Callback = function(Keybind)
167		local parsed = parseKeybindInput(Keybind)
168		if parsed then
169			aimbotKeyEnum = parsed
170		end
171		-- Rayfield handles displaying/storing the config key; we just cache the Enum.KeyCode here
172	end,
173})
174
175local AimbotLockDropdown = Tabs.Aimbot:CreateDropdown({
176	Name = "Lock Target",
177	Options = {"Head", "Torso"},
178	CurrentOption = {"Head"},
179	MultipleOptions = false,
180	Flag = "AimbotLock",
181	Callback = function(Option)
182		aimbotLock = Option[1] == "Head" and "Head" or "UpperTorso"
183	end,
184})
185
186local AimbotPredictionToggle = Tabs.Aimbot:CreateToggle({
187	Name = "Movement Prediction",
188	CurrentValue = false,
189	Flag = "AimbotPrediction",
190	Callback = function(Value)
191		aimbotPrediction = Value
192	end,
193})
194
195local AimbotAutoLockToggle = Tabs.Aimbot:CreateToggle({
196	Name = "Auto Lock",
197	CurrentValue = false,
198	Flag = "AimbotAutoLock",
199	Callback = function(Value)
200		aimbotAutoLock = Value
201	end,
202})
203
204-- Silent Aim Section
205local SilentSection = Tabs.Aimbot:CreateSection("Silent Aim")
206
207local silentAimEnabled = false
208local silentAimHitchance = 100
209local silentAimLock = "Head"
210
211local SilentAimToggle = Tabs.Aimbot:CreateToggle({
212	Name = "Silent Aim",
213	CurrentValue = false,
214	Flag = "SilentAim",
215	Callback = function(Value)
216		silentAimEnabled = Value
217	end,
218})
219
220local SilentAimHitchanceSlider = Tabs.Aimbot:CreateSlider({
221	Name = "Hitchance (%)",
222	Range = {0, 100},
223	Increment = 1,
224	Suffix = "%",
225	CurrentValue = 100,
226	Flag = "SilentHitchance",
227	Callback = function(Value)
228		silentAimHitchance = Value
229	end,
230})
231
232local SilentAimLockDropdown = Tabs.Aimbot:CreateDropdown({
233	Name = "Lock Target",
234	Options = {"Head", "Torso"},
235	CurrentOption = {"Head"},
236	MultipleOptions = false,
237	Flag = "SilentAimLock",
238	Callback = function(Option)
239		silentAimLock = Option[1] == "Head" and "Head" or "UpperTorso"
240	end,
241})
242
243-- Trigger Bot Section
244local TriggerSection = Tabs.Aimbot:CreateSection("Trigger Bot")
245
246local triggerEnabled = false
247local triggerDelay = 0
248
249local TriggerToggle = Tabs.Aimbot:CreateToggle({
250	Name = "Trigger Bot",
251	CurrentValue = false,
252	Flag = "TriggerBot",
253	Callback = function(Value)
254		triggerEnabled = Value
255	end,
256})
257
258local TriggerDelaySlider = Tabs.Aimbot:CreateSlider({
259	Name = "Trigger Delay (ms)",
260	Range = {0, 500},
261	Increment = 10,
262	Suffix = "ms",
263	CurrentValue = 0,
264	Flag = "TriggerDelay",
265	Callback = function(Value)
266		triggerDelay = Value / 1000
267	end,
268})
269
270-- Aimbot Settings Section
271local SettingsSection = Tabs.Aimbot:CreateSection("Aimbot Settings")
272
273local aimDeadCheck = true
274local aimWallCheck = true
275local aimPriority = "Distance"
276local aimFOV = 500
277local aimMaxDistance = 0
278
279local AimPriorityDropdown = Tabs.Aimbot:CreateDropdown({
280	Name = "Priority",
281	Options = {"Distance", "Health"},
282	CurrentOption = {"Distance"},
283	MultipleOptions = false,
284	Flag = "AimPriority",
285	Callback = function(Option)
286		aimPriority = Option[1]
287	end,
288})
289
290local AimFOVSlider = Tabs.Aimbot:CreateSlider({
291	Name = "Aimbot FOV",
292	Range = {100, 1000},
293	Increment = 10,
294	CurrentValue = 500,
295	Flag = "AimFOV",
296	Callback = function(Value)
297		aimFOV = Value
298		if fovCircle then
299			fovCircle.Radius = Value
300		end
301	end,
302})
303
304local ShowFOVToggle = Tabs.Aimbot:CreateToggle({
305	Name = "Show FOV Circle",
306	CurrentValue = false,
307	Flag = "ShowFOV",
308	Callback = function(Value)
309		aimbotShowFOV = Value
310		if fovCircle then
311			fovCircle.Visible = Value
312		end
313	end,
314})
315
316local MaxDistanceSlider = Tabs.Aimbot:CreateSlider({
317	Name = "Max Distance (0 = unlimited)",
318	Range = {0, 1000},
319	Increment = 10,
320	Suffix = " studs",
321	CurrentValue = 0,
322	Flag = "MaxDistance",
323	Callback = function(Value)
324		aimMaxDistance = Value
325	end,
326})
327
328local DeadCheckToggle = Tabs.Aimbot:CreateToggle({
329	Name = "Dead Check",
330	CurrentValue = true,
331	Flag = "DeadCheck",
332	Callback = function(Value)
333		aimDeadCheck = Value
334	end,
335})
336
337local WallCheckToggle = Tabs.Aimbot:CreateToggle({
338	Name = "Wall Check",
339	CurrentValue = true,
340	Flag = "WallCheck",
341	Callback = function(Value)
342		aimWallCheck = Value
343	end,
344})
345
346-- Create FOV Circle
347fovCircle = Drawing.new("Circle")
348fovCircle.Thickness = 2
349fovCircle.NumSides = 100
350fovCircle.Radius = aimFOV
351fovCircle.Filled = false
352fovCircle.Visible = false
353fovCircle.ZIndex = 999
354fovCircle.Transparency = 1
355fovCircle.Color = aimbotFOVColor
356
357-- Helper: FIXED target validation with proper checks
358local function isValidTarget(player)
359	-- Basic existence checks
360	if not player then return false end
361	if player == LocalPlayer then return false end
362	if not player.Parent then return false end
363	
364	-- Character checks
365	local character = player.Character
366	if not character then return false end
367	if not character.Parent then return false end
368	
369	-- Humanoid checks
370	local humanoid = character:FindFirstChild("Humanoid")
371	if not humanoid then return false end
372	
373	-- Dead check
374	if aimDeadCheck then
375		if humanoid.Health <= 0 then return false end
376		if humanoid:GetState() == Enum.HumanoidStateType.Dead then return false end
377	end
378	
379	-- Target part existence
380	local targetPartName = aimbotLock or "Head"
381	local targetPart = character:FindFirstChild(targetPartName)
382	if not targetPart then return false end
383	
384	-- Distance check
385	if aimMaxDistance > 0 then
386		local myRoot = getRoot()
387		if myRoot then
388			local distance = (myRoot.Position - targetPart.Position).Magnitude
389			if distance > aimMaxDistance then
390				return false
391			end
392		else
393			return false
394		end
395	end
396	
397	-- Wall check (visibility check)
398	if aimWallCheck then
399		local myRoot = getRoot()
400		if not myRoot then return false end
401		
402		local origin = Camera.CFrame.Position
403		local direction = (targetPart.Position - origin)
404		local distance = direction.Magnitude
405		
406		local ray = Ray.new(origin, direction.Unit * distance)
407		local ignoreList = {getCharacter(), character}
408		
409		local hit, hitPosition = Workspace:FindPartOnRayWithIgnoreList(ray, ignoreList)
410		
411		-- If we hit something and it's not the target's character, they're behind a wall
412		if hit then
413			if not hit:IsDescendantOf(character) then
414				return false
415			end
416		end
417	end
418	
419	return true
420end
421
422local function getClosestPlayer(fov)
423	local closest, closestValue = nil, math.huge
424	local center = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
425	
426	for _, player in ipairs(Players:GetPlayers()) do
427		if not isValidTarget(player) then continue end
428		
429		local character = player.Character
430		if not character then continue end
431		
432		local targetPartName = aimbotLock or "Head"
433		local targetPart = character:FindFirstChild(targetPartName)
434		if not targetPart then continue end
435		
436		local pos, onScreen = Camera:WorldToViewportPoint(targetPart.Position)
437		if not onScreen then continue end
438		
439		local screenPos = Vector2.new(pos.X, pos.Y)
440		local dist = (center - screenPos).Magnitude
441		
442		if fov and dist > fov then continue end
443		
444		local value
445		if aimPriority == "Distance" then
446			value = dist
447		else
448			local humanoid = character:FindFirstChild("Humanoid")
449			if humanoid then
450				value = humanoid.Health
451			else
452				value = math.huge
453			end
454		end
455		
456		if value < closestValue then
457			closestValue = value
458			closest = player
459		end
460	end
461	
462	return closest
463end
464
465-- Keep track of locked target
466local currentlyLockedTarget = nil
467local lastTriggerShot = 0
468
469-- Aimbot Render loop with Auto Lock and Smoothness
470connections["Aimbot"] = RunService:BindToRenderStep("Aimbot", Enum.RenderPriority.Camera.Value, function(dt)
471	-- Update FOV circle position
472	if fovCircle then
473		fovCircle.Position = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
474		fovCircle.Radius = aimFOV
475		fovCircle.Visible = aimbotShowFOV
476		fovCircle.Color = aimbotFOVColor
477	end
478
479	if not aimbotEnabled then
480		currentlyLockedTarget = nil
481		return
482	end
483
484	local targetToAim = nil
485
486	-- Auto Lock logic with validation
487	if aimbotAutoLock and currentlyLockedTarget then
488		if isValidTarget(currentlyLockedTarget) then
489			targetToAim = currentlyLockedTarget
490		else
491			currentlyLockedTarget = nil
492		end
493	end
494
495	-- Find new target if needed
496	if not targetToAim then
497		targetToAim = getClosestPlayer(aimFOV)
498		currentlyLockedTarget = targetToAim
499	end
500
501	if targetToAim and targetToAim.Character then
502		local targetPartName = aimbotLock or "Head"
503		local targetPart = targetToAim.Character:FindFirstChild(targetPartName)
504		
505		if not targetPart then
506			currentlyLockedTarget = nil
507			return
508		end
509		
510		local predictionOffset = Vector3.zero
511		if aimbotPrediction then
512			local v = targetPart.AssemblyLinearVelocity or targetPart.Velocity or Vector3.zero
513			predictionOffset = v * 0.15
514		end
515		
516		local targetPos = targetPart.Position + predictionOffset
517		
518		-- Instant snap
519		Camera.CFrame = CFrame.lookAt(Camera.CFrame.Position, targetPos)
520	else
521		currentlyLockedTarget = nil
522	end
523end)
524
525-- Silent Aim hook
526pcall(function()
527	local utility = require(ReplicatedStorage.Modules.Utility)
528	local oldRaycast = utility.Raycast
529
530	utility.Raycast = function(...)
531		local args = {...}
532		if silentAimEnabled and #args >= 3 and math.random(100) <= silentAimHitchance then
533			local closest = getClosestPlayer(aimFOV)
534			if closest and closest.Character then
535				local targetPart = closest.Character:FindFirstChild(silentAimLock or "Head")
536				if targetPart then
537					args[3] = targetPart.Position
538				end
539			end
540		end
541		return oldRaycast(table.unpack(args))
542	end
543end)
544
545-- Improved Trigger Bot
546local lastClickTime = 0
547connections["Trigger"] = RunService.Heartbeat:Connect(function()
548	if not triggerEnabled then return end
549	
550	local currentTime = tick()
551	if currentTime - lastTriggerShot < triggerDelay then return end
552
553	local locked = currentlyLockedTarget
554	if not locked or not locked.Character then return end
555	if not isValidTarget(locked) then return end
556
557	if currentTime - lastClickTime >= 0.1 then
558		lastClickTime = currentTime
559		lastTriggerShot = currentTime
560		
561		local character = getCharacter()
562		if character then
563			local tool = character:FindFirstChildOfClass("Tool")
564			if tool then
565				pcall(function()
566					tool:Activate()
567				end)
568				
569				pcall(function()
570					local remote = tool:FindFirstChild("Remote") or tool:FindFirstChild("Fire")
571					if remote and remote:IsA("RemoteEvent") then
572						remote:FireServer()
573					end
574				end)
575			end
576		end
577	end
578end)
579
580-- ========== Visuals & ESP ==========
581
582local ESPSection = Tabs.Visuals:CreateSection("Player ESP Options")
583
584local playerESPEnabled = false
585local boxESPEnabled = false
586local chamsESPEnabled = false
587local playerESPName = true
588local playerESPDistance = true
589local playerESPHealth = true
590local rainbowModeEnabled = false
591local deadESPEnabled = true
592local skeletonESPEnabled = false
593local skeletonESPTracers = false
594
595-- ESP Storage
596local espBoxes = {}
597local espChams = {}
598local espTexts = {}
599local skeletonLines = {}
600
601-- Cleanup function
602local function cleanupPlayerESP(player)
603	if espBoxes[player] then 
604		pcall(function() espBoxes[player]:Remove() end) 
605		espBoxes[player] = nil 
606	end
607	if espChams[player] then 
608		pcall(function() espChams[player]:Destroy() end) 
609		espChams[player] = nil 
610	end
611	if espTexts[player] then 
612		pcall(function() espTexts[player]:Remove() end) 
613		espTexts[player] = nil 
614	end
615	if skeletonLines[player] then
616		if skeletonLines[player].lines then
617			for _, line in pairs(skeletonLines[player].lines) do
618				pcall(function() line:Remove() end)
619			end
620		end
621		if skeletonLines[player].tracer then
622			pcall(function() skeletonLines[player].tracer:Remove() end)
623		end
624		skeletonLines[player] = nil
625	end
626end
627
628-- ESP creation function
629local function createPlayerESP(player)
630	if player == LocalPlayer then return end
631	if not player.Character then return end
632	
633	cleanupPlayerESP(player)
634	
635	-- Box ESP
636	local box = Drawing.new("Square")
637	box.Visible = false
638	box.Color = Color3.new(1, 1, 1)
639	box.Thickness = 2
640	box.Filled = false
641	box.Transparency = 1
642	espBoxes[player] = box
643	
644	-- Chams ESP
645	local cham = Instance.new("Highlight")
646	cham.Name = "ESP_Cham_" .. player.Name
647	cham.Parent = game.CoreGui
648	cham.Adornee = player.Character
649	cham.FillTransparency = 0.5
650	cham.OutlineTransparency = 0
651	cham.FillColor = Color3.new(1, 1, 1)
652	cham.OutlineColor = Color3.new(1, 1, 1)
653	cham.Enabled = false
654	espChams[player] = cham
655	
656	-- Text ESP
657	local text = Drawing.new("Text")
658	text.Visible = false
659	text.Color = Color3.new(1, 1, 1)
660	text.Size = 16
661	text.Center = true
662	text.Outline = true
663	text.Transparency = 1
664	text.Font = 2
665	espTexts[player] = text
666end
667
668-- ESP Toggles
669local PlayerESPToggle = Tabs.Visuals:CreateToggle({
670	Name = "Enable Player ESP",
671	CurrentValue = false,
672	Flag = "PlayerESP",
673	Callback = function(Value)
674		playerESPEnabled = Value
675		if not Value then
676			for p in pairs(espBoxes) do cleanupPlayerESP(p) end
677			for p in pairs(skeletonLines) do cleanupPlayerESP(p) end
678			Rayfield:Notify({
679				Title = "ESP",
680				Content = "All ESP cleared",
681				Duration = 2,
682				Image = 4483362458,
683			})
684		else
685			for _, player in ipairs(Players:GetPlayers()) do
686				if player ~= LocalPlayer and player.Character then
687					createPlayerESP(player)
688				end
689			end
690			Rayfield:Notify({
691				Title = "ESP",
692				Content = "Player ESP enabled",
693				Duration = 2,
694				Image = 4483362458,
695			})
696		end
697	end,
698})
699
700local BoxESPToggle = Tabs.Visuals:CreateToggle({
701	Name = "Box ESP",
702	CurrentValue = false,
703	Flag = "BoxESP",
704	Callback = function(Value)
705		boxESPEnabled = Value
706	end,
707})
708
709local ChamsESPToggle = Tabs.Visuals:CreateToggle({
710	Name = "Chams ESP",
711	CurrentValue = false,
712	Flag = "ChamsESP",
713	Callback = function(Value)
714		chamsESPEnabled = Value
715	end,
716})
717
718local NameESPToggle = Tabs.Visuals:CreateToggle({
719	Name = "Name",
720	CurrentValue = true,
721	Flag = "NameESP",
722	Callback = function(Value)
723		playerESPName = Value
724	end,
725})
726
727local DistanceESPToggle = Tabs.Visuals:CreateToggle({
728	Name = "Distance",
729	CurrentValue = true,
730	Flag = "DistanceESP",
731	Callback = function(Value)
732		playerESPDistance = Value
733	end,
734})
735
736local HealthESPToggle = Tabs.Visuals:CreateToggle({
737	Name = "Health",
738	CurrentValue = true,
739	Flag = "HealthESP",
740	Callback = function(Value)
741		playerESPHealth = Value
742	end,
743})
744
745local SkeletonSection = Tabs.Visuals:CreateSection("Skeleton ESP Options")
746
747local SkeletonESPToggle = Tabs.Visuals:CreateToggle({
748	Name = "Skeleton ESP",
749	CurrentValue = false,
750	Flag = "SkeletonESP",
751	Callback = function(Value)
752		skeletonESPEnabled = Value
753		if not Value then
754			for p in pairs(skeletonLines) do
755				if skeletonLines[p] then
756					if skeletonLines[p].lines then
757						for _, line in pairs(skeletonLines[p].lines) do
758							line.Visible = false
759						end
760					end
761					if skeletonLines[p].tracer then
762						skeletonLines[p].tracer.Visible = false
763					end
764				end
765			end
766		end
767	end,
768})
769
770local TracersESPToggle = Tabs.Visuals:CreateToggle({
771	Name = "Tracers",
772	CurrentValue = false,
773	Flag = "TracersESP",
774	Callback = function(Value)
775		skeletonESPTracers = Value
776		if not Value then
777			for p, data in pairs(skeletonLines) do
778				if data and data.tracer then
779					data.tracer.Visible = false
780				end
781			end
782		end
783	end,
784})
785
786local OtherVisualsSection = Tabs.Visuals:CreateSection("Other Visuals")
787
788local DeadESPToggle = Tabs.Visuals:CreateToggle({
789	Name = "Hide Dead ESP",
790	CurrentValue = true,
791	Flag = "DeadESP",
792	Callback = function(Value)
793		deadESPEnabled = Value
794	end,
795})
796
797local RainbowModeToggle = Tabs.Visuals:CreateToggle({
798	Name = "Rainbow Mode",
799	CurrentValue = false,
800	Flag = "RainbowMode",
801	Callback = function(Value)
802		rainbowModeEnabled = Value
803	end,
804})
805
806-- Setup player management
807local function setupPlayerESP(player)
808	if player == LocalPlayer then return end
809	
810	player.CharacterAdded:Connect(function(char)
811		task.wait(0.1)
812		if playerESPEnabled then 
813			createPlayerESP(player)
814		end
815	end)
816	
817	player.CharacterRemoving:Connect(function()
818		cleanupPlayerESP(player)
819	end)
820	
821	if player.Character and playerESPEnabled then
822		task.wait(0.1)
823		createPlayerESP(player)
824	end
825end
826
827for _, player in ipairs(Players:GetPlayers()) do
828	setupPlayerESP(player)
829end
830
831Players.PlayerAdded:Connect(function(player)
832	setupPlayerESP(player)
833end)
834
835Players.PlayerRemoving:Connect(function(player)
836	cleanupPlayerESP(player)
837end)
838
839-- ESP update loop
840connections["PlayerESP"] = RunService.Heartbeat:Connect(function()
841	if not playerESPEnabled then return end
842	
843	local hue = tick() % 5 / 5
844	local rainbowColor = Color3.fromHSV(hue, 1, 1)
845	
846	for _, player in ipairs(Players:GetPlayers()) do
847		if player == LocalPlayer then continue end
848		
849		if not player.Character or not player.Character.Parent then
850			cleanupPlayerESP(player)
851			continue
852		end
853		
854		local humanoid = player.Character:FindFirstChild("Humanoid")
855		local root = player.Character:FindFirstChild("HumanoidRootPart")
856		
857		if not humanoid or not root then 
858			cleanupPlayerESP(player)
859			continue 
860		end
861		
862		if deadESPEnabled and humanoid.Health <= 0 then
863			cleanupPlayerESP(player)
864			continue
865		end
866		
867		if not espBoxes[player] then
868			createPlayerESP(player)
869		end
870		
871		local rootPos, onScreen = Camera:WorldToViewportPoint(root.Position)
872		if onScreen then
873			-- Text ESP
874			if espTexts[player] and (playerESPName or playerESPDistance or playerESPHealth) then
875				local textStr = ""
876				if playerESPName then textStr = textStr .. player.Name .. "\n" end
877				if playerESPDistance then 
878					local myRoot = getRoot()
879					if myRoot then
880						textStr = textStr .. math.floor((myRoot.Position - root.Position).Magnitude) .. " studs\n" 
881					end
882				end
883				if playerESPHealth then textStr = textStr .. math.floor(humanoid.Health) .. "/" .. humanoid.MaxHealth .. "\n" end
884				
885				espTexts[player].Text = textStr
886				espTexts[player].Position = Vector2.new(rootPos.X, rootPos.Y - 50)
887				espTexts[player].Visible = true
888				if rainbowModeEnabled then 
889					espTexts[player].Color = rainbowColor 
890				end
891			elseif espTexts[player] then
892				espTexts[player].Visible = false
893			end
894			
895			-- Box ESP
896			if boxESPEnabled and espBoxes[player] then
897				local minX, minY = math.huge, math.huge
898				local maxX, maxY = -math.huge, -math.huge
899				
900				for _, part in ipairs(player.Character:GetDescendants()) do
901					if part:IsA("BasePart") then
902						local corners = {
903							part.CFrame * CFrame.new(part.Size.X/2, part.Size.Y/2, part.Size.Z/2).Position,
904							part.CFrame * CFrame.new(part.Size.X/2, part.Size.Y/2, -part.Size.Z/2).Position,
905							part.CFrame * CFrame.new(part.Size.X/2, -part.Size.Y/2, part.Size.Z/2).Position,
906							part.CFrame * CFrame.new(part.Size.X/2, -part.Size.Y/2, -part.Size.Z/2).Position,
907							part.CFrame * CFrame.new(-part.Size.X/2, part.Size.Y/2, part.Size.Z/2).Position,
908							part.CFrame * CFrame.new(-part.Size.X/2, part.Size.Y/2, -part.Size.Z/2).Position,
909							part.CFrame * CFrame.new(-part.Size.X/2, -part.Size.Y/2, part.Size.Z/2).Position,
910							part.CFrame * CFrame.new(-part.Size.X/2, -part.Size.Y/2, -part.Size.Z/2).Position
911						}
912						for _, corner in ipairs(corners) do
913							local pos = Camera:WorldToViewportPoint(corner)
914							minX = math.min(minX, pos.X)
915							maxX = math.max(maxX, pos.X)
916							minY = math.min(minY, pos.Y)
917							maxY = math.max(maxY, pos.Y)
918						end
919					end
920				end
921				
922				espBoxes[player].Size = Vector2.new(maxX - minX, maxY - minY)
923				espBoxes[player].Position = Vector2.new(minX, minY)
924				espBoxes[player].Visible = true
925				if rainbowModeEnabled then 
926					espBoxes[player].Color = rainbowColor 
927				end
928			elseif espBoxes[player] then
929				espBoxes[player].Visible = false
930			end
931		else
932			if espTexts[player] then espTexts[player].Visible = false end
933			if espBoxes[player] then espBoxes[player].Visible = false end
934		end
935		
936		-- Chams ESP
937		if chamsESPEnabled and espChams[player] then
938			if espChams[player].Adornee ~= player.Character then
939				espChams[player].Adornee = player.Character
940			end
941			espChams[player].Enabled = true
942			if rainbowModeEnabled then 
943				espChams[player].FillColor = rainbowColor 
944				espChams[player].OutlineColor = rainbowColor
945			end
946		elseif espChams[player] then
947			espChams[player].Enabled = false
948		end
949	end
950end)
951
952-- Skeleton ESP
953local function getPos(part) return part and part.Position or nil end
954
955connections["SkeletonESP"] = RunService.Heartbeat:Connect(function()
956	if not playerESPEnabled then
957		for p in pairs(skeletonLines) do cleanupPlayerESP(p) end
958		return
959	end
960	if not skeletonESPEnabled then return end
961	
962	local hue = tick() % 5 / 5
963	local rainbowColor = Color3.fromHSV(hue, 1, 1)
964	
965	for _, player in ipairs(Players:GetPlayers()) do
966		if player == LocalPlayer then continue end
967		
968		if not player.Character or not player.Character.Parent then
969			if skeletonLines[player] then cleanupPlayerESP(player) end
970			continue
971		end
972		
973		local humanoid = player.Character:FindFirstChild("Humanoid")
974		if not humanoid or (deadESPEnabled and humanoid.Health <= 0) then 
975			if skeletonLines[player] then cleanupPlayerESP(player) end
976			continue 
977		end
978		
979		if not skeletonLines[player] then
980			skeletonLines[player] = { lines = {}, tracer = nil }
981			for i = 1, 14 do
982				local line = Drawing.new("Line")
983				line.Visible = false
984				line.Color = Color3.new(1,1,1)
985				line.Thickness = 2
986				line.Transparency = 1
987				skeletonLines[player].lines[i] = line
988			end
989		end
990		
991		local char = player.Character
992		local bonePairs = {
993			{char:FindFirstChild("Head"), char:FindFirstChild("UpperTorso")},
994			{char:FindFirstChild("UpperTorso"), char:FindFirstChild("LowerTorso")},
995			{char:FindFirstChild("UpperTorso"), char:FindFirstChild("LeftUpperArm")},
996			{char:FindFirstChild("LeftUpperArm"), char:FindFirstChild("LeftLowerArm")},
997			{char:FindFirstChild("LeftLowerArm"), char:FindFirstChild("LeftHand")},
998			{char:FindFirstChild("UpperTorso"), char:FindFirstChild("RightUpperArm")},
999			{char:FindFirstChild("RightUpperArm"), char:FindFirstChild("RightLowerArm")},
1000			{char:FindFirstChild("RightLowerArm"), char:FindFirstChild("RightHand")},
1001			{char:FindFirstChild("LowerTorso"), char:FindFirstChild("LeftUpperLeg")},
1002			{char:FindFirstChild("LeftUpperLeg"), char:FindFirstChild("LeftLowerLeg")},
1003			{char:FindFirstChild("LeftLowerLeg"), char:FindFirstChild("LeftFoot")},
1004			{char:FindFirstChild("LowerTorso"), char:FindFirstChild("RightUpperLeg")},
1005			{char:FindFirstChild("RightUpperLeg"), char:FindFirstChild("RightLowerLeg")},
1006			{char:FindFirstChild("RightLowerLeg"), char:FindFirstChild("RightFoot")}
1007		}
1008		
1009		for i, pair in ipairs(bonePairs) do
1010			local startPart, endPart = pair[1], pair[2]
1011			local line = skeletonLines[player].lines[i]
1012			if startPart and endPart and line then
1013				local startPos, endPos = getPos(startPart), getPos(endPart)
1014				if startPos and endPos then
1015					local startScreen, startOn = Camera:WorldToViewportPoint(startPos)
1016					local endScreen, endOn = Camera:WorldToViewportPoint(endPos)
1017					if startOn and endOn then
1018						line.From = Vector2.new(startScreen.X, startScreen.Y)
1019						line.To = Vector2.new(endScreen.X, endScreen.Y)
1020						line.Visible = playerESPEnabled and skeletonESPEnabled
1021						if rainbowModeEnabled then line.Color = rainbowColor end
1022					else
1023						line.Visible = false
1024					end
1025				else
1026					line.Visible = false
1027				end
1028			elseif line then
1029				line.Visible = false
1030			end
1031		end
1032		
1033		-- Tracer
1034		if skeletonESPTracers and skeletonESPEnabled and playerESPEnabled then
1035			local root = char:FindFirstChild("HumanoidRootPart")
1036			if root then
1037				local rootPos, onScreen = Camera:WorldToViewportPoint(root.Position)
1038				if onScreen then
1039					if not skeletonLines[player].tracer then
1040						local tracer = Drawing.new("Line")
1041						tracer.Thickness = 2
1042						tracer.Transparency = 1
1043						tracer.Color = Color3.new(1,1,1)
1044						skeletonLines[player].tracer = tracer
1045					end
1046					local tracer = skeletonLines[player].tracer
1047					tracer.From = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y)
1048					tracer.To = Vector2.new(rootPos.X, rootPos.Y)
1049					tracer.Visible = true
1050					if rainbowModeEnabled then tracer.Color = rainbowColor end
1051				else
1052					if skeletonLines[player].tracer then skeletonLines[player].tracer.Visible = false end
1053				end
1054			end
1055		else
1056			if skeletonLines[player] and skeletonLines[player].tracer then
1057				skeletonLines[player].tracer.Visible = false
1058			end
1059		end
1060	end
1061end)
1062
1063-- ========== Movement ==========
1064
1065local MovementSection = Tabs.Movement:CreateSection("Movement Options")
1066
1067local flyEnabled = false
1068local flySpeed = 10
1069local flyBodyVelocity
1070
1071local FlyToggle = Tabs.Movement:CreateToggle({
1072	Name = "Fly Hack",
1073	CurrentValue = false,
1074	Flag = "FlyHack",
1075	Callback = function(Value)
1076		flyEnabled = Value
1077		
1078		if mobileButtons["Fly"] then
1079			mobileButtons["Fly"].BackgroundColor3 = Value and Color3.fromRGB(0, 255, 0) or Color3.fromRGB(40, 40, 40)
1080		end
1081		
1082		if Value then
1083			local root = getRoot()
1084			if root then
1085				root.Anchored = false
1086				
1087				if not flyBodyVelocity then
1088					flyBodyVelocity = Instance.new("BodyVelocity")
1089					flyBodyVelocity.MaxForce = Vector3.new(4000, 4000, 4000)
1090					flyBodyVelocity.Velocity = Vector3.zero
1091					flyBodyVelocity.Parent = root
1092				end
1093			end
1094		else
1095			if flyBodyVelocity then
1096				flyBodyVelocity:Destroy()
1097				flyBodyVelocity = nil
1098			end
1099		end
1100	end,
1101})
1102
1103local FlySpeedSlider = Tabs.Movement:CreateSlider({
1104	Name = "Fly Speed",
1105	Range = {1, 100},
1106	Increment = 1,
1107	CurrentValue = 10,
1108	Flag = "FlySpeed",
1109	Callback = function(Value)
1110		flySpeed = Value
1111	end,
1112})
1113
1114local FlyKeybind = Tabs.Movement:CreateKeybind({
1115	Name = "Fly Keybind",
1116	CurrentKeybind = "F",
1117	HoldToInteract = false,
1118	Flag = "FlyKeybind",
1119	Callback = function(Keybind)
1120		local parsed = parseKeybindInput(Keybind)
1121		if parsed then
1122			flyKeyEnum = parsed
1123		end
1124	end,
1125})
1126
1127connections["Fly"] = RunService.Heartbeat:Connect(function()
1128	if flyEnabled and flyBodyVelocity and flyBodyVelocity.Parent then
1129		local moveDir = Vector3.zero
1130		if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDir += Camera.CFrame.LookVector end
1131		if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDir -= Camera.CFrame.LookVector end
1132		if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDir -= Camera.CFrame.RightVector end
1133		if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDir += Camera.CFrame.RightVector end
1134		if UserInputService:IsKeyDown(Enum.KeyCode.Space) then moveDir += Vector3.new(0, 1, 0) end
1135		if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then moveDir -= Vector3.new(0, 1, 0) end
1136		
1137		if moveDir.Magnitude > 0 then
1138			flyBodyVelocity.Velocity = moveDir.Unit * flySpeed
1139		else
1140			flyBodyVelocity.Velocity = Vector3.zero
1141		end
1142	end
1143end)
1144
1145local AdditionalMovementSection = Tabs.Movement:CreateSection("Additional Movement")
1146
1147-- Infinite Jump
1148local infJumpEnabled = false
1149local infJumpConnection
1150
1151local InfJumpToggle = Tabs.Movement:CreateToggle({
1152	Name = "Infinite Jump",
1153	CurrentValue = false,
1154	Flag = "InfiniteJump",
1155	Callback = function(Value)
1156		infJumpEnabled = Value
1157		if Value then
1158			infJumpConnection = UserInputService.JumpRequest:Connect(function()
1159				local humanoid = getHumanoid()
1160				if humanoid then
1161					humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
1162				end
1163			end)
1164		else
1165			if infJumpConnection then 
1166				infJumpConnection:Disconnect() 
1167				infJumpConnection = nil 
1168			end
1169		end
1170	end,
1171})
1172
1173-- No Clip
1174local noClipEnabled = false
1175
1176local NoClipToggle = Tabs.Movement:CreateToggle({
1177	Name = "No Clip",
1178	CurrentValue = false,
1179	Flag = "NoClip",
1180	Callback = function(Value)
1181		noClipEnabled = Value
1182		
1183		if mobileButtons["NoClip"] then
1184			mobileButtons["NoClip"].BackgroundColor3 = Value and Color3.fromRGB(0, 255, 0) or Color3.fromRGB(40, 40, 40)
1185		end
1186	end,
1187})
1188
1189connections["NoClip"] = RunService.Stepped:Connect(function()
1190	if noClipEnabled then
1191		pcall(function()
1192			for _, part in ipairs(getCharacter():GetDescendants()) do
1193				if part:IsA("BasePart") then
1194					part.CanCollide = false
1195				end
1196			end
1197		end)
1198	end
1199end)
1200
1201-- Bunny Hop
1202local bunnyHopEnabled = false
1203
1204local BunnyHopToggle = Tabs.Movement:CreateToggle({
1205	Name = "Bunny Hop",
1206	CurrentValue = false,
1207	Flag = "BunnyHop",
1208	Callback = function(Value)
1209		bunnyHopEnabled = Value
1210	end,
1211})
1212
1213connections["BunnyHop"] = RunService.Heartbeat:Connect(function()
1214	if bunnyHopEnabled then
1215		pcall(function()
1216			local humanoid = getHumanoid()
1217			if humanoid and humanoid.MoveDirection.Magnitude > 0 and humanoid.FloorMaterial ~= Enum.Material.Air then
1218				humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
1219			end
1220		end)
1221	end
1222end)
1223
1224-- ========== Protection ==========
1225
1226local ProtectionSection = Tabs.Protection:CreateSection("Protection Options")
1227
1228Tabs.Protection:CreateLabel("⚠️ Update Notice")
1229Tabs.Protection:CreateLabel("Unfortunately, due to game updates,")
1230Tabs.Protection:CreateLabel("Anti-Aim and Force Third Person")
1231Tabs.Protection:CreateLabel("features have been temporarily")
1232Tabs.Protection:CreateLabel("removed. We're working on bringing")
1233Tabs.Protection:CreateLabel("them back in future updates.")
1234
1235-- ========== Extras ==========
1236
1237local ExtrasSection = Tabs.Extras:CreateSection("Extras Options")
1238
1239local fpsBoostEnabled = false
1240
1241local FPSBoostToggle = Tabs.Extras:CreateToggle({
1242	Name = "FPS Boost",
1243	CurrentValue = false,
1244	Flag = "FPSBoost",
1245	Callback = function(Value)
1246		fpsBoostEnabled = Value
1247		if Value then
1248			pcall(function()
1249				local lighting = game:GetService("Lighting")
1250				lighting.GlobalShadows = false
1251				lighting.FogEnd = 9e9
1252				settings().Rendering.QualityLevel = Enum.QualityLevel.Level01
1253				
1254				for _, v in pairs(workspace:GetDescendants()) do
1255					if v:IsA("ParticleEmitter") or v:IsA("Trail") or v:IsA("Smoke") or v:IsA("Fire") then
1256						v.Enabled = false
1257					end
1258				end
1259			end)
1260			Rayfield:Notify({
1261				Title = "FPS Boost",
1262				Content = "FPS Boost Enabled!",
1263				Duration = 3,
1264				Image = 4483362458,
1265			})
1266		else
1267			pcall(function()
1268				local lighting = game:GetService("Lighting")
1269				lighting.GlobalShadows = true
1270				settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic
1271			end)
1272		end
1273	end,
1274})
1275
1276local RemoveTexturesButton = Tabs.Extras:CreateButton({
1277	Name = "Remove Textures (Extreme FPS)",
1278	Callback = function()
1279		for _, v in pairs(workspace:GetDescendants()) do
1280			pcall(function()
1281				if v:IsA("Decal") or v:IsA("Texture") then
1282					v:Destroy()
1283				elseif v:IsA("BasePart") then
1284					v.Material = Enum.Material.SmoothPlastic
1285					v.Reflectance = 0
1286				end
1287			end)
1288		end
1289		Rayfield:Notify({
1290			Title = "Textures",
1291			Content = "Textures removed!",
1292			Duration = 3,
1293			Image = 4483362458,
1294		})
1295	end,
1296})
1297
1298local FullbrightButton = Tabs.Extras:CreateButton({
1299	Name = "Fullbright",
1300	Callback = function()
1301		local lighting = game:GetService("Lighting")
1302		lighting.Brightness = 2
1303		lighting.ClockTime = 14
1304		lighting.FogEnd = 100000
1305		lighting.GlobalShadows = false
1306		lighting.OutdoorAmbient = Color3.fromRGB(128, 128, 128)
1307		Rayfield:Notify({
1308			Title = "Fullbright",
1309			Content = "Fullbright Enabled!",
1310			Duration = 3,
1311			Image = 4483362458,
1312		})
1313	end,
1314})
1315
1316local RemoveFogButton = Tabs.Extras:CreateButton({
1317	Name = "Remove Fog",
1318	Callback = function()
1319		local lighting = game:GetService("Lighting")
1320		lighting.FogEnd = 100000
1321		for _, v in pairs(lighting:GetChildren()) do
1322			if v:IsA("Atmosphere") then
1323				v:Destroy()
1324			end
1325		end
1326		Rayfield:Notify({
1327			Title = "Fog",
1328			Content = "Fog Removed!",
1329			Duration = 3,
1330			Image = 4483362458,
1331		})
1332	end,
1333})
1334
1335-- ========== Settings Tab (Config Management) ==========
1336
1337local ConfigSection = Tabs.Settings:CreateSection("Configuration Management")
1338
1339local SaveConfigButton = Tabs.Settings:CreateButton({
1340	Name = "Save Configuration",
1341	Callback = function()
1342		Rayfield:Notify({
1343			Title = "Config Saved",
1344			Content = "Your configuration has been saved!",
1345			Duration = 3,
1346			Image = 4483362458,
1347		})
1348	end,
1349})
1350
1351local LoadConfigButton = Tabs.Settings:CreateButton({
1352	Name = "Load Configuration",
1353	Callback = function()
1354		Rayfield:Notify({
1355			Title = "Config Loaded",
1356			Content = "Your configuration has been loaded!",
1357			Duration = 3,
1358			Image = 4483362458,
1359		})
1360	end,
1361})
1362
1363local ResetConfigButton = Tabs.Settings:CreateButton({
1364	Name = "Reset to Default",
1365	Callback = function()
1366		Rayfield:Notify({
1367			Title = "Config Reset",
1368			Content = "Configuration reset to defaults!",
1369			Duration = 3,
1370			Image = 4483362458,
1371		})
1372	end,
1373})
1374
1375local MiscSection = Tabs.Settings:CreateSection("Miscellaneous")
1376
1377local UnloadButton = Tabs.Settings:CreateButton({
1378	Name = "Unload Script",
1379	Callback = function()
1380		UnloadScript()
1381	end,
1382})
1383
1384-- Mobile Buttons Section
1385local MobileButtonsSection = Tabs.Settings:CreateSection("Mobile Button Controls")
1386
1387Tabs.Settings:CreateLabel("Enable screen buttons for touch control")
1388Tabs.Settings:CreateLabel("Buttons only work when feature is active")
1389
1390local AimbotButtonToggle = Tabs.Settings:CreateToggle({
1391	Name = "Aimbot Button",
1392	CurrentValue = false,
1393	Flag = "AimbotButton",
1394	Callback = function(Value)
1395		mobileButtonsEnabled.Aimbot = Value
1396		updateMobileButtonVisibility("Aimbot", Value)
1397	end,
1398})
1399
1400local FlyButtonToggle = Tabs.Settings:CreateToggle({
1401	Name = "Fly Button",
1402	CurrentValue = false,
1403	Flag = "FlyButton",
1404	Callback = function(Value)
1405		mobileButtonsEnabled.Fly = Value
1406		updateMobileButtonVisibility("Fly", Value)
1407	end,
1408})
1409
1410local NoClipButtonToggle = Tabs.Settings:CreateToggle({
1411	Name = "NoClip Button",
1412	CurrentValue = false,
1413	Flag = "NoClipButton",
1414	Callback = function(Value)
1415		mobileButtonsEnabled.NoClip = Value
1416		updateMobileButtonVisibility("NoClip", Value)
1417	end,
1418})
1419
1420-- Show PC controls if not on touch devices
1421if not UserInputService.TouchEnabled then
1422	local PCSection = Tabs.Settings:CreateSection("💻 PC Controls")
1423	Tabs.Settings:CreateLabel("You're on PC - Use keybinds for quick access!")
1424	Tabs.Settings:CreateLabel("All keybinds can be customized in their")
1425	Tabs.Settings:CreateLabel("respective sections.")
1426end
1427
1428-- Create mobile buttons (hidden by default)
1429createMobileButton("Aimbot", UDim2.new(0, 10, 0.7, 0), function(toggled)
1430	aimbotEnabled = toggled
1431	AimbotToggle:Set(toggled)
1432end)
1433
1434createMobileButton("Fly", UDim2.new(0, 100, 0.7, 0), function(toggled)
1435	flyEnabled = toggled
1436	FlyToggle:Set(toggled)
1437end)
1438
1439createMobileButton("NoClip", UDim2.new(0, 190, 0.7, 0), function(toggled)
1440	noClipEnabled = toggled
1441	NoClipToggle:Set(toggled)
1442end)
1443
1444-- Keybind handling (global InputBegan)
1445connections["Keybinds"] = UserInputService.InputBegan:Connect(function(input, gameProcessed)
1446	if gameProcessed then return end
1447	if input.UserInputType ~= Enum.UserInputType.Keyboard then return end
1448
1449	local key = input.KeyCode
1450	if key == aimbotKeyEnum then
1451		aimbotEnabled = not aimbotEnabled
1452		-- Update UI toggle to reflect state
1453		if AimbotToggle and AimbotToggle.Set then
1454			AimbotToggle:Set(aimbotEnabled)
1455		end
1456	end
1457
1458	if key == flyKeyEnum then
1459		flyEnabled = not flyEnabled
1460		if FlyToggle and FlyToggle.Set then
1461			FlyToggle:Set(flyEnabled)
1462		end
1463	end
1464end)
1465
1466-- Proper cleanup on unload
1467function UnloadScript()
1468	print("Unloading Rivals Cheat...")
1469
1470	-- Disconnect all connections
1471	for name, conn in pairs(connections) do
1472		pcall(function()
1473			if name == "Aimbot" then
1474				RunService:UnbindFromRenderStep("Aimbot")
1475			elseif type(conn) == "table" and conn.Disconnect then
1476				conn:Disconnect()
1477			elseif type(conn) == "userdata" and conn.Disconnect then
1478				conn:Disconnect()
1479			end
1480		end)
1481	end
1482	connections = {}
1483	
1484	-- Clean up all ESP
1485	for player in pairs(espBoxes) do
1486		cleanupPlayerESP(player)
1487	end
1488	for player in pairs(skeletonLines) do
1489		cleanupPlayerESP(player)
1490	end
1491	
1492	-- Clean up FOV circle
1493	pcall(function() if fovCircle then fovCircle:Remove() end end)
1494	
1495	-- Clean up mobile buttons
1496	pcall(function()
1497		local gui = LocalPlayer.PlayerGui:FindFirstChild("MobileButtons")
1498		if gui then gui:Destroy() end
1499	end)
1500	
1501	-- Clean up physics
1502	if flyBodyVelocity then flyBodyVelocity:Destroy() end
1503	Workspace.Gravity = 196.2
1504	
1505	-- Reset camera settings
1506	LocalPlayer.CameraMode = Enum.CameraMode.Classic
1507	LocalPlayer.CameraMaxZoomDistance = 128
1508	LocalPlayer.CameraMinZoomDistance = 0.5
1509	
1510	-- Reset humanoid
1511	pcall(function()
1512		local humanoid = getHumanoid()
1513		if humanoid then
1514			humanoid.WalkSpeed = 16
1515			humanoid.JumpPower = 50
1516		end
1517	end)
1518	
1519	-- Disconnect infinite jump
1520	if infJumpConnection then infJumpConnection:Disconnect() end
1521	
1522	-- Reset lighting
1523	pcall(function()
1524		local lighting = game:GetService("Lighting")
1525		lighting.GlobalShadows = true
1526		lighting.Brightness = 1
1527		settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic
1528	end)
1529	
1530	Rayfield:Notify({
1531		Title = "Script Unloaded",
1532		Content = "Script unloaded successfully!",
1533		Duration = 3,
1534		Image = 4483362458,
1535	})
1536	
1537	task.wait(1)
1538	Rayfield:Destroy()
1539end
1540
1541-- Startup notification
1542Rayfield:Notify({
1543	Title = "Rivals Cheat v2.2",
1544	Content = "Loaded successfully!",
1545	Duration = 5,
1546	Image = 4483362458,
1547})
1548
1549print("Rivals Cheat v2.2 - Rayfield UI loaded successfully!")

Postador do Script

Jogos Suportados

Tags

espsilent aimaimbotrivalsopsem keyno keyfree

Scripts Semelhantes para [🎃] RIVALS