if game.PlaceId ~= 10834586502 then return end getgenv().ProjectileAuraConfig = getgenv().ProjectileAuraConfig or {} local Config = getgenv().ProjectileAuraConfig Config.TargetMode = Config.TargetMode or 4 -- What this thing does is change the way it targets enemies, 1 for Closest, 2 for Farthest, 3 for Weakest, 4 for strongest and 5 for random Config.IHATEYOUSOMUCH = Config.IHATEYOUSOMUCH or { Enabled = true, -- I hate these enemies so much, but if you wanna aggro other enemies add them, or if you don't want to aggro any specific enemy at all set this to false Betty = true, Warhead = true } Config.Theseshouldntbetargettedimo = Config.Theseshouldntbetargettedimo or { Enabled = true, -- i think that if you target bloodhorn but there is just Newell to attack the bloodhorn well its pretty much ggs, you can set this to false or add more enemies to ignore Punishment = true, Bloodhorn = true } if getgenv().ProjectileAuraLoaded then return end getgenv().ProjectileAuraLoaded = true local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local NPCFolders = Workspace:WaitForChild("NPCFolders") local EnemyFolder = NPCFolders:WaitForChild("EnemyFolder") local ProjectileFolder = Workspace:WaitForChild("Projectile") local block local timerRemaining = 0 local UNFREEZE_TIMER = 0.8 local isActive = false local frozen = {} local trackedProjectiles = {} local function ShouldIgnoreEnemy(Enemy) if not Config.Theseshouldntbetargettedimo.Enabled then return false end return Config.Theseshouldntbetargettedimo[Enemy.Name] end local function GetCharacterRoot() local Character = LocalPlayer.Character if not Character then return nil end return Character:FindFirstChild("HumanoidRootPart") end local function GetAllValidEnemies() local ValidEnemies = {} for _, Enemy in ipairs(EnemyFolder:GetChildren()) do if not ShouldIgnoreEnemy(Enemy) then local Humanoid = Enemy:FindFirstChild("Humanoid") local RootPart = Enemy:FindFirstChild("HumanoidRootPart") if Humanoid and Humanoid.Health > 0 and RootPart then table.insert(ValidEnemies, Enemy) end end end return ValidEnemies end local function GetMainTarget() if Config.IHATEYOUSOMUCH.Enabled then for _, Enemy in ipairs(EnemyFolder:GetChildren()) do if Config.IHATEYOUSOMUCH[Enemy.Name] then local Humanoid = Enemy:FindFirstChild("Humanoid") if Humanoid and Humanoid.Health > 0 then return Enemy end end end end local ValidEnemies = GetAllValidEnemies() if #ValidEnemies <= 0 then return nil end local CharacterRoot = GetCharacterRoot() if Config.TargetMode == 1 and CharacterRoot then local ClosestEnemy = nil local ClosestDistance = math.huge for _, Enemy in ipairs(ValidEnemies) do local RootPart = Enemy:FindFirstChild("HumanoidRootPart") if RootPart then local Distance = (CharacterRoot.Position - RootPart.Position).Magnitude if Distance < ClosestDistance then ClosestDistance = Distance ClosestEnemy = Enemy end end end return ClosestEnemy end if Config.TargetMode == 2 and CharacterRoot then local FarthestEnemy = nil local FarthestDistance = -math.huge for _, Enemy in ipairs(ValidEnemies) do local RootPart = Enemy:FindFirstChild("HumanoidRootPart") if RootPart then local Distance = (CharacterRoot.Position - RootPart.Position).Magnitude if Distance > FarthestDistance then FarthestDistance = Distance FarthestEnemy = Enemy end end end return FarthestEnemy end if Config.TargetMode == 3 then local WeakestEnemy = nil local LowestHealth = math.huge for _, Enemy in ipairs(ValidEnemies) do local Humanoid = Enemy:FindFirstChild("Humanoid") if Humanoid and Humanoid.Health < LowestHealth then LowestHealth = Humanoid.Health WeakestEnemy = Enemy end end return WeakestEnemy end if Config.TargetMode == 4 then local StrongestEnemy = nil local HighestHealth = -math.huge for _, Enemy in ipairs(ValidEnemies) do local Humanoid = Enemy:FindFirstChild("Humanoid") if Humanoid and Humanoid.Health > HighestHealth then HighestHealth = Humanoid.Health StrongestEnemy = Enemy end end return StrongestEnemy end if Config.TargetMode == 5 then return ValidEnemies[math.random(1, #ValidEnemies)] end return ValidEnemies[1] end local function createBlock() if block and block.Parent then return block end block = Instance.new("Part") block.Name = "Block of Doom" block.Anchored = true block.CanCollide = false block.CanTouch = false block.CanQuery = false block.Transparency = 1 block.Size = Vector3.new(6, 6, 6) block.CFrame = CFrame.new(0, -0.250244379, 1.2336266) block.Parent = Workspace return block end local function getOffset(index) local perLayer = 5 local layer = math.floor((index - 1) / perLayer) local pos = (index - 1) % perLayer local angle = (pos / perLayer) * math.pi * 2 local horizontalRadius = 0.22 local x = math.cos(angle) * horizontalRadius local z = math.sin(angle) * horizontalRadius local y = layer * 2.5 return Vector3.new(x, y, z) end local function teleportAllFists() if not block or not block.Parent then return end for _, v in ipairs(ProjectileFolder:GetChildren()) do if v:IsA("BasePart") and (v.Name == "StoneFist" or v.Name == "Teapot" or v.Name == "FireTeapot") then v.CFrame = block.CFrame v.AssemblyLinearVelocity = Vector3.zero v.AssemblyAngularVelocity = Vector3.zero end end end local function gatherEnemies() if not block or not block.Parent then return end local enemies = {} for _, npc in ipairs(EnemyFolder:GetChildren()) do local root = npc:FindFirstChild("HumanoidRootPart") local hum = npc:FindFirstChildOfClass("Humanoid") if root and hum and hum.Health > 0 and not ShouldIgnoreEnemy(npc) then table.insert(enemies, npc) end end for i, npc in ipairs(enemies) do local root = npc:FindFirstChild("HumanoidRootPart") if not root then continue end if not frozen[npc] then frozen[npc] = root.CFrame end root.CFrame = block.CFrame * CFrame.new(getOffset(i)) root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero end end local function keepIgnoredEnemiesAway() if not block or not block.Parent then return end for _, npc in ipairs(EnemyFolder:GetChildren()) do if ShouldIgnoreEnemy(npc) then local root = npc:FindFirstChild("HumanoidRootPart") local hum = npc:FindFirstChild("Humanoid") if root and hum and hum.Health > 0 then local distToBlock = (root.Position - block.Position).Magnitude if distToBlock < 15 then local direction = (root.Position - block.Position).Unit root.CFrame = CFrame.new(block.Position + direction * 20) * CFrame.fromMatrix(Vector3.new(), root.CFrame.RightVector, root.CFrame.UpVector) end end end end end local function releaseEnemies() for npc, originalCFrame in pairs(frozen) do if npc and npc.Parent then local root = npc:FindFirstChild("HumanoidRootPart") if root then root.CFrame = originalCFrame root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero end end end table.clear(frozen) end local function activate() createBlock() timerRemaining = UNFREEZE_TIMER isActive = true end local function SetupProjectile(Projectile) Projectile.CanCollide = false Projectile.CanTouch = true Projectile.Massless = true Projectile.Transparency = 1 Projectile.AssemblyLinearVelocity = Vector3.zero Projectile.AssemblyAngularVelocity = Vector3.zero end local function TeleportProjectile(Projectile, TargetRoot) Projectile.CFrame = TargetRoot.CFrame Projectile.AssemblyLinearVelocity = Vector3.zero Projectile.AssemblyAngularVelocity = Vector3.zero end local function IsEnemyFreezeProjectile(Projectile) return Projectile.Name == "StoneFist" or Projectile.Name == "Teapot" or Projectile.Name == "FireTeapot" end local function IsTargetOnlyProjectile(Projectile) return Projectile.Name == "Superball" or Projectile.Name == "Pellet" or Projectile.Name == "Soccerball" end local function IsValidProjectile(Projectile) return IsEnemyFreezeProjectile(Projectile) or IsTargetOnlyProjectile(Projectile) end local function resize(obj) if obj:IsA("BasePart") then obj.Size = Vector3.new(0.000001, 0.000001, 0.000001) elseif obj:IsA("Model") then for _, d in ipairs(obj:GetDescendants()) do if d:IsA("BasePart") then d.Size = Vector3.new(0.000001, 0.000001, 0.000001) end end end end for _, v in ipairs(ProjectileFolder:GetChildren()) do if v:IsA("BasePart") then if IsEnemyFreezeProjectile(v) then activate() end if IsValidProjectile(v) then SetupProjectile(v) if IsTargetOnlyProjectile(v) then resize(v) trackedProjectiles[v] = true end end end end ProjectileFolder.ChildAdded:Connect(function(child) if child:IsA("BasePart") then if IsEnemyFreezeProjectile(child) then activate() end if IsValidProjectile(child) then SetupProjectile(child) if IsTargetOnlyProjectile(child) then resize(child) task.wait() trackedProjectiles[child] = true end end end end) RunService.Heartbeat:Connect(function(dt) if isActive then timerRemaining -= dt teleportAllFists() gatherEnemies() keepIgnoredEnemiesAway() if timerRemaining <= 0 then releaseEnemies() isActive = false timerRemaining = 0 end end local TargetEnemy = GetMainTarget() if TargetEnemy then local TargetRoot = TargetEnemy:FindFirstChild("HumanoidRootPart") if TargetRoot then for obj in pairs(trackedProjectiles) do if not obj or not obj.Parent then trackedProjectiles[obj] = nil elseif obj:IsA("BasePart") then TeleportProjectile(obj, TargetRoot) end end end end end) script.AncestryChanged:Connect(function(_, parent) if parent == nil then releaseEnemies() if block and block.Parent then block:Destroy() end table.clear(trackedProjectiles) end end)