Player

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Objek Pemain adalah klien yang saat ini terhubung.Objek-objek ini ditambahkan ke layanan Players ketika pemain baru terhubung, kemudian dihapus saat mereka akhirnya terputus dari server.

Properti Instance.Name mencerminkan nama pengguna pemain.Saat menyimpan informasi tentang pemain, Anda harus menggunakan Player.UserId karena kemungkinan pemain dapat mengubah nama pengguna mereka.

Ada beberapa metode serupa di layanan untuk bekerja dengan objek Pemain. Gunakan ini di atas metode masing-masing mereka:

  • Anda dapat mendapatkan tabel objek Pemain saat ini menggunakan ; lagi, gunakan ini sebagai gantinya .
  • Untuk mendeteksi penambahan objek Pemain, disarankan untuk menggunakan acara Players.PlayerAdded (instead of Instance.ChildAdded di layanan Players).
  • Demikian pula, Anda dapat mendeteksi penghapusan objek Pemain menggunakan Players.PlayerRemoving , yang menembak hanya sebelum Pemain dihapus (bukan Instance.ChildRemoved yang menembak setelah).Ini penting jika Anda menyimpan informasi tentang pemain yang mungkin dihapus atau dibersihkan saat menghapus.

Contoh Kode

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

Leaderstats

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

Rangkuman

Properti

Metode

Acara

Properti

AccountAge

Hanya Baca
Tidak Direplikasi
Baca Paralel

AccountAge adalah properti Player yang menggambarkan berapa lama akun pemain terdaftar dalam hari.Ini diatur menggunakan fungsi Player:SetAccountAge(), yang tidak dapat diakses oleh skrip.

Properti ini berguna untuk menampilkan konten pemain Roblox baru secara kondisional seperti tutorial.

Contoh Kode

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

Account Age Mark

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

AutoJumpEnabled

Baca Paralel

Properti AutoJumpEnabled menentukan apakah Player.Character dari Player menggunakan perangkat seluler akan secara otomatis melompat ketika mereka menabrakkan rintangan.Ini dapat membuat tingkat lebih dapat dilalui saat di perangkat seluler.

Ketika pemain bergabung dengan permainan, nilai StarterPlayer.AutoJumpEnabled menentukan status awal properti ini.Kemudian, properti ini menentukan nilai properti Humanoid.AutoJumpEnabled dari Player.Character pada saat spawn.Dengan kata lain, adalah mungkin untuk mengatur perilaku lompat otomatis pada basis per karakter, per pemain, dan per game menggunakan tiga properti ini.

Contoh Kode

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

Auto-Jump Toggle

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

CameraMaxZoomDistance

Baca Paralel

KameraMaxZoomDistance Player properti mengatur jarak maksimum dalam studs kamera dapat dari karakter dengan kamera default.

Dengan kata lain, ia mengontrol jarak maksimum yang diizinkan kamera pemain untuk diperbesar.

Nilai default dari properti ini ditetapkan oleh StarterPlayer.CameraMaxZoomDistance .Jika nilai ini ditetapkan ke nilai yang lebih rendah dari Player.CameraMinZoomDistance , nilai ini akan ditingkatkan ke CameraMinZoomDistance.

Contoh Kode

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

Baca Paralel

KameraMinZoonDistance Player properti menetapkan jarak minimum dalam stud kamera dapat dari karakter dengan kamera default.

Dengan kata lain, ia mengontrol jarak minimum yang diizinkan kamera pemain untuk diperbesar.

Nilai default dari properti ini ditetapkan oleh StarterPlayer.CameraMinZoomDistance .Jika nilai ini ditetapkan ke nilai yang lebih tinggi dari Player.CameraMaxZoomDistance maka akan dikurangi menjadi CameraMaxZoomDistance.

Contoh Kode

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

Baca Paralel

Properti Mode Kamera mengatur mode kamera pemain, default ke orang ketiga.

Orang Ketiga

Dalam mode orang ketiga default ( Enum.CameraMode.Classic ), karakter dapat dilihat di kamera. Saat dalam mode ini, perilaku default adalah:

  • Pemain dapat mengklik kanan dan seret (mouse), ketuk dan seret (seluler), gunakan thumbstick sekunder (gamepad), atau tekan panah kiri/kanan (keyboard) untuk memutar kamera di sekitar karakter mereka.
  • Ketika pemain memindahkan karakter mereka, itu menghadap ke arah gerakan yang sesuai.
  • Pemain dapat melakukan zoom masuk dan keluar dengan bebas, bahkan ke orang pertama pada zoom penuh.

Orang Pertama

Dalam mode orang pertama ( Enum.CameraMode.LockFirstPerson ), kamera pemain diperbesar sepanjang jalan.Kecuali ada GUI yang terlihat hadir dengan set properti GuiButton.Modal yang diatur ke true , menggerakkan mouse, menyeret di ponsel, atau menggunakan joystick sekunder di gamepad akan memutar kamera sekitar karakter.

Contoh Kode

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

Baca Paralel

Properti CanLoadCharacterAppearance Player menentukan apakah penampilan karakter akan dimuat saat pemain muncul.Nilai default dari properti ini ditetapkan oleh StarterPlayer.LoadPlayerAppearance .

Jika benar, karakter akan memuat tampilan pemain yang sesuai dengan tampilan pemain Player.CharacterAppearanceId.

Jika salah, pemain akan muncul dengan penampilan default - model karakter abu-abu tanpa topi, kemeja, celana, dll

Mencoba untuk mengatur properti setelah karakter tercipta tidak akan mengubah karakter, Anda harus memanggil Player:LoadCharacter() untuk memuat penampilan baru.

Contoh Kode

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

Baca Paralel

Properti Karakter berisi referensi ke Model yang berisi Humanoid , bagian tubuh, skrip, dan objek lain yang diperlukan untuk menyimulasikan avatar pemain dalam pengalaman.Model diberi warisan ke Workspace tetapi dapat dipindahkan.Ini secara otomatis dimuat saat Players.CharacterAutoLoads adalah true dan dapat dimuat secara manual jika tidak menggunakan Player:LoadCharacter() .

