Näherungsbasierter Chat

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Dieses Beispiel zeigt, wie man einen exklusiven Chat für Benutzer implementiert, die in der Weltin der Nähe voneinander sind.Es erweitert den Rückruf mit einer Funktion, die TextSource verwendet, um die Standorte eines Benutzers zu identifizieren, der möglicherweise ein potenzieller Nachrichtenempfänger ist.Wenn diese Funktion false zurückgibt, bedeutet dies, dass der Benutzer weiter als die vorgegebene gültige Reichweite vom Nachrichtenabsender lokalisiert, so dass das System die Nachricht nicht an diesen Benutzer liefert.

Füge das Folgende zu einem Script in ServerScriptService hinzu:

Server

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Holen Sie sich den Chat-Kanal für den Chat auf Basis von Nähe
-- Du kannst diesen allgemeinen Kanal durch einen dedizierten Kanal ersetzen
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Funktion, um die Position des Charakters eines Benutzers zu erhalten
local function getPositionFromUserId(userId: number)
-- Holen Sie sich den Spieler mit der angegebenen Benutzer-ID verbunden
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Wenn der Spieler existiert, erhalte die Position seines Charakters
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Gib eine Standardposition zurück, wenn der Spieler oder die Figur nicht gefunden werden kann
return Vector3.zero
end
-- Stellen Sie den Rückruf für den allgemeinen Kanal ein, um die Nachrichtenlieferung zu steuern
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Holen Sie sich die Positionen des Nachrichten senders und des Ziels
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Nachricht übermitteln, wenn die Entfernung zwischen Sender und Ziel weniger als 50 Einheiten beträgt
return (targetPos - sourcePos).Magnitude < 50
end