Player

Mostrar obsoleto

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

Um objeto Jogador é um cliente que está atualmente conectado.Esses objetos são adicionados ao serviço Players quando um novo jogador se conecta, então removidos quando eles eventualmente se desconectam do servidor.

A propriedade Instance.Name reflete o nome de usuário do jogador.Ao salvar informações sobre um jogador, você deve usar seu Player.UserId pois é possível que um jogador possa alterar seu nome de usuário.

Existem vários métodos semelhantes no serviço Players para trabalhar com objetos Jogador. Use esses sobre seus respectivos métodos Instance:

Amostras de código

Este exemplo de código mostra a criação de valores de estatísticas de placares na interface de lista de jogadores padrão do Roblox.Cria um líder de "Pontuação" que começa em 0.

Estatísticas de Líder

local Players = game:GetService("Players")
local function onPlayerAdded(player)
-- Crie um contêiner para leaderstats
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
-- Crie um valor de leaderstat
local vScore = Instance.new("IntValue")
vScore.Name = "Score"
vScore.Value = 0
vScore.Parent = leaderstats
-- Adicionar ao jogador (exibindo-o)
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)

Resumo

Propriedades

Métodos

Eventos

Propriedades

AccountAge

Somente leitura
Não replicado
Ler Parallel

O AccountAge é uma propriedade Player que descreve quanto tempo atrás a conta de um jogador foi registrada em dias.É definido usando a função Player:SetAccountAge(), que não pode ser acessada por scripts.

Essa propriedade é útil para mostrar condicionalmente o conteúdo de novos jogadores do Roblox, como tutoriais.

Amostras de código

Este exemplo de código adiciona uma marca aos jogadores mostrando sobre quantos anos é sua conta.A marca usa a idade da conta de um jogador para determinar se eles são um Novo Jogador, Jogador Veterano ou Jogador Regular.

Marca de Idade da Conta

local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- uma semana
local MIN_AGE_VETERAN = 365 -- um ano
-- Essa função marca uma parte com texto usando um 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) -- Preencher pai
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Adicionar à peça
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)
-- Ouça este jogador sendo gerado
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

A propriedade AutoJumpEnabled determina se o Player.Character de um Player usando um dispositivo móvel saltará automaticamente quando atingir um obstáculo.Isso pode tornar os níveis mais navegáveis enquanto em um dispositivo móvel.

Quando o jogador entra no jogo, o valor StarterPlayer.AutoJumpEnabled determina o estado inicial dessa propriedade.Então, essa propriedade determina o valor da propriedade Humanoid.AutoJumpEnabled da Player.Character no momento do spawn.Em outras palavras, é possível definir o comportamento de pulo automático em uma base por personagem, por jogador e por jogo usando essas três propriedades.

Amostras de código

Este exemplo de código é destinado a um TextButton. Ele permite que o jogador alterne o comportamento de pulo automático enquanto estiver em um dispositivo móvel.

Alternar Pulo Automático

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local button = script.Parent
local function update()
-- Atualizar texto do botão
if player.AutoJumpEnabled then
button.Text = "Auto-Jump is ON"
else
button.Text = "Auto-Jump is OFF"
end
-- Reflete a propriedade no personagem do jogador, se ele tiver uma
if player.Character then
local human = player.Character:FindFirstChild("Humanoid")
if human then
human.AutoJumpEnabled = player.AutoJumpEnabled
end
end
end
local function onActivated()
-- Alternar pulo automático
player.AutoJumpEnabled = not player.AutoJumpEnabled
-- Atualize tudo o mais
update()
end
button.Activated:Connect(onActivated)
update()

CameraMaxZoomDistance

Ler Parallel

A propriedade CameraMaxZoomDistance Player define a distância máxima em studs que a câmera pode estar do personagem com as câmeras padrão.

Em outras palavras, ele controla a distância máxima que a câmera do jogador pode se afastar.

O valor padrão desta propriedade é definido por StarterPlayer.CameraMaxZoomDistance .Se esse valor for definido para um valor inferior a Player.CameraMinZoomDistance, ele será aumentado para CameraMinZoomDistance.

Amostras 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

Ler Parallel

A propriedade CameraMinZoonDistance Player define a distância mínima em studs que a câmera pode estar do personagem com as câmeras padrão.

Em outras palavras, ele controla a distância mínima em que a câmera do jogador é permitida se aproximar.

O valor padrão desta propriedade é definido por StarterPlayer.CameraMinZoomDistance .Se esse valor for definido para um valor maior que Player.CameraMaxZoomDistance , ele será reduzido para CameraMaxZoomDistance.

Amostras 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

Ler Parallel

A propriedade Modo de Câmera define o modo de câmera do jogador, padrão para terceira pessoa.

Terceira Pessoa

No modo padrão de terceira pessoa ( Enum.CameraMode.Classic ), o personagem pode ser visto na câmera. Enquanto neste modo, o comportamento padrão é:

  • Jogadores podem clicar com o botão direito e arrastar (鼠), tocar e arrastar (celular), usar o botão analógico secundário (gamepad), ou pressionar as setas esquerda/direita (teclado) para girar a câmera em torno de seu personagem.
  • Quando um jogador move seu personagem, ele enfrenta na direção de movimento correspondente.
  • Os jogadores podem ampliar e reduzir livremente, até mesmo para a primeira pessoa em zoom total em.

Primeira Pessoa

No modo de primeira pessoa ( Enum.CameraMode.LockFirstPerson ), a câmera do jogador é ampliada até o fim.A menos que haja uma GUI visível presente com o set de propriedades GuiButton.Modal definido para true, movendo o mouse, arrastando no celular ou usando o botão secundário em um gamepad, a câmera girará em torno do personagem.

Amostras 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

Ler Parallel

A propriedade CanLoadCharacterAppearance Player determina se a aparência do personagem será carregada quando o jogador for gerado.O valor padrão desta propriedade é definido por StarterPlayer.LoadPlayerAppearance .

Se verdadeiro , o personagem carregará a aparência do jogador correspondente ao jogador Player.CharacterAppearanceId .

Se falsa , o jogador será gerado com uma aparência padrão - um modelo de personagem cinza sem quaisquer chapéus, camisas, calças, etc.