Awalnya properti ini adalah nil dan diatur saat karakter pemain pertama kali muncul.Gunakan acara Player.CharacterAdded untuk mendeteksi kapan karakter pemain dimuat dengan benar, dan acara Player.CharacterRemoving untuk mendeteksi kapan karakter akan dihapuskan.Hindari menggunakan Object:GetPropertyChangedSignal() pada properti ini.

Perhatikan bahwa yang diklon dari atau ke dalam pemain's atau masing-masing sering dijalankan sebelum model karakter lama digantikan, jadi mungkin merujuk pada model lama yang propertinya adalah .Oleh karena itu, dalam LocalScript di bawah StarterGui atau StarterPack , disarankan untuk memastikan bahwa orangtua dari Karakter tidak nil sebelum menggunakannya, misalnya:


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

Baca Paralel

Properti ini menentukan ID pengguna akun yang karakter penampilannya digunakan untuk pemain character .Secara default, properti ini adalah Player.UserId , yang menggunakan avatar pemain saat mereka telah membuatnya di situs web Roblox.

Mengubah properti ini ke ID pengguna akun lain akan menyebabkan pemain muncul dengan penampilan akun itu (topi, baju, celana, dll).

Permainan juga dapat beralih apakah atau tidak karakter pemain terlihat dimuat dalam permainan dengan mengubah properti StarterPlayer.LoadCharacterAppearance.

Contoh Kode

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

Disguise Command

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

DevCameraOcclusionMode

Baca Paralel

Mendefinisikan bagaimana skrip kamera default menangani objek antara kamera dan subjek kamera.Diatur oleh StarterPlayer.DevCameraOcclusionMode dan tidak dapat diubah untuk pemain individu.

Nilai default adalah Zoom (0). Lihat Enum.DevCameraOcclusionMode untuk daftar mode yang tersedia.

Baca Paralel

Properti DevComputerCameraMode menentukan cara pemain memindahkan kamera saat menggunakan perangkat dengan mouse dan keyboard.Lihat Enum.DevComputerCameraMovementMode untuk deskripsi setiap mode kontrol kamera yang tersedia.Properti ini tidak dapat ditetapkan menggunakan LocalScript (harus ditetapkan di server menggunakan Script ).

Nilai default dari properti ini ditentukan oleh StarterPlayer.DevComputerCameraMovementMode .

Kata "Komputer" dalam nama properti ini merujuk pada perangkat non- TouchEnabled , non- GamepadEnabled .

Saat ditetapkan ke Pilihan Pengguna , pemain dapat memilih di antara mode kontrol apa pun (kecuali Skripabel ) dalam pengaturan permainan Roblox.Secara umum, adalah ide bagus untuk mengizinkan pemain memilih mode kontrol mereka untuk meningkatkan aksesibilitas.

Dimungkinkan untuk membuat skema kontrol khusus dengan menetapkan properti ini ke Dapat diskripkan .

Properti ini tidak memengaruhi pemain yang menggunakan perangkat sentuh yang diaktifkan. Lihat Player.DevTouchCameraMode sebagai gantinya.

Contoh Kode

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

Baca Paralel

Properti DevComputerMovementMode menentukan cara seorang pemain memindahkan karakter mereka saat menggunakan perangkat dengan mouse dan keyboard.Lihat Enum.DevComputerMovementMode untuk deskripsi setiap mode kontrol gerakan yang tersedia.Properti ini tidak dapat ditetapkan menggunakan LocalScript (harus ditetapkan di server menggunakan Script ).

Nilai default dari properti ini ditentukan oleh StarterPlayer.DevComputerMovementMode .

Kata "Komputer" dalam nama properti ini merujuk pada perangkat non- TouchEnabled .

Saat ditetapkan ke Pilihan Pengguna , pemain dapat memilih di antara mode kontrol apa pun (kecuali Skripabel ) dalam pengaturan permainan Roblox.Secara umum, adalah ide bagus untuk mengizinkan pemain memilih mode kontrol mereka untuk meningkatkan aksesibilitas.

Dimungkinkan untuk membuat skema kontrol khusus dengan menetapkan properti ini ke Dapat diskripkan .

Properti ini tidak memengaruhi pemain yang menggunakan perangkat yang mendukung sentuhan. Lihat Player.DevTouchMovementMode sebagai gantinya.

Contoh Kode

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

Baca Paralel

Properti ini menentukan apakah pemain dapat menyalakan kunci Mouse dengan menekan Shift .Seorang pemain dapat menonaktifkan tombol kunci mouse di pengaturan permainan Roblox.Secara default, properti ini diatur ke nilai StarterPlayer.EnableMouseLockOption .Ini dapat ditetapkan sisi server selama waktu eksekusi dengan menggunakan Script .Tidak dapat ditetapkan di sisi klien.

Saat kunci mouse diaktifkan, kursor pemain dikunci di tengah layar.Memindahkan mouse akan mengorbit kamera di sekitar pemain character , dan karakter akan menghadap ke arah yang sama dengan camera .Ini juga mengimbangi pandangan kamera hanya di atas bahu kanan karakter pemain.

Perhatikan bahwa API terkait shift-lock berada dalam proses dihapuskan, jadi disarankan untuk menggunakan UserInputService.MouseBehavior sebagai gantinya untuk mengunci mouse.

Contoh Kode

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

Properti DevTouchCameraMode menentukan cara pemain memindahkan kamera saat menggunakan perangkat TouchEnabled.Lihat Enum.DevTouchCameraMovementMode untuk deskripsi setiap mode kontrol kamera yang tersedia.Properti ini tidak dapat ditetapkan menggunakan LocalScript (harus ditetapkan di server menggunakan Script ).

Nilai default dari properti ini ditentukan oleh StarterPlayer.DevTouchCameraMovementMode .

Saat ditetapkan ke Pilihan Pengguna , pemain dapat memilih di antara mode kontrol apa pun (kecuali Skripabel ) dalam pengaturan permainan Roblox.Secara umum, adalah ide bagus untuk mengizinkan pemain memilih mode kontrol mereka untuk meningkatkan aksesibilitas.

Dimungkinkan untuk membuat skema kontrol khusus dengan menetapkan properti ini ke Dapat diskripkan .

Properti ini tidak memengaruhi pemain yang tidak menggunakan perangkat yang dapat disentuh. Lihat Player.DevComputerCameraMovementMode sebagai gantinya.

Contoh Kode

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

