示例#1
0
        public override void OnGrabPart(SceneObjectPart part, Vector3 offsetPos, IClientAPI remoteClient)
        {
            m_parts.Remove(part.UUID);

            remoteClient.SendKillObject(m_regionHandle, part.LocalId);
            remoteClient.AddMoney(1);
            remoteClient.SendChatMessage("Poof!", 1, AbsolutePosition, "Party Party", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully);
        }
示例#2
0
        private void SendSystemChat(IClientAPI client, string format, params Object[] args)
        {
            Vector3 GodPos = new Vector3(128.0f, 128.0f, 128.0f);
            string  msg    = String.Format(format, args);

            ((Scene)client.Scene).EventManager.TriggerOnChatToClient(msg, UUID.Zero,
                                                                     client.AgentId, client.Scene.RegionInfo.RegionID, (uint)Util.UnixTimeSinceEpoch(),
                                                                     ChatToClientType.InworldChat);
            client.SendChatMessage(msg, (byte)ChatTypeEnum.Say, GodPos, "System", UUID.Zero, UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
        }
示例#3
0
        private void SendClientChat(IClientAPI client, string format, params Object[] args)
        {
            Vector3 Pos = new Vector3(128.0f, 128.0f, 128.0f);  // close enough, we're sending to the viewer no matter what
            string  msg = String.Format(format, args);

            ((Scene)client.Scene).EventManager.TriggerOnChatToClient(msg, UUID.Zero,
                                                                     client.AgentId, client.Scene.RegionInfo.RegionID, (uint)Util.UnixTimeSinceEpoch(),
                                                                     ChatToClientType.InworldChat);
            client.SendChatMessage(msg, (byte)ChatTypeEnum.Say, Pos, client.Name, UUID.Zero, UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
        }
        public void OnNewClient(IClientAPI client)
        {
            IScenePresence SP = client.Scene.GetScenePresence(client.AgentId);

            //If chat is not blocked for now, add to the not blocked list
            if (!m_blockChat)
            {
                if (!m_authorizedSpeakers.Contains(client.AgentId))
                {
                    m_authorizedSpeakers.Add(client.AgentId);
                }
            }
            if (!SP.IsChildAgent)
            {
                //Tell all the clients about the incoming client if it is enabled
                if (m_announceNewAgents)
                {
                    client.Scene.ForEachScenePresence(delegate(IScenePresence presence) {
                        if (presence.UUID != client.AgentId && !presence.IsChildAgent)
                        {
                            IEntityCountModule entityCountModule = client.Scene.RequestModuleInterface <IEntityCountModule> ();
                            if (entityCountModule != null)
                            {
                                presence.ControllingClient.SendChatMessage(
                                    client.Name + " has joined the region. Total Agents: " + (entityCountModule.RootAgents + 1),
                                    1,
                                    SP.AbsolutePosition,
                                    "System",
                                    UUID.Zero,
                                    (byte)ChatSourceType.System,
                                    (byte)ChatAudibleLevel.Fully
                                    );
                            }
                        }
                    }
                                                      );
                }

                //Send the new user a welcome message
                if (m_useWelcomeMessage)
                {
                    if (m_welcomeMessage != "")
                    {
                        client.SendChatMessage(
                            m_welcomeMessage,
                            1, SP.AbsolutePosition,
                            "System",
                            UUID.Zero,
                            (byte)ChatSourceType.System,
                            (byte)ChatAudibleLevel.Fully
                            );
                    }
                }
            }
        }
示例#5
0
 public override void OnGrabGroup(Vector3 offsetPos, IClientAPI remoteClient)
 {
     if (m_parts.Count == 1)
     {
         m_parts.Remove(m_rootPart.UUID);
         m_scene.DeleteSceneObject(this, false);
         remoteClient.SendKillObject(m_regionHandle, m_rootPart.LocalId);
         remoteClient.AddMoney(50);
         remoteClient.SendChatMessage("KABLAM!!!", 1, AbsolutePosition, "Groupie Groupie", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully);
     }
 }
示例#6
0
            /**
             * @Brief Message from client to chat or IM.
             *
             *        All we do is tag the message with the client's language code
             *        by putting [[[lc]]] on the front.  But if the message already
             *        has [[[lc]]] on the front, validate then leave it as is.
             *
             *        WhatevToClient() will strip the tag off and use it to determine
             *        if the message needs to be translated or not when passing it
             *        back out to the other client.
             */
            public void ClientToWhatev(ITranslatorFinished finished, string message, int channel)
            {
                // don't tag messages headed for scripts
                // they're probably something like a button from a menu
                if (channel == PUBLIC_CHANNEL)
                {
                    // if user typed message with a [[[lc]]] prefix,
                    // validate and convert to lower-case 2-letter code
                    int i = message.IndexOf("[[[");
                    int j = message.IndexOf("]]]");
                    if ((i == 0) && (j > 0))
                    {
                        string given = message.Substring(3, j - 3).Trim();
                        if (given != NOTRANSLATE)
                        {
                            string lclo = CheckLangCode(given);
                            if (lclo == null)
                            {
                                client.SendChatMessage("unknown language code " + given,
                                                       (byte)ChatTypeEnum.Owner, Vector3.Zero, "Translator", UUID.Zero,
                                                       UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
                                message = null;  // don't pass bad message to sim
                            }
                            else
                            {
                                message = "[[[" + lclo + message.Substring(j);
                            }
                        }
                    }
                    else
                    {
                        // user didn't give an explicit [[[lc]]] prefix,
                        // use the client's langcode setting to tag message
                        message = "[[[" + langcode + "]]]" + message;
                    }
                }

                finished(message);
            }
        public void OnNewClient(IClientAPI client)
        {
            ScenePresence SP = ((Scene)client.Scene).GetScenePresence(client.AgentId);
            if (!SP.IsChildAgent)
            {
                //If chat is not blocked for now, add to the not blocked list
                if (!m_blockChat)
                {
                    if (!m_authorizedSpeakers.Contains(client.AgentId))
                        m_authorizedSpeakers.Add(client.AgentId);
                }

                //Tell all the clients about the incoming client if it is enabled
                if (m_announceNewAgents)
                {
                    ((Scene)client.Scene).ForEachScenePresence(delegate(ScenePresence presence)
                    {
                        if (presence.UUID != client.AgentId && !presence.IsChildAgent)
                        {
                            IEntityCountModule entityCountModule = client.Scene.RequestModuleInterface<IEntityCountModule>();
                            if (entityCountModule != null)
                                presence.ControllingClient.SendChatMessage(client.Name + " has joined the region. Total Agents: " + (entityCountModule.RootAgents + 1), 1, SP.AbsolutePosition, "System",
                                                               UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
                        }
                    }
                    );
                }

                //Send the new user a welcome message
                if (m_useWelcomeMessage)
                {
                    if (m_welcomeMessage != "")
                    {
                        client.SendChatMessage(m_welcomeMessage, 1, SP.AbsolutePosition, "System",
                                                       UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
                    }
                }
            }
        }
示例#8
0
        public virtual void OnChatBroadcast(Object sender, OSChatMessage c)
        {
            // unless the chat to be broadcast is of type Region, we
            // drop it if its channel is neither 0 nor DEBUG_CHANNEL
            if (c.Channel != 0 && c.Channel != DEBUG_CHANNEL && c.Type != ChatTypeEnum.Region)
            {
                return;
            }

            ChatTypeEnum cType = c.Type;

            if (c.Channel == DEBUG_CHANNEL)
            {
                cType = ChatTypeEnum.DebugChannel;
            }

            if (cType == ChatTypeEnum.Region)
            {
                cType = ChatTypeEnum.Say;
            }

            if (c.Message.Length > 1100)
            {
                c.Message = c.Message.Substring(0, 1000);
            }

            // broadcast chat works by redistributing every incoming chat
            // message to each avatar in the scene.
            string fromName = c.From;

            UUID           fromID     = UUID.Zero;
            UUID           ownerID    = UUID.Zero;
            ChatSourceType sourceType = ChatSourceType.Object;

            if (null != c.Sender)
            {
                ScenePresence avatar = (c.Scene as Scene).GetScenePresence(c.Sender.AgentId);
                fromID     = c.Sender.AgentId;
                fromName   = avatar.Name;
                ownerID    = c.Sender.AgentId;
                sourceType = ChatSourceType.Agent;
            }
            else if (c.SenderUUID != UUID.Zero)
            {
                fromID  = c.SenderUUID;
                ownerID = ((SceneObjectPart)c.SenderObject).OwnerID;
            }

            // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType);

            ((Scene)c.Scene).ForEachScenePresence(
                delegate(ScenePresence presence)
            {
                // ignore chat from child agents
                if (presence.IsChildAgent)
                {
                    return;
                }

                IClientAPI client = presence.ControllingClient;

                // don't forward SayOwner chat from objects to
                // non-owner agents
                if ((c.Type == ChatTypeEnum.Owner) &&
                    (null != c.SenderObject) &&
                    (((SceneObjectPart)c.SenderObject).OwnerID != client.AgentId))
                {
                    return;
                }

                presence.Scene.EventManager.TriggerOnChatToClient(c.Message, fromID,
                                                                  client.AgentId, presence.Scene.RegionInfo.RegionID, (uint)Util.UnixTimeSinceEpoch(),
                                                                  ChatToClientType.InworldChat);

                client.SendChatMessage(c.Message, (byte)cType, CenterOfRegion, fromName, fromID, ownerID,
                                       (byte)sourceType, (byte)ChatAudibleLevel.Fully);
            });
        }
        public void OnNewClient(IClientAPI client)
        {
            ScenePresence SP = ((Scene)client.Scene).GetScenePresence(client.AgentId);
            if (!SP.IsChildAgent)
            {
                if (!m_blockChat)
                {
                    if (!m_authorizedSpeakers.Contains(client.AgentId))
                        m_authorizedSpeakers.Add(client.AgentId);
                }
                int AgentCount = 0;
                lock (RegionAgentCount)
                {
                    RegionAgentCount.TryGetValue(client.Scene.RegionInfo.RegionID, out AgentCount);
                    AgentCount++;
                    RegionAgentCount[client.Scene.RegionInfo.RegionID] = AgentCount;
                }

                if (m_announceNewAgents)
                {
                    ((Scene)client.Scene).ForEachScenePresence(delegate(ScenePresence presence)
                    {
                        if (presence.UUID != client.AgentId && !presence.IsChildAgent)
                        {
                            presence.ControllingClient.SendChatMessage(client.Name + " has joined the region. Total Agents: " + AgentCount, 1, SP.AbsolutePosition, "System",
                                                               UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
                        }
                    }
                    );
                }

                if (m_useWelcomeMessage)
                {
                    if (m_welcomeMessage != "")
                    {
                        client.SendChatMessage(m_welcomeMessage, 1, SP.AbsolutePosition, "System",
                                                       UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
                    }
                }
            }
        }
示例#10
0
 private void SendSystemChat(IClientAPI client, string format, params Object[] args)
 {
     Vector3 GodPos = new Vector3(128.0f, 128.0f, 128.0f);
     string msg = String.Format(format, args);
     ((Scene)client.Scene).EventManager.TriggerOnChatToClient(msg, UUID.Zero,
         client.AgentId, client.Scene.RegionInfo.RegionID, (uint)Util.UnixTimeSinceEpoch(),
         ChatToClientType.InworldChat);
     client.SendChatMessage(msg, (byte)ChatTypeEnum.Say, GodPos, "System", UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
 }
示例#11
0
        public virtual void OnChatBroadcast(Object sender, OSChatMessage c)
        {
            if (c.Channel != 0 && c.Channel != DEBUG_CHANNEL)
            {
                return;
            }

            ChatTypeEnum cType = c.Type;

            if (c.Channel == DEBUG_CHANNEL)
            {
                cType = ChatTypeEnum.DebugChannel;
            }

            if (cType == ChatTypeEnum.Region)
            {
                cType = ChatTypeEnum.Say;
            }

            if (c.Message.Length > 1100)
            {
                c.Message = c.Message.Substring(0, 1000);
            }

            // broadcast chat works by redistributing every incoming chat
            // message to each avatar in the scene.
            string fromName = c.From;

            UUID           fromID     = UUID.Zero;
            ChatSourceType sourceType = ChatSourceType.Object;

            if (null != c.Sender)
            {
                ScenePresence avatar = (c.Scene as Scene).GetScenePresence(c.Sender.AgentId);
                fromID     = c.Sender.AgentId;
                fromName   = avatar.Name;
                sourceType = ChatSourceType.Agent;
            }
            else if (c.SenderUUID != UUID.Zero)
            {
                fromID = c.SenderUUID;
            }

            // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType);

            HashSet <UUID> receiverIDs = new HashSet <UUID>();

            ((Scene)c.Scene).ForEachScenePresence(
                delegate(ScenePresence presence)
            {
                // ignore chat from child agents
                if (presence.IsChildAgent)
                {
                    return;
                }

                IClientAPI client = presence.ControllingClient;

                // don't forward SayOwner chat from objects to
                // non-owner agents
                if ((c.Type == ChatTypeEnum.Owner) &&
                    (null != c.SenderObject) &&
                    (((SceneObjectPart)c.SenderObject).OwnerID != client.AgentId))
                {
                    return;
                }

                client.SendChatMessage(c.Message, (byte)cType, CenterOfRegion, fromName, fromID,
                                       (byte)sourceType, (byte)ChatAudibleLevel.Fully);
                receiverIDs.Add(presence.UUID);
            });

            (c.Scene as Scene).EventManager.TriggerOnChatToClients(
                fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully);
        }
示例#12
0
        protected virtual void OnChatBroadcast(Object sender, OSChatMessage c)
        {
            // unless the chat to be broadcast is of type Region, we
            // drop it if its channel is neither 0 nor DEBUG_CHANNEL
            if (c.Channel != DEFAULT_CHANNEL && c.Channel != DEBUG_CHANNEL && c.Type != ChatTypeEnum.Region)
            {
                return;
            }

            ChatTypeEnum cType = c.Type;

            if (c.Channel == DEBUG_CHANNEL)
            {
                cType = ChatTypeEnum.DebugChannel;
            }

            if (c.Range > m_maxChatDistance)
            {
                c.Range = m_maxChatDistance;
            }

            if (cType == ChatTypeEnum.SayTo)
            {
                //Change to something client can understand as SayTo doesn't exist except on the server
                cType = ChatTypeEnum.Owner;
            }

            if (cType == ChatTypeEnum.Region)
            {
                cType = ChatTypeEnum.Say;
            }

            if (c.Message.Length > 1100)
            {
                c.Message = c.Message.Substring(0, 1000);
            }

            // broadcast chat works by redistributing every incoming chat
            // message to each avatar in the scene.
            string fromName = c.From;

            UUID           fromID     = UUID.Zero;
            ChatSourceType sourceType = ChatSourceType.Object;

            if (null != c.Sender)
            {
                IScenePresence avatar = c.Scene.GetScenePresence(c.Sender.AgentId);
                fromID     = c.Sender.AgentId;
                fromName   = avatar.Name;
                sourceType = ChatSourceType.Agent;
            }

            // MainConsole.Instance.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType);

            c.Scene.ForEachScenePresence(
                delegate(IScenePresence presence)
            {
                // ignore chat from child agents
                if (presence.IsChildAgent)
                {
                    return;
                }

                IClientAPI client = presence.ControllingClient;

                // don't forward SayOwner chat from objects to
                // non-owner agents
                if ((c.Type == ChatTypeEnum.Owner) &&
                    (null != c.SenderObject) &&
                    (c.SenderObject.OwnerID != client.AgentId))
                {
                    return;
                }

                // don't forward SayTo chat from objects to
                // non-targeted agents
                if ((c.Type == ChatTypeEnum.SayTo) &&
                    (c.ToAgentID != client.AgentId))
                {
                    return;
                }
                bool cached      = false;
                MuteList[] mutes = GetMutes(client.AgentId, out cached);
                foreach (MuteList m in mutes)
                {
                    if (m.MuteID == c.SenderUUID ||
                        (c.SenderObject != null && m.MuteID == c.SenderObject.ParentEntity.UUID))
                    {
                        return;
                    }
                }
                client.SendChatMessage(c.Message, (byte)cType,
                                       new Vector3(client.Scene.RegionInfo.RegionSizeX * 0.5f,
                                                   client.Scene.RegionInfo.RegionSizeY * 0.5f, 30), fromName,
                                       fromID,
                                       (byte)sourceType, (byte)ChatAudibleLevel.Fully);
            });
        }
示例#13
0
        private Hashtable userInteract(Hashtable requestData)
        {
            Hashtable rparms = new Hashtable();

            try
            {
                UUID   receiverUUID = UUID.Parse((string)requestData["receiverUUID"]);
                Int32  type         = Int32.Parse((string)requestData["type"]);
                String payloadID    = (string)requestData["payloadID"];

                Dictionary <string, string> d = new Dictionary <string, string>();
                d.Add("method", "getNotificationMessage");
                d.Add("payloadID", payloadID);

                Dictionary <string, string> messageItems = CommunicationHelpers.DoRequest(gatewayURL, d);
                if (messageItems == null)
                {
                    throw new Exception("Could not fetch payload with ID " + payloadID);
                }

                m_log.Debug("[OMECONOMY] userInteract*:");
                foreach (KeyValuePair <string, string> pair in messageItems)
                {
                    m_log.Debug("[OMECONOMY]    " + pair.Key + "  " + pair.Value);
                }

                IClientAPI client = SceneHandler.Instance.LocateClientObject(receiverUUID);
                if (client == null)
                {
                    throw new Exception("Could not locate the specified avatar");
                }

                Scene userScene = SceneHandler.Instance.GetSceneByUUID(client.Scene.RegionInfo.originRegionID);
                if (userScene == null)
                {
                    throw new Exception("Could not locate the specified scene");
                }

                String message = messageItems["message"];

                UUID          senderUUID = UUID.Zero;
                String        senderName = String.Empty;
                IDialogModule dm         = null;
                IClientAPI    sender     = null;

                IUserManagement userManager = SceneHandler.Instance.GetRandomScene().RequestModuleInterface <IUserManagement>();
                if (userManager == null)
                {
                    throw new Exception("Could not locate UserMangement Interface");
                }

                switch (type)
                {
                case (int)NotificationType.LOAD_URL:
                    String url = messageItems["url"];

                    dm = userScene.RequestModuleInterface <IDialogModule>();
                    dm.SendUrlToUser(receiverUUID, "OMEconomy", UUID.Zero, UUID.Zero, false, message, url);
                    break;

                case (int)NotificationType.CHAT_MESSAGE:
                    senderUUID = UUID.Parse(messageItems["senderUUID"]);
                    senderName = userManager.GetUserName(senderUUID);


                    client.SendChatMessage(
                        message, (byte)ChatTypeEnum.Say, Vector3.Zero, senderName,
                        senderUUID, senderUUID, (byte)ChatSourceType.Agent, (byte)ChatAudibleLevel.Fully);

                    sender = SceneHandler.Instance.LocateClientObject(senderUUID);
                    if (sender != null)
                    {
                        sender.SendChatMessage(
                            message, (byte)ChatTypeEnum.Say, Vector3.Zero, senderName,
                            senderUUID, senderUUID, (byte)ChatSourceType.Agent, (byte)ChatAudibleLevel.Fully);
                    }
                    break;

                case (int)NotificationType.ALERT:
                    dm = userScene.RequestModuleInterface <IDialogModule>();
                    dm.SendAlertToUser(receiverUUID, message);
                    break;

                case (int)NotificationType.DIALOG:
                    client.SendBlueBoxMessage(UUID.Zero, "", message);
                    break;

                case (int)NotificationType.GIVE_NOTECARD:
                    break;

                case (int)NotificationType.INSTANT_MESSAGE:
                    senderUUID = UUID.Parse(messageItems["senderUUID"]);
                    UUID sessionUUID = UUID.Parse(messageItems["sessionUUID"]);
                    if (messageItems.ContainsKey("senderName"))
                    {
                        senderName = messageItems["senderName"];
                    }
                    else
                    {
                        senderName = userManager.GetUserName(UUID.Parse((string)messageItems["senderUUID"]));
                    }

                    GridInstantMessage msg = new GridInstantMessage();
                    msg.fromAgentID    = senderUUID.Guid;
                    msg.toAgentID      = receiverUUID.Guid;
                    msg.imSessionID    = sessionUUID.Guid;
                    msg.fromAgentName  = senderName;
                    msg.message        = (message != null && message.Length > 1024) ? msg.message = message.Substring(0, 1024) : message;
                    msg.dialog         = (byte)InstantMessageDialog.MessageFromAgent;
                    msg.fromGroup      = false;
                    msg.offline        = (byte)0;
                    msg.ParentEstateID = 0;
                    msg.Position       = Vector3.Zero;
                    msg.RegionID       = userScene.RegionInfo.RegionID.Guid;


                    client.SendInstantMessage(msg);

                    sender = SceneHandler.Instance.LocateClientObject(senderUUID);
                    if (sender != null)
                    {
                        sender.SendInstantMessage(msg);
                    }
                    break;

                default:
                    break;
                }

                rparms["success"] = true;
            }
            catch (Exception e)
            {
                m_log.ErrorFormat("[OMECONOMY]: userInteract() Exception: {1} - {2}", Name, e.Message, e.StackTrace);
                rparms["success"] = false;
            }
            return(rparms);
        }
示例#14
0
 public override void OnGrabGroup(Vector3 offsetPos, IClientAPI remoteClient)
 {
     if (m_parts.Count == 1)
     {
         m_parts.Remove(m_rootPart.UUID);
         m_scene.DeleteSceneObject(this, false);
         remoteClient.SendKillObject(m_regionHandle, m_rootPart.LocalId);
         remoteClient.AddMoney(50);
         remoteClient.SendChatMessage("KABLAM!!!", 1, AbsolutePosition, "Groupie Groupie", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully);
     }
 }
示例#15
0
        public override void OnGrabPart(SceneObjectPart part, Vector3 offsetPos, IClientAPI remoteClient)
        {
            m_parts.Remove(part.UUID);

            remoteClient.SendKillObject(m_regionHandle, part.LocalId);
            remoteClient.AddMoney(1);
            remoteClient.SendChatMessage("Poof!", 1, AbsolutePosition, "Party Party", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully);
        }
示例#16
0
 private void SendClientChat(IClientAPI client, string format, params Object[] args)
 {
     Vector3 Pos = new Vector3(128.0f, 128.0f, 128.0f);  // close enough, we're sending to the viewer no matter what
     string msg = String.Format(format, args);
     ((Scene)client.Scene).EventManager.TriggerOnChatToClient(msg, UUID.Zero,
         client.AgentId, client.Scene.RegionInfo.RegionID, (uint)Util.UnixTimeSinceEpoch(),
         ChatToClientType.InworldChat);
     client.SendChatMessage(msg, (byte)ChatTypeEnum.Say, Pos, client.Name, UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
 }
        public void OnNewClient(IClientAPI client)
        {
            ScenePresence SP = ((Scene)client.Scene).GetScenePresence(client.AgentId);
            if (!SP.IsChildAgent)
            {
                //If chat is not blocked for now, add to the not blocked list
                if (!m_blockChat)
                {
                    if (!m_authorizedSpeakers.Contains(client.AgentId))
                        m_authorizedSpeakers.Add(client.AgentId);
                }
                //Update how many users are in the region
                int AgentCount = 0;
                lock (RegionAgentCount)
                {
                    RegionAgentCount.TryGetValue(client.Scene.RegionInfo.RegionID, out AgentCount);
                    AgentCount++;
                    RegionAgentCount[client.Scene.RegionInfo.RegionID] = AgentCount;
                }

                //Tell all the clients about the incoming client if it is enabled
                if (m_announceNewAgents)
                {
                    ((Scene)client.Scene).ForEachScenePresence(delegate(ScenePresence presence)
                    {
                        if (presence.UUID != client.AgentId && !presence.IsChildAgent)
                        {
                            presence.ControllingClient.SendChatMessage(client.Name + " has joined the region. Total Agents: " + AgentCount, 1, SP.AbsolutePosition, "System",
                                                               UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
                        }
                    }
                    );
                }

                //Send the new user a welcome message
                if (m_useWelcomeMessage)
                {
                    if (m_welcomeMessage != "")
                    {
                        client.SendChatMessage(m_welcomeMessage, 1, SP.AbsolutePosition, "System",
                                                       UUID.Zero, (byte)ChatSourceType.System, (byte)ChatAudibleLevel.Fully);
                    }
                }
            }
        }