-- ==========================================
-- [ Delta 모바일 최적화 완벽 기능 통합 한국어 허브 - 레이지 백스탭 고도 동시 동기화본 ]
-- ==========================================
task.wait(0.5)

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local CoreGui = game:GetService("CoreGui")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local VirtualUser = game:GetService("VirtualUser")

local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

-- [ 상태 및 설정 변수 정의 ]
local FLYING = false
local FLY_SPEED = 50
local WALK_SPEED = 16
local NOCLIP = false
local INF_JUMP = false

local targetPlayerName = ""
local loopTeleportActive = false
local loopTeleportConn = nil
local TpInfiniteActive = false

-- 기능별 활성화 상태
local ESP_ENABLED = false
local AIMBOT_ENABLED = false         
local TRIGGER_ENABLED = false        
local SILENT_AIM_ENABLED = false     
local FIRE_RATE_ENABLED = false      
local RAGE_ENABLED = false           

local FOV_RADIUS = 150
local GameMode = "1v1 (개인전)"
local originalStats = {}

-- [ 레이지봇 속도 조절 및 좌표 제한 설정 변수 ]
local lastRageTpTime = 0
local RAGE_TP_DELAY = 0.25 -- TP 간격 딜레이 (초 단위, 값이 클수록 느려짐)
local MAX_COORD = 10010    -- 최대 만십(10010) 좌표 한계선

-- [ FOV 원형 드로잉 설정 ]
local FovCircle = Drawing.new("Circle")
FovCircle.Color = Color3.fromRGB(255, 50, 50)
FovCircle.Thickness = 1.5
FovCircle.Filled = false
FovCircle.Visible = false

-- ==========================================
-- [ 안전 장치 및 유틸리티 함수 ]
-- ==========================================
local function safeClick()
    VirtualUser:Button1Down(Vector2.new(0, 0))
    task.wait()
    VirtualUser:Button1Up(Vector2.new(0, 0))
end