Baca Paralel

Properti DevTouchMovementMode menentukan cara pemain memindahkan karakter mereka saat menggunakan perangkat TouchEnabled.Lihat Enum.DevTouchMovementMode untuk deskripsi setiap mode kontrol gerakan yang tersedia.Properti ini tidak dapat ditetapkan menggunakan LocalScript (harus ditetapkan di server menggunakan Script ).

Nilai default dari properti ini ditentukan oleh StarterPlayer.DevTouchMovementMode .

Saat ditetapkan ke Pilihan Pengguna , pemain dapat memilih di antara mode kontrol apa pun (kecuali Skripabel ) dalam pengaturan permainan Roblox.Secara umum, adalah ide bagus untuk mengizinkan pemain memilih mode kontrol mereka untuk meningkatkan aksesibilitas.

Dimungkinkan untuk membuat skema kontrol khusus dengan menetapkan properti ini ke Dapat diskripkan .

Properti ini tidak memengaruhi pemain yang tidak menggunakan perangkat yang dapat disentuh. Lihat Player.DevComputerMovementMode sebagai gantinya.

Contoh Kode

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

Baca Paralel

The DisplayName adalah properti Player yang berisi nama tampilan pengguna yang diotorisasi yang terkait dengan objek Player.Tidak seperti nama pengguna, nama tampilan adalah nama tidak unik yang ditampilkan pemain kepada orang lain.Jika pengguna Roblox belum memilih satu, properti akan dibaca sama dengan properti Name.

Catatan:

  • Karena nama tampilan tidak unik, mungkin bagi dua pemain di satu instansi untuk memiliki nama yang sama.Jika Anda membutuhkan identifikasi unik secara global untuk pemain, gunakan Player.UserId (yang statis) atau Player.Name (yang merupakan Nama Pengguna saat ini) sebagai gantinya.
  • Karakter yang dihasilkan dengan Player.LoadCharacter atau oleh mesin Roblox akan memiliki properti Humanoid.DisplayName yang ditugaskan ke properti Player.DisplayName.
  • Nama tampilan mungkin memiliki karakter Unicode di string. Lihat UTF-8 untuk informasi lebih lanjut tentang cara bekerja dengan string dengan karakter Unicode.

FollowUserId

Hanya Baca
Tidak Direplikasi
Baca Paralel

FollowUserId adalah properti Player yang berisi Player.UserId pengguna yang diikuti oleh pemain ke dalam permainan.Jika pemain tidak mengikuti siapa pun ke dalam game, properti ini akan menjadi 0.Properti ini berguna untuk memperingatkan pemain yang telah diikuti oleh pemain lain ke dalam permainan.

Anda dapat mendapatkan nama pemain yang diikuti menggunakan ID pengguna ini dan fungsi Players:GetNameFromUserIdAsync() .

Contoh Kode

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

Keamanan Tidak Dapat Diakses
Baca Paralel

Properti GameplayPaused menunjukkan apakah pemain saat ini berada dalam keadaan jeda di tempat dengan StreamingEnabled diaktifkan.Ini diatur pada klien tetapi direplikasi ke server.Untuk menentukan status jeda, Anda dapat menggunakan properti ini.

Lihat juga:

HasVerifiedBadge

Baca Paralel

Properti HasVerifiedBadge Player menunjukkan apakah pemain memiliki Lencana Terverifikasi.

HealthDisplayDistance

Baca Paralel

Property HealthDisplayDistance Player menetapkan jarak dalam stud di mana pemain ini akan melihat bar kesehatan lainnya Humanoid.Jika diatur ke 0, bilah kesehatan tidak akan ditampilkan.Properti ini diatur ke StarterPlayer.HealthDisplayDistance secara default.

Jika bilah kesehatan Humanoid terlihat, Anda dapat mengatur jenis tampilan menggunakan Humanoid.DisplayDistanceType .

Contoh Kode

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

Tersembunyi
Hanya Baca
Tidak Direplikasi
Baca Paralel

Properti LocaleId Player menunjukkan id lokal yang telah ditetapkan pemain lokal untuk akun Roblox mereka.Ini menyimpan string dengan kode dua huruf (misalnya, "en-us") untuk lokal.

Ini dapat digunakan untuk menentukan demografi geografis basis pemain gameAnda, dan juga merupakan lokasi yang akan digunakan untuk lokalisasi otomatis (lihat GuiBase2d.AutoLocalize ) konten dalam pengalaman.Properti ini memungkinkan akses ke lokal pemain dari server.

Lihat juga LocalizationService.RobloxLocaleId , ID lokal yang digunakan untuk melokalkan konten internal.Ini akan menjadi nilai yang berbeda ketika Roblox belum mendukung secara internal set lokal pemain lokal.

Contoh Kode

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

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

en-us

Checking a Player's Locale

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

MembershipType

Hanya Baca
Tidak Direplikasi
Baca Paralel

Properti ini hanya dapat dibaca untuk menentukan keanggotaan (tidak dapat ditetapkan ke ketikkeanggotaan lain).Ini menyimpan Enum.MembershipType enum ketikkeanggotaan akun.

Contoh Kode

The following example checks whether a player has Premium membership.

Check Player Membership Status

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

NameDisplayDistance

Baca Paralel

NamaDisplayDistance StarterPlayer properti menetapkan jarak dalam stud di mana pemain ini akan melihat nama lain Humanoid .Jika properti diatur ke 0, nama disembunyikan.Properti ini diatur ke StarterPlayer.NameDisplayDistance secara default.

Jika bilah kesehatan Humanoid terlihat, Anda dapat mengatur jenis tampilan menggunakan Humanoid.DisplayDistanceType .

Contoh Kode

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

Baca Paralel

Properti Neutral menentukan apakah pemain berada di tim tertentu.

  • Ketika benar, pemain tidak berada di tim tertentu.Ini juga berarti bahwa properti Player.Team akan menjadi nil dan Player.TeamColor akan menjadi putih.
  • Ketika salah, pemain berada di tim tertentu.Properti Player.Team akan sesuai dengan Team yang dimiliki pemain, seperti juga Player.TeamColor.

Contoh Kode

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

Tersembunyi
Tidak Direplikasi
Keamanan Roblox
Baca Paralel

ReplicationFocus

Baca Paralel

