Player

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Obiekt Gracz jest klientem, który jest obecnie połączony.Te obiekty są dodawane do usługi Players w momencie połączenia się nowego gracza, a następnie są usuwane, gdy ostatecznie odłączą się od serwera.

Właściwość Instance.Name odzwierciedla nazwa użytkownikaużytkownika gracza.Podczas zapisywania informacji o graczu powinieneś używać jego Player.UserId, ponieważ jest możliwe, że gracz może zmienić swoją nazwa użytkownika.

Istnieje kilka podobnych metod w usłudze Players dla pracy z obiektami Gracza. Użyj ich nad ich odpowiednimi metodami Instance:

Przykłady kodu

This code sample demonstrates the creation of leaderboard stat values in Roblox's default player list UI. It creates a "Score" leaderstat that starts at 0.

Leaderstats

local Players = game:GetService("Players")
local function onPlayerAdded(player)
-- Create a container for leaderstats
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
-- Create one leaderstat value
local vScore = Instance.new("IntValue")
vScore.Name = "Score"
vScore.Value = 0
vScore.Parent = leaderstats
-- Add to player (displaying it)
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)

Podsumowanie

Właściwości

Metody

Zdarzenia

Właściwości

AccountAge

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Wiek konta jest właściwością Player, która opisuje, jak dawno konto gracza zostało zarejestrowane w dniach.Jest ustawiony za pomocą funkcji Player:SetAccountAge(), do której nie można uzyskać dostępu za pomocą skryptów.

Właściwość ta jest przydatna do warunkowego wyświetlania nowych treści dla graczy Roblox, takich jak samouczki.

Przykłady kodu

This code sample adds a mark to players showing about how old their account is. The mark uses a player's account age to determine if they are a New Player, Veteran Player or Regular Player.

Account Age Mark

local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- one week
local MIN_AGE_VETERAN = 365 -- one year
-- This function marks a part with text using a BillboardGui
local function mark(part, text)
local bbgui = Instance.new("BillboardGui")
bbgui.AlwaysOnTop = true
bbgui.StudsOffsetWorldSpace = Vector3.new(0, 2, 0)
bbgui.Size = UDim2.new(0, 200, 0, 50)
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0) -- Fill parent
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Add to part
bbgui.Parent = part
bbgui.Adornee = part
end
local function onPlayerSpawned(player, character)
local head = character:WaitForChild("Head")
if player.AccountAge >= MIN_AGE_VETERAN then
mark(head, "Veteran Player")
elseif player.AccountAge <= MAX_AGE_NEW_PLAYER then
mark(head, "New Player")
else
mark(head, "Regular Player")
end
end
local function onPlayerAdded(player)
-- Listen for this player spawning
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

AutoJumpEnabled

Odczyt równoległy

Właściwość AutoJumpEnabled określa, czy Player.Character z użyciem urządzenia mobilnego Player automatycznie wyskoczy, gdy trafi na przeszkodę.Może to uczynić poziomy bardziej przeglądalnymi na urządzeniemobilnym.

Gdy gracz dołącza do gry, wartość StarterPlayer.AutoJumpEnabled określa początkowy stan tej właściwości.Następnie ta właściwość określa wartość właściwości Humanoid.AutoJumpEnabled właściwości Player.Character na spawnie.Innymi słowy, można ustawić zachowanie automatycznego skoku na podstawie każdej postaci, gracza i gry za pomocą tych trzech właściwości.

Przykłady kodu

This code sample is meant for a TextButton. It allows the player to toggle the auto-jumping behavior while on a mobile device.

Auto-Jump Toggle

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local button = script.Parent
local function update()
-- Update button text
if player.AutoJumpEnabled then
button.Text = "Auto-Jump is ON"
else
button.Text = "Auto-Jump is OFF"
end
-- Reflect the property in the player's character, if they have one
if player.Character then
local human = player.Character:FindFirstChild("Humanoid")
if human then
human.AutoJumpEnabled = player.AutoJumpEnabled
end
end
end
local function onActivated()
-- Toggle auto-jump
player.AutoJumpEnabled = not player.AutoJumpEnabled
-- Update everything else
update()
end
button.Activated:Connect(onActivated)
update()

CameraMaxZoomDistance

Odczyt równoległy

Właściwość CameraMaxZoomDistance Player ustawia maksymalną odległość w szpilkach, z jakiej kamera może być od postaci z domyślnymi kamerami.

Innymi słowy, kontroluje maksymalną odległość, na jaką kamera gracza może się przybliżyć.

Domyślna wartość tej właściwości jest ustawiana przez StarterPlayer.CameraMaxZoomDistance.Jeśli ta wartość zostanie ustawiona na niższą wartość niż Player.CameraMinZoomDistance, zostanie ona zwiększona do CameraMinZoomDistance.

Przykłady kodu

The example demonstrates how to set a player's camera minimum and maximum zoom distance.

In this example, we set the Player.CameraMinZoomDistance and Player.CameraMaxZoomDistance to set the min and max distance in studs a player's camera can be from their character.

Note that since the example attempts to set the CameraMinZoomDistance to be greater than the CameraMaxZoomDistance, the CameraMinZoomDistance value will be decreased and set to the value of the max zoom distance.

To change the default min and max zoom distance values for a player when they first enter the game, you can change the StarterClass.Player.CameraMinZoomDistance and StarterClass.Player.CameraMaxZoomDistance properties.

Setting Camera Zoom Distance

local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMaxZoomDistance = 50
player.CameraMinZoomDistance = 75

CameraMinZoomDistance

Odczyt równoległy

Właściwość CameraMinZoonDistance Player ustawia minimalną odległość w szpilkach, z jakiej kamera może być od postaci z domyślnymi kamerami.

Innymi słowy, kontroluje minimalną odległość, na jaką kamera gracza może się przybliżyć.

Domyślna wartość tej właściwości jest ustawiana przez StarterPlayer.CameraMinZoomDistance.Jeśli ta wartość zostanie ustawiona na wyższą wartość niż Player.CameraMaxZoomDistance zostanie zmniejszona do CameraMaxZoomDistance.

Przykłady kodu

The example demonstrates how to set a player's camera minimum and maximum zoom distance.

In this example, we set the Player.CameraMinZoomDistance and Player.CameraMaxZoomDistance to set the min and max distance in studs a player's camera can be from their character.

Note that since the example attempts to set the CameraMinZoomDistance to be greater than the CameraMaxZoomDistance, the CameraMinZoomDistance value will be decreased and set to the value of the max zoom distance.

To change the default min and max zoom distance values for a player when they first enter the game, you can change the StarterClass.Player.CameraMinZoomDistance and StarterClass.Player.CameraMaxZoomDistance properties.

Setting Camera Zoom Distance

local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMaxZoomDistance = 50
player.CameraMinZoomDistance = 75

CameraMode

Odczyt równoległy

Właściwość tryb kamery ustawia tryb kamery gracza, domyślnie na osobę trzecią.

Trzecia osoba

W domyślnym trybie trzeciej osoby ( Enum.CameraMode.Classic ), postać można zobaczyć w kamerze. W tym trybie domyślne zachowanie jest:

  • Gracze mogą kliknąć prawym przyciskiem myszy i przeciągnąć (mysz), nacisnąć i przeciągnąć (urządzenie mobilne), użyć drugorzędnego joysticka (gamepad) lub naciśnąć strzały lewo/w prawo (klawiatura), aby obrócić kamerę wokół swojej postaci.
  • Kiedy gracz przesuwa swoją postać, skierowana jest w odpowiednim kierunku ruchu.
  • Gracze mogą swobodnie przybliżać i oddalać, nawet do pierwszej osoby w pełnym skupieniu.

Pierwsza osoba

W trybie pierwszej osoby ( Enum.CameraMode.LockFirstPerson ), kamera gracza jest powiększona do końca.Chyba że istnieje widoczny interfejs użytkownika z właściwością GuiButton.Modal ustawioną na true, przesuwanie myszy, przeciąganie na urządzeniu mobilnym lub użycie drugorzędnego joysticka na gamepadzie obróci kamerę wokół postaci.

Przykłady kodu

This example demonstrates how to change the character's CameraMode to first person using the LockFirstPerson value of the Enum.CameraMode enum.

Playing in First Person

local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMode = Enum.CameraMode.LockFirstPerson

CanLoadCharacterAppearance

Odczyt równoległy

Właściwość CanLoadCharacterAppearance Player określa, czy wygląd postaci zostanie załadowany, gdy gracz się pojawi.Domyślna wartość tej właściwości jest ustawiana przez StarterPlayer.LoadPlayerAppearance .

Jeśli prawda, znak załaduje wygląd gracza odpowiadający graczowi Player.CharacterAppearanceId.

Jeśli fałsz, gracz pojawi się z domyślnym wyglądem - szarym modelem postaci bez żadnych czapek, koszul, spodni itp.

Próba ustawienia właściwości po tym, jak postać się pojawiła, nie zmieni postaci, musisz wezwać Player:LoadCharacter(), aby załadować nowy wygląd.

Przykłady kodu

This example demonstrates how to disable loading a player's character appearance. Instead, the player loads as a grey model without any hats, shirts, pants, etc.

This is useful for games using custom clothing and accessories.

Note that if the character has already spawned, this change will not take affect until the player respawns or the Player:LoadCharacter() function is called.

Disabling a Player's Appearance

local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CanLoadCharacterAppearance = false

Character

Odczyt równoległy

Właściwość Postać zawiera odniesienie do Model zawierającego Humanoid , części ciała, skrypty i inne obiekty wymagane do symulacji awatara gracza w doświadczeniu.Model jest powiązany z Workspace ale może zostać przeniesiony.Jest automatycznie wczytywany, gdy Players.CharacterAutoLoads jest true i może być ręcznie wczytywany w innym przypadku za pomocą Player:LoadCharacter() .

Początkowo właściwość ta jest nil i jest ustawiana, gdy po raz pierwszy pojawia się postać gracza.Użyj wydarzenia Player.CharacterAdded, aby wykryć, kiedy postać gracza właściwie się załadowała, i wydarzenia Player.CharacterRemoving, aby wykryć, kiedy postać ma zamiar zniknąć.Unikaj używania Object:GetPropertyChangedSignal() na tej właściwości.

Zauważ, że LocalScripts te, które są klonowane z StarterGui lub StarterPack do gracza PlayerGui lub Backpack odpowiednio są często uruchamiane przed zastąpieniem starego modelu postaci, więc Player.Character może odnosić się do starego modelu, którego właściwość Parent jest nil.Dlatego w LocalScript pod StarterGui lub StarterPack warto upewnić się, że rodzic Postaci nie jest nil przed jej użyciem, na przykład:


local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character
if not character or character.Parent == nil then
character = player.CharacterAdded:Wait()
end

CharacterAppearanceId

Odczyt równoległy

Właściwość ta określa ID użytkownika konta, którego wygląd postaci jest używany do celów gracza character.Domyślnie właściwość ta jest Player.UserId, która wykorzystuje awatar gracza, jak stworzył go na stronie Roblox.

Zmiana tej właściwości na ID użytkownika innego konta spowoduje, że gracz pojawi się z wyglądem tego konto(czapki, koszula, spodnie itp.).

Gry mogą również przełączać, czy wygląd postaci gracza jest wczytywany w grze, czy nie, zmieniając właściwość StarterPlayer.LoadCharacterAppearance.

Przykłady kodu

This code sample allows players to chat "/disguise xyz", where xyz is a user ID or username, and they will respawn appearing like that account's avatar. Try typing "/disguise 261" or "/disguise Shedletsky"!

Disguise Command

local Players = game:GetService("Players")
local disguiseCommand = "/disguise "
local function onPlayerChatted(player, message)
if message:sub(1, disguiseCommand:len()):lower() == disguiseCommand:lower() then
local input = message:sub(disguiseCommand:len() + 1)
local id = tonumber(input)
if not id then -- Number failed to parse, maybe they typed a username instead
pcall(function() -- This call can fail sometimes!
id = Players:GetUserIdFromNameAsync(input) -- Fetch ID from name
end)
end
if id then
-- Set character appearance then respawn
player.CharacterAppearanceId = id
player:LoadCharacter()
else
-- We couldn't get an ID from their input
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

DevCameraOcclusionMode

Odczyt równoległy

Określa, w jaki sposób domyślne skrypty kamery obsługują obiekty między kamerą a przedmiotem kamerowym.Ustawione przez StarterPlayer.DevCameraOcclusionMode i nie może być zmieniane dla poszczególnych graczy.

Domyślną wartością jest Zoom (0). Zobacz Enum.DevCameraOcclusionMode dla listy dostępnych trybów.

Odczyt równoległy

Właściwość DevComputerCameraMode określa sposób, w jaki gracz przesuwa kamerę podczas używania urządzenia z myszką i klawiaturą.Zobacz Enum.DevComputerCameraMovementMode dla opisu każdej dostępnej trybu kontroli kamery.Właściwość ta nie może być ustawiona za pomocą LocalScript (musi być ustawiona na serwerze za pomocą Script ).

Domyślna wartość tej właściwości jest określana przez StarterPlayer.DevComputerCameraMovementMode.

Słowo "Komputer" w tej nazwie właściwości odnosi się do urządzeń nie- TouchEnabled , nie- GamepadEnabled .

Gdy ustawiono na Wybór użytkownika , gracz może wybrać między dowolnym modelem sterowania (z wyjątkiem Skryptowalnego ) w ustawieniach gry Roblox.ogólnerzecz biorąc, dobrym pomysłem jest umożliwienie graczom wyboru trybu sterowania, aby zwiększyć dostępność.

Można stworzyć niestandardową schemat kontroli, ustawiając tę właściwość na Zapisane .

Właściwość ta nie wpływa na graczy używających urządzeniez włączonym dotykiem. Zobacz Player.DevTouchCameraMode.

Przykłady kodu

The example demonstrates how to set a player's camera movement mode for players on a computer.

In this example, we set the camera movement mode to Classic via the Enum.DevComputerCameraMovementMode enum. This means that the camera of players on touch enabled devices will track the player but will not automatically rotate if the player walks left or right.

Setting a Player's Camera Movement Mode (Desktop)

local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Set the player's camera movement mode on computers to classic
player.DevComputerCameraMode = Enum.DevComputerCameraMovementMode.Classic

DevComputerMovementMode

Odczyt równoległy

Właściwość DevComputerMovementMode określa sposób, w jaki gracz przemieszcza swoją postać, gdy używa urządzenia z myszką i klawiaturą.Zobacz Enum.DevComputerMovementMode dla opisu każdej dostępnej opcji kontroli ruchu.Właściwość ta nie może być ustawiona za pomocą LocalScript (musi być ustawiona na serwerze za pomocą Script ).

Domyślna wartość tej właściwości jest określana przez StarterPlayer.DevComputerMovementMode.

Słowo "Komputer" w tej nazwie właściwości odnosi się do urządzeń nie- TouchEnabled niskich.

Gdy ustawiono na Wybór użytkownika , gracz może wybrać między dowolnym modelem sterowania (z wyjątkiem Skryptowalnego ) w ustawieniach gry Roblox.ogólnerzecz biorąc, dobrym pomysłem jest pozwolenie graczom na wybór trybu kontroli, aby zwiększyć dostępność.

Można stworzyć niestandardową schemat kontroli, ustawiając tę właściwość na Zapisane .

Właściwość ta nie wpływa na graczy używających urządzeniez włączonym dotykiem. Zobacz Player.DevTouchMovementMode.

Przykłady kodu

Demonstrates how to set the movement mode for players on computers using the Player.DevComputerMovementMode property.

Setting a Player's Movement Mode (Desktop)

local Players = game:GetService("Players")
local function onPlayerAdded(player: Player)
-- Set the player's movement mode on desktop devices to click-to-move
-- Once set, the player can right click in the game world and the character will move there.
player.DevComputerMovementMode = Enum.DevComputerMovementMode.ClickToMove
end
Players.PlayerAdded:Connect(onPlayerAdded)

DevEnableMouseLock

Odczyt równoległy

Właściwość ta określa, czy gracz może przełączyć blokadę Mouse poprzez naciśnięcie Shift .Gracz może wyłączyć przełącznik blokady myszy w ustawieniach gry Roblox.Domyślnie właściwość ta jest ustawiona na wartość StarterPlayer.EnableMouseLockOption .Można to ustawić po stronie serwera podczas czasu wykonania za pomocą Script.Nie można go ustawić po stronie klienta.

Gdy włączono blokadę myszy, kurzor gracza jest zablokowany w środku ekranu.Przesuwanie myszy będzie orbitować wokół kamery wokół gracza character , a postać będzie skierowana w tym samym kierunku co camera .Odwraca również widok kamery tuż nad prawym ramieniem postaci gracza.

Zauważ, że interfejsy API związane z przełączaniem blokady są w trakcie wycofania, więc zaleca się użycie UserInputService.MouseBehavior zamiast blokować mysz.

Przykłady kodu

This code sample demonstrates how to toggle whether mouse lock is available to a player using a chat command. When a player types "mouselock", their ability to toggle mouse lock is toggled. Note that this does not toggle the actual state of mouse lock; rather, it changes whether a player is able to toggle it themselves.

This code can be run by pasting it into a Script within ServerScriptService.

Toggling Mouse Lock Ability

local Players = game:GetService("Players")
local function toggleMouseLock(player)
player.DevEnableMouseLock = not player.DevEnableMouseLock
if player.DevEnableMouseLock then
print("Mouse lock is available")
else
print("Mouse lock is not available")
end
end
local function onPlayerChatted(player, message, _recipient)
if message == "mouselock" then
toggleMouseLock(player)
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Odczyt równoległy

Właściwość DevTouchCameraMode określa sposób, w jaki gracz przemieszcza kamerę podczas używania urządzenieTouchEnabled.Zobacz Enum.DevTouchCameraMovementMode dla opisu każdej dostępnej trybu kontroli kamery.Właściwość ta nie może być ustawiona za pomocą LocalScript (musi być ustawiona na serwerze za pomocą Script ).

Domyślna wartość tej właściwości jest określana przez StarterPlayer.DevTouchCameraMovementMode.

Gdy ustawiono na Wybór użytkownika , gracz może wybrać między dowolnym modelem sterowania (z wyjątkiem Skryptowalnego ) w ustawieniach gry Roblox.ogólnerzecz biorąc, dobrym pomysłem jest pozwolenie graczom na wybór trybu kontroli, aby zwiększyć dostępność.

Można stworzyć niestandardową schemat kontroli, ustawiając tę właściwość na Zapisane .

Właściwość ta nie wpływa na graczy, którzy nie używają urządzeniez włączonym dotykiem. Zobacz Player.DevComputerCameraMovementMode.

Przykłady kodu

The example demonstrates how to set a player's camera movement mode.

In this example, we set the camera movement mode to Classic via the Enum.DevTouchCameraMovementMode enum. This means that the camera of players on touch enabled devices will track the player but will not automatically rotate if the player walks left or right.

Setting a Player's Camera Movement Mode (Touch)

local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Set the player's camera movement mode on mobile devices to classic
player.DevTouchCameraMovementMode = Enum.DevTouchCameraMovementMode.Classic

DevTouchMovementMode

Odczyt równoległy

Właściwość DevTouchMovementMode określa sposób, w jaki gracz przemieszcza swoją postać, gdy używa urządzenieTouchEnabled.Zobacz Enum.DevTouchMovementMode dla opisu każdej dostępnej opcji kontroli ruchu.Właściwość ta nie może być ustawiona za pomocą LocalScript (musi być ustawiona na serwerze za pomocą Script ).

Domyślna wartość tej właściwości jest określana przez StarterPlayer.DevTouchMovementMode.

Gdy ustawiono na Wybór użytkownika , gracz może wybrać między dowolnym modelem sterowania (z wyjątkiem Skryptowalnego ) w ustawieniach gry Roblox.ogólnerzecz biorąc, dobrym pomysłem jest umożliwienie graczom wyboru trybu sterowania, aby zwiększyć dostępność.

Można stworzyć niestandardową schemat kontroli, ustawiając tę właściwość na Zapisane .

Właściwość ta nie wpływa na graczy, którzy nie używają urządzeniez włączonym dotykiem. Zobacz Player.DevComputerMovementMode.

Przykłady kodu

The example demonstrates how to set the movement mode for players on touch enabled devices.

In this example, we set the movement mode to Thumbstick via the Enum.DevTouchMovementMode enum. This means that players on touch enabled devices are able to move via a virtual thumbstick on their screen.

Setting a Player's Movement Mode (Touch)

local Players = game:GetService("Players")
game.Players.PlayerAdded:Connect(function(player)
-- Set the player's movement mode on mobile devices to a dynamic thumbstick
player.DevTouchMovementMode = Enum.DevTouchMovementMode.DynamicThumbstick
end)

DisplayName

Odczyt równoległy

The jest właściwością, która zawiera nazwę wyświetlania autoryzowanego użytkownika powiązanego z obiektem .W przeciwieństwie do nazw użytkowników nazwy wyświetlania są niepowtarzalnymi nazwami, które gracz wyświetla innym.Jeśli użytkownik Roblox nie wybrał żadnej, właściwość będzie odczytywana tak samo jak właściwość Name.

Uwaga:

  • Ponieważ nazwy wyświetlania nie są unikalne, możliwe jest, aby dwóch graczy w jednej instancji miało identyczne nazwy.Jeśli potrzebujesz globalnie unikalnego identyfikatora dla gracza, użyj Player.UserId (który jest statyczny) lub Player.Name (który jest obecną nazwą użytkownika) zamiast tego.
  • Postacie generowane za pomocą Player.LoadCharacter lub przez silnik Roblox będą miały przypisane właściwości Humanoid.DisplayName właściwości Player.DisplayName.
  • Nazwy wyświetlania mogą zawierać znaki unicode w strunie. Zobacz UTF-8 dla więcej informacji o tym, jak pracować z ciągami z znakami unicode.

FollowUserId

Tylko do odczytu
Bez replikacji
Odczyt równoległy

FollowUserId to właściwość Player, która zawiera Player.UserId użytkownika, którego gracz podążył do gry.Jeśli gracz nie zaobserwował nikogo w grze, ta właściwość będzie wynosić 0.Właściwość ta jest przydatna do ostrzegania graczy, które zostały śledzone przez innego gracza do gry.

Możesz uzyskać nazwę gracza za pomocą tego ID użytkownika i funkcji Players:GetNameFromUserIdAsync().

Przykłady kodu

This code sample alerts players if a new player follows the local player into the game. Place this in a LocalScript in StarterPlayerScripts.

Followed Alert

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local screenGui = Instance.new("ScreenGui")
screenGui.Parent = player:WaitForChild("PlayerGui")
local function onPlayerAdded(newPlayer)
if newPlayer.FollowUserId == player.UserId then
local textLabel = Instance.new("TextLabel")
textLabel.Parent = screenGui
textLabel.Text = "You were followed to this game by " .. newPlayer.Name .. "!"
task.delay(3, function()
if textLabel then
textLabel:Destroy()
end
end)
end
end
Players.PlayerAdded:Connect(onPlayerAdded)

GameplayPaused

Brak dostępu do zabezpieczeń
Odczyt równoległy

Właściwość GameplayPaused wskazuje, czy gracz jest obecnie w stanie przerwy w miejscu z StreamingEnabled aktywowanym.Zostaje ustawiony na klientzie, ale replikowany na serwerze.Aby określić statusprzerwy, możesz wykorzystać tę właściwość.

Zobacz także:

HasVerifiedBadge

Odczyt równoległy

Właściwość HasVerifiedBadge Player wskazuje, czy gracz ma potwierdzoną odznakę.

HealthDisplayDistance

Odczyt równoległy

Właściwość HealthDisplayDistance Player ustawia odległość w szpilkach, na której ten gracz zobaczy inne paski zdrowia Humanoid.Jeśli ustawiono na 0, paski zdrowia nie będą wyświetlane.Właściwość ta jest ustawiona domyślnie na StarterPlayer.HealthDisplayDistance .

Jeśli pasek zdrowia humanoida jest widoczny, możesz ustawić typ wyświetlania za pomocą Humanoid.DisplayDistanceType.

Przykłady kodu

This example demonstrates how to hide other Humanoid's (Player and NPC) health bars and names.

This is done by setting the player's Player.HealthDisplayDistance and Player.NameDisplayDistance properties to 0.

If you would like to display health bars and names, you set the properties to a value greater than 0. For instance, setting the properties to 100 means that the player will see other player's health and names up to 100 studs away.

To modify the default values for players, you can change the values of the StarterClass.Player.HealthDisplayDistance and StarterClass.Player.NameDisplayDistance properties.

Hiding Player Health and Names

local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.HealthDisplayDistance = 0
player.NameDisplayDistance = 0

LocaleId

Ukryte
Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość LocaleId Player pokazuje lokalną identyfikację, którą lokalny gracz ustawił dla swojego kontoRoblox.Przechowuje ciąg z kodem dwuliterowym (np. "en-us") dla lokalizacji.

Można go użyć do określenia demografii geograficznej bazy graczy twojej gry oraz jest to również lokalizacja, która zostanie wykorzystana do automatycznej lokalizacji treści w doświadczeniu (patrz GuiBase2d.AutoLocalize ).Właściwość ta umożliwia dostęp do lokalnego serwera gracza z serwera.

Zobacz także LocalizationService.RobloxLocaleId , lokalny identyfikator używany do lokalizacji wewnętrznej zawartości.Będzie to inna wartość, gdy Roblox jeszcze nie wspiera wewnętrznie ustawionej lokalizacji lokalnego gracza.

Przykłady kodu

This example demonstrates how to check the locale of a local player using the Player.LocaleId property. It prints a string with the two letter locale code for the locale of the local player.

For instance, if the player's local is within the US, the locale will be:

en-us

Checking a Player's Locale

local Players = game:GetService("Players")
local player = Players.LocalPlayer
print(player.LocaleId)

MembershipType

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta może być odczytywana tylko w celu określenia członkostwa (nie może być ustawiona na inny wpisywaćczłonkostwa).Zawiera Enum.MembershipType enumerację wpisywaćczłonkostwa w konto.

Przykłady kodu

The following example checks whether a player has Premium membership.

Check Player Membership Status

local Players = game:GetService("Players")
local player = Players.LocalPlayer
if player.MembershipType == Enum.MembershipType.Premium then
-- Take some action specifically for Premium members
end

NameDisplayDistance

Odczyt równoległy

Właściwość NameDisplayDistance StarterPlayer ustawia odległość w szpilkach, na której ten gracz zobaczy inne nazwy Humanoid.Jeśli właściwość jest ustawiona na 0, nazwy są ukryte.Właściwość ta jest ustawiona domyślnie na StarterPlayer.NameDisplayDistance .

Jeśli pasek zdrowia humanoida jest widoczny, możesz ustawić typ wyświetlania za pomocą Humanoid.DisplayDistanceType.

Przykłady kodu

This example demonstrates how to hide other Humanoid's (Player and NPC) health bars and names.

This is done by setting the player's Player.HealthDisplayDistance and Player.NameDisplayDistance properties to 0.

If you would like to display health bars and names, you set the properties to a value greater than 0. For instance, setting the properties to 100 means that the player will see other player's health and names up to 100 studs away.

To modify the default values for players, you can change the values of the StarterClass.Player.HealthDisplayDistance and StarterClass.Player.NameDisplayDistance properties.

Hiding Player Health and Names

local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.HealthDisplayDistance = 0
player.NameDisplayDistance = 0

Neutral

Odczyt równoległy

Właściwość Neutral określa, czy gracz jest w określonej drużynie.

  • Gdy prawda, gracz nie jest w konkretnej drużynie.Oznacza to również, że właściwość Player.Team będzie nil i Player.TeamColor będzie biała.
  • Gdy fałsz, gracz jest w określonej drużynie.Właściwość Player.Team będzie odpowiadać Team, na którym jest gracz, podobnie jak Player.TeamColor.

Przykłady kodu

This example checks if a player is neutral. If the player is neutral, the game prints:

Player is neutral!

If the player is not neutral, the game prints:

Player is not neutral!

Note: Although this example prints the value of the local player's neutral property, you can change the example to get the value for any player.

Checking if a Player is Neutral

local Players = game:GetService("Players")
local player = Players.LocalPlayer
if player.Neutral then
print("Player is neutral!")
else
print("Player is not neutral!")
end

PartyId

Ukryte
Bez replikacji
Zabezpieczenia na platformie Roblox
Odczyt równoległy

ReplicationFocus

Odczyt równoległy

Właściwość ReplicationFocus Player ustawia część na skupienie replikacji wokół gracza.Różne systemy Roblox, które komunikują się za pośrednictwem sieci (takie jak fizyka, strumieniowanie itp.) replikują się w różnym tempie w zależności od tego, jak blisko obiekty są do celu replikacji.

Gdy ta właściwość jest , wraca do swojego domyślnego zachowania, które polega na traktowaniu charakteru lokalnego gracza jako punktu koncentracji replikacji.

Ta właściwość powinna być ustawiona tylko na serwerze za pomocą Script, a nie LocalScript.Zauważ, że ta właściwość nie zmienia ani nie aktualizuje własności sieciowej części.

Przykłady kodu

This example creates a new BasePart and sets the Player's Player.ReplicationFocus to that part.

This demonstrates the functionality of the ReplicationFocus property. You can easily change the part that the focus is set to to change the replication focus.

Setting a Player's Replication Focus

local Players = game:GetService("Players")
local PLAYER_NAME = "polarpanda16"
local player = Players:WaitForChild(PLAYER_NAME)
local part = Instance.new("Part")
part.Parent = workspace
part.Name = "ReplicationFocusPart"
part.Anchored = true
player.ReplicationFocus = part

RespawnLocation

Odczyt równoległy

Jeśli ustawiać, gracz odrodzi się w określonym SpawnLocation .Właściwość ta może być ustawiona tylko za pośrednictwem Luau i musi zawierać odniesienie do ważnego SpawnLocation, który musi spełniać następujące kryteria:

Jeśli RespawnLocation nie jest ustawiony na ważną SpawnLocation logikę domyślnego spawnowania, zostanie zastosowana domyślna logika.Aby uzyskać więcej informacji na ten temat, zobacz stronę dla SpawnLocation.

Alternatywy dla RespawnLocation

Przykłady kodu

This code sample will set the player to always respawn from the last SpawnLocation they touched. New players will respawn from the SpawnLocation named 'FirstSpawn' until they touch a different SpawnLocation.

This is an alternative to using the AllowTeamChangeOnTouch property to switch SpawnLocations and does not require Teams.

Change Spawn on Touch

local Players = game:GetService("Players")
local function addSpawn(spawnLocation)
-- listen for the spawn being touched
spawnLocation.Touched:Connect(function(hit)
local character = hit:FindFirstAncestorOfClass("Model")
if character then
local player = Players:GetPlayerFromCharacter(character)
if player and player.RespawnLocation ~= spawnLocation then
local humanoid = character:FindFirstChildOfClass("Humanoid")
-- make sure the character isn't dead
if humanoid and humanoid:GetState() ~= Enum.HumanoidStateType.Dead then
print("spawn set")
player.RespawnLocation = spawnLocation
end
end
end
end)
end
local firstSpawn
-- look through the workspace for spawns
for _, descendant in pairs(workspace:GetDescendants()) do
if descendant:IsA("SpawnLocation") then
if descendant.Name == "FirstSpawn" then
firstSpawn = descendant
end
addSpawn(descendant)
end
end
local function playerAdded(player)
player.RespawnLocation = firstSpawn
end
-- listen for new players
Players.PlayerAdded:Connect(playerAdded)
-- go through existing players
for _, player in pairs(Players:GetPlayers()) do
playerAdded(player)
end

StepIdOffset

Zabezpieczenia na platformie Roblox
Odczyt równoległy

Team

Bez replikacji
Odczyt równoległy

Właściwość Zespół jest odniesieniem do obiektu Team w ramach usługi Teams.Określa zespół, na którym jest gracz; jeśli Player nie jest na zespole lub ma nieprawidłowy Player.TeamColor, ta właściwość jest nil .Gdy ta właściwość jest ustawiać, gracz dołączył do wydarzenia Team i Team.PlayerAdded w związanym zespołem.Podobnie, Team.PlayerRemoved ogień występuje, gdy właściwość nie jest ustawiona z pewnego Team.

Przykłady kodu

This code sample, although lengthy, is quite simple: detect when a player chats /play, then put them on the "Playing" team. When they die, move them back to the "Spectating" team.

Playing/Spectating Teams

local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
local teamPlaying = Teams.Playing
local teamSpectators = Teams.Spectating
local playCommand = "/play"
local function play(player)
player.Team = teamPlaying
player.TeamColor = teamPlaying.TeamColor
-- Respawn the player (moves them to spawn location)
player:LoadCharacter()
end
local function onPlayerDied(player, _character)
-- When someone dies, put them on the spectator team
player.Team = teamSpectators
end
local function onPlayerSpawned(player, character)
local human = character:WaitForChild("Humanoid")
human.Died:Connect(function()
onPlayerDied(player, character)
end)
end
local function onPlayerChatted(player, message)
if message:sub(1, playCommand:len()):lower() == playCommand then
play(player)
end
end
local function onPlayerAdded(player)
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
player.Chatted:Connect(function(message, _recipient)
onPlayerChatted(player, message)
end)
end
for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)