local function getRoot(char)
    return char and (char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso"))
end

local function getTeamID(player)
    if not player then return nil end
    local teamID = player:GetAttribute("TeamID")
    if teamID then return teamID end
    if player.Character then
        local teamValue = player.Character:FindFirstChild("TeamID")
        if teamValue and (teamValue:IsA("StringValue") or teamValue:IsA("IntValue")) then
            return teamValue.Value
        end
    end
    return player.Team and player.Team.Name or nil
end

local function isEnemy(player)
    if not player or player == LocalPlayer then return false end
    if GameMode == "1v1 (개인전)" then return true end
    local myTeam = getTeamID(LocalPlayer)
    local theirTeam = getTeamID(player)
    if not myTeam or not theirTeam then return true end
    return myTeam ~= theirTeam
end

-- 벽 뒤 감지 레이캐스트 함수 (벽 뒤에 있으면 false 반환)
local function isVisible(targetPart)
    if not targetPart or not LocalPlayer.Character then return false end
    local myRoot = getRoot(LocalPlayer.Character)
    if not myRoot then return false end
    
    local origin = Camera.CFrame.Position
    local destination = targetPart.Position
    local direction = destination - origin
    
    local raycastParams = RaycastParams.new()
    raycastParams.FilterType = Enum.RaycastFilterType.Exclude
    raycastParams.FilterDescendantsInstances = {LocalPlayer.Character, targetPart.Parent}
    raycastParams.IgnoreWater = true
    
    local result = workspace:Raycast(origin, direction, raycastParams)
    
    if result then
        return false 
	end
    return true 
end

local function teleportToPlayer(targetName)
    local targetPlayer = Players:FindFirstChild(targetName)
    if targetPlayer and targetPlayer.Character and LocalPlayer.Character then
        local myRoot = getRoot(LocalPlayer.Character)
        local theirRoot = getRoot(targetPlayer.Character)
        if myRoot and theirRoot then
            myRoot.CFrame = theirRoot.CFrame * CFrame.new(0, 0, 3)
        end
    end
end

-- 무한 점프
UserInputService.JumpRequest:Connect(function()
    if INF_JUMP and LocalPlayer.Character then
        local humanoid = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
        if humanoid then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end
    end
end)

-- 비행 (Fly) 온오프 토글 
local function toggleFly()
    FLYING = not FLYING
    local root = LocalPlayer.Character and getRoot(LocalPlayer.Character)
    if root then
        if FLYING then
            local bv = Instance.new("BodyVelocity", root)
            bv.Name = "FlyVelocity"
            bv.Velocity = Vector3.new(0, 0, 0)
            bv.MaxForce = Vector3.new(1/0, 1/0, 1/0)
        else
            if root:FindFirstChild("FlyVelocity") then root.FlyVelocity:Destroy() end
        end
    end
end

-- ==========================================
-- [ 서버 리셋 우회 및 프레임 루프 엔진 ]
-- ==========================================
RunService.Stepped:Connect(function()
	if NOCLIP and LocalPlayer.Character then
		for _, part in pairs(LocalPlayer.Character:GetDescendants()) do
			if part:IsA("BasePart") and part.CanCollide then part.CanCollide = false end
		end
	end
end)

-- WalkSpeed 및 수동 입력 감지 기반 Fly 제어
RunService.Heartbeat:Connect(function()
    if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then
        local humanoid = LocalPlayer.Character.Humanoid
        if humanoid.WalkSpeed ~= WALK_SPEED and not FLYING then
            humanoid.WalkSpeed = WALK_SPEED
        end
        
        -- 내가 움직일 때만(MoveDirection이 0이 아닐 때만) 카메라 방향 비행 작동
        if FLYING then
            local root = getRoot(LocalPlayer.Character)
            if root then
                local bv = root:FindFirstChild("FlyVelocity")
                if bv then
                    if humanoid.MoveDirection.Magnitude > 0 then
                        bv.Velocity = Camera.CFrame.LookVector * FLY_SPEED
                    else
                        bv.Velocity = Vector3.new(0, 0, 0) 
                    end
                end
            end
        end
    end
end)

-- 핵심 에임, 트리거, 레이지봇 연산 루프
RunService.RenderStepped:Connect(function()
    -- ESP 연산
	if ESP_ENABLED then
		for _, p in pairs(Players:GetPlayers()) do
			if p ~= LocalPlayer and p.Character then
				local humanoid = p.Character:FindFirstChildWhichIsA("Humanoid")
				if humanoid and humanoid.Health > 0 and isEnemy(p) then
					if not p.Character:FindFirstChild("ESP_Highlight") then
						local highlight = Instance.new("Highlight", p.Character)
						highlight.Name = "ESP_Highlight"
						highlight.FillColor = Color3.fromRGB(255, 50, 50)
						highlight.FillTransparency = 0.5
					end
				else
					if p.Character then
						local h = p.Character:FindFirstChild("ESP_Highlight")
						if h then h:Destroy() end
					end
				end
			end
		end
	else
		for _, p in pairs(Players:GetPlayers()) do
			if p.Character then
				local h = p.Character:FindFirstChild("ESP_Highlight")
				if h then h:Destroy() end
			end
		end
	end

	-- FOV 타겟 수집
	FovCircle.Position = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
	FovCircle.Radius = FOV_RADIUS
	FovCircle.Visible = AIMBOT_ENABLED

	local closestTarget, minDistance = nil, FOV_RADIUS
	local centerScreen = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)

	for _, p in pairs(Players:GetPlayers()) do
		if p ~= LocalPlayer and isEnemy(p) and p.Character then
			local head = p.Character:FindFirstChild("Head")
			local hum = p.Character:FindFirstChild("Humanoid")
			if head and hum and hum.Health > 0 then
				local pos, onScreen = Camera:WorldToViewportPoint(head.Position)
				local dist = (Vector2.new(pos.X, pos.Y) - centerScreen).Magnitude
				if onScreen and dist < minDistance then
                    if isVisible(head) then 
                        closestTarget = head
                        minDistance = dist
                    end
				end
			end
		end
	end

	-- 1. 일반 에임봇 (벽 뒤 타겟 불가, 살아있는 적만)
	if AIMBOT_ENABLED and closestTarget then
		Camera.CFrame = CFrame.new(Camera.CFrame.Position, closestTarget.Position)
	end

	-- 2. 일반 트리거봇 (벽 뒤 타겟 불가, 살아있는 적만)
	if TRIGGER_ENABLED and closestTarget and minDistance < 50 then
		safeClick()
	end

	-- 3. 고도화 레이지봇 익스플로잇 (속도 제어 + 최대 만십 좌표 및 상대 팀 추적 조절)
    if RAGE_ENABLED and LocalPlayer.Character then
        local myRoot = getRoot(LocalPlayer.Character)
        
        local rageTarget, closestDist = nil, math.huge
        for _, p in pairs(Players:GetPlayers()) do
            if p ~= LocalPlayer and isEnemy(p) and p.Character then
                local head = p.Character:FindFirstChild("Head")
                local hum = p.Character:FindFirstChild("Humanoid")
                if head and hum and hum.Health > 0 then
                    local d = (myRoot.Position - head.Position).Magnitude
                    if d < closestDist then
                        closestDist = d
                        rageTarget = head
                    end
                end
            end
        end

        if rageTarget and myRoot then
            local enemyChar = rageTarget.Parent
            local enemyRoot = getRoot(enemyChar)
            if enemyRoot then
                -- 에임 유전 및 사격 처리는 부드럽게 유지하기 위해 실시간 연산
                Camera.CFrame = CFrame.new(Camera.CFrame.Position, rageTarget.Position)
                safeClick()

                -- [수정]: 팅김이나 피해 방지를 위해 지정한 타임 딜레이마다 끊어서 텔레포트 수행
                local currentTime = task.clock()
                if currentTime - lastRageTpTime >= RAGE_TP_DELAY then
                    lastRageTpTime = currentTime

                    local backVector = -enemyRoot.CFrame.LookVector
                    
                    -- 랜덤 반경 오프셋 연산
                    local randomAngle = math.rad(math.random(0, 360))
                    local randomRadius = math.random(5, 45) 
                    local offsetX = math.cos(randomAngle) * randomRadius
                    local offsetZ = math.sin(randomAngle) * randomRadius
                    
                    -- 적 등 뒤 기반의 베이스 공간 위치 계산
                    local backSpacePosition = enemyRoot.Position + (backVector * 15) 
                    local rawX = backSpacePosition.X + offsetX
                    local rawZ = backSpacePosition.Z + offsetZ

                    -- [수정]: 상대 팀과의 거리를 만십(10010) 한도 내에서 유기적으로 조율하기 위해 Y축 높이를 연산
                    -- 절대좌표 최고치 만십(10010)을 타겟으로 잡고 락을 겁니다.
                    local randomHeight = math.clamp(enemyRoot.Position.Y + math.random(9000, 10000), -MAX_COORD, MAX_COORD)

                    -- [수정]: X, Z축 또한 math.clamp를 통해 절대좌표 최대 10,010을 절대 넘지 않게 봉인
                    local finalX = math.clamp(rawX, -MAX_COORD, MAX_COORD)
                    local finalY = randomHeight
                    local finalZ = math.clamp(rawZ, -MAX_COORD, MAX_COORD)

                    local finalPosition = Vector3.new(finalX, finalY, finalZ)
                    myRoot.CFrame = CFrame.new(finalPosition, rageTarget.Position)
                end
            end
        end
    end
end)

-- 무한 텔레포트 스레드
task.spawn(function()
    while true do
        task.wait()
        if TpInfiniteActive and targetPlayerName ~= "" and targetPlayerName ~= "--- 대상 선택 ---" then
            teleportToPlayer(targetPlayerName)
        end
    end
end)

-- 사일런트 에임 훅 구조
local oldIndex
oldIndex = hookmetamethod(game, "__index", function(self, key)
    if not game:IsLoaded() then return oldIndex(self, key) end
    if SILENT_AIM_ENABLED and (key == "Hit" or key == "Target") then
        local closestEnemy, shortestDistance = nil, math.huge
        for _, p in pairs(Players:GetPlayers()) do
            if p ~= LocalPlayer and isEnemy(p) and p.Character and getRoot(p.Character) and p.Character:FindFirstChild("Humanoid") then
                if p.Character.Humanoid.Health > 0 then
                    local distance = (LocalPlayer.Character.HumanoidRootPart.Position - getRoot(p.Character).Position).Magnitude
                    if distance < shortestDistance then
                        if isVisible(p.Character.Head) then 
                            shortestDistance = distance
                            closestEnemy = p
                        end
                    end
                end
            end
        end
        if closestEnemy and closestEnemy.Character then
            local head = closestEnemy.Character:FindFirstChild("Head")
            if head then
                if key == "Hit" then return head.CFrame elseif key == "Target" then return head end
            end
        end
    end
    return oldIndex(self, key)
end)

