clockwerk-opensim-stable – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 vero 1 /*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27  
28 using System;
29 using System.Collections.Generic;
30 using System.Linq;
31 using System.Reflection;
32 using System.Text;
33 using log4net;
34 using Mono.Addins;
35 using Nini.Config;
36 using OpenMetaverse;
37 using OpenSim.Framework;
38 using OpenSim.Framework.Console;
39 using OpenSim.Framework.Monitoring;
40 using OpenSim.Region.ClientStack.LindenUDP;
41 using OpenSim.Region.Framework.Interfaces;
42 using OpenSim.Region.Framework.Scenes;
43  
44 namespace OpenSim.Region.OptionalModules.Avatar.Attachments
45 {
46 /// <summary>
47 /// A module that just holds commands for inspecting avatar appearance.
48 /// </summary>
49 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "AttachmentsCommandModule")]
50 public class AttachmentsCommandModule : ISharedRegionModule
51 {
52 // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53  
54 private List<Scene> m_scenes = new List<Scene>();
55 // private IAvatarFactoryModule m_avatarFactory;
56  
57 public string Name { get { return "Attachments Command Module"; } }
58  
59 public Type ReplaceableInterface { get { return null; } }
60  
61 public void Initialise(IConfigSource source)
62 {
63 // m_log.DebugFormat("[ATTACHMENTS COMMAND MODULE]: INITIALIZED MODULE");
64 }
65  
66 public void PostInitialise()
67 {
68 // m_log.DebugFormat("[ATTACHMENTS COMMAND MODULE]: POST INITIALIZED MODULE");
69 }
70  
71 public void Close()
72 {
73 // m_log.DebugFormat("[ATTACHMENTS COMMAND MODULE]: CLOSED MODULE");
74 }
75  
76 public void AddRegion(Scene scene)
77 {
78 // m_log.DebugFormat("[ATTACHMENTS COMMAND MODULE]: REGION {0} ADDED", scene.RegionInfo.RegionName);
79 }
80  
81 public void RemoveRegion(Scene scene)
82 {
83 // m_log.DebugFormat("[ATTACHMENTS COMMAND MODULE]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
84  
85 lock (m_scenes)
86 m_scenes.Remove(scene);
87 }
88  
89 public void RegionLoaded(Scene scene)
90 {
91 // m_log.DebugFormat("[ATTACHMENTS COMMAND MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName);
92  
93 lock (m_scenes)
94 m_scenes.Add(scene);
95  
96 scene.AddCommand(
97 "Users", this, "attachments show",
98 "attachments show [<first-name> <last-name>]",
99 "Show attachment information for avatars in this simulator.",
100 "If no name is supplied then information for all avatars is shown.",
101 HandleShowAttachmentsCommand);
102 }
103  
104 protected void HandleShowAttachmentsCommand(string module, string[] cmd)
105 {
106 if (cmd.Length != 2 && cmd.Length < 4)
107 {
108 MainConsole.Instance.OutputFormat("Usage: attachments show [<first-name> <last-name>]");
109 return;
110 }
111  
112 bool targetNameSupplied = false;
113 string optionalTargetFirstName = null;
114 string optionalTargetLastName = null;
115  
116 if (cmd.Length >= 4)
117 {
118 targetNameSupplied = true;
119 optionalTargetFirstName = cmd[2];
120 optionalTargetLastName = cmd[3];
121 }
122  
123 StringBuilder sb = new StringBuilder();
124  
125 lock (m_scenes)
126 {
127 foreach (Scene scene in m_scenes)
128 {
129 if (targetNameSupplied)
130 {
131 ScenePresence sp = scene.GetScenePresence(optionalTargetFirstName, optionalTargetLastName);
132 if (sp != null && !sp.IsChildAgent)
133 GetAttachmentsReport(sp, sb);
134 }
135 else
136 {
137 scene.ForEachRootScenePresence(sp => GetAttachmentsReport(sp, sb));
138 }
139 }
140 }
141  
142 MainConsole.Instance.Output(sb.ToString());
143 }
144  
145 private void GetAttachmentsReport(ScenePresence sp, StringBuilder sb)
146 {
147 sb.AppendFormat("Attachments for {0}\n", sp.Name);
148  
149 ConsoleDisplayTable ct = new ConsoleDisplayTable() { Indent = 2 };
150 ct.Columns.Add(new ConsoleDisplayTableColumn("Attachment Name", 50));
151 ct.Columns.Add(new ConsoleDisplayTableColumn("Local ID", 10));
152 ct.Columns.Add(new ConsoleDisplayTableColumn("Item ID", 36));
153 ct.Columns.Add(new ConsoleDisplayTableColumn("Attach Point", 14));
154 ct.Columns.Add(new ConsoleDisplayTableColumn("Position", 15));
155  
156 // sb.AppendFormat(
157 // " {0,-36} {1,-10} {2,-36} {3,-14} {4,-15}\n",
158 // "Attachment Name", "Local ID", "Item ID", "Attach Point", "Position");
159  
160 List<SceneObjectGroup> attachmentObjects = sp.GetAttachments();
161 foreach (SceneObjectGroup attachmentObject in attachmentObjects)
162 {
163 // InventoryItemBase attachmentItem
164 // = m_scenes[0].InventoryService.GetItem(new InventoryItemBase(attachmentObject.FromItemID));
165  
166 // if (attachmentItem == null)
167 // {
168 // sb.AppendFormat(
169 // "WARNING: Couldn't find attachment for item {0} at point {1}\n",
170 // attachmentData.ItemID, (AttachmentPoint)attachmentData.AttachPoint);
171 // continue;
172 // }
173 // else
174 // {
175 // sb.AppendFormat(
176 // " {0,-36} {1,-10} {2,-36} {3,-14} {4,-15}\n",
177 // attachmentObject.Name, attachmentObject.LocalId, attachmentObject.FromItemID,
178 // (AttachmentPoint)attachmentObject.AttachmentPoint, attachmentObject.RootPart.AttachedPos);
179  
180 ct.AddRow(
181 attachmentObject.Name,
182 attachmentObject.LocalId,
183 attachmentObject.FromItemID,
184 ((AttachmentPoint)attachmentObject.AttachmentPoint),
185 attachmentObject.RootPart.AttachedPos);
186 // }
187 }
188  
189 ct.AddToStringBuilder(sb);
190 sb.Append("\n");
191 }
192 }
193 }