Player

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Un objeto Jugador es un cliente que está actualmente conectado.Estos objetos se agregan al servicio Players cuando se conecta un nuevo jugador, luego se eliminan cuando finalmente se desconectan del servidor.

La propiedad Instance.Name refleja el nombre de usuario del jugador.Al guardar información sobre un jugador, debe usar su Player.UserId ya que es posible que un jugador cambie su nombre de usuario.

Hay varios métodos similares en el servicio Players para trabajar con objetos de Jugador. Usa estos sobre sus respectivos métodos Instance:

  • Puedes obtener una tabla de objetos de jugador actuales usando Players:GetPlayers() ; una vez más, utiliza esto en lugar de Instance:GetChildren() .
  • Para detectar la adición de objetos de Jugador, se recomienda utilizar el evento Players.PlayerAdded (en lugar de Instance.ChildAdded en el servicio Players).
  • Del mismo modo, puedes detectar la eliminación de objetos de Jugador usando , que se activa justo antes de que se elimine el Jugador (en lugar de que se activa después).Esto es importante si está guardando información sobre el jugador que podría eliminarse o limpiarse al retirarlo.

Muestras de código

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)

Resumen

Propiedades

Métodos

Eventos

Propiedades

AccountAge

Solo lectura
No replicado
Leer paralelo

El AccountAge es una propiedad Player que describe cuánto tiempo atrás se registró una cuenta de jugador en días.Se establece usando la función Player:SetAccountAge(), que no puede ser accedida por scripts.

Esta propiedad es útil para mostrar condicionalmente el contenido nuevo de los jugadores de Roblox, como tutoriales.

Muestras de código

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

Leer paralelo

La propiedad AutoJumpEnabled determina si el Player.Character de un Player usando un dispositivo móvil saltará automáticamente cuando golpee un obstáculo.Esto puede hacer que los niveles sean más navegables mientras estás en un dispositivo móvil.

Cuando el jugador se une al juego, el valor StarterPlayer.AutoJumpEnabled determina el estado inicial de esta propiedad.Luego, esta propiedad determina el valor de la propiedad Humanoid.AutoJumpEnabled de la Player.Character en el momento del regeneración.En otras palabras, es posible establecer el comportamiento de salto automático en una base por caracteres, por jugadores y por juegos usando estas tres propiedades.

Muestras de código

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

Leer paralelo

La propiedad CameraMaxZoomDistance Player establece la distancia máxima en studs que la cámara puede estar del personaje con las cámaras predeterminadas.

En otras palabras, controla la distancia máxima que la cámara del jugador se permite alejar.

El valor predeterminado de esta propiedad se establece por StarterPlayer.CameraMaxZoomDistance .Si este valor se establece en un valor inferior a Player.CameraMinZoomDistance , se aumentará a CameraMinZoomDistance.

Muestras de código

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

Leer paralelo

La propiedad CameraMinZoonDistance Player establece la distancia mínima en studs que la cámara puede estar del personaje con las cámaras predeterminadas.

En otras palabras, controla la distancia mínima en la que la cámara del jugador se puede acercar.

El valor predeterminado de esta propiedad se establece por StarterPlayer.CameraMinZoomDistance .Si este valor se establece en un valor superior a Player.CameraMaxZoomDistance se reducirá a CameraMaxZoomDistance.

Muestras de código

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

Leer paralelo

La propiedad Modo de cámara establece el modo de cámara del jugador, predeterminando el modo de tercera persona.

Tercera persona

En el modo predeterminado de tercera persona ( Enum.CameraMode.Classic ), el personaje se puede ver en la cámara. Mientras que en este modo, el comportamiento predeterminado es:

  • Los jugadores pueden hacer clic derecho y arrastrar (ratón), tocar y arrastrar (móvil), usar el joystick secundario (controlador para juego) o presionar las flechas izquierda/derecha (teclado) para girar la cámara alrededor de su personaje.
  • Cuando un jugador mueve a su personaje, se enfrenta en la dirección de movimiento correspondiente.
  • Los jugadores pueden acercarse y alejarse libremente, incluso para la primera persona en zoom completo.

Primera persona

En el modo de primera persona ( Enum.CameraMode.LockFirstPerson ), la cámara del jugador se acerca todo el camino.A menos que haya una interfaz gráfica visible presente con la propiedad GuiButton.Modal configurada en true , mover el ratón, arrastrar en el móvil o usar el joystick secundario en un gamepad girará la cámara alrededor del personaje.

Muestras de código

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

Leer paralelo

La propiedad CanLoadCharacterAppearance Player determina si se cargará la apariencia del personaje cuando el jugador se genere.El valor predeterminado de esta propiedad se establece por StarterPlayer.LoadPlayerAppearance .

Si verdadero , el personaje cargará la apariencia del jugador correspondiente al jugador Player.CharacterAppearanceId .

Si false , el jugador se generará con una apariencia predeterminada - un modelo de personaje gris sin sombreros, camisas, pantalones, etc.

Intentar establecer la propiedad después de que el personaje se haya generado no cambiará el personaje, debe llamar Player:LoadCharacter() para cargar la nueva aspecto, look.

Muestras de código

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

Leer paralelo

La propiedad Carácter contiene una referencia a un Model que contiene un Humanoid , partes del cuerpo, scripts y otros objetos requeridos para simular el avatar del jugador en la experiencia.El modelo está patrocinado por el Workspace pero se puede mover.Se carga automáticamente cuando Players.CharacterAutoLoads es true y se puede cargar manualmente de otra manera usando Player:LoadCharacter() .