-- 연사력 모듈 변조 함수
local function applyFireRate()
    local modulesFolder = ReplicatedStorage:FindFirstChild("Modules")
    local weaponDataCache = nil
    if modulesFolder then
        for _, name in ipairs({"ItemLibrary", "WeaponStats", "Items", "WeaponData", "Weapons"}) do
            local found = modulesFolder:FindFirstChild(name)
            if found then weaponDataCache = require(found) break end
        end
    end
    if weaponDataCache and weaponDataCache.Items then
        for itemName, stats in pairs(weaponDataCache.Items) do
            if not originalStats[itemName] then
                originalStats[itemName] = {
                    ShootCooldown = stats.ShootCooldown,
                    ShootBurstCooldown = stats.ShootBurstCooldown,
                    AttackCooldown = stats.AttackCooldown,
                    Cooldown = stats.Cooldown,
                    ReloadTime = stats.ReloadTime
                }
            end
            local orig = originalStats[itemName]
            if FIRE_RATE_ENABLED then
                if stats.ShootCooldown then stats.ShootCooldown = -5 end
                if stats.ShootBurstCooldown then stats.ShootBurstCooldown = -5 end
                if stats.AttackCooldown then stats.AttackCooldown = -5 end
                if stats.Cooldown then stats.Cooldown = -5 end
                if stats.ReloadTime then stats.ReloadTime = -5 end
            else
                if stats.ShootCooldown and orig.ShootCooldown then stats.ShootCooldown = orig.ShootCooldown end
                if stats.ShootBurstCooldown and orig.ShootBurstCooldown then stats.ShootBurstCooldown = orig.ShootBurstCooldown end
                if stats.AttackCooldown and orig.AttackCooldown then stats.AttackCooldown = orig.AttackCooldown end
                if stats.Cooldown and orig.Cooldown then stats.Cooldown = orig.Cooldown end
                if stats.ReloadTime and orig.ReloadTime then stats.ReloadTime = orig.ReloadTime end
            end
        end
    end
end

-- ==========================================
-- [ 국문 오토레이아웃 가독성 UI 빌더 ]
-- ==========================================
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "Delta_Fixed_Korean_Hub"
ScreenGui.ResetOnSpawn = false
local success, parent = pcall(function() return CoreGui end)
ScreenGui.Parent = success and parent or LocalPlayer:WaitForChild("PlayerGui")

local Frame = Instance.new("Frame")
Frame.Size = UDim2.new(0, 260, 0, 400)
Frame.Position = UDim2.new(0.5, -130, 0.5, -200)
Frame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
Frame.BorderSizePixel = 0
Frame.Active = true
Frame.Draggable = true
Frame.Parent = ScreenGui

local UICorner = Instance.new("UICorner", Frame)
UICorner.CornerRadius = UDim.new(0, 10)

local TabHeader = Instance.new("Frame", Frame)
TabHeader.Size = UDim2.new(1, 0, 0, 40)
TabHeader.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
TabHeader.BorderSizePixel = 0

local MainTabBtn = Instance.new("TextButton", TabHeader)
MainTabBtn.Size = UDim2.new(0.5, 0, 1, 0)
MainTabBtn.BackgroundTransparency = 1
MainTabBtn.Text = "일반 기능 (이동)"
MainTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
MainTabBtn.TextSize = 13
MainTabBtn.Font = Enum.Font.SourceSansBold

local PlayerTabBtn = Instance.new("TextButton", TabHeader)
PlayerTabBtn.Size = UDim2.new(0.5, 0, 1, 0)
PlayerTabBtn.Position = UDim2.new(0.5, 0, 0, 0)
PlayerTabBtn.BackgroundTransparency = 1
PlayerTabBtn.Text = "전투 기능 (Combat)"
PlayerTabBtn.TextColor3 = Color3.fromRGB(160, 160, 160)
PlayerTabBtn.TextSize = 13
PlayerTabBtn.Font = Enum.Font.SourceSansBold

local TargetFrames = {}

local MainTabFrame = Instance.new("ScrollingFrame", Frame)
MainTabFrame.Size = UDim2.new(1, 0, 1, -40)
MainTabFrame.Position = UDim2.new(0, 0, 0, 40)
MainTabFrame.BackgroundTransparency = 1
MainTabFrame.BorderSizePixel = 0
MainTabFrame.ScrollBarThickness = 3
MainTabFrame.Visible = true
TargetFrames.Main = MainTabFrame

