From 9af568307e17f9d8975e46bfc3e046789abe3f1c Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 19 Jun 2022 16:03:38 +0100 Subject: [PATCH] a few changes on chat and dialog from udp/client --- .../ClientStack/Linden/UDP/LLClientView.cs | 50 ++++++++----------- .../CoreModules/Avatar/Chat/ChatModule.cs | 12 ----- .../Scripting/WorldComm/WorldCommModule.cs | 45 ++++++++++++----- .../Avatar/Concierge/ConciergeModule.cs | 2 - .../OptionalModules/World/NPC/NPCAvatar.cs | 12 ++--- 5 files changed, 57 insertions(+), 64 deletions(-) diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 85307f3ff8..8889cbe7bf 100755 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -8557,25 +8557,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (inchatpack.AgentData.SessionID.NotEqual(m_sessionId) || inchatpack.AgentData.AgentID.NotEqual(m_agentId)) return; - string fromName = String.Empty; //ClientAvatar.firstname + " " + ClientAvatar.lastname; - byte[] message = inchatpack.ChatData.Message; - byte type = inchatpack.ChatData.Type; - Vector3 fromPos = new Vector3(); // ClientAvatar.Pos; - // UUID fromAgentID = AgentId; - - int channel = inchatpack.ChatData.Channel; - - OSChatMessage args = new OSChatMessage(); - args.Channel = channel; - args.From = fromName; - args.Message = Utils.BytesToString(message); - args.Type = (ChatTypeEnum)type; - args.Position = fromPos; - - args.Scene = Scene; - args.Sender = this; - args.SenderUUID = m_agentId; + ChatFromViewerPacket.ChatDataBlock packdata = inchatpack.ChatData; + OSChatMessage args = new OSChatMessage() + { + Channel = packdata.Channel, + Message = Utils.BytesToString(packdata.Message), + Type = (ChatTypeEnum)packdata.Type, + Position = SceneAgent.AbsolutePosition, + Scene = Scene, + SenderUUID = m_agentId, + Sender = this + }; OnChatFromClient?.Invoke(this, args); } @@ -8614,18 +8607,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (rdialog.AgentData.SessionID.NotEqual(m_sessionId) || rdialog.AgentData.AgentID.NotEqual(m_agentId)) return; - int ch = rdialog.Data.ChatChannel; - byte[] msg = rdialog.Data.ButtonLabel; - - OSChatMessage args = new OSChatMessage(); - args.Channel = ch; - args.From = String.Empty; - args.Message = Utils.BytesToString(msg); - args.Type = ChatTypeEnum.Region; //Behaviour in SL is that the response can be heard from any distance - args.Position = new Vector3(); - args.Scene = Scene; - args.Sender = this; - + ScriptDialogReplyPacket.DataBlock rdialogData = rdialog.Data; + OSChatMessage args = new OSChatMessage() + { + Channel = rdialogData.ChatChannel, + Message = Utils.BytesToString(rdialogData.ButtonLabel), + Type = ChatTypeEnum.Region, //Behaviour in SL is that the response can be heard from any distance + Scene = Scene, + Sender = this + }; OnChatFromClient?.Invoke(this, args); } diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs index 8228bf689a..80ab3db336 100644 --- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs @@ -162,20 +162,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat client.OnChatFromClient += OnChatFromClient; } - protected virtual OSChatMessage FixPositionOfChatMessage(OSChatMessage c) - { - ScenePresence avatar; - Scene scene = (Scene)c.Scene; - if ((avatar = scene.GetScenePresence(c.Sender.AgentId)) != null) - c.Position = avatar.AbsolutePosition; - - return c; - } - public virtual void OnChatFromClient(Object sender, OSChatMessage c) { - c = FixPositionOfChatMessage(c); - // redistribute to interested subscribers Scene scene = (Scene)c.Scene; scene.EventManager.TriggerOnChatFromClient(sender, c); diff --git a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs index ea61e822c6..1774bb8c90 100644 --- a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs @@ -305,11 +305,6 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm { // m_log.DebugFormat("[WorldComm] got[2] type {0}, channel {1}, name {2}, id {3}, msg {4}", // type, channel, name, id, msg); - if (type == ChatTypeEnum.Region) - { - m_listenerManager.TryEnqueueMessage(channel, name, id, msg); - return; - } // validate type and set range float maxDistanceSQ; @@ -327,6 +322,10 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm maxDistanceSQ = m_shoutdistance; break; + case ChatTypeEnum.Region: + m_listenerManager.TryEnqueueMessage(channel, name, id, msg); + return; + default: return; } @@ -430,19 +429,39 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm * Listener Stuff * * *****************************************************************/ - private void DeliverClientMessage(Object sender, OSChatMessage e) { - if (null != e.Sender) + // validate type and set range + float maxDistanceSQ; + switch (e.Type) { - DeliverMessage(e.Type, e.Channel, e.Sender.Name, - e.Sender.AgentId, e.Message, e.Position); + case ChatTypeEnum.Whisper: + maxDistanceSQ = m_whisperdistance; + break; + + case ChatTypeEnum.Say: + maxDistanceSQ = m_saydistance; + break; + + case ChatTypeEnum.Shout: + maxDistanceSQ = m_shoutdistance; + break; + + case ChatTypeEnum.Region: + if (e.Sender == null) + m_listenerManager.TryEnqueueMessage(e.Channel, e.From, UUID.Zero, e.Message); + else + m_listenerManager.TryEnqueueMessage(e.Channel, e.Sender.Name, e.Sender.AgentId, e.Message); + return; + + default: + return; } + + if (e.Sender == null) + m_listenerManager.TryEnqueueMessage(e.Channel, e.Position, maxDistanceSQ, e.From, UUID.Zero, e.Message); else - { - DeliverMessage(e.Type, e.Channel, e.From, UUID.Zero, - e.Message, e.Position); - } + m_listenerManager.TryEnqueueMessage(e.Channel, e.Position, maxDistanceSQ, e.Sender.Name, e.Sender.AgentId, e.Message); } public Object[] GetSerializationData(UUID itemID) diff --git a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs index a5dc0ad0d0..0fb0b15cf5 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs @@ -238,8 +238,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Concierge { // replacing ChatModule: need to redistribute // ChatFromClient to interested subscribers - c = FixPositionOfChatMessage(c); - Scene scene = (Scene)c.Scene; scene.EventManager.TriggerOnChatFromClient(sender, c); diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 146885e2eb..22efe75039 100755 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs @@ -261,19 +261,17 @@ namespace OpenSim.Region.OptionalModules.World.NPC if(OnChatFromClient == null) return; - if (channel == 0) - { - message = message.Trim(); - if (string.IsNullOrEmpty(message)) - return; - } + message = message.Trim(); + if (channel == 0 && message.Length == 0) + return; OSChatMessage chatFromClient = new OSChatMessage() { Channel = channel, From = Name, Message = message, - Position = StartPos, + //Position = StartPos, + Position = this.Position, Scene = m_scene, Sender = this, SenderUUID = AgentId,