This code sample allows any player to chat "/jointeam " where is the name of a team. It uses string manipulation using string.sub and string.lower to make the command case-insensitive and allow for partial matches. For example, "/jointeam red" will match the team "Red Robins".

Join Team Command

local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
-- Command to choose a team (note the trailing space)
local joinCommand = "/jointeam "
local function findTeamByName(name)
-- First, check for the exact name of a team
if Teams:FindFirstChild(name) then
return Teams[name]
end
-- Let's check for case-insensitive partial matches, like "red" for "Red Robins"
for _, team in pairs(Teams:GetChildren()) do
if team.Name:sub(1, name:len()):lower() == name:lower() then
return team
end
end
-- If we get to this point, no team matched the one we were looking for :(
end
local function onPlayerChatted(player, message, _recipient)
-- Note: string.sub(message, ...) is the same as message:sub(...)
if message:sub(1, joinCommand:len()):lower() == joinCommand:lower() then
-- Matched "/JOINTEAM xyz" to our join command prefix "/jointeam "
local teamName = message:sub(joinCommand:len() + 1) -- Cut out the "xyz" from "/jointeam xyz"
local team = findTeamByName(teamName)
if team then
-- Set the team!
player.Team = team
player.Neutral = false
else
-- Tell the player that team could not be found :(
player.Team = nil
player.Neutral = true
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

TeamColor

Odczyt równoległy

Właściwość TeamColor określa, z którym zespołem jest związany gracz, zgodnie z właściwością Team.TeamColor tego zespołu.Zmiana tej właściwości zmieni Player.Team zgodnie z tym, który zespół ma tę samą BrickColor dla swojego Team.TeamColor.Jeśli żaden obiekt zespołu nie ma powiązanego koloru zespołu, gracz nie zostanie powiązany z zespołem.

Często lepszym pomysłem jest ustawienie Player.Team do odpowiedniego Team zamiast używać tej właściwości.Ustawienie tej właściwości często prowadzi do powtórzenia tej samej wartości BrickColor dla określonej drużyny na wiele skryptów; jest to coś, czego chcesz uniknąć, przestrzegając zasady "Nie powtarzaj siebie" (DRY).

Przykłady kodu

This code sample, although lengthy, is quite simple: detect when a player chats /play, then put them on the "Playing" team. When they die, move them back to the "Spectating" team.

Playing/Spectating Teams

local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
local teamPlaying = Teams.Playing
local teamSpectators = Teams.Spectating
local playCommand = "/play"
local function play(player)
player.Team = teamPlaying
player.TeamColor = teamPlaying.TeamColor
-- Respawn the player (moves them to spawn location)
player:LoadCharacter()
end
local function onPlayerDied(player, _character)
-- When someone dies, put them on the spectator team
player.Team = teamSpectators
end
local function onPlayerSpawned(player, character)
local human = character:WaitForChild("Humanoid")
human.Died:Connect(function()
onPlayerDied(player, character)
end)
end
local function onPlayerChatted(player, message)
if message:sub(1, playCommand:len()):lower() == playCommand then
play(player)
end
end
local function onPlayerAdded(player)
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
player.Chatted:Connect(function(message, _recipient)
onPlayerChatted(player, message)
end)
end
for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)

ThirdPartyTextChatRestrictionStatus

Tylko do odczytu
Bez replikacji
Zabezpieczenia skryptów Roblox
Odczyt równoległy

UserId

Odczyt równoległy

Identyfikator użytkownika to właściwość , która zawiera odczytywalny całkowity, który jednoznacznie i konsekwentnie identyfikuje każde konto użytkownika na Roblox.W przeciwieństwie do Instance.Name gracza, który może się zmienić zgodnie z obecną nazwa użytkownikaużytkownika, ta wartość nigdy nie zmieni się dla tego samego konta.

Właściwość ta jest niezbędna podczas zapisywania/ładowania danych gracza za pomocą GlobalDataStores .Użyj klucza magazynu danych ID gracza, aby każdy gracz miał unikalny klucz.

Przykłady kodu

The below example would print the UserId of every user who entered a game.

Player.UserId

local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.UserId)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players:GetPlayerByUserId

local Players = game:GetService("Players")
local player = Players:GetPlayerByUserId(1)
if player then
print("Player with userId 1 is in this server! Their name is: " .. player.Name)
else
print("Player with userId 1 is not in this server!")
end

The following code sample gives an example of a 'met the creator' badge system. This script will award a specified badge (BADGE_ID) to anyone who is in a server at the same time as the user associated with OWNER_ID.

Met the Creator Badge

local BadgeService = game:GetService("BadgeService")
local Players = game:GetService("Players")
local OWNER_ID = 212423 -- can use game.CreatorId for published places
local BADGE_ID = 1
local ownerInGame = false
local function playerAdded(newPlayer)
if newPlayer.UserId == OWNER_ID then
-- if new player is the owner, set ownerInGame to true and give everyone the badge
ownerInGame = true
for _, player in pairs(Players:GetPlayers()) do
-- don't award the owner
if player ~= newPlayer then
BadgeService:AwardBadge(player.UserId, BADGE_ID)
end
end
elseif ownerInGame then
-- if the owner is in the game, award the badge
BadgeService:AwardBadge(newPlayer.UserId, BADGE_ID)
end
end
local function playerRemoving(oldPlayer)
if oldPlayer.UserId == OWNER_ID then
ownerInGame = false
end
end
Players.PlayerAdded:Connect(playerAdded)
Players.PlayerRemoving:Connect(playerRemoving)

This code sample retrieves a player's saved gold from a data store and puts the returned value onto the leaderboard. Note that this sample does not save players' gold — it only loads it.

Data Store to Leaderboard

local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local goldDataStore = DataStoreService:GetDataStore("Gold")
local STARTING_GOLD = 100
local function onPlayerAdded(player)
local playerKey = "Player_" .. player.UserId
local leaderstats = Instance.new("IntValue")
leaderstats.Name = "leaderstats"
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Parent = leaderstats
local success, result = pcall(function()
return goldDataStore:GetAsync(playerKey) or STARTING_GOLD
end)
if success then
gold.Value = result
else
-- Failed to retrieve data
warn(result)
end
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)

Metody

AddReplicationFocus

()

Parametry

part: BasePart
Wartość domyślna: ""

Zwroty

()

ClearCharacterAppearance

()

Funkcja ClearCharacterAppearance usuwa wszystkie Accessory , Shirt , Pants , CharacterMesh i BodyColors z danego gracza Player.Character .Ponadto usuwa również koszulkę Decal na plecach gracza.Kolory części ciała postaci i twarz pozostaną niezmienione.Ta metoda nie robi nic, jeśli gracz nie ma postaci.

Nie usuwa t-shirts , sieci głów, ani twarzy.


Zwroty

()

Przykłady kodu

How to Clear a Character's Appearance

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local function onChildRemoved(child)
print(child.ClassName, "removed from character")
end
character.ChildRemoved:Connect(onChildRemoved)
player:ClearCharacterAppearance()
--> BodyColors removed from character
--> ShirtGraphic removed from character
--> Shirt removed from character
--> Pants removed from character
--> CharacterMesh removed from character
--> Hat removed from character
--> Shirt removed from character

DistanceFromCharacter

Funkcja DistanceFromCharacter Player zwraca odległość między głową postaci a danym punktem Vector3.Zwraca 0, jeśli gracz nie ma Player.Character.

Jest to przydatne przy określaniu odległości między graczem a innym obiektem lub lokalizacją w grze.

Jeśli chcesz określić odległość między dwiema instancjami lub pozycjami bez gracza, możesz użyć obserwuje:


local distance = (position1 - position2).Magnitude

Parametry

point: Vector3

Lokalizacja, z której mierzy się odległość gracza do.

Wartość domyślna: ""

Zwroty

Odległość w szpilkach między graczem a lokalizacją.

Przykłady kodu

This example demonstrates how to measure the distance between a player's Player.Character and another location.

This code will print the distance of each player's character from the origin (0, 0, 0):

Measuring the Distance Between a Player and a Position

local Players = game:GetService("Players")
for _, player in pairs(Players:GetPlayers()) do
print(player:DistanceFromCharacter(Vector3.new(0, 0, 0)))
end

GetJoinData

Zwraca słownik zawierający informacje opisujące, w jaki sposób Gracz dołącza do doświadczenia. Słownik zawiera którekolwiek z poniższych pól:


<th>Typ wartości</th>
<th>Opis</th>
</tr>
</thead>
<tbody>
<tr>
<th>ŹródłoGameId</th>
<td>number liczba</td>
<td>Klasa <code>Class.DataModel.GameId</code> z doświadczenia, z której teleportowany był <code>Gracz</code>.Tylko obecny, jeśli gracz teleportuje się do obecnego doświadczenia i jeśli serwer wezwie funkcję teleportacji.</td>
</tr>
<tr>
<th>ŹródłoPlaceId</th>
<td>number liczba</td>
<td>Klasa <code>Class.DataModel.PlaceId</code> z miejsca, z którego <code>Gracz</code> teleportował się.Tylko obecny, jeśli gracz teleportuje się do obecnego miejsca, a serwer wzywa funkcję teleportacji.</td>
</tr>
<tr>
<th>Referowany przez graczaId</th>
<td>number liczba</td>
<td>Klasa <code>Class.Player.UserId</code> gracza, który zaprosił obecnego gracza do doświadczenia.Użyj tych danych, aby zidentyfikować polecającego i uruchomić logikę nagrody.</td>
</tr>
<tr>
<th>Członkowie</th>
<td>matrixowy</td>
<td>Matryca zawierająca liczby <code>Class.Player.UserId</code> użytkowników teleportowanych obok <code>Gracza</code>.Tylko obecny, jeśli gracz teleportował się jako część grupa.</td>
</tr>
<tr>
<th>Teleportuj dane</th>
<td>odmiana</td>
<td>Odbija <code>teleportData</code> określoną w oryginalnym teleportować się.Przydatne do udostępniania informacji między serwerami, do których teleportuje się gracz.Tylko obecny, jeśli <code>teleportData</code> został określony i serwer wzywa funkcję teleportacji.</td>
</tr>
<tr>
<th>Dane uruchamiania</th>
<td>ciąg</td>
<td>Prosty lub zaokodowany w JSON ciąg znaków, który zawiera dane o uruchomieniu określone w <a href="../../../production/promotion/deeplinks.md">głębkim linku</a> URL lub <code>Class.ExperienceInviteOptions.LaunchData</code>.</td>
</tr>
<tr>
<th>Kontekst dołączania do gry</th><td>słownik</td>
<td>
Słownik, który zawiera odpowiednie informacje w oparciu o kontekst dołączenia do gry. Zawiera następujące klucze:
<ul>
<li><code>JoinSource</code> : <code>Enum.JoinSource</code></li><li><code>ItemType</code> : opcjonalny <code>Enum.AvatarItemType</code></li><li><code>AssetId</code> : opcjonalny <code>string</code> ></li><li><code>OutfitId</code> : opcjonalny <code>string</code> ></li><li><code>AssetType</code> : opcjonalny <code>Enum.AssetType</code> ></li>
</ul>
</td>
</tr>
</tbody>
Klucz

