Roblox · Захват флага · урок 7

Броня, оружие и публикация

Последние штрихи: выдача брони на базе, оружие из раздела «Оружие» и публикация.

Структура

Синим — что добавляем на этом уроке.

Workspace
└─ Bases → Синие (Model)
   └─ ArmorGiver (Part)
      └─ ArmorScript (Script)
StarterPack
└─ оружие (Tool) — из раздела «Оружие»

Шаги

  1. «ArmorGiver» — кубик у каждой базы, со скриптом «ArmorScript». Коснулся — +100 к максимуму здоровья и нагрудник.
  2. Атрибут Armor ставится персонажу, а не всем сразу: каждый игрок получает броню раз за жизнь.
  3. Оружие: возьми меч или автомат из раздела «Оружие» и положи в StarterPack — оно будет у каждого.
  4. RespawnLocation уже настроен: после смерти игрок появляется у своей базы.
  5. Game Settings → Places → MaxPlayers чётное (например, 10) — команды равные.
  6. File → Publish to Roblox, Game Settings → Permissions → Public.

Скрипты

ArmorScript

Где: Workspace → Bases → Синие → ArmorGiver · Script
Зачем: Выдаёт броню.

-- деталь, выдающая броню
local giver = script.Parent
-- сколько здоровья добавляет
local BONUS = 100

-- касание
giver.Touched:Connect(function(hit)
    -- персонаж
    local character = hit.Parent
    -- Humanoid
    local humanoid = character:FindFirstChildOfClass("Humanoid")
    -- не игрок, погиб или броня уже есть
    if not humanoid or humanoid.Health <= 0 or character:GetAttribute("Armor") then return end
    -- туловище R15 или R6
    local torso = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso")
    -- нет туловища
    if not torso then return end
    -- у этого персонажа броня есть (после смерти — снова нет)
    character:SetAttribute("Armor", true)
    -- больше максимум
    humanoid.MaxHealth += BONUS
    -- полное здоровье
    humanoid.Health = humanoid.MaxHealth
    -- нагрудник
    local plate = Instance.new("Part")
    -- имя
    plate.Name = "ArmorPlate"
    -- чуть больше туловища
    plate.Size = torso.Size + Vector3.new(0.3, 0.1, 0.3)
    -- цвет как у выдачи
    plate.Color = giver.Color
    -- металл
    plate.Material = Enum.Material.Metal
    -- не мешает ходить
    plate.CanCollide = false
    -- лучи сквозь
    plate.CanQuery = false
    -- без веса
    plate.Massless = true
    -- на туловище
    plate.CFrame = torso.CFrame
    -- сварка
    local weld = Instance.new("WeldConstraint")
    -- туловище
    weld.Part0 = torso
    -- нагрудник
    weld.Part1 = plate
    -- в нагрудник
    weld.Parent = plate
    -- в персонажа
    plate.Parent = character
-- конец функции
end)

Проверка

Запусти Play (или Run) и убедись: