Chat basé sur la proximité

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Cet exemple montre comment mettre en œuvre un chat exclusif pour les utilisateurs qui sont près les uns des autres dans le monde du jeu.Il étend le rappel avec une fonction utilisant TextSource pour identifier les emplacements d'un utilisateur qui pourrait être un récepteur de message potentiel.Si cette fonction renvoie false , cela signifie que l'utilisateur se localise plus loin que la portée valide prédéfinie du fournisseur de message, de sorte que le système ne livre pas le message à cet utilisateur.

Ajoutez ce qui suit à un Script dans ServerScriptService :

Serveur

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Obtenez le canal de chat pour le chat basé sur la proximité
-- Vous pouvez remplacer ce canal général par un chat (chat privé)dédié
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Fonction pour obtenir la position du personnage d'un utilisateur
local function getPositionFromUserId(userId: number)
-- Obtenir le joueur associé à l'ID utilisateur donné
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Si le joueur existe, obtenez la position de son personnage
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Retourner une position par défaut si le joueur ou le personnage ne peut pas être trouvé
return Vector3.zero
end
-- Définir le rappel pour le canal général pour contrôler la livraison des messages
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Obtenez les positions du destinataire et du expéditeur du message
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Livrer le message si la distance entre l'expéditeur et la cible est inférieure à 50 unités
return (targetPos - sourcePos).Magnitude < 50
end