Tentar definir a propriedade depois que o personagem foi gerado não alterará o personagem, você deve chamar Player:LoadCharacter() para carregar a nova aparência.

Amostras 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

Ler Parallel

A propriedade Personagem contém uma referência a um Model que contém um Humanoid , partes do corpo, scripts e outros objetos necessários para simular o avatar do jogador na experiência.O modelo é parentado para o Workspace mas pode ser movido.É carregado automaticamente quando Players.CharacterAutoLoads é true e pode ser carregado manualmente caso contrário usando Player:LoadCharacter() .

Inicialmente, essa propriedade é nil e é definida quando o personagem do jogador aparece pela primeira vez.Use o evento Player.CharacterAdded para detectar quando o personagem de um jogador carrega corretamente e o evento Player.CharacterRemoving para detectar quando o personagem está prestes a desaparecer.Evite usar Object:GetPropertyChangedSignal() nesta propriedade.

Observe que LocalScripts que são clonados de StarterGui ou StarterPack em um jogador's PlayerGui ou Backpack respectivamente são frequentemente executados antes que o modelo de personagem antigo seja substituído, então Player.Character pode se referir ao modelo antigo cuja propriedade Parent é nil.Portanto, em um LocalScript sob StarterGui ou StarterPack , é aconselhável garantir que o pai de Personagem não seja nil antes de usá-lo, por exemplo:


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

Essa propriedade determina o ID do usuário da conta cuja aparência de personagem é usada para um jogador de character.Por padrão, esta propriedade é a Player.UserId, que usa o avatar do jogador como ele o criou no site do Roblox.

Alterar esta propriedade para o ID do usuário de outra conta fará com que o jogador apareça com a aparência dessa conta ( chapéus, camisas, calças, etc ).

Jogos também podem alternar se a aparência do personagem de um jogador é carregada no jogo ou não alterando a propriedade StarterPlayer.LoadCharacterAppearance.

Amostras de código

Este exemplo de código permite que os jogadores conversem "/disguise xyz", onde xyz é um ID de usuário ou nome de usuário, e eles reaparecerão como o avatar daquele conta.Tente digitar "/disguise 261" ou "/disguise Shedletsky"!

Comando de Disfarce

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 -- Número falhou ao ser analisado, talvez eles tenham digitado um nome de usuário em vez disso
pcall(function() -- Essa chamada pode falhar às vezes!
id = Players:GetUserIdFromNameAsync(input) -- Obter ID de recuperação a partir do nome
end)
end
if id then
-- Defina a aparência do personagem e depois respawn
player.CharacterAppearanceId = id
player:LoadCharacter()
else
-- Não conseguimos obter um ID de sua entrada
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

DevCameraOcclusionMode

Ler Parallel

Define como os scripts de câmera padrão lidam com objetos entre a câmera e o assunto da câmera.Definido por StarterPlayer.DevCameraOcclusionMode e não pode ser alterado para jogadores individuais.

O valor padrão é Zoom (0). Veja Enum.DevCameraOcclusionMode para uma lista de modos disponíveis.

Ler Parallel

A propriedade DevComputerCameraMode determina a maneira pela qual um jogador move sua câmera ao usar um dispositivo com mouse e teclado.Veja Enum.DevComputerCameraMovementMode para uma descrição de cada modo de controle de câmera disponível.Essa propriedade não pode ser definida usando um LocalScript (ela deve ser definida no servidor usando um Script).

O valor padrão desta propriedade é determinado por StarterPlayer.DevComputerCameraMovementMode.

A palavra "Computador" neste nome de propriedade se refere a dispositivos não TouchEnabled , não GamepadEnabled .

Quando definido para Escolha do Usuário , um jogador pode escolher entre qualquer modo de controle (exceto Programável ) nas configurações da experiência durante o jogo.Em geral, é uma boa ideia permitir que os jogadores escolham o modo de controle para maximizar a acessibilidade.

É possível criar um esquema de controle personalizado definindo essa propriedade para Scriptable .

Essa propriedade não afeta jogadores usando um dispositivo com toque habilitado. Veja Player.DevTouchCameraMode.

Amostras 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

Ler Parallel

A propriedade DevComputerMovementMode determina a maneira pela qual um jogador move seu personagem ao usar um dispositivo com mouse e teclado.Veja Enum.DevComputerMovementMode para uma descrição de cada modo de controle de movimento disponível.Essa propriedade não pode ser definida usando um LocalScript (ela deve ser definida no servidor usando um Script).

O valor padrão desta propriedade é determinado por StarterPlayer.DevComputerMovementMode.

A palavra "Computador" neste nome de propriedade se refere a dispositivos não TouchEnabled .

Quando definido para Escolha do Usuário , um jogador pode escolher entre qualquer modo de controle (exceto Programável ) nas configurações da experiência durante o jogo.Em geral, é uma boa ideia permitir que os jogadores escolham seu modo de controle para maximizar a acessibilidade.

É possível criar um esquema de controle personalizado definindo essa propriedade para Scriptable .

Essa propriedade não afeta jogadores usando um dispositivo habilitado para toque. Veja Player.DevTouchMovementMode.

Amostras 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

Ler Parallel

Essa propriedade determina se um jogador é capaz de alternar o bloqueio Mouse pressionando Shift.Um jogador pode desativar o botão de bloqueio do mouse nas configurações da experiência durante o jogo.Por padrão, esta propriedade é definida para o valor de StarterPlayer.EnableMouseLockOption .Isso pode ser definido do lado do servidor durante o tempo de execução usando um Script.Não pode ser definido do lado do cliente.

Quando o bloqueio do mouse estiver ativado, o cursor do jogador é bloqueado no centro da tela.Mover o mouse orbitará a câmera ao redor do jogador character e o personagem enfrentará a mesma direção que o camera .Também compensa a visão da câmera apenas sobre o ombro direito do personagem do jogador.

Observe que as APIs relacionadas ao shift-lock estão em processo de serem depreciadas, portanto, é recomendado usar UserInputService.MouseBehavior em vez disso para bloquear o mouse.

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