local PlayerTabFrame = Instance.new("ScrollingFrame", Frame)
PlayerTabFrame.Size = UDim2.new(1, 0, 1, -40)
PlayerTabFrame.Position = UDim2.new(0, 0, 0, 40)
PlayerTabFrame.BackgroundTransparency = 1
PlayerTabFrame.BorderSizePixel = 0
PlayerTabFrame.ScrollBarThickness = 3
PlayerTabFrame.Visible = false
TargetFrames.Player = PlayerTabFrame

for _, scFrame in pairs(TargetFrames) do
    local pad = Instance.new("UIPadding", scFrame)
    pad.PaddingTop = UDim.new(0, 12) pad.PaddingBottom = UDim.new(0, 12)
    pad.PaddingLeft = UDim.new(0, 12) pad.PaddingRight = UDim.new(0, 12)
    
    local layout = Instance.new("UIListLayout", scFrame)
    layout.SortOrder = Enum.SortOrder.LayoutOrder
    layout.Padding = UDim.new(0, 8)
    
    layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
        scFrame.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y + 30)
    end)
end

MainTabBtn.MouseButton1Click:Connect(function()
	MainTabFrame.Visible = true PlayerTabFrame.Visible = false
	MainTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255) PlayerTabBtn.TextColor3 = Color3.fromRGB(160, 160, 160)
end)
PlayerTabBtn.MouseButton1Click:Connect(function()
	MainTabFrame.Visible = false PlayerTabFrame.Visible = true
	MainTabBtn.TextColor3 = Color3.fromRGB(160, 160, 160) PlayerTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
end)

local function createGridWrapper(parentFrame)
    local wrapper = Instance.new("Frame", parentFrame)
    wrapper.Size = UDim2.new(1, 0, 0, 35)
    wrapper.BackgroundTransparency = 1
    local gl = Instance.new("UIGridLayout", wrapper)
    gl.CellSize = UDim2.new(0, 113, 0, 35)
    gl.CellPadding = UDim2.new(0, 10, 0, 0)
    gl.SortOrder = Enum.SortOrder.LayoutOrder
    return wrapper
end

local function createSlider(parentFrame, titleText, min, max, default, callback)
    local container = Instance.new("Frame", parentFrame)
    container.Size = UDim2.new(1, 0, 0, 45)
    container.BackgroundTransparency = 1
    
    local label = Instance.new("TextLabel", container)
    label.Size = UDim2.new(1, 0, 0, 20)
    label.Text = titleText .. ": " .. tostring(default)
    label.TextColor3 = Color3.fromRGB(200, 200, 200)
    label.Font = Enum.Font.SourceSans
    label.TextSize = 13
    label.BackgroundTransparency = 1
    label.TextXAlignment = Enum.TextXAlignment.Left
    
    local bg = Instance.new("TextButton", container)
    bg.Size = UDim2.new(1, 0, 0, 10)
    bg.Position = UDim2.new(0, 0, 0, 22)
    bg.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
    bg.Text = ""
    Instance.new("UICorner", bg).CornerRadius = UDim.new(0, 4)
    
    local bar = Instance.new("Frame", bg)
    local startPercent = (default - min) / (max - min)
    bar.Size = UDim2.new(startPercent, 0, 1, 0)
    bar.BackgroundColor3 = Color3.fromRGB(0, 150, 255)
    Instance.new("UICorner", bar).CornerRadius = UDim.new(0, 4)
    
    local function update(input)
        local percentage = math.clamp((input.Position.X - bg.AbsolutePosition.X) / bg.AbsoluteSize.X, 0, 1)
        bar.Size = UDim2.new(percentage, 0, 1, 0)
        local rawValue = min + (percentage * (max - min))
        local val = math.round(rawValue * 10) / 10
        if max - min > 50 then val = math.round(rawValue) end
        label.Text = titleText .. ": " .. tostring(val)
        callback(val)
    end
    
    bg.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then update(input) end
    end)
    return container
end

-- [ UI 배치 - 일반 기능 탭 ]
local MainRow1 = createGridWrapper(MainTabFrame)

