Roblox · Дополнительное
Мини-игра: кто дольше всех продержится на вершине, тот король. Над вершиной — «Король горы: имя», над головой короля крутится корона, в таблице справа копятся секунды царствования.
Синим — что нужно создать.
Workspace └─ KingHill (Model) ├─ Step0…Step3 (Part) — ярусы горы ├─ BaseRing (Part) — золотой круг на вершине │ └─ KingGui (BillboardGui) — KingText (TextLabel) ├─ Zone (Part) — невидимая область над вершиной, CanCollide выкл. ├─ Crown (Part) — корона: Anchored, CanCollide выкл. └─ KingServer (Script)
Где: Workspace → KingHill · Script
Зачем: Король, корона, секунды.
-- игроки
local Players = game:GetService("Players")
-- каждый кадр
local RunService = game:GetService("RunService")
-- модель KingHill
local hill = script.Parent
-- невидимая область над вершиной
local zone = hill:WaitForChild("Zone")
-- корона
local crown = hill:WaitForChild("Crown")
-- надпись над вершиной
local label = hill:WaitForChild("BaseRing"):WaitForChild("KingGui"):WaitForChild("KingText")
-- кто сейчас король
local king = nil
-- угол вращения короны
local spin = 0
-- счётчик «Король, с» в таблице справа
local function Seconds(player)
-- таблица (или новая)
local stats = player:FindFirstChild("leaderstats") or Instance.new("Folder")
-- имя — так Roblox показывает её справа
stats.Name = "leaderstats"
-- в игрока
stats.Parent = player
-- счётчик (или новый)
local value = stats:FindFirstChild("KingTime") or Instance.new("IntValue")
-- имя
value.Name = "KingTime"
-- в таблицу
value.Parent = stats
-- отдаём
return value
-- конец функции
end
-- новые игроки
Players.PlayerAdded:Connect(Seconds)
-- кто зашёл раньше скрипта
for _, player in ipairs(Players:GetPlayers()) do Seconds(player) end
-- живые игроки на вершине
local function OnTop()
-- список
local list = {}
-- детали в области
for _, part in ipairs(workspace:GetPartsInPart(zone)) do
-- чей персонаж
local player = Players:GetPlayerFromCharacter(part.Parent)
-- Humanoid
local humanoid = part.Parent:FindFirstChildOfClass("Humanoid")
-- живой и ещё не в списке
if player and humanoid and humanoid.Health > 0 and not table.find(list, player) then table.insert(list, player) end
-- конец перебора
end
-- кто наверху
return list
-- конец функции
end
-- раз в секунду — отдельно от вращения
task.spawn(function()
-- бесконечно
while true do
-- секунда
task.wait(1)
-- кто наверху
local list = OnTop()
-- король ушёл или упал — королём становится первый оставшийся
if not (king and table.find(list, king)) then king = list[1] end
-- надпись
label.Text = king and ("Король горы: " .. king.DisplayName) or "Король горы: —"
-- +1 секунда царствования
if king then Seconds(king).Value += 1 end
-- конец цикла
end
-- конец функции
end)
-- каждый кадр
RunService.Heartbeat:Connect(function(dt)
-- корона крутится
spin += dt * 2
-- голова короля
local head = king and king.Character and king.Character:FindFirstChild("Head")
-- над головой короля или над вершиной
local position = head and head.Position + Vector3.new(0, 2.5, 0) or zone.Position + Vector3.new(0, zone.Size.Y / 2 + 3, 0)
-- ставим и поворачиваем
crown.CFrame = CFrame.new(position) * CFrame.Angles(0, spin, 0)
-- конец функции
end)Запусти Play (или Run) и убедись: