public void Startup(ConfigurationLoader loader) { m_NpcInventoryService = loader.GetService <InventoryServiceInterface>(m_NpcInventoryServiceName); m_NpcPresenceService = loader.GetService <NpcPresenceServiceInterface>(m_NpcPresenceServiceName); m_NpcAssetService = loader.GetService <AssetServiceInterface>(m_NpcAssetServiceName); foreach (string avatarNameService in m_AvatarNameServiceNames.Split(',')) { if (!string.IsNullOrEmpty(avatarNameService)) { m_AvatarNameServices.Add(loader.GetService <AvatarNameServiceInterface>(avatarNameService)); } } loader.CommandRegistry.AddLoadCommand("npc-iar", LoadIarCommand); loader.CommandRegistry.AddSaveCommand("npc-iar", SaveIarCommand); }
public void Startup(ConfigurationLoader loader) { List <IAdminWebIF> webifs = loader.GetServicesByValue <IAdminWebIF>(); if (webifs.Count > 0) { m_AdminWebIF = webifs[0]; m_AdminWebIF.JsonMethods.Add("npcs.show", HandleShowNpcs); m_AdminWebIF.JsonMethods.Add("npc.remove", HandleRemoveNpc); m_AdminWebIF.JsonMethods.Add("npc.get", HandleGetNpc); m_AdminWebIF.AutoGrantRights["npcs.manage"].Add("npcs.view"); m_AdminWebIF.ModuleNames.Add("npcs"); } /* non persistent inventory is needed for baking logic */ m_NonpersistentInventoryService = loader.GetService <InventoryServiceInterface>(m_NonpersistentInventoryServiceName); m_NonpersistentAgentServices.Add(m_NonpersistentInventoryService); m_NonpersistentAgentServices.Add(new NpcNonPersistentPresenceService()); /* persistence is optional */ if (!string.IsNullOrEmpty(m_NpcPresenceServiceName) || !string.IsNullOrEmpty(m_PersistentInventoryServiceName)) { m_NpcPresenceService = loader.GetService <NpcPresenceServiceInterface>(m_NpcPresenceServiceName); m_PersistentAgentServices.Add(m_NpcPresenceService); m_PersistentInventoryService = loader.GetService <InventoryServiceInterface>(m_PersistentInventoryServiceName); m_PersistentAgentServices.Add(m_PersistentInventoryService); /* profile is optional */ if (!string.IsNullOrEmpty(m_PersistentProfileServiceName)) { m_PersistentProfileService = loader.GetService <ProfileServiceInterface>(m_PersistentProfileServiceName); m_PersistentAgentServices.Add(m_PersistentProfileService); } } /* profile is optional */ if (!string.IsNullOrEmpty(m_NonpersistentProfileServiceName)) { m_NonpersistentProfileService = loader.GetService <ProfileServiceInterface>(m_NonpersistentProfileServiceName); m_NonpersistentAgentServices.Add(m_NonpersistentProfileService); } loader.Scenes.OnRegionAdd += OnSceneAdded; loader.Scenes.OnRegionRemove += OnSceneRemoved; loader.CommandRegistry.AddShowCommand("npcs", ShowNpcsCommand); loader.CommandRegistry.AddRemoveCommand("npc", RemoveNpcCommand); loader.CommandRegistry.AddCreateCommand("npc", CreateNpcCommand); loader.CommandRegistry.AddRemoveAllCommand("npcs", RemoveAllNpcsCommand); }
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"); }
public void Startup(ConfigurationLoader loader) { IConfig config = loader.Config.Configs[GetType().FullName]; m_PresenceService = loader.GetService <NpcPresenceServiceInterface>(config.GetString("NpcPresenceService")); }