aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs45
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs7
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs39
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs141
4 files changed, 98 insertions, 134 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 33dc7a5..582beee 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -34,6 +34,7 @@ using OpenSim.Framework;
34using OpenSim.Framework.Communications.Cache; 34using OpenSim.Framework.Communications.Cache;
35using OpenSim.Region.Framework.Interfaces; 35using OpenSim.Region.Framework.Interfaces;
36using OpenSim.Region.Framework.Scenes; 36using OpenSim.Region.Framework.Scenes;
37using OpenSim.Services.Interfaces;
37 38
38namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory 39namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
39{ 40{
@@ -115,9 +116,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
115 } 116 }
116 117
117 118
118 public void SetAppearanceAssets(CachedUserInfo profile, ref AvatarAppearance appearance) 119 public void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
119 { 120 {
120 if (profile.RootFolder != null) 121 IInventoryService invService = m_scene.InventoryService;
122
123 if (invService.GetRootFolder(userID) != null)
121 { 124 {
122 for (int i = 0; i < 13; i++) 125 for (int i = 0; i < 13; i++)
123 { 126 {
@@ -127,7 +130,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
127 } 130 }
128 else 131 else
129 { 132 {
130 InventoryItemBase baseItem = profile.RootFolder.FindItem(appearance.Wearables[i].ItemID); 133 InventoryItemBase baseItem = invService.GetItem(new InventoryItemBase(appearance.Wearables[i].ItemID));
131 134
132 if (baseItem != null) 135 if (baseItem != null)
133 { 136 {
@@ -143,7 +146,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
143 } 146 }
144 else 147 else
145 { 148 {
146 m_log.Error("[APPEARANCE]: you have no inventory, appearance stuff isn't going to work"); 149 m_log.WarnFormat("[APPEARANCE]: user {0} has no inventory, appearance isn't going to work", userID);
147 } 150 }
148 } 151 }
149 152
@@ -163,8 +166,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
163 return; 166 return;
164 } 167 }
165 168
166 CachedUserInfo profile = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(clientView.AgentId);
167
168 AvatarAppearance avatAppearance = null; 169 AvatarAppearance avatAppearance = null;
169 if (!TryGetAvatarAppearance(clientView.AgentId, out avatAppearance)) 170 if (!TryGetAvatarAppearance(clientView.AgentId, out avatAppearance))
170 { 171 {
@@ -174,34 +175,18 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
174 175
175 //m_log.DebugFormat("[APPEARANCE]: Received wearables for {0}", clientView.Name); 176 //m_log.DebugFormat("[APPEARANCE]: Received wearables for {0}", clientView.Name);
176 177
177 if (profile != null) 178 foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
178 { 179 {
179 if (profile.RootFolder != null) 180 if (wear.Type < 13)
180 { 181 {
181 foreach (AvatarWearingArgs.Wearable wear in e.NowWearing) 182 avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID;
182 {
183 if (wear.Type < 13)
184 {
185 avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID;
186 }
187 }
188
189 SetAppearanceAssets(profile, ref avatAppearance);
190
191 m_scene.CommsManager.AvatarService.UpdateUserAppearance(clientView.AgentId, avatAppearance);
192 avatar.Appearance = avatAppearance;
193 }
194 else
195 {
196 m_log.WarnFormat(
197 "[APPEARANCE]: Inventory has not yet been received for {0}, cannot set wearables",
198 clientView.Name);
199 } 183 }
200 } 184 }
201 else 185
202 { 186 SetAppearanceAssets(avatar.UUID, ref avatAppearance);
203 m_log.WarnFormat("[APPEARANCE]: Cannot set wearables for {0}, no user profile found", clientView.Name); 187
204 } 188 m_scene.CommsManager.AvatarService.UpdateUserAppearance(clientView.AgentId, avatAppearance);
189 avatar.Appearance = avatAppearance;
205 } 190 }
206 191
207 public static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams) 192 public static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams)
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
index b6250a2..49b2b5c 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
@@ -39,6 +39,7 @@ using OpenSim.Framework.Communications;
39using OpenSim.Framework.Communications.Cache; 39using OpenSim.Framework.Communications.Cache;
40using OpenSim.Region.Framework.Interfaces; 40using OpenSim.Region.Framework.Interfaces;
41using OpenSim.Region.Framework.Scenes; 41using OpenSim.Region.Framework.Scenes;
42using OpenSim.Services.Interfaces;
42 43
43namespace OpenSim.Region.CoreModules.Avatar.Friends 44namespace OpenSim.Region.CoreModules.Avatar.Friends
44{ 45{
@@ -654,8 +655,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
654 initiator.ControllingClient.SendAgentOnline(new UUID[] { fromAgentID }); 655 initiator.ControllingClient.SendAgentOnline(new UUID[] { fromAgentID });
655 656
656 // find the folder for the friend... 657 // find the folder for the friend...
657 InventoryFolderImpl folder = 658 //InventoryFolderImpl folder =
658 initiator.Scene.CommsManager.UserProfileCacheService.GetUserDetails(toAgentID).FindFolderForType((int)InventoryType.CallingCard); 659 // initiator.Scene.CommsManager.UserProfileCacheService.GetUserDetails(toAgentID).FindFolderForType((int)InventoryType.CallingCard);
660 IInventoryService invService = initiator.Scene.InventoryService;
661 InventoryFolderBase folder = invService.GetFolderForType(toAgentID, AssetType.CallingCard);
659 if (folder != null) 662 if (folder != null)
660 { 663 {
661 // ... and add the calling card 664 // ... and add the calling card
diff --git a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
index 102feaf..a68db1b 100644
--- a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs
@@ -33,6 +33,7 @@ using OpenSim.Framework;
33using OpenSim.Framework.Communications.Cache; 33using OpenSim.Framework.Communications.Cache;
34using OpenSim.Region.Framework.Interfaces; 34using OpenSim.Region.Framework.Interfaces;
35using OpenSim.Region.Framework.Scenes; 35using OpenSim.Region.Framework.Scenes;
36using OpenSim.Services.Interfaces;
36 37
37namespace OpenSim.Region.CoreModules.Avatar.Gestures 38namespace OpenSim.Region.CoreModules.Avatar.Gestures
38{ 39{
@@ -62,42 +63,32 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures
62 63
63 public virtual void ActivateGesture(IClientAPI client, UUID assetId, UUID gestureId) 64 public virtual void ActivateGesture(IClientAPI client, UUID assetId, UUID gestureId)
64 { 65 {
65 CachedUserInfo userInfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(client.AgentId); 66 IInventoryService invService = m_scene.InventoryService;
66 67
67 if (userInfo != null) 68 InventoryItemBase item = invService.GetItem(new InventoryItemBase(gestureId));
69 if (item != null)
68 { 70 {
69 InventoryItemBase item = userInfo.RootFolder.FindItem(gestureId); 71 item.Flags = 1;
70 if (item != null) 72 invService.UpdateItem(item);
71 {
72 item.Flags = 1;
73 userInfo.UpdateItem(item);
74 }
75 else
76 m_log.ErrorFormat(
77 "[GESTURES]: Unable to find gesture to activate {0} for {1}", gestureId, client.Name);
78 } 73 }
79 else 74 else
80 m_log.ErrorFormat("[GESTURES]: Unable to find user {0}", client.Name); 75 m_log.WarnFormat(
76 "[GESTURES]: Unable to find gesture {0} to activate for {1}", gestureId, client.Name);
81 } 77 }
82 78
83 public virtual void DeactivateGesture(IClientAPI client, UUID gestureId) 79 public virtual void DeactivateGesture(IClientAPI client, UUID gestureId)
84 { 80 {
85 CachedUserInfo userInfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(client.AgentId); 81 IInventoryService invService = m_scene.InventoryService;
86 82
87 if (userInfo != null) 83 InventoryItemBase item = invService.GetItem(new InventoryItemBase(gestureId));
84 if (item != null)
88 { 85 {
89 InventoryItemBase item = userInfo.RootFolder.FindItem(gestureId); 86 item.Flags = 0;
90 if (item != null) 87 invService.UpdateItem(item);
91 {
92 item.Flags = 0;
93 userInfo.UpdateItem(item);
94 }
95 else
96 m_log.ErrorFormat(
97 "[GESTURES]: Unable to find gesture to deactivate {0} for {1}", gestureId, client.Name);
98 } 88 }
99 else 89 else
100 m_log.ErrorFormat("[GESTURES]: Unable to find user {0}", client.Name); 90 m_log.ErrorFormat(
91 "[GESTURES]: Unable to find gesture to deactivate {0} for {1}", gestureId, client.Name);
101 } 92 }
102 } 93 }
103} \ No newline at end of file 94} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
index 811d4cc..5315c11 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
@@ -35,6 +35,7 @@ using OpenSim.Framework;
35using OpenSim.Framework.Communications.Cache; 35using OpenSim.Framework.Communications.Cache;
36using OpenSim.Region.Framework.Interfaces; 36using OpenSim.Region.Framework.Interfaces;
37using OpenSim.Region.Framework.Scenes; 37using OpenSim.Region.Framework.Scenes;
38using OpenSim.Services.Interfaces;
38 39
39namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer 40namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
40{ 41{
@@ -154,7 +155,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
154 "into agent {1}'s inventory", 155 "into agent {1}'s inventory",
155 folderID, new UUID(im.toAgentID)); 156 folderID, new UUID(im.toAgentID));
156 157
157 InventoryFolderImpl folderCopy 158 InventoryFolderBase folderCopy
158 = scene.GiveInventoryFolder(new UUID(im.toAgentID), client.AgentId, folderID, UUID.Zero); 159 = scene.GiveInventoryFolder(new UUID(im.toAgentID), client.AgentId, folderID, UUID.Zero);
159 160
160 if (folderCopy == null) 161 if (folderCopy == null)
@@ -247,52 +248,51 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
247 // It will have been pushed to the client, too 248 // It will have been pushed to the client, too
248 // 249 //
249 250
250 CachedUserInfo userInfo = 251 //CachedUserInfo userInfo =
251 scene.CommsManager.UserProfileCacheService. 252 // scene.CommsManager.UserProfileCacheService.
252 GetUserDetails(client.AgentId); 253 // GetUserDetails(client.AgentId);
254 IInventoryService invService = scene.InventoryService;
253 255
254 if (userInfo != null) 256 InventoryFolderBase trashFolder =
255 { 257 invService.GetFolderForType(client.AgentId, AssetType.TrashFolder);
256 InventoryFolderImpl trashFolder = 258
257 userInfo.FindFolderForType((int)AssetType.TrashFolder); 259 UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
258
259 UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
260
261 InventoryItemBase item = userInfo.RootFolder.FindItem(inventoryEntityID);
262 InventoryFolderBase folder = null;
263 260
264 if (item != null && trashFolder != null) 261 InventoryItemBase item = invService.GetItem(new InventoryItemBase(inventoryEntityID));
265 { 262 InventoryFolderBase folder = null;
266 item.Folder = trashFolder.ID; 263
267 264 if (item != null && trashFolder != null)
268 userInfo.DeleteItem(inventoryEntityID); 265 {
266 item.Folder = trashFolder.ID;
269 267
270 scene.AddInventoryItem(client, item); 268 // Diva comment: can't we just update this item???
271 } 269 invService.DeleteItem(item);
272 else 270 scene.AddInventoryItem(client, item);
271 }
272 else
273 {
274 folder = invService.GetFolder(new InventoryFolderBase(inventoryEntityID));
275
276 if (folder != null & trashFolder != null)
273 { 277 {
274 folder = userInfo.RootFolder.FindFolder(inventoryEntityID); 278 folder.ParentID = trashFolder.ID;
275 279 invService.MoveFolder(folder);
276 if (folder != null & trashFolder != null)
277 {
278 userInfo.MoveFolder(inventoryEntityID, trashFolder.ID);
279 }
280 } 280 }
281 }
282
283 if ((null == item && null == folder) | null == trashFolder)
284 {
285 string reason = String.Empty;
281 286
282 if ((null == item && null == folder) | null == trashFolder) 287 if (trashFolder == null)
283 { 288 reason += " Trash folder not found.";
284 string reason = String.Empty; 289 if (item == null)
285 290 reason += " Item not found.";
286 if (trashFolder == null) 291 if (folder == null)
287 reason += " Trash folder not found."; 292 reason += " Folder not found.";
288 if (item == null) 293
289 reason += " Item not found."; 294 client.SendAgentAlertMessage("Unable to delete "+
290 if (folder == null) 295 "received inventory" + reason, false);
291 reason += " Folder not found.";
292
293 client.SendAgentAlertMessage("Unable to delete "+
294 "received inventory" + reason, false);
295 }
296 } 296 }
297 297
298 ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); 298 ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID));
@@ -405,17 +405,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
405 return; 405 return;
406 } 406 }
407 407
408 CachedUserInfo userInfo = 408 //CachedUserInfo userInfo =
409 scene.CommsManager.UserProfileCacheService. 409 // scene.CommsManager.UserProfileCacheService.
410 GetUserDetails(user.ControllingClient.AgentId); 410 // GetUserDetails(user.ControllingClient.AgentId);
411 411
412 if (userInfo == null) 412 //if (userInfo == null)
413 { 413 //{
414 m_log.Debug("[INVENTORY TRANSFER] Can't find user info of recipient"); 414 // m_log.Debug("[INVENTORY TRANSFER] Can't find user info of recipient");
415 return; 415 // return;
416 } 416 //}
417 417
418 AssetType assetType = (AssetType)msg.binaryBucket[0]; 418 AssetType assetType = (AssetType)msg.binaryBucket[0];
419 IInventoryService invService = scene.InventoryService;
419 420
420 if (AssetType.Folder == assetType) 421 if (AssetType.Folder == assetType)
421 { 422 {
@@ -425,31 +426,23 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
425 folder.ID = folderID; 426 folder.ID = folderID;
426 folder.Owner = user.ControllingClient.AgentId; 427 folder.Owner = user.ControllingClient.AgentId;
427 428
428 // Fetch from database 429 // Fetch from service
429 // 430 //
430 if (!userInfo.QueryFolder(folder)) 431 folder = invService.GetFolder(folder);
432 if (folder == null)
431 { 433 {
432 m_log.Debug("[INVENTORY TRANSFER] Can't find folder to give"); 434 m_log.Debug("[INVENTORY TRANSFER] Can't find folder to give");
433 return; 435 return;
434 } 436 }
435 437
436 // Get folder info 438 user.ControllingClient.SendBulkUpdateInventory(folder);
437 //
438 InventoryFolderImpl folderInfo = userInfo.RootFolder.FindFolder(folder.ID);
439 if (folderInfo == null)
440 {
441 m_log.Debug("[INVENTORY TRANSFER] Can't retrieve folder to give");
442 return;
443 }
444
445 user.ControllingClient.SendBulkUpdateInventory(folderInfo);
446 439
447 // This unelegant, slow kludge is to reload the folders and 440 //// This unelegant, slow kludge is to reload the folders and
448 // items. Since a folder give can transfer subfolders and 441 //// items. Since a folder give can transfer subfolders and
449 // items, this is the easiest way to pull that stuff in 442 //// items, this is the easiest way to pull that stuff in
450 // 443 ////
451 userInfo.DropInventory(); 444 //userInfo.DropInventory();
452 userInfo.FetchInventory(); 445 //userInfo.FetchInventory();
453 446
454 // Deliver message 447 // Deliver message
455 // 448 //
@@ -463,20 +456,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
463 item.ID = itemID; 456 item.ID = itemID;
464 item.Owner = user.ControllingClient.AgentId; 457 item.Owner = user.ControllingClient.AgentId;
465 458
466 // Fetch from database 459 // Fetch from service
467 //
468 if (!userInfo.QueryItem(item))
469 {
470 m_log.Debug("[INVENTORY TRANSFER] Can't find item to give");
471 return;
472 }
473
474 // Get item info
475 // 460 //
476 item = userInfo.RootFolder.FindItem(item.ID); 461 item = invService.GetItem(item);
477 if (item == null) 462 if (item == null)
478 { 463 {
479 m_log.Debug("[INVENTORY TRANSFER] Can't retrieve item to give"); 464 m_log.Debug("[INVENTORY TRANSFER] Can't find item to give");
480 return; 465 return;
481 } 466 }
482 467