В Роблокс Студио почти любой скрипт, связанный с игроками, начинается с события PlayerAdded.
Именно оно позволяет игре понять, что в игру вошёл новый игрок, и выполнить нужные действия в этот момент.
Что такое PlayerAdded
PlayerAdded — это событие, которое срабатывает каждый раз, когда игрок заходит на сервер.
Событие находится в сервисе Players и передаёт в функцию объект игрока — Player.
Простой пример:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print("В игру зашёл игрок:", player.Name)
end)Как только игрок заходит в игру, этот код выполняется один раз для этого игрока.
Когда срабатывает PlayerAdded
PlayerAdded срабатывает:
- при первом входе игрока в игру;
- при переподключении;
- при телепортации на новый сервер.
PlayerAdded не срабатывает:
- при смерти персонажа;
- при респавне;
- при изменении внешнего вида персонажа.
Важно: PlayerAdded срабатывает раньше, чем появляется персонаж игрока.
Что доступно в PlayerAdded
Внутри PlayerAdded можно безопасно работать с:
- player.Name;
- player.UserId;
- player.Backpack;
- leaderstats;
- данными игрока;
- GUI.
Но нельзя гарантированно работать с персонажем, потому что его ещё может не быть.
Правильное использование PlayerAdded
PlayerAdded лучше всего подходит для:
- инициализации данных игрока;
- создания leaderstats;
- подготовки GUI;
- настройки переменных;
- подключения событий игрока.
Пример создания leaderstats:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0
coins.Parent = leaderstats
end)Типичная ошибка новичков
Очень частая ошибка — попытка работать с персонажем прямо в PlayerAdded:
Players.PlayerAdded:Connect(function(player)
player.Character.Humanoid.WalkSpeed = 30
end)Этот код может сломаться, потому что Character ещё не создан.
Как правильно работать с персонажем игрока
Если внутри PlayerAdded нужно работать с персонажем, необходимо подписаться на событие его появления.
Пример правильного подхода:
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(character)
local humanoid = character:WaitForChild("Humanoid")
humanoid.WalkSpeed = 30
end)
end)Такой код:
- дождётся появления персонажа;
- будет работать и при первом спавне;
- будет срабатывать после каждой смерти.
PlayerAdded и уже вошедшие игроки
Если скрипт запускается после того, как игроки уже зашли, PlayerAdded для них не сработает автоматически.
Поэтому часто используют дополнительную проверку:
for _, player in ipairs(Players:GetPlayers()) do
-- логика для уже подключённых игроков
endЭто важно при перезагрузке скриптов и тестировании в Студио.
Где должен находиться скрипт
Скрипт с PlayerAdded должен быть:
- обычным Script, не LocalScript;
- расположен в ServerScriptService.
PlayerAdded не работает в LocalScript, потому что это серверное событие.
Что важно запомнить
- PlayerAdded срабатывает при входе игрока
- Передаёт объект Player
- Срабатывает один раз на вход
- Не зависит от смерти персонажа
- Не подходит для работы с телом персонажа
- Используется для данных и логики игрока
Заключение
Событие PlayerAdded — это точка старта для всей логики игрока в Роблокс Студио.
Если использовать его правильно и не путать с CharacterAdded, скрипты будут работать стабильно и без ошибок.
