aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Grid/UserServer.Modules/AvatarCreationModule.cs
diff options
context:
space:
mode:
authorMW2009-06-01 11:16:07 +0000
committerMW2009-06-01 11:16:07 +0000
commita71d9c95cf8af33ff878475067f35a7350868592 (patch)
tree5230e52c18f0fb1eb146922ba695ce5818af7aea /OpenSim/Grid/UserServer.Modules/AvatarCreationModule.cs
parentMinor: Change OpenSim to OpenSimulator in older copyright headers and LICENSE... (diff)
downloadopensim-SC-a71d9c95cf8af33ff878475067f35a7350868592.zip
opensim-SC-a71d9c95cf8af33ff878475067f35a7350868592.tar.gz
opensim-SC-a71d9c95cf8af33ff878475067f35a7350868592.tar.bz2
opensim-SC-a71d9c95cf8af33ff878475067f35a7350868592.tar.xz
Some changes to the AvatarCreationModule to reduce the number of database reads/writes. Still requires more work in this area.
Diffstat (limited to '')
-rw-r--r--OpenSim/Grid/UserServer.Modules/AvatarCreationModule.cs155
1 files changed, 86 insertions, 69 deletions
diff --git a/OpenSim/Grid/UserServer.Modules/AvatarCreationModule.cs b/OpenSim/Grid/UserServer.Modules/AvatarCreationModule.cs
index 35c8bd4..9080493 100644
--- a/OpenSim/Grid/UserServer.Modules/AvatarCreationModule.cs
+++ b/OpenSim/Grid/UserServer.Modules/AvatarCreationModule.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -69,7 +69,7 @@ namespace OpenSim.Grid.UserServer.Modules
69 { 69 {
70 console.Commands.AddCommand("userserver", false, "clone avatar", 70 console.Commands.AddCommand("userserver", false, "clone avatar",
71 "clone avatar <TemplateAvatarFirstName> <TemplateAvatarLastName> <TargetAvatarFirstName> <TargetAvatarLastName>", 71 "clone avatar <TemplateAvatarFirstName> <TemplateAvatarLastName> <TargetAvatarFirstName> <TargetAvatarLastName>",
72 "Clone the template avatar inventory into a target avatar", RunCommand); 72 "Clone the template avatar's inventory into a target avatar", RunCommand);
73 } 73 }
74 } 74 }
75 75
@@ -145,7 +145,7 @@ namespace OpenSim.Grid.UserServer.Modules
145 145
146 if (removeTargetsClothes) 146 if (removeTargetsClothes)
147 { 147 {
148 //remove clothes and attachments from target avatar so that the end result isn't a merge of its existing clothes 148 //remove clothes and attachments from target avatar so that the end result isn't a merger of its existing clothes
149 // and the clothes from the template avatar. 149 // and the clothes from the template avatar.
150 RemoveClothesAndAttachments(avID); 150 RemoveClothesAndAttachments(avID);
151 } 151 }
@@ -204,6 +204,9 @@ namespace OpenSim.Grid.UserServer.Modules
204 "POST", m_inventoryServerUrl + "GetItems/", templateFolderId.Guid); 204 "POST", m_inventoryServerUrl + "GetItems/", templateFolderId.Guid);
205 if ((templateItems != null) && (templateItems.Count > 0)) 205 if ((templateItems != null) && (templateItems.Count > 0))
206 { 206 {
207 List<ClothesAttachment> wornClothes = new List<ClothesAttachment>();
208 List<ClothesAttachment> attachedItems = new List<ClothesAttachment>();
209
207 foreach (InventoryItemBase item in templateItems) 210 foreach (InventoryItemBase item in templateItems)
208 { 211 {
209 212
@@ -213,7 +216,8 @@ namespace OpenSim.Grid.UserServer.Modules
213 int appearanceType = ItemIsPartOfAppearance(item, appearance); 216 int appearanceType = ItemIsPartOfAppearance(item, appearance);
214 if (appearanceType >= 0) 217 if (appearanceType >= 0)
215 { 218 {
216 UpdateAvatarAppearance(avID, appearanceType, clonedItemId, item.AssetID); 219 // UpdateAvatarAppearance(avID, appearanceType, clonedItemId, item.AssetID);
220 wornClothes.Add(new ClothesAttachment(appearanceType, clonedItemId, item.AssetID));
217 } 221 }
218 222
219 if (appearance != null) 223 if (appearance != null)
@@ -221,12 +225,36 @@ namespace OpenSim.Grid.UserServer.Modules
221 int attachment = appearance.GetAttachpoint(item.ID); 225 int attachment = appearance.GetAttachpoint(item.ID);
222 if (attachment > 0) 226 if (attachment > 0)
223 { 227 {
224 UpdateAvatarAttachment(avID, attachment, clonedItemId, item.AssetID); 228 //UpdateAvatarAttachment(avID, attachment, clonedItemId, item.AssetID);
229 attachedItems.Add(new ClothesAttachment(attachment, clonedItemId, item.AssetID));
225 } 230 }
226 } 231 }
227 success = true; 232 success = true;
228 } 233 }
229 } 234 }
235
236 if ((wornClothes.Count > 0) || (attachedItems.Count > 0))
237 {
238 //Update the worn clothes and attachments
239 AvatarAppearance targetAppearance = GetAppearance(avID);
240 if (targetAppearance != null)
241 {
242 foreach (ClothesAttachment wornItem in wornClothes)
243 {
244 targetAppearance.Wearables[wornItem.Type].AssetID = wornItem.AssetID;
245 targetAppearance.Wearables[wornItem.Type].ItemID = wornItem.ItemID;
246 }
247
248 foreach (ClothesAttachment wornItem in attachedItems)
249 {
250 targetAppearance.SetAttachment(wornItem.Type, wornItem.ItemID, wornItem.AssetID);
251 }
252
253 m_userDataBaseService.UpdateUserAppearance(avID, targetAppearance);
254 wornClothes.Clear();
255 attachedItems.Clear();
256 }
257 }
230 } 258 }
231 259
232 List<InventoryFolderBase> subFolders = FindSubFolders(templateFolder.ID.Guid, templateFolders); 260 List<InventoryFolderBase> subFolders = FindSubFolders(templateFolder.ID.Guid, templateFolders);
@@ -288,40 +316,27 @@ namespace OpenSim.Grid.UserServer.Modules
288 316
289 private void UpdateAvatarAppearance(UUID avatarID, int wearableType, UUID itemID, UUID assetID) 317 private void UpdateAvatarAppearance(UUID avatarID, int wearableType, UUID itemID, UUID assetID)
290 { 318 {
291 AvatarAppearance appearance = m_userDataBaseService.GetUserAppearance(avatarID); 319 AvatarAppearance appearance = GetAppearance(avatarID);
292 if (appearance == null)
293 {
294 appearance = CreateDefaultAppearance(avatarID);
295 }
296 320
297 appearance.Wearables[wearableType].AssetID = assetID; 321 appearance.Wearables[wearableType].AssetID = assetID;
298 appearance.Wearables[wearableType].ItemID = itemID; 322 appearance.Wearables[wearableType].ItemID = itemID;
299 323
300 m_userDataBaseService.UpdateUserAppearance(avatarID, appearance); 324 m_userDataBaseService.UpdateUserAppearance(avatarID, appearance);
301
302 } 325 }
303 326
327
304 private void UpdateAvatarAttachment(UUID avatarID, int attachmentPoint, UUID itemID, UUID assetID) 328 private void UpdateAvatarAttachment(UUID avatarID, int attachmentPoint, UUID itemID, UUID assetID)
305 { 329 {
306 AvatarAppearance appearance = m_userDataBaseService.GetUserAppearance(avatarID); 330 AvatarAppearance appearance = GetAppearance(avatarID);
307 if (appearance == null)
308 {
309 appearance = CreateDefaultAppearance(avatarID);
310 }
311 331
312 appearance.SetAttachment(attachmentPoint, itemID, assetID); 332 appearance.SetAttachment(attachmentPoint, itemID, assetID);
313 333
314 m_userDataBaseService.UpdateUserAppearance(avatarID, appearance); 334 m_userDataBaseService.UpdateUserAppearance(avatarID, appearance);
315
316 } 335 }
317 336
318 private void RemoveClothesAndAttachments(UUID avatarID) 337 private void RemoveClothesAndAttachments(UUID avatarID)
319 { 338 {
320 AvatarAppearance appearance = m_userDataBaseService.GetUserAppearance(avatarID); 339 AvatarAppearance appearance = GetAppearance(avatarID);
321 if (appearance == null)
322 {
323 appearance = CreateDefaultAppearance(avatarID);
324 }
325 340
326 appearance.ClearWearables(); 341 appearance.ClearWearables();
327 appearance.ClearAttachments(); 342 appearance.ClearAttachments();
@@ -329,6 +344,16 @@ namespace OpenSim.Grid.UserServer.Modules
329 344
330 } 345 }
331 346
347 private AvatarAppearance GetAppearance(UUID avatarID)
348 {
349 AvatarAppearance appearance = m_userDataBaseService.GetUserAppearance(avatarID);
350 if (appearance == null)
351 {
352 appearance = CreateDefaultAppearance(avatarID);
353 }
354 return appearance;
355 }
356
332 private UUID FindFolderID(string name, List<InventoryFolderBase> folders) 357 private UUID FindFolderID(string name, List<InventoryFolderBase> folders)
333 { 358 {
334 foreach (InventoryFolderBase folder in folders) 359 foreach (InventoryFolderBase folder in folders)
@@ -398,27 +423,6 @@ namespace OpenSim.Grid.UserServer.Modules
398 item.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions; 423 item.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions;
399 item.GroupPermissions = item.GroupPermissions & item.NextPermissions; 424 item.GroupPermissions = item.GroupPermissions & item.NextPermissions;
400 425
401 //set all items to +mod/+copy/- transfer
402 //if ((item.CurrentPermissions & (uint)PermissionMask.Modify) == 0)
403 // item.CurrentPermissions |= (uint)PermissionMask.Modify;
404
405 //if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
406 // item.CurrentPermissions |= (uint)PermissionMask.Copy;
407
408 //if ((item.CurrentPermissions & (uint)PermissionMask.Transfer) != 0)
409 // item.CurrentPermissions &= ~(uint)PermissionMask.Transfer;
410
411 //if ((item.NextPermissions & (uint)PermissionMask.Modify) == 0)
412 // item.NextPermissions |= (uint)PermissionMask.Modify;
413
414 //if ((item.NextPermissions & (uint)PermissionMask.Copy) == 0)
415 // item.NextPermissions |= (uint)PermissionMask.Copy;
416
417 //if ((item.NextPermissions & (uint)PermissionMask.Transfer) != 0)
418 // item.NextPermissions &= ~(uint)PermissionMask.Transfer;
419
420 //if ((item.EveryOnePermissions & (uint)PermissionMask.Transfer) != 0)
421 // item.EveryOnePermissions &= ~(uint)PermissionMask.Transfer;
422 } 426 }
423 427
424 private AvatarAppearance CreateDefaultAppearance(UUID avatarId) 428 private AvatarAppearance CreateDefaultAppearance(UUID avatarId)
@@ -496,33 +500,46 @@ namespace OpenSim.Grid.UserServer.Modules
496 } 500 }
497 #endregion 501 #endregion
498 502
503 public enum PermissionMask
504 {
505 None = 0,
506 Transfer = 8192,
507 Modify = 16384,
508 Copy = 32768,
509 Move = 524288,
510 Damage = 1048576,
511 All = 2147483647,
512 }
499 513
500 } 514 public enum WearableType
501 public enum PermissionMask 515 {
502 { 516 Shape = 0,
503 None = 0, 517 Skin = 1,
504 Transfer = 8192, 518 Hair = 2,
505 Modify = 16384, 519 Eyes = 3,
506 Copy = 32768, 520 Shirt = 4,
507 Move = 524288, 521 Pants = 5,
508 Damage = 1048576, 522 Shoes = 6,
509 All = 2147483647, 523 Socks = 7,
510 } 524 Jacket = 8,
525 Gloves = 9,
526 Undershirt = 10,
527 Underpants = 11,
528 Skirt = 12,
529 }
511 530
512 public enum WearableType 531 public class ClothesAttachment
513 { 532 {
514 Shape = 0, 533 public int Type;
515 Skin = 1, 534 public UUID ItemID;
516 Hair = 2, 535 public UUID AssetID;
517 Eyes = 3, 536
518 Shirt = 4, 537 public ClothesAttachment(int type, UUID itemID, UUID assetID)
519 Pants = 5, 538 {
520 Shoes = 6, 539 Type = type;
521 Socks = 7, 540 ItemID = itemID;
522 Jacket = 8, 541 AssetID = assetID;
523 Gloves = 9, 542 }
524 Undershirt = 10, 543 }
525 Underpants = 11,
526 Skirt = 12,
527 } 544 }
528} 545}