Fokus Replikasi Player properti mengatur bagian untuk fokus pada replikasi di sekitar Pemain.Sistem Roblox yang berbeda yang berkomunikasi melalui jaringan (seperti fisika, streaming, dll) mereplikasi dengan tingkat yang berbeda tergantung pada seberapa dekat objek dengan fokus replikasi.

Ketika properti ini adalah , ia kembali ke perilaku defaultnya yaitu untuk memperlakukan karakter pemain lokal sebagai fokus replikasi.

Properti ini hanya boleh ditetapkan di server dengan Script , bukan LocalScript.Perhatikan bahwa properti ini tidak mengubah atau memperbarui kepemilikan jaringan bagian.

Contoh Kode

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

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

Setting a Player's Replication Focus

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

RespawnLocation

Baca Paralel

Jika diatur, pemain akan respawn di SpawnLocation.Properti ini hanya dapat ditetapkan melalui Luau dan harus berisi referensi ke SpawnLocation yang valid, yang harus memenuhi kriteria berikut:

Jika RespawnLocation tidak ditetapkan ke logik spawn yang valid SpawnLocation maka logik spawn default akan diterapkan.Untuk informasi lebih lanjut tentang ini lihat halaman untuk SpawnLocation .

Alternatif untuk RespawnLocation

Contoh Kode

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

Keamanan Roblox
Baca Paralel

Team

Tidak Direplikasi
Baca Paralel

Properti Tim adalah referensi ke objek Team dalam layanan Teams.Ini menentukan tim di mana pemain berada; jika Player tidak ada di tim atau memiliki Player.TeamColor yang tidak valid, properti ini adalah nil .Ketika properti ini diatur, pemain telah bergabung dengan Team dan acara Team.PlayerAdded terjadi pada tim yang terkait.Demikian pula, Team.PlayerRemoved terbakar ketika properti tidak diatur dari tertentu Team.

Contoh Kode

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

Baca Paralel

Properti TeamColor menentukan tim mana seorang Pemain terkait dengan menurut tim itu Team.TeamColor.Mengubah properti ini akan mengubah Player.Team menurut tim mana pun yang memiliki sama BrickColor untuk Team.TeamColor mereka.Jika tidak ada objek Tim yang memiliki TimWarna terkait, pemain tidak akan terkait dengan tim.

Seringkali ide yang lebih baik untuk mengatur Player.Team ke masing-masing Team alih-alih menggunakan properti ini.Mengatur properti ini sering menyebabkan ulangnya nilai BrickColor yang sama untuk tim tertentu di banyak skrip; ini adalah sesuatu yang ingin Anda hindari saat mematuhi prinsip "Jangan Ulangi Diri Anda" (DRY).

Contoh Kode

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

Hanya Baca
Tidak Direplikasi
Keamanan Skrip Roblox
Baca Paralel

UserId

Baca Paralel

UserId adalah properti Player yang berisi bilangan baca hanya yang unik dan konsisten mengidentifikasi setiap akun pengguna di Roblox.Tidak seperti Instance.Name Pemain, yang dapat berubah sesuai dengan nama pengguna saat ini pengguna, nilai ini tidak akan pernah berubah untuk akun yang sama.

Properti ini penting saat menyimpan/memuat data pemain menggunakan GlobalDataStores .Gunakan UserId pemain sebagai kunci penyimpanan data sehingga setiap pemain memiliki unitunik.

Contoh Kode

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)

Metode

AddReplicationFocus

()

Parameter

part: BasePart
Nilai Default: ""

Memberikan nilai

()

ClearCharacterAppearance

()

Fungsi ClearCharacterAppearance menghapus semua Accessory , Shirt , Pants , CharacterMesh , dan BodyColors dari pemain yang diberikan Player.Character .Selain itu, ini juga menghapus T-Shirt Decal di torso pemain.Warna bagian tubuh karakter dan wajah akan tetap tidak berubah.Metode ini tidak melakukan apa pun jika pemain tidak memiliki Karakter.

Ini tidak menghapus t-shirts , meshes kepala, atau wajah.


Memberikan nilai

()

Contoh Kode

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

Fungsi DistanceFromCharacter Player kembali jarak antara kepala karakter dan titik yang diberikan Vector3 .Ini mengembalikan 0 jika pemain tidak memiliki Player.Character.

Ini berguna saat menentukan jarak antara pemain dan objek atau lokasi lain dalam game.

Jika Anda ingin menentukan jarak antara dua instansi atau posisi non-pemain, Anda dapat menggunakan yang mengikuti:


local distance = (position1 - position2).Magnitude

Parameter

point: Vector3

Lokasi dari mana jarak pemain ke adalah diukur.

Nilai Default: ""

Memberikan nilai

Jarak dalam stud antara pemain dan lokasi.

Contoh Kode

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

Kembalikan kamus yang berisi informasi tentang cara Pemain bergabung dengan pengalaman. Kamus berisi salah satu dari bidang berikut:


<th>Jenis Nilai</th>
<th>Deskripsi</th>
</tr>
</thead>
<tbody>
<tr>
<th>ID Permainan Sumber</th>
<td>angka</td>
<td>Kelas <code>Class.DataModel.GameId</code> dari pengalaman yang <code>Pemain</code> teleport dari.Hanya hadir jika pemain teleport ke pengalaman saat ini dan jika server memanggil fungsi teleportasi.</td>
</tr>
<tr>
<th>Tempat SumberId</th>
<td>angka</td>
<td>Kelas <code>DataModel.PlaceId</code> dari tempat di mana <code>Pemain</code> berteleportasi dari.Hanya hadir jika pemain teleport ke tempat saat ini dan server memanggil fungsi teleportasi.</td>
</tr>
<tr>
<th>DireferensikanOlehPemainId</th>
<td>angka</td>
<td>Kelas <code>Class.Player.UserId</code> pemain yang mengundang pemain saat ini ke pengalaman.Gunakan data ini untuk mengidentifikasi referrer dan memicu logika hadiah.</td>
</tr>
<tr>
<th>Anggota</th>
<td>array</td>
<td>Sebuah array yang berisi <code>Class.Player.UserId</code> nomor pengguna yang dipindahkan bersama dengan <code>Pemain</code>.Hanya hadir jika pemain berteleportasi sebagai bagian dari grup.</td>
</tr>
<tr>
<th>Data Teleportasi</th>
<td>variasi</td>
<td>Mencerminkan <code>teleportData</code> yang ditentukan dalam berteleportasiasli.Berguna untuk berbagi informasi antara server yang dituju pemain.Hanya hadir jika <code>teleportData</code> ditentukan dan server memanggil fungsi teleport.</td>
</tr>
<tr>
<th>Data Peluncuran</th>
<td>string</td>
<td>Sebuah string yang dienkode sederhana atau JSON yang berisi data peluncuran yang ditentukan dalam URL <a href="../../../production/promotion/deeplinks.md">deep link</a> atau <code>Class.ExperienceInviteOptions.LaunchData</code>.</td>
</tr>
<tr>
<th>Konteks Bergabung Permainan</th><td>kamus</td>
<td>
Kamus yang berisi informasi relevan berdasarkan konteks bergabungnya permainan. Ini berisi kunci berikut:
<ul>
JoinSource : Enum.JoinSource ItemType : opsional Enum.AvatarItemType AssetId : opsional string > OutfitId : opsional string > AssetType : opsional Enum.AssetType AssetId : opsional string >
</ul>
</td>
</tr>
</tbody>
Kunci

