getgenv().toggleKey = "X"
if executed then
	return
end
if not highlight then
	getgenv().highlight = Instance.new("Highlight")
	highlight.Enabled = false
	highlight.FillColor = Color3.fromRGB(25, 255, 25)
	highlight.OutlineColor = Color3.fromRGB(0, 255, 0)
	highlight.Parent = game:GetService("CoreGui")
end
local userInputService = game:GetService("UserInputService")
local runService = game:GetService("RunService")
local players = game:GetService("Players")
local plr = players.LocalPlayer
local speed = 10
local radius = 5
local toggled = false
local connection: RBXScriptConnection = nil
local function getCharacter(player): Model
	player = player or plr
	return player.Character or player.CharacterAdded:Wait()
end
local function getRootPart(player): Part
	player = player or plr
	return player:FindFirstChild("HumanoidRootPart") or getCharacter(player):WaitForChild("HumanoidRootPart")
end
local function getRootPosition(player): Vector3
	player = player or plr
	return getRootPart(player).Position
end
local function getDirection(partA, partB): Vector3
	return (partA.Position - partB.Position).Unit
end
local function getGun(player)
	player = player or plr
	return getCharacter(player):FindFirstChildOfClass("Tool")
end
local function getGunRemote(player)
	player = player or plr
	
	local gun = getGun(player)
	return gun ~= nil and gun:WaitForChild("Fire")
end
local function fireGun(hitPosition)
	local remote = getGunRemote()
	
	if remote then
		remote:FireServer(hitPosition)
	end
end
local function orbit(target)
	local char = getCharacter()
	local targetChar = getCharacter(target)
	
	if not targetChar or not char then
		return
	end
	
	local root = getRootPart()
	local targetRoot = getRootPart(target)
	
	if connection then
		connection:Disconnect()
		connection = nil
	end
	
	connection = runService.Heartbeat:Connect(function()
		if not targetChar or not targetChar.Parent then
			if connection then
				connection:Disconnect()
				connection = nil
			end
			
			return
		end
		
		if not char or not char.Parent then
			if connection then
				connection:Disconnect()
				connection = nil
			end
			
			return
		end
		
		highlight.Adornee = targetChar
		highlight.Enabled = true
		
		local offsetX = math.sin(tick() * speed) * radius
		local offsetZ = math.cos(tick() * speed) * radius
		
		local offset = Vector3.new(offsetX, 0, offsetZ)
		root.CFrame = CFrame.new(targetRoot.Position + offset, targetRoot.Position)
		
		fireGun(targetRoot.CFrame * CFrame.new(0, 0.7, 0) + (targetRoot.Velocity / 10))
	end)
end
local function getTarget(): Player
	local distance = math.huge
	local target = nil
	
	for _, tempTarget in next, players:GetPlayers() do
		local character = getCharacter()
		local targetChar = getCharacter(target)
		
		if not character or not targetChar then
			continue
		end
		
		local rootPos = getRootPosition()
		local targetPos = getRootPosition(target)
		
		local tempDist = (rootPos - targetPos).Magnitude
		
		if tempDist < distance then
			distance = tempDist
			target = tempTarget
		end
	end
	
	return target
end
userInputService.InputBegan:Connect(function(key: InputObject, gpe: boolean)
	if gpe then
		return
	end
	
	if key.KeyCode == Enum.KeyCode[toggleKey] then
		toggled = not toggled
		
		if toggled then
			local target = getTarget()
			orbit(target)
		elseif not toggled then
			highlight.Adornee = nil
			highlight.Enabled = false
			
			if connection then
				connection:Disconnect()
				connection = nil
			end
		end
	end
end)
getgenv().executed = true
print("LOADED")