Teams
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Layanan Tim menyimpan objek gameTeam . Team objek harus diberikan ke layanan Tim.
Tim menawarkan berbagai fitur yang berguna bagi pengembang.Ini dapat secara luas dibagi menjadi fitur yang bekerja out-of-the-box dan fitur yang dapat diprogram oleh pengembang ke dalam gamemereka.
Perilaku tim bawaan Fungsi berikut dari Tim ada secara default dan tidak memerlukan pengembang untuk memprogram perilaku khusus.
- Ketika bagian dari Tim, nama di atas karakter pemain Model akan diwarnai ke Team.TeamColor
- Mengubah Player.TeamColor akan menyebabkan Player.Team beralih ke Tim dengan yang sesuai Team.TeamColor
- Saat menggunakan daftar pemain default, pengguna akan dikelompokkan dan ditampilkan oleh tim
- Mengatur Player.Neutral ke benar akan menyebabkan Player terpisah dari tim, tetapi tidak akan mengubah Player.Team atau Player.TeamColor
- Ketika sebuah Player bergabung dengan game, mereka akan ditugaskan ke tim dengan Team.AutoAssignable diatur ke benar yang memiliki pemain paling sedikit.Jika tidak ada tim yang dapat ditugaskan secara otomatis yang tersedia, Player.Neutral akan ditetapkan ke benar
- Ketika SpawnLocation.Neutral diatur ke false, hanya pemain yang memiliki Player.TeamColor cocok dengan SpawnLocation.TeamColor dapat muncul di bawah SpawnLocation
- Ketika SpawnLocation.AllowTeamChangeOnTouch diatur ke benar, Player.TeamColor pemain akan berubah menjadi SpawnLocation.TeamColor ketika karakter mereka menyentuh SpawnLocation
Perilaku tim ekstensi opsional Banyak pengembang memilih untuk menambahkan fitur berikut ke tim dalam kode mereka sendiri.
- Laksanakan pemeriksaan untuk tim dalam kode senjata untuk mencegah tim membunuh
- Implementasikan pintu atau fitur lain yang hanya dapat digunakan oleh tim tertentu
- Secara berkala mengubah tim untuk mempertahankan saldotim
Contoh Kode
This code sample includes a simple example of how to re-balance teams. When Team.AutoAssignable is set to true players will be added to Teams in a balanced fashion. However as Players leave the game this can lead to unbalanced teams as players are not reallocated. This code keeps track of the number of players in each team and, when players leave will check to see if the teams need re-balancing.
local Teams = game:GetService("Teams")
-- create two teams
local redTeam = Instance.new("Team")
redTeam.TeamColor = BrickColor.new("Bright red")
redTeam.AutoAssignable = true
redTeam.Name = "Red Team"
redTeam.Parent = Teams
local blueTeam = Instance.new("Team")
blueTeam.TeamColor = BrickColor.new("Bright blue")
blueTeam.AutoAssignable = true
blueTeam.Name = "Blue Team"
blueTeam.Parent = Teams
-- start counting the number of players on each team
local numberRed, numberBlue = 0, 0
local function playerAdded(team)
-- increase the team's count by 1
if team == redTeam then
numberRed = numberRed + 1
elseif team == blueTeam then
numberBlue = numberBlue + 1
end
end
local function playerRemoved(team)
-- decrease the team's count by 1
if team == redTeam then
numberRed = numberRed - 1
elseif team == blueTeam then
numberBlue = numberBlue - 1
end
-- check if the teams are unbalanced
local bigTeam, smallTeam = nil, nil
if (numberRed - numberBlue) > 2 then
bigTeam = redTeam
smallTeam = blueTeam
elseif (numberBlue - numberRed) > 2 then
bigTeam = blueTeam
smallTeam = redTeam
end
if bigTeam then
-- pick a random player
local playerList = bigTeam:GetPlayers()
local player = playerList[math.random(1, #playerList)]
-- check the player exists
if player then
-- change the player's team
player.TeamColor = smallTeam.TeamColor
-- respawn the player
player:LoadCharacter()
end
end
end
-- listen for players being added / removed
blueTeam.PlayerAdded:Connect(function(_player)
playerAdded(blueTeam)
end)
blueTeam.PlayerRemoved:Connect(function(_player)
playerRemoved(blueTeam)
end)
redTeam.PlayerAdded:Connect(function(_player)
playerAdded(redTeam)
end)
redTeam.PlayerRemoved:Connect(function(_player)
playerRemoved(redTeam)
end)
The following code sample will create a door in the Workspace that can only be walked through by Players on the Bright red team.
local Players = game:GetService("Players")
local door = Instance.new("Part")
door.Anchored = true
door.Size = Vector3.new(7, 10, 1)
door.Position = Vector3.new(0, 5, 0)
door.Parent = workspace
local debounce = false
door.Touched:Connect(function(hit)
if not debounce then
debounce = true
if hit then
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and player.TeamColor == BrickColor.new("Bright red") then
door.Transparency = 0.5
door.CanCollide = false
task.wait(3)
door.Transparency = 0
door.CanCollide = true
end
end
task.wait(0.5)
debounce = false
end
end)
This code sample includes a quick function that can be added to weapons in a place to prevent them from team killing. It will return false when the two players are on different teams or if either of them is neutral.
local Players = game:GetService("Players")
function checkTeamKill(playerAttack, playerVictim)
if playerAttack.Team ~= playerVictim.Team or playerAttack.Neutral or playerVictim.Neutral then
return false
end
return true
end
local players = Players:GetPlayers()
checkTeamKill(players[1], players[2])
Rangkuman
Metode
Properti
Metode
GetTeams
Fungsi GetTeam kembali meja yang berisi objek gameTeam .
Perhatikan ini hanya akan mengembalikan objek Tim yang langsung diberikan ke layanan Teams .Untuk alasan ini, disarankan pengembang hanya membesarkan Team objek ke layanan Teams dan tidak ke layanan lain Instances (atau satu sama lain).
Memberikan nilai
Sebuah array dari Teams dalam game.
Contoh Kode
The example below prints the number of players on each Team.
local Teams = game:GetService("Teams")
local teams = Teams:GetTeams()
for _, team in pairs(teams) do
local players = team:GetPlayers()
print("Team", team.Name, "has", #players, "players")
end