-- LocalScript for Delta Executor local Players = game:GetService("Players") local PathfindingService = game:GetService("PathfindingService") local ChatService = game:GetService("Chat") local HttpService = game:GetService("HttpService") local TextChatService = game:GetService("TextChatService") local LocalPlayer = Players.LocalPlayer local TARGET_USERNAME = "bacon0974210" local DISPLAY_NAME = "Baconhair Friend" -- Configuration local WANDER_RADIUS = 10 local FOLLOW_DISTANCE = 10 local TELEPORT_DISTANCE = 120 -- 1. Get UserId local targetUserId = pcall(function() return Players:GetUserIdFromNameAsync(TARGET_USERNAME) end) and Players:GetUserIdFromNameAsync(TARGET_USERNAME) or 1 -- 2. Load Morph Model local model = Players:CreateHumanoidModelFromUserId(targetUserId) model.Name = TARGET_USERNAME local npcHumanoid = model:WaitForChild("Humanoid") npcHumanoid.DisplayName = DISPLAY_NAME npcHumanoid:SetStateEnabled(Enum.HumanoidStateType.Climbing, true) npcHumanoid:SetStateEnabled(Enum.HumanoidStateType.Swimming, true) local character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local playerRoot = character:WaitForChild("HumanoidRootPart") model:PivotTo(playerRoot.CFrame * CFrame.new(0, 0, -5)) model.Parent = workspace local npcRoot = model:WaitForChild("HumanoidRootPart") local head = model:WaitForChild("Head") -------------------------------------------------------------------------------- -- DIRECT RESPONSIVE AI CHAT ENGINE (NO RANDOM CHATTING) -------------------------------------------------------------------------------- local isThinking = false local function speak(text) task.spawn(function() if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then local generalChannel = TextChatService.TextChannels:FindFirstChild("RBXGeneral") if generalChannel then generalChannel:DisplaySystemMessage("[" .. DISPLAY_NAME .. "]: " .. text) end end pcall(function() ChatService:Chat(head, text, Enum.ChatColor.White) end) end) end -- AI Response Generator Triggered EXCLUSIVELY by Player Chat local function generateAIResponse(userMessage) if isThinking then return end isThinking = true speak("...") -- Thinking bubble local systemPrompt = "You are " .. DISPLAY_NAME .. ", a faithful companion in Roblox exploring games with your friend. Answer concisely (1 sentence) like a real player. Direct, helpful, and natural." local requestFunc = (syn and syn.request) or (http and http.request) or http_request or (fluxus and fluxus.request) or request if requestFunc then task.spawn(function() local success, response = pcall(function() return requestFunc({ Url = "https://text.pollinations.ai/" .. HttpService:UrlEncode(systemPrompt .. " Friend says: " .. userMessage), Method = "GET" }) end) isThinking = false if success and response and response.Body and #response.Body > 0 then local aiReply = response.Body:gsub("\n", " "):sub(1, 100) speak(aiReply) else speak("I'm right here with you.") end end) else task.wait(0.5) isThinking = false speak("I hear you! I'm right behind you.") end end -- Binds ONLY to your local messages LocalPlayer.Chatted:Connect(function(msg) generateAIResponse(msg) end) -------------------------------------------------------------------------------- -- DEFAULT ROBLOX R6 ANIMATION ENGINE -------------------------------------------------------------------------------- task.spawn(function() local myChar = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local animateScript = myChar:FindFirstChild("Animate") if animateScript then local clonedAnimate = animateScript:Clone() clonedAnimate.Parent = model clonedAnimate.Disabled = false end end) -------------------------------------------------------------------------------- -- NAVIGATION & AI LOOP -------------------------------------------------------------------------------- local pathfindingArgs = { AgentRadius = 2.5, AgentHeight = 5, AgentCanJump = true, AgentCanClimb = true, WaypointSpacing = 4, Costs = { Water = 1, Climb = 1 } } local function moveSmartTo(targetPosition) local path = PathfindingService:CreatePath(pathfindingArgs) local success = pcall(function() path:ComputeAsync(npcRoot.Position, targetPosition) end) if success and path.Status == Enum.PathStatus.Success then local waypoints = path:GetWaypoints() for index, waypoint in ipairs(waypoints) do local currentDist = (npcRoot.Position - playerRoot.Position).Magnitude if currentDist >= TELEPORT_DISTANCE then break end if index % 5 == 0 then local updatedDist = (targetPosition - playerRoot.Position).Magnitude if updatedDist > 10 then break end end if waypoint.Action == Enum.PathWaypointAction.Jump then npcHumanoid.Jump = true end npcHumanoid:MoveTo(waypoint.Position) local reached = npcHumanoid.MoveToFinished:Wait(1.5) if not reached then npcHumanoid.Jump = true break end end else npcHumanoid:MoveTo(targetPosition) end end local function getRandomPoint(centerPos) local offsetX = math.random(-WANDER_RADIUS, WANDER_RADIUS) local offsetZ = math.random(-WANDER_RADIUS, WANDER_RADIUS) return centerPos + Vector3.new(offsetX, 0, offsetZ) end -- Main Movement Loop (Purely Silent Navigation) task.spawn(function() while model and model.Parent do task.wait(0.2) local myChar = LocalPlayer.Character if not myChar or not myChar:FindFirstChild("HumanoidRootPart") then continue end playerRoot = myChar.HumanoidRootPart local distance = (npcRoot.Position - playerRoot.Position).Magnitude if distance >= TELEPORT_DISTANCE then model:PivotTo(playerRoot.CFrame * CFrame.new(2, 0, 2)) elseif distance > FOLLOW_DISTANCE then moveSmartTo(playerRoot.Position) else if math.random(1, 100) > 85 then local wanderPoint = getRandomPoint(playerRoot.Position) moveSmartTo(wanderPoint) task.wait(math.random(1, 2)) end end end end)