public bool Run() { var pInfo = new NpcPresenceInfo { Npc = new UGUIWithName(UUID.Random, "Npc", "Test"), Owner = new UGUIWithName(UUID.Random, "Test", "User", new Uri("http://example.com/")), Group = new UGI(UUID.Random, "NpcGroup", new Uri("http://example.com/")), RegionID = UUID.Random, Position = new Vector3(128, 128, 23), LookAt = new Vector3(1, -1, 0.5), SittingOnObjectID = UUID.Random }; m_Log.Info("---- Check precondition ----"); if (!CheckNonExistence(pInfo)) { return(false); } m_Log.Info("---- Presence Login ----"); m_PresenceService.Store(pInfo); m_Log.Info("---- Verify existence ----"); if (!CheckExistence(pInfo)) { return(false); } UUID newRegionID = UUID.Random; /* ensure that we get a different id */ while (newRegionID == pInfo.RegionID) { newRegionID = UUID.Random; } m_Log.Info("---- Verify entry to be removed ----"); m_PresenceService.Remove(pInfo.Npc.ID); if (!CheckNonExistence(pInfo)) { return(false); } return(true); }
public NpcAgent CreateNpc(UUID sceneid, UGUI owner, UGI group, string firstName, string lastName, Vector3 position, Notecard nc, NpcOptions options = NpcOptions.None) { SceneInterface scene; AgentServiceList agentServiceList = m_NonpersistentAgentServices; if ((options & NpcOptions.Persistent) != NpcOptions.None) { if (m_NpcPresenceService == null) { throw new InvalidOperationException("Persistence of NPCs not configured"); } agentServiceList = m_PersistentAgentServices; } NpcPresenceServiceInterface presenceService = agentServiceList.Get <NpcPresenceServiceInterface>(); InventoryServiceInterface inventoryService = agentServiceList.Get <InventoryServiceInterface>(); var npcId = new UGUIWithName { ID = UUID.Random, FirstName = firstName, LastName = lastName }; if (m_KnownScenes.TryGetValue(sceneid, out scene)) { var agent = new NpcAgent(npcId, agentServiceList, sceneid) { NpcOwner = owner, Group = group }; try { m_NpcAgents.Add(agent.ID, agent); var npcInfo = new NpcPresenceInfo { RegionID = sceneid, Npc = agent.NamedOwner, Owner = agent.NpcOwner, Group = agent.Group, }; inventoryService.CheckInventory(npcInfo.Npc.ID); presenceService.Store(npcInfo); agent.CurrentScene = scene; agent.Position = position; scene.Add(agent); } catch { if (m_NpcPresenceService != null) { presenceService.Remove(agent.ID); } inventoryService.Remove(agent.ID); m_NpcAgents.Remove(agent.ID); throw; } agent.EnableListen(); scene.SendAgentObjectToAllAgents(agent); agent.SendAnimations(); ThreadPool.QueueUserWorkItem(LoadAppearanceFromNotecardJob, new RebakeJob { Notecard = nc, Agent = agent }); return(agent); } throw new KeyNotFoundException("Scene not found"); }