Player

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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

La propiedad Instance.Name refleja el nombre de usuario del jugador. Cuando se guardan informos sobre un jugador, deberás 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 actual usando Players:GetPlayers() ; de nuevo, usa 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, puede detectar la eliminación de los objetos del jugador usando Players.PlayerRemoving, que se activa justo antes de que se elimine el jugador (en lugar de Class.Instance.ChildRemoved que se activa después). Esto es importante si está guardando información sobre el jugador que podría ser eliminado o limpiado en el momento de la eliminación.

Amostras de código

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)

Resumo

Propriedades

Métodos

Eventos

Propriedades

AccountAge

Somente leitura
Não replicado
Ler Parallel

La edad de la cuenta es una propiedad de Player que describe cuánto tiempo ha estado registrado una cuenta de jugador en días. Se establece con la función Player:SetAccountAge(), que no se puede acceder a ella por scripts.

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

Amostras de código

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

Ler Parallel

La propiedad AutoJumpEnabled determina si el Player.Character de un Class.Player usando un dispositivo móvil saltará automáticamente cuando chocan con un obstáculo. Esto puede hacer que los niveles sean más navegables mientras están 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 propiedad Player.Character en el regeneración. En otras palabras, es posible establecer el comport

Amostras de código

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

Ler Parallel

La propiedad CameraMaxZoomDistance Player establece la distancia máxima en studs de 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 está autorizada a acercar.

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

Amostras de código

Setting Camera Zoom Distance

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

CameraMinZoomDistance

Ler Parallel

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

En otras palabras, controla la distancia mínima que la cámara del jugador está autorizada a acercar.

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

Amostras de código

Setting Camera Zoom Distance

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

CameraMode

Ler Parallel

La propiedad Modo de cámara establece el modo de cámara del jugador, por defecto a la tercera persona.

Tercera Persona

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

  • Los jugadores pueden hacer clic con el botón 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 su personaje, se enfrenta en la dirección de movimiento correspondiente.
  • Los jugadores pueden acercar y alejar de forma gratuita, incluso a la primera persona en full zoom en.

Primera Persona

En el modo de primera persona ( Enum.CameraMode.LockFirstPerson ) la cámara del jugador está acercada todo el tiempo. A menos que haya una GUI visible con la propiedad GuiButton.Modal establecida a true , mover el ratón, tocar-arrastrar en el móvil o usar el joystick secundario en un gamepad girará la cámara alrededor del personaje.

Amostras de código

Playing in First Person

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

CanLoadCharacterAppearance

Ler Parallel

La propiedad CanLoadCharacterAppearance Player determina si la apariencia del personaje se carga cuando el jugador se genera. El valor predeterminado de esta propiedad es establecido por StarterPlayer.LoadPlayerAppearance .

Si true , el personaje cargará la apariencia del jugador que coincida con el jugador's Player.CharacterAppearanceId .

Si falso , el jugador aparecerá con un aspecto predeterminado - 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 a Player:LoadCharacter() para cargar la nueva aspecto, look.

Amostras de código

Disabling a Player's Appearance

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

Character

Ler Parallel

La propiedad jugador contiene una referencia a un Model que contiene un Humanoid , partes del cuerpo, scripts y otros objetos requeridos para simular

Inicialmente esta propiedad es nil y se establece cuando el personaje del jugador se genera por primera vez. Usa el evento Player.CharacterAdded para detectar cuando se carga correctamente el personaje del jugador, y el evento Player.CharacterRemoving para detectar cuando el personaje está a punto de desaparecer. Evita usar 1>

Nota que LocalScripts que se clonan de StarterGui o StarterPack


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

Ler Parallel

Esta propiedad determina el ID de usuario de la cuenta cuyo personaje aparece en el juego para el personaje de un jugador. Por defecto, esta propiedad es el Player.Character, que usa el avatar del jugador como se creó en el sitio web de Roblox.

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

Los juegos también pueden alternar si la apariencia del personaje de un jugador se carga en el juego al cambiar la propiedad StarterPlayer.LoadCharacterAppearance .

Amostras de código

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

Ler Parallel

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 los jugadores individuales.

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

Ler Parallel

La propiedad DevComputerCameraMode determina la manera en que un jugador mueve su cámara cuando usa un dispositivo con un mouse y 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 establecerse en el servidor usando un Script).

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

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

Cuando se establece a Selección de usuario , un jugador puede elegir entre cualquier modo de control (excepto Scriptable ) en la configuración 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 de toque habilitado. Vea Player.DevTouchCameraMode en su lugar.

Amostras de código

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

Ler Parallel

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

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

La palabra «Computer» en este nombre de propiedad se refiere a los dispositivos no TouchEnabled .

Cuando se establece a Selección de usuario , un jugador puede elegir entre cualquier modo de control (excepto Scriptable ) en la configuración 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 en su lugar.

Amostras de código

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

Ler Parallel

Esta propiedad determina si un jugador puede alternar el bloqueo de Mouse con la presión de Shift . Un jugador puede desactivar el interruptor de bloqueo del mouse en las configuraciones del juego de Roblox. Por defecto, esta propiedad está configurada como el valor de StarterPlayer.EnableMouseLockOption . Esto se

Cuando el bloqueo del mouse está habilitado, el cursor del jugador está bloqueado en el centro de la pantalla. Mover el mouse girará la cámara alrededor del jugador character , y el personaje se alineará con la dirección de la cámara camera . También desplaza la vista de la cámara justo sobre el hombro derecho del personaje.

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

Amostras de código

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)
Ler Parallel

La propiedad DevTouchCameraMode determina la manera en que un jugador mueve su cámara cuando utiliza un dispositivo TouchEnabled . Consulte Enum.DevTouchCameraMovementMode para una descripción de cada modo de control de cámara disponible. Esta propiedad no se puede configurar utilizando un LocalScript (debe estable

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

Cuando se establece a Selección de usuario , un jugador puede elegir entre cualquier modo de control (excepto Scriptable ) en la configuración 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 en su lugar.

Amostras de código

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

Ler Parallel

La propiedad DevTouchMovementMode determina la manera en que un jugador mueve su personaje cuando utiliza un dispositivo TouchEnabled. Vea Enum.DevTouchMovementMode para una descripción de cada modo de control de movimiento disponible. Esta propiedad no se puede configurar con un LocalScript (debe establecerse en el

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

Cuando se establece a Selección de usuario , un jugador puede elegir entre cualquier modo de control (excepto Scriptable ) en la configuración 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 en su lugar.

Amostras de código

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

Ler Parallel

El DisplayName es una propiedad de Player que contiene el nombre de la pantalla del usuario autenticado asociado con el objeto Player. A diferencia de los nombres de usuario, los nombres de pantalla son nombres no únicos que muestran los jugadores a otros. Si el usuario de Roblox no ha elegido uno, la propiedad leerá el mismo que la propiedad 2>Name

Nota:

  • Dado que los nombres de los mostradores 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 su propiedad de Humanoid.DisplayName asignada a la propiedad de Player.DisplayName.
  • Los nombres de los párametros pueden tener caracteres no deseados en la cadena. Consulte UTF-8 para obtener más información sobre cómo trabajar con cadenas con caracteres no deseados.

FollowUserId

Somente leitura
Não replicado
Ler Parallel

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

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

Amostras de código

Followed Alert

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

GameplayPaused

Segurança não acessível
Ler Parallel

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

Véase también:

HasVerifiedBadge

Ler Parallel

La propiedad de la insignia verificada Player indica si el jugador tiene una Emblema de verificación.

HealthDisplayDistance

Ler Parallel

La propiedad HealthDisplayDistance Player establece la distancia en studs en los que este jugador verá otras barras de salud Humanoid . Si se establece a 0, las barras de salud no se mostrarán. Esta propiedad está predeterminada para establecer StarterPlayer.HealthDisplayDistance por defecto.

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

Amostras de código

Hiding Player Health and Names

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

LocaleId

Oculto
Somente leitura
Não replicado
Ler Parallel

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

Esto se puede usar para determinar el geógrafo demográfico de la base de jugadores de tu juego, y también es el idioma que se usará para la localización automática (ver GuiBase2d.AutoLocalize ) del contenido en la experiencia. Esta propiedad permite acceder al idioma del jugador desde el servidor.

También se ve LocalizationService.RobloxLocaleId, el ID de la ubicación usado para localizar el contenido interno. Este será un valor diferente cuando Roblox aún no soporte interna y localmente el idioma del jugador.

Amostras de código

Checking a Player's Locale

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

MembershipType

Somente leitura
Não replicado
Ler Parallel

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

Amostras de código

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

Ler Parallel

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

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

Amostras de código

Hiding Player Health and Names

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

Neutral

Ler Parallel

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

  • Cuando true , el jugador no está en un equipo específico. Esto también significa que la propiedad Player.Team será nulo y el color de la propiedad Player.TeamColor será blanco.
  • Cuando falso , el jugador está en un equipo específico. La propiedad Player.Team corresponddrá a la Team que el jugador está en, así como la propiedad 1> Class.Player.TeamColor1> .

Amostras de código

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

ReplicationFocus

Ler Parallel

La propiedad ReplicationFocus Player establece la parte para enfocar la replicación alrededor de un jugador. Los diferentes sistemas de Roblox que se comunican a través de la red (como la física, la transmisión en vivo, etc) se replican a diferentes tasas dependiendo de la cercanía de los objetos al enfoque de replicación.

Cuando esta propiedad es nulo, se restablece a su comportamiento por defecto que es tratar el personaje del jugador local como el enfoque de replicación.

Esta propiedad solo se debe establecer en el servidor con un Script, no un LocalScript. Nota que esta propiedad no cambia o actualiza la propiedad de red de partes.

Amostras de código

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

Ler Parallel

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

Si RespawnLocation no se ha establecido en un SpawnLocation válido, entonces la lógica de generación predeterminada se aplicará. Para obtener más información, consulte la página de SpawnLocation .

Alternativas a RespawnLocation

Amostras de código

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

Team

Não replicado
Ler Parallel

La propiedad Equipo es una referencia a un objeto Team dentro del servicio Class.Teams

Amostras de código

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

Ler Parallel

La propiedad TeamColor determina con qué equipo se asocia un jugador según el Class.Team.TeamColor de ese equipo. Al cambiar esta propiedad, cambiará Class.Player.Team según el equipo que tenga el mismo Datatype.BrickColor para su Class.Team.TeamColor . Si no hay un objeto de equipo que tenga el color de equipo asociado, el jugador no se asociará con un equipo.

A menudo es una mejor idea establecer Player.Team a los respectivos 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 cierto equipo en muchos scripts; esto es algo que desea evitar cuando se adhiere al principio "No se repita a sí mismo" (DRY).

Amostras de código

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)

UserId

Ler Parallel

El Id de Usuario es una propiedad de Player que contiene un número integro que únicamente y consistentemente identifica cada cuenta de usuario en Roblox. A diferencia del Instance.Name de un jugador, que puede cambiar según el nombre de usuario del usuario, este valor nunca cambiará por la misma cuenta.

Esta propiedad es esencial al guardar/cargar datos del jugador usando GlobalDataStores . Usa la clave de almacenamiento de datos del jugador para que cada jugador tenga una clave única.

Amostras de código

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

ClearCharacterAppearance

void

La función ClearCharacterAppearance elimina todos los Accessory, Shirt, Pants, 1> Class.CharacterMesh1> y <

No elimina t-shirts , head meshes, o caras.


Devolução

void

Amostras 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 de datos Datatype.Vector3. Devuelve 0 si el jugador no tiene Vector3 .

Esto es útil para 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 jugador, puede usar lo siguiendo:


local distance = (position1 - position2).magnitude

Parâmetros

point: Vector3

La ubicación de la que se mide la distancia del jugador.


Devolução

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

Amostras de código

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

Regresa 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:


<tbody>
<tr>
<th>Juego de fuentes</th>
<td>número</td>
<td>El Class.DataModel.GameId de la experiencia que el <code>Jugador</code> teletransportó. 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>Identificador de lugar de origen</th>
<td>número</td>
<td>El Class.DataModel.PlaceId del lugar donde 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>JugadorReferido</th>
<td>número</td>
<td>El <code>Class.Player.UserId</code> del jugador que invitó al jugador actual a la experiencia. Usa estos datos para identificar el referente y el modo de pago de la lógica de recompensa.</td>
</tr>
<tr>
<th>Miembros</th>
<td>matriz/lista</td>
<td>Un arreglo que contiene los Class.Player.UserId números de los usuarios teletransportados junto con el jugador . Solo presente si el jugador se teletransportó como parte de un grupo.</td>
</tr>
<tr>
<th>Teletransportar datos</th>
<td>变iante</td>
<td>Refleja el <code>teleportData</code> especificado en el teletransportaciónoriginal. Útil para compartir información entre los servidores al que se teletransporta el jugador. Solo presente si se especificó el <code>teleportData</code> y un servidor llama a la función de teletransporte.</td>
</tr>
<tr>
<th>Lanzamiento de datos</th>
<td>cadena</td>
<td>Una cadena de texto plano o JSON que contiene datos de lanzamiento especificados en una URL <a href="../../../production/promotion/deeplinking.md">de enlace profundo</a> o <code>Class.ExperienceInviteOptions.LaunchData</code> .</td>
</tr>
</tbody>
ClaveTipo de valorDescripción

Obtener JoinData y TeleportData

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

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

  • Está garantizado de que se haya enviado por un servidor de Roblox en los últimos 48 horas.
  • Está garantizado de que se ha enviado con este Player .
  • El SourcePlaceId y SourceGameId son garantizados para ser el lugar y el universo de donde se enviaron los datos. Esto significa que puedes verificar que los datos se enviaron desde un lugar aprobado.

A medida que estos datos se transmiten por el cliente, aún puede ser abusado por un explotador. Los datos sensibles, como la moneda del jugador, deben enviarse a través de una solución segura como Almacenes de memoria.


Devolução

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

Amostras de código

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)
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)
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
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)
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 el cliente está usando. La instancia del mouse del jugador se puede usar para rastrear la entrada del mouse del usuario, incluidos los clics de los botones izquierdo y derecho del ratón y la ubicación y el movimiento.

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

Nota:

  • Este artículo debe usarse en un Class.LocalScript para funcionar como esperado conectado.
  • Después de una actualización en julio de 2014, el icono del ratónahora se puede establecer con este método.

Devolução

Amostras de código

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

Escrever Parallel

GetNetworkPing devuelve la latencia de red aislada del Player en segundos. "Ping" es una medida del tiempo que se necesita para enviar los datos desde el cliente al servidor, luego de regreso. No implica la deserialización o el 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 debugger problemas que ocurren en escenarios de alta latencia. También es útil para ocultar la latencia, como ajustar la velocidad de lanzamiento de las animaciones para proyectiles.


Devolução

HasAppearanceLoaded

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

La apariencia de un jugador incluye artículos como el Shirt del jugador, Pants y Accessories .

Esto es útil para determinar si la apariencia de un jugador se ha cargado después de unirse al juego, lo cual se puede rastrear utilizando el evento Players.PlayerAdded .


Devolução

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

Amostras de código

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

Restablece un valor deBooleano que indica el estado de verificación de ese jugador. Cuando es cierto, el jugador está verificado. La verificación incluye, pero no está limitada a, la verificación de número de teléfono no VOIP o la verificación de identificación del gobierno.

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

Nota que el método solo se puede llamar en el servidor de backend. Al llamarlo desde el cliente, se devolverá un error. Además, este método siempre devolverá false en Studio.


Devolução

Un valor deBooleano que indica si el jugador está verificado.

Amostras de código

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

void

El método Kick() permite que una experiencia desconecte con gracia un cliente y opcionalmente proporcione un mensaje al usuario desconectado. Esto es útil para moderar a los usuarios abusivos. Solo debe permitir a los usuarios específicos que confíen en usted para que se ejecute 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 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 Padrão: ""

Devolução

void

Move

void

La función Move Player hace que el personaje del jugador camine en la dirección dada hasta que se detenga, o se interrumpa el jugador (usando sus controles).

Esto es útil cuando se scripting NPC Humanoids que se mueve alrededor de un mapa - pero no está controlado por la entrada de un jugador real.

Nota que el segundo argumento de la función indica si el proporcionado Vector3 debe mover al jugador relativo a los coordenadas mundiales ( falso ) o el jugador's Camera ( 1> verdadero1> ).

Parâmetros

walkDirection: Vector3

La dirección del Vector3 que debe herramienta de movimientoel jugador.

relativeToCamera: bool

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

Valor Padrão: false

Devolução

void

Amostras de código

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)

SetAccountAge

void
Segurança do plugin

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

Se usa para establecer la propiedad Player que describe cuánto tiempo ha estado registrado una cuenta de jugador en días.

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

Parâmetros

accountAge: number

La edad de la cuenta en días.


Devolução

void

Amostras de código

Setting the Player's Account Age

local Players = game:GetService("Players")
local player = Players.LocalPlayer
player:SetAccountAge(100)
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

void
Segurança do plugin

Este método establece si el jugador ve 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 filtrado de chat, todo el chat debería filtrarse por TextService cuando se transmita a otros jugadores o en la pantalla del jugador. TextService:FilterStringAsync()返回一个 TextFilterResult objeto que se puede filtrar según el propósito del mensaje.

Parâmetros

value: bool

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


Devolução

void

GetFriendsOnline

Rendimentos

Esta función devuelve un diccionario de amigos en línea, limitado por el valor maxFriends. La función usa 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 esté 0 (sitio web móvil).


<tbody>
<tr>
<td><b>VisitorId</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>Nombre de Clase.Player.DisplayName</code> del amistad.</td>
</tr>
<tr>
<td><b>Último en línea</b></td>
<td>cadena</td>
<td>Cuando el amigo estuvo en conectadopor última vez.</td>
</tr>
<tr>
<td><b>Está en línea</b></td>
<td>booleano</td>
<td>Si el amigo está 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>LugarId</b></td>
<td>número</td>
<td>El ID del lugar de la última ubicación del amistad.</td>
</tr>
<tr>
<td><b>Juego de ID</b></td>
<td>cadena</td>
<td>El <code>Modelo de datos/Id de trabajo del amigo</code> de la última ubicación del amigo.</td>
</tr>
<tr>
<td><b>Tipo de ubicación</b></td>
<td>número</td>
<td>
El tipo de ubicación del último lugar del amistad:
<table>
</table>
</td>
</tr>
</tbody>
NombreTipoDescripción

Parâmetros

maxFriends: number

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

Valor Padrão: 200

Devolução

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

Amostras de código

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

Rendimentos

La función GetRankInGroup Player devuelve el rango del jugador en el grupo como un número 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 todavía pensará que están 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 múltiples llamadas a GetRankInGroup en el mismo jugador con el mismo ID de grupo producirán el mismo resultado que cuando el método se llamó por primera vez con el ID de grupo proporcionado. El comportamiento de caché está en una base per-peer: un servidor no comparte el mismo caché que un cliente.

Parâmetros

groupId: number

El groupId del grupo especificado.


Devolução

El rango del jugador en el grupo.

Amostras de código

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

Rendimentos

La función GetRoleInGroup Player devuelve el papel 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 todavía pensará que están 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 múltiples llamadas de GetRoleInGroup en el mismo jugador con el mismo ID de grupo producirán el mismo resultado que cuando el método se llamó por primera vez con el ID de grupo proporcionado. El comportamiento de caché está en una base per-peer: un servidor no comparte el mismo caché que un cliente.

Parâmetros

groupId: number

El grupoId del grupo especificado.


Devolução

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

Amostras de código

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

Rendimentos

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

Parâmetros

userId: number

El Player.UserId del jugador especificado.


Devolução

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

Amostras de código

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

Rendimentos

La función IsInGroup envía una solicitud al sitio web de Roblox para preguntar si un jugador es un miembro de un grupo, dado el ID 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 todavía pensará que están 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 caché los resultados, por lo que múltiples llamadas a IsInGroup en el mismo jugador con el mismo ID de grupo producirán el mismo resultado que cuando el método se llamó por primera vez con el ID de grupo proporcionado. El comportamiento de caché está en una base per-peer: un servidor no comparte el mismo caché que un cliente.

Parâmetros

groupId: number

El grupoId del grupo especificado.


Devolução

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

Amostras de código

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

void
Rendimentos

La función LoadCharacter Player crea un nuevo personaje para el jugador, eliminando el viejo. También limpia el Backpack y 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 el aspecto del jugador.

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 el personaje se está cargando, incluyendo 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 de nuevo para el mismo jugador hasta que se haya activado el evento Player.CharacterAppearanceLoaded de ese jugador.

Evento de carga de personaje

Llamar al Player:LoadCharacter() con un Avatar R15 dispara eventos en la siguiente orden (Nota: la orden R6 es diferente):

  1. Player.Character conjuntos
  2. Player.CharacterAdded fuegos
  3. Player.Changed fuego con un valor de "Personaje"
  4. La apariencia del personaje se inicializa
  5. Player.CharacterAppearanceLoaded fuego
  6. Character.Parent establece en el Modelo de Datos
  7. El personaje se construye y el personaje escala
  8. El personaje se mueve a la ubicación de generación
  9. Cargar personaje devuelve

Devolução

void

Amostras de código

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

void
Rendimentos

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

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

Véase 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.


Devolução

void

Amostras de código

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

void
Rendimentos

Para las experiencias en las que se habilita el streaming de instancia streaming a las regiones del jugador (partes y terreno) alrededor de la ubicación especificada X , Y , 1>Z1> en el mundo 3D. Es útil si