A propriedade DevTouchCameraMode determina a maneira pela qual um jogador move sua câmera ao usar um dispositivo TouchEnabled.Veja Enum.DevTouchCameraMovementMode para uma descrição de cada modo de controle de câmera disponível.Essa propriedade não pode ser definida usando um LocalScript (ela deve ser definida no servidor usando um Script ).

O valor padrão desta propriedade é determinado por StarterPlayer.DevTouchCameraMovementMode.

Quando definido para Escolha do Usuário , um jogador pode escolher entre qualquer modo de controle (exceto Programável ) nas configurações da experiência durante o jogo.Em geral, é uma boa ideia permitir que os jogadores escolham seu modo de controle para maximizar a acessibilidade.

É possível criar um esquema de controle personalizado definindo essa propriedade para Scriptable .

Essa propriedade não afeta jogadores que não estão usando um dispositivo habilitado para toque. Veja Player.DevComputerCameraMovementMode.

Amostras 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

Ler Parallel

A propriedade DevTouchMovementMode determina a maneira pela qual um jogador move seu personagem ao usar um dispositivo TouchEnabled.Veja Enum.DevTouchMovementMode para uma descrição de cada modo de controle de movimento disponível.Essa propriedade não pode ser definida usando um LocalScript (ela deve ser definida no servidor usando um Script ).

O valor padrão desta propriedade é determinado por StarterPlayer.DevTouchMovementMode.

Quando definido para Escolha do Usuário , um jogador pode escolher entre qualquer modo de controle (exceto Programável ) nas configurações da experiência durante o jogo.Em geral, é uma boa ideia permitir que os jogadores escolham o modo de controle para maximizar a acessibilidade.

É possível criar um esquema de controle personalizado definindo essa propriedade para Scriptable .

Essa propriedade não afeta jogadores que não estão usando um dispositivo habilitado para toque. Veja Player.DevComputerMovementMode.

Amostras 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

Ler Parallel

O DisplayName é uma propriedade Player que contém o nome de exibição do usuário autenticado associado ao objeto Player.Ao contrário de nomes de usuários, os nomes de exibição são nomes não exclusivos que um jogador exibe para os outros.Se o usuário do Roblox não escolheu nenhuma, a propriedade lerá a mesma que a propriedade Name.

Nota:

  • Como os nomes de exibição não são exclusivos, é possível que dois jogadores em uma única instância tenham nomes idênticos.Se você precisar de um identificador globalmente único para um jogador, use Player.UserId (que é estático) ou Player.Name (que é o nome de usuário atual) em vez disso.
  • Personagens gerados com Player.LoadCharacter ou pelo motor do Roblox terão sua propriedade Humanoid.DisplayName atribuída à propriedade Player.DisplayName.
  • Nomes de exibição podem ter caracteres de idioma em string. Veja UTF-8 para mais informações sobre como trabalhar com strings com caracteres de idioma.

FollowUserId

Somente leitura
Não replicado
Ler Parallel

O FollowUserId é uma propriedade Player que contém o Player.UserId do usuário que um jogador seguiu para o jogo.Se o jogador não seguir ninguém para o jogo, esta propriedade será 0.Essa propriedade é útil para alertar jogadores que foram seguidos por outro jogador para o jogo.

Você pode obter o nome do jogador seguido usando esse ID de usuário e a função Players:GetNameFromUserIdAsync().

Amostras 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

Segurança não acessível
Ler Parallel

A propriedade JogabilidadePausada indica se o jogador está atualmente em um estado de pausa em um local com StreamingEnabled ativado.É definido no cliente, mas replicado para o servidor.Para determinar o status de pausa, você pode utilizar esta propriedade.

Veja também:

HasVerifiedBadge

Ler Parallel

A propriedade HasVerifiedBadge Player indica se o jogador tem um distintivo verificado.

HealthDisplayDistance

Ler Parallel

A propriedade HealthDisplayDistance define a distância em studs em que esse jogador verá outras barras de saúde.Se definido como 0, as barras de saúde não serão exibidas.Essa propriedade é definida como StarterPlayer.HealthDisplayDistance por padrão.

Se a barra de saúde de um Humanoide for visível, você pode definir o tipo de exibição usando Humanoid.DisplayDistanceType.

Amostras 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
Somente leitura
Não replicado
Ler Parallel

A propriedade LocaleId Player mostra o ID do local que o jogador local definiu para a conta Roblox deles.Ela contém uma string com o código de duas letras (por exemplo, "en-us") para o idioma local.

Isso pode ser usado para determinar a demografia geográfica da base de jogadores do seu jogo e também é o local que será usado para localização automática de conteúdo na experiência (veja GuiBase2d.AutoLocalize).Essa propriedade permite o acesso ao local do jogador do servidor.

Veja também LocalizationService.RobloxLocaleId , a ID local usada para localizar conteúdo interno.Este será um valor diferente quando o Roblox ainda não suportar internamente o conjunto local do jogador local.

Amostras de código

Este exemplo mostra como verificar o idioma de um jogador local usando a propriedade Player.LocaleId.Imprime uma string com o código local de duas letras para o idioma do jogador local.

Por exemplo, se o local do jogador estiver nos EUA, o local será:

pt-br

Verificando o idioma de um jogador

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

MembershipType

Somente leitura
Não replicado
Ler Parallel

Essa propriedade só pode ser lida para determinar a adesão (não pode ser definida para outro tipo de adesão).Ela armazena um Enum.MembershipType enum do tipo de membros da conta.

Amostras de código

O seguinte exemplo verifica se um jogador tem Assinatura Premium.

Verificar status de membros do jogador

local Players = game:GetService("Players")
local player = Players.LocalPlayer
if player.MembershipType == Enum.MembershipType.Premium then
-- Tome alguma ação especificamente para membros Premium
end

NameDisplayDistance

Ler Parallel

A propriedade NameDisplayDistance StarterPlayer define a distância em studs em que esse jogador verá outros nomes Humanoid.Se a propriedade for definida como 0, os nomes são ocultados.Essa propriedade é definida como StarterPlayer.NameDisplayDistance por padrão.

Se a barra de saúde de um Humanoide for visível, você pode definir o tipo de exibição usando Humanoid.DisplayDistanceType.

Amostras 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

Ler Parallel

A propriedade Neutral determina se o jogador está em uma equipe específica.

  • Quando verdade, o jogador não está em uma equipe específica.Isso também significa que a propriedade Player.Team será nil e a Player.TeamColor será branca.
  • Quando falso, o jogador está em uma equipe específica.A propriedade Player.Team corresponderá ao Team em que o jogador está, assim como o Player.TeamColor .

Amostras 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
Não replicado
Segurança Roblox
Ler Parallel

Uma string de leitura exclusiva que identifica o grupo ao qual o jogador atualmente pertence dentro da experiência.Se o jogador não está em uma equipe, esse valor é uma string vazia.

Essa propriedade é essencial para integrar com o recurso de Grupo do Roblox.Use-o em combinação com SocialService:GetPlayersByPartyId() e SocialService:GetPartyAsync() para acessar informações sobre a festa de um jogador e seus membros.

Observe que este serviço não funciona durante o teste de jogo no Roblox Studio; para testar aspectos de sua experiência usando-o, você deve publicar a experiência e jogá-la no aplicativo Roblox.

Amostras de código

This example checks the Player.PartyId of a Player when they join the experience. If the player is in a party, it outputs the Player.PartyId; otherwise, it outputs that the player is not in a party.

Player.PartyId

local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local partyId = player.PartyId
if partyId ~= "" then
print("Player is in a party with ID: " .. partyId)
else
warn("Player is not in a party")
end
end)

ReplicationFocus

Ler Parallel

A propriedade ReplicationFocus Player define a parte para se concentrar na replicação em torno de um Jogador.Diferentes sistemas do Roblox que se comunicam através da rede (como física, streaming, etc) se replicam em diferentes taxas dependendo de quão próximos os objetos estão do foco de replicação.

Quando essa propriedade é nil, ela reverte ao seu comportamento padrão, que é tratar o personagem do jogador local PrimaryPart como o foco de replicação.

Essa propriedade só deve ser definida no servidor com um Script, não um LocalScript.Observe que esta propriedade não altera ou atualiza a propriedade de rede de peças.

Amostras de código

Este exemplo cria um novo BasePart e define o Player 's Player.ReplicationFocus para essa parte.

Isso demonstra a funcionalidade da propriedade ReplicationFocus.Você pode facilmente alterar a parte para a qual o foco está definido para alterar o foco de replicação.

Definindo o Foco de Replicação de um Jogador

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

Se definido, o jogador reaparecerá no dado SpawnLocation.Essa propriedade só pode ser definida através do Luau e deve conter uma referência a um válido SpawnLocation, que deve atender aos seguintes critérios:

Se RespawnLocation não for definido como válido SpawnLocation então a lógica de spawn padrão será aplicada.Para mais informações sobre isso, veja a página para SpawnLocation .

Alternativas para RespawnLocation

Amostras 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

Segurança Roblox
Ler Parallel

Team

Não replicado
Ler Parallel

A propriedade Equipe é uma referência a um objeto Team dentro do serviço Teams.Ela determina a equipe em que o jogador está; se o Player não está em uma equipe ou tem um Player.TeamColor inválido, essa propriedade é nil .Quando essa propriedade é definida, o jogador se juntou ao evento Team e ao evento Team.PlayerAdded na equipe associada.Da mesma forma, Team.PlayerRemoved fogos quando a propriedade é desdefinida de um determinado Team.

Amostras 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

Ler Parallel

A propriedade TeamColor determina com qual equipe um Jogador está associado de acordo com a Team.TeamColor daquela equipe.Mudar esta propriedade mudará Player.Team de acordo com qualquer equipe que tenha o mesmo BrickColor para seu Team.TeamColor .Se nenhum objeto de Equipe tiver a cor de equipe associada, o jogador não será associado a uma equipe.

Muitas vezes é uma ideia melhor definir Player.Team para o respectivo Team em vez de usar essa propriedade.Definir essa propriedade frequentemente leva à repetição do mesmo valor de BrickColor para uma determinada equipe em muitos scripts; isso é algo que você quer evitar ao aderir ao princípio "Não se repita a si mesmo" (DRY).

Amostras 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

Somente leitura
Não replicado
Segurança do script Roblox
Ler Parallel

UserId

Ler Parallel

O UserId é uma propriedade Player que contém um inteiro de leitura que identifica de forma exclusiva e consistente cada conta de usuário no Roblox.Ao contrário do Instance.Name de um Jogador, que pode mudar de acordo com o nome de usuário presente do usuário, esse valor nunca mudará para a mesma conta.

Essa propriedade é essencial ao salvar/carregar dados do jogador usando GlobalDataStores.Use o ID de usuário de um jogador como a chave do armazenamento de dados para que cada jogador tenha uma chave única.

Amostras 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 Padrão: ""

Devolução

()

ClearCharacterAppearance

()

A função ClearCharacterAppearance remove todos Accessory , Shirt , Pants , CharacterMesh e BodyColors do jogador dado Player.Character .Além disso, também remove a camiseta Decal no torso do jogador.A cor da parte do corpo do personagem e o rosto permanecerão inalterados.Este método não faz nada se o jogador não tiver um Personagem.

Não remove t-shirts , malhas de cabeça ou rostos.


Devolução

()

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

A função DistanceFromCharacter Player retorna a distância entre a cabeça do personagem e o ponto dado Vector3.Ele retorna 0 se o jogador não tiver Player.Character.

Isso é útil ao determinar a distância entre um jogador e outro objeto ou local no jogo.

Se você quiser determinar a distância entre duas instâncias ou posições não jogadoras, você pode usar o seguinte:


local distance = (position1 - position2).Magnitude

Parâmetros

point: Vector3

A localização a partir da qual a distância do jogador até é medida.

Valor Padrão: ""

Devolução

A distância em studs entre o jogador e o local.

Amostras 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

Retorna um dicionário que contém informações sobre como o Jogador se junta à experiência. O dicionário contém qualquer um dos seguintes campos:


<th>Tipo de valor</th>
<th>Descrição</th>
</tr>
</thead>
<tbody>
<tr>
<th>Fonte do JogoId</th>
<td>número</td>
<td>O <code>Class.DataModel.GameId</code> da experiência do <code>Jogador</code> teletransportado de.Apenas presente se o jogador se teletransportar para a experiência atual e se um servidor chamar a função de teletransporte.</td>
</tr>
<tr>
<th>Id do Local da Fonte</th>
<td>número</td>
<td>O <code>Class.DataModel.PlaceId</code> do local onde o <code>Jogador</code> teletransportou.Apenas presente se o jogador se teletransportar para o local atual e um servidor chamar a função de teletransporte.</td>
</tr>
<tr>
<th>ReferenciadoByPlayerId</th>
<td>número</td>
<td>O <code>Class.Player.UserId</code> do jogador que convidou o jogador atual para a experiência.Use esses dados para identificar o remetente e ativar a lógica de recompensa.</td>
</tr>
<tr>
<th>Membros</th>
<td>array</td>
<td>Um array que contém os números <code>Class.Player.UserId</code> dos usuários teletransportados ao lado do <code>Jogador</code>.Apenas presente se o jogador se teletransportou como parte de um grupo.</td>
</tr>
<tr>
<th>Dados de Teletransporte</th>
<td>variáveis</td>
<td>Reflete o <code>teleportData</code> especificado no teletransporte original.Útil para compartilhar informações entre os servidores para os quais o jogador se teletransporta.Apenas presente se <code>teleportData</code> for especificado e um servidor chamar a função de teletransporte.</td>
</tr>
<tr>
<th>Dados de lançamento</th>
<td>corda</td>
<td>Uma string codificada em JSON ou simples que contém dados de lançamento especificados em um <a href="/production/promotion/deeplinks">deep link</a> URL ou <code>Class.ExperienceInviteOptions.LaunchData</code>.</td>
</tr>
<tr>
<th>Contexto de Entrada de Jogo</th><td>dicionário</td>
<td>
Um dicionário que inclui informações relevantes com base no contexto da entrada do jogo. Contém as seguintes chaves:
<ul>
Fonte de Entrada : Enum.JoinSource > Tipo de Item : opcional Enum.AvatarItemType ID de Recurso : opcional string ID de Conjunto : opcional string Tipo de Recurso : opcional Enum.ResourceType ID de Recurso : opcional string
</ul>
</td>
</tr>
</tbody>
Chave

Obter Dados de Entrada e Teletransporte de Dados

Se um servidor iniciar o teletransporte do Jogador, o dicionário que este método retorna inclui os dados de teletransporte do jogador.O método Player:GetJoinData() só pode ser usado para obter dados de teletransporte no servidor.Para obter os dados no cliente, use TeleportService:GetLocalPlayerTeleportData() .

Ao contrário de TeleportService:GetLocalPlayerTeleportData(), Player:GetJoinData() fornece apenas dados de teletransporte que atendam aos seguintes critérios de segurança:

  • Está garantido que foi enviado por um servidor Roblox nas últimas 48 horas.
  • Está garantido que foi enviado com este Player .
  • O SourcePlaceId e SourceGameId são garantidos de ser o local e o universo de onde os dados foram enviados.Isso significa que você pode verificar que os dados de teleporte vieram de um local aprovado.

Como esses dados são transmitidos pelo cliente, ainda pode ser potencialmente abusado por um explorador.Dados sensíveis, como moeda do jogador, devem ser transmitidos por meio de uma solução segura como Armazenamentos de Memória.


Devolução

Um dicionário que contém valores de PlaceId e UserId (veja a tabela na descrição).

Amostras 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

A função GetMouse Player retorna o Mouse sendo usado pelo cliente.A instância do mouse do jogador pode ser usada para rastrear a entrada do mouse do usuário, incluindo cliques de botão de mouse esquerdo e direito e movimento e localização.

O serviço UserInputService fornece funções e eventos adicionais para rastrear a entrada do usuário - especialmente para dispositivos que não usam um mouse.

Nota:

  • Este item deve ser usado em um LocalScript funcionar como esperado online.
  • Após uma atualização em julho de 2014, o ícone do mouse agora pode ser definido com este método.

Devolução

Amostras 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

Escrever Parallel

GetNetworkPing retorna a latência de rede isolada do Player em segundos.“Ping” é uma medida do tempo levado para os dados serem enviados do cliente para o servidor, e depois de volta.Não envolve deserialização ou processamento de dados.

Para o lado do cliente LocalScripts, esta função só pode ser chamada no Players.LocalPlayer.Essa função é útil para identificar e solucionar problemas que ocorrem em cenários de latência de rede alta.Também é útil para disfarçar a latência, como ajustar a velocidade de animações de arremesso para projéteis.


Devolução

HasAppearanceLoaded

A função HasAppearanceLoaded Player retorna se a aparência do jogador Player.Character foi carregada ou não.

A aparência de um jogador inclui itens como o do jogador Shirt, Pants e Accessories.

Isso é útil ao determinar se a aparência de um jogador foi carregada após ele se juntar ao jogo pela primeira vez, que pode ser rastreada usando o evento Players.PlayerAdded.


Devolução

Um booleano que indica se a aparência do personagem do jogador foi carregada ou não.

Amostras de código

Este exemplo imprime o resultado de Player:HasAppearanceLoaded() depois que um jogador entra no jogo até que a aparência do jogador tenha carregado.

Verifique se a aparência de um Jogador foi carregada

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

Retorna um valor booleano indicando o status de verificação do jogador.Quando verdadeiro, o jogador é verificado.A verificação inclui, mas não se limita a, número de telefone não VOIP ou verificação de identificação do governo.

Ao implementar IsVerified, exercite cautela para garantir que a implementação não bloqueie inadvertidamente todos os usuários não verificados.

Observe que o método só pode ser chamado no servidor de backend.Chamá-lo de resultados do lado do cliente resulta em um erro.Além disso, esse método sempre retornará false no Studio.


Devolução

Um booleano indicando se o jogador está verificado.

Amostras 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

()

O método Kick() permite que uma experiência desconecte gentilmente um cliente e opcionalmente forneça uma mensagem ao usuário desconectado.Isso é útil para moderar usuários abusivos.Você deve permitir apenas usuários específicos de quem você confia para disparar esse método em outros usuários.

Chamar este método em um Player sem argumentos desconecta o usuário do servidor e fornece uma mensagem de aviso padrão.Chamando este método em um Player junto com uma string como o primeiro argumento substitui a mensagem padrão pela string fornecida.