local FlyBtn = Instance.new("TextButton", MainRow1)
FlyBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 55)
FlyBtn.Text = "비행 (Fly): 끔"
FlyBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
FlyBtn.Font = Enum.Font.SourceSansBold
Instance.new("UICorner", FlyBtn).CornerRadius = UDim.new(0, 6)
FlyBtn.MouseButton1Click:Connect(function()
    toggleFly()
    FlyBtn.Text = FLYING and "비행 (Fly): 쾀" or "비행 (Fly): 끔"
    FlyBtn.BackgroundColor3 = FLYING and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(55, 55, 55)
end)

local NoclipBtn = Instance.new("TextButton", MainRow1)
NoclipBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 55)
NoclipBtn.Text = "벽통과 (Noclip): 끔"
NoclipBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
NoclipBtn.Font = Enum.Font.SourceSansBold
Instance.new("UICorner", NoclipBtn).CornerRadius = UDim.new(0, 6)
NoclipBtn.MouseButton1Click:Connect(function()
    NOCLIP = not NOCLIP
    NoclipBtn.Text = NOCLIP and "벽통과 (Noclip): 쾀" or "벽통과 (Noclip): 끔"
    NoclipBtn.BackgroundColor3 = NOCLIP and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(55, 55, 55)
end)

local MainRow2 = createGridWrapper(MainTabFrame)

local InfJumpBtn = Instance.new("TextButton", MainRow2)
InfJumpBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 55)
InfJumpBtn.Text = "무한 점프: 끔"
InfJumpBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
InfJumpBtn.Font = Enum.Font.SourceSansBold
Instance.new("UICorner", InfJumpBtn).CornerRadius = UDim.new(0, 6)
InfJumpBtn.MouseButton1Click:Connect(function()
    INF_JUMP = not INF_JUMP
    InfJumpBtn.Text = INF_JUMP and "무한 점프: 쾀" or "무한 점프: 끔"
    InfJumpBtn.BackgroundColor3 = INF_JUMP and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(55, 55, 55)
end)

createSlider(MainTabFrame, "비행 속도 (Fly Speed)", 10, 200, 50, function(v) FLY_SPEED = v end)
createSlider(MainTabFrame, "이동 속도 (WalkSpeed)", 16, 250, 16, function(v) WALK_SPEED = v end)

-- [ UI 배치 - 전투 기능 탭 ]
local DropdownLabel = Instance.new("TextLabel", PlayerTabFrame)
DropdownLabel.Size = UDim2.new(1, 0, 0, 15) DropdownLabel.Text = "타겟 플레이어 선택:" DropdownLabel.TextColor3 = Color3.fromRGB(210, 210, 210) DropdownLabel.BackgroundTransparency = 1 DropdownLabel.Font = Enum.Font.SourceSans DropdownLabel.TextXAlignment = Enum.TextXAlignment.Left

local DropdownBtn = Instance.new("TextButton", PlayerTabFrame)
DropdownBtn.Size = UDim2.new(1, 0, 0, 30) DropdownBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) DropdownBtn.Text = "--- 대상 선택 ---" DropdownBtn.TextColor3 = Color3.fromRGB(255, 255, 255) DropdownBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", DropdownBtn).CornerRadius = UDim.new(0, 4)

local DropdownList = Instance.new("ScrollingFrame", PlayerTabFrame)
DropdownList.Size = UDim2.new(1, 0, 0, 95) DropdownList.BackgroundColor3 = Color3.fromRGB(30, 30, 30) DropdownList.Visible = false DropdownList.ScrollBarThickness = 4 local dListLayout = Instance.new("UIListLayout", DropdownList) dListLayout.SortOrder = Enum.SortOrder.LayoutOrder
DropdownBtn.MouseButton1Click:Connect(function() DropdownList.Visible = not DropdownList.Visible end)

local ModeBtn = Instance.new("TextButton", PlayerTabFrame)
ModeBtn.Size = UDim2.new(1, 0, 0, 30) ModeBtn.BackgroundColor3 = Color3.fromRGB(50, 40, 60) ModeBtn.Text = "게임 모드: 1v1 (개인전)" ModeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) ModeBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", ModeBtn).CornerRadius = UDim.new(0, 4)
ModeBtn.MouseButton1Click:Connect(function()
    if GameMode == "1v1 (개인전)" then GameMode = "팀전" ModeBtn.Text = "게임 모드: 팀전 (팀 필터링)" else GameMode = "1v1 (개인전)" ModeBtn.Text = "게임 모드: 1v1 (개인전)" end
end)

