Players
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Podsumowanie
Właściwości
Aktywuje lub wyłącza trzy metody Players ( BanAsync(), UnbanAsync() i GetBanHistoryAsync(), które stanowią API zakazu)Właściwość ta nie jest skryptowalna i może być zmieniana tylko w Studio.
Wskazuje, czy czat bąbelkowy jest włączony, czy nie. Jest ustawiony za pomocą metody Players:SetChatStyle().
Wskazuje, czy characters odrodzą się automatycznie.
Wskazuje, czy włączono klasyczny czat, czy nie; ustawiony przez metodę Players:SetChatStyle().
The Player że biegnie dla LocalScript którego.
Maksymalna liczba graczy, którzy mogą być na serwerze.
Preferowana liczba graczy dla serwera.
Kontroluje ilość czasu potrzebnego na odrodzenie postaci gracza.
Metody
Rozmawia lokalny gracz z daną wiadomość.
Zwraca Player którego Player.Character pasuje do danego instancja, lub nil jeśli nie można go znaleźć.
Zwraca tabelę wszystkich obecnie połączonych Player obiektów.
Ustawia, czy BubbleChat i ClassicChat są używane, i mówi TeamChat i Chat co robić.
Sprawia, że lokalny gracz rozmawia z daną wiadomość, która będzie widoczna tylko dla użytkowników z tej samej drużyny.
Zbanuj użytkowników z twojego doświadczenia, z możliwością określenia czasu trwania, powodu, czy zakaz ma zastosowanie do całego wszechświata czy tylko do obecnego miejscei więcej.Ta metoda jest włączona i wyłączona przez właściwość Players.BanningEnabled, którą możesz przełączyć w Studio.
- CreateHumanoidModelFromDescription(description : HumanoidDescription,rigType : Enum.HumanoidRigType,assetTypeVerification : Enum.AssetTypeVerification):Model
Zwraca model postaci wyposażony we wszystko, co określone w przekazanej w Deskrypcji Humanoida, i jest R6 lub R15, jak określa to rodzaj urządzenia.
Zwraca ustawienie modelu postaci z wszystkim, co jest wyposażone, aby pasować do awatara użytkownika określonego przez przekazany ID użytkownika.
Zbieraj historię zakazów i odblokowań każdego użytkownika w świecie doświadczenia.Ta metoda jest włączona i wyłączona przez właściwość Players.BanningEnabled, którą możesz przełączyć w Studio.
Zwraca informacje o wyglądzie postaci danego użytkownika.
Zwraca obiekt FriendPages, który zawiera informacje dla wszystkich przyjaciół danego gracza.
Zwraca opis ludzkiego humanoida dla określonego stroju, który zostanie ustawiony z częściami/kolorami/animacjami itp. stroju.
Zwraca opis humanoida, który określa wszystko, co jest wyposażone dla awatara użytkownika określonego przez przekazany ID użytkownika.
Wysyła zapytanie na stronę internetową Roblox dla nazwy użytkownika konta z danym UserId.
Wysyła zapytanie na stronę internetową Roblox dla userId konta z daną nazwa użytkownika.
- GetUserThumbnailAsync(userId : number,thumbnailType : Enum.ThumbnailType,thumbnailSize : Enum.ThumbnailSize):Tuple
Zwraca URL zawartości obrazu gracza podany w rozmiarze i wpisywać, a także boolean określający, czy obraz jest gotowy do użycia.
Odblokuj graczy zakazanych z Players:BanAsync() lub API Otwartych ograniczeń użytkownika.Ta metoda jest włączona i wyłączona przez właściwość Players.BanningEnabled, którą możesz przełączyć w Studio.
Zdarzenia
Wypala się, gdy gracz wchodzi do gry.
Wystrzeliwuje, gdy serwer gier rozpozna, że członkostwo gracza zmieniło się.
Wypala się, gdy gracz ma zamiar opuścić grę.
Wystrzeliwuje, gdy serwer gier rozpozna, że status użytkownika dla określonej subskrypcji zmienił się.
Właściwości
BanningEnabled
Aktywuje lub wyłącza trzy metody Players ( BanAsync(), UnbanAsync() i GetBanHistoryAsync(), które stanowią API zakazu)Właściwość ta nie jest skryptowalna i może być zmieniana tylko w Studio.
BubbleChat
Właściwość ta wskazuje, czy czat bąbelkowy jest włączony, czy nie. Jest ustawiona za pomocą metody Players:SetChatStyle() używającą listy Enum.ChatStyle.
Gdy ten tryb czatu jest włączony, gra wyświetla czaty w interfejsie użytkownika czatu w lewym górnym rogu ekranu.
Istnieją dwa inne tryby czatu, Players.ClassicChat i tryb czatu, w którym zarówno klasyczny, jak i rozmowy bąbelkowe są włączone.
CharacterAutoLoads
Właściwość ta wskazuje, czy characters odrodzą się automatycznie. Domyślna wartość jest prawda.
Jeśli ta właściwość jest wyłączona (fałsz), gracz characters nie pojawi się, dopóki nie zostanie wywołana funkcja Player:LoadCharacter() dla każdego Player, w tym gdy gracze dołączą do doświadczenia.
Może to być przydatne w doświadczeniach, w których gracze mają ograniczone życie, takich jak gry konkurencyjne, w których gracze nie odrodzić się, dopóki nie zakończy się runda gry.
Przykłady kodu
This example demonstrates one possible usage of the Players.CharacterAutoLoads property.
The example below respawns all players in the game, if dead, once every 10 seconds. This means that players who die 1 second after all players respawn must wait 9 seconds until the script loads all Player.Character again.
First, this script removes a player's character when they die and the Humanoid.Died function fires. This is done so that the respawn loop that executes every 10 seconds reloads that player when it does not find the player's character in the Workspace.
To work as expected, this example should be run within a Script.
local Players = game:GetService("Players")
-- Set CharacterAutoLoads to false
Players.CharacterAutoLoads = false
-- Remove player's character from workspace on death
Players.PlayerAdded:Connect(function(player)
while true do
local char = player.CharacterAdded:Wait()
char.Humanoid.Died:Connect(function()
char:Destroy()
end)
end
end)
-- Respawn all dead players once every 10 seconds
while true do
local players = Players:GetChildren()
-- Check if each player is dead by checking if they have no character, if dead load that player's character
for _, player in pairs(players) do
if not workspace:FindFirstChild(player.Name) then
player:LoadCharacter()
end
end
-- Wait 10 seconds until next respawn check
task.wait(10)
end
ClassicChat
Wskazuje, czy włączono klasyczny czat, czy nie. Właściwość ta jest ustawiana przez metodę Players:SetChatStyle() używającą listy Enum.ChatStyle.
Gdy ten tryb czatu jest włączony, gra wyświetla czaty w bąbelku nad głową nadawcy.
Istnieją dwa inne tryby czatu, Players.BubbleChat i tryb czatu, w którym zarówno klasyczny, jak i rozmowy bąbelkowe są włączone.
LocalPlayer
Ta właściwość tylko odczytowa odnosi się do Player, którego klient uruchamia doświadczenie.
Właściwość ta jest zdefiniowana tylko dla LocalScripts i ModuleScripts wymaganych przez nich, ponieważ uruchamiają się na klientzie.Dla serwera, na którym uruchamiane są kody Script obiektów, właściwość ta jest nil.
MaxPlayers
Właściwość ta określa maksymalną liczbę graczy, którzy mogą być na serwerze.Właściwość ta może być ustawiona tylko za pośrednictwem ustawień konkretnego miejscena Pulpicie nawigacyjnym twórcy lub za pośrednictwem ustawień gry.
PreferredPlayers
Właściwość ta wskazuje liczbę graczy, do których matchmaker Roblox wypełni serwery.Ta liczba będzie mniejsza niż maksymalna liczba graczy ( Players.MaxPlayers ) wspieranych przez doświadczenie.
RespawnTime
Właściwość ta kontroluje czas, w sekundach, jaki upływa, aby gracz odrodził się, gdy Players.CharacterAutoLoads jest prawdą. Domyślnie wynosi 5,0 sekund.
Jest to przydatne, gdy chcesz zmienić czas odrodzenia w oparciu o rodzaj swojego doświadczenia, ale nie chcesz zajmować się indywidualnym odrodzeniem graczy.
Chociaż ta właściwość może być ustawiona wewnątrz Script , możesz łatwiej ustawić ją bezpośrednio na obiekcie Players w oknie Explorer w Studio.
UseStrafingAnimations
Metody
Chat
Funkcja ta sprawia, że lokalny gracz rozmawia z daną wiadomość.Ponieważ ten przedmiot jest chroniony, próba jego użycia w Script lub LocalScript spowoduje błąd.
Zamiast tego, tworząc niestandardowy system czatu lub system, który potrzebuje dostępu do czatu, możesz użyć funkcji Chat usługi Chat:Chat().
Parametry
Wiadomość czatowała.
Zwroty
Przykłady kodu
This example demonstrates that the Players:Chat() function executes without error if using the Command Bar or a Plugin (assuming the local player can chat freely) and errors if executed in a Script.
-- Command bar
game:GetService("Players"):Chat("Hello, world!") --Results in 'Hello, world!' appearing in the Chat log under your Player's name.
-- Script
local Players = game:GetService("Players")
Players:Chat("Hello, world!") --Errors
GetPlayerByUserId
Funkcja ta przeszukuje każdy Player w Players dla jednego, którego Player.UserId pasuje do podanego UserId.Jeśli taki gracz nie istnieje, po prostu zwraca nil .Jest równoznaczny z następną funkcją:
local Players = game:GetService("Players")
local function getPlayerByUserId(userId)
for _, player in Players:GetPlayers() do
if player.UserId == userId then
return player
end
end
end
Ta metoda jest przydatna w znajdowaniu nabywcy produktu dla programisty za pomocą MarketplaceService.ProcessReceipt, który dostarcza tabelę zawierającą ID użytkownika nabywcy, a nie odniesienie do samego obiektu Gracza.Większość gier będzie wymagała odniesienia do gracza, aby przyznać produkty.
Parametry
The Player.UserId gracza jest określany.
Zwroty
Przykłady kodu
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:
- Sets up the ProcessReceipt callback function to handle the purchase of two developer products for an experience.
- Checks for and records purchases using a GlobalDataStore called PurchaseHistory.
- Properly returns PurchaseGranted if the transaction completes successfully, or if the function detects that the purchase has already been granted using the PurchaseHistory data store.
After the receipt processing routine, it's possible that the purchase was granted but recording it as granted failed due to a data store error. This is one unavoidable scenario that leads to duplicate granting of the purchase, because processReceipt() will be called for the purchase again. You can mitigate this by keeping another in-memory record of purchases so that the same server will not grant the same purchase twice, but you'll need a session locking implementation around your data store to avoid the potential of duplicate grants across servers.
local MarketplaceService = game:GetService("MarketplaceService")
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
-- Data store setup for tracking purchases that were successfully processed
local purchaseHistoryStore = DataStoreService:GetDataStore("PurchaseHistory")
local productIdByName = {
fullHeal = 123123,
gold100 = 456456,
}
-- A dictionary to look up the handler function to grant a purchase corresponding to a product ID
-- These functions return true if the purchase was granted successfully
-- These functions must never yield since they're called later within an UpdateAsync() callback
local grantPurchaseHandlerByProductId = {
[productIdByName.fullHeal] = function(_receipt, player)
local character = player.Character
local humanoid = character and character:FindFirstChild("Humanoid")
-- Ensure the player has a humanoid to heal
if not humanoid then
return false
end
-- Heal the player to full Health
humanoid.Health = humanoid.MaxHealth
-- Indicate a successful grant
return true
end,
[productIdByName.gold100] = function(_receipt, player)
local leaderstats = player:FindFirstChild("leaderstats")
local goldStat = leaderstats and leaderstats:FindFirstChild("Gold")
if not goldStat then
return false
end
-- Add 100 gold to the player's gold stat
goldStat.Value += 100
-- Indicate a successful grant
return true
end,
}
-- The core ProcessReceipt callback function
-- This implementation handles most failure scenarios but does not completely mitigate cross-server data failure scenarios
local function processReceipt(receiptInfo)
local success, result = pcall(
purchaseHistoryStore.UpdateAsync,
purchaseHistoryStore,
receiptInfo.PurchaseId,
function(isPurchased)
if isPurchased then
-- This purchase was already recorded as granted, so it must have previously been handled
-- Avoid calling the grant purchase handler here to prevent granting the purchase twice
-- While the value in the data store is already true, true is returned again so that the pcall result variable is also true
-- This will later be used to return PurchaseGranted from the receipt processor
return true
end
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
-- Avoids granting the purchase if the player is not in the server
-- When they rejoin, this receipt processor will be called again
return nil
end
local grantPurchaseHandler = grantPurchaseHandlerByProductId[receiptInfo.ProductId]
if not grantPurchaseHandler then
-- If there's no handler defined for this product ID, the purchase cannot be processed
-- This will never happen as long as a handler is set for every product ID sold in the experience
warn(`No purchase handler defined for product ID '{receiptInfo.ProductId}'`)
return nil
end
local handlerSucceeded, handlerResult = pcall(grantPurchaseHandler, receiptInfo, player)
if not handlerSucceeded then
local errorMessage = handlerResult
warn(
`Grant purchase handler errored while processing purchase from '{player.Name}' of product ID '{receiptInfo.ProductId}': {errorMessage}`
)
return nil
end
local didHandlerGrantPurchase = handlerResult == true
if not didHandlerGrantPurchase then
-- The handler did not grant the purchase, so record it as not granted
return nil
end
-- The purchase is now granted to the player, so record it as granted
-- This will later be used to return PurchaseGranted from the receipt processor
return true
end
)
if not success then
local errorMessage = result
warn(`Failed to process receipt due to data store error: {errorMessage}`)
return Enum.ProductPurchaseDecision.NotProcessedYet
end
local didGrantPurchase = result == true
return if didGrantPurchase
then Enum.ProductPurchaseDecision.PurchaseGranted
else Enum.ProductPurchaseDecision.NotProcessedYet
end
-- Set the callback; this can only be done once by one script on the server
MarketplaceService.ProcessReceipt = processReceipt
GetPlayerFromCharacter
Funkcja ta zwraca Player powiązany z danym Player.Character lub nil jeśli nie można go znaleźć.Jest równoznaczny z następną funkcją:
local function getPlayerFromCharacter(character)
for _, player in game:GetService("Players"):GetPlayers() do
if player.Character == character then
return player
end
end
end
Ta metoda jest często używana, gdy wystrzeliwuje się jakaś wydarzenie w postaci gracza (takie jak ich Class.Humanoid``Class.Humanoid.Died|dying ).Takie wydarzenie może nie odwoływać się bezpośrednio do obiektu Gracza, ale ta metoda zapewnia łatwy dostęp.Odwrotnością tej funkcji można opisać uzyskiwanie charakteru gracza.Aby to zrobić, po prostu wejdź na właściwość Postać.
Parametry
Instancja postaci, z której chcesz uzyskać gracza.
Zwroty
Przykłady kodu
Players:GetPlayerFromCharacter
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local PLAYER_NAME = "Nightriff"
local character = Workspace:FindFirstChild(PLAYER_NAME)
local player = Players:GetPlayerFromCharacter(character)
if player then
print(`Player {player.Name} ({player.UserId}) is in the game`)
else
print(`Player {PLAYER_NAME} is not in the game!`)
end
GetPlayers
Ta metoda zwraca tabelę wszystkich obecnie połączonych Player obiektów.Funkcjonuje w ten sam sposób Instance:GetChildren(), z wyjątkiem, że zwraca tylko obiekty Player znalezione pod Players .Gdy jest używany z pętlą for, jest przydatny do iterowania nad wszystkimi graczami w grze.
local Players = game:GetService("Players")for _, player in Players:GetPlayers() doprint(player.Name)end
Skrypty, które łączą się z Players.PlayerAdded są często próbują przetworzyć każdego Gracza, który łączy się do gry.Ta metoda jest przydatna do iterowania nad już połączonymi graczami, które nie wystrzelą PlayerAdded .Użycie tej metody zapewnia, że żaden gracz nie zostanie pominięty!
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print("Player: " .. player.Name)
end
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Zwroty
Tabela zawierająca wszystkich graczy na serwerze.
Przykłady kodu
This code sample listens for players spawning and gives them Sparkles in their head. It does this by defining two functions, onPlayerSpawned and onPlayerAdded.
local Players = game:GetService("Players")
local function onCharacterAdded(character)
-- Give them sparkles on their head if they don't have them yet
if not character:FindFirstChild("Sparkles") then
local sparkles = Instance.new("Sparkles")
sparkles.Parent = character:WaitForChild("Head")
end
end
local function onPlayerAdded(player)
-- Check if they already spawned in
if player.Character then
onCharacterAdded(player.Character)
end
-- Listen for the player (re)spawning
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)
SetChatStyle
Funkcja ta ustawia, czy BubbleChat i ClassicChat są używane, i mówi TeamChat i Chat, co zrobić za pomocą enum Enum.ChatStyle.Ponieważ ten przedmiot jest chroniony, próba jego użycia w Script lub LocalScript spowoduje błąd.
Funkcja ta jest używana wewnętrznie, gdy tryb czatu jest ustawiony przez gra.
Parametry
Wskazany styl czatu jest ustawiać.
Zwroty
Przykłady kodu
This example demonstrates that the Players:SetChatStyle() function executes without error if using the Command Bar or a Plugin and errors if executed in a LocalScript.
When executed in the Command Bar, this code sets the chat style to Classic using the Enum.ChatStyle enum.
-- Command bar
game.Players:SetChatStyle(Enum.ChatStyle.Classic) -- Set's chat style to Classic
-- LocalScript
local Players = game:GetService("Players")
Players:SetChatStyle(Enum.ChatStyle.Classic) -- Errors
TeamChat
Funkcja ta sprawia, że Players.LocalPlayer czat otrzymuje wiadomość podaną, która będzie widoczna tylko dla użytkowników z tej samej drużyny.Ponieważ ten przedmiot jest chroniony, próba jego użycia w Script lub LocalScript spowoduje błąd.
Funkcja ta jest używana wewnętrznie, gdy Players.LocalPlayer wysyła wiadomość do swojego zespołu.
Parametry
Wiadomość jest rozmawiana.
Zwroty
Przykłady kodu
This example demonstrates that the Players:TeamChat() function executes without error if using the Command Bar or a Plugin and errors if executed in a LocalScript.
When executed in the Command Bar, the function sends the specified message to all players on the same Team as the Players.LocalPlayer.
-- Command bar
game.Players:TeamChat("Hello World") -- Sends a "Hello World" message to all players on the local player's team
-- LocalScript
local Players = game:GetService("Players")
Players:TeamChat("Hello World") -- Errors
BanAsync
Metoda Players:BanAsync() pozwala łatwo zbanować użytkowników, którzy naruszają wytyczne swojego doświadczenia.Możesz określić czas trwania zakazu, włączyć zakaz do rozprzestrzeniania się na podejrzane alternatywne konta i przekazać wiadomość do zakazanego użytkownika zgodnie z wytycznymi dotyczącymi wykorzystania.Powinieneś również opublikować swoje zasady doświadczenia w miejscu dostępnym dla wszystkich użytkowników i zapewnić sposób na apelację.Ta metoda jest włączona i wyłączona przez właściwość Players.BanningEnabled, którą możesz przełączyć w Studio.
Zakazanie i wysyłanie wiadomości
Zbanowani użytkownicy zostaną natychmiast wyprowadzeni i uniemożliwi im dołączenie do twoich doświadczeń.Zostaną zaprezentowane z ekranem błędu wyświetlającym czas pozostały na ich zakazie i twoim DisplayReason.Systemy tylne Roblox wyrzucą graczy z wszystkich serwerów z miejsce(ów), które określisz.DisplayReason może mieć maksymalną długość 400 znaków i podlega filtrowi tekstowemu.Aby uzyskać więcej informacji na temat akceptowanego tekstu modalowego, zobacz zakaz wysyłania wiadomości.
Miejsca i wszechświat
Domyślnie zakazy rozciągają się na każde miejsce w tym wszechświecie.Aby ograniczyć zakaz tylko do miejsca, z którego jest wzywany ten API, skonfiguruj ApplyToUniverse do false.Jeśli jednak użytkownik zostanie zbanowany na początku wszechświata, skutkuje to skutecznie wykluczeniem użytkownika z całości wszechświata, niezależnie od tego, czy istnieje uniwersalny zakaz, czy nie.
Alternatywne konta
Użytkownicy często grają pod wieloma różnymi kontami, znanymi jako alternatywne konta lub konta alt, które są czasami używane do ominięcia zakazów kont.Aby pomóc Ci utrzymać zakazanych użytkowników na zewnątrz, domyślne zachowanie tego API rozprzestrzeni wszystkie zakazy z konta źródłowego, które zakazałeś, na którekolwiek ze swoich podejrzanych kont alternatywnych.Możesz wyłączyć propagacje zakazów do kont alternatywnych, konfigurując ExcludeAltAccounts do true.
Czas trwania zakazu
Nie wszystkie przekroczenia są takie same, więc nie wszystkie zakazy powinny mieć taką samą długość.Ta API pozwala skonfigurować czas trwania banować, w sekundach, za pomocą pola Duration.Aby określić stały banować, ustaw pole na -1.Możesz również chcieć dynamicznie skonfigurować czas trwania zakazu w oparciu o historię zakazów użytkownika, którą możesz zapytac za pomocą Players:GetBanHistoryAsync().Na przykład możesz rozważyć liczbę zakazów, czas trwania poprzednich zakazów lub skonstruować logikę z notatkami, które zapisujesz pod PrivateReason, które mogą mieć do 1000 znaków i nie są filtrowane tekstowo.Notatki nigdy nie są udostępniane klientowi i można uznać je za bezpieczne przed atakującymi.
Błędy i ograniczenia prędkości
Ta metoda wysyła wezwanie HTTP do usług tylnych, które są przedmiotem ograniczania i mogą zawieść.Jeśli wzywasz tę API z więcej niż jednym UserId, ta metoda próbuje wykonać wezwanie HTTP dla każdej ID.Następnie zagromadzi wszystkie komunikaty o błędach i połączy je jako oddzieloną przecinkiem listę.Na przykład, jeśli ta metoda jest wywoływana dla pięciu użytkowników i żądania dla tych z UserIds 2 i 4 nie powiodą się, pojawia się następujący komunikat o błędzie:
HTTP failure for UserId 2: Timedout, HTTP 504 (Service unavailable) failure for UserId 4: Service exception
Wiadomość zawsze będzie zawierać failure for UserId {}, jeśli jest to błąd HTTP.
Wymóg strony klienta
Ze względu na zagrożenia związane z zakazaniem użytkowników, ta metoda może być wywołana tylko na serwerze doświadczenia tylnej strony (wezwania strony klienta spowodują błąd).Możesz przetestować to API w Studio podczas współpracy dziełolub w testach zespołu, ale zakazy nie będą miały zastosowania do produkcji.
Ta API korzysta z Ograniczeń użytkownika Otwarty API chmury. Będziesz mógł wykorzystać te API do zarządzania zakazami w aplikacjach stron trzecich.
Parametry
UserIds (wymagane; array) — Array z UserIds graczy, które mają być zakazane. Maksymalny rozmiar to 50 .
ApplyToUniverse (opcjonalnie; boolean) — Czy zakaz rozprzestrzenia się na wszystkie miejsca w świecie doświadczeń. Domyślnie jest true .
Duration (wymagane; liczba całkowita) — Czas trwania banować, w sekundach.Stałe zakazy powinny mieć wartość -1.0 i wszystkie inne negatywne wartości są nieprawidłowe.
DisplayReason (wymagane; ciąg) — Wiadomość, która zostanie wyświetlona użytkownikom, gdy próbują i nie udaje im się dołączyć do doświadczenia.Maksymalna długość ciągu wynosi 400 .
PrivateReason (wymagane; ciąg) — wewnętrzna komunikacja, która zostanie zwrócona przy zapytaniu o historię zakazów użytkownika. Maksymalna długość ciągu wynosi 1000 .
ExcludeAltAccounts (opcjonalnie; boolean) — Kiedy true , Roblox nie próbuje zakazać kont alternatywnych. Domyślnie jest false .
Zwroty
Przykłady kodu
The following example bans a user with a duration calculated from their ban history, scoped to the entire universe and all of the user's alternate accounts.
local Players = game:GetService("Players")
if shouldBeBanned(player) then
local banHistoryPages = Players:GetBanHistoryAsync(player.UserId)
local duration = getNextBanDuration(banHistoryPages) -- Creator-implemented logic
local config: BanConfigType = {
UserIds = { player.UserId },
Duration = duration,
DisplayReason = "You violated community guideline #5",
PrivateReason = "Put anything here that the user should not know but is helpful for your records",
ExcludeAltAccounts = false,
ApplyToUniverse = true,
}
local success, err = pcall(function()
return Players:BanAsync(config)
end)
print(success, err)
end
CreateHumanoidModelFromDescription
Zwraca model postaci wyposażony we wszystko, co określone w przekazanej w Deskrypcji Humanoida, i jest R6 lub R15, jak określa to rodzaj urządzenia.
Parametry
Określa wygląd zwróconej postaci.
Określa, czy zwrócony znak będzie R6 lub R15.
Weryfikacja typu zasobu określa, czy funkcja ta będzie ładować modele, czy nie (należy ustawić to na Zawsze, chyba że chcesz ładować niekatalogowe zasoby).
Zwroty
Model postaci humanoidalnej.
Przykłady kodu
This code sample creates a Humanoid Model from the passed in HumanoidDescription and parents the Model to the Workspace.
game.Players:CreateHumanoidModelFromDescription(Instance.new("HumanoidDescription"), Enum.HumanoidRigType.R15).Parent =
game.Workspace
CreateHumanoidModelFromUserId
Zwraca ustawienie modelu postaci z wszystkim, co jest wyposażone, aby pasować do awatara użytkownika określonego przez przekazany ID użytkownika.Obejmuje to, czy postać jest obecnie R6 lub R15.
Parametry
ID użytkownika dla użytkownika Roblox. (ID użytkownika to numer w profilu użytkownika, np. www.roblox.com/users/1/profile).
Zwroty
Model postaci humanoidalnej.
Przykłady kodu
This code sample creates a Humanoid Model to match the avatar of the passed in User ID, and parents the Model to the Workspace.
game.Players:CreateHumanoidModelFromUserId(1).Parent = game.Workspace
GetBanHistoryAsync
Zbieraj historię zakazów i odblokowań każdego użytkownika w świecie doświadczenia.Ta metoda zwraca instancję BanHistoryPages, która dziedziczy od Pages.Ta metoda jest włączona i wyłączona przez właściwość Players.BanningEnabled, którą możesz przełączyć w Studio.
Wezwanie funkcji to będzie udane tylko na serwerach gier produkcyjnych, a nie na urządzeniach klienta lub w Studio.
Ta API korzysta z Ograniczeń użytkownika Otwarty API chmury. Będziesz mógł wykorzystać te API do zarządzania zakazami w aplikacjach stron trzecich.
Parametry
Zwroty
Zobacz BanHistoryPages na powrót referencji.
GetCharacterAppearanceInfoAsync
Funkcja ta zwraca informacje o awatarze gracza (ignorując sprzęt) na stronie internetowej Roblox w formie słownika.Nie należy go mylić z GetCharacterAppearanceAsync, który rzeczywiście ładował zasoby opisane przez tę metodę.Możesz użyć InsertService:LoadAsset() ładować zasoby używane w awatarze gracza.Struktura zwróconego słownika jest następująca:
<th>Typ</th><th>Opis</th></tr></thead><tr><td><code>aktywa</code></td><td>tabela (patrz poniżej)</td><td>Opisuje wyposażone zasoby (czapki, części ciała itp)</td></tr><tr><td><code>kolory ciała</code></td><td>tabela (patrz poniżej)</td><td>Opisuje wartości BrickColor dla każdej kończyny</td></tr><tr><td><code>kolor ciała3s</code></td><td>tabela (patrz poniżej)</td><td>Opisuje instancję Color3 dla każdej kończyny, która może nie pasować idealnie do kolorów ciała</td></tr><tr><td><code>domyślne spodnie zastosowane</code></td><td>bool</td><td>Opisuje, czy domyślne spodnie są zastosowane</td></tr><tr><td><code>domyślna koszula zastosowana</code></td><td>bool</td><td>Opisuje, czy zostanie zastosowana domyślna koszula</td></tr><tr><td><code>emotki</code></td><td>tabela (patrz poniżej)</td><td>Opisuje animacje emotek wyposażonych</td></tr><tr><td><code>typ awatara gracza</code></td><td>ciąg</td><td>Albo "R15" lub "R6"</td></tr><tr><td><code>skalę</code></td><td>tabela (patrz poniżej)</td><td>Opisuje różne czynniki skalowania ciała</td></tr>
Nazwa |
---|
Podtablica zasobów
Tabela assets jest matrycą tablic zawierającą następujące klucze, które opisują aktywa obecnie wyposażone przez gracza:
<th>Typ</th><th>Opis</th></tr></thead><tr><td><code>id</code></td><td>number liczba</td><td>ID zasobu założonego zasobu</td></tr><tr><td><code>typ zasobu</code></td><td>stół</td><td>Tabela z polami <code>nazwa</code> i <code>identyfikator</code>, każdy opisujący rodzaj wyposażonego aktywa ("Czapka", "Twarz" itp.)</td></tr><tr><td><code>nazwa</code></td><td>ciąg</td><td>Nazwa wyposażonego przedmiotu</td></tr>
Nazwa |
---|
Tabela podrzędna skal
Tabela scales ma następujące klucze, każdy z nich to liczba odpowiadająca jednej właściwości skalowania Humanoid : bodyType , head , height , proportion , depth , width .
Podtablica kolorów ciała
Tabela bodyColors ma następujące klucze, każdy z nich to liczba odpowiadająca numerowi ID BrickColor , który można użyć z BrickColor.new(id) : leftArmColorId , torsoColorId , rightArmColorId , headColorId , leftLegColorId , rightLegColorId .
Parametry
ID * gracza określonego gracza.
Zwroty
Słownik zawierający informacje o wyglądzie postaci danego użytkownika.
Przykłady kodu
Sometimes it is best to see an example of the returned dictionary structure in pure Lua. Here is one such example of a player whose avatar uses a package and wears several hats. Can you guess who it is?
local result = {
playerAvatarType = "R15",
defaultPantsApplied = false,
defaultShirtApplied = false,
scales = {
bodyType = 0,
head = 1,
height = 1.05,
proportion = 0,
depth = 0.92,
width = 0.85,
},
bodyColors = {
leftArmColorId = 1030,
torsoColorId = 1001,
rightArmColorId = 1030,
headColorId = 1030,
leftLegColorId = 1001,
rightLegColorId = 1001,
},
assets = {
{
id = 1031492,
assetType = {
name = "Hat",
id = 8,
},
name = "Striped Hat",
},
{
id = 13062491,
assetType = {
name = "Face Accessory",
id = 42,
},
name = "Vision Française ",
},
{
id = 16598440,
assetType = {
name = "Neck Accessory",
id = 43,
},
name = "Red Bow Tie",
},
{
id = 28999228,
assetType = {
name = "Face",
id = 18,
},
name = "Joyous Surprise",
},
{
id = 86896488,
assetType = {
name = "Shirt",
id = 11,
},
name = "Expensive Red Tuxedo Jacket",
},
{
id = 86896502,
assetType = {
name = "Pants",
id = 12,
},
name = "Expensive Red Tuxedo Pants",
},
{
id = 376530220,
assetType = {
name = "Left Arm",
id = 29,
},
name = "ROBLOX Boy Left Arm",
},
{
id = 376531012,
assetType = {
name = "Right Arm",
id = 28,
},
name = "ROBLOX Boy Right Arm",
},
{
id = 376531300,
assetType = {
name = "Left Leg",
id = 30,
},
name = "ROBLOX Boy Left Leg",
},
{
id = 376531703,
assetType = {
name = "Right Leg",
id = 31,
},
name = "ROBLOX Boy Right Leg",
},
{
id = 376532000,
assetType = {
name = "Torso",
id = 27,
},
name = "ROBLOX Boy Torso",
},
},
}
print(result)
GetFriendsAsync
Funkcja GetFriends Players zwraca obiekt FriendPages, który zawiera informacje dla wszystkich przyjaciół danego użytkownika.Przedmioty w obiekcie FriendPages są tablicami z następującymi polami:
<th>Typ</th><th>Opis</th></tr></thead><tr><td>Id</td><td>int64</td><td>Id użytkownika znajomy</td></tr><tr><td>Nazwa użytkownika</td><td>ciąg</td><td>Nazwa nazwa znajomy</td></tr><tr><td>Nazwa wyświetlania</td><td>ciąg</td><td>Klasa <code>Class.Player.DisplayName|display name</code> znajomy.</td></tr>
Nazwa |
---|
Zobacz przykłady kodu dla łatwego sposobu iterowania nad wszystkimi przyjaciółmi gracza.
Parametry
ID użytkownika gracza określonego.
Zwroty
Przykłady kodu
This code sample loads the Player.UserId of the player whose username is provided at the top of the script by using Players:GetUserIdFromNameAsync(). Then, it gets a FriendPages object by calling Players:GetFriendsAsync() and iterates over each entry using the iterPageItems function. The username of each friend is stored in a table, then printed at the end.
local Players = game:GetService("Players")
local USERNAME = "Cozecant"
local function iterPageItems(pages)
return coroutine.wrap(function()
local pagenum = 1
while true do
for _, item in ipairs(pages:GetCurrentPage()) do
coroutine.yield(item, pagenum)
end
if pages.IsFinished then
break
end
pages:AdvanceToNextPageAsync()
pagenum = pagenum + 1
end
end)
end
-- First, get the user ID of the player
local userId = Players:GetUserIdFromNameAsync(USERNAME)
-- Then, get a FriendPages object for their friends
local friendPages = Players:GetFriendsAsync(userId)
-- Iterate over the items in the pages. For FriendPages, these
-- are tables of information about the friend, including Username.
-- Collect each username in a table
local usernames = {}
for item, _pageNo in iterPageItems(friendPages) do
table.insert(usernames, item.Username)
end
print("Friends of " .. USERNAME .. ": " .. table.concat(usernames, ", "))
GetHumanoidDescriptionFromOutfitId
Zwraca HumanoidDescription dla określonego ID stroju, który zostanie ustawiony z częściami/kolorami/animacjami itp. stroju.Przebranie może być utworzone przez użytkownika, lub może to być przebranie dla pakietu utworzone przez Roblox.
Parametry
ID stroju, dla którego poszukiwana jest opis Humanoida.
Zwroty
Opis humanoida zainicjowany za pomocą specyfikacji dla przekazanego ID stroju.
Przykłady kodu
Shows how to get the HumanoidDescription for bundle 799 (Fishman).
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local function getOutfitId(bundleId)
if bundleId <= 0 then
return
end
local info = game.AssetService:GetBundleDetailsAsync(bundleId)
if not info then
return
end
for _, item in pairs(info.Items) do
if item.Type == "UserOutfit" then
return item.Id
end
end
return nil
end
local function getHumanoidDescriptionBundle(bundleId)
local itemId = getOutfitId(bundleId)
if itemId and itemId > 0 then
return Players:GetHumanoidDescriptionFromOutfitId(itemId)
end
return nil
end
local humanoidDescription = getHumanoidDescriptionBundle(799)
local humanoidModel = Players:CreateHumanoidModelFromDescription(humanoidDescription, Enum.HumanoidRigType.R15)
humanoidModel.Parent = Workspace
GetHumanoidDescriptionFromUserId
Zwraca opis humanoida, który określa wszystko, co jest wyposażone dla awatara użytkownika określonego przez przekazany ID użytkownika.Obejmuje również skale i kolory ciała.
Parametry
ID użytkownika dla użytkownika Roblox. (ID użytkownika to numer w profilu użytkownika, np. www.roblox.com/users/1/profile).
Zwroty
Opis humanoida zainicjowany za pomocą przekazanej specyfikacji awatara użytkownika.
Przykłady kodu
This code sample shows how to use GetHumanoidDescriptionFromUserId() to create a Humanoid Model.
game.Players:CreateHumanoidModelFromDescription(
game.Players:GetHumanoidDescriptionFromUserId(1),
Enum.HumanoidRigType.R15
).Parent =
game.Workspace
GetNameFromUserIdAsync
Funkcja GetNameFromUserIdAsync Players wysyła zapytanie na stronę internetową Roblox, pytając, jaki jest nazwa użytkownika konta z danym UserId .
Ta metoda występuje błąd, jeśli nie istnieje konto z danym ID użytkownika.Jeśli nie jesteś pewien, czy istnieje takie konto, zaleca się owijanie wezwań do tej funkcji za pomocą pcall().Ponadto możesz ręcznie przechowywać wyniki, aby przyszłe wezwania z tym samym ID użytkownika były szybkie.Zobacz przykłady kodu, aby dowiedzieć się więcej.
Parametry
The Player.UserId gracza jest określany.
Zwroty
Nazwa użytkownika z określonym Player.UserId .
Przykłady kodu
This code sample demonstrates using the Players:GetNameFromUserIdAsync() method to get a user's Player.Name from their Player.UserId.
local Players = game:GetService("Players")
-- Example Data:
-- UserId: 118271 Name: "RobloxRulez"
-- UserId: 131963979 Name: "docsRule"
local nameOne = Players:GetNameFromUserIdAsync(118271)
local nameTwo = Players:GetNameFromUserIdAsync(131963979)
print(nameOne, nameTwo)
-- prints: "RobloxRulez docsRule"
This code sample demonstrates using the Players:GetNameFromUserIdAsync() method to get a user's Player.Name from their Player.UserId. Because GetNameFromUserIdAsync() yields, you can avoid calling it for the same Name using a table to store each UserId:Name pair found, called a cache. pcall() is used to catch the failure in case the Name doesn't exist.
local Players = game:GetService("Players")
-- Create a table called 'cache' to store each 'Name' as they are found.
-- If we lookup a 'Name' using the same 'UserId', the 'Name' will come
-- from cache (fast) instead of GetNameFromUserIdAsync() (yields).
local cache = {}
function getNameFromUserId(userId)
-- First, check if the cache contains 'userId'
local nameFromCache = cache[userId]
if nameFromCache then
-- if a value was stored in the cache at key 'userId', then this 'nameFromCache'
-- is the correct Name and we can return it.
return nameFromCache
end
-- If here, 'userId' was not previously looked up and does not exist in the
-- cache. Now we need to use GetNameFromUserIdAsync() to look up the name
local name
local success, _ = pcall(function()
name = Players:GetNameFromUserIdAsync(userId)
end)
if success then
-- if 'success' is true, GetNameFromUserIdAsync() successfully found the
-- name. Store this name in the cache using 'userId' as the key so we
-- never have to look this name up in the future. Then return name.
cache[userId] = name
return name
end
-- If here, 'success' was false, meaning GetNameFromUserIdAsync()
-- was unable to find the 'name' for the 'userId' provided. Warn the user
-- this happened and then return nothing, or nil.
warn("Unable to find Name for UserId:", userId)
return nil
end
-- Example Data:
-- UserId: 118271 Name: "RobloxRulez"
-- UserId: 131963979 Name: "docsRule"
-- The first time a UserId is used, GetNameFromUserIdAsync() will be called
local nameOne = getNameFromUserId(118271)
local nameTwo = getNameFromUserId(131963979)
-- Because 118271 was previously used, get its Name from the cache
local nameOneQuick = getNameFromUserId(118271)
print(nameOne, nameTwo, nameOneQuick)
-- prints: "RobloxRulez docsRule RobloxRulez"
GetUserIdFromNameAsync
Funkcja ta wyśle zapytanie na stronę internetową Roblox, pytając, co jest Player.UserId z kontem o podanym nazwiskiem Player.
Ta metoda występuje błędy, jeśli nie istnieje konto z daną nazwa użytkownika.Jeśli nie jesteś pewien, czy istnieje takie konto, zaleca się owijanie wezwań do tej funkcji za pomocą pcall().Ponadto możesz ręcznie przechować wyniki, aby szybko dokonać przyszłych wezwań z tym samym nazwa użytkownika.Zobacz przykłady kodu, aby dowiedzieć się więcej.
Parametry
Nazwa użytkownika gracza, który jest określony.
Zwroty
The Player.UserId użytkownika, którego nazwa jest określona.
Przykłady kodu
This code sample demonstrates using the Players:GetUserIdFromNameAsync() method to get a user's Player.UserId from their Player.Name.
local Players = game:GetService("Players")
-- Example Data:
-- UserId: 118271 Name: "RobloxRulez"
-- UserId: 131963979 Name: "docsRule"
local userIdOne = Players:GetUserIdFromNameAsync("RobloxRulez")
local userIdTwo = Players:GetUserIdFromNameAsync("docsRule")
print(userIdOne, userIdTwo)
-- prints: "118271 131963979"
This code sample demonstrates using the Players:GetUserIdFromNameAsync() method to get a user's Player.UserId from their Player.Name. Because GetUserIdFromNameAsync() yields, you can avoid calling it for the same UserId using a table to store each Name:UserId pair found, called a cache. pcall() is used to catch the failure in case the UserId doesn't exist.
local Players = game:GetService("Players")
-- Create a table called 'cache' to store each 'UserId' as they are found.
-- If we lookup a 'UserId' using the same 'Name', the 'UserId' will come
-- from cache (fast) instead of GetUserIdFromNameAsync() (yields).
local cache = {}
function getUserIdFromName(name)
-- First, check if the cache contains 'name'
local userIdFromCache = cache[name]
if userIdFromCache then
-- if a value was stored in the cache at key 'name', then this 'userIdFromCache'
-- is the correct UserId and we can return it.
return userIdFromCache
end
-- If here, 'name' was not previously looked up and does not exist in the
-- cache. Now we need to use GetUserIdFromNameAsync() to look up the userId
local userId
local success, _ = pcall(function()
userId = Players:GetUserIdFromNameAsync(name)
end)
if success then
-- if 'success' is true, GetUserIdFromNameAsync() successfully found the
-- userId. Store this userId in the cache using 'name' as the key so we
-- never have to look this userId up in the future. Then return userId.
cache[name] = userId
return userId
end
-- If here, 'success' was false, meaning GetUserIdFromNameAsync()
-- was unable to find the 'userId' for the 'name' provided. We can warn the
-- user this happened and then return nothing, or nil.
warn("Unable to find UserId for Name:", name)
return nil
end
-- Example Data:
-- UserId: 118271 Name: "RobloxRulez"
-- UserId: 131963979 Name: "docsRule"
-- The first time a Name is used, GetUserIdFromNameAsync() will be called
local userIdOne = getUserIdFromName("RobloxRulez")
local userIdTwo = getUserIdFromName("docsRule")
-- Because "RobloxRulez" was previously used, get its UserId from the cache
local userIdOneQuick = getUserIdFromName("RobloxRulez")
print(userIdOne, userIdTwo, userIdOneQuick)
-- prints: "118271 131963979 118271"
GetUserThumbnailAsync
Funkcja ta zwraca URL zawartości obrazu awatara gracza, uwzględniając jego UserId , pożądaną wielkość obrazu jako Enum.ThumbnailSize enumerum i pożądanego typu jako Enum.ThumbnailType enumerum.Wyświetla również boolean, opisujący, czy obraz jest gotowy do użycia.
Najczęściej metoda ta jest używana z ImageLabel.Image lub Decal.Texture w celu wyświetlenia zdjęć awatara użytkownika w doświadczeniu.
Parametry
The Player.UserId gracza jest określany.
A Enum.ThumbnailType opisująca rodzaj miniatura.
A Enum.ThumbnailSize określający rozmiar miniatura.
Zwroty
Tuple zawierający URL zawartości miniaturki użytkownika na podstawie określonych parametrów oraz bool opisujący, czy obraz jest gotowy do użycia, czy nie.
Przykłady kodu
This code sample displays the current player's thumbnail in a parent ImageLabel by using Players:GetUserThumbnailAsync() and setting the Image() property as well as its Size().
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local PLACEHOLDER_IMAGE = "rbxassetid://0" -- replace with placeholder image
-- fetch the thumbnail
local userId = player.UserId
local thumbType = Enum.ThumbnailType.HeadShot
local thumbSize = Enum.ThumbnailSize.Size420x420
local content, isReady = Players:GetUserThumbnailAsync(userId, thumbType, thumbSize)
-- set the ImageLabel's content to the user thumbnail
local imageLabel = script.Parent
imageLabel.Image = (isReady and content) or PLACEHOLDER_IMAGE
imageLabel.Size = UDim2.new(0, 420, 0, 420)
UnbanAsync
Odblokuj graczy zakazanych z Players:BanAsync() lub Ograniczenia użytkownika Otwarty API chmury.Ta metoda jest włączona i wyłączona przez właściwość Players.BanningEnabled, którą możesz przełączyć w Studio.
Podobnie jak Players:BanAsync(), ta metoda przyjmuje słownik config, który pozwoli ci masowo odblokować użytkowników.Konfiguruje to użytkowników, które zostały odblokowane i zakres, z którego zostały odblokowane.
Odblokowania będą miały zastosowanie tylko w odniesieniu do zakazów o tym samym zakresie ApplyToUniverse.Na przykład, odblokowanie z ApplyToUniverse ustawione na true nie unieważni poprzedniego zakazu z ApplyToUniverse ustawionym na false.Innymi słowy, odblokowanie poziomu wszechświata nie unieważni poziomu banowaćmiejsca.Odwrotność również jest prawdą.
Ta metoda wysyła wezwanie HTTP do usług tylnych, które są ograniczone i mogą zawieść.Jeśli wzywasz tę API z wieloma ID użytkownika, ta metoda próbuje wykonać to wezwanie HTTP dla każdego ID użytkownika.Następnie zagromadzi wszystkie komunikaty o błędach i połączy je jako oddzieloną przecinkiem listę.Na przykład, jeśli ta metoda zostanie wywołana dla pięciu : i żądań dla użytkowników 2 i 4 nie powiodą się, pojawi się następujący komunikat o błędzie: Wiadomość zawsze będzie zawierać , jeśli jest to błąd HTTP.Jest to niedefiniowane zachowanie, jeśli przekażesz zarówno ważne, jak i nieważne UserIds, tj.a UserId, który nie jest pozytywną liczbą, ponieważ niektóre żądania sieciowe mogą powodować powodzenie przed weryfikacją wszystkich wejść.
Ze względu na ryzyko związane z zakazaniem użytkowników, metoda ta może być wywołana tylko na serwerze gry w tle.Wezwania strony klienta spowodują błąd.Możesz przetestować to API w Studio, Tworzeniu zespołu i Testowaniu zespołu, ale zakazy nie będą miały zastosowania do produkcji.Wezwanie funkcji będzie próbować tylko wniosków o zakaz na serwerach gier produkcyjnych, a nie w testowaniu Studio.Jednak wszystkie kroki walidacji wejściowych nadal będą działać w Studio.
Ta API korzysta z Ograniczeń użytkownika Otwarty API chmury. Będziesz mógł wykorzystać te API do zarządzania zakazami w aplikacjach stron trzecich.
Parametry
<th>Typ</th><th>Opis</th></tr></thead><tbody><tr><td><code>ID użytkownika</code></td><td>matrixowy</td><td>ID użytkowników, które mogą zostać wymuszone do doświadczenia(ów). Maksymalny rozmiar to <code>50</code>.</td></tr><tr><td><code>Zastosuj do wszechświata</code></td><td>booleanowy</td><td>Propaguje odblokowanie we wszystkich miejscach w tym wszechświecie.</td></tr></tbody>
Nazwa |
---|
Zwroty
Przykłady kodu
The following un-bans a user, as well as another unrelated account with UserId 789.
local Players = game:GetService("Players")
if shouldBeUnbanned(player) then
local config: UnbanConfigType = {
UserIds = { player.UserId, 789 },
ApplyToUniverse = false,
}
local success, err = pcall(function()
return Players:UnbanAsync(config)
end)
print(success, err)
end
Zdarzenia
PlayerAdded
To wydarzenie wystrzeliwuje się, gdy gracz wchodzi do gry.Służy to do uruchomienia wydarzenia, gdy gracz dołącza do gry, takiego jak ładowanie zapisanych danych gracza GlobalDataStore.
Można go używać obok wydarzenia Players.PlayerRemoving, które uruchamia się, gdy gracz ma zamiar opuścić grę.Na instancja, jeśli chcesz wydrukować wiadomość za każdym razem, gdy dołącza lub opuszcza grę nowy gracz:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Players.PlayerRemoving:Connect(function(player)
print(player.Name .. " left the game!")
end)
Jeśli chcesz śledzić, kiedy postać gracza jest dodawana lub usuwana z gry, na przykład kiedy gracz odrodzi się lub umrze, możesz użyć funkcji Player.CharacterAdded i Player.CharacterRemoving.
Zauważ, że to wydarzenie nie działa tak, jak oczekiwano w trybie Gry , ponieważ gracz jest tworzony przed uruchomieniem skryptów, które łączą się z PlayerAdded.Aby obsłużyć ten przypadek, a także przypadki, w których skrypt jest dodawany do gry po wejściu gracza, stwórz funkcję onPlayerAdded(), którą możesz wezwać, aby obsłużyć wejście gracza.
Parametry
Instancja gracza, który dołączył do gry.
Przykłady kodu
This example will print "A player has entered: " followed by the name of the player that enters/joins a game every time a player joins.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print("A player has entered: " .. player.Name)
end
Players.PlayerAdded:Connect(onPlayerAdded)
PlayerMembershipChanged
To wydarzenie wystrzeliwuje, gdy serwer gry rozpozna, że członkostwo gracza zmieniło się.Zauważ jednak, że serwer spróbuje sprawdzić i zaktualizować członkostwo po zamknięciu modułu Premium .Tak więc, aby uwzględnić przypadki, w których użytkownik kupuje Premium poza grą, nadal musisz poprosić ich o zakup premium; następnie pokaże im wiadomość mówiącą, że są już ulepszeni i po zamknięciu modalu serwer gry zaktualizuje ich członkostwo i uruchomi to wydarzenie.
Aby dowiedzieć się więcej o włączeniu Premium do swojego doświadczenia i monetyzacji za pomocą systemu płatności opartego na zaangażowaniu, zobacz Płatności oparte na zaangażowaniu.
Zobacz także:
- MarketplaceService:PromptPremiumPurchase() , używany do zachęcenia użytkownika do zakupu premium
- MarketplaceService.PromptPremiumPurchaseFinished , zapala się, gdy zamknięta zostaje interfejs użytkownika zakupu Premium
Parametry
Przykłady kodu
The function in the code sample runs after the game server confirms a player's membership has changed. It demonstrates how you can grant players access to Premium benefits (or revoke them) when their membership status changes.
local Players = game:GetService("Players")
local function grantPremiumBenefits(player)
-- Grant the player access to Premium-only areas, items, or anything you can imagine!
print("Giving", player, "premium benefits!")
end
local function playerAdded(player)
if player.MembershipType == Enum.MembershipType.Premium then
grantPremiumBenefits(player)
end
end
local function playerMembershipChanged(player)
print("Received event PlayerMembershipChanged. New membership = " .. tostring(player.MembershipType))
if player.MembershipType == Enum.MembershipType.Premium then
grantPremiumBenefits(player)
end
end
Players.PlayerAdded:Connect(playerAdded)
Players.PlayerMembershipChanged:Connect(playerMembershipChanged)
PlayerRemoving
Wydarzenie usuwania gracza wystrzeliwuje się tuż przed tym, jak Player opuści grę.To wydarzenie wystrzeliwuje przed ChildRemoved zrobi na Players , i zachowuje się nieco podobnie do Instance.DescendantRemoving .Ponieważ wystrzeliwuje się przed rzeczywistym usunięciem Player, to wydarzenie jest przydatne do przechowywania danych gracza za pomocą GlobalDataStore.
Można to używać obok wydarzenia Player.PlayerAdded, które uruchamia się, gdy gracz dołącza do gry.Na instancja, aby wydrukować wiadomość za każdym razem, gdy dołącza lub opuszcza grę nowy gracz:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Players.PlayerRemoving:Connect(function(player)
print(player.Name .. " left the game!")
end)
Jeśli chcesz śledzić, kiedy postać gracza jest dodawana lub usuwana z gry, na przykład kiedy gracz odrodzi się lub umrze, możesz użyć funkcji Player.CharacterAdded i Player.CharacterRemoving.
Parametry
Instancja gracza, który opuszcza grę.
Przykłady kodu
This code will print "A player has left: ", followed by the player's name, every time a player leaves:
local Players = game:GetService("Players")
local function onPlayerRemoving(player)
print("A player has left: " .. player.Name)
end
Players.PlayerRemoving:Connect(onPlayerRemoving)
UserSubscriptionStatusChanged
To wydarzenie wystrzeliwuje się, gdy serwer gry rozpozna, że status użytkownika dla określonej subskrypcji zmienił się.Zauważ, że serwer próbuje sprawdzić i zaktualizować stan po zamknięciu okna zakupu subskrypcji .Aby rozliczyć przypadki, w których użytkownik kupuje subskrypcję poza grą podczas gry, nadal musisz poprosić ich o zakup subskrypcji; monit o wyświetlenie wiadomości informującej użytkownika, że jest już subskrybowany, a po zamknięciu modalu serwer gry aktualizuje status subskrypcji i uruchamia to wydarzenie.
Zauważ, że tylko skrypty serwera otrzymują to wydarzenie.
Parametry
Użytkownik, którego status subskrypcji się zmienił.
ID subskrypcji z zmianą stanu.