Ao usar esse método a partir de um LocalScript , apenas o cliente do usuário local pode ser expulso.

Parâmetros

message: string

A mensagem para mostrar ao usuário após expulsar.

Valor Padrão: ""

Devolução

()

Move

()

A função Movimento Player faz com que o personagem do jogador caminhe na direção dada até ser interrompido ou interrompido pelo jogador (usando seus controles).

Isso é útil ao escrever NPC Humanoids que se movem ao redor de um mapa - mas não são controlados pela entrada de um jogador real.

Observe que o segundo argumento da função indica se o fornecido Vector3 deve mover o jogador em relação às coordenadas mundiais ( falsa ) ou ao jogador Camera ( verdadeira ).

Parâmetros

walkDirection: Vector3

A direção do Vector3 que o jogador deve mover.

Valor Padrão: ""
relativeToCamera: boolean

Um booleano que indica se o jogador deve se mover em relação à câmera do jogador.

Valor Padrão: false

Devolução

()

Amostras 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 Padrão: ""

Devolução

()

SetAccountAge

()
Segurança do plugin

A função SetAccountAge define o Player.AccountAge do jogador em dias.

É usado para definir a propriedade Player que descreve quantos dias atrás a conta de um jogador foi registrada.

Isso não define a idade do jogador na conta, mas a idade da própria conta em relação a quando foi criada pela primeira vez.

Parâmetros

accountAge: number

A idade da conta em dias.

Valor Padrão: ""

Devolução

()

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

Este exemplo de código adiciona uma marca aos jogadores mostrando sobre quantos anos é sua conta.A marca usa a idade da conta de um jogador para determinar se eles são um Novo Jogador, Jogador Veterano ou Jogador Regular.

Marca de Idade da Conta

local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- uma semana
local MIN_AGE_VETERAN = 365 -- um ano
-- Essa função marca uma parte com texto usando um 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) -- Preencher pai
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Adicionar à peça
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)
-- Ouça este jogador sendo gerado
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

SetSuperSafeChat

()
Segurança do plugin

Este método define se o jogador vê ou não o chat filtrado por TextService:FilterStringAsync() em vez de chats normais.


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

Independentemente de se um jogador tem o bate-papo filtrado ativado ou não, todo o bate-papo deve ser filtrado por TextService quando transmitido para outros jogadores ou na própria tela do jogador.TextService:FilterStringAsync() retorna um objeto TextFilterResult que pode ser filtrado de forma diferente de acordo com o uso pretendido da mensagem.

Parâmetros

value: boolean

Um booleano que indica se o jogador vê ou não o chat filtrado.

Valor Padrão: ""

Devolução

()

GetFriendsOnline

Rendimentos

Essa função retorna um array dicionário de amigos online, limitado pelo valor maxFriends. A função usa um cache de 30 segundos.

No array retornado, alguns campos estão presentes apenas para determinados tipos de localização.Por exemplo, PlaceId não estará presente quando LocationType for 0 (Site Móvel).


<th>Tipo</th>
<th>Descrição</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>ID do Visitante</b></td>
<td>número</td>
<td>O <code>Class.Player.UserId</code> do amigo.</td>
</tr>
<tr>
<td><b>Nome do usuário</b></td>
<td>corda</td>
<td>O nome de usuário do amigo.</td>
</tr>
<tr>
<td><b>Nome de Exibição</b></td>
<td>corda</td>
<td>O <code>Class.Player.DisplayName</code> do amigo.</td>
</tr>
<tr>
<td><b>Último Online</b></td>
<td>corda</td>
<td>Quando o amigo foi online pela última vez.</td>
</tr>
<tr>
<td><b>Está Online</b></td>
<td>booleano</td>
<td>Se o amigo estiver online atualmente.</td>
</tr>
<tr>
<td><b>Última Localização</b></td>
<td>corda</td>
<td>O nome da localização atual do amigo.</td>
</tr>
<tr>
<td><b>Id do Lugar</b></td>
<td>número</td>
<td>O ID do local da última localização do amigo.</td>
</tr>
<tr>
<td><b>Id do jogo</b></td>
<td>corda</td>
<td>O <code>Modelo de Dados/JobId</code> da última localização do amigo.</td>
</tr>
<tr>
<td><b>Tipo de Localização</b></td><td>número</td>
<td>
O tipo de localização da última localização do amigo: 0 Site móvel > > 1 > Página da Web > > 2 > Estúdio > > 3 > InGame do amigo > > 0 > Aplicativo móvel Web móvel
</td>
</tr>
</tbody>
Qual o nome

Parâmetros

maxFriends: number

O número máximo de amigos online para retornar.

Valor Padrão: 200

Devolução

Um dicionário de amigos online (veja a tabela acima).

Amostras 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

Rendimentos

A função GetRankInGroup Player retorna o rank do jogador no grupo como um inteiro entre 0 e 255, onde 0 é um não-membro e 255 é o dono do grupo.

Usar isso em um Script , em oposição a um LocalScript , não lhe dará a informação mais atualizada.Se um jogador deixa um grupo enquanto estiver no jogo, o GetRankInGroup ainda pensará que está nesse grupo até que ele saia.No entanto, isso não acontece quando usado com um LocalScript.

Isso ocorre porque o método armazena resultados em cache, então várias chamadas de GetRankInGroup no mesmo jogador com o mesmo ID de grupo produzirão o mesmo resultado que quando o método foi chamado pela primeira vez com o ID de grupo dado.O comportamento de cache é baseado em pares: um servidor não compartilha o mesmo cache de um cliente.

Parâmetros

groupId: number

O groupId da do grupo especificado.

Valor Padrão: ""

Devolução

O rank do jogador no grupo.

Amostras 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

Rendimentos

A função GetRoleInGroup Player retorna o papel do jogador no grupo como uma string ou convidado se o jogador não faz parte do grupo.

Usar isso em um Script , em oposição a um LocalScript , não lhe dará a informação mais atualizada.Se um jogador deixa um grupo enquanto estiver no jogo, o GetRoleInGroup ainda pensará que está nesse grupo até que ele saia.No entanto, isso não acontece quando usado com um LocalScript.