local CombatRow1 = createGridWrapper(PlayerTabFrame)

local OnceTpBtn = Instance.new("TextButton", CombatRow1)
OnceTpBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) OnceTpBtn.Text = "한번 TP" OnceTpBtn.TextColor3 = Color3.fromRGB(255, 255, 255) OnceTpBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", OnceTpBtn).CornerRadius = UDim.new(0, 6)
OnceTpBtn.MouseButton1Click:Connect(function() if targetPlayerName ~= "" and targetPlayerName ~= "--- 대상 선택 ---" then teleportToPlayer(targetPlayerName) end end)

local LoopTpBtn = Instance.new("TextButton", CombatRow1)
LoopTpBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) LoopTpBtn.Text = "루프 TP: 끔" LoopTpBtn.TextColor3 = Color3.fromRGB(255, 255, 255) LoopTpBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", LoopTpBtn).CornerRadius = UDim.new(0, 6)
LoopTpBtn.MouseButton1Click:Connect(function()
	if loopTeleportActive then
		loopTeleportActive = false LoopTpBtn.Text = "루프 TP: 끔" LoopTpBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
		if loopTeleportConn then loopTeleportConn:Disconnect() loopTeleportConn = nil end
	else
		if targetPlayerName ~= "" and targetPlayerName ~= "--- 대상 선택 ---" then
			loopTeleportActive = true LoopTpBtn.Text = "루프 TP: 쾀" LoopTpBtn.BackgroundColor3 = Color3.fromRGB(0, 180, 100)
			loopTeleportConn = RunService.Heartbeat:Connect(function() if loopTeleportActive and targetPlayerName ~= "" then teleportToPlayer(targetPlayerName) end end)
		end
	end
end)

local CombatRow2 = createGridWrapper(PlayerTabFrame)

local InfTpBtn = Instance.new("TextButton", CombatRow2)
InfTpBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) InfTpBtn.Text = "무한 TP: 끔" InfTpBtn.TextColor3 = Color3.fromRGB(255, 255, 255) InfTpBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", InfTpBtn).CornerRadius = UDim.new(0, 6)
InfTpBtn.MouseButton1Click:Connect(function()
    TpInfiniteActive = not TpInfiniteActive InfTpBtn.Text = TpInfiniteActive and "무한 TP: 쾀" or "무한 TP: 끔" InfTpBtn.BackgroundColor3 = TpInfiniteActive and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(60, 60, 60)
end)

local EspBtn = Instance.new("TextButton", CombatRow2)
EspBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) EspBtn.Text = "ESP: 끔" EspBtn.TextColor3 = Color3.fromRGB(255, 255, 255) EspBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", EspBtn).CornerRadius = UDim.new(0, 6)
EspBtn.MouseButton1Click:Connect(function()
	ESP_ENABLED = not ESP_ENABLED EspBtn.Text = ESP_ENABLED and "ESP: 쾀" or "ESP: 끔" EspBtn.BackgroundColor3 = ESP_ENABLED and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(60, 60, 60)
end)

local CombatRow3 = createGridWrapper(PlayerTabFrame)

local AimBtn = Instance.new("TextButton", CombatRow3)
AimBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) AimBtn.Text = "에임봇: 끔" AimBtn.TextColor3 = Color3.fromRGB(255, 255, 255) AimBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", AimBtn).CornerRadius = UDim.new(0, 6)
AimBtn.MouseButton1Click:Connect(function()
	AIMBOT_ENABLED = not AIMBOT_ENABLED AimBtn.Text = AIMBOT_ENABLED and "에임봇: 쾀" or "에임봇: 끔" AimBtn.BackgroundColor3 = AIMBOT_ENABLED and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(60, 60, 60)
end)

local TriggerBtn = Instance.new("TextButton", CombatRow3)
TriggerBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) TriggerBtn.Text = "트리거봇: 끔" TriggerBtn.TextColor3 = Color3.fromRGB(255, 255, 255) TriggerBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", TriggerBtn).CornerRadius = UDim.new(0, 6)
TriggerBtn.MouseButton1Click:Connect(function()
	TRIGGER_ENABLED = not TRIGGER_ENABLED TriggerBtn.Text = TRIGGER_ENABLED and "트리거봇: 쾀" or "트리거봇: 끔" TriggerBtn.BackgroundColor3 = TRIGGER_ENABLED and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(60, 60, 60)
end)

