local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
local Teams = game:GetService("Teams")
local AWFolder = ReplicatedStorage:WaitForChild("AW Tacticals")
local SoHFolder = ReplicatedStorage:WaitForChild("SoH Tacticals")
local spawnSets = {
A = {
AW = Workspace:WaitForChild("AWSpawnsA"),
SoH = Workspace:WaitForChild("SoHSpawnsA"),
Players = Workspace:WaitForChild("PlayerTeamSpawns"),
},
B = {
AW = Workspace:WaitForChild("AWSpawnsB"),
SoH = Workspace:WaitForChild("SoHSpawnsB"),
Players = Workspace:WaitForChild("PlayerTeamSpawns"),
},
C = {
AW = Workspace:WaitForChild("AWSpawnsC"),
SoH = Workspace:WaitForChild("SoHSpawnsC"),
Players = Workspace:WaitForChild("PlayerTeamSpawns"),
},
}
local RESPAWN_INTERVAL = 10
local MIN_AW = 10
local MIN_SOH = 10
local currentPoint = "A"
local function getAliveCount(namePattern)
local count = 0
for _, npc in ipairs(Workspace:GetDescendants()) do
if npc:IsA("Model") and npc:FindFirstChild("Humanoid") and npc.Name:match(namePattern) then
count += 1
end
end
return count
end
local function getRandomTemplate(folder)
local models = folder:GetChildren()
if #models == 0 then return nil end
return models[math.random(1, #models)]
end
local function spawnNPC(folder, templateFolder, namePattern, numToSpawn)
local spawnPoints = folder:GetChildren()
if #spawnPoints == 0 then return end
for i = 1, numToSpawn do
local template = getRandomTemplate(templateFolder)
local spawnPoint = spawnPoints[math.random(1, #spawnPoints)]
if template and spawnPoint then
local clone = template:Clone()
if clone.PrimaryPart then
clone:SetPrimaryPartCFrame(spawnPoint.CFrame + Vector3.new(0, 2, 0))
clone.Parent = Workspace
end
end
end
end
local function updatePlayerSpawns(pointKey)
local playerSpawns = Workspace:WaitForChild("PlayerTeamSpawns")
print("Updating player spawns to point:", pointKey)
for _, folder in ipairs(playerSpawns:GetChildren()) do
if folder:IsA("Folder") then
local isActive = folder.Name:sub(-1) == pointKey
print(string.format(" Folder: %s, Active: %s", folder.Name, tostring(isActive)))
for _, spawn in ipairs(folder:GetChildren()) do
if spawn:IsA("SpawnLocation") then
spawn.Enabled = isActive
end
end
end
end
end
local function setActivePoint(pointKey)
if not spawnSets[pointKey] then
warn("Invalid control point:", pointKey)
return
end
currentPoint = pointKey
print("Active point is now:", pointKey)
updatePlayerSpawns(pointKey)
end
task.spawn(function()
while true do
local awCount = getAliveCount("Arctic Wolf")
local sohCount = getAliveCount("SonsOfHorus")
local active = spawnSets[currentPoint]
if awCount < MIN_AW then
spawnNPC(active.AW, AWFolder, "Arctic Wolf", MIN_AW - awCount)
end
if sohCount < MIN_SOH then
spawnNPC(active.SoH, SoHFolder, "SonsOfHorus", MIN_SOH - sohCount)
end
task.wait(RESPAWN_INTERVAL)
end
end)
local PointChangedEvent = ReplicatedStorage:WaitForChild("PointChanged")
PointChangedEvent.Event:Connect(function(pointKey)
print("PointChanged fired with:", pointKey)
setActivePoint(pointKey)
end)
setActivePoint("A")