Inicialmente, esta propiedad es nil y se establece cuando el personaje del jugador aparece por primera vez.Usa el evento Player.CharacterAdded para detectar cuando el personaje de un jugador se carga correctamente, y el evento Player.CharacterRemoving para detectar cuando el personaje está a punto de desaparecer.Evite usar Object:GetPropertyChangedSignal() en esta propiedad.

Tenga en cuenta que LocalScripts que se clonan de StarterGui o StarterPack en un jugador de PlayerGui o Backpack respectivamente se ejecutan a menudo antes de que se reemplace el modelo de personaje antiguo, por lo que Player.Character puede referirse al modelo antiguo cuya propiedad Parent es nil.Por lo tanto, en un LocalScript bajo StarterGui o StarterPack , es recomendable asegurarse de que el padre de Personaje no sea nil antes de usarlo, por ejemplo:


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

Leer paralelo

Esta propiedad determina la ID de usuario de la cuenta cuya apariencia de personaje se usa para la apariencia de un jugador de character .Por defecto, esta propiedad es la Player.UserId , que utiliza el avatar del jugador como lo han creado en el sitio web de Roblox.

Cambiar esta propiedad a la ID de usuario de otra cuenta hará que el jugador se genere con la apariencia de esa cuenta (sombreros, camisa, pantalones, etc).

Los juegos también pueden alternar si el aspecto del personaje de un jugador se carga en el juego o no cambiando la propiedad StarterPlayer.LoadCharacterAppearance.

Muestras de código

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

Leer paralelo

Define cómo los scripts de cámara predeterminados manejan los objetos entre la cámara y el sujeto de la cámara.Establecido por StarterPlayer.DevCameraOcclusionMode y no se puede cambiar para jugadores individuales.

El valor predeterminado es Zoom (0). Vea Enum.DevCameraOcclusionMode para una lista de modos disponibles.

Leer paralelo

La propiedad DevComputerCameraMode determina la manera en que un jugador mueve su cámara al usar un dispositivo con un mouse y un teclado.Vea Enum.DevComputerCameraMovementMode para una descripción de cada modo de control de cámara disponible.Esta propiedad no se puede configurar usando un LocalScript (debe configurarse en el servidor usando un Script ).

El valor predeterminado de esta propiedad se determina por StarterPlayer.DevComputerCameraMovementMode.

La palabra "Ordenador" en este nombre de propiedad se refiere a dispositivos no TouchEnabled , no GamepadEnabled .

Cuando se establece en Elección del usuario , un jugador puede elegir entre cualquier modo de control (excepto Scriptable ) en las configuraciones del juego de Roblox.En general, es una buena idea permitir que los jugadores elijan su modo de control para maximizar la accesibilidad.

Es posible crear un esquema de control personalizado al establecer esta propiedad en Scriptable .

Esta propiedad no afecta a los jugadores que usan un dispositivo habilitado para tocar. Vea Player.DevTouchCameraMode.

Muestras de código

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

Leer paralelo

La propiedad DevComputerMovementMode determina la manera en que un jugador mueve su personaje al usar un dispositivo con un mouse y un teclado.Vea Enum.DevComputerMovementMode para una descripción de cada modo de control de movimiento disponible.Esta propiedad no se puede configurar usando un LocalScript (debe configurarse en el servidor usando un Script ).

El valor predeterminado de esta propiedad se determina por StarterPlayer.DevComputerMovementMode.

La palabra "Ordenador" en este nombre de propiedad se refiere a dispositivos no TouchEnabled de.

Cuando se establece en Elección del usuario , un jugador puede elegir entre cualquier modo de control (excepto Scriptable ) en las configuraciones del juego de Roblox.En general, es una buena idea permitir que los jugadores elijan su modo de control para maximizar la accesibilidad.

Es posible crear un esquema de control personalizado al establecer esta propiedad en Scriptable .

Esta propiedad no afecta a los jugadores que usan un dispositivo habilitado para tocar. Vea Player.DevTouchMovementMode.

Muestras de código

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

Leer paralelo

Esta propiedad determina si un jugador puede alternar el bloqueo Mouse presionando Shift .Un jugador puede desactivar el interruptor de bloqueo del mouse en las configuraciones del juego de Roblox.Por defecto, esta propiedad se establece en el valor de StarterPlayer.EnableMouseLockOption .Esto se puede configurar en el lado del servidor durante el tiempo de ejecución usando un Script .No se puede configurar en el lado del cliente.

Cuando se habilita el bloqueo del mouse, el cursor del jugador se bloquea en el centro de la pantalla.Mover el mouse orbitará la cámara alrededor del jugador character , y el personaje se enfrentará con la misma dirección que el camera .También compensa la vista de la cámara justo sobre el hombro derecho del personaje del jugador.

Tenga en cuenta que las API relacionadas con el bloqueo de cambio están en proceso de ser desusar, en desuso (noun), por lo que se recomienda usar UserInputService.MouseBehavior en lugar de bloquear el ratón.

Muestras de código

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)
Leer paralelo

La propiedad DevTouchCameraMode determina la manera en que un jugador mueve su cámara al usar un dispositivo TouchEnabled.Vea Enum.DevTouchCameraMovementMode para una descripción de cada modo de control de cámara disponible.Esta propiedad no se puede configurar usando un LocalScript (debe configurarse en el servidor usando un Script ).

El valor predeterminado de esta propiedad se determina por StarterPlayer.DevTouchCameraMovementMode.

Cuando se establece en Elección del usuario , un jugador puede elegir entre cualquier modo de control (excepto Scriptable ) en las configuraciones del juego de Roblox.En general, es una buena idea permitir que los jugadores elijan su modo de control para maximizar la accesibilidad.

Es posible crear un esquema de control personalizado al establecer esta propiedad en Scriptable .

Esta propiedad no afecta a los jugadores que no están usando un dispositivo habilitado para tocar. Vea Player.DevComputerCameraMovementMode.

Muestras de código

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

Leer paralelo

La propiedad DevTouchMovementMode determina la manera en que un jugador mueve a su personaje al usar un dispositivo TouchEnabled.Vea Enum.DevTouchMovementMode para una descripción de cada modo de control de movimiento disponible.Esta propiedad no se puede configurar usando un LocalScript (debe configurarse en el servidor usando un Script ).

El valor predeterminado de esta propiedad se determina por StarterPlayer.DevTouchMovementMode.

Cuando se establece en Elección del usuario , un jugador puede elegir entre cualquier modo de control (excepto Scriptable ) en las configuraciones del juego de Roblox.En general, es una buena idea permitir que los jugadores elijan su modo de control para maximizar la accesibilidad.

Es posible crear un esquema de control personalizado al establecer esta propiedad en Scriptable .

Esta propiedad no afecta a los jugadores que no están usando un dispositivo habilitado para tocar. Vea Player.DevComputerMovementMode.

Muestras de código

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

Leer paralelo

El DisplayName es una propiedad Player que contiene el nombre de visualización del usuario autenticado asociado con el objeto Player.A diferencia de los nombres de usuario, los nombres de visualización son nombres no únicos que un jugador muestra a los demás.Si el usuario de Roblox no ha elegido uno, la propiedad se leerá igual que la propiedad Name.

Nota:

  • Dado que los nombres de visualización no son únicos, es posible que dos jugadores en una sola instancia tengan nombres idénticos.Si necesita un identificador globalmente único para un jugador, use Player.UserId (que es estático) o Player.Name (que es el nombre de usuario actual) en su lugar.
  • Los personajes generados con Player.LoadCharacter o por el motor de Roblox tendrán asignada su propiedad Humanoid.DisplayName a la propiedad Player.DisplayName.
  • Los nombres de visualización pueden tener caracteres de un idioma en la cadena. Vea UTF-8 para más información sobre cómo trabajar con cadenas con caracteres de un idioma.

FollowUserId

Solo lectura
No replicado
Leer paralelo

El seguimiento de usuario es una propiedad Player que contiene el Player.UserId del usuario que un jugador siguió al juego.Si el jugador no siguió a nadie al juego, esta propiedad será 0.Esta propiedad es útil para alertar a los jugadores que han sido seguidos por otro jugador al juego.

Puedes obtener el nombre del jugador seguido usando este ID de usuario y la función Players:GetNameFromUserIdAsync().

Muestras de código

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

Seguridad no accesible
Leer paralelo

La propiedad GameplayPaused indica si el jugador está actualmente en un estado de pausa en un lugar con StreamingEnabled activado.Se establece en el cliente pero se replica al servidor.Para determinar el estado de pausa, puedes utilizar esta propiedad.

Vea también:

HasVerifiedBadge

Leer paralelo

La propiedad HasVerifiedBadge Player indica si el jugador tiene una Emblema de verificación.

HealthDisplayDistance

Leer paralelo

La propiedad HealthDisplayDistance establece la distancia en studs en la que este jugador verá otras barras de salud.Si se establece en 0, las barras de salud no se mostrarán.Esta propiedad se establece en StarterPlayer.HealthDisplayDistance por defecto.

Si la barra de salud de un humanoide es visible, puedes establecer el tipo de visualización usando Humanoid.DisplayDistanceType.

Muestras de código

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

Oculto
Solo lectura
No replicado
Leer paralelo

La propiedad LocaleId Player muestra el ID del idioma que el jugador local ha establecido para su cuenta de Roblox.Almacena una cadena con el código de dos letras (por ejemplo, "en-us") para el idioma local.

Esto se puede utilizar para determinar la demografía geográfica de la base de jugadores de tu juego y también es el idioma que se utilizará para la localización automática del contenido en la experiencia (ver GuiBase2d.AutoLocalize ).Esta propiedad permite el acceso al local del jugador desde el servidor.

Vea también LocalizationService.RobloxLocaleId , la ID local utilizada para localizar el contenido interno.Este será un valor diferente cuando Roblox aún no soporte internamente el conjunto local del jugador local.

Muestras de código

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

Solo lectura
No replicado
Leer paralelo

Esta propiedad solo se puede leer para determinar la membresía (no se puede establecer en otro introducirde membresía).Contiene un Enum.MembershipType enumerado de introducirde membresía de la cuenta.

Muestras de código

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

Leer paralelo

La propiedad NameDisplayDistance StarterPlayer establece la distancia en studs en la que este jugador verá otros nombres Humanoid.Si la propiedad se establece en 0, los nombres se ocultan.Esta propiedad se establece en StarterPlayer.NameDisplayDistance por defecto.

Si la barra de salud de un humanoide es visible, puedes establecer el tipo de visualización usando Humanoid.DisplayDistanceType.

Muestras de código

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

Leer paralelo

La propiedad Neutral determina si el jugador está en un equipo específico.

  • Cuando verdadero, el jugador no está en un equipo específico.Esto también significa que la propiedad Player.Team será nil y la Player.TeamColor será blanca.
  • Cuando false, el jugador está en un equipo específico.La propiedad Player.Team se corresponderá con la Team en la que se encuentra el jugador, así como la Player.TeamColor.

Muestras de código

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

Oculto
No replicado
Seguridad de Roblox
Leer paralelo

ReplicationFocus

Leer paralelo

La propiedad ReplicationFocus Player establece que la parte se centre en la replicación alrededor de un Jugador.Diferentes sistemas de Roblox que se comunican a través de la red (como la física, el streaming, etc) se replican a diferentes velocidades dependiendo de cuán cerca estén los objetos del enfoque de replicación.

