Um objeto Jogador é um cliente que está conectado no momento.Esses objetos são adicionados ao serviço Players quando um novo jogador se conecta, então sã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:
- Você pode obter uma tabela de objetos atuais do Jogador usando Players:GetPlayers() ; novamente, use isso em vez de Instance:GetChildren() .
- Para detectar a adição de objetos do Jogador, é recomendado usar o evento Players.PlayerAdded (em vez de Instance.ChildAdded no serviço Players).
- Da mesma forma, você pode detectar a remoção de objetos do Jogador usando Players.PlayerRemoving, que dispara apenas antes que o Jogador seja removido (em vez de Instance.ChildRemoved que dispara depois).Isso é importante se você estiver salvando informações sobre o jogador que possam ser excluídas ou limpas após a exclusão.
範例程式碼
This code sample demonstrates the creation of leaderboard stat values in Roblox's default player list UI. It creates a "Score" leaderstat that starts at 0.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
-- Create a container for leaderstats
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
-- Create one leaderstat value
local vScore = Instance.new("IntValue")
vScore.Name = "Score"
vScore.Value = 0
vScore.Parent = leaderstats
-- Add to player (displaying it)
leaderstats.Parent = player
end
Players.PlayerAdded:Connect(onPlayerAdded)
概要
屬性
Descreve a idade da conta do jogador em dias
Determina se o personagem de um jogador usando um dispositivo móvel saltará automaticamente ao atingir um obstáculo.
A distância máxima em que a câmera do jogador é permitida sair do foco.
A distância mínima em que a câmera do jogador pode se aproximar.
Muda o modo da câmera para primeira ou terceira pessoa.
Determina se a aparência do personagem será carregada quando o jogador for gerado. Se for falso, o jogador será gerado com uma aparência padrão.
Um Model controlado pelo jogador que contém um Humanoid , partes do corpo, scripts e outros objetivos.
Determina o ID do usuário da conta cuja aparência de personagem é usada para um jogador de character.
Define como a câmera padrão manipula objetos entre a câmera e o jogador.
Determina o modo de movimento da câmera do jogador ao usar uma versão de desktop do Roblox.
Determina o modo de movimento do personagem do jogador ao usar uma versão de desktop do Roblox.
Determina se o jogador pode ativar ou desativar o bloqueio do mouse.
Determina o modo de movimento da câmera do jogador ao usar um dispositivo tátil.
Determina o modo de movimento do personagem do jogador ao usar um dispositivo de toque.
O nome de exibição do UserId associado ao Jogador.
Descreve o ID do usuário do jogador que foi seguido em um jogo por um jogador.
Se o jogo do lado do cliente do jogador está atualmente pausado.
Indica se um jogador tem uma insígnia verificada.
Define a distância em que esse jogador verá as barras de saúde de outros Humanóides. Se definido como 0, as barras de saúde não serão exibidas.
Essa propriedade mostra o ID do local que o jogador local definiu para a conta Roblox deles.
Descreve o tipo de membro da conta.
Define a distância em que esse jogador verá os nomes de outros Humanóides. Se definido como 0, os nomes são ocultados.
Determina se o jogador está em uma equipe específica.
Define a peça para focar a replicação ao redor.
Se definido, o jogador reaparecerá no dado SpawnLocation .
Determina a equipe com a qual um jogador está associado.
Determina a equipe com a qual um jogador está associado.
Um identificador único atribuído a todas as contas de usuário.
方法
Remove todos os acessórios e outros objetos de aparência de personagem de um personagem de um jogador.
Retorna a distância entre a cabeça do personagem e o ponto Vector3 dado. Retorna 0 se o jogador não tiver personagem.
Retorna um dicionário que contém informações sobre como o Player se junta à experiência.
Retorna o mouse que está sendo usado pelo cliente.
Retorna a latência da rede isolada em segundos.
Retorna se a aparência do personagem do jogador foi carregada ou não.
Retorna se o jogador é verificado com sinais concretos e reais do mundo real.
Forçar a desconexão de um jogador do jogo, opcionalmente fornecendo uma mensagem.
Faz com que o personagem do jogador caminhe na direção dada até ser interrompido ou interrompido pelo jogador (usando seus controles).
Define a idade da conta do jogador.
Define se o jogador vê ou não conversas filtradas, em vez de conversas normais.
Retorna um dicionário de amigos online.
Retorna o rank do jogador no grupo como um número inteiro entre 0 e 255, onde 0 é um não-membro e 255 é o dono do grupo.
Retorna o papel do jogador no grupo como uma string, ou "Convidado" se o jogador não faz parte do grupo.
Verifica se um jogador é amigo do usuário com o dado Player.UserId .
Verifica se um jogador é membro de um grupo com o ID fornecido.
Cria um novo personagem para o jogador, removendo o antigo. Também remove o Backpack e o PlayerGui do jogador.
Gera um avatar para que ele tenha tudo equipado no passado em HumanoidDescription.
Pedidos que o servidor transmita para o jogador ao redor da localização especificada.
活動
Disparado quando o personagem de um jogador é gerado ou respawnado.
Dispara quando a aparência completa de um Player.Character foi inserida.
Dispedido imediatamente antes que o personagem de um jogador seja removido
Dispara quando um jogador conversa no jogo usando a barra de bate-papo fornecida pelo Roblox
Este evento dispara aproximadamente dois minutos depois que a classe do motor de jogo classifica o player como inactivo.O tempo é o número de segundos que decorreram desde esse ponto.
Dispensado quando o Estado de Teleporte de um jogador muda.
屬性
AccountAge
O AccountAge é uma propriedade Player que descreve há quanto tempo a conta de um jogador foi registrada em dias.É definida usando a função Player:SetAccountAge(), que não pode ser acessada por scripts.
Essa propriedade é útil para mostrar condicionalmente conteúdo de novos jogadores do Roblox, como tutoriais.
範例程式碼
This code sample adds a mark to players showing about how old their account is. The mark uses a player's account age to determine if they are a New Player, Veteran Player or Regular Player.
local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- one week
local MIN_AGE_VETERAN = 365 -- one year
-- This function marks a part with text using a BillboardGui
local function mark(part, text)
local bbgui = Instance.new("BillboardGui")
bbgui.AlwaysOnTop = true
bbgui.StudsOffsetWorldSpace = Vector3.new(0, 2, 0)
bbgui.Size = UDim2.new(0, 200, 0, 50)
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0) -- Fill parent
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Add to part
bbgui.Parent = part
bbgui.Adornee = part
end
local function onPlayerSpawned(player, character)
local head = character:WaitForChild("Head")
if player.AccountAge >= MIN_AGE_VETERAN then
mark(head, "Veteran Player")
elseif player.AccountAge <= MAX_AGE_NEW_PLAYER then
mark(head, "New Player")
else
mark(head, "Regular Player")
end
end
local function onPlayerAdded(player)
-- Listen for this player spawning
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
AutoJumpEnabled
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 estiver em um dispositivo móvel
Quando o jogador entra no jogo, o valor StarterPlayer.AutoJumpEnabled determina o estado inicial desta 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.
範例程式碼
This code sample is meant for a TextButton. It allows the player to toggle the auto-jumping behavior while on a mobile device.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local button = script.Parent
local function update()
-- Update button text
if player.AutoJumpEnabled then
button.Text = "Auto-Jump is ON"
else
button.Text = "Auto-Jump is OFF"
end
-- Reflect the property in the player's character, if they have one
if player.Character then
local human = player.Character:FindFirstChild("Humanoid")
if human then
human.AutoJumpEnabled = player.AutoJumpEnabled
end
end
end
local function onActivated()
-- Toggle auto-jump
player.AutoJumpEnabled = not player.AutoJumpEnabled
-- Update everything else
update()
end
button.Activated:Connect(onActivated)
update()
CameraMaxZoomDistance
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 este valor for definido para um valor inferior a Player.CameraMinZoomDistance, ele será aumentado para CameraMinZoomDistance.
範例程式碼
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.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMaxZoomDistance = 50
player.CameraMinZoomDistance = 75
CameraMinZoomDistance
A propriedade CameraMinZoonDistance Player define a distância mínima em metros 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 pode 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.
範例程式碼
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.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMaxZoomDistance = 50
player.CameraMinZoomDistance = 75
CameraMode
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 a direção de movimento correspondente.
- Os jogadores podem ampliar e reduzir livremente, até mesmo para a primeira pessoa em zoom total.
Primeira Pessoa
No modo de primeira pessoa ( Enum.CameraMode.LockFirstPerson ), a câmera do jogador é ampliada ao máximo.A menos que haja uma GUI visível presente com o conjunto de propriedades GuiButton.Modal definido para true , movendo o mouse, arrastando-o no celular ou usando o botão secundário em um gamepad, a câmera girará em torno do personagem
範例程式碼
This example demonstrates how to change the character's CameraMode to first person using the LockFirstPerson value of the Enum.CameraMode enum.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CameraMode = Enum.CameraMode.LockFirstPerson
CanLoadCharacterAppearance
A propriedade CanLoadCharacterAppearance Player determina se a aparência do personagem será carregada quando o jogador for spawnado.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 falso , 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.
範例程式碼
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.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CanLoadCharacterAppearance = false
Character
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 é pai do Workspace mas pode ser movido.Ele é 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 é gerado pela primeira vezUse 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 desaparecerEvite 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, portanto 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.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()end
CharacterAppearanceId
Essa propriedade determina o ID do usuário da conta cuja aparência de personagem é usada para um jogador de character .Por padrão, essa 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.
範例程式碼
This code sample allows players to chat "/disguise xyz", where xyz is a user ID or username, and they will respawn appearing like that account's avatar. Try typing "/disguise 261" or "/disguise Shedletsky"!
local Players = game:GetService("Players")
local disguiseCommand = "/disguise "
local function onPlayerChatted(player, message)
if message:sub(1, disguiseCommand:len()):lower() == disguiseCommand:lower() then
local input = message:sub(disguiseCommand:len() + 1)
local id = tonumber(input)
if not id then -- Number failed to parse, maybe they typed a username instead
pcall(function() -- This call can fail sometimes!
id = Players:GetUserIdFromNameAsync(input) -- Fetch ID from name
end)
end
if id then
-- Set character appearance then respawn
player.CharacterAppearanceId = id
player:LoadCharacter()
else
-- We couldn't get an ID from their input
end
end
end
local function onPlayerAdded(player)
player.Chatted:Connect(function(...)
onPlayerChatted(player, ...)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
DevCameraOcclusionMode
Define como os scripts de câmera padrão lidam com objetos entre a câmera e o sujeito 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.
DevComputerCameraMode
A propriedade DevComputerCameraMode determina a maneira pela qual um jogador move sua câmera ao usar um dispositivo com um mouse e um tecladoVeja Enum.DevComputerCameraMovementMode para uma descrição de cada modo de controle de câmera disponívelEssa 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 e 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 do jogo Roblox.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 esta propriedade para Scriptable .
Essa propriedade não afeta jogadores usando um dispositivo com toque habilitado. Veja Player.DevTouchCameraMode.
範例程式碼
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.
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
A propriedade DevComputerMovementMode determina a maneira pela qual um jogador move seu personagem ao usar um dispositivo com um mouse e um tecladoVeja Enum.DevComputerMovementMode para uma descrição de cada modo de controle de movimento disponívelEssa 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 refere-se 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 do jogo Roblox.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 esta propriedade para Scriptable .
Essa propriedade não afeta jogadores usando um dispositivo com suporte ao toque. Veja Player.DevTouchMovementMode.
範例程式碼
Demonstrates how to set the movement mode for players on computers using the Player.DevComputerMovementMode property.
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
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 de jogo do Roblox.Por padrão, essa 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 configurado do lado do cliente.
Quando o bloqueio do mouse é 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 logo acima do ombro direito do personagem do jogador.
Observe que as APIs relacionadas ao shift-lock estão em processo de serem descontinuadas, portanto, é recomendado usar UserInputService.MouseBehavior em vez disso para bloquear o mouse.
範例程式碼
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.
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)
DevTouchCameraMode
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ívelEssa 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 do jogo Roblox.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 esta propriedade para Scriptable .
Essa propriedade não afeta jogadores que não estão usando um dispositivo habilitado para toque. Veja Player.DevComputerCameraMovementMode.
範例程式碼
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.
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
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ívelEssa 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 do jogo Roblox.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 esta propriedade para Scriptable .
Essa propriedade não afeta jogadores que não estão usando um dispositivo habilitado para toque. Veja Player.DevComputerMovementMode.
範例程式碼
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.
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
O DisplayName é uma propriedade Player que contém o nome de exibição do usuário autenticado associado ao objeto Player.Ao contrário dos 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.
Observação:
- 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 na string. Veja UTF-8 para mais informações sobre como trabalhar com strings com caracteres de idioma.
FollowUserId
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 seguiu ninguém para o jogo, esta propriedade será 0.Essa propriedade é útil para alertar os 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().
範例程式碼
This code sample alerts players if a new player follows the local player into the game. Place this in a LocalScript in StarterPlayerScripts.
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
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 interrupção, você pode utilizar esta propriedade.
Veja também:
- Workspace.StreamingEnabled que controla se o streaming de conteúdo está habilitado
- Workspace.StreamingIntegrityMode e Enum.StreamingIntegrityMode para mais detalhes sobre quando a jogabilidade é pausada.
HasVerifiedBadge
A propriedade HasVerifiedBadge Player indica se o jogador tem um Distintivo Verificado.
HealthDisplayDistance
A propriedade HealthDisplayDistance define a distância em metros em que este jogador verá outras barras de saúde.Se definido para 0, as barras de saúde não serão exibidas.Esta propriedade é definida como StarterPlayer.HealthDisplayDistance por padrão.
Se a barra de saúde de um Humanoide estiver visível, você pode definir o tipo de exibição usando Humanoid.DisplayDistanceType.
範例程式碼
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.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.HealthDisplayDistance = 0
player.NameDisplayDistance = 0
LocaleId
A propriedade LocaleId Player mostra o ID do local que o jogador local definiu para a conta Roblox deles.Armazena 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 a localização automática do conteúdo na experiência (veja GuiBase2d.AutoLocalize).Essa propriedade permite o acesso ao local do jogador a partir 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 set local do jogador local.
範例程式碼
This example demonstrates how to check the locale of a local player using the Player.LocaleId property. It prints a string with the two letter locale code for the locale of the local player.
For instance, if the player's local is within the US, the locale will be:
en-us
local Players = game:GetService("Players")
local player = Players.LocalPlayer
print(player.LocaleId)
MembershipType
Essa propriedade só pode ser lida para determinar afiliação (não pode ser definida para outro tipo de afiliação).Ela armazena um Enum.MembershipType enum do tipo de membros da conta.
範例程式碼
The following example checks whether a player has Premium membership.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
if player.MembershipType == Enum.MembershipType.Premium then
-- Take some action specifically for Premium members
end
NameDisplayDistance
A propriedade NameDisplayDistance StarterPlayer define a distância em studs em que esse jogador verá outros nomes Humanoid.Se a propriedade estiver definida como 0, os nomes são ocultados.Esta propriedade é definida como StarterPlayer.NameDisplayDistance por padrão.
Se a barra de saúde de um Humanoide estiver visível, você pode definir o tipo de exibição usando Humanoid.DisplayDistanceType.
範例程式碼
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.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.HealthDisplayDistance = 0
player.NameDisplayDistance = 0
Neutral
A propriedade Neutra determina se o jogador está em uma equipe específica.
- Quando verdadeiro, o jogador não está em uma equipe específica.Isso também significa que a propriedade Player.Team será nula e a Player.TeamColor será branca.
- Quando false, 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 .
範例程式碼
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.
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
ReplicationFocus
A propriedade ReplicationFocus Player define a parte para focar a 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 é nula, 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 com um LocalScript.Observe que essa propriedade não altera ou atualiza a propriedade de rede de peças
範例程式碼
This example creates a new BasePart and sets the Player's Player.ReplicationFocus to that part.
This demonstrates the functionality of the ReplicationFocus property. You can easily change the part that the focus is set to to change the replication focus.
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
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:
- Descendente de Workspace
- SpawnLocation.TeamColor é definido como o Player.TeamColor ou SpawnLocation.Neutral é definido como verdadeiro
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
- Um Player vai aparecer de SpawnLocations pertencente à sua equipe. Em alguns casos, pode ser mais simples alterar o Player.Team do jogador em vez disso.
- Implemente sua própria lógica de spawn personalizada usando PVInstance:PivotTo() para mover manualmente o Player.Character.
範例程式碼
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.
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
Team
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 é nula.Quando essa propriedade é definida, o jogador se juntou ao evento Team e ao evento Team.PlayerAdded do time associado.Da mesma forma, Team.PlayerRemoved incêndios quando a propriedade é desdefinida de um determinado Team.
範例程式碼
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.
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".
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
A propriedade TeamColor determina com qual equipe um Jogador está associado de acordo com o Team.TeamColor.Alterar esta propriedade mudará Player.Team de acordo com qual equipe tem o mesmo BrickColor para o 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 propriedadeDefinir essa propriedade frequentemente leva à repetição do mesmo valor de BrickColor para uma determinada equipe em muitos scripts; isso é algo que você deseja evitar ao aderir ao princípio "Não Repita a Si Mesmo" (DRY).
範例程式碼
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.
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
UserId
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 do usuário de um jogador como chave do armazenamento de dados para que cada jogador tenha uma chave única.
範例程式碼
The below example would print the UserId of every user who entered a game.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.UserId)
end
Players.PlayerAdded:Connect(onPlayerAdded)
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.
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.
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)
方法
ClearCharacterAppearance
A função ClearCharacterAppearance remove todos Accessory , Shirt , Pants , CharacterMesh e BodyColors da aparência 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 do rosto permanecerá inalterada.Esse método não faz nada se o jogador não tiver um Personagem.
Ele não remove t-shirts , malhas de cabeça ou rostos.
返回
範例程式碼
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.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
參數
A localização a partir da qual a distância do jogador para é medida.
返回
A distância em studs entre o jogador e o local.
範例程式碼
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):
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 que o <code>Jogador</code> teletransportou.Apenas presente se o jogador se teletransportar para a experiência atual e se um servidor chamar a função de teleporte.</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 teleporte.</td></tr><tr><th>ReferenciadoPorId do Jogador</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 junto com o <code>Jogador</code>.Somente presente se o jogador se teletransportou como parte de um grupo.</td></tr><tr><th>Teletransporte de Dados</th><td>variáveis</td><td>Reflete o <code>teleportData</code> especificado no teleporte original.Útil para compartilhar informações entre servidores para os quais o jogador se teletransporta.Apenas presente se <code>teleportData</code> foi especificado e um servidor chama a função de teletransporte.</td></tr><tr><th>Dados de Lançamento</th><td>texto</td><td>Uma corda simples ou codificada em JSON que contém dados de lançamento especificados em um <a href="../../../production/promotion/deeplinks.md">deep link</a> URL ou <code>Class.ExperienceInviteOptions.LaunchData</code>.</td></tr><tr><th>Contexto de Entrada no 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 Tipo de Recurso : opcional string ID do Recurso : opcional string Tipo de Recurso : opcional Enum.ResourceType</ul></td></tr></tbody>
A chave |
---|
Obter Dados de Junção e Dados de Teletransporte
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 teleporte 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 tenha sido 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 podem ser potencialmente abusados 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.
返回
Um dicionário que contém os valores PlaceId e UserId (veja a tabela na descrição).
範例程式碼
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.
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.
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.
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.
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.
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 movimentos 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.
Observação:
- Este item deve ser usado em um LocalScript para funcionar como esperado online.
- Após uma atualização em julho de 2014, o ícone do mouse agora pode ser definido com esse método.
返回
範例程式碼
The below example will print:
Button 1 is down
whenever the Players.LocalPlayer left clicks.
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
GetNetworkPing retorna a latência de rede isolada do Player em segundos.“Ping” é uma medida do tempo que leva para os dados serem enviados do cliente para o servidor, e depois de volta novamente.Não envolve deserialização ou processamento de dados.
Para o lado do cliente LocalScripts, essa 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 alta na rede.Também é útil para disfarçar a latência, como ajustar a velocidade de animações de arremesso para projéteis.
返回
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, o que pode ser rastreado usando o evento Players.PlayerAdded.
返回
Um booleano indicando se a aparência do personagem do jogador foi carregada ou não.
範例程式碼
This example prints the result of Player:HasAppearanceLoaded() after a player joins the game until the player's appearance has loaded.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local loaded = player:HasAppearanceLoaded()
print(loaded)
while not loaded do
loaded = player:HasAppearanceLoaded()
print(loaded)
task.wait()
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
IsVerified
Retorna um valor binário 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, use 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 destino.Chamá-lo de resultados do lado do cliente resulta em um erro.Além disso, esse método sempre retornará false no Studio.
返回
Um booleano que indica se o jogador está verificado.
範例程式碼
The following example prints "true" if the player is verified.
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 gentilmente desconecte 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 acionar 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
參數
A mensagem para mostrar ao usuário após expulsar.
返回
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 ( falso ) ou ao jogador Camera ( verdadeiro ).
參數
A direção do Vector3 que o jogador deve mover.
Um booleano que indica se o jogador deve se mover em relação à câmera do jogador.
返回
範例程式碼
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.
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
-- Wait for the player's character and humanoid, which must exist before calling :Move()
local character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
character:WaitForChild("Humanoid")
-- The player will move until they are 50 studs away from the camera's position at the time of running
localPlayer:Move(Vector3.new(0, 0, -50), true)
SetAccountAge
A função SetAccountAge define o Player.AccountAge do jogador em dias.
É usado para definir a propriedade Player que descreve quanto tempo atrás a conta de um jogador foi registrada em dias
Isso não define a idade do jogador na conta, mas a idade da própria conta em relação ao momento em que foi criada pela primeira vez
參數
Idade da conta em dias.
返回
範例程式碼
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.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player:SetAccountAge(100)
This code sample adds a mark to players showing about how old their account is. The mark uses a player's account age to determine if they are a New Player, Veteran Player or Regular Player.
local Players = game:GetService("Players")
local MAX_AGE_NEW_PLAYER = 7 -- one week
local MIN_AGE_VETERAN = 365 -- one year
-- This function marks a part with text using a BillboardGui
local function mark(part, text)
local bbgui = Instance.new("BillboardGui")
bbgui.AlwaysOnTop = true
bbgui.StudsOffsetWorldSpace = Vector3.new(0, 2, 0)
bbgui.Size = UDim2.new(0, 200, 0, 50)
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0) -- Fill parent
textLabel.Text = text
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.BackgroundTransparency = 1
textLabel.Parent = bbgui
-- Add to part
bbgui.Parent = part
bbgui.Adornee = part
end
local function onPlayerSpawned(player, character)
local head = character:WaitForChild("Head")
if player.AccountAge >= MIN_AGE_VETERAN then
mark(head, "Veteran Player")
elseif player.AccountAge <= MAX_AGE_NEW_PLAYER then
mark(head, "New Player")
else
mark(head, "Regular Player")
end
end
local function onPlayerAdded(player)
-- Listen for this player spawning
if player.Character then
onPlayerSpawned(player, player.Character)
end
player.CharacterAdded:Connect(function()
onPlayerSpawned(player, player.Character)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
SetSuperSafeChat
Este método define se o jogador vê ou não o chat filtrado por TextService:FilterStringAsync() ao invés de chats normais.
local Players = game:GetService("Players")local player = Players.LocalPlayerplayer: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.
參數
Um booleano que indica se o jogador vê ou não o chat filtrado.
返回
GetFriendsOnline
Essa função retorna um conjunto de dicionários 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 certos 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 de usuário</b></td><td>texto</td><td>O nome de usuário do amigo.</td></tr><tr><td><b>Nome de exibição</b></td><td>texto</td><td>O <code>Class.Player.DisplayName</code> do amigo.</td></tr><tr><td><b>Último Online</b></td><td>texto</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>texto</td><td>O nome do local 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>texto</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 |
---|
參數
O número máximo de amigos online para retornar.
返回
Um dicionário de amigos online (veja a tabela acima).
範例程式碼
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.
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
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 está no jogo, o GetRankInGroup ainda pensará que está nesse grupo até que ele saia.No entanto, isso não ocorre ao usar 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.
參數
O groupId do grupo especificado.
返回
Classificação do jogador no grupo.
範例程式碼
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.
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
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 está no jogo, o GetRoleInGroup ainda pensará que está nesse grupo até que ele saia.No entanto, isso não ocorre ao usar 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.
參數
O groupId do grupo especificado.
返回
O papel do jogador no grupo especificado, ou Convidado se o jogador não for um membro.
範例程式碼
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.
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
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, de modo que várias chamadas da função no mesmo jogador com o mesmo Player.UserId podem não produzir o resultado mais atual.Isso não acontece quando usado em um LocalScript.
參數
O Player.UserId do jogador especificado.
返回
Um booleano indicando se um jogador é amigo do usuário especificado.
範例程式碼
The below example would print whether or not a recently added player is friends with Gordonrox24.
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
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 está no jogo, o IsInGroup ainda pensará que está nesse grupo até que ele saia.No entanto, isso não ocorre ao usar com um LocalScript.
Isso ocorre porque o método armazena resultados em cache, então várias chamadas de IsInGroup ao 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.
參數
O groupId do grupo especificado.
返回
Um booleano que indica se o jogador está no grupo especificado.
範例程式碼
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.
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
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ê deseja 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 sincronizada.Isso significa que outras tarefas poderão continuar enquanto o personagem está sendo carregado, incluindo a renderização do jogo e quaisquer outras tarefas.Além disso, essa função pode ser usada em um script, enquanto a 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 Player.CharacterAppearanceLoaded desse jogador tenha sido disparado
Ordem de carregamento de personagem
Chamar o Player:LoadCharacter() com um Avatar R15 dispara eventos na seguinte ordem (Nota: a ordem do R6 é diferente):
- Jogador.Personagem conjuntos
- Fogos de Personagem Adicionados do Jogador
- Jogador.Changed dispara com um valor de "Personagem"
- A aparência do personagem é inicializada
- Jogador.AppearanceCharacterLoaded dispara
- Character.Parent define ao DataModel
- A construção de personagens e as escalas de personagem
- O personagem se move para o local de spawn
- CarregarPersonagem retorna
返回
範例程式碼
This script turns off auto-loading and simulates character respawning.
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
Esta 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:
- Sistema de Descrição Humanoide, um artigo que explica o sistema de descrição humanoide em mais detalhe e fornece vários exemplos de script
參數
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.
返回
範例程式碼
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.
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
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 na localização especificada em um futuro próximoSem 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 em outro comportamento indesejável
O efeito dessa chamada será temporário e não há garantias de o que será transmitido ao redor do local especificado.Limites de memória do cliente e condições de rede podem afetar 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.
參數
Localização do mundo onde o streaming é solicitado.
Tempo de espera opcional para a solicitação.
返回
活動
CharacterAdded
O evento Personagem Adicionado é 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 do Workspace.
Isso pode ser usado ao lado do evento Player.CharacterRemoving, que dispara logo antes que o personagem de um jogador seja removido, geralmente após a morte.Como tal, ambos os eventos podem potencialmente disparar muitas vezes à medida que os jogadores morrem e reaparecem em um lugar.Se você quiser detectar quando um jogador se junta ou sai do 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
參數
Uma instância do personagem que foi gerada/ressurgida.
範例程式碼
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.
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.
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
-- This table maps "Player" objects to Vector3
local respawnLocations = {}
local function onCharacterAdded(character)
local player = Players:GetPlayerFromCharacter(character)
-- Check if we saved a respawn location for this player
if respawnLocations[player] then
-- Teleport the player there when their HumanoidRootPart is available
local hrp = character:WaitForChild("HumanoidRootPart")
-- Wait a brief moment before teleporting, as Roblox will teleport the
-- player to their designated SpawnLocation (which we will override)
RunService.Stepped:wait()
hrp.CFrame = CFrame.new(respawnLocations[player] + Vector3.new(0, 3.5, 0))
end
end
local function onCharacterRemoving(character)
-- Get the player and their HumanoidRootPart and save their death location
local player = Players:GetPlayerFromCharacter(character)
local hrp = character:FindFirstChild("HumanoidRootPart")
if hrp then
respawnLocations[player] = hrp.Position
end
end
local function onPlayerAdded(player)
-- Listen for spawns/despawns
player.CharacterAdded:Connect(onCharacterAdded)
player.CharacterRemoving:Connect(onCharacterRemoving)
end
local function onPlayerRemoved(player)
-- Forget the respawn location of any player who is leaving; this prevents
-- a memory leak if potentially many players visit
respawnLocations[player] = nil
end
-- Note that we're NOT using PlayerRemoving here, since CharacterRemoving fires
-- AFTER PlayerRemoving, we don't want to forget the respawn location then instantly
-- save another right after
Players.PlayerAdded:Connect(onPlayerAdded)
Players.ChildRemoved:Connect(onPlayerRemoved)
This code sample automatically removes Accessory objects like hats from the Player's character when they respawn. Warning: this includes hair, so this script may cause acute baldness.
When the Character() is added, we wait for RunService.Stepped to fire once (using the wait function of events). This is so the accessory removal logic runs one frame after the character spawns. A warning can appear if you delete accessories too quickly after the player spawns, so waiting one frame will avoid that.
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local function destroyAccessory(object)
if object:IsA("Hat") or object:IsA("Accessory") then
object:Destroy()
end
end
local function onCharacterAdded(character)
-- Wait a brief moment before removing accessories to avoid the
-- "Something unexpectedly set ___ parent to NULL" warning
RunService.Stepped:Wait()
-- Check for any existing accessories in the player's character
for _, child in pairs(character:GetChildren()) do
destroyAccessory(child)
end
-- Hats may be added to the character a moment after
-- CharacterAdded fires, so we listen for those using ChildAdded
character.ChildAdded:Connect(destroyAccessory)
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)
CharacterAppearanceLoaded
Este evento é acionado 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á acionado 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.
參數
O Class.Player.Character``Class.Model .
範例程式碼
This code sample will wait for accessories to fully load, print out how many there are, and then destroy them all.
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 logo 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 é acionado quando o personagem de um jogador é gerado ou respawnado.Por exemplo, se você quiser imprimir uma mensagem sempre que um jogador aparecer e morrer:
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 só se preocupa com o Character de um Player.Se você precisar monitorar quando um jogador entra/sai do jogo, use os eventos Players.PlayerAdded e Players.PlayerRemoving.
參數
Uma instância do personagem que está sendo removido.
範例程式碼
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.
game.Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(function(character)
print(character.Name .. " has died.")
end)
end)
Chatted
O evento Conversado é acionado quando um Player tipos uma mensagem e pressiona Enter na barra de chat 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, os 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, curando-os).Verifique os exemplos de códigos para comandos de bate-bate.
Filtrando
O texto da mensagem disparado com este evento é sem filtro .Se você estiver exibindo a entrada do jogador, como o 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 ter ação de moderação tomada contra ele.
參數
O conteúdo da mensagem que o jogador digita no chat.
Descontinuado. Para mensagens sussurradas, este foi o Jogador que era o alvo pretendido da mensagem de chat.
範例程式碼
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.
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.
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".
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 depois que a classe do motor de jogo classifica o player como inactivo.O tempo é o número de segundos que decorreram desde esse ponto.O evento continua a disparar a cada 30 segundos enquanto o jogador permanece 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 outras funcionalidades de longe do teclado (AFK).
Para rastrear com que frequência ocorrem desconexões automáticas, tente correlacionar esse evento com ocorrências de Players.PlayerRemoving .
參數
O tempo em segundos que o jogador esteve inativo.
範例程式碼
Prints how long a player has been idle for.
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 fase atual é representada pelo valor Enum.TeleportState que é dado por OnTeleport.Veja abaixo um exemplo prático disso.
參數
O novo Enum.TeleportState da Player.
O nome do spawn para se teletransportar, se TeleportService:TeleportToSpawnByName() for usado.
範例程式碼
This example prints which stage of a teleport a player is at, as well as printing if the teleport was a failure.
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)