Dapatkan JoinData dan TeleportData

Jika server memulai berteleportasiPemain, kamus yang dikembalikan oleh metode ini termasuk data teleportasi pemain.Metode Player:GetJoinData() hanya dapat digunakan untuk mengambil data teleport di server.Untuk mengambil data di klien, gunakan TeleportService:GetLocalPlayerTeleportData() .

Tidak seperti TeleportService:GetLocalPlayerTeleportData() , Player:GetJoinData() hanya menyediakan data teleportasi yang memenuhi kriteria keamanan berikut:

  • Dijamin telah dikirim oleh server Roblox dalam 48 jam terakhir.
  • Dijamin telah dikirim dengan ini Player .
  • The SourcePlaceId dan SourceGameId dijamin menjadi tempat dan alam semesta data yang dikirim dari.Ini berarti Anda dapat memverifikasi data teleport berasal dari tempat yang disetujui.

Karena data ini dikirim oleh klien, masih bisa dimanfaatkan oleh penyalahguna.Data sensitif seperti mata uang pemain harus dikirim melalui solusi aman seperti Toko Memori.


Memberikan nilai

Kamus yang berisi nilai PlaceId dan UserId (lihat tabel dalam deskripsi).

Contoh Kode

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

Fungsi GetMouse Player mengembalikan Mouse yang digunakan oleh klien.Instansi mouse pemain dapat digunakan untuk melacak input mouse pengguna termasuk klik tombol mouse kiri dan kanan dan gerakan dan lokasi.

Layanan UserInputService menyediakan fungsi dan peristiwa tambahan untuk melacak input pengguna - terutama untuk perangkat yang tidak menggunakan mouse.

Catatan:

  • Item ini harus digunakan dalam LocalScript untuk berfungsi seperti yang diharapkan secara online.
  • Setelah pembaruan pada Juli 2014, ikon mouse sekarang dapat diatur dengan metode ini.

Memberikan nilai

Contoh Kode

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

Tulis Paralel

DapatkanNetworkPing mengembalikan kelambatan jaringan terisolasi dari Player dalam detik.“Ping” adalah pengukuran waktu yang diperlukan untuk data dikirim dari klien ke server, lalu kembali lagi.Ini tidak melibatkan de serialisasi data atau pemrosesan.

Untuk sisi klien LocalScripts, fungsi ini hanya dapat dipanggil di Players.LocalPlayer.Fungsi ini berguna dalam mengidentifikasi dan memecahkan masalah yang terjadi dalam skenario kelambatan jaringan tinggi.Ini juga berguna untuk menyembunyikan kelambatan, seperti menyesuaikan kecepatan lempar animasi untuk peluru.


Memberikan nilai

HasAppearanceLoaded

Fungsi HasAppearanceLoaded Player kembali apakah atau tidak penampilan pemain Player.Character telah dimuat.

Penampilan pemain termasuk item seperti pemain Shirt , Pants , dan Accessories .

Ini berguna ketika menentukan apakah penampilan pemain telah dimuat setelah mereka pertama kali bergabung dengan game, yang dapat dilacak menggunakan acara Players.PlayerAdded.


Memberikan nilai

Boolean yang menunjukkan apakah atau tidak penampilan karakter pemain telah dimuat.

Contoh Kode

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

Check if a Player's Appearance Has Loaded

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

IsVerified

Kembalikan nilai boolean yang menunjukkan status verifikasi pemain.Ketika benar, pemain diverifikasi.Verifikasi termasuk, tetapi tidak terbatas pada, nomor telepon non-VOIP atau verifikasi ID pemerintah.

Saat melaksanakan IsVerified, berhati-hatilah untuk memastikan bahwa implementasi tidak secara tidak sengaja memblokir semua pengguna yang belum diverifikasi.

Perhatikan bahwa metode hanya dapat dipanggil di server backend.Memanggilnya hasil sisi klien dalam kesalahan.Selain itu, metode ini akan selalu mengembalikan false di Studio.


Memberikan nilai

Boolean yang menunjukkan apakah pemain diverifikasi.

Contoh Kode

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

()

Metode Kick() memungkinkan pengalaman untuk dengan hormat melepaskan koneksi klien dan secara opsional memberikan pesan kepada pengguna yang terputus.Ini berguna untuk mengontrol pengguna yang menyalahgunakan.Anda hanya harus mengizinkan pengguna tertentu yang Anda percaya untuk memicu metode ini pada pengguna lain.

Memanggil metode ini pada Player dengan tidak adanya argumen terputuskan pengguna dari server dan memberikan pesan pemberitahuan default.Memanggil metode ini pada Player bersama dengan string sebagai argumen pertama yang menggantikan pesan default dengan string yang disediakan.

Saat menggunakan metode ini dari LocalScript , hanya klien pengguna lokal yang bisa diusir.

Parameter

message: string

Pesan untuk menunjukkan pengguna saat menendang.

Nilai Default: ""

Memberikan nilai

()

Move

()

Fungsi Move Player membuat karakter pemain berjalan ke arah yang diberikan sampai berhenti, atau dihentikan oleh pemain (menggunakan kendalimereka).