Cuando esta propiedad es nil , se revertirá a su comportamiento predeterminado, que es tratar el personaje del jugador local PrimaryPart como el enfoque de replicación.

Esta propiedad solo debe establecerse en el servidor con un Script, no con un LocalScript.Tenga en cuenta que esta propiedad no cambia o actualiza la propiedad de red de partes.

Muestras de código

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

Leer paralelo

Si se establece, el jugador reaparecerá en el dado SpawnLocation.Esta propiedad solo se puede establecer a través de Luau y debe contener una referencia a un válido SpawnLocation, que debe cumplir con los siguientes criterios:

Si RespawnLocation no está configurado como válido SpawnLocation entonces se aplicará la lógica de generación predeterminada.Para obtener más información sobre esto, consulte la página para SpawnLocation .

Alternativas para RespawnLocation

Muestras de código

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

Seguridad de Roblox
Leer paralelo

Team

No replicado
Leer paralelo

La propiedad Equipo es una referencia a un objeto Team dentro del servicio Teams.Determina el equipo al que está en el jugador; si el Player no está en un equipo o tiene un Player.TeamColor inválido, esta propiedad es nil .Cuando esta propiedad se establecer, el jugador se ha unido al evento Team y al evento Team.PlayerAdded en el equipo asociado.Del mismo modo, Team.PlayerRemoved incendia cuando la propiedad no está desactivada de un cierto Team .

Muestras de código

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

Leer paralelo

La propiedad TeamColor determina con qué equipo está asociado un jugador según el Team.TeamColor.Cambiar esta propiedad cambiará Player.Team de acuerdo con qué equipo tenga la misma BrickColor para su Team.TeamColor .Si ningún objeto de equipo tiene el color de equipo asociado, el jugador no se asociará con un equipo.

A menudo es una mejor idea establecer Player.Team a la respectiva Team en lugar de usar esta propiedad.Establecer esta propiedad a menudo conduce a la repetición del mismo valor de Color de ladrillo para un equipo determinado en muchos scripts; esto es algo que quieres evitar al adherirte al principio "No te repitas a ti mismo" (DRY).

Muestras de código

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

Solo lectura
No replicado
Seguridad de scripts Roblox
Leer paralelo

UserId

Leer paralelo

El UserId es una propiedad Player que contiene un entero de lectura que identifica de manera única y consistente a cada cuenta de usuario en Roblox.A diferencia del Instance.Name de un Jugador, que puede cambiar según el nombre de usuario presente del usuario, este valor nunca cambiará por la misma cuenta.

Esta propiedad es esencial al guardar/cargar datos del jugador usando GlobalDataStores .Usa el ID de usuario de un jugador como clave del almacén de datos para que cada jugador tenga una clave única.

Muestras de código

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)

Métodos

AddReplicationFocus

()

Parámetros

part: BasePart
Valor predeterminado: ""

Devuelve

()

ClearCharacterAppearance

()

La función ClearCharacterAppearance elimina todos Accessory , Shirt , Pants , CharacterMesh y BodyColors de la apariencia del jugador dado Player.Character .Además, también elimina la camiseta Decal en el torso del jugador.Las partes del cuerpo y la cara del personaje se mantendrán sin cambios.Este método no hace nada si el jugador no tiene un personaje.

No elimina t-shirts , mallas de cabeza o caras.


Devuelve

()

Muestras de código

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

La función DistanceFromCharacter Player devuelve la distancia entre la cabeza del personaje y el punto dado Vector3.Devuelve 0 si el jugador no tiene Player.Character.

Esto es útil al determinar la distancia entre un jugador y otro objeto o ubicación en el juego.

Si desea determinar la distancia entre dos instancias o posiciones no jugadoras, puede usar lo siguiendo:


local distance = (position1 - position2).Magnitude

Parámetros

point: Vector3

La ubicación desde la cual se mide la distancia del jugador hasta.

Valor predeterminado: ""

Devuelve

La distancia en studs entre el jugador y la ubicación.

Muestras de código

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

Devuelve un diccionario que contiene información que describe cómo el Jugador se une a la experiencia. El diccionario contiene cualquiera de los siguientes campos:


<th>Tipo de valor</th>
<th>Descripción</th>
</tr>
</thead>
<tbody>
<tr>
<th>Id de juego de origen</th>
<td>número</td>
<td>El <code>Class.DataModel.GameId</code> de la experiencia del <code>Jugador</code> que se teletransportó desde.Solo presente si el jugador se teletransporta a la experiencia actual y si un servidor llama a la función de teletransporte.</td>
</tr>
<tr>
<th>Id de lugar de origen</th>
<td>número</td>
<td>El <code>Class.DataModel.PlaceId</code> del lugar al que se teletransportó el <code>Jugador</code>.Solo presente si el jugador se teletransporta al lugar actual y un servidor llama a la función de teletransporte.</td>
</tr>
<tr>
<th>Referenciado por PlayerId</th>
<td>número</td>
<td>El <code>Class.Player.UserId</code> del jugador que invitó al jugador actual a la experiencia.Utilice estos datos para identificar al remitente y activar la lógica de recompensa.</td>
</tr>
<tr>
<th>Miembros</th>
<td>matriz/lista</td>
<td>Un array que contiene los números <code>Class.Player.UserId</code> de los usuarios teletransportados junto con el <code>Jugador</code>.Solo presente si el jugador se teletransportó como parte de un grupo.</td>
</tr>
<tr>
<th>Teletransportar datos</th>
<td>variación</td>
<td>Refleja el <code>teleportData</code> especificado en el teletransportaciónoriginal.Útil para compartir información entre los servidores a los que se teletransporta el jugador.Solo presente si <code>teleportData</code> se especificó y un servidor llama a la función de teletransporte.</td>
</tr>
<tr>
<th>Datos de lanzamiento</th>
<td>cadena</td>
<td>Una cadena simple o codificada en JSON que contiene datos de lanzamiento especificados en un <a href="/production/promotion/deeplinks">enlace profundo</a> URL o <code>Class.ExperienceInviteOptions.LaunchData</code>.</td>
</tr>
<tr>
<th>Contexto de unión de juego</th><td>diccionario</td>
<td>
Un diccionario que incluye información relevante basada en el contexto de la unión del juego. Contiene las siguientes claves:
<ul>
JoinSource : Enum.JoinSource Tipo de artículo : opcional Enum.AvatarItemType ID de activo : opcional cadena Tipo de atuendo : opcional cadena Tipo de activo : opcional Enum.AssetType ID de activo : opcional cadena Tipo de artículo : opcional cadena
</ul>
</td>
</tr>
</tbody>
Clave

