a few changes on chat and dialog from udp/client

This commit is contained in:
UbitUmarov
2022-06-19 16:03:38 +01:00
parent 2d1e5eb5ac
commit 9af568307e
5 changed files with 57 additions and 64 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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)

View File

@@ -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);

View File

@@ -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,