Ini berguna saat menulis NPC Humanoids yang bergerak di sekitar peta - tetapi tidak dikendalikan oleh input pemain yang sebenarnya.

Perhatikan bahwa argumen kedua fungsi menunjukkan apakah Vector3 yang disediakan harus bergerak relatif terhadap koordinat dunia ( false ) atau Camera pemain ( true ).

Parameter

walkDirection: Vector3

Arah Vector3 yang harus dipindahkan pemain.

Nilai Default: ""
relativeToCamera: boolean

A boolean yang menunjukkan apakah pemain harus bergerak relatif terhadap kamera pemain.

Nilai Default: false

Memberikan nilai

()

Contoh Kode

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

()

Parameter

part: BasePart
Nilai Default: ""

Memberikan nilai

()

SetAccountAge

()
Keamanan Plugin

Fungsi SetAccountAge menetapkan Player.AccountAge dari pemain dalam hari.

Ini digunakan untuk mengatur properti Player yang menjelaskan berapa lama akun pemain terdaftar dalam hari.

Ini tidak mengatur usia pemain di akun, tetapi usia akun itu sendiri relatif terhadap saat pertama kali dibuat.

Parameter

accountAge: number

Usia akun dalam hari.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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

Setting the Player's Account Age

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

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

Account Age Mark

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

SetSuperSafeChat

()
Keamanan Plugin

Metode ini menentukan apakah pemain melihat obrolan disaring oleh TextService:FilterStringAsync() atau tidak, daripada obrolan normal.


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

Terlepas dari apakah pemain telah menyaring obrolan diaktifkan, semua obrolan harus disaring oleh TextService ketika disiarkan ke pemain lain atau di layar pemain sendiri. TextService:FilterStringAsync() kembali objek TextFilterResult yang dapat disaring secara berbeda sesuai dengan penggunaan pesan yang dimaksudkan.

Parameter

value: boolean

Boolean yang menunjukkan apakah pemain melihat atau tidak melihat obrolan yang disaring.

Nilai Default: ""

Memberikan nilai

()

GetFriendsOnline

Hasil

Fungsi ini men返回 dictionary array teman online, dibatasi oleh nilai maxFriends. Fungsi menggunakan cache 30 detik.

Dalam array yang dikembalikan, beberapa bidang hanya hadir untuk jenis lokasi tertentu.Sebagai contoh, PlaceId tidak akan hadir saat LocationType adalah 0 (Situs Web Seluler).


<th>Jenis</th>
<th>Deskripsi</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>VisitorId</b></td>
<td>angka</td>
<td>Kelas <code>Class.Player.UserId</code> dari teman.</td>
</tr>
<tr>
<td><b>Nama Pengguna</b></td>
<td>string</td>
<td>Nama pengguna teman.</td>
</tr>
<tr>
<td><b>Nama Tampilan</b></td>
<td>string</td>
<td>Kelas <code>Class.Player.DisplayName</code> dari teman.</td>
</tr>
<tr>
<td><b>Terakhir Online</b></td>
<td>string</td>
<td>Ketika teman terakhir online.</td>
</tr>
<tr>
<td><b>Adalah Online</b></td>
<td>boolean</td>
<td>Jika teman saat ini online.</td>
</tr>
<tr>
<td><b>Lokasi Terakhir</b></td>
<td>string</td>
<td>Nama lokasi saat ini teman.</td>
</tr>
<tr>
<td><b>TempatId</b></td>
<td>angka</td>
<td>ID tempat dari lokasi terakhir teman.</td>
</tr>
<tr>
<td><b>ID Permainan</b></td>
<td>string</td>
<td>The <code>DataModel/JobId</code> dari lokasi terakhir teman.</td>
</tr>
<tr>
<td><b>Tipe Lokasi</b></td><td>nomor</td>
<td>
Jenis lokasi tempat teman terakhir berada: 0 Situs Web Seluler > > 1 > Mobile InGame > > 2 > Studio > 3 > Situs Web Seluler
</td>
</tr>
</tbody>
Nama

Parameter

maxFriends: number

Jumlah maksimum teman online untuk dikembalikan.

Nilai Default: 200

Memberikan nilai

Kamus teman online (lihat tabel di atas).

Contoh Kode

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

Hasil

Fungsi GetRankInGroup Player mengembalikan peringkat pemain di grup sebagai bilangan antara 0 dan 255, di mana 0 adalah non-anggota dan 255 adalah pemilik grup.

Menggunakan ini di dalam Script , dibandingkan dengan LocalScript , tidak akan memberi Anda informasi terbaru.Jika pemain meninggalkan grup saat mereka berada di dalam game, GetRankInGroup masih akan berpikir mereka berada di grup itu sampai mereka keluar.Namun, ini tidak terjadi saat digunakan dengan LocalScript.

Ini karena metode menyimpan hasil, jadi beberapa panggilan GetRankInGroup pada pemain yang sama dengan ID grup yang sama akan menghasilkan hasil yang sama seperti saat metode dipanggil pertama kali dengan ID grup yang diberikan.Perilaku penyimpanan berada pada basis per-peer: server tidak berbagi cache yang sama dengan klien.

Parameter

groupId: number

The groupId dari grupyang ditentukan.

Nilai Default: ""

Memberikan nilai

Peringkat pemain di grup.

Contoh Kode

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

Hasil

Fungsi GetRoleInGroup Player kembali peran pemain dalam kelompok sebagai string, atau Tamu jika pemain bukan bagian dari grup.

Menggunakan ini di dalam Script , dibandingkan dengan LocalScript , tidak akan memberi Anda informasi terbaru.Jika pemain meninggalkan grup saat mereka berada di dalam game, GetRoleInGroup masih akan berpikir mereka berada di grup itu sampai mereka keluar.Namun, ini tidak terjadi saat digunakan dengan LocalScript.

Ini karena metode menyimpan hasil, jadi beberapa panggilan GetRoleInGroup pada pemain yang sama dengan ID grup yang sama akan menghasilkan hasil yang sama seperti saat metode dipanggil pertama kali dengan ID grup yang diberikan.Perilaku penyimpanan berada pada basis per-peer: server tidak berbagi cache yang sama dengan klien.

Parameter

groupId: number