Obtener datos de unión y datos de teletransporte

Si un servidor inicia el teletransportacióndel jugador, el diccionario que devuelve este método incluye los datos de teletransporte del jugador.El método Player:GetJoinData() solo se puede usar para recuperar datos de teletransporte en el servidor.Para recuperar los datos en el cliente, use TeleportService:GetLocalPlayerTeleportData() .

A diferencia de TeleportService:GetLocalPlayerTeleportData() , Player:GetJoinData() solo proporciona datos de teletransporte que cumplen con los siguientes criterios de seguridad:

  • Está garantizado que fue enviado por un servidor de Roblox en las últimas 48 horas.
  • Está garantizado que se haya enviado con este Player .
  • Se garantiza que los SourcePlaceId y SourceGameId sean el lugar y el universo desde el que se enviaron los datos.Esto significa que puedes verificar que los datos de teletransporte provienen de un lugar aprobado.

Como estos datos son transmitidos por el cliente, aún puede ser abusado potencialmente por un explotador.Los datos sensibles como la moneda del jugador deben transmitirse a través de una solución segura como Almacenes de memoria.


Devuelve

Un diccionario que contiene valores de PlaceId y UserId (ver tabla en la descripción).

Muestras de código

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

La función GetMouse Player devuelve el Mouse que está siendo utilizado por el cliente.La instancia del ratón del jugador se puede utilizar para rastrear la entrada del ratón del usuario, incluidos los clics de los botones izquierdo y derecho del ratón y el movimiento y la ubicación.

El servicio UserInputService proporciona funciones y eventos adicionales para rastrear la entrada del usuario - especialmente para dispositivos que no usan un ratón.

Nota:

  • Este elemento debe usarse en un LocalScript para funcionar como se esperaba en conectado.
  • Después de una actualización en julio de 2014, el icono del ratón ahora se puede configurar con este método.

Devuelve

Muestras de código

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

Escribir paralelo

GetNetworkPing devuelve la latencia de red aislada del Player en segundos.La "ping" es una medición del tiempo que se tarda en enviar los datos desde el cliente al servidor, y luego de nuevo.No implica la deserialización o procesamiento de datos.

Para el lado del cliente LocalScripts, esta función solo se puede llamar en el Players.LocalPlayer.Esta función es útil para identificar y solucionar problemas que ocurren en escenarios de alta latencia de red.También es útil para ocultar la latencia, como ajustar la velocidad de las animaciones de lanzamiento para proyectiles.


Devuelve

HasAppearanceLoaded

La función HasAppearanceLoaded Player devuelve si la apariencia del jugador Player.Character se ha cargado o no.

La apariencia de un jugador incluye elementos como la apariencia del jugador Shirt, Pants y Accessories.

Esto es útil al determinar si la apariencia de un jugador se ha cargado después de que se unan por primera vez al juego, que se puede rastrear usando el evento Players.PlayerAdded.


Devuelve

Un booleano que indica si la apariencia del personaje del jugador se ha cargado o no.

Muestras de código

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

Devuelve un valor booleano que indica el estado de verificación del jugador.Cuando es verdadero, el jugador se verifica.La verificación incluye, pero no se limita a, el número de teléfono no VOIP o la verificación de identificación gubernamental.

Al implementar IsVerified , ejerza precaución para asegurarse de que la implementación no bloquee inadvertidamente a todos los usuarios no verificados.

Tenga en cuenta que el método solo se puede llamar en el servidor de backend.Llamarlo resultados del lado del cliente da como resultado un error.Además, este método siempre devolverá false en Studio.


Devuelve

Un booleano que indica si el jugador está verificado.

Muestras de código

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

()

El método Kick() permite que una experiencia desconecte elegantemente a un cliente y opcionalmente proporcione un mensaje al usuario desconectado.Esto es útil para moderar usuarios abusivos.Solo deberías permitir que usuarios específicos a los que confías activen este método en otros usuarios.

Llamar a este método en un Player sin argumentos desconecta al usuario del servidor y proporciona un mensaje de aviso predeterminado.Llamar a este método en un Player junto con una cadena como primer argumento que reemplaza el mensaje predeterminado con la cadena proporcionada.

Al usar este método desde un LocalScript , solo el cliente del usuario local puede ser expulsado.

Parámetros

message: string

El mensaje para mostrar al usuario al expulsar.

Valor predeterminado: ""

Devuelve

()

Move

()

La función de movimiento Player hace que el personaje del jugador camine en la dirección dada hasta que se detenga, o sea interrumpido por el jugador (usando sus controles).

Esto es útil cuando se programan NPC que se mueven alrededor de un mapa - pero no son controlados por la entrada de un jugador real.