El efecto de esta llamada será temporal y no hay garantías de lo que se transmitirá alrededor de 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 el streaming alrededor de un área no es una garantía de que el contenido esté presente cuando se completa la solicitud, ya que el streaming está afectado por la capacidad de la red del cliente, limitaciones de memoria y otros factores.

Parâmetros

position: Vector3

Ubicación mundial donde se solicita el streaming.

timeOut: number

Tiempo de espera opcional para la solicitud.

Valor Padrão: 0

Devolução

void

Eventos

CharacterAdded

El evento PersonaJuegoAñadido se activa cuando el personaje de un jugador se genera (o reaparece). Este evento se activa poco después de establecer Player.Character a un valor no nil o llamar 2>Class.Player:LoadCharacter() , que es antes de que el personaje esté asociado al5>Class.Workspace5> .

Esto se puede utilizar junto con el evento Player.CharacterRemoving, que se activa justo antes de que se elimine el personaje de un jugador, generalmente después de la muerte. Como tal, ambos de estos eventos pueden potencialmente activarse muchas veces cuando los jugadores mueren y luego reaparecen en un lugar. Si desea detectar cuando un jugador se une o deja el juego, use los

Tenga en cuenta que el Humanoid y sus partes del cuerpo predeterminadas (cabeza, torso y extremidades) existirán cuando se activa este evento, pero los artículos de ropa como

Parâmetros

character: Model

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


Amostras de código

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)
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)
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 la apariencia completa de un Player.Character se ha insertado.

Un Player.Character generalmente tiene un rango de objetos que modifican su aspecto, look, incluidos Accoutrements , Shirts , 1> Class.Pants1> y 4> Class.CharacterMesh|

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

Parâmetros

character: Model

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


Amostras de código

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 CharacterRemoving se activa justo antes de que se elimine el personaje de un jugador, como cuando el jugador reaparece.

Este evento se puede utilizar junto con el evento Player.CharacterAdded, que se activa cuando se genera o reaparece el personaje de un jugador. Por instancia, si desea imprimir un mensaje cada vez que un jugador se genera 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 refiere a la Character de un Player . Si necesitas rastrear en cambio cuando se una/se vaya un jugador del juego, usa los eventos Players.PlayerAdded y 1> Class.Players.PlayerRemoving1> .

Parâmetros

character: Model

Una instancia del personaje que se está eliminando.


Amostras de código

Player.CharacterRemoving

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

Chatted

El evento Chatted se activa cuando un Player escribe un mensaje y presiona Enter en la barra de chat proporcionada por Roblox. Esto se hace con algunos atributos de Lua por el script de chat predeterminado. Puedes evitar que los jugadores chateen usando algunos atributos de Lua al desactivar el chat StarterGui:SetCoreGuiEnabled() y desactivar el chat

Comandos de chat

Usando este evento y algunas funciones de manipulación de cuerda, como string.sub() y string.lower(), es posible crear comandos de chat, incluso con argumentos como nom

Filtrado

El texto de la notificación se activó con este evento es no filtrado . Si estás mostrando la entrada del jugador como un chat a otros jugadores en cualquier forma, debe ser filtrado usando Chat:FilterStringAsync() . Ten esto en mente cuando crees tus propios sistemas de chat; si tu juego no filtra correctamente el chat, puede tomar una acción de moderación.

Parâmetros

message: string

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

recipient: Player

Depreciado. Este era el jugador que era el objetivo pretendido del mensaje de chat.


Amostras de código

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)
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)
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 a player como inactividad. El tiempo es el número de segundos que han pasado desde ese punto. El evento continúa activando cada 30 segundos durante el tiempo que el jugador permanece inactividad.

Este evento solo se activa en scripts del 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 alertar a los jugadores de que se desconectarán pronto, desconectando jugadores antes de esos 20 minutos o otras características lejos del teclado (AFK).

Para rastrear con qué frecuencia producirselas desconexiones automáticas, intenta relacionar este evento con ocasiones de Players.PlayerRemoving .

Parâmetros

time: number

El tiempo en segundos que el jugador ha estado inactividad.


Amostras de código

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 activa cuando el estado de teletransporte de un jugador cambia. Este evento es útil para detectar si una teletransportación tuvo éxito.

¿Qué es el estado de teletransporte?

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

Parâmetros

teleportState: Enum.TeleportState
placeId: number

El ID del lugar al que se teletransporta el Player

spawnName: string

El nombre del lugar de inicio para teletransportarse, si TeleportService:TeleportToSpawnByName() se ha utilizado.


Amostras de código

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)