Kelompok groupId dari grupyang ditentukan.

Nilai Default: ""

Memberikan nilai

Peran pemain dalam grupyang ditentukan, atau Tamu jika pemain bukan anggota.

Contoh Kode

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

Hasil

Fungsi ini mengirim permintaan ke situs web Roblox untuk menanyakan apakah pemain adalah teman dari pengguna lain, mengingat Player.UserId dari pengguna itu.Fungsi ini menyimpan hasil sehingga banyak panggilan fungsi pada pemain yang sama dengan hasil terbaru Player.UserId mungkin tidak menghasilkan hasil paling up-to-date.Ini tidak terjadi saat digunakan dalam LocalScript .

Parameter

userId: number

The Player.UserId dari pemain yang ditentukan.

Nilai Default: ""

Memberikan nilai

Boolean yang menunjukkan apakah pemain adalah teman dari pengguna yang ditentukan.

Contoh Kode

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

Hasil

Fungsi IsInGroup Player mengirim permintaan ke situs web Roblox untuk menanyakan apakah pemain adalah anggota dari grup, mengingat ID dari grup itu.

Menggunakan ini di dalam Script , dibandingkan dengan LocalScript , tidak akan memberi Anda informasi terbaru.Jika pemain meninggalkan grup saat mereka berada di dalam game, IsInGroup masih akan berpikir mereka berada di grup itu sampai mereka keluar.Namun, ini tidak terjadi saat digunakan dengan LocalScript.

Ini karena metode menyimpan hasil, jadi beberapa panggilan IsInGroup pada pemain yang sama dengan ID grup yang sama akan menghasilkan hasil yang sama seperti saat metode dipanggil pertama kali dengan ID grup yang diberikan.Perilaku penyimpanan berada pada basis per-peer: server tidak berbagi cache yang sama dengan klien.

Parameter

groupId: number

Kelompok groupId dari grupyang ditentukan.

Nilai Default: ""

Memberikan nilai

Boolean yang menunjukkan apakah pemain berada di grup yang ditentukan.

Contoh Kode

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

()
Hasil

Fungsi LoadCharacter Player membuat karakter baru untuk pemain, menghapus yang lama.Ini juga membersihkan Backpack dan PlayerGui pemain.

Ini berguna dalam kasus di mana Anda ingin memuat ulang karakter tanpa membunuh pemain, seperti ketika Anda ingin memuat penampilan karakter baru setelah mengubah Player.CharacterAppearance pemain.

Catatan: Fungsi mirip dengan Player:LoadCharacterBlocking() , tetapi permintaan diproses secara asinkron alih-alih sinkron.Ini berarti tugas lain akan dapat melanjutkan saat karakter sedang dimuat, termasuk rendering permainan dan tugas lainnya.Juga, fungsi ini dapat digunakan dalam skrip, sementara LoadCharacterBlocking tidak bisa.

Setelah memanggil LoadCharacter untuk pemain individu, tidak disarankan untuk memanggilnya lagi untuk pemain yang sama sampai setelah peristiwa Player.CharacterAppearanceLoaded pemain itu terbakar.

Pesanan Pemuatan Karakter

Memanggil Player:LoadCharacter() dengan Avatar R15 menembakkan peristiwa dalam urutan berikut (Catatan: pemesanan R6 berbeda):

  1. Set Karakter Pemain
  2. Pemain.Karakter Ditambahkan api
  3. Pemain.Changed terbakar dengan nilai "Karakter"
  4. Pemunculan karakter diinisialisasi
  5. Pemain.AppearanceKarakterSelesai terbakar
  6. Karakter.Parent ditetapkan ke DataModel
  7. Karakter membangun, dan Skala Karakter
  8. Karakter pindah ke lokasi spawn
  9. Pengembalian LoadCharacter

Memberikan nilai

()

Contoh Kode

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

()
Hasil

Fungsi ini menyebarkan avatar sehingga memiliki semua yang dilengkapi dalam dikirimkan di HumanoidDescription .

Setelah memanggil LoadCharacterWithHumanoidDescription untuk pemain individu, tidak disarankan untuk memanggil fungsi lagi untuk pemain yang sama sampai setelah peristiwa Player.CharacterAppearanceLoaded pemain itu terjadi.

Lihat juga:

  • Sistem Deskripsi Humanoid , sebuah artikel yang menjelaskan sistem deskripsi humanoid secara lebih terperinci dan memberikan beberapa contoh skrip

Parameter

humanoidDescription: HumanoidDescription

Sebuah HumanoidDescription berisi karakteristik seperti bagian tubuh/warna, skala tubuh, aksesori, pakaian, dan animasi yang akan dilengkapi ke karakter yang dimuat.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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

()
Hasil

Untuk pengalaman di mana instansi streaming diaktifkan, permintaan agar server menyiarkan ke wilayah pemain (bagian dan medan) di sekitar lokasi X , Y , Z di dunia 3D.Berguna jika pengalaman tahu bahwa CFrame pemain akan ditetapkan ke lokasi yang ditentukan dalam waktu dekat.Tanpa memberikan lokasi dengan panggilan ini, pemain mungkin tidak telah disiarkan dalam konten untuk tujuan, yang menyebabkan jeda streaming atau perilaku tidak diinginkan lainnya.

Efek panggilan ini akan sementara dan tidak ada jaminan tentang apa yang akan disiarkan di sekitar lokasi yang ditentukan.Batas memori klien dan kondisi jaringan dapat memengaruhi apa yang akan tersedia di klien.

Peringatan Penggunaan

Meminta streaming di sekitar area adalah bukan jaminan bahwa konten akan hadir saat permintaan selesai, karena streaming dipengaruhi oleh bandwidth jaringan klien, batasan memori, dan faktor lain.

Parameter

position: Vector3

Lokasi dunia di mana streaming diminta.

Nilai Default: ""
timeOut: number

Batas waktu opsional untuk permintaan.

Nilai Default: 0

Memberikan nilai

()

Acara

CharacterAdded

Peristiwa Karakter Ditambahkan terjadi ketika karakter pemain muncul (atau muncul kembali).Acara ini terbakar segera setelah mengatur Player.Character ke nilai non- nil atau memanggil Player:LoadCharacter() , yang sebelum karakter diberikan ke Workspace .