Tenga en cuenta que el segundo argumento de la función indica si el proporcionado Vector3 debe mover al jugador en relación con las coordenadas mundiales (falsa) o con las coordenadas del jugador Camera (verdadera).

Parámetros

walkDirection: Vector3

La dirección Vector3 que el jugador debe herramienta de movimiento.

Valor predeterminado: ""
relativeToCamera: boolean

Un booleano que indica si el jugador debe moverse en relación con la cámara del jugador.

Valor predeterminado: false

Devuelve

()

Muestras de código

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

()

Parámetros

part: BasePart
Valor predeterminado: ""

Devuelve

()

SetAccountAge

()
Seguridad del plugin

La función SetAccountAge establece el Player.AccountAge del jugador en días.

Se usa para establecer la propiedad Player que describe cuánto tiempo se registró la cuenta de un jugador en días.

Esto no establece la edad del jugador en la cuenta, sino la edad de la cuenta misma en relación con cuando se creó por primera vez.

Parámetros

accountAge: number

La edad de la cuenta en días.

Valor predeterminado: ""

Devuelve

()

Muestras de código

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

()
Seguridad del plugin

Este método establece si el jugador ve o no el chat filtrado por TextService:FilterStringAsync() en lugar de chats normales.


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

Independientemente de si un jugador tiene habilitado el chat filtrado, todo el chat debe ser filtrado por TextService cuando se transmite a otros jugadores o en la pantalla del propio jugador. TextService:FilterStringAsync() devuelve un objeto TextFilterResult que se puede filtrar de manera diferente según el uso previsto del mensaje.

Parámetros

value: boolean

Un booleano que indica si el jugador ve o no el chat filtrado.

Valor predeterminado: ""

Devuelve

()

GetFriendsOnline

Proporciona

Esta función devuelve un array de diccionario de amigos en línea, limitado por el valor maxFriends. La función utiliza una caché de 30 segundos.

En el matriz/listadevuelto, algunos campos solo están presentes para ciertos tipos de ubicación.Por ejemplo, PlaceId no estará presente cuando LocationType sea 0 (sitio web móvil).


<th>Tipo</th>
<th>Descripción</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>VisitadorId</b></td>
<td>número</td>
<td>El <code>Class.Player.UserId</code> del amistad.</td>
</tr>
<tr>
<td><b>Nombre de usuario</b></td>
<td>cadena</td>
<td>El nombre de usuario del amistad.</td>
</tr>
<tr>
<td><b>Nombre de visualización</b></td>
<td>cadena</td>
<td>El <code>Class.Player.DisplayName</code> del amistad.</td>
</tr>
<tr>
<td><b>Última en línea</b></td>
<td>cadena</td>
<td>Cuando el amigo estuvo por última vez en conectado.</td>
</tr>
<tr>
<td><b>Está en línea</b></td>
<td>booleno</td>
<td>Si el amigo está actualmente en conectado.</td>
</tr>
<tr>
<td><b>Última ubicación</b></td>
<td>cadena</td>
<td>El nombre de la ubicación actual del amistad.</td>
</tr>
<tr>
<td><b>Id de lugar</b></td>
<td>número</td>
<td>La identificación del lugar de la última ubicación del amistad.</td>
</tr>
<tr>
<td><b>ID del juego</b></td>
<td>cadena</td>
<td>El <code>Modelo de datos/JobId</code> de la última ubicación del amistad.</td>
</tr>
<tr>
<td><b>Tipo de ubicación</b></td><td>número</td>
<td>
El tipo de ubicación de la última ubicación del amistad:
<table>
<tbody>
<tr>
<td width="20%"><b>0</b></td><td>Sitio web móvil</td>
</tr>
1 Web de juegos móviles 2 3
</tbody>
</table>
</1 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
</td>
</tr>
</tbody>
Nombre

Parámetros

maxFriends: number

El número máximo de amigos en línea para devolver.

Valor predeterminado: 200

Devuelve

Un diccionario de amigos en línea (ver la tabla anterior).

Muestras de código

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

Proporciona

La función GetRankInGroup Player devuelve el rango del jugador en el grupo como un entero entre 0 y 255, donde 0 es un no miembro y 255 es el propietario del grupo.

Usar esto en un Script , en lugar de un LocalScript , no te proporcionará la información más actualizada.Si un jugador deja un grupo mientras está en el juego, GetRankInGroup seguirá pensando que está en ese grupo hasta que se salir.Sin embargo, esto no sucede cuando se usa con un LocalScript.

Esto se debe a que el método almacena los resultados, por lo que varias llamadas de GetRankInGroup al mismo jugador con el mismo ID de grupo darán el mismo resultado que cuando el método se llamó por primera vez con el ID de grupo dado.El comportamiento de caché está en una base per-peer: un servidor no comparte la misma caché que un cliente.

Parámetros

groupId: number

El groupId del grupo especificado.

Valor predeterminado: ""

Devuelve

El rango del jugador en el grupo.

Muestras de código

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

Proporciona

La función GetRoleInGroup Player devuelve el rol del jugador en el grupo como una cadena, o invitado si el jugador no es parte del grupo.

Usar esto en un Script , en lugar de un LocalScript , no te proporcionará la información más actualizada.Si un jugador deja un grupo mientras está en el juego, GetRoleInGroup seguirá pensando que está en ese grupo hasta que se salir.Sin embargo, esto no sucede cuando se usa con un LocalScript.

Esto se debe a que el método almacena los resultados, por lo que varias llamadas de GetRoleInGroup al mismo jugador con el mismo ID de grupo darán el mismo resultado que cuando el método se llamó por primera vez con el ID de grupo dado.El comportamiento de caché está en una base per-peer: un servidor no comparte la misma caché que un cliente.

Parámetros

