Добраться до базы
Урок 3 из 18 курса Игра в Roblox: башенная защита на Coddy.
Враг, добравшийся до конца пути, наносит урон базе. Здоровье базы должно храниться на сервере, но оно будет отображаться на экране каждого игрока, поэтому храните его как атрибут рабочей области: атрибут, установленный на сервере, виден каждому клиенту.
workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20damageBase(amount) уменьшает его, но не ниже 0 (math.max). После последной контрольной точки враг вызывает эту функцию и покидает игру с помощью Destroy.
Задание
Легко- После сортировки путевых точек установи атрибут workspace
BaseHealthравнымSettings.BaseHealth. - Напиши
damageBase(amount), которая уменьшаетBaseHealthнаamount, но не ниже 0. - В конце
walkPath, после последней путевой точки, вызовиdamageBase(1)и уничтожь врага.
Нажми Play, затем Check.
Попробуйте сами
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local enemies = workspace.Enemies
print("The base can take " .. Settings.BaseHealth .. " hits")
-- Промежуточные точки пути по порядку (они названы 1, 2, 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
return tonumber(a.Name) < tonumber(b.Name)
end)
-- Каждый игрок получает Money в таблице лидеров
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local money = Instance.new("IntValue")
money.Name = "Money"
money.Value = Settings.StartMoney
money.Parent = leaderstats
end)
-- Провести врага по пути. MoveTo прекращает попытку через 8 секунд и сообщает об этом
-- (MoveToFinished со значением false), поэтому медленному врагу снова задаётся цель, пока он не доберётся.
local function walkPath(enemy)
local humanoid = enemy.Humanoid
for i = 2, #waypoints do
repeat
humanoid:MoveTo(waypoints[i].Position)
until humanoid.MoveToFinished:Wait() or not enemy.Parent
if not enemy.Parent then
return
end
end
end
-- Новый враг у ворот, идущий по пути
local function spawnEnemy(kind)
local enemy = ServerStorage.Enemies[kind]:Clone()
-- появляется прямо над первой точкой пути
enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
enemy.Parent = enemies
task.spawn(walkPath, enemy)
return enemy
end
-- Пока что один враг
spawnEnemy("Zombie")
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.