Steps
- Select the model
- Put it in the ServerStorage folder
- Make a server script - put it inside a ServerScriptService folder
--! strict
local CONFIG = {
EnemyModel = "Zombie",
EnemiesFolder = "Enemies",
SpawnArea = workspace.Baseplate,
MinSpawnTime = 2,
MaxSpawnTime = 5,
MaxEnemies = 20,
}
local ServerStorage = game:GetService("ServerStorage")
local EnemyModel = ServerStorage:WaitForChild(CONFIG.EnemiesFolder):WaitForChild(CONFIG.EnemyModel)
local function getRandomPosition()
local area = CONFIG.SpawnArea
local size = area.Size
local position = area.Position
local x = position.X + math.random(-size.X / 2, size.X / 2)
local z = position.Z + math.random(-size.Z / 2, size.Z / 2)
-- Spawn slightly above the area
return Vector3.new(x, position.Y + 5, z)
end
local function spawnEnemy()
local enemy = EnemyModel:Clone()
enemy:PivotTo(CFrame.new(getRandomPosition()))
enemy.Parent = workspace.Enemies
task.wait(math.random(CONFIG.MinSpawnTime, CONFIG.MaxSpawnTime))
end
local function main()
while true do
-- prepare enemiesFolder
local enemiesFolder = workspace:FindFirstChild("Enemies")
if not enemiesFolder then
enemiesFolder = Instance.new("Folder")
enemiesFolder.Name = "Enemies"
enemiesFolder.Parent = workspace
end
if #enemiesFolder:GetChildren() < CONFIG.MaxEnemies then
spawnEnemy()
end
end
end
main()