diff options
author | Justin Clark-Casey (justincc) | 2014-10-28 17:29:04 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2014-11-25 23:23:09 +0000 |
commit | 9b09dd357556b0a038c2f7f83e4cd7318555bd11 (patch) | |
tree | e9f7eaf0305eb01dcf5ad4783a56f503ffd240c9 /OpenSim/Region/OptionalModules | |
parent | Fix recent regression where adaptive throttles stopped adjusting. (diff) | |
download | opensim-SC-9b09dd357556b0a038c2f7f83e4cd7318555bd11.zip opensim-SC-9b09dd357556b0a038c2f7f83e4cd7318555bd11.tar.gz opensim-SC-9b09dd357556b0a038c2f7f83e4cd7318555bd11.tar.bz2 opensim-SC-9b09dd357556b0a038c2f7f83e4cd7318555bd11.tar.xz |
Add "wearables show" console command.
This shows summary wearables information (shape, hair, etc.) for all avatars in the scene or specific information about a given avatar's wearables.
Similar to the existing "attachments show" command.
Diffstat (limited to 'OpenSim/Region/OptionalModules')
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs | 100 |
1 files changed, 97 insertions, 3 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs index fa35f0f..51dfd47 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs | |||
@@ -102,7 +102,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance | |||
102 | scene.AddCommand( | 102 | scene.AddCommand( |
103 | "Users", this, "appearance show", | 103 | "Users", this, "appearance show", |
104 | "appearance show [<first-name> <last-name>]", | 104 | "appearance show [<first-name> <last-name>]", |
105 | "Show appearance information for each avatar in the simulator.", | 105 | "Show appearance information for avatars.", |
106 | "This command checks whether the simulator has all the baked textures required to display an avatar to other viewers. " | 106 | "This command checks whether the simulator has all the baked textures required to display an avatar to other viewers. " |
107 | + "\nIf not, then appearance is 'corrupt' and other avatars will continue to see it as a cloud." | 107 | + "\nIf not, then appearance is 'corrupt' and other avatars will continue to see it as a cloud." |
108 | + "\nOptionally, you can view just a particular avatar's appearance information." | 108 | + "\nOptionally, you can view just a particular avatar's appearance information." |
@@ -132,6 +132,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance | |||
132 | "Find out which avatar uses the given asset as a baked texture, if any.", | 132 | "Find out which avatar uses the given asset as a baked texture, if any.", |
133 | "You can specify just the beginning of the uuid, e.g. 2008a8d. A longer UUID must be in dashed format.", | 133 | "You can specify just the beginning of the uuid, e.g. 2008a8d. A longer UUID must be in dashed format.", |
134 | HandleFindAppearanceCommand); | 134 | HandleFindAppearanceCommand); |
135 | |||
136 | scene.AddCommand( | ||
137 | "Users", this, "wearables show", | ||
138 | "wearables show [<first-name> <last-name>]", | ||
139 | "Show information about wearables for avatars.", | ||
140 | "If no avatar name is given then a general summary for all avatars in the scene is shown.\n" | ||
141 | + "If an avatar name is given then specific information about current wearables is shown.", | ||
142 | HandleShowWearablesCommand); | ||
135 | } | 143 | } |
136 | 144 | ||
137 | private void HandleSendAppearanceCommand(string module, string[] cmd) | 145 | private void HandleSendAppearanceCommand(string module, string[] cmd) |
@@ -186,7 +194,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance | |||
186 | } | 194 | } |
187 | } | 195 | } |
188 | 196 | ||
189 | protected void HandleShowAppearanceCommand(string module, string[] cmd) | 197 | private void HandleShowAppearanceCommand(string module, string[] cmd) |
190 | { | 198 | { |
191 | if (cmd.Length != 2 && cmd.Length < 4) | 199 | if (cmd.Length != 2 && cmd.Length < 4) |
192 | { | 200 | { |
@@ -263,7 +271,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance | |||
263 | } | 271 | } |
264 | } | 272 | } |
265 | 273 | ||
266 | protected void HandleFindAppearanceCommand(string module, string[] cmd) | 274 | private void HandleFindAppearanceCommand(string module, string[] cmd) |
267 | { | 275 | { |
268 | if (cmd.Length != 3) | 276 | if (cmd.Length != 3) |
269 | { | 277 | { |
@@ -304,5 +312,91 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance | |||
304 | string.Join(", ", matchedAvatars.ToList().ConvertAll<string>(sp => sp.Name).ToArray())); | 312 | string.Join(", ", matchedAvatars.ToList().ConvertAll<string>(sp => sp.Name).ToArray())); |
305 | } | 313 | } |
306 | } | 314 | } |
315 | |||
316 | protected void HandleShowWearablesCommand(string module, string[] cmd) | ||
317 | { | ||
318 | if (cmd.Length != 2 && cmd.Length < 4) | ||
319 | { | ||
320 | MainConsole.Instance.OutputFormat("Usage: wearables show [<first-name> <last-name>]"); | ||
321 | return; | ||
322 | } | ||
323 | |||
324 | bool targetNameSupplied = false; | ||
325 | string optionalTargetFirstName = null; | ||
326 | string optionalTargetLastName = null; | ||
327 | |||
328 | if (cmd.Length >= 4) | ||
329 | { | ||
330 | targetNameSupplied = true; | ||
331 | optionalTargetFirstName = cmd[2]; | ||
332 | optionalTargetLastName = cmd[3]; | ||
333 | } | ||
334 | |||
335 | StringBuilder sb = new StringBuilder(); | ||
336 | |||
337 | if (targetNameSupplied) | ||
338 | { | ||
339 | lock (m_scenes) | ||
340 | { | ||
341 | foreach (Scene scene in m_scenes.Values) | ||
342 | { | ||
343 | ScenePresence sp = scene.GetScenePresence(optionalTargetFirstName, optionalTargetLastName); | ||
344 | if (sp != null && !sp.IsChildAgent) | ||
345 | AppendWearablesDetailReport(sp, sb); | ||
346 | } | ||
347 | } | ||
348 | } | ||
349 | else | ||
350 | { | ||
351 | ConsoleDisplayTable cdt = new ConsoleDisplayTable(); | ||
352 | cdt.AddColumn("Name", ConsoleDisplayUtil.UserNameSize); | ||
353 | cdt.AddColumn("Wearables", 2); | ||
354 | |||
355 | lock (m_scenes) | ||
356 | { | ||
357 | foreach (Scene scene in m_scenes.Values) | ||
358 | { | ||
359 | scene.ForEachRootScenePresence( | ||
360 | sp => | ||
361 | { | ||
362 | int count = 0; | ||
363 | |||
364 | for (int i = (int)WearableType.Shape; i < (int)WearableType.Physics; i++) | ||
365 | count += sp.Appearance.Wearables[i].Count; | ||
366 | |||
367 | cdt.AddRow(sp.Name, count); | ||
368 | } | ||
369 | ); | ||
370 | } | ||
371 | } | ||
372 | |||
373 | sb.Append(cdt.ToString()); | ||
374 | } | ||
375 | |||
376 | MainConsole.Instance.Output(sb.ToString()); | ||
377 | } | ||
378 | |||
379 | private void AppendWearablesDetailReport(ScenePresence sp, StringBuilder sb) | ||
380 | { | ||
381 | sb.AppendFormat("\nWearables for {0}\n", sp.Name); | ||
382 | |||
383 | ConsoleDisplayTable cdt = new ConsoleDisplayTable(); | ||
384 | cdt.AddColumn("Type", 10); | ||
385 | cdt.AddColumn("Item UUID", ConsoleDisplayUtil.UuidSize); | ||
386 | cdt.AddColumn("Asset UUID", ConsoleDisplayUtil.UuidSize); | ||
387 | |||
388 | for (int i = (int)WearableType.Shape; i < (int)WearableType.Physics; i++) | ||
389 | { | ||
390 | AvatarWearable aw = sp.Appearance.Wearables[i]; | ||
391 | |||
392 | for (int j = 0; j < aw.Count; j++) | ||
393 | { | ||
394 | WearableItem wi = aw[j]; | ||
395 | cdt.AddRow(Enum.GetName(typeof(WearableType), i), wi.ItemID, wi.AssetID); | ||
396 | } | ||
397 | } | ||
398 | |||
399 | sb.Append(cdt.ToString()); | ||
400 | } | ||
307 | } | 401 | } |
308 | } \ No newline at end of file | 402 | } \ No newline at end of file |