Zdobądź dane o dołączeniu i dane teleportacyjne

Jeśli serwer inicjuje teleportować sięgracza, słownik, który zwraca ta metoda, zawiera dane o teleportacji gracza.Metoda Player:GetJoinData() może być używana tylko do pobierania danych teleportacyjnych na serwerze.Aby pobrać dane na klientzie, użyj TeleportService:GetLocalPlayerTeleportData().

W przeciwieństwie do TeleportService:GetLocalPlayerTeleportData()``Class.Player:GetJoinData() dostarcza tylko dane teleportacyjne, które spełniają następujące kryteria bezpieczeństwa:

  • Gwarantuje, że został wysłany przez serwer Roblox w ciągu ostatnich 48 godzin.
  • Gwarantuje się, że został wysłany za pomocą tego Player.
  • Gwarantuje się, że SourcePlaceId i SourceGameId są miejscem i wszechświatem, z którego wysłano dane.Oznacza to, że możesz zweryfikować, czy dane o teleportacji pochodzą z zatwierdzonego miejsca.

Ponieważ te dane są przesyłane przez klienta, nadal może być potencjalnie nadużywane przez exploitera.Wrażliwe dane, takie jak waluta gracza, powinny być przekazywane za pomocą bezpiecznego rozwiązania, takiego jak Magazyny pamięci.


Zwroty

Słownik zawierający wartości PlaceId i UserId (patrz tabela w opisie).

Przykłady kodu

The following example tracks sources of traffic for analytics. By creating URLs with unique launch data for each social platform, you can determine the most popular traffic sources. The sample checks the source against a list of possible samples and discards any invalid sources because users can modify the launch data.

Tracking Traffic Sources

local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local analyticsStore = DataStoreService:GetDataStore("Analytics")
local ALLOWED_SOURCES = {
"twitter",
"youtube",
"discord",
}
local function onPlayerAdded(player)
local source = player:GetJoinData().LaunchData
-- check if the provided source is valid
if source and table.find(ALLOWED_SOURCES, source) then
-- update the data store to track the source popularity
local success, result = pcall(analyticsStore.IncrementAsync, analyticsStore, source)
if success then
print(player.Name, "joined from", source, "- total:", result)
else
warn("Failed to record join source: " .. result)
end
end
end
Players.PlayerAdded:Connect(onPlayerAdded)

The following example generates a URL with the user's ID used as launch data. It then displays the URL in a read-only text box that makes it easy for the user to copy and share the link with their friends. When a user joins the game using a referral link, you can use the launch data to reward the referrer.

Referral URL Generator

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local DIRECT_JOIN_URL = "https://www.roblox.com/games/start?placeId=%d&launchData=%s"
local textBox = script.Parent
local function generateReferralURL(player)
return DIRECT_JOIN_URL:format(game.PlaceId, player.UserId)
end
local function highlightAll()
if -- avoid recursive property updates
textBox:IsFocused() and not (textBox.SelectionStart == 1 and textBox.CursorPosition == #textBox.Text + 1)
then
textBox.SelectionStart = 1
textBox.CursorPosition = #textBox.Text + 1
end
end
textBox.Focused:Connect(highlightAll)
textBox:GetPropertyChangedSignal("SelectionStart"):Connect(highlightAll)
textBox:GetPropertyChangedSignal("CursorPosition"):Connect(highlightAll)
textBox.TextEditable = false
textBox.ClearTextOnFocus = false
textBox.Text = generateReferralURL(player)

The following example is a function that converts a table into a string you can use as launch data. The provided data is JSON encoded, checked for valid character length, and escaped with percent signs.

Using a Table as Launch Data

local HttpService = game:GetService("HttpService")
local DATA_CHARACTER_LIMIT = 200
local function encodeTableAsLaunchData(data)
-- convert the table to a string
local jsonEncodedData = HttpService:JSONEncode(data)
if #jsonEncodedData <= DATA_CHARACTER_LIMIT then
-- escape potentially invalid characters, such as spaces
local urlEncodedData = HttpService:UrlEncode(jsonEncodedData)
return true, urlEncodedData
else
-- report character limit error
return false, ("Encoded table exceeds %d character limit"):format(DATA_CHARACTER_LIMIT)
end
end
local sampleData = {
joinMessage = "Hello!",
urlCreationDate = os.time(),
magicNumbers = {
534,
1337,
746733573,
},
}
local success, encodedData = encodeTableAsLaunchData(sampleData)
if success then
print(encodedData)
else
warn("failed to encode launch data: " .. encodedData)
end

The following example attempts to decode launch data, using pcall to prevent an error in case the data is corrupt.

Decoding JSON Launch Data

local HttpService = game:GetService("HttpService")
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local launchData = player:GetJoinData().LaunchData
if launchData then
-- attempt to decode the data
local success, result = pcall(HttpService.JSONDecode, HttpService, launchData)
if success then
print(player.Name, "joined with data:", result)
else
-- this is probably due to the user messing with the URL
warn("Failed to parse launch data:" .. result)
end
end
end
Players.PlayerAdded:Connect(onPlayerAdded)

The following code sample is an example of how teleport data can be retrieved on the server using Player:GetJoinData(). This code, when ran in a Script in ServerScriptService, will listen for new Player|Players joining the game. When they join it will retrieve their teleport data (verifying it came from a valid place) to find their current level.

Server TeleportData Example

local Players = game:GetService("Players")
local approvedPlaceIds = { 1 } -- insert approved PlaceIds here
local function isPlaceIdApproved(placeId)
for _, id in pairs(approvedPlaceIds) do
if id == placeId then
return true
end
end
return false
end
local function onPlayerAdded(player)
local joinData = player:GetJoinData()
-- verify this data was sent by an approved place
if isPlaceIdApproved(joinData.SourcePlaceId) then
local teleportData = joinData.TeleportData
if teleportData then
local currentLevel = teleportData.currentLevel
print(player.Name .. " is on level " .. currentLevel)
end
end
end
Players.PlayerAdded:Connect(onPlayerAdded)

GetMouse

Funkcja GetMouse Player zwraca Mouse używaną przez klienta.Instancja myszy gracza może być używana do śledzenia wpisu myszy użytkownika, w tym kliknięć przycisków lewej i prawej myszy oraz ruchu i lokalizacji.

Usługa UserInputService zapewnia dodatkowe funkcje i wydarzenia do śledzenia wpisów użytkownika - szczególnie dla urządzeń, które nie używają myszy.

Uwaga:

  • Ten element musi być używany w LocalScript w celu prawidłowego działania online.
  • Po aktualizacji w lipcu 2014 r. ikonę myszy można teraz ustawić za pomocą tego metodu.

Zwroty

Przykłady kodu

The below example will print:

Button 1 is down

whenever the Players.LocalPlayer left clicks.

How to Track Mouse Input

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local mouse = player:GetMouse()
local function onButton1Down()
print("Button 1 is down")
end
mouse.Button1Down:Connect(onButton1Down)

GetNetworkPing

Zapis równoległy

GetNetworkPing zwraca izolowane opóźnienie sieciowe Player w sekundach.„Ping” to pomiar czasu potrzebnego na wysłanie danych z klienta na serwer, a następnie z powrotem.Nie wiąże się z dekodowaniem lub przetwarzaniem danych.

Dla strony klientowej LocalScripts ta funkcja może być wywołana tylko na Players.LocalPlayer.Funkcja ta jest przydatna w identyfikowaniu i debugowaniu problemów, które występują w scenariuszach dużego opóźnienia sieciowego.Jest również przydatny do maskowania opóźnień, takich jak dostosowanie prędkości rzucania animacji dla pocisków.


Zwroty

HasAppearanceLoaded

Funkcja HasAppearanceLoaded Player zwraca, czy wygląd gracza Player.Character został załadowany, czy nie.

Wygląd gracza obejmuje przedmioty takie jak gracz Shirt, Pants i Accessories.

Jest to przydatne przy określaniu, czy wygląd gracza został załadowany po raz pierwszy, gdy dołączył do gry, co można śledzić za pomocą wydarzenia Players.PlayerAdded.


Zwroty

Boolean wskazujący, czy wygląd postaci gracza został załadowany, czy nie.

Przykłady kodu

This example prints the result of Player:HasAppearanceLoaded() after a player joins the game until the player's appearance has loaded.

Check if a Player's Appearance Has Loaded

local Players = game:GetService("Players")
local function onPlayerAdded(player)
local loaded = player:HasAppearanceLoaded()
print(loaded)
while not loaded do
loaded = player:HasAppearanceLoaded()
print(loaded)
task.wait()
end
end
Players.PlayerAdded:Connect(onPlayerAdded)

IsVerified

Zwraca wartość binarną wskazującą na status weryfikacji gracza.Gdy prawda, gracz jest zweryfikowany.Weryfikacja obejmuje, ale nie ogranicza się do, nie-VOIP numeru telefonu lub weryfikacji tożsamości rządowej.

Podczas wdrażania IsVerified należy zachować ostrożność, aby zapewnić, że wdrożenie nie zablokuje nieumyślnie wszystkich nieweryfikowanych użytkowników.

Zauważ, że metoda może być wywołana tylko na serwerze backendowym.Wezwanie go z strony klienta kończy się błędem.Ponadto ta metoda zawsze zwróci false w Studio.


Zwroty

Boolean wskazujący, czy gracz jest zweryfikowany.

Przykłady kodu

The following example prints "true" if the player is verified.

Using IsVerified

local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player:IsVerified())
end
for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)

Kick

()

Metoda Kick() pozwala doświadczeniu łagodnie odłączyć klienta i opcjonalnie przekazać wiadomość do odłączonego użytkownika.Jest to przydatne do moderowania użytkowników obraźliwych.Powinieneś umożliwić tylko określonym użytkownikom, którym ufasz, uruchamianie tej metody na innych użytkownikach.

Wezwanie tej metody na Player bez argumentów rozłącza użytkownika z serwerem i dostarcza wiadomość ostrzeżenia domyślną.Wywołanie tej metody na Player wraz z ciągiem jako pierwszym argumentem zastępuje domyślną wiadomość za pomocą dostarczonego ciągu.

Podczas używania tej metody z LocalScript, tylko klient lokalnego użytkownika może zostać wyrzucony.

Parametry

message: string

Wiadomość, którą należy pokazać użytkownikowi po wyrzuceniu.

Wartość domyślna: ""

Zwroty

()

Move

()

Funkcja przesuwania Player spowoduje, że postać gracza będzie chodzić w określonym kierunku, aż zostanie zatrzymana lub przerwana przez gracza (za pomocą jego elementy sterujące).

Jest to przydatne, gdy piszesz skrypty NPC Humanoids, które poruszają się po mapie - ale nie są kontrolowane przez rzeczywisty input gracza.

Zauważ, że drugi argument funkcji wskazuje, czy dostarczone Vector3 powinno przenieść gracza względem światowych koordynatów (fałsz) lub gracza Camera (prawda).

Parametry

walkDirection: Vector3

Kierunek Vector3, w którym gracz powinien się poruszać.

Wartość domyślna: ""
relativeToCamera: boolean

Boolean wskazujący, czy gracz powinien się poruszać względem kamery gracza.

Wartość domyślna: false

Zwroty

()

Przykłady kodu

Demonstrates moving a player relative to their camera's position using Player:Move().

The script first waits for the player's Character and Humanoid to load, as both are required before calling Player:Move(). Otherwise a warning will display in the Output.

Moving the Player relative to their Camera

local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
-- Wait for the player's character and humanoid, which must exist before calling :Move()
local character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
character:WaitForChild("Humanoid")
-- The player will move until they are 50 studs away from the camera's position at the time of running
localPlayer:Move(Vector3.new(0, 0, -50), true)

RemoveReplicationFocus

()

Parametry

part: BasePart
Wartość domyślna: ""

Zwroty

()

SetAccountAge

()
Zabezpieczenia dodatku plug-in

Funkcja SetAccountAge ustawia Player.AccountAge dni gracza.

Służy do ustawienia właściwości Player, która opisuje, jak dawno konto gracza zostało zarejestrowane w dniach.

Nie ustawia to wieku gracza na koncie, ale wiek samego konta względem czasu, kiedy zostało po raz pierwszy utworzone.

Parametry

accountAge: number

Wiek konta w dniach.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

This example demonstrates how the Player:SetAccountAge() function would be used if it was accessible. It sets the local player's account age to 100 days.

Setting the Player's Account Age

local Players = game:GetService("Players")
local player = Players.LocalPlayer
player:SetAccountAge(100)

This code sample adds a mark to players showing about how old their account is. The mark uses a player's account age to determine if they are a New Player, Veteran Player or Regular Player.

Account Age Mark

local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- one week
local MIN_AGE_VETERAN = 365 -- one year
-- This function marks a part with text using a BillboardGui
local function mark(part, text)
local bbgui = Instance.new("BillboardGui")
bbgui.AlwaysOnTop = true
bbgui.StudsOffsetWorldSpace = Vector3.new(0, 2, 0)
bbgui.Size = UDim2.new(0, 200, 0, 50)
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0) -- Fill parent
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Add to part
bbgui.Parent = part
bbgui.Adornee = part
end
local function onPlayerSpawned(player, character)
local head = character:WaitForChild("Head")
if player.AccountAge >= MIN_AGE_VETERAN then
mark(head, "Veteran Player")
elseif player.AccountAge <= MAX_AGE_NEW_PLAYER then
mark(head, "New Player")
else
mark(head, "Regular Player")
end
end
local function onPlayerAdded(player)
-- Listen for this player spawning
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

SetSuperSafeChat

()
Zabezpieczenia dodatku plug-in

Ta metoda określa, czy gracz widzi czat filtrowany przez TextService:FilterStringAsync() zamiast zwykłych czatów.


local Players = game:GetService("Players")
local player = Players.LocalPlayer
player:SetSuperSafeChat(true)

Niezależnie od tego, czy gracz ma włączoną filtrację czatu, cały czat powinien być filtrowany przez TextService gdy jest transmitowany do innych graczy lub na ekranie gracza.TextService:FilterStringAsync() zwraca obiekt TextFilterResult, który może być filtrowany inaczej zgodnie z przeznaczeniem wiadomość.

Parametry

value: boolean

Boolean wskazujący, czy gracz widzi filtrowany czat, czy nie.

Wartość domyślna: ""

Zwroty

()

GetFriendsOnline

Wynik

Funkcja ta zwraca arkusz słowników przyjaciół online, ograniczony przez wartość maxFriends. Funkcja używa 30-sekundowej pamięci podręcznej.

W zwroconej matrycy niektóre pola są obecne tylko dla niektórych typów lokalizacji.Na przykład PlaceId nie będzie obecny, gdy LocationType wynosi 0 (mobilna strona internetowa).


<th>Typ</th>
<th>Opis</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>Id odwiedzającego</b></td>
<td>number liczba</td>
<td>Klasa <code>Class.Player.UserId</code> znajomy.</td>
</tr>
<tr>
<td><b>Nazwa użytkownika</b></td>
<td>ciąg</td>
<td>Nazwa użytkownika znajomy.</td>
</tr>
<tr>
<td><b>Nazwa wyświetlania</b></td>
<td>ciąg</td>
<td>Klasa <code>Class.Player.DisplayName</code> znajomy.</td>
</tr>
<tr>
<td><b>Ostatni online</b></td>
<td>ciąg</td>
<td>Kiedy przyjaciel ostatnio był online.</td>
</tr>
<tr>
<td><b>Jest online</b></td>
<td>booleanowy</td>
<td>Jeśli przyjaciel jest obecnie online.</td>
</tr>
<tr>
<td><b>Ostatnia lokalizacja</b></td>
<td>ciąg</td>
<td>Nazwa obecnej lokalizacji znajomy.</td>
</tr>
<tr>
<td><b>Identyfikator miejsca</b></td>
<td>number liczba</td>
<td>ID miejsca ostatniej lokalizacji znajomy.</td>
</tr>
<tr>
<td><b>Id gry</b></td>
<td>ciąg</td>
<td>Model danych/ID pracy z ostatniej lokalizacji znajomy.</td>
</tr>
<tr>
<td><b>Typ lokalizacji</b></td><td>liczba</td>
<td>
Typ lokalizacji ostatniej lokalizacji znajomy: 0 > Strona internetowa mobilna > > 1 > Strona internetowa w grze mobilnej > > 2 > Strona internetowa w chmurze > > 3 > Strona internetowa w chmurze > Źródł strony internetowej w chmurze Źródł strony w chmurze w chmurze w chmurze strony w chmurze strony w chmurze w chmurze strony w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze strony w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze w chmurze in chmurze in chmurze in chmurze in chmurze chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze wmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze w chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chmurze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in chm urze in ch urze in chm urze in chm urze in ch urze in ch urze in ch urze in ch urze in ch urze in ch urze in ch urze in ch urze in ch urze in ch urze in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ur in ch ur in ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ch ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur in ur
</td>
</tr>
</tbody>
Nazwa

Parametry

maxFriends: number

Maksymalna liczba przyjaciół online do zwrotu.

Wartość domyślna: 200

Zwroty

Słownik przyjaciół online (zobacz tabelę powyżej).

Przykłady kodu

This example demonstrates how to get a dictionary of a player's online friends. It returns the maximum number of friends specified by the argument, or 200 if an argument is not provided.

Get a List of Online Friends

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local success, result = pcall(player.GetFriendsOnline, player, 10)
if success then
for _, friend in pairs(result) do
print(friend.UserName)
end
else
warn("Failed to get online players: " .. result)
end

GetRankInGroup

Wynik

Funkcja GetRankInGroup Player zwraca rangę gracza w grupie jako całkowitą liczbę od 0 do 255, gdzie 0 jest nieczłonkiem, a 255 jest właścicielem grupa.

Używanie tego w Script, w przeciwieństwie do LocalScript, nie da ci najnowszych informacji.Jeśli gracz opuści grupę, gdy jest w grze, GetRankInGroup nadal będzie myśleć, że jest w tej grupie, dopóki nie opuszczać.Jednak nie dzieje się tak, gdy jest używany z lokalnym skryptem.

Dzieje się tak, ponieważ metoda przechowuje wyniki, więc wiele wezwań GetRankInGroup na tym samym graczu z tym samym ID grupy da wynik taki sam, jak przy pierwszym wezwaniu metody z danym ID grupy.Zachowanie buforowania działa na podstawie każdego pary: serwer nie dzieli tego samego buforu z klientem.

Parametry

groupId: number

The groupId z określonej grupa.

Wartość domyślna: ""

Zwroty

Ranga gracza w grupa.

Przykłady kodu

The code below will check if a player that has entered the game has a rank equal to 255, in a group with an ID of 2. If they are, it will print "Player is the owner of the group, 'LOL'!", otherwise "Player is NOT the owner of the group, 'LOL'!" will be printed to the output.

How to Check a Player's Rank in a Group

local Players = game:GetService("Players")
local function onPlayerAdded(player)
if player:GetRankInGroup(2) == 255 then
print("Player is the owner of the group, 'LOL'!")
else
print("Player is NOT the owner of the group, 'LOL'!")
end
end
Players.PlayerAdded:Connect(onPlayerAdded)

GetRoleInGroup

Wynik

Funkcja GetRoleInGroup Player zwraca rolę gracza w grupie jako ciąg lub gościa jeśli gracz nie jest częścią grupa.

Używanie tego w Script, w przeciwieństwie do LocalScript, nie da ci najnowszych informacji.Jeśli gracz opuści grupę, gdy jest w grze, GetRoleInGroup nadal będzie myśleć, że jest w tej grupie, dopóki nie opuszczać.Jednak nie dzieje się tak, gdy jest używany z lokalnym skryptem.

Dzieje się tak, ponieważ metoda przechowuje wyniki, więc wiele wezwań GetRoleInGroup na tym samym graczu z tym samym ID grupy da wynik taki sam, jak przy pierwszym wezwaniu metody z danym ID grupy.Zachowanie buforowania działa na podstawie każdego pary: serwer nie dzieli tego samego buforu z klientem.

Parametry

groupId: number

Grupa groupId z określonej grupa.

Wartość domyślna: ""

Zwroty

Rola gracza w określonej grupalub Gość, jeśli gracz nie jest członek.

Przykłady kodu

The code below will print the name of the rank that the player is currently a part of, in a specific group. In this instance we're checking what rank the player is within a group which has a group ID of 2.

How to Check a Player's Role in a Group