Ini dapat digunakan bersama dengan acara Player.CharacterRemoving , yang menembak tepat sebelum karakter pemain dihapus, biasanya setelah kematian.Dengan demikian, kedua peristiwa ini dapat berpotensi menembak berkali-kali saat pemain meninggal lalu respawn di tempat.Jika Anda ingin mendeteksi kapan pemain bergabung atau meninggalkan game, gunakan acara Players.PlayerAdded dan Players.PlayerRemoving sebagai gantinya.

Perhatikan bahwa Humanoid dan bagian tubuh defaultnya (kepala, torso, dan anggota tubuh) akan ada saat peristiwa ini terjadi, tetapi item pakaian seperti Hats , Shirts , dan Pants mungkin membutuhkan beberapa detik untuk ditambahkan ke karakter.Hubungkan Instance.ChildAdded pada karakter yang ditambahkan untuk mendeteksi ini, atau tunggu acara Player.CharacterAppearanceLoaded untuk memastikan karakter memiliki semua yang dibutuhkan.

Parameter

character: Model

Instansi karakter yang telah muncul/terlahir kembali.


Contoh Kode

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

Detecting Player Spawns and Despawns

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

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

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

Respawn at Despawn Location

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

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

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

Accessory Remover

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

CharacterAppearanceLoaded

Peristiwa ini terjadi ketika penampilan lengkap dari Player.Character telah dimasukkan.

A Player.Character umumnya memiliki rentang objek yang memodifikasi penampilannya, termasuk Accoutrements , Shirts , Pants dan CharacterMeshes .Peristiwa ini akan terjadi ketika semua objek semacam itu telah dimasukkan ke dalam Player.Character .

Acara ini hanya terbakar di server.

Satu penggunaan untuk acara ini adalah untuk memastikan semua aksesori telah dimuat sebelum menghapusnya. Lihat di bawah ini untuk contohnya.

Parameter

character: Model

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


Contoh Kode

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

Acara Penghapus Karakter dimulai tepat sebelum karakter pemain dihapus, seperti ketika pemain respawning.

Acara ini dapat digunakan bersama acara Player.CharacterAdded , yang menembak ketika karakter pemain muncul atau muncul kembali.Sebagai kejadian, jika Anda ingin mencetak pesan setiap kali pemain muncul dan mati:


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)

Peristiwa ini hanya terkait dengan Character dari Player .Jika Anda ingin melacak kapan pemain bergabung/meninggalkan game, gunakan acara Players.PlayerAdded dan Players.PlayerRemoving.

Parameter

character: Model

Instansi karakter yang dihapus.


Contoh Kode

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

Acara Obrolan dimulai ketika Player jenis pesan ditulis dan tekan enter di bilah obrolan yang disediakan oleh Roblox.Ini dilakukan menggunakan beberapa bind Luau oleh skrip obrolan default.Anda dapat mencegah pemain mengobrol dengan menggunakan StarterGui:SetCoreGuiEnabled() dan menonaktifkan Obrolan Enum.CoreGuiType.

Perintah Obrolan

Menggunakan acara ini dan beberapa fungsi manipulasi string seperti string.sub() dan string.lower() , adalah mungkin untuk membuat perintah obrolan, bahkan dengan argumen seperti nama pemain.Biasanya, perintah diprediksi seperti heal PlayerName .Untuk memeriksa prefiks dalam string, gunakan string.sub() pada pesan untuk memeriksa substring pesan: string.sub(message, 1, 6) == "/heal " (perhatikan penyertuan spasi).Kemudian, ekstrak sisa perintah menggunakan string.sub() lagi: string.sub(message, 7) akan sama dengan nama pemain.Periksa apakah pemain itu ada, dan jika demikian, lakukan tindakan perintah (dalam contoh ini, menyembuhkan mereka).Periksa sampel kode untuk contoh perintah obrolan.

Pemfilteran

Teks pesan yang ditembak dengan peristiwa ini adalah tidak disaring .Jika Anda menampilkan input pemain seperti obrolan ke pemain lain dalam bentuk apa pun, itu harus disaring menggunakan Chat:FilterStringAsync() .Ingat ini saat membuat sistem obrolan Anda sendiri; jika permainan Anda tidak memfilter obrolan dengan benar, mungkin ada tindakan moderasi yang diambil terhadapnya.

Parameter

message: string

Konten pesan yang ditulis pemain di chat.

recipient: Player

Dihentikan. Untuk pesan berbisik, ini adalah Pemain yang menjadi target yang dimaksud dari pesan obrolan.


Contoh Kode

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

Peristiwa ini terjadi sekitar dua menit setelah kelas mesin permainan mengklasifikasikan player sebagai diam.Waktu adalah jumlah detik yang telah berlalu sejak saat itu.Acara terus menembak setiap 30 detik selama pemain tetap diam.

Peristiwa ini hanya terjadi di skrip klien, bukan skrip server; gunakan RemoteEvent untuk memberi tahu server pemain menganggur.

Roblox secara otomatis memutus koneksi pemain yang telah tidak aktif selama setidaknya 20 menit, jadi acara ini berguna untuk memperingatkan pemain bahwa mereka akan terputus segera, memutus koneksi pemain sebelum 20 menit itu, atau fitur lain dari keyboard (AFK).

Untuk melacak seberapa sering koneksi otomatis terjadi, coba hubungkan peristiwa ini dengan kejadian Players.PlayerRemoving .

Parameter

time: number

Waktu dalam detik pemain telah tidak diam.


Contoh Kode

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

Ditembak ketika TeleportState pemain berubah. Acara ini berguna untuk mendeteksi apakah teleportasi berhasil atau tidak.

Apa itu TeleportState?

Ketika permintaan teleportasi dibuat menggunakan TeleportService, ada serangkaian tahap sebelum Player dipindahkan.Tahap saat ini diwakili oleh nilai Enum.TeleportState yang diberikan oleh OnTeleport.Lihat di bawah ini untuk contoh praktis dari ini.

Parameter

teleportState: Enum.TeleportState

The new Enum.TeleportState dari the Player .

placeId: number

ID tempat yang Player ditransfer ke.

spawnName: string

Nama spawn untuk teleport ke, jika TeleportService:TeleportToSpawnByName() telah digunakan.


Contoh Kode

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)