local Players = game:GetService("Players") local player = Players.LocalPlayer local RunService = game:GetService("RunService") local camera = workspace.CurrentCamera local npcFolder = Instance.new("Folder", workspace) npcFolder.Name = "SpawnedNPCs" -- UI Setup local gui = Instance.new("ScreenGui", player:WaitForChild("PlayerGui")) gui.Name = "NPCSpawnerUI" local frame = Instance.new("Frame", gui) frame.Size = UDim2.new(0, 250, 0, 200) frame.Position = UDim2.new(0, 20, 0, 100) frame.BackgroundColor3 = Color3.fromRGB(0, 0, 0) frame.BorderSizePixel = 2 local nameBox = Instance.new("TextBox", frame) nameBox.Size = UDim2.new(1, -20, 0, 30) nameBox.Position = UDim2.new(0, 10, 0, 10) nameBox.PlaceholderText = "Enter NPC name" nameBox.TextColor3 = Color3.new(1, 1, 1) nameBox.BackgroundColor3 = Color3.new(0.2, 0.2, 0.2) local genderLabel = Instance.new("TextLabel", frame) genderLabel.Size = UDim2.new(0.5, -15, 0, 20) genderLabel.Position = UDim2.new(0, 10, 0, 50) genderLabel.Text = "Gender:" genderLabel.TextColor3 = Color3.new(1, 1, 1) genderLabel.BackgroundTransparency = 1 genderLabel.TextXAlignment = Enum.TextXAlignment.Left local genderSelect = Instance.new("TextButton", frame) genderSelect.Size = UDim2.new(0.5, -15, 0, 30) genderSelect.Position = UDim2.new(0.5, 5, 0, 45) genderSelect.Text = "Boy" genderSelect.TextColor3 = Color3.new(1, 1, 1) genderSelect.BackgroundColor3 = Color3.new(0.3, 0.3, 0.3) local function toggleGender() genderSelect.Text = genderSelect.Text == "Boy" and "Girl" or "Boy" end genderSelect.MouseButton1Click:Connect(toggleGender) local spawnBtn = Instance.new("TextButton", frame) spawnBtn.Size = UDim2.new(1, -20, 0, 30) spawnBtn.Position = UDim2.new(0, 10, 0, 85) spawnBtn.Text = "Spawn NPC" spawnBtn.TextColor3 = Color3.new(1, 1, 1) spawnBtn.BackgroundColor3 = Color3.new(0.2, 0.5, 0.2) local clearBtn = Instance.new("TextButton", frame) clearBtn.Size = UDim2.new(1, -20, 0, 30) clearBtn.Position = UDim2.new(0, 10, 0, 125) clearBtn.Text = "Clear NPCs" clearBtn.TextColor3 = Color3.new(1, 1, 1) clearBtn.BackgroundColor3 = Color3.new(0.5, 0.2, 0.2) local toggleBtn = Instance.new("TextButton", gui) toggleBtn.Size = UDim2.new(0, 100, 0, 40) toggleBtn.Position = UDim2.new(0, 20, 0, 60) toggleBtn.Text = "Toggle UI" toggleBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 50) toggleBtn.TextColor3 = Color3.new(1, 1, 1) toggleBtn.MouseButton1Click:Connect(function() frame.Visible = not frame.Visible end) clearBtn.MouseButton1Click:Connect(function() for _, npc in pairs(npcFolder:GetChildren()) do npc:Destroy() end end) -- Helper functions local function createPart(name, size, color, cframe, parent) local part = Instance.new("Part") part.Name = name part.Size = size part.CFrame = cframe part.Anchored = false part.CanCollide = true part.BrickColor = BrickColor.new(color) part.TopSurface = Enum.SurfaceType.Smooth part.BottomSurface = Enum.SurfaceType.Smooth part.Parent = parent return part end local function weld(part0, part1) local weld = Instance.new("WeldConstraint") weld.Part0 = part0 weld.Part1 = part1 weld.Parent = part0 end -- ESP Name local function addBillboard(part, text) local bb = Instance.new("BillboardGui", part) bb.Size = UDim2.new(0, 200, 0, 30) bb.AlwaysOnTop = true bb.Adornee = part local label = Instance.new("TextLabel", bb) label.Size = UDim2.new(1, 0, 1, 0) label.BackgroundTransparency = 1 label.TextColor3 = Color3.new(1, 1, 1) label.TextStrokeTransparency = 0 label.Font = Enum.Font.SourceSansBold label.TextScaled = true label.Text = text end -- Hair Part local function createHair(gender, head) local hair = Instance.new("Part") hair.Size = gender == "Boy" and Vector3.new(2, 1, 2) or Vector3.new(2.5, 1.5, 2.5) hair.BrickColor = BrickColor.new(gender == "Boy" and "Reddish brown" or "Hot pink") hair.Anchored = false hair.CanCollide = false hair.Name = "Hair" hair.CFrame = head.CFrame * CFrame.new(0, 0.6, 0) hair.Parent = head.Parent weld(head, hair) end -- Spawn NPC local function spawnNPC() local nameText = nameBox.Text ~= "" and nameBox.Text or "NPC" local gender = genderSelect.Text local model = Instance.new("Model", npcFolder) model.Name = nameText local spawnPos = player.Character and player.Character:FindFirstChild("HumanoidRootPart") and player.Character.HumanoidRootPart.Position or Vector3.new(0, 5, 0) local basePos = spawnPos + Vector3.new(5, 3, 0) local torso = createPart("Torso", Vector3.new(2, 2, 1), "Bright blue", CFrame.new(basePos), model) local head = createPart("Head", Vector3.new(2, 1, 2), "Bright yellow", torso.CFrame * CFrame.new(0, 1.5, 0), model) local lArm = createPart("LeftArm", Vector3.new(1, 2, 1), "Bright green", torso.CFrame * CFrame.new(-1.5, 0, 0), model) local rArm = createPart("RightArm", Vector3.new(1, 2, 1), "Bright green", torso.CFrame * CFrame.new(1.5, 0, 0), model) local lLeg = createPart("LeftLeg", Vector3.new(1, 2, 1), "Bright red", torso.CFrame * CFrame.new(-0.5, -2, 0), model) local rLeg = createPart("RightLeg", Vector3.new(1, 2, 1), "Bright red", torso.CFrame * CFrame.new(0.5, -2, 0), model) local hum = Instance.new("Humanoid", model) weld(torso, head) weld(torso, lArm) weld(torso, rArm) weld(torso, lLeg) weld(torso, rLeg) createHair(gender, head) addBillboard(head, nameText) model.PrimaryPart = torso model:SetPrimaryPartCFrame(CFrame.new(basePos)) -- Movement loop task.spawn(function() while model and model.Parent do local moveTo = torso.Position + Vector3.new(math.random(-10, 10), 0, math.random(-10, 10)) hum:MoveTo(moveTo) hum.MoveToFinished:Wait() task.wait(1) end end) end spawnBtn.MouseButton1Click:Connect(spawnNPC)