local Players = game:GetService("Players")
local function onPlayerAdded(player)
print("Player is ranked as '", player:GetRoleInGroup(2), "' in group, 'LOL'!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

IsFriendsWith

Wynik

Funkcja ta wysyła prośbę na stronę internetową Roblox, pytając, czy gracz jest przyjacielem innego użytkownika, biorąc pod uwagę Player.UserId tego użytkownika.Funkcja ta przechowuje wyniki, więc wiele wezwań funkcji na tym samym graczu z tymi samymi Player.UserId może nie dać najnowszego wyniku.Nie dzieje się tak, gdy jest używany w LocalScript .

Parametry

userId: number

The Player.UserId z określonym graczem.

Wartość domyślna: ""

Zwroty

Boolean wskazujący, czy gracz jest przyjacielem określonego użytkownika.

Przykłady kodu

The below example would print whether or not a recently added player is friends with Gordonrox24.

How to Check if a Player is a Friend

local Players = game:GetService("Players")
local function onPlayerAdded(player)
if player:IsFriendsWith(146569) then
print(player.Name .. " is friends with gordonrox24!")
end
end
Players.PlayerAdded:Connect(onPlayerAdded)

IsInGroup

Wynik

Funkcja IsInGroup Player wysyła prośbę na stronę internetową Roblox, pytając, czy gracz jest członkiem grupa, biorąc pod uwagę ID tej grupa.

Używanie tego w Script, w przeciwieństwie do LocalScript, nie da ci najnowszych informacji.Jeśli gracz opuści grupę, gdy jest w grze, IsInGroup nadal będzie myśleć, że jest w tej grupie, dopóki nie opuszczać.Jednak nie dzieje się tak, gdy jest używany z lokalnym skryptem.

Dzieje się tak, ponieważ metoda przechowuje wyniki, więc wiele wezwań IsInGroup na tym samym graczu z tym samym ID grupy da wynik taki sam, jak przy pierwszym wezwaniu metody z danym ID grupy.Zachowanie buforowania działa na podstawie każdego pary: serwer nie dzieli tego samego buforu z klientem.

Parametry

groupId: number

Grupa groupId z określonej grupa.

Wartość domyślna: ""

Zwroty

Boolean wskazujący, czy gracz znajduje się w określonej grupa.

Przykłady kodu

The below example will print "Player is in the Roblox Fan club!" if the newly added player is in the group with a groupId of 7.

How to Check if a Player is in a Group

local Players = game:GetService("Players")
local function onPlayerAdded(player)
if player:IsInGroup(7) then
print("Player is in the Roblox Fan club!")
end
end
Players.PlayerAdded:Connect(onPlayerAdded)

LoadCharacter

()
Wynik

Funkcja LoadCharacter Player tworzy nową postać dla gracza, usuwając starą.Oczyszcza również Backpack i PlayerGui gracza.

Jest to przydatne w przypadkach, gdy chcesz ponownie załadować postać bez zabijania gracza, na przykład gdy chcesz załadować nowy wygląd postaci po zmianie wyglądu gracza Player.CharacterAppearance.

Uwaga: Funkcja jest podobna do Player:LoadCharacterBlocking(), ale żądanie jest przetwarzane asynergicznie zamiast synchronicznie.Oznacza to, że inne zadania będą mogły kontynuować się, gdy postać jest wczytywana, w tym renderowanie gry i wszelkie inne zadania.Ponadto ta funkcja może być używana w skrypcie, podczas gdy LoadCharacterBlocking nie może.

Po wezwaniu LoadCharacter dla pojedynczego gracza nie zaleca się ponownego wezwania go dla tego samego gracza, dopóki nie wybuchnie wydarzenie Player.CharacterAppearanceLoaded tego gracza.

Zamówienie wydarzenia ładowania postaci

Wezwanie Player:LoadCharacter() z Avatarem R15 uruchamia wydarzenia w następującej kolejności (uwaga: kolejność R6 jest inna):

  1. Zestawy postaci gracza
  2. Gracz.Dodano postać strzela
  3. Gracz.Zmieniony wystrzeliwuje się z wartością "Postać"
  4. Inicjalizacja wyglądu postaci
  5. Gracz.Wystąpienie postaci gracza załadowane
  6. Charakter.Parent ustawia do modelu danych
  7. Budowanie postaci i skalowanie postaci
  8. Postać przenosi się do lokalizacji spawnu
  9. Wrożenie LoadCharacter zwrotów

Zwroty

()

Przykłady kodu

This script turns off auto-loading and simulates character respawning.

Turn Off Auto-Loading and Simulate Character Respawn

local Players = game:GetService("Players")
local RESPAWN_DELAY = 5
Players.CharacterAutoLoads = false
local function onPlayerAdded(player)
local function onCharacterAdded(character)
local humanoid = character:WaitForChild("Humanoid")
local function onDied()
task.wait(RESPAWN_DELAY)
player:LoadCharacter()
end
humanoid.Died:Connect(onDied)
end
player.CharacterAdded:Connect(onCharacterAdded)
player:LoadCharacter()
end
Players.PlayerAdded:Connect(onPlayerAdded)

LoadCharacterWithHumanoidDescription

()
Wynik

Funkcja ta generuje awatara, więc ma wszystko wyposażone w przekazane w HumanoidDescription .

Po wywołaniu LoadCharacterWithHumanoidDescription dla pojedynczego gracza nie zaleca się ponownego wywołania funkcji dla tego samego gracza, dopóki nie zostanie uruchomione wydarzenie Player.CharacterAppearanceLoaded gracza.

Zobacz także:

  • System opisu ludzkiego, artykuł, który wyjaśnia system opisu ludzkiego w większym szczególe i dostarcza kilka przykładów skryptowania

Parametry

humanoidDescription: HumanoidDescription

A HumanoidDescription zawierająca cechy takie jak części ciała/kolory, skalowanie ciała, akcesoria, ubraniei animacje, które zostaną wyposażone w załadowanym charakterze.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

To create a HumanoidDescription and then spawn a character with that description applied, add a Script (not a LocalScript) to the workspace and add this code to it.

Spawn Characters With HumanoidDescription

local Players = game:GetService("Players")
Players.CharacterAutoLoads = false
local function onPlayerAdded(player)
local humanoidDescription = Instance.new("HumanoidDescription")
humanoidDescription.HatAccessory = "2551510151,2535600138"
humanoidDescription.BodyTypeScale = 0.1
humanoidDescription.ClimbAnimation = 619521311
humanoidDescription.Face = 86487700
humanoidDescription.GraphicTShirt = 1711661
humanoidDescription.HeadColor = Color3.new(0, 1, 0)
player:LoadCharacterWithHumanoidDescription(humanoidDescription)
end
Players.PlayerAdded:Connect(onPlayerAdded)

RequestStreamAroundAsync

()
Wynik

Dla doświadczeń, w których włączono transmisję instancji strumieniem, żądania, aby serwer przesyłał do regionów gracza (części i tereny) wokół określonej lokalizacji X , Y , Z w świecie 3D.Przydatne jest, jeśli doświadczenie wie, że CFrame gracza zostanie ustawione na określonej lokalizacji w najbliższej przyszłości.Bez podania lokalizacji za pomocą tego wezwania gracz może nie przesyłać treści do celu, co skutkuje przerwą w przesyłaniu lub innym niepożądanym zachowaniem.

Efekt tego wezwania będzie tymczasowy i nie ma żadnych gwarancji, co zostanie przesłane wokół określonej lokalizacji.Ograniczenia pamięci klienta i warunki sieciowe mogą wpłynąć na to, co będzie dostępne na klientzie.

Ostrzeżenie o użyciu

Żądanie przesyłania wokół obszaru nie jest gwarancją , że treść będzie dostępna, gdy żądanie zostanie zakończone, ponieważ przesyłanie jest wpływane przez przepustowość sieci klienta, ograniczenia pamięci i inne czynniki.

Parametry

position: Vector3

Lokalizacja świata, w której żądany jest strumień.

Wartość domyślna: ""
timeOut: number

Opcjonalny czas wygaśnięcia dla prośba.

Wartość domyślna: 0

Zwroty

()

Zdarzenia

CharacterAdded

Wydarzenie Dodano postać występuje, gdy postać gracza się pojawia (lub odrodzi się).To wydarzenie wystrzeliwuje się niedługo po ustawieniu Player.Character na wartość nie- nil lub wezwaniu Player:LoadCharacter(), które jest przed tym, jak znak zostanie przypisany do Workspace.

Można to używać wraz z wydarzeniem Player.CharacterRemoving, które wystrzeliwuje tuż przed usunięciem postaci gracza, zwykle po śmierci.W związku z tym oba te wydarzenia mogą potencjalnie wystrzelić wiele razy, gdy gracze umierają, a następnie odrodzić się w miejsce.Jeśli chcesz wykryć, kiedy gracz dołącza lub opuszcza grę, użyj wydarzeń Players.PlayerAdded i Players.PlayerRemoving.

Zauważ, że Humanoid i jego domyślne części ciała (głowa, tułów i kończyny) będą istniały, gdy wydarzenie się uruchomi, ale przedmioty odzieżowe, takie jak Hats , Shirts i Pants mogą potrwać kilka sekund, aby zostać dodane do postaci.Połącz Instance.ChildAdded z dodanym znakiem, aby je wykryć, lub poczekaj na wydarzenie Player.CharacterAppearanceLoaded, aby mieć pewność, że znak jest w pełni wyposażony.

Parametry

character: Model

Instancja postaci, która się pojawiła/odrodziła.


Przykłady kodu

This code sample demonstrates the usage of Players.PlayerAdded, Player.CharacterAdded and Player.CharacterRemoving in order to detect the spawning and despawning of players' characters. You can use this as a boilerplate script to make changes to players' characters as they spawn, such as changing Humanoid.WalkSpeed.

Detecting Player Spawns and Despawns

local Players = game:GetService("Players")
local function onCharacterAdded(character)
print(character.Name .. " has spawned")
end
local function onCharacterRemoving(character)
print(character.Name .. " is despawning")
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
player.CharacterRemoving:Connect(onCharacterRemoving)
end
Players.PlayerAdded:Connect(onPlayerAdded)

This code sample will cause players to respawn at the same place they died. It does this by keeping track of where the player despawned using Player.CharacterRemoving. Note that the player's location is saved on-despawn, not on-death. This can be problematic if the player falls off a ledge and dies due to Workspace.FallenPartsDestroyHeight - their respawn position won't be saved in this case.

It's also important to note the need to "forget" the location of players who leave the game. We use Instance.ChildRemoved on Players instead of Players.PlayerRemoving. This is because PlayerRemoving fires before CharacterRemoving - and we need to make sure we don't forget the player's respawn location then immediately remember a new one (this is a memory leak; potentially many players could visit, respawn and leave). So, we use ChildRemoved on Players so the event fires after the character is removed.

Respawn at Despawn Location

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
-- This table maps "Player" objects to Vector3
local respawnLocations = {}
local function onCharacterAdded(character)
local player = Players:GetPlayerFromCharacter(character)
-- Check if we saved a respawn location for this player
if respawnLocations[player] then
-- Teleport the player there when their HumanoidRootPart is available
local hrp = character:WaitForChild("HumanoidRootPart")
-- Wait a brief moment before teleporting, as Roblox will teleport the
-- player to their designated SpawnLocation (which we will override)
RunService.Stepped:wait()
hrp.CFrame = CFrame.new(respawnLocations[player] + Vector3.new(0, 3.5, 0))
end
end
local function onCharacterRemoving(character)
-- Get the player and their HumanoidRootPart and save their death location
local player = Players:GetPlayerFromCharacter(character)
local hrp = character:FindFirstChild("HumanoidRootPart")
if hrp then
respawnLocations[player] = hrp.Position
end
end
local function onPlayerAdded(player)
-- Listen for spawns/despawns
player.CharacterAdded:Connect(onCharacterAdded)
player.CharacterRemoving:Connect(onCharacterRemoving)
end
local function onPlayerRemoved(player)
-- Forget the respawn location of any player who is leaving; this prevents
-- a memory leak if potentially many players visit
respawnLocations[player] = nil
end
-- Note that we're NOT using PlayerRemoving here, since CharacterRemoving fires
-- AFTER PlayerRemoving, we don't want to forget the respawn location then instantly
-- save another right after
Players.PlayerAdded:Connect(onPlayerAdded)
Players.ChildRemoved:Connect(onPlayerRemoved)

This code sample automatically removes Accessory objects like hats from the Player's character when they respawn. Warning: this includes hair, so this script may cause acute baldness.

When the Character() is added, we wait for RunService.Stepped to fire once (using the wait function of events). This is so the accessory removal logic runs one frame after the character spawns. A warning can appear if you delete accessories too quickly after the player spawns, so waiting one frame will avoid that.

Accessory Remover

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local function destroyAccessory(object)
if object:IsA("Hat") or object:IsA("Accessory") then
object:Destroy()
end
end
local function onCharacterAdded(character)
-- Wait a brief moment before removing accessories to avoid the
-- "Something unexpectedly set ___ parent to NULL" warning
RunService.Stepped:Wait()
-- Check for any existing accessories in the player's character
for _, child in pairs(character:GetChildren()) do
destroyAccessory(child)
end
-- Hats may be added to the character a moment after
-- CharacterAdded fires, so we listen for those using ChildAdded
character.ChildAdded:Connect(destroyAccessory)
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)

