do local Players=game:GetService("Players");local RunService=game:GetService("RunService");local UserInputService=game:GetService("UserInputService");local Camera=workspace.CurrentCamera;local Lighting=game:GetService("Lighting");local Player=Players.LocalPlayer;local Theme={BG=Color3.fromRGB(40,0,0),Title=Color3.fromRGB(80,0,0),Button=Color3.fromRGB(60,0,0),ButtonActive=Color3.fromRGB(0,80,0),ButtonInactive=Color3.fromRGB(80,0,0),Text=Color3.fromRGB(255,255,255),TextRed=Color3.fromRGB(255,100,100),TextGreen=Color3.fromRGB(100,255,100),TextBlue=Color3.fromRGB(100,100,255),Border=Color3.fromRGB(150,0,0),Accent=Color3.fromRGB(200,0,0)};local Announcement={Text="📢 交流群: q1051585956 | 📢 关注vvk哔站喵~",Color=Color3.fromRGB(255,200,0)};local Panel={Visible=true,ToggleKey=Enum.KeyCode.RightShift,gui=nil};local Aim={Enabled=true,Key=Enum.UserInputType.MouseButton2,FOV=120,ShowFOV=true,FOVColor=Color3.fromRGB(200,0,0),FOVColorR=200,FOVColorG=0,FOVColorB=0,Smoothness=0.4,AimDistance=1000,OffsetX=0,OffsetY=0,AimPart=1,WhitelistEnabled=false,Whitelist={},TeamCheckEnabled=false,AutoFire={Enabled=false,Delay=0.1,HoldKey=Enum.UserInputType.MouseButton2,OnlyWhenAimed=true,LastFireTime=0}};local PartNames={"头部","身体","腿部"};local PartPaths={{"Head"},{"Torso","UpperTorso","LowerTorso"},{"HumanoidRootPart"}};local Esp={Enabled=true,BoxColor=Color3.fromRGB(255,0,0),BoxThickness=2,BoxTransparency=0.4,ShowName=true,ShowDistance=true,ShowHealth=true,MaxDistance=1000,DrawDistance=true,ShowEnemies=true,ShowTeammates=false,EnemyColor=Color3.fromRGB(255,0,0),TeammateColor=Color3.fromRGB(0,255,0),ShowSkeleton=true,SkeletonColor=Color3.fromRGB(255,255,255),SkeletonThickness=2,SkeletonTransparency=0.3};local XRay={Enabled=false,Transparency=0.7};local NightVision={Enabled=false,Brightness=3,Ambient=Color3.fromRGB(100,100,100),FogEnd=8999999488,GlobalShadows=false};local Hitbox={Enabled=false,SizeMultiplier=2,ShowVisual=true,Transparency=0.5,Color=Color3.fromRGB(255,0,0),ModifyHead=true,ModifyBody=true,OriginalSizes={},VisualBoxes={}};local Move={SpeedEnabled=false,SpeedMultiplier=2,Walkspeed=16,FlightEnabled=false,FlightSpeed=50,FlightKey=Enum.KeyCode.Space,DescendKey=Enum.KeyCode.LeftControl,GravityEnabled=false,Gravity=196.2,InfiniteJumpEnabled=false,NoFallDamage={Enabled=false,Method=1,HealAmount=20},fallDamageConnection=nil,lastHealth=nil};local fovCircle=Drawing.new("Circle");local aimSmooth=Vector2.new(0,0);local currentAimTarget=nil;local EspObjects={};local SkeletonObjects={};local originalLighting={Brightness=Lighting.Brightness,Ambient=Lighting.Ambient,FogEnd=Lighting.FogEnd,GlobalShadows=Lighting.GlobalShadows};local isFlying=false;local bodyVelocity=nil;local bodyGyro=nil;local originalWalkspeed=16;local originalGravity=196.2;local infiniteJumpConnection=nil;fovCircle.Visible=Aim.ShowFOV;fovCircle.Color=Aim.FOVColor;fovCircle.Thickness=2;fovCircle.NumSides=64;fovCircle.Radius=Aim.FOV;fovCircle.Filled=false;fovCircle.Transparency=0.5;local function isAlive(p) if ( not p or not p.Character) then return false;end local h=p.Character:FindFirstChild("Humanoid");return h and (h.Health>0) ;end local function getCharacter() return Player.Character;end local function getHumanoid() local char=getCharacter();return char and char:FindFirstChild("Humanoid") ;end local function getRootPart() local char=getCharacter();return char and char:FindFirstChild("HumanoidRootPart") ;end local function safeDrawing(drawType) local success,drawing=pcall(function() return Drawing.new(drawType);end);return (success and drawing) or nil ;end local function isSameTeam(p1,p2) if ( not p1 or not p2) then return false;end if (p1.Team and p2.Team) then return p1.Team==p2.Team ;end if (p1.TeamColor and p2.TeamColor) then return p1.TeamColor==p2.TeamColor ;end return false;end local function isInWhitelist(player) if not Aim.WhitelistEnabled then return true;end if ( #Aim.Whitelist==0) then return false;end for _,name in ipairs(Aim.Whitelist) do if (player.Name==name) then return false;end end return true;end local function shouldIgnorePlayer(player) if not Aim.TeamCheckEnabled then return false;end return isSameTeam(Player,player);end local function getTargetPart(char) if not char then return nil;end local paths=PartPaths[Aim.AimPart];for _,path in ipairs(paths) do local part=char:FindFirstChild(path);if part then return part;end end return char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart") ;end local function getAimPoint(player) if ( not player or not player.Character) then return nil;end local part=getTargetPart(player.Character);if part then local pos,on=Camera:WorldToViewportPoint(part.Position);if on then return Vector2.new(pos.X,pos.Y) + Vector2.new(Aim.OffsetX,Aim.OffsetY) ;end end return nil;end local function findTarget() local mousePos=UserInputService:GetMouseLocation();local bestDist=Aim.FOV;local bestTarget=nil;local bestPlayer=nil;for _,p in ipairs(Players:GetPlayers()) do if ((p~=Player) and isAlive(p) and isInWhitelist(p) and not shouldIgnorePlayer(p)) then local screenPos=getAimPoint(p);if screenPos then local dist=(screenPos-mousePos).Magnitude;if (dist30) then delta=delta.Unit * 30 ;end aimSmooth=(aimSmooth * Aim.Smoothness) + (delta * (1 -Aim.Smoothness)) ;pcall(function() mousemoverel(aimSmooth.X,aimSmooth.Y);end);end local function autoFire() if not Aim.AutoFire.Enabled then return;end if Aim.AutoFire.HoldKey then if not UserInputService:IsMouseButtonPressed(Aim.AutoFire.HoldKey) then return;end end if (Aim.AutoFire.OnlyWhenAimed and not currentAimTarget) then return;end local now=tick();if ((now-Aim.AutoFire.LastFireTime)>=Aim.AutoFire.Delay) then pcall(function() mouse1click();end);Aim.AutoFire.LastFireTime=now;end end local function toggleWhitelist(playerName) local index=nil;for i,name in ipairs(Aim.Whitelist) do if (name==playerName) then index=i;break;end end if index then table.remove(Aim.Whitelist,index);print("❌ 已移除: " .. playerName );else table.insert(Aim.Whitelist,playerName);print("✅ 已添加: " .. playerName );end if updatePlayerList then updatePlayerList();end end local function getPlayerColor(player) if isSameTeam(Player,player) then return Esp.TeammateColor;else return Esp.EnemyColor;end end local function updateXRay() if XRay.Enabled then for _,v in ipairs(workspace:GetDescendants()) do pcall(function() if (v:IsA("BasePart") and (v.Transparency<0.5)) then v.Transparency=XRay.Transparency;end end);end else for _,v in ipairs(workspace:GetDescendants()) do pcall(function() if (v:IsA("BasePart") and (v.Transparency>0.5)) then v.Transparency=0;end end);end end end local function updateNightVision() if NightVision.Enabled then Lighting.Brightness=NightVision.Brightness;Lighting.Ambient=NightVision.Ambient;Lighting.FogEnd=NightVision.FogEnd;Lighting.GlobalShadows=NightVision.GlobalShadows;else Lighting.Brightness=originalLighting.Brightness;Lighting.Ambient=originalLighting.Ambient;Lighting.FogEnd=originalLighting.FogEnd;Lighting.GlobalShadows=originalLighting.GlobalShadows;end end local function getCharacterSize(character) if not character then return 5,8;end local root=character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("Torso") ;if not root then return 5,8;end local minY,maxY=math.huge, -math.huge;local maxRadius=0;for _,part in ipairs(character:GetChildren()) do if (part:IsA("BasePart") and part.Parent) then local size=part.Size;local pos=part.Position;minY=math.min(minY,pos.Y-(size.Y/2) );maxY=math.max(maxY,pos.Y + (size.Y/2) );local horizontalSize=math.max(size.X,size.Z)/2 ;local partCenter=Vector2.new(pos.X,pos.Z);local rootCenter=Vector2.new(root.Position.X,root.Position.Z);local distanceFromRoot=(partCenter-rootCenter).Magnitude;maxRadius=math.max(maxRadius,distanceFromRoot + horizontalSize );end end if ((minY~=math.huge) and (maxY~= -math.huge) and (maxRadius>0)) then return maxRadius * 2 ,maxY-minY ;end return 5,8;end local function getBoneParts(character) local bones={};local boneNames={"Head","UpperTorso","Torso","LowerTorso","LeftUpperArm","RightUpperArm","LeftUpperLeg","RightUpperLeg","HumanoidRootPart"};for _,name in ipairs(boneNames) do local part=character:FindFirstChild(name);if (part and part:IsA("BasePart")) then table.insert(bones,part);end end return bones;end local function getBoneConnections(bones) local connections={};for i=1, #bones do for j=i + 1 , #bones do local dist=(bones[i].Position-bones[j].Position).Magnitude;if (dist<4) then table.insert(connections,{bones[i],bones[j]});end end end return connections;end local function createSkeletonForPlayer(player) if ( not player or (player==Player)) then return;end local function addSkeletonToChar(char) if not char then return;end if SkeletonObjects[player] then for _,line in ipairs(SkeletonObjects[player].lines) do pcall(function() line:Remove();end);end SkeletonObjects[player]=nil;end local bones=getBoneParts(char);local connections=getBoneConnections(bones);local lines={};for i=1, #connections do local line=safeDrawing("Line");if line then line.Visible=false;line.Thickness=Esp.SkeletonThickness;line.Color=Esp.SkeletonColor;line.Transparency=Esp.SkeletonTransparency;table.insert(lines,line);end end SkeletonObjects[player]={lines=lines,connections=connections,bones=bones,player=player};end if player.Character then addSkeletonToChar(player.Character);end player.CharacterAdded:Connect(function(char) task.wait(0.5);addSkeletonToChar(char);end);end local function updateSkeleton() if not Esp.ShowSkeleton then return;end for player,skeleton in pairs(SkeletonObjects) do pcall(function() if not isAlive(player) then for _,line in ipairs(skeleton.lines) do pcall(function() line:Remove();end);end SkeletonObjects[player]=nil;return;end local isTeam=isSameTeam(Player,player);if (( not isTeam and not Esp.ShowEnemies) or (isTeam and not Esp.ShowTeammates)) then for _,line in ipairs(skeleton.lines) do if line then line.Visible=false;end end return;end local char=player.Character;if not char then return;end local bones=getBoneParts(char);local connections=getBoneConnections(bones);for i,conn in ipairs(connections) do local line=skeleton.lines[i];if line then local fromPos,fromOn=Camera:WorldToViewportPoint(conn[1].Position);local toPos,toOn=Camera:WorldToViewportPoint(conn[2].Position);if (fromOn and toOn) then line.Visible=true;line.From=Vector2.new(fromPos.X,fromPos.Y);line.To=Vector2.new(toPos.X,toPos.Y);else line.Visible=false;end end end end);end end local function createEsp(player) if (player==Player) then return;end local function addEspToChar(char) if not char then return;end local root=char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") ;if not root then return;end if EspObjects[player] then if EspObjects[player].box then EspObjects[player].box:Remove();end if EspObjects[player].nameText then EspObjects[player].nameText:Remove();end if EspObjects[player].distText then EspObjects[player].distText:Remove();end if EspObjects[player].healthBar then EspObjects[player].healthBar:Remove();end if EspObjects[player].healthFill then EspObjects[player].healthFill:Remove();end if EspObjects[player].healthText then EspObjects[player].healthText:Remove();end EspObjects[player]=nil;end local box=safeDrawing("Square");if not box then return;end box.Visible=false;box.Color=getPlayerColor(player);box.Thickness=Esp.BoxThickness;box.Transparency=Esp.BoxTransparency;box.Filled=false;local nameText=nil;if Esp.ShowName then nameText=safeDrawing("Text");if nameText then nameText.Visible=false;nameText.Color=Color3.new(1,1,1);nameText.Size=13;nameText.Center=true;nameText.Outline=true;end end local distText=nil;if Esp.ShowDistance then distText=safeDrawing("Text");if distText then distText.Visible=false;distText.Color=Color3.fromRGB(100,255,100);distText.Size=11;distText.Center=true;distText.Outline=true;end end local healthBar=nil;local healthFill=nil;local healthText=nil;if Esp.ShowHealth then healthBar=safeDrawing("Square");if healthBar then healthBar.Visible=false;healthBar.Color=Color3.fromRGB(50,50,50);healthBar.Thickness=1;healthBar.Filled=true;end healthFill=safeDrawing("Square");if healthFill then healthFill.Visible=false;healthFill.Thickness=1;healthFill.Filled=true;end healthText=safeDrawing("Text");if healthText then healthText.Visible=false;healthText.Color=Color3.new(1,1,1);healthText.Size=10;healthText.Center=true;healthText.Outline=true;end end EspObjects[player]={box=box,nameText=nameText,distText=distText,healthBar=healthBar,healthFill=healthFill,healthText=healthText,root=root,player=player,lastSeen=tick()};end if player.Character then addEspToChar(player.Character);end player.CharacterAdded:Connect(function(char) task.wait(0.5);addEspToChar(char);end);end local function updateEsp() for player,esp in pairs(EspObjects) do pcall(function() if esp.box then esp.box.Visible=false;end if esp.nameText then esp.nameText.Visible=false;end if esp.distText then esp.distText.Visible=false;end if esp.healthBar then esp.healthBar.Visible=false;end if esp.healthFill then esp.healthFill.Visible=false;end if esp.healthText then esp.healthText.Visible=false;end if not isAlive(player) then return;end if not Esp.Enabled then return;end local isTeam=isSameTeam(Player,player);if ( not isTeam and not Esp.ShowEnemies) then return;end if (isTeam and not Esp.ShowTeammates) then return;end local char=player.Character;local root=char and (char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso")) ;if not root then return;end esp.root=root;local dist=(Camera.CFrame.Position-root.Position).Magnitude;if (dist>Esp.MaxDistance) then return;end local pos,onScreen=Camera:WorldToViewportPoint(root.Position);if not onScreen then return;end if esp.box then esp.box.Color=getPlayerColor(player);end local widthMeters,heightMeters=getCharacterSize(char);local viewportHeight=Camera.ViewportSize.Y;local fov=Camera.FieldOfView;local tanFov=math.tan(math.rad(fov/2 ));local boxWidth=(widthMeters * viewportHeight)/(2 * dist * tanFov) ;local boxHeight=(heightMeters * viewportHeight)/(2 * dist * tanFov) ;boxWidth=math.max(boxWidth,10);boxHeight=math.max(boxHeight,15);local boxX=pos.X-(boxWidth/2) ;local boxY=pos.Y-(boxHeight/2) ;if esp.box then esp.box.Visible=true;esp.box.Position=Vector2.new(boxX,boxY);esp.box.Size=Vector2.new(boxWidth,boxHeight);end if (Esp.ShowName and esp.nameText) then esp.nameText.Visible=true;esp.nameText.Position=Vector2.new(pos.X,boxY-16 );esp.nameText.Text=player.Name;end if (Esp.ShowDistance and esp.distText) then esp.distText.Visible=true;esp.distText.Position=Vector2.new(pos.X,boxY + boxHeight + 4 );if Esp.DrawDistance then esp.distText.Text=math.floor(dist) .. "m" ;else esp.distText.Text=math.floor(dist) .. "m" ;end if (dist<50) then esp.distText.Color=Color3.fromRGB(255,100,100);elseif (dist<150) then esp.distText.Color=Color3.fromRGB(255,255,100);else esp.distText.Color=Color3.fromRGB(100,255,100);end end if (Esp.ShowHealth and esp.healthBar and esp.healthFill) then local humanoid=char:FindFirstChild("Humanoid");if humanoid then local health=humanoid.Health;local maxHealth=humanoid.MaxHealth;local healthPercent=health/maxHealth ;local barWidth=4;local barX=(boxX-barWidth) -2 ;local barY=boxY;esp.healthBar.Visible=true;esp.healthBar.Position=Vector2.new(barX,barY);esp.healthBar.Size=Vector2.new(barWidth,boxHeight);local fillHeight=boxHeight * healthPercent ;esp.healthFill.Visible=true;if (healthPercent>0.6) then esp.healthFill.Color=Color3.fromRGB(100,255,100);elseif (healthPercent>0.3) then esp.healthFill.Color=Color3.fromRGB(255,255,100);else esp.healthFill.Color=Color3.fromRGB(255,100,100);end esp.healthFill.Position=Vector2.new(barX,(barY + boxHeight) -fillHeight );esp.healthFill.Size=Vector2.new(barWidth,fillHeight);if esp.healthText then esp.healthText.Visible=true;esp.healthText.Position=Vector2.new(barX-20 ,(barY + (boxHeight/2)) -5 );esp.healthText.Text=math.floor(health) .. "/" .. math.floor(maxHealth) ;end end end end);end end local function cleanupEsp() for player,esp in pairs(EspObjects) do if not isAlive(player) then pcall(function() if esp.box then esp.box:Remove();end if esp.nameText then esp.nameText:Remove();end if esp.distText then esp.distText:Remove();end if esp.healthBar then esp.healthBar:Remove();end if esp.healthFill then esp.healthFill:Remove();end if esp.healthText then esp.healthText:Remove();end EspObjects[player]=nil;end);end end end local function getTargetPartsForHitbox(character) local parts={};if Hitbox.ModifyHead then local head=character:FindFirstChild("Head");if (head and head:IsA("BasePart")) then table.insert(parts,head);end end if Hitbox.ModifyBody then local bodyParts={"UpperTorso","LowerTorso","Torso","HumanoidRootPart"};for _,partName in ipairs(bodyParts) do local part=character:FindFirstChild(partName);if (part and part:IsA("BasePart")) then table.insert(parts,part);end end end return parts;end local function createHitboxVisual(player,part) if ( not part or not part.Parent) then return;end if Hitbox.VisualBoxes[part] then pcall(function() Hitbox.VisualBoxes[part]:Destroy();end);Hitbox.VisualBoxes[part]=nil;end local billboard=Instance.new("BillboardGui");billboard.Name="HitboxVisual_" .. player.Name ;billboard.Adornee=part;billboard.Size=UDim2.new(1,0,1,0);billboard.StudsOffset=Vector3.new(0,0,0);billboard.AlwaysOnTop=true;billboard.Parent=part;local frame=Instance.new("Frame",billboard);frame.Size=UDim2.new(1,0,1,0);frame.BackgroundTransparency=1;frame.BorderSizePixel=0;local outline=Instance.new("Frame",frame);outline.Size=UDim2.new(1,0,1,0);outline.BackgroundTransparency=1;outline.BorderColor3=Hitbox.Color;outline.BorderSizePixel=3;Hitbox.VisualBoxes[part]=billboard;end local function removeAllHitboxVisuals() for part,billboard in pairs(Hitbox.VisualBoxes) do pcall(function() if billboard then billboard:Destroy();end end);end Hitbox.VisualBoxes={};end local function applyHitboxToPlayer(player) if ( not player or not player.Character or not Hitbox.Enabled) then return;end if (player==Player) then return;end local char=player.Character;if not Hitbox.OriginalSizes[player] then Hitbox.OriginalSizes[player]={};end local targetParts=getTargetPartsForHitbox(char);for _,part in ipairs(targetParts) do if not Hitbox.OriginalSizes[player][part] then Hitbox.OriginalSizes[player][part]=part.Size;end part.Size=Hitbox.OriginalSizes[player][part] * Hitbox.SizeMultiplier ;if Hitbox.ShowVisual then createHitboxVisual(player,part);end part.Transparency=Hitbox.Transparency;end end local function revertHitboxForPlayer(player) if ( not player or not player.Character) then return;end if Hitbox.OriginalSizes[player] then for part,originalSize in pairs(Hitbox.OriginalSizes[player]) do if (part and part.Parent) then part.Size=originalSize;part.Transparency=0;end end Hitbox.OriginalSizes[player]=nil;end if player.Character then for _,part in ipairs(player.Character:GetChildren()) do if part:IsA("BasePart") then if Hitbox.VisualBoxes[part] then pcall(function() Hitbox.VisualBoxes[part]:Destroy();end);Hitbox.VisualBoxes[part]=nil;end end end end end local function applyHitboxToAll() if not Hitbox.Enabled then return;end for _,player in ipairs(Players:GetPlayers()) do if (player~=Player) then applyHitboxToPlayer(player);end end end local function revertHitboxForAll() for _,player in ipairs(Players:GetPlayers()) do if (player~=Player) then revertHitboxForPlayer(player);end end removeAllHitboxVisuals();end local function updateSpeed() local humanoid=getHumanoid();if not humanoid then return;end if Move.SpeedEnabled then humanoid.WalkSpeed=Move.Walkspeed * Move.SpeedMultiplier ;else humanoid.WalkSpeed=Move.Walkspeed;end end local function updateGravity() if Move.GravityEnabled then workspace.Gravity=Move.Gravity;else workspace.Gravity=originalGravity;end end local function updateInfiniteJump() if Move.InfiniteJumpEnabled then if not infiniteJumpConnection then infiniteJumpConnection=UserInputService.InputBegan:Connect(function(input,gameProcessed) if gameProcessed then return;end if (input.KeyCode==Enum.KeyCode.Space) then local humanoid=getHumanoid();if humanoid then humanoid:ChangeState(Enum.HumanoidStateType.Jumping);end end end);end elseif infiniteJumpConnection then infiniteJumpConnection:Disconnect();infiniteJumpConnection=nil;end end local function enableNoFallDamage() if not Move.NoFallDamage.Enabled then return;end local humanoid=getHumanoid();if not humanoid then return;end if Move.fallDamageConnection then Move.fallDamageConnection:Disconnect();Move.fallDamageConnection=nil;end Move.fallDamageConnection=humanoid:GetPropertyChangedSignal("Health"):Connect(function() if not Move.NoFallDamage.Enabled then return;end local currentHealth=humanoid.Health;local lastHealth=Move.lastHealth or currentHealth ;if ((currentHealth10) then humanoid.Health=lastHealth;end end Move.lastHealth=humanoid.Health;end);end local function resetNoFallDamage() task.wait(0.5);if Move.NoFallDamage.Enabled then enableNoFallDamage();end end local function startFlight() local char=getCharacter();local root=getRootPart();local humanoid=getHumanoid();if ( not char or not root or not humanoid) then return;end if isFlying then if bodyVelocity then bodyVelocity:Destroy();end if bodyGyro then bodyGyro:Destroy();end bodyVelocity=nil;bodyGyro=nil;humanoid.PlatformStand=false;isFlying=false;return;end humanoid.PlatformStand=true;bodyVelocity=Instance.new("BodyVelocity");bodyVelocity.MaxForce=Vector3.new(4000,4000,4000);bodyVelocity.Velocity=Vector3.new(0,0,0);bodyVelocity.Parent=root;bodyGyro=Instance.new("BodyGyro");bodyGyro.MaxTorque=Vector3.new(4000,4000,4000);bodyGyro.P=1000;bodyGyro.D=50;bodyGyro.CFrame=root.CFrame;bodyGyro.Parent=root;isFlying=true;end local function updateFlight() if ( not isFlying or not bodyVelocity) then return;end local root=getRootPart();if not root then return;end local camera=workspace.CurrentCamera;local moveDirection=Vector3.new(0,0,0);if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDirection=moveDirection + camera.CFrame.LookVector ;end if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDirection=moveDirection-camera.CFrame.LookVector ;end if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDirection=moveDirection-camera.CFrame.RightVector ;end if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDirection=moveDirection + camera.CFrame.RightVector ;end if UserInputService:IsKeyDown(Move.FlightKey) then moveDirection=moveDirection + Vector3.new(0,1,0) ;end if UserInputService:IsKeyDown(Move.DescendKey) then moveDirection=moveDirection + Vector3.new(0, -1,0) ;end if (moveDirection.Magnitude>0) then bodyVelocity.Velocity=moveDirection.Unit * Move.FlightSpeed ;else bodyVelocity.Velocity=Vector3.new(0,0,0);end if bodyGyro then bodyGyro.CFrame=CFrame.new(root.Position,root.Position + camera.CFrame.LookVector );end end UserInputService.InputBegan:Connect(function(input,gameProcessed) if gameProcessed then return;end if (input.KeyCode==Enum.KeyCode.F) then if Move.FlightEnabled then startFlight();end end if (input.KeyCode==Enum.KeyCode.RightShift) then Panel.Visible= not Panel.Visible;if Panel.gui then Panel.gui.Enabled=Panel.Visible;end end end);Player.CharacterAdded:Connect(function(char) task.wait(0.5);if isFlying then isFlying=false;bodyVelocity=nil;bodyGyro=nil;end updateSpeed();updateGravity();resetNoFallDamage();if Hitbox.Enabled then applyHitboxToAll();end end);Players.PlayerAdded:Connect(function(p) createEsp(p);createSkeletonForPlayer(p);task.wait(0.5);if updatePlayerList then updatePlayerList();end end);Players.PlayerRemoving:Connect(function(p) if EspObjects[p] then pcall(function() if EspObjects[p].box then EspObjects[p].box:Remove();end if EspObjects[p].nameText then EspObjects[p].nameText:Remove();end if EspObjects[p].distText then EspObjects[p].distText:Remove();end if EspObjects[p].healthBar then EspObjects[p].healthBar:Remove();end if EspObjects[p].healthFill then EspObjects[p].healthFill:Remove();end if EspObjects[p].healthText then EspObjects[p].healthText:Remove();end EspObjects[p]=nil;end);end if SkeletonObjects[p] then for _,line in ipairs(SkeletonObjects[p].lines) do pcall(function() line:Remove();end);end SkeletonObjects[p]=nil;end if Hitbox.Enabled then revertHitboxForPlayer(p);end if updatePlayerList then updatePlayerList();end end);local playerGui=Player:WaitForChild("PlayerGui",10);if not playerGui then warn("❌ 无法获取PlayerGui");return;end Panel.gui=Instance.new("ScreenGui");Panel.gui.Name="A通用";Panel.gui.ResetOnSpawn=false;Panel.gui.Parent=playerGui;Panel.gui.Enabled=Panel.Visible;local main=Instance.new("Frame",Panel.gui);main.Size=UDim2.new(0,400,0,750);main.Position=UDim2.new(0.5, -200,0.5, -375);main.BackgroundColor3=Theme.BG;main.BackgroundTransparency=0.1;main.Active=true;main.Draggable=true;main.BorderSizePixel=0;Instance.new("UICorner",main).CornerRadius=UDim.new(0,12);Instance.new("UIStroke",main).Color=Theme.Border;local titleBar=Instance.new("Frame",main);titleBar.Size=UDim2.new(1,0,0,45);titleBar.BackgroundColor3=Theme.Title;titleBar.BorderSizePixel=0;Instance.new("UICorner",titleBar).CornerRadius=UDim.new(0,12);local titleText=Instance.new("TextLabel",titleBar);titleText.Size=UDim2.new(1, -40,1,0);titleText.Position=UDim2.new(0,15,0,0);titleText.Text="🔥 A通用 by.vvk";titleText.TextColor3=Theme.Text;titleText.BackgroundTransparency=1;titleText.Font=Enum.Font.GothamBold;titleText.TextSize=20;titleText.TextXAlignment=Enum.TextXAlignment.Left;local closeBtn=Instance.new("TextButton",titleBar);closeBtn.Size=UDim2.new(0,28,0,28);closeBtn.Position=UDim2.new(1, -35,0,8);closeBtn.Text="✕";closeBtn.TextColor3=Theme.Text;closeBtn.BackgroundColor3=Theme.ButtonInactive;closeBtn.Font=Enum.Font.GothamBold;closeBtn.TextSize=16;closeBtn.BorderSizePixel=0;Instance.new("UICorner",closeBtn).CornerRadius=UDim.new(0,6);closeBtn.MouseButton1Click:Connect(function() Panel.Visible=false;Panel.gui.Enabled=false;end);local hotkeyHint=Instance.new("TextLabel",titleBar);hotkeyHint.Size=UDim2.new(0,150,0,15);hotkeyHint.Position=UDim2.new(0,15,1,5);hotkeyHint.Text="右Shift 开关面板";hotkeyHint.TextColor3=Theme.TextGreen;hotkeyHint.BackgroundTransparency=1;hotkeyHint.Font=Enum.Font.Gotham;hotkeyHint.TextSize=10;hotkeyHint.TextXAlignment=Enum.TextXAlignment.Left;local announceFrame=Instance.new("Frame",main);announceFrame.Size=UDim2.new(0.95,0,0,35);announceFrame.Position=UDim2.new(0.025,0,0,50);announceFrame.BackgroundColor3=Color3.fromRGB(20,20,20);announceFrame.BackgroundTransparency=0.2;Instance.new("UICorner",announceFrame).CornerRadius=UDim.new(0,6);local announceText=Instance.new("TextLabel",announceFrame);announceText.Size=UDim2.new(1, -10,1,0);announceText.Position=UDim2.new(0.5,0,0.5,0);announceText.AnchorPoint=Vector2.new(0.5,0.5);announceText.Text=Announcement.Text;announceText.TextColor3=Announcement.Color;announceText.BackgroundTransparency=1;announceText.Font=Enum.Font.GothamBold;announceText.TextSize=12;announceText.TextScaled=false;announceText.TextWrapped=true;local container=Instance.new("ScrollingFrame",main);container.Size=UDim2.new(0.95,0,0.86, -95);container.Position=UDim2.new(0.025,0,0,95);container.BackgroundTransparency=1;container.CanvasSize=UDim2.new(0,0,0,0);container.ScrollBarThickness=6;container.ScrollBarImageColor3=Theme.Accent;container.BorderSizePixel=0;container.AutomaticCanvasSize=Enum.AutomaticSize.Y;local layout=Instance.new("UIListLayout",container);layout.Padding=UDim.new(0,12);layout.SortOrder=Enum.SortOrder.LayoutOrder;layout.HorizontalAlignment=Enum.HorizontalAlignment.Center;local aimCard=Instance.new("Frame",container);aimCard.Size=UDim2.new(1,0,0,650);aimCard.BackgroundColor3=Theme.BG;aimCard.BackgroundTransparency=0.3;Instance.new("UICorner",aimCard).CornerRadius=UDim.new(0,8);Instance.new("UIStroke",aimCard).Color=Theme.Border;local aimHeader=Instance.new("Frame",aimCard);aimHeader.Size=UDim2.new(1, -10,0,28);aimHeader.Position=UDim2.new(0,5,0,5);aimHeader.BackgroundColor3=Theme.Title;aimHeader.BackgroundTransparency=0.3;Instance.new("UICorner",aimHeader).CornerRadius=UDim.new(0,6);local aimHeaderText=Instance.new("TextLabel",aimHeader);aimHeaderText.Size=UDim2.new(1, -5,1,0);aimHeaderText.Position=UDim2.new(0,5,0,0);aimHeaderText.Text="🎯 自瞄模块";aimHeaderText.TextColor3=Theme.Text;aimHeaderText.BackgroundTransparency=1;aimHeaderText.Font=Enum.Font.GothamBold;aimHeaderText.TextSize=14;aimHeaderText.TextXAlignment=Enum.TextXAlignment.Left;local aimY=38;local aimBtn=Instance.new("TextButton",aimCard);aimBtn.Size=UDim2.new(0.95,0,0,30);aimBtn.Position=UDim2.new(0.025,0,0,aimY);aimBtn.Text="自瞄开关: " .. ((Aim.Enabled and "开启") or "关闭") ;aimBtn.TextColor3=Theme.Text;aimBtn.BackgroundColor3=(Aim.Enabled and Theme.ButtonActive) or Theme.ButtonInactive ;aimBtn.Font=Enum.Font.GothamBold;aimBtn.TextSize=12;Instance.new("UICorner",aimBtn).CornerRadius=UDim.new(0,6);aimBtn.MouseButton1Click:Connect(function() Aim.Enabled= not Aim.Enabled;aimBtn.Text="自瞄开关: " .. ((Aim.Enabled and "开启") or "关闭") ;aimBtn.BackgroundColor3=(Aim.Enabled and Theme.ButtonActive) or Theme.ButtonInactive ;end);aimY=aimY + 35 ;local autoFireBtn=Instance.new("TextButton",aimCard);autoFireBtn.Size=UDim2.new(0.95,0,0,30);autoFireBtn.Position=UDim2.new(0.025,0,0,aimY);autoFireBtn.Text="自动开火: " .. ((Aim.AutoFire.Enabled and "开启") or "关闭") ;autoFireBtn.TextColor3=Theme.Text;autoFireBtn.BackgroundColor3=(Aim.AutoFire.Enabled and Theme.ButtonActive) or Theme.ButtonInactive ;autoFireBtn.Font=Enum.Font.GothamBold;autoFireBtn.TextSize=12;Instance.new("UICorner",autoFireBtn).CornerRadius=UDim.new(0,6);autoFireBtn.MouseButton1Click:Connect(function() Aim.AutoFire.Enabled= not Aim.AutoFire.Enabled;autoFireBtn.Text="自动开火: " .. ((Aim.AutoFire.Enabled and "开启") or "关闭") ;autoFireBtn.BackgroundColor3=(Aim.AutoFire.Enabled and Theme.ButtonActive) or Theme.ButtonInactive ;end);aimY=aimY + 35 ;local fireDelaySlider=Instance.new("Frame",aimCard);fireDelaySlider.Size=UDim2.new(0.95,0,0,45);fireDelaySlider.Position=UDim2.new(0.025,0,0,aimY);fireDelaySlider.BackgroundTransparency=1;local fireDelayLabel=Instance.new("TextLabel",fireDelaySlider);fireDelayLabel.Size=UDim2.new(1,0,0,18);fireDelayLabel.Text="射击间隔: " .. (Aim.AutoFire.Delay * 1000) .. "ms" ;fireDelayLabel.TextColor3=Theme.Text;fireDelayLabel.BackgroundTransparency=1;fireDelayLabel.Font=Enum.Font.GothamBold;fireDelayLabel.TextSize=11;fireDelayLabel.TextXAlignment=Enum.TextXAlignment.Left;local fireDelayBarBg=Instance.new("Frame",fireDelaySlider);fireDelayBarBg.Size=UDim2.new(1,0,0,20);fireDelayBarBg.Position=UDim2.new(0,0,0,22);fireDelayBarBg.BackgroundColor3=Color3.fromRGB(50,50,50);fireDelayBarBg.BorderSizePixel=0;Instance.new("UICorner",fireDelayBarBg).CornerRadius=UDim.new(0,4);local fireDelayBarFill=Instance.new("Frame",fireDelayBarBg);fireDelayBarFill.Size=UDim2.new(Aim.AutoFire.Delay/0.5 ,0,1,0);fireDelayBarFill.BackgroundColor3=Theme.Accent;fireDelayBarFill.BorderSizePixel=0;Instance.new("UICorner",fireDelayBarFill).CornerRadius=UDim.new(0,4);local fireDelayValue=Instance.new("TextLabel",fireDelayBarBg);fireDelayValue.Size=UDim2.new(1,0,1,0);fireDelayValue.Text=(Aim.AutoFire.Delay * 1000) .. "ms" ;fireDelayValue.TextColor3=Theme.Text;fireDelayValue.BackgroundTransparency=1;fireDelayValue.Font=Enum.Font.GothamBold;fireDelayValue.TextSize=11;local dragging=false;fireDelayBarBg.InputBegan:Connect(function(input) if (input.UserInputType==Enum.UserInputType.MouseButton1) then dragging=true;end end);fireDelayBarBg.InputChanged:Connect(function(input) if ((input.UserInputType==Enum.UserInputType.MouseMovement) and dragging) then local mousePos=UserInputService:GetMouseLocation();local absPos=fireDelayBarBg.AbsolutePosition;local absSize=fireDelayBarBg.AbsoluteSize.X;local relativeX=math.clamp(mousePos.X-absPos.X ,0,absSize);local percent=relativeX/absSize ;local newValue=percent * 0.5 ;newValue=math.floor(newValue * 100 )/100 ;newValue=math.clamp(newValue,0.05,0.5);Aim.AutoFire.Delay=newValue;fireDelayLabel.Text="射击间隔: " .. (Aim.AutoFire.Delay * 1000) .. "ms" ;fireDelayValue.Text=(Aim.AutoFire.Delay * 1000) .. "ms" ;fireDelayBarFill.Size=UDim2.new(Aim.AutoFire.Delay/0.5 ,0,1,0);end end);fireDelayBarBg.InputEnded:Connect(function(input) if (input.UserInputType==Enum.UserInputType.MouseButton1) then dragging=false;end end);aimY=aimY + 50 ;local partFrame=Instance.new("Frame",aimCard);partFrame.Size=UDim2.new(0.95,0,0,30);partFrame.Position=UDim2.new(0.025,0,0,aimY);partFrame.BackgroundTransparency=1;local partLabel=Instance.new("TextLabel",partFrame);partLabel.Size=UDim2.new(0.6,0,1,0);partLabel.Text="瞄准部位: " .. PartNames[Aim.AimPart] ;partLabel.TextColor3=Theme.Text;partLabel.BackgroundTransparency=1;partLabel.Font=Enum.Font.GothamBold;partLabel.TextSize=12;partLabel.TextXAlignment=Enum.TextXAlignment.Left;local partBtn=Instance.new("TextButton",partFrame);partBtn.Size=UDim2.new(0.35,0,1,0);partBtn.Position=UDim2.new(0.65,0,0,0);partBtn.Text="切换";partBtn.TextColor3=Theme.Text;partBtn.BackgroundColor3=Theme.Button;partBtn.Font=Enum.Font.GothamBold;partBtn.TextSize=12;Instance.new("UICorner",partBtn).CornerRadius=UDim.new(0,6);partBtn.MouseButton1Click:Connect(function() Aim.AimPart=Aim.AimPart + 1 ;if (Aim.AimPart> #PartNames) then Aim.AimPart=1;end partLabel.Text="瞄准部位: " .. PartNames[Aim.AimPart] ;end);aimY=aimY + 35 ;local wlBtn=Instance.new("TextButton",aimCard);wlBtn.Size=UDim2.new(0.95,0,0,30);wlBtn.Position=UDim2.new(0.025,0,0,aimY);wlBtn.Text="白名单模式: " .. ((Aim.WhitelistEnabled and "开启") or "关闭") ;wlBtn.TextColor3=Theme.Text;wlBtn.BackgroundColor3=(Aim.WhitelistEnabled and Theme.ButtonActive) or Theme.ButtonInactive ;wlBtn.Font=Enum.Font.GothamBold;wlBtn.TextSize=12;Instance.new("UICorner",wlBtn).CornerRadius=UDim.new(0,6);wlBtn.MouseButton1Click:Connect(function() Aim.WhitelistEnabled= not Aim.WhitelistEnabled;wlBtn.Text="白名单模式: " .. ((Aim.WhitelistEnabled and "开启") or "关闭") ;wlBtn.BackgroundColor3=(Aim.WhitelistEnabled and Theme.ButtonActive) or Theme.ButtonInactive ;updatePlayerList();end);aimY=aimY + 35 ;local teamBtn=Instance.new("TextButton",aimCard);teamBtn.Size=UDim2.new(0.95,0,0,30);teamBtn.Position=UDim2.new(0.025,0,0,aimY);teamBtn.Text="队伍检测: " .. ((Aim.TeamCheckEnabled and "开启") or "关闭") ;teamBtn.TextColor3=Theme.Text;teamBtn.BackgroundColor3=(Aim.TeamCheckEnabled and Theme.ButtonActive) or Theme.ButtonInactive ;teamBtn.Font=Enum.Font.GothamBold;teamBtn.TextSize=12;Instance.new("UICorner",teamBtn).CornerRadius=UDim.new(0,6);teamBtn.MouseButton1Click:Connect(function() Aim.TeamCheckEnabled= not Aim.TeamCheckEnabled;teamBtn.Text="队伍检测: " .. ((Aim.TeamCheckEnabled and "开启") or "关闭") ;teamBtn.BackgroundColor3=(Aim.TeamCheckEnabled and Theme.ButtonActive) or Theme.ButtonInactive ;end);aimY=aimY + 35 ;local listTitle=Instance.new("TextLabel",aimCard);listTitle.Size=UDim2.new(0.95,0,0,22);listTitle.Position=UDim2.new(0.025,0,0,aimY);listTitle.Text="📋 玩家列表 (点击添加/移除白名单)";listTitle.TextColor3=Theme.Accent;listTitle.BackgroundColor3=Theme.BG;listTitle.BackgroundTransparency=0.5;listTitle.Font=Enum.Font.GothamBold;listTitle.TextSize=11;Instance.new("UICorner",listTitle).CornerRadius=UDim.new(0,4);aimY=aimY + 27 ;local playerListContainer=Instance.new("Frame",aimCard);playerListContainer.Size=UDim2.new(0.95,0,0,120);playerListContainer.Position=UDim2.new(0.025,0,0,aimY);playerListContainer.BackgroundColor3=Color3.fromRGB(20,20,20);playerListContainer.BackgroundTransparency=0.3;Instance.new("UICorner",playerListContainer).CornerRadius=UDim.new(0,4);local playerList=Instance.new("ScrollingFrame",playerListContainer);playerList.Size=UDim2.new(1, -10,1, -10);playerList.Position=UDim2.new(0,5,0,5);playerList.BackgroundTransparency=1;playerList.CanvasSize=UDim2.new(0,0,2,0);playerList.ScrollBarThickness=4;playerList.ScrollBarImageColor3=Theme.Accent;playerList.BorderSizePixel=0;local playerListLayout=Instance.new("UIListLayout",playerList);playerListLayout.Padding=UDim.new(0,3);playerListLayout.SortOrder=Enum.SortOrder.Name;function updatePlayerList() for _,child in ipairs(playerList:GetChildren()) do if child:IsA("TextButton") then child:Destroy();end end local playerCount=0;local sortedPlayers={};for _,p in ipairs(Players:GetPlayers()) do if (p~=Player) then table.insert(sortedPlayers,p);playerCount=playerCount + 1 ;end end table.sort(sortedPlayers,function(a,b) return a.Name