Isso ocorre porque o método armazena resultados em cache, então várias chamadas de GetRoleInGroup no mesmo jogador com o mesmo ID de grupo produzirão o mesmo resultado que quando o método foi chamado pela primeira vez com o ID de grupo dado.O comportamento de cache é baseado em pares: um servidor não compartilha o mesmo cache de um cliente.

Parâmetros

groupId: number

O groupId do grupo especificado.

Valor Padrão: ""

Devolução

O papel do jogador no grupo especificado, ou Convidado se o jogador não for um membro.

Amostras 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

Rendimentos

Essa função envia um pedido ao site do Roblox perguntando se um jogador é amigo de outro usuário, dado o Player.UserId desse usuário.Essa função armazena resultados em cache, para que várias chamadas da função no mesmo jogador com o mesmo Player.UserId possam não produzir o resultado mais atualizado.Isso não acontece quando usado em um LocalScript .

Parâmetros

userId: number

O Player.UserId do jogador especificado.

Valor Padrão: ""

Devolução

Um booleano que indica se um jogador é amigo do usuário especificado.

Amostras 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

Rendimentos

A função IsInGroup Player envia um pedido ao site do Roblox perguntando se um jogador é membro de um grupo, dado o ID desse grupo.

Usar isso em um Script , em oposição a um LocalScript , não lhe dará a informação mais atualizada.Se um jogador deixa um grupo enquanto estiver no jogo, o IsInGroup ainda pensará que está nesse grupo até que ele saia.No entanto, isso não acontece quando usado com um LocalScript.

Isso ocorre porque o método armazena resultados em cache, então várias chamadas de IsInGroup no mesmo jogador com o mesmo ID de grupo produzirão o mesmo resultado que quando o método foi chamado pela primeira vez com o ID de grupo dado.O comportamento de cache é baseado em pares: um servidor não compartilha o mesmo cache de um cliente.

Parâmetros

groupId: number

O groupId do grupo especificado.

Valor Padrão: ""

Devolução

Um booleano que indica se o jogador está no grupo especificado.

Amostras 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

()
Rendimentos

A função LoadCharacter Player cria um novo personagem para o jogador, removendo o antigo.Também remove os Backpack e PlayerGui do jogador.

Isso é útil em casos em que você deseja recarregar o personagem sem matar o jogador, como quando você quer carregar uma nova aparência de personagem depois de alterar a aparência do jogador Player.CharacterAppearance.

Nota: A função é semelhante a Player:LoadCharacterBlocking(), mas o pedido é processado de forma assíncrona em vez de sincronamente.Isso significa que outras tarefas poderão continuar enquanto o personagem está sendo carregado, incluindo o renderizamento do jogo e quaisquer outras tarefas.Além disso, essa função pode ser usada em um script, enquanto LoadCharacterBlocking não pode.

Depois de chamar LoadCharacter para um jogador individual, não é recomendado chamá-lo novamente para o mesmo jogador até que o evento dele Player.CharacterAppearanceLoaded tenha sido disparado.

Ordem de carregamento de personagem

Chamar o Player:LoadCharacter() com um Avatar R15 dispara eventos na seguinte ordem (Nota: a ordem de R6 é diferente):

  1. Jogador.Personagens define
  2. Fogos de Personagem Adicionado do Jogador
  3. Jogador.Changed dispara com um valor de "Personagem"
  4. Aparência de personagem é inicializada
  5. Jogador.CharacterAppearanceLoaded dispara
  6. Character.Parent define para o DataModel
  7. A construção do personagem e as escalas do personagem
  8. O personagem se move para o local de spawn
  9. Retornos de CarregarPersonagem

Devolução

()

Amostras 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

()
Rendimentos

Essa função gera um avatar para que ele tenha tudo equipado no passado em HumanoidDescription .

Depois de chamar LoadCharacterWithHumanoidDescription para um jogador individual, não é recomendado chamar a função novamente para o mesmo jogador até que o evento Player.CharacterAppearanceLoaded desse jogador tenha sido disparado.

Veja também:

Parâmetros

humanoidDescription: HumanoidDescription

Um HumanoidDescription que contém traços como partes do corpo/cores, escalonamento de corpo, acessórios, roupas e animações que serão equipados ao personagem carregado.

Valor Padrão: ""

Devolução

()

Amostras 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

()
Rendimentos

Para experiências onde o streaming de instância está habilitado, solicitações que o servidor transmita para as regiões do jogador (partes e terreno) ao redor da localização especificada X , Y , Z na 3D mundo.É útil se a experiência souber que o CFrame do jogador será definido para o local especificado em um futuro próximo.Sem fornecer a localização com essa chamada, o jogador pode não ter transmitido conteúdo para o destino, resultando em uma pausa de streaming ou outro comportamento indesejável.

O efeito dessa chamada será temporário e não há garantias de o que será transmitido em torno da localização especificada.Limites de memória do cliente e condições de rede podem impactar o que estará disponível no cliente.

Precaução de Uso

Solicitar streaming em torno de uma área não é uma garantia de que o conteúdo estará presente quando a solicitação for concluída, pois o streaming é afetado pela largura de banda da rede do cliente, limitações de memória e outros fatores.

Parâmetros

position: Vector3

Localização mundial onde o streaming é solicitado.

Valor Padrão: ""
timeOut: number

Tempo limite opcional para a solicitação, a duração máxima que o motor tenta transmitir regiões ao redor do parâmetro position antes de abandonar a solicitação.Se você não especificar um valor, o limite de tempo é efetivamente infinito.No entanto, se o cliente estiver com pouca memória, o motor abandona todas as solicitações de streaming, mesmo aquelas que ainda estão dentro da duração do limite de tempo.

Valor Padrão: 0

Devolução

()

Eventos

CharacterAdded

O evento CharacterAdded é acionado quando o personagem de um jogador é gerado (ou respawnado).Este evento dispara logo após definir Player.Character para um valor não nil ou chamar Player:LoadCharacter(), que é antes do personagem ser pai para o Workspace.

Isso pode ser usado ao lado do evento Player.CharacterRemoving, que dispara imediatamente antes que o personagem de um jogador seja removido, geralmente após a morte.Como tal, ambos os eventos podem potencialmente disparar muitas vezes como os jogadores morrem e reaparecem em um lugar.Se você quiser detectar quando um jogador se junta ou deixa o jogo, use os eventos Players.PlayerAdded e Players.PlayerRemoving em vez disso.

Observe que o Humanoid e suas partes do corpo padrão (cabeça, torso e membros) existirão quando este evento for disparado, mas itens de roupa como Hats , Shirts e Pants podem levar alguns segundos para serem adicionados ao personagem.Conecte Instance.ChildAdded no personagem adicionado para detectá-los ou aguarde o evento Player.CharacterAppearanceLoaded para ter certeza de que o personagem tem tudo equipado.

Parâmetros

character: Model

Uma instância do personagem que foi gerada/respawnada.


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

Este exemplo de código remove automaticamente objetos Accessory como chapéus do personagem Player quando eles reaparecem.Aviso: isso inclui cabelo, então este script pode causar calvície aguda.

Quando o Character() é added , esperamos que o RunService.Stepped dispare uma vez (usando a função wait de eventos).Isso é para que a lógica de remoção de acessórios execute um quadro após o surgimento do personagem.Uma advertência pode aparecer se você excluir acessórios muito rapidamente após o jogador aparecer, então esperar um quadro evitará isso.

Removedor de Acessórios

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)
-- Espere um momento breve antes de remover os acessórios para evitar o
-- Aviso "Algo inesperadamente definido como ___ pai para NULL"
RunService.Stepped:Wait()
-- Verifique se existem acessórios existentes no personagem do jogador
for _, child in pairs(character:GetChildren()) do
destroyAccessory(child)
end
-- Chapéus podem ser adicionados ao personagem um momento depois
-- Fogos de personagem adicionados, então ouvimos aqueles que usam ChildAdded
character.ChildAdded:Connect(destroyAccessory)
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)

CharacterAppearanceLoaded

Este evento dispara quando a aparência completa de um Player.Character foi inserida.

Um Player.Character geralmente tem uma gama de objetos modificando sua aparência, incluindo Accoutrements , Shirts , Pants e CharacterMeshes .Este evento será disparado quando todos esses objetos forem inseridos no Player.Character .

Este evento só é disparado no servidor.

Um uso para este evento é garantir que todos os acessórios tenham sido carregados antes de destruí-los. Veja abaixo um exemplo disso.

Parâmetros

character: Model

O Class.Player.Character``Class.Model.


Amostras 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

O evento Remoção de Personagem é acionado imediatamente antes que o personagem de um jogador seja removido, como quando o jogador está sendo respawnado.

Este evento pode ser usado ao lado do evento Player.CharacterAdded, que dispara quando o personagem de um jogador é gerado ou respawnado.Por exemplo, se você quiser imprimir uma mensagem sempre que um jogador aparece e morre:


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 está apenas preocupado com o Character de um Player.Se você precisar rastrear quando um jogador entra/sai do jogo, use os eventos Players.PlayerAdded e Players.PlayerRemoving.

Parâmetros

character: Model

Uma instância do personagem que está sendo removida.


Amostras 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

O evento de bate-papo dispara quando um Player tipos uma mensagem e pressiona Enter na barra de bate-papo fornecida pelo Roblox.Isso é feito usando algumas dependências de Luau pelo script de chat padrão.Você pode impedir que os jogadores conversem usando StarterGui:SetCoreGuiEnabled() e desabilitando o Chat Enum.CoreGuiType.

Comandos de Bate-papo

Usando este evento e algumas funções de manipulação de corda, como string.sub() e string.lower(), é possível criar comandos de chat, mesmo com argumentos como nomes de jogadores.Normalmente, comandos são prefixados como heal PlayerName .Para verificar um prefixo em uma string, use string.sub() na mensagem para verificar uma substring da mensagem: string.sub(message, 1, 6) == "/heal " (note a inclusão do espaço).Então, extraia o resto do comando usando string.sub() novamente: string.sub(message, 7) será igual ao nome do jogador.Verifique se esse jogador existe e, se sim, execute a ação do comando (neste exemplo, curá-los).Verifique os exemplos de códigos para comandos de chat.

Filtro

O texto da mensagem disparado com este evento é não filtrado .Se você estiver exibindo a entrada do jogador como chat para outros jogadores de qualquer forma, deve ser filtrada usando Chat:FilterStringAsync().Tenha isso em mente ao criar seus próprios sistemas de chat; se o seu jogo não filtrar corretamente o chat, pode haver uma ação de moderação tomada contra ele.

Parâmetros

message: string

O conteúdo da mensagem que o jogador digitou no chat.

recipient: Player

Descontinuado. Para mensagens sussurradas, este foi o Jogador que era o alvo pretendido da mensagem de chat.


Amostras 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 dispara aproximadamente dois minutos após a classe do motor de jogo classificar o player como inactivo.O tempo é o número de segundos que se passaram desde esse ponto.O evento continua a disparar a cada 30 segundos enquanto o jogador permanecer inactivo.

Este evento só é disparado em scripts de cliente, não em scripts de servidor; use um RemoteEvent para notificar o servidor de jogadores inativos.

O Roblox desconecta automaticamente os jogadores que estiveram inativos por pelo menos 20 minutos, então este evento é útil para alertar os jogadores que eles vão ser desconectados em breve, desconectando os jogadores antes desses 20 minutos ou outros longe do teclado (AFK) recursos.

Para rastrear com que frequência ocorrem desconexões automáticas, tente correlacionar esse evento com ocorrências de Players.PlayerRemoving .

Parâmetros

time: number

O tempo em segundos que o jogador esteve inactivo.


Amostras 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

Disparado quando o Estado de Teleporte de um jogador muda. Este evento é útil para detectar se uma teleportação foi bem-sucedida.

O que é o TeleportState?

Quando um pedido de teletransporte é feito usando TeleportService, há uma série de etapas antes que o Player seja teletransportado.A etapa atual é representada pelo valor Enum.TeleportState que é dado por OnTeleport.Veja abaixo um exemplo prático disso.

Parâmetros

placeId: number

O ID do local para o qual o Player está sendo teletransportado.

spawnName: string

O nome do spawn para se teletransportar, se TeleportService:TeleportToSpawnByName() for usado.


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