CharacterAppearanceLoaded

To wydarzenie wystrzeliwuje się, gdy pełny wygląd Player.Character został wstawiony.

A Player.Character ogólnie ma zakres obiektów modyfikujących jego wygląd, w tym Accoutrements , Shirts , Pants i CharacterMeshes .To wydarzenie zostanie uruchomione, gdy wszystkie takie obiekty zostaną wstawione do Player.Character .

To wydarzenie wysyłane jest tylko na serwerze.

Jednym z użyć tego wydarzenia jest zapewnienie, że wszystkie akcesoria zostały załadowane przed ich zniszczeniem. Zobacz poniżej przykład tego.

Parametry

character: Model

The Class.Player.Character``Class.Model .


Przykłady kodu

This code sample will wait for accessories to fully load, print out how many there are, and then destroy them all.

Remove Accessories After Loading

local Players = game:GetService("Players")
local function onPlayerAddedAsync(player)
local connection = player.CharacterAppearanceLoaded:Connect(function(character)
-- All accessories have loaded at this point
local humanoid = character:FindFirstChildOfClass("Humanoid")
local numAccessories = #humanoid:GetAccessories()
print(("Destroying %d accessories for %s"):format(numAccessories, player.Name))
humanoid:RemoveAccessories()
end)
-- Make sure we disconnect our connection to the player after they leave
-- to allow the player to get garbage collected
player.AncestryChanged:Wait()
connection:Disconnect()
end
for _, player in Players:GetPlayers() do
task.spawn(onPlayerAddedAsync, player)
end
Players.PlayerAdded:Connect(onPlayerAddedAsync)

CharacterRemoving

Wydarzenie CharacterRemoving uruchamia się tuż przed usunięciem postaci gracza, tak jak przy respawnowaniu gracza.

To wydarzenie można używać obok wydarzenia Player.CharacterAdded, które uruchamia się, gdy postać gracza się pojawia lub odrodzi.Na instancja, jeśli chcesz drukować wiadomość za każdym razem, gdy gracz się pojawia i umiera:


local Players = game:GetService("Players")
local function onCharacterSpawned(player)
print(player.Name .. " is spawning")
end
local function onCharacterDespawned(player)
print(player.Name .. " is despawning")
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function()
onCharacterSpawned(player)
end)
player.CharacterRemoving:Connect(function()
onCharacterDespawned(player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

To wydarzenie dotyczy tylko Character z Player .Jeśli zamiast tego musisz śledzić, kiedy gracz dołącza/odchodzi z gry, użyj wydarzeń Players.PlayerAdded i Players.PlayerRemoving.

Parametry

character: Model

Instancja postaci, która jest usuwana.


Przykłady kodu

This example prints the name of the character being removed, followed by "has died".

For instance, if Shedletsky's character was to die in-game, "Shedletsky has died." would be printed.

Player.CharacterRemoving

game.Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(function(character)
print(character.Name .. " has died.")
end)
end)

Chatted

Wydarzenie Czat uruchamia się, gdy Player typuje wiadomość i naciśnie Enter w dostarczonej przez Roblox barze czatu.Wykonuje się to za pomocą niektórych wiązań Luau przez domyślnym skryptem czatu.Możesz uniemożliwić graczom rozmowę za pomocą StarterGui:SetCoreGuiEnabled() i wyłączyć czat Enum.CoreGuiType.

Komendy czatu

Używając tego wydarzenia i niektórych funkcji manipulacji ciągiem, takich jak string.sub() i string.lower(), można tworzyć komendy czatu, nawet z argumentami takimi jak nazwy graczy.Zazwyczaj polecenia są prefikowane tak jak heal PlayerName .Aby sprawdzić prefiks w ciągu znaku, użyj string.sub() na wiadomości, aby sprawdzić podstronę wiadomość: string.sub(message, 1, 6) == "/heal " (zauważ uwzględnienie spacji).Następnie wyodrębnij resztę polecenia za pomocą string.sub() ponownie: string.sub(message, 7) będzie równy nazwie gracza.Sprawdź, czy ten gracz istnieje, a jeśli tak, wykonaj akcję polecenia (w tym przykładzie leczenie ich).Sprawdź przykłady kodu dla przykładów poleceń czatu.

Filtrowanie

Tekst wiadomości wystrzelony za pomocą tego zdarzenia jest niefiltrowany .Jeśli wyświetlasz wejście gracza, takie jak czat, do innych graczy w dowolnej formie, musi być filtrowane za pomocą Chat:FilterStringAsync() .Weź to pod uwagę przy tworzeniu własnych systemów czat; jeśli twoja gra nie filtruje czatu poprawnie, może zostać podjęta działania moderacyjne przeciwko niej.

Parametry

message: string

Treść wiadomości, którą gracz wpisał w czacie.

recipient: Player

Przestarzałe. Dla wiadomości szeptanych był to Gracz, który był przeznaczonym celem wiadomośćczatu.


Przykłady kodu

Setting chatted for all players. There is an easy way to make the Chatted event registered on all players. Simply use the Players.PlayerAdded event in combination with this event.

Player.Chatted

local Players = game:GetService("Players")
local function onPlayerAdded(player)
local function onChatted(message)
-- do stuff with message and player
print(message)
end
player.Chatted:Connect(onChatted)
end
Players.PlayerAdded:Connect(onPlayerAdded)

This code sample, although lengthy, is quite simple: detect when a player chats /play, then put them on the "Playing" team. When they die, move them back to the "Spectating" team.

Playing/Spectating Teams

local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
local teamPlaying = Teams.Playing
local teamSpectators = Teams.Spectating
local playCommand = "/play"
local function play(player)
player.Team = teamPlaying
player.TeamColor = teamPlaying.TeamColor
-- Respawn the player (moves them to spawn location)
player:LoadCharacter()
end
local function onPlayerDied(player, _character)
-- When someone dies, put them on the spectator team
player.Team = teamSpectators
end
local function onPlayerSpawned(player, character)
local human = character:WaitForChild("Humanoid")
human.Died:Connect(function()
onPlayerDied(player, character)
end)
end
local function onPlayerChatted(player, message)
if message:sub(1, playCommand:len()):lower() == playCommand then
play(player)
end
end
local function onPlayerAdded(player)
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
player.Chatted:Connect(function(message, _recipient)
onPlayerChatted(player, message)
end)
end
for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)

This code sample allows any player to chat "/jointeam " where is the name of a team. It uses string manipulation using string.sub and string.lower to make the command case-insensitive and allow for partial matches. For example, "/jointeam red" will match the team "Red Robins".

Join Team Command

local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
-- Command to choose a team (note the trailing space)
local joinCommand = "/jointeam "
local function findTeamByName(name)
-- First, check for the exact name of a team
if Teams:FindFirstChild(name) then
return Teams[name]
end
-- Let's check for case-insensitive partial matches, like "red" for "Red Robins"
for _, team in pairs(Teams:GetChildren()) do
if team.Name:sub(1, name:len()):lower() == name:lower() then
return team
end
end
-- If we get to this point, no team matched the one we were looking for :(
end
local function onPlayerChatted(player, message, _recipient)
-- Note: string.sub(message, ...) is the same as message:sub(...)
if message:sub(1, joinCommand:len()):lower() == joinCommand:lower() then
-- Matched "/JOINTEAM xyz" to our join command prefix "/jointeam "
local teamName = message:sub(joinCommand:len() + 1) -- Cut out the "xyz" from "/jointeam xyz"
local team = findTeamByName(teamName)
if team then
-- Set the team!
player.Team = team
player.Neutral = false
else
-- Tell the player that team could not be found :(
player.Team = nil
player.Neutral = true
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

Idled

To wydarzenie wystrzeliwuje się około dwóch minut po tym, jak klasa silnika gry zaklasyfikuje player jako bezczynność.Czas to liczba sekund, które upłynęły od tego momentu.Wydarzenie nadal strzela co 30 sekund tak długo, jak gracz pozostaje bezczynność.

To wydarzenie wystrzeliwuje się tylko w skryptach klienta, nie w skryptach serwera; użyj RemoteEvent, aby powiadomić serwer o nieaktywnych graczach.

Roblox automatycznie odłącza graczy, którzy byli nieaktywni przez co najmniej 20 minut, więc to wydarzenie jest przydatne do ostrzeżenia graczy, że zostaną odłączeni wkrótce, odłączając graczy przed tymi 20 minutami lub innymi funkcjami z dala od klawiatury (AFK).

Aby śledzić, jak często występowaćautomatyczne odłączenia, spróbuj skorelować to wydarzenie z wystąpieniami Players.PlayerRemoving.

Parametry

time: number

Czas w sekundach, w których gracz był bezczynność.


Przykłady kodu

Prints how long a player has been idle for.

Player.Idled

local Players = game:GetService("Players")
local function onIdled(idleTime)
print(`Player has been idle for {idleTime} seconds`)
if idleTime > 900 then
-- warn player that they've been idle for 15 minutes
-- and will be disconnected in another 5
end
end
Players.LocalPlayer.Idled:Connect(onIdled)

OnTeleport

Wystrzeliwany, gdy zmienia się stan teleportacji gracza. To wydarzenie jest przydatne do wykrycia, czy teleportacja się powiodła.

Jaki jest stan teleportacji?

Gdy wniosek o teleportację jest wysyłany za pomocą TeleportService, istnieje seria etapów, zanim Player zostanie przeteleportowany.Obecny etap reprezentowany jest przez wartość Enum.TeleportState, którą dostarcza OnTeleport.Zobacz poniżej praktyczny przykład tego.

Parametry

placeId: number

ID miejsca, do którego Player jest teleportowany.

spawnName: string

Nazwa spawnu do teleportacji, jeśli TeleportService:TeleportToSpawnByName() została użyta.


Przykłady kodu

This example prints which stage of a teleport a player is at, as well as printing if the teleport was a failure.

Player.OnTeleport

local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local playerOnTeleport = player
player.OnTeleport:Connect(function(teleportState, _placeId, _spawnName)
if teleportState == Enum.TeleportState.Started then
print("Teleport started (" .. playerOnTeleport.Name .. ")")
elseif teleportState == Enum.TeleportState.WaitingForServer then
print("Teleport waiting for server (" .. playerOnTeleport.Name .. ")")
elseif teleportState == Enum.TeleportState.InProgress then
print("Teleport in progress (" .. playerOnTeleport.Name .. ")")
elseif teleportState == Enum.TeleportState.Failed then
print("Teleport failed! (" .. playerOnTeleport.Name .. ")")
end
end)
end)