groupId: number

El grupoId del grupo especificado.

Valor predeterminado: ""

Devuelve

El rol del jugador en el grupo especificado, o Invitado si el jugador no es miembros.

Muestras de código

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

Proporciona

Esta función envía una solicitud al sitio web de Roblox preguntando si un jugador es amigo de otro usuario, dado el Player.UserId de ese usuario.Esta función cacha los resultados para que varias llamadas de la función al mismo jugador con el mismo Player.UserId no puedan producir el resultado más actualizado.Esto no ocurre cuando se usa en un LocalScript .

Parámetros

userId: number

El Player.UserId de jugador especificado.

Valor predeterminado: ""

Devuelve

Un booleano que indica si un jugador es amigo del usuario especificado.

Muestras de código

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

Proporciona

La función IsInGroup Player envía una solicitud al sitio web de Roblox preguntando si un jugador es miembro de un grupo, dada la identificación de ese grupo.

Usar esto en un Script , en lugar de un LocalScript , no te proporcionará la información más actualizada.Si un jugador deja un grupo mientras está en el juego, IsInGroup seguirá pensando que está en ese grupo hasta que se salir.Sin embargo, esto no sucede cuando se usa con un LocalScript.

Esto se debe a que el método almacena los resultados, por lo que varias llamadas de IsInGroup a un mismo jugador con el mismo ID de grupo darán el mismo resultado que cuando el método se llamó por primera vez con el ID de grupo dado.El comportamiento de caché está en una base per-peer: un servidor no comparte la misma caché que un cliente.

Parámetros

groupId: number

El grupoId del grupo especificado.

Valor predeterminado: ""

Devuelve

Un booleano que indica si el jugador está en el grupo especificado.

Muestras de código

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

()
Proporciona

La función LoadCharacter Player crea un nuevo personaje para el jugador, eliminando el antiguo.También limpia el Backpack y el PlayerGui del jugador.

Esto es útil en casos en los que quieres recargar el personaje sin matar al jugador, como cuando quieres cargar una nueva apariencia de personaje después de cambiar la apariencia del jugador Player.CharacterAppearance.

Nota: La función es similar a Player:LoadCharacterBlocking() , pero la solicitud se procesa de forma asíncrona en lugar de sincronizada.Esto significa que otras tareas podrán continuar mientras se carga el personaje, incluida la renderización del juego y cualquier otra tarea.Además, esta función se puede usar en un script, mientras que LoadCharacterBlocking no puede.

Después de llamar a LoadCharacter para un jugador individual, no se recomienda llamarlo nuevamente para el mismo jugador hasta que se haya disparado el evento Player.CharacterAppearanceLoaded de ese jugador.

Orden de carga de caracteres

Llamar al Player:LoadCharacter() con un Avatar R15 activa eventos en el siguiente orden (Nota: el orden de R6 es diferente):

  1. Jugador.Caracteres configurados
  2. Jugador.CharacterAdded dispara
  3. Player.Changed dispara con un valor de "Personaje"
  4. La apariencia del personaje se inicializa
  5. Los eventos Player.CharacterAppearanceLoaded disparan
  6. Character.Parent se establece en el modelo de datos
  7. La construcción del personaje y las escalas de personaje
  8. El personaje se mueve a la ubicación de generación
  9. Devoluciones de LoadCharacter

Devuelve

()

Muestras de código

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

()
Proporciona

Esta función genera un avatar para que tenga todo equipado en el pasado en HumanoidDescription .

Después de llamar a LoadCharacterWithHumanoidDescription para un jugador individual, no se recomienda llamar nuevamente a la función para el mismo jugador hasta que se haya disparado el evento Player.CharacterAppearanceLoaded del jugador.

Vea también:

Parámetros

humanoidDescription: HumanoidDescription

Un HumanoidDescription que contiene rasgos como partes del cuerpo/colores, escalado de cuerpo, accesorios, ropa y animaciones que se equiparán al personaje cargado.

Valor predeterminado: ""

Devuelve

()

Muestras de código

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

()
Proporciona

Para experiencias donde el streaming de instancias está habilitado, solicitudes que el servidor transmita a las regiones del jugador (partes y terreno) alrededor de la ubicación especificada X , Y , Z en el mundo 3D.Es útil si la experiencia sabe que el CFrame del jugador se establecerá en la ubicación especificada en un futuro próximo.Sin proporcionar la ubicación con esta llamada, el jugador puede no haber transmitido contenido para el destino, lo que resulta en una pausa de transmisión o en otro comportamiento no deseable.

El efecto de esta llamada será temporal y no hay garantías de lo que se transmitirá en torno a la ubicación especificada.Los límites de memoria del cliente y las condiciones de red pueden afectar lo que estará disponible en el cliente.

Precaución de uso

Solicitar transmisión alrededor de una área no es una garantía de que el contenido estará presente cuando la solicitud se complete, ya que la transmisión se ve afectada por la velocidad de la red del cliente, las limitaciones de memoria y otros factores.

Parámetros

position: Vector3

Ubicación mundial donde se solicita el streaming.

Valor predeterminado: ""
timeOut: number

Tiempo de espera opcional para la solicitud, la duración máxima que el motor intenta transmitir regiones alrededor del parámetro position antes de abandonar la solicitud.Si no especifica un valor, el tiempo límite es efectivamente infinito.Sin embargo, si el cliente tiene poca memoria, el motor abandona todas las solicitudes de transmisión, incluso las que aún están dentro de la duración de tiempo límite.

Valor predeterminado: 0

Devuelve

()

Eventos

CharacterAdded

El evento CharacterAdded se activa cuando se genera (o reaparece) el personaje de un jugador.Este evento se activa poco después de establecer Player.Character a un valor no nil o llamar Player:LoadCharacter(), que es antes de que el personaje sea padre del Workspace.

Esto se puede utilizar junto con el evento Player.CharacterRemoving, que se activa justo antes de que el personaje de un jugador sea eliminado, por lo general después de la muerte.Como tal, ambos eventos pueden potencialmente disparar muchas veces a medida que los jugadores mueren y luego reaparecen en un lugar.Si quieres detectar cuando un jugador se une o abandona el juego, usa los eventos Players.PlayerAdded y Players.PlayerRemoving en su lugar.

Tenga en cuenta que el Humanoid y sus partes del cuerpo predeterminadas (cabeza, torso y extremidades) existirán cuando se active este evento, pero los artículos de ropa como Hats , Shirts y Pants pueden tardar unos segundos en ser agregados al personaje.Conecta Instance.ChildAdded en el personaje agregado para detectarlos o espera a que el evento Player.CharacterAppearanceLoaded asegure que el personaje tenga todo equipado.

Parámetros

character: Model

Una instancia del personaje que se generó/reapareció.


Muestras de código

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

Este evento se activa cuando se ha insertado la apariencia completa de un Player.Character .

Un Player.Character generalmente tiene un rango de objetos que modifican su aspecto, look, incluidos Accoutrements , Shirts , Pants y CharacterMeshes .Este evento se disparará cuando todos esos objetos se hayan insertado en el Player.Character .

Este evento solo se activa en el servidor.

Una utilización para este evento es asegurarse de que todos los accesorios se hayan cargado antes de destruirlos. Vea a continuación un ejemplo de esto.

Parámetros

character: Model

El Class.Player.Character``Class.Model.


Muestras de código

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

El evento Eliminación de caracteres se activa justo antes de que se elimine el personaje de un jugador, como cuando el jugador reaparece.

Este evento se puede usar junto con el evento Player.CharacterAdded, que se activa cuando el personaje de un jugador se genera o reaparece.Por instancia, si desea imprimir un mensaje cada vez que un jugador aparece y muere:


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)

Este evento solo se preocupa por el Character de un Player.Si necesitas rastrear cuando un jugador se une/abandona el juego, usa los eventos Players.PlayerAdded y Players.PlayerRemoving.

Parámetros

character: Model

Una instancia del personaje que se está eliminando.


Muestras de código

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

El evento de chat se activa cuando un Player escribe un mensaje y presiona enter en la barra de chat proporcionada por Roblox.Esto se hace usando algunas vinculaciones de Luau por el guión de chat script.Puedes evitar que los jugadores chateen usando StarterGui:SetCoreGuiEnabled() y desactivando el chat Enum.CoreGuiType.

Comandos de chat

Al usar este evento y algunas funciones de manipulación de cadenas como string.sub() y string.lower(), es posible crear comandos de chat, incluso con argumentos como nombres de jugadores.Por lo general, los comandos se prefijan como heal PlayerName .Para comprobar un prefijo en una cadena, use string.sub() en el mensaje para comprobar una subcadena del mensaje: string.sub(message, 1, 6) == "/heal " (nota la inclusión del espacio).Luego, extrae el resto del comando usando string.sub() de nuevo: string.sub(message, 7) será igual al nombre del jugador.Comprueba si ese jugador existe, y si es así, realiza la acción del comando (en este ejemplo, curándolos).Revisa los ejemplos de código para obtener ejemplos de comandos de chat.

Filtreo

El texto del mensaje disparado con este evento es sin filtrar .Si estás mostrando la entrada del jugador como el chat a otros jugadores en cualquier forma, debe filtrarse usando Chat:FilterStringAsync() .Tenga esto en cuenta al crear sus propios sistemas de chat; si su juego no filtra correctamente el chat, es posible que se tome acción de moderación contra él.

Parámetros

message: string

El contenido del mensaje que el jugador escribió en el chat.

recipient: Player

Descontinuado. Para los mensajes susurrados, este era el jugador que era el objetivo pretendido del mensaje de chat.


Muestras de código

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

Este evento se activa aproximadamente dos minutos después de que el motor de juego clasifique al player como inactividad.El tiempo es el número de segundos que han pasado desde ese punto.El evento sigue disparándose cada 30 segundos mientras el jugador permanezca inactividad.

Este evento solo se dispara en scripts de cliente, no en scripts del servidor; usa un RemoteEvent para notificar al servidor de jugadores inactivos.

Roblox desconecta automáticamente a los jugadores que han estado inactivos durante al menos 20 minutos, por lo que este evento es útil para advertir a los jugadores que se desconectarán pronto, desconectando a los jugadores antes de esos 20 minutos o otras características de AFK lejos del teclado.

Para rastrear con qué frecuencia producirsedesconexiones automáticas, intenta correlacionar este evento con ocurrencias de Players.PlayerRemoving .

Parámetros

time: number

El tiempo en segundos que el jugador ha estado inactividad.


Muestras de código

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

Se desactiva cuando el estado de teletransporte de un jugador cambia. Este evento es útil para detectar si una teletransportación tuvo éxito.

¿Cuál es el estado de teletransporte?

Cuando se solicita una teletransportación usando TeleportService, hay una serie de etapas antes de que se teletransporte el Player.La etapa actual se representa por el valor Enum.TeleportState que se da por OnTeleport.Vea a continuación un ejemplo práctico de esto.

Parámetros

teleportState: Enum.TeleportState

El nuevo Enum.TeleportState de la Player.

placeId: number

La identificación del lugar al que se está teletransportando el Player.

spawnName: string

El nombre del spawn al que teletransportarse, si se ha utilizado TeleportService:TeleportToSpawnByName().


Muestras de código

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)