-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] local TargetMode = 1 -- ^ This customizable config makes both Friendly and Enemy Newell's teapots teleport to a certain enemy or thing. As of right now this config has 6 options, those being: 1 = closest enemy, 2 = farthest enemy, 3 = weakest enemy, 4 = strongest enemy, 5 = random enemy, and lastly 6 = enemy base. local PrimaryTargets = {} -- ^ An optional list you can add enemies to for both Friendly and Enemy Newell to target, making their teapots teleport to the chosen enemy/ies. Leave ({}) blank to disable. THIS CONFIG TAKES PRIORITY OVER TARGET MODE! local IgnoreTargets = {} -- ^ An optional list you can add enemies to for both Friendly and Enemy Newell to ignore, making their teapots not teleport to the chosen enemy/ies. Leave ({}) blank to disable. THIS CONFIG TAKES PRIORITY OVER TARGET MODE! -- DO NOT ADD ANYTHING IN EITHER OF THESE TWO BRACKETS BELOW, THEY ARE THERE TO CREATE SETS FOR INSTANT LOOKUPS TO PREVENT THE ENGINE FROM CRASHING. DO NOT CONFUSE THEM FOR THEIR CONFIG COUNTERPARTS. local primarySet = {} local ignoreSet = {} local function updateTargetSets() table.clear(primarySet) table.clear(ignoreSet) for _, name in ipairs(PrimaryTargets) do primarySet[name] = true end for _, name in ipairs(IgnoreTargets) do ignoreSet[name] = true end end updateTargetSets() local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local npcFolder = Workspace:WaitForChild("NPCFolders") local enemyFolder = npcFolder:WaitForChild("EnemyFolder") local baseFolder = npcFolder:WaitForChild("BaseFolder") local projectileFolder = Workspace:WaitForChild("Projectile") local pendingTeapots = {} local activeTeapots = {} local lockedToBase = {} local bodyAngularList = {} local bodyVelocityList = {} local TeapotVelocity = Vector3.new(0, 0, -200) local function removeTouchInterest(descendant) if descendant and descendant:IsA("TouchInterest") then descendant:Destroy() end end local function getTargetNPC(fromPosition) if TargetMode ~= 1 and TargetMode ~= 2 and TargetMode ~= 3 and TargetMode ~= 4 and TargetMode ~= 5 and TargetMode ~= 6 then TargetMode = 1 end local validTargets = {} local primaryFound = false for _, npc in ipairs(enemyFolder:GetChildren()) do if ignoreSet[npc.Name] then continue end local humanoid = npc:FindFirstChild("Humanoid") local root = npc:FindFirstChild("HumanoidRootPart") if humanoid and humanoid.Health > 0 and root then local isPrimary = primarySet[npc.Name] ~= nil if isPrimary then if not primaryFound then validTargets = {} primaryFound = true end table.insert(validTargets, npc) elseif not primaryFound then table.insert(validTargets, npc) end end end if #validTargets == 0 then return nil end if TargetMode == 6 and not primaryFound then return nil end local selectedNPC = nil if TargetMode == 2 then local farthestDistance = -1 for _, npc in ipairs(validTargets) do local distance = (npc.HumanoidRootPart.Position - fromPosition).Magnitude if distance > farthestDistance then farthestDistance = distance selectedNPC = npc end end elseif TargetMode == 3 then local minHealth = math.huge for _, npc in ipairs(validTargets) do local health = npc.Humanoid.Health if health < minHealth then minHealth = health selectedNPC = npc end end elseif TargetMode == 4 then local maxHealth = -1 for _, npc in ipairs(validTargets) do local health = npc.Humanoid.Health if health > maxHealth then maxHealth = health selectedNPC = npc end end elseif TargetMode == 5 then selectedNPC = validTargets[math.random(#validTargets)] else local closestDistance = math.huge for _, npc in ipairs(validTargets) do local distance = (npc.HumanoidRootPart.Position - fromPosition).Magnitude if distance < closestDistance then closestDistance = distance selectedNPC = npc end end end return selectedNPC end local function HandleTeapot(teapotPart) if not teapotPart:IsA("BasePart") then return end for _, desc in ipairs(teapotPart:GetDescendants()) do removeTouchInterest(desc) end teapotPart.Anchored = true table.insert(pendingTeapots, teapotPart) end task.spawn(function() while true do if #pendingTeapots > 0 then local teapot = table.remove(pendingTeapots, 1) if teapot and teapot.Parent then local bav = teapot:FindFirstChildOfClass("BodyAngularVelocity") if not bav then bav = Instance.new("BodyAngularVelocity") bav.MaxTorque = Vector3.new(1e6, 1e6, 1e6) bav.AngularVelocity = Vector3.new(0, 0, 0) bav.Parent = teapot end bodyAngularList[bav] = true local bv = teapot:FindFirstChildOfClass("BodyVelocity") if not bv then bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(1e6, 1e6, 1e6) bv.Velocity = TeapotVelocity bv.Parent = teapot end bodyVelocityList[bv] = true activeTeapots[teapot] = true task.wait(0.25) end else RunService.Heartbeat:Wait() end end end) for _, obj in ipairs(projectileFolder:GetChildren()) do if obj.Name:lower():find("teapot") then HandleTeapot(obj) end end projectileFolder.ChildAdded:Connect(function(child) if child.Name:lower():find("teapot") then HandleTeapot(child) end end) RunService.Heartbeat:Connect(function() local currentRedBase = baseFolder:FindFirstChild("Red Base") local currentHitbox = currentRedBase and currentRedBase:FindFirstChild("MainHitbox") for bav, _ in pairs(bodyAngularList) do if bav.Parent then bav.AngularVelocity = Vector3.new(0, 0, 0) else bodyAngularList[bav] = nil end end for bv, _ in pairs(bodyVelocityList) do if bv.Parent then bv.Velocity = TeapotVelocity else bodyVelocityList[bv] = nil end end for teapot, _ in pairs(activeTeapots) do if teapot.Parent then if lockedToBase[teapot] then if currentHitbox then teapot.CFrame = CFrame.new(currentHitbox.Position) end else local targetNPC = getTargetNPC(teapot.Position) if targetNPC then teapot.Anchored = true local root = targetNPC:FindFirstChild("HumanoidRootPart") if root then teapot.CFrame = CFrame.new(root.Position + Vector3.new(0, 1.5, -0.5)) end else lockedToBase[teapot] = true teapot.Anchored = true if currentHitbox then teapot.CFrame = CFrame.new(currentHitbox.Position) end end end else activeTeapots[teapot] = nil lockedToBase[teapot] = nil end end end)