Roblox · Песочница · урок 10

Подсказки, погода и публикация

Меню FAQ с подсказками по всем механикам, погода плагином Weather System, ограничение числа игроков — и публикация.

Структура

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

StarterGui
└─ FaqGui (ScreenGui) — ResetOnSpawn выкл.
   ├─ OpenFaq (TextButton) — «?»
   └─ FaqFrame (Frame) — Visible выкл.
      ├─ FaqText (TextLabel) — заголовок
      ├─ CloseButton (TextButton)
      ├─ ListFrame (ScrollingFrame) — кнопки тем: Keys, Pickaxe, Axe, Craft, Hunger, Sleep, Enemy
      ├─ InfoFrame (Frame) — Object, Info, BackButton; Visible выкл.
      └─ FaqScript (LocalScript)

Шаги

  1. Правила подсказок: объясни нестандартные клавиши, подбор предметов, каждое меню, крафт, ИИ, голод, сон. Текст подсказок — тоже часть мира.
  2. FaqGui: кнопка «OpenFaq», FaqFrame с заголовком, «CloseButton», ScrollingFrame «ListFrame» (UIListLayout и кнопки тем, имя кнопки = ключ в таблице INFO), Frame «InfoFrame» (Object, Info, BackButton).
  3. LocalScript «FaqScript» в FaqFrame. Новая тема — кнопка в ListFrame и строчка в INFO.
  4. Оформление: убери тренировочные модели, расставь всё так, как хочешь познакомить игрока с механиками.
  5. Погода: Toolbox → Plugins → «Weather System» → Install/Update System. System Settings — интерфейс прогноза, градусы, дата; Climate Settings — температура и осадки по месяцам.
  6. Сон перематывает ночь у всех — игру лучше сделать одиночной: Game Settings → Places → ⋯ → Configure Place → Max Players = 1.
  7. Публикация: File → Publish to Roblox, Permissions → Public.

Скрипты

FaqScript

Где: StarterGui → FaqGui → FaqFrame · LocalScript
Зачем: Меню подсказок.

-- окно подсказок
local faqFrame = script.Parent
-- кнопка «?»
local openButton = faqFrame.Parent:WaitForChild("OpenFaq")
-- список тем (в методичке по ошибке FaqList)
local listFrame = faqFrame:WaitForChild("ListFrame")
-- текст темы
local infoFrame = faqFrame:WaitForChild("InfoFrame")
-- тема → подсказка; имя кнопки = ключ
local INFO = {
    -- клавиши
    Keys = "Shift — бег, C — присесть, F — полёт, I — инвентарь, R — повернуть блок, Q — отменить размещение.",
    -- кирка
    Pickaxe = "Кирка ломает камни и каменные блоки. Изнашивается: прочность видно по числу ударов.",
    -- топор
    Axe = "Топор рубит деревья, деревянные блоки и заборы. Срубленное дерево вырастает через минуту.",
    -- крафт
    Craft = "Подойди к верстаку и нажми E. Выбери рецепт — если ингредиентов хватает, предмет появится в инвентаре или рюкзаке.",
    -- голод
    Hunger = "Сытость падает со временем. На нуле уходит здоровье. Сорви яблоко с яблони и съешь его.",
    -- сон
    Sleep = "Ночью ляг на кровать: сон перемотает время до утра и восстановит здоровье. Прыжок — встать.",
    -- противник
    Enemy = "Зомби патрулирует лес и обходит стены. Заметив тебя, бежит быстрее. Держись подальше или построй укрытие.",
-- конец таблицы
}

-- «?»
openButton.MouseButton1Click:Connect(function()
    -- открыть / закрыть
    faqFrame.Visible = not faqFrame.Visible
-- конец функции
end)
-- закрыть
faqFrame:WaitForChild("CloseButton").MouseButton1Click:Connect(function() faqFrame.Visible = false end)
-- назад к темам
infoFrame:WaitForChild("BackButton").MouseButton1Click:Connect(function()
    -- прячем текст
    infoFrame.Visible = false
    -- показываем список
    listFrame.Visible = true
-- конец функции
end)
-- кнопки тем
for _, button in ipairs(listFrame:GetChildren()) do
    -- только кнопки
    if button:IsA("TextButton") then
        -- клик по теме
        button.MouseButton1Click:Connect(function()
            -- заголовок
            infoFrame.Object.Text = button.Text
            -- текст
            infoFrame.Info.Text = INFO[button.Name] or "Скоро здесь будет подсказка."
            -- прячем список
            listFrame.Visible = false
            -- показываем текст
            infoFrame.Visible = true
        -- конец функции
        end)
    -- конец проверки
    end
-- конец перебора
end

Проверка

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