Inheritance: IClientAPI, INPC
示例#1
0
        void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            lock (p_lock)
            {
                if (p_inUse)
                {
                    p_inUse = false;

                    NPCAvatar npcAvatar = new NPCAvatar(p_firstname, p_lastname, p_position, p_scene);
                    npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0, int.MaxValue);

                    p_scene.AddNewClient(npcAvatar);

                    ScenePresence sp;
                    if (p_scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                    {
                        AvatarAppearance x = GetAppearance(p_cloneAppearanceFrom, p_scene);

                        sp.Appearance.SetTextureEntries(x.Texture);
                        sp.Appearance.SetVisualParams((byte[])x.VisualParams.Clone());
                        sp.SendAppearanceToAllOtherAgents();
                    }

                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);

                    p_returnUuid = npcAvatar.AgentId;
                }
            }
        }
示例#2
0
        public UUID CreateNPC(
            string firstname,
            string lastname,
            Vector3 position,
            UUID owner,
            bool senseAsAgent,
            Scene scene,
            AvatarAppearance appearance)
        {
            NPCAvatar npcAvatar = new NPCAvatar(firstname, lastname, position, owner, senseAsAgent, scene);

            npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0, int.MaxValue);

            m_log.DebugFormat(
                "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
                firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData();

            acd.AgentID     = npcAvatar.AgentId;
            acd.firstname   = firstname;
            acd.lastname    = lastname;
            acd.ServiceURLs = new Dictionary <string, object>();

            AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);

            acd.Appearance = npcAppearance;

//            for (int i = 0; i < acd.Appearance.Texture.FaceTextures.Length; i++)
//            {
//                m_log.DebugFormat(
//                    "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
//                    acd.AgentID, i, acd.Appearance.Texture.FaceTextures[i]);
//            }

            lock (m_avatars)
            {
                scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
                scene.AddNewClient(npcAvatar, PresenceType.Npc);

                ScenePresence sp;
                if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                {
//                    m_log.DebugFormat(
//                        "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);

                    sp.CompleteMovement(npcAvatar, false);
                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);
                    m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);

                    return(npcAvatar.AgentId);
                }
                else
                {
                    m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
                    return(UUID.Zero);
                }
            }
        }
示例#3
0
        public UUID CreateNPC(string firstname, string lastname, Vector3 position, Scene scene, UUID cloneAppearanceFrom)
        {
            NPCAvatar npcAvatar = new NPCAvatar(firstname, lastname, position, scene);
            npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0, int.MaxValue);

            m_log.DebugFormat(
                "[NPC MODULE]: Creating NPC {0} {1} {2} at {3} in {4}",
                firstname, lastname, npcAvatar.AgentId, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData();
            acd.AgentID = npcAvatar.AgentId;
            acd.firstname = firstname;
            acd.lastname = lastname;
            acd.ServiceURLs = new Dictionary<string, object>();

            AvatarAppearance originalAppearance = GetAppearance(cloneAppearanceFrom, scene);
            AvatarAppearance npcAppearance = new AvatarAppearance(originalAppearance, true);
            acd.Appearance = npcAppearance;

            scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
            scene.AddNewClient(npcAvatar);

            ScenePresence sp;
            if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
            {
                m_log.DebugFormat(
                    "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);

                // Shouldn't call this - temporary.
                sp.CompleteMovement(npcAvatar);

//                        sp.SendAppearanceToAllOtherAgents();
//
//                        // Send animations back to the avatar as well
//                        sp.Animator.SendAnimPack();
            }
            else
            {
                m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
            }

            lock (m_avatars)
                m_avatars.Add(npcAvatar.AgentId, npcAvatar);

            m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);

            return npcAvatar.AgentId;
        }
示例#4
0
 /// <summary>
 /// Check if the caller has permission to manipulate the given NPC.
 /// </summary>
 /// <remarks>
 /// A caller has permission if
 ///   * The caller UUID given is UUID.Zero.
 ///   * The avatar is unowned (owner is UUID.Zero).
 ///   * The avatar is owned and the owner and callerID match.
 ///   * The avatar is owned and the callerID matches its agentID.
 /// </remarks>
 /// <param name="av"></param>
 /// <param name="callerID"></param>
 /// <returns>true if they do, false if they don't.</returns>
 private bool CheckPermissions(NPCAvatar av, UUID callerID)
 {
     return(callerID == UUID.Zero || av.OwnerID == UUID.Zero ||
            av.OwnerID == callerID || av.AgentId == callerID);
 }
示例#5
0
        public UUID CreateNPC(string firstname, string lastname,
                              Vector3 position, UUID agentID, UUID owner, bool senseAsAgent, Scene scene,
                              AvatarAppearance appearance)
        {
            NPCAvatar npcAvatar = null;

            try
            {
                if (agentID == UUID.Zero)
                {
                    npcAvatar = new NPCAvatar(firstname, lastname, position,
                                              owner, senseAsAgent, scene);
                }
                else
                {
                    npcAvatar = new NPCAvatar(firstname, lastname, agentID, position,
                                              owner, senseAsAgent, scene);
                }
            }
            catch (Exception e)
            {
                m_log.Info("[NPC MODULE]: exception creating NPC avatar: " + e.ToString());
                return(UUID.Zero);
            }

            npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0,
                                                                int.MaxValue);

//            m_log.DebugFormat(
//                "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
//                firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData();

            acd.AgentID     = npcAvatar.AgentId;
            acd.firstname   = firstname;
            acd.lastname    = lastname;
            acd.ServiceURLs = new Dictionary <string, object>();

            AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);

            acd.Appearance = npcAppearance;

            /*
             * for (int i = 0;
             *      i < acd.Appearance.Texture.FaceTextures.Length; i++)
             * {
             *  m_log.DebugFormat(
             *          "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
             *          acd.AgentID, i,
             *          acd.Appearance.Texture.FaceTextures[i]);
             * }
             */

//            ManualResetEvent ev = new ManualResetEvent(false);

//            Util.FireAndForget(delegate(object x) {
            lock (m_avatars)
            {
                scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
                scene.AddNewAgent(npcAvatar, PresenceType.Npc);

                ScenePresence sp;
                if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                {
                    sp.CompleteMovement(npcAvatar, false);
                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);
//                        m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name);
                }
            }
//                ev.Set();
//            });

//            ev.WaitOne();

//            m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);

            return(npcAvatar.AgentId);
        }
示例#6
0
 /// <summary>
 /// Check if the caller has permission to manipulate the given NPC.
 /// </summary>
 /// <param name="av"></param>
 /// <param name="callerID"></param>
 /// <returns>true if they do, false if they don't.</returns>
 private bool CheckPermissions(NPCAvatar av, UUID callerID)
 {
     return callerID == UUID.Zero || av.OwnerID == UUID.Zero || av.OwnerID == callerID;
 }
示例#7
0
        public UUID CreateNPC(
            string firstname,
            string lastname,
            Vector3 position,
            UUID owner,
            bool senseAsAgent,
            Scene scene,
            AvatarAppearance appearance)
        {
            NPCAvatar npcAvatar = new NPCAvatar(firstname, lastname, position, owner, senseAsAgent, scene);
            npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0, int.MaxValue);

            m_log.DebugFormat(
                "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
                firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData();
            acd.AgentID = npcAvatar.AgentId;
            acd.firstname = firstname;
            acd.lastname = lastname;
            acd.ServiceURLs = new Dictionary<string, object>();

            AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);
            acd.Appearance = npcAppearance;

//            for (int i = 0; i < acd.Appearance.Texture.FaceTextures.Length; i++)
//            {
//                m_log.DebugFormat(
//                    "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
//                    acd.AgentID, i, acd.Appearance.Texture.FaceTextures[i]);
//            }

            lock (m_avatars)
            {
                scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
                scene.AddNewClient(npcAvatar, PresenceType.Npc);

                ScenePresence sp;
                if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                {
//                    m_log.DebugFormat(
//                        "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);

                    sp.CompleteMovement(npcAvatar, false);
                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);
                    m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);

                    return npcAvatar.AgentId;
                }
                else
                {
                    m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
                    return UUID.Zero;
                }
            }
        }
示例#8
0
        void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            lock (p_lock)
            {
                if (p_inUse)
                {
                    p_inUse = false;

                    NPCAvatar npcAvatar = new NPCAvatar(p_firstname, p_lastname, p_position, p_scene);
                    npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue);

                    p_scene.AddNewClient(npcAvatar);

                    ScenePresence sp;
                    if (p_scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                    {
                        AvatarAppearance x = GetAppearance(p_cloneAppearanceFrom, p_scene);

                        sp.SetAppearance(x.Texture, (byte[])x.VisualParams.Clone());
                    }

                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);

                    p_returnUuid = npcAvatar.AgentId;
                }
            }
        }
示例#9
0
        public UUID CreateNPC(string firstname, string lastname,
                              Vector3 position, UUID agentID, UUID owner, string groupTitle, UUID groupID, bool senseAsAgent, Scene scene,
                              AvatarAppearance appearance)
        {
            NPCAvatar npcAvatar = null;
            string    born      = DateTime.UtcNow.ToString();

            try
            {
                if (agentID == UUID.Zero)
                {
                    npcAvatar = new NPCAvatar(firstname, lastname, position,
                                              owner, senseAsAgent, scene);
                }
                else
                {
                    npcAvatar = new NPCAvatar(firstname, lastname, agentID, position,
                                              owner, senseAsAgent, scene);
                }
            }
            catch (Exception e)
            {
                m_log.Info("[NPC MODULE]: exception creating NPC avatar: " + e.ToString());
                return(UUID.Zero);
            }

            agentID = npcAvatar.AgentId;
            uint circuit = (uint)Util.RandomClass.Next(0, int.MaxValue);

            npcAvatar.CircuitCode = circuit;

            //m_log.DebugFormat(
            //    "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
            //    firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData()
            {
                circuitcode = circuit,
                AgentID     = agentID,
                firstname   = firstname,
                lastname    = lastname,
                ServiceURLs = new Dictionary <string, object>(),
                Appearance  = new AvatarAppearance(appearance, true)
            };

            lock (m_avatars)
            {
                scene.AuthenticateHandler.AddNewCircuit(acd);
                scene.AddNewAgent(npcAvatar, PresenceType.Npc);

                if (scene.TryGetScenePresence(agentID, out ScenePresence sp))
                {
                    npcAvatar.Born          = born;
                    npcAvatar.ActiveGroupId = groupID;
                    sp.CompleteMovement(npcAvatar, false);
                    sp.Grouptitle = groupTitle;
                    m_avatars.Add(agentID, npcAvatar);
                    //m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name);
                }
            }

//            m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);

            return(agentID);
        }
示例#10
0
        public UUID CreateNPC(string firstname, string lastname,
                              Vector3 position, UUID agentID, UUID owner, bool senseAsAgent, Scene scene,
                              AvatarAppearance appearance)
        {
            NPCAvatar npcAvatar = null;

            try
            {
                if (agentID == UUID.Zero)
                {
                    npcAvatar = new NPCAvatar(firstname, lastname, position,
                                              owner, senseAsAgent, scene);
                }
                else
                {
                    npcAvatar = new NPCAvatar(firstname, lastname, agentID, position,
                                              owner, senseAsAgent, scene);
                }
            }
            catch (Exception e)
            {
                m_log.Info("[NPC MODULE]: exception creating NPC avatar: " + e.ToString());
                return(UUID.Zero);
            }

            npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0,
                                                                int.MaxValue);

            m_log.DebugFormat(
                "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
                firstname, lastname, npcAvatar.AgentId, owner,
                senseAsAgent, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData();

            acd.AgentID     = npcAvatar.AgentId;
            acd.firstname   = firstname;
            acd.lastname    = lastname;
            acd.ServiceURLs = new Dictionary <string, object>();

            AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);

            acd.Appearance = npcAppearance;

            /*
             * for (int i = 0;
             *      i < acd.Appearance.Texture.FaceTextures.Length; i++)
             * {
             *  m_log.DebugFormat(
             *          "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
             *          acd.AgentID, i,
             *          acd.Appearance.Texture.FaceTextures[i]);
             * }
             */

            m_avatarsRwLock.AcquireWriterLock(-1);
            try
            {
                scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode,
                                                        acd);
                scene.AddNewAgent(npcAvatar, PresenceType.Npc);

                ScenePresence sp;
                if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                {
                    /*
                     * m_log.DebugFormat(
                     *      "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}",
                     *      sp.Name, sp.UUID);
                     */

                    sp.CompleteMovement(npcAvatar, false);
                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);
                    m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name);

                    return(npcAvatar.AgentId);
                }
                else
                {
                    m_log.WarnFormat(
                        "[NPC MODULE]: Could not find scene presence for NPC {0} {1}",
                        sp.Name, sp.UUID);

                    return(UUID.Zero);
                }
            }
            finally
            {
                m_avatarsRwLock.ReleaseWriterLock();
            }
        }
示例#11
0
        public UUID CreateNPC(string firstname, string lastname,
                              Vector3 position, UUID owner, bool senseAsAgent, Scene scene,
                              AvatarAppearance appearance)
        {
            NPCAvatar npcAvatar = new NPCAvatar(firstname, lastname, position,
                                                owner, senseAsAgent, scene);

            npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0,
                                                                int.MaxValue);

            m_log.DebugFormat(
                "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
                firstname, lastname, npcAvatar.AgentId, owner,
                senseAsAgent, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData();

            acd.AgentID     = npcAvatar.AgentId;
            acd.firstname   = firstname;
            acd.lastname    = lastname;
            acd.ServiceURLs = new Dictionary <string, object>();

            AvatarAppearance npcAppearance = new AvatarAppearance(appearance,
                                                                  true);

            acd.Appearance = npcAppearance;

            /*
             * for (int i = 0;
             *      i < acd.Appearance.Texture.FaceTextures.Length; i++)
             * {
             *  m_log.DebugFormat(
             *          "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
             *          acd.AgentID, i,
             *          acd.Appearance.Texture.FaceTextures[i]);
             * }
             */

            lock (m_avatars)
            {
                scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode,
                                                        acd);
                scene.AddNewClient(npcAvatar, PresenceType.Npc);

                ScenePresence sp;
                if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                {
                    /*
                     * m_log.DebugFormat(
                     *      "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}",
                     *      sp.Name, sp.UUID);
                     */

                    sp.CompleteMovement(npcAvatar, false);

                    /*
                     * If the parameters gave us a group title to force all NPCs to,
                     * and the firstname does not contain the exclude string
                     * and the lastname does not contain the exclude string,
                     * set the NPCs group title to the given string and send it to
                     * all connected viewers.
                     *
                     * This must be done before adding to m_avatars as once so added,
                     * the group title cannot be changed.
                     */
                    if ((npcGroupTitle != "") &&
                        !firstname.Contains(npcGroupTitleExcludeName) &&
                        !lastname.Contains(npcGroupTitleExcludeName))
                    {
                        sp.Grouptitle = npcGroupTitle;
                        sp.SendAvatarDataToAllAgents();
                    }

                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);
                    m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}",
                                      npcAvatar.AgentId, sp.Name);

                    return(npcAvatar.AgentId);
                }
                else
                {
                    m_log.WarnFormat(
                        "[NPC MODULE]: Could not find scene presence for NPC {0} {1}",
                        sp.Name, sp.UUID);
                    return(UUID.Zero);
                }
            }
        }
示例#12
0
        public UUID CreateNPC(string firstname, string lastname,
                Vector3 position, UUID agentID, UUID owner, bool senseAsAgent, Scene scene,
                AvatarAppearance appearance)
        {
            NPCAvatar npcAvatar = null;

            try
            {
                if (agentID == UUID.Zero)
                    npcAvatar = new NPCAvatar(firstname, lastname, position,
                            owner, senseAsAgent, scene);
                else
                    npcAvatar = new NPCAvatar(firstname, lastname, agentID, position,
                        owner, senseAsAgent, scene);
            }
            catch (Exception e)
            {
                m_log.Info("[NPC MODULE]: exception creating NPC avatar: " + e.ToString());
                return UUID.Zero;
            }

            npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0,
                    int.MaxValue);

            m_log.DebugFormat(
                "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
                firstname, lastname, npcAvatar.AgentId, owner,
                senseAsAgent, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData();
            acd.AgentID = npcAvatar.AgentId;
            acd.firstname = firstname;
            acd.lastname = lastname;
            acd.ServiceURLs = new Dictionary<string, object>();

            AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);
            acd.Appearance = npcAppearance;

            /*
            for (int i = 0;
                    i < acd.Appearance.Texture.FaceTextures.Length; i++)
            {
                m_log.DebugFormat(
                        "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
                        acd.AgentID, i,
                        acd.Appearance.Texture.FaceTextures[i]);
            }
            */

            m_avatarsRwLock.AcquireWriterLock(-1);
            try
            {
                scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode,
                        acd);
                scene.AddNewAgent(npcAvatar, PresenceType.Npc);

                ScenePresence sp;
                if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                {
                    /*
                    m_log.DebugFormat(
                            "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}",
                            sp.Name, sp.UUID);
                    */

                    sp.CompleteMovement(npcAvatar, false);
                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);
                    m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name);

                    return npcAvatar.AgentId;
                }
                else
                {
                    m_log.WarnFormat(
                        "[NPC MODULE]: Could not find scene presence for NPC {0} {1}",
                        sp.Name, sp.UUID);

                    return UUID.Zero;
                }
            }
            finally
            {
                m_avatarsRwLock.ReleaseWriterLock();
            }
        }
示例#13
0
        public UUID CreateNPC(string firstname, string lastname,
                Vector3 position, UUID agentID, UUID owner, string groupTitle, UUID groupID, bool senseAsAgent, Scene scene,
                AvatarAppearance appearance)
        {
            NPCAvatar npcAvatar = null;

            try
            {
                if (agentID == UUID.Zero)
                    npcAvatar = new NPCAvatar(firstname, lastname, position,
                            owner, senseAsAgent, scene);
                else
                    npcAvatar = new NPCAvatar(firstname, lastname, agentID, position,
                        owner, senseAsAgent, scene);
            }
            catch (Exception e)
            {
                m_log.Info("[NPC MODULE]: exception creating NPC avatar: " + e.ToString());
                return UUID.Zero;
            }

            npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0,
                    int.MaxValue);

//            m_log.DebugFormat(
//                "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
//                firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName);

            AgentCircuitData acd = new AgentCircuitData();
            acd.AgentID = npcAvatar.AgentId;
            acd.firstname = firstname;
            acd.lastname = lastname;
            acd.ServiceURLs = new Dictionary<string, object>();

            AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);
            acd.Appearance = npcAppearance;

            /*
            for (int i = 0;
                    i < acd.Appearance.Texture.FaceTextures.Length; i++)
            {
                m_log.DebugFormat(
                        "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
                        acd.AgentID, i,
                        acd.Appearance.Texture.FaceTextures[i]);
            }
            */

//            ManualResetEvent ev = new ManualResetEvent(false);

//            Util.FireAndForget(delegate(object x) {
                lock (m_avatars)
                {
                    scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
                    scene.AddNewAgent(npcAvatar, PresenceType.Npc);

                    ScenePresence sp;
                    if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
                    {
                        npcAvatar.ActiveGroupId = groupID;
                        sp.CompleteMovement(npcAvatar, false);
                        sp.Grouptitle = groupTitle;
                        m_avatars.Add(npcAvatar.AgentId, npcAvatar);
//                        m_log.DebugFormat("[NPC MODULE]: Created NPC {0} {1}", npcAvatar.AgentId, sp.Name);
                    }
                }
//                ev.Set();
//            });

//            ev.WaitOne();

//            m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);

            return npcAvatar.AgentId;
        }
示例#14
0
        void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            lock (p_lock)
            {
                if (p_inUse)
                {
                    p_inUse = false;

                    NPCAvatar npcAvatar = new NPCAvatar(p_firstname, p_lastname, p_position, p_scene);
                    npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue);

                    p_scene.ClientManager.Add(npcAvatar.CircuitCode, npcAvatar);
                    p_scene.AddNewClient(npcAvatar);

                    ScenePresence sp;
                    if (p_scene.TryGetAvatar(npcAvatar.AgentId, out sp))
                    {
                        AvatarAppearance x = GetAppearance(p_cloneAppearanceFrom, p_scene);

                        List<byte> wearbyte = new List<byte>();
                        for (int i = 0; i < x.VisualParams.Length; i++)
                        {
                            wearbyte.Add(x.VisualParams[i]);
                        }

                        sp.SetAppearance(x.Texture.GetBytes(), wearbyte);
                    }

                    m_avatars.Add(npcAvatar.AgentId, npcAvatar);

                    p_returnUuid = npcAvatar.AgentId;
                }
            }
        }