mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 17:05:55 +08:00
a few changes on chat and dialog from udp/client
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user