mirror of
https://github.com/opensim/opensim.git
synced 2026-08-07 01:35:46 +08:00
Merge branch 'master' into careminster
Conflicts: OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs OpenSim/Region/CoreModules/World/Land/LandObject.cs OpenSim/Region/Framework/Scenes/Scene.Inventory.cs OpenSim/Region/Framework/Scenes/SceneObjectPart.cs OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
This commit is contained in:
@@ -36,6 +36,7 @@ using OpenMetaverse.Packets;
|
||||
using log4net;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework;
|
||||
using OpenSim.Framework.Client;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes.Serialization;
|
||||
|
||||
@@ -117,20 +118,43 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
/// <param name="item"></param>
|
||||
public bool AddInventoryItem(InventoryItemBase item)
|
||||
{
|
||||
InventoryFolderBase folder;
|
||||
|
||||
if (item.Folder == UUID.Zero)
|
||||
if (item.Folder != UUID.Zero && InventoryService.AddItem(item))
|
||||
{
|
||||
folder = InventoryService.GetFolderForType(item.Owner, (AssetType)item.AssetType);
|
||||
if (folder == null)
|
||||
int userlevel = 0;
|
||||
if (Permissions.IsGod(item.Owner))
|
||||
{
|
||||
folder = InventoryService.GetRootFolder(item.Owner);
|
||||
|
||||
if (folder == null)
|
||||
return false;
|
||||
userlevel = 1;
|
||||
}
|
||||
EventManager.TriggerOnNewInventoryItemUploadComplete(item.Owner, item.AssetID, item.Name, userlevel);
|
||||
|
||||
item.Folder = folder.ID;
|
||||
return true;
|
||||
}
|
||||
|
||||
// OK so either the viewer didn't send a folderID or AddItem failed
|
||||
UUID originalFolder = item.Folder;
|
||||
InventoryFolderBase f = InventoryService.GetFolderForType(item.Owner, (AssetType)item.AssetType);
|
||||
if (f != null)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[AGENT INVENTORY]: Found folder {0} type {1} for item {2}",
|
||||
f.Name, (AssetType)f.Type, item.Name);
|
||||
|
||||
item.Folder = f.ID;
|
||||
}
|
||||
else
|
||||
{
|
||||
f = InventoryService.GetRootFolder(item.Owner);
|
||||
if (f != null)
|
||||
{
|
||||
item.Folder = f.ID;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.WarnFormat(
|
||||
"[AGENT INVENTORY]: Could not find root folder for {0} when trying to add item {1} with no parent folder specified",
|
||||
item.Owner, item.Name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (InventoryService.AddItem(item))
|
||||
@@ -141,7 +165,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
userlevel = 1;
|
||||
}
|
||||
EventManager.TriggerOnNewInventoryItemUploadComplete(item.Owner, item.AssetID, item.Name, userlevel);
|
||||
|
||||
|
||||
if (originalFolder != UUID.Zero)
|
||||
{
|
||||
// Tell the viewer that the item didn't go there
|
||||
ChangePlacement(item, f);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
@@ -153,7 +183,32 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void ChangePlacement(InventoryItemBase item, InventoryFolderBase f)
|
||||
{
|
||||
ScenePresence sp = GetScenePresence(item.Owner);
|
||||
if (sp != null)
|
||||
{
|
||||
if (sp.ControllingClient is IClientCore)
|
||||
{
|
||||
IClientCore core = (IClientCore)sp.ControllingClient;
|
||||
IClientInventory inv;
|
||||
|
||||
if (core.TryGet<IClientInventory>(out inv))
|
||||
{
|
||||
InventoryFolderBase parent = new InventoryFolderBase(f.ParentID, f.Owner);
|
||||
parent = InventoryService.GetFolder(parent);
|
||||
inv.SendRemoveInventoryItems(new UUID[] { item.ID });
|
||||
inv.SendBulkUpdateInventory(new InventoryFolderBase[0], new InventoryItemBase[] { item });
|
||||
string message = "The item was placed in folder " + f.Name;
|
||||
if (parent != null)
|
||||
message += " under " + parent.Name;
|
||||
sp.ControllingClient.SendAgentAlertMessage(message, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add the given inventory item to a user's inventory.
|
||||
/// </summary>
|
||||
@@ -2085,7 +2140,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
item.CreationDate = Util.UnixTimeSinceEpoch();
|
||||
|
||||
// sets itemID so client can show item as 'attached' in inventory
|
||||
grp.SetFromItemID(item.ID);
|
||||
grp.FromItemID = item.ID;
|
||||
|
||||
if (AddInventoryItem(item))
|
||||
remoteClient.SendInventoryItemCreateUpdate(item, 0);
|
||||
|
||||
Reference in New Issue
Block a user