local CombatRow4 = createGridWrapper(PlayerTabFrame)

local RageBtn = Instance.new("TextButton", CombatRow4)
RageBtn.BackgroundColor3 = Color3.fromRGB(130, 40, 40) RageBtn.Text = "레이지봇: 끔" RageBtn.TextColor3 = Color3.fromRGB(255, 255, 255) RageBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", RageBtn).CornerRadius = UDim.new(0, 6)
RageBtn.MouseButton1Click:Connect(function()
    RAGE_ENABLED = not RAGE_ENABLED RageBtn.Text = RAGE_ENABLED and "레이지봇: 쾀" or "레이지봇: 끔" RageBtn.BackgroundColor3 = RAGE_ENABLED and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(130, 40, 40)
end)

local SilentBtn = Instance.new("TextButton", CombatRow4)
SilentBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) SilentBtn.Text = "사일런트 에임: 끔" SilentBtn.TextColor3 = Color3.fromRGB(255, 255, 255) SilentBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", SilentBtn).CornerRadius = UDim.new(0, 6)
SilentBtn.MouseButton1Click:Connect(function()
    SILENT_AIM_ENABLED = not SILENT_AIM_ENABLED SilentBtn.Text = SILENT_AIM_ENABLED and "사일런트 에임: 쾀" or "사일런트 에임: 끔" SilentBtn.BackgroundColor3 = SILENT_AIM_ENABLED and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(60, 60, 60)
end)

local FireRateToggleBtn = Instance.new("TextButton", PlayerTabFrame)
FireRateToggleBtn.Size = UDim2.new(1, 0, 0, 35) FireRateToggleBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) FireRateToggleBtn.Text = "무기 연사 속도 무제한 (-5): 끔" FireRateToggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255) FireRateToggleBtn.Font = Enum.Font.SourceSansBold Instance.new("UICorner", FireRateToggleBtn).CornerRadius = UDim.new(0, 6)
FireRateToggleBtn.MouseButton1Click:Connect(function()
    FIRE_RATE_ENABLED = not FIRE_RATE_ENABLED FireRateToggleBtn.Text = FIRE_RATE_ENABLED and "무기 연사 속도 무제한 (-5): 쾀" or "무기 연사 속도 무제한 (-5): 끔" FireRateToggleBtn.BackgroundColor3 = FIRE_RATE_ENABLED and Color3.fromRGB(0, 180, 100) or Color3.fromRGB(60, 60, 60) applyFireRate()
end)

createSlider(PlayerTabFrame, "에임봇 조준 범위 (FOV)", 10, 500, 150, function(v) FOV_RADIUS = v end)

-- 플레이어 드롭다운 리빌드 엔진
local function rebuildDropdown()
	for _, child in ipairs(DropdownList:GetChildren()) do if child:IsA("TextButton") then child:Destroy() end end
	local validPlayers = {}
	for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then table.insert(validPlayers, p) end end
	DropdownList.CanvasSize = UDim2.new(0, 0, 0, #validPlayers * 25)
	for _, p in ipairs(validPlayers) do
		local pBtn = Instance.new("TextButton", DropdownList)
		pBtn.Size = UDim2.new(1, 0, 0, 25) pBtn.BackgroundTransparency = 1 pBtn.Text = p.DisplayName .. " (@" .. p.Name .. ")" pBtn.TextColor3 = Color3.fromRGB(220, 220, 220) pBtn.TextSize = 12 pBtn.Font = Enum.Font.SourceSans
		pBtn.MouseButton1Click:Connect(function() targetPlayerName = p.Name DropdownBtn.Text = p.DisplayName DropdownList.Visible = false end)
	end
end

task.spawn(function() while true do rebuildDropdown() task.wait(3) end end)
Players.PlayerAdded:Connect(rebuildDropdown) Players.PlayerRemoving:Connect(rebuildDropdown)

LocalPlayer.CharacterAdded:Connect(function(newCharacter)
	newCharacter:WaitForChild("Humanoid") task.wait(0.5)
	if FLYING then FLYING = false toggleFly() end
end)

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: