diff options
author | Justin Clark-Casey (justincc) | 2011-04-12 18:31:41 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-04-12 18:31:41 +0100 |
commit | 98d7de22dc44ca1e5971301c02a6a1fe49620889 (patch) | |
tree | c9c7eb66ec3d1bb81d0005508e3ec3e87d628a3b /OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |
parent | minor: add a bit more method doc to IInventoryService.GetItem() (diff) | |
download | opensim-SC_OLD-98d7de22dc44ca1e5971301c02a6a1fe49620889.zip opensim-SC_OLD-98d7de22dc44ca1e5971301c02a6a1fe49620889.tar.gz opensim-SC_OLD-98d7de22dc44ca1e5971301c02a6a1fe49620889.tar.bz2 opensim-SC_OLD-98d7de22dc44ca1e5971301c02a6a1fe49620889.tar.xz |
Fix (add) ability to rez objects by dragging them out of another prim's inventory.
This should happen if the client supplies a task ID with the RezObject call.
The rez goes through the same code as llRezObject(), so the same perms are applied.
Rotation isn't yet preserved, this should be fixed shortly.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 59 |
1 files changed, 54 insertions, 5 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 73dd531..4370850 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1955,11 +1955,60 @@ namespace OpenSim.Region.Framework.Scenes | |||
1955 | UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, | 1955 | UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, |
1956 | bool RezSelected, bool RemoveItem, UUID fromTaskID) | 1956 | bool RezSelected, bool RemoveItem, UUID fromTaskID) |
1957 | { | 1957 | { |
1958 | IInventoryAccessModule invAccess = RequestModuleInterface<IInventoryAccessModule>(); | 1958 | // m_log.DebugFormat( |
1959 | if (invAccess != null) | 1959 | // "[PRIM INVENTORY]: RezObject from {0} for item {1} from task id {2}", |
1960 | invAccess.RezObject( | 1960 | // remoteClient.Name, itemID, fromTaskID); |
1961 | remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection, | 1961 | |
1962 | RezSelected, RemoveItem, fromTaskID, false); | 1962 | if (fromTaskID == UUID.Zero) |
1963 | { | ||
1964 | IInventoryAccessModule invAccess = RequestModuleInterface<IInventoryAccessModule>(); | ||
1965 | if (invAccess != null) | ||
1966 | invAccess.RezObject( | ||
1967 | remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection, | ||
1968 | RezSelected, RemoveItem, fromTaskID, false); | ||
1969 | } | ||
1970 | else | ||
1971 | { | ||
1972 | SceneObjectPart part = GetSceneObjectPart(fromTaskID); | ||
1973 | if (part == null) | ||
1974 | { | ||
1975 | m_log.ErrorFormat( | ||
1976 | "[TASK INVENTORY]: {0} tried to rez item id {1} from object id {2} but there is no such scene object", | ||
1977 | remoteClient.Name, itemID, fromTaskID); | ||
1978 | |||
1979 | return; | ||
1980 | } | ||
1981 | |||
1982 | TaskInventoryItem item = part.Inventory.GetInventoryItem(itemID); | ||
1983 | if (item == null) | ||
1984 | { | ||
1985 | m_log.ErrorFormat( | ||
1986 | "[TASK INVENTORY]: {0} tried to rez item id {1} from object id {2} but there is no such item", | ||
1987 | remoteClient.Name, itemID, fromTaskID); | ||
1988 | |||
1989 | return; | ||
1990 | } | ||
1991 | |||
1992 | // Work out position details | ||
1993 | byte bRayEndIsIntersection = (byte)0; | ||
1994 | |||
1995 | if (RayEndIsIntersection) | ||
1996 | { | ||
1997 | bRayEndIsIntersection = (byte)1; | ||
1998 | } | ||
1999 | else | ||
2000 | { | ||
2001 | bRayEndIsIntersection = (byte)0; | ||
2002 | } | ||
2003 | |||
2004 | Vector3 scale = new Vector3(0.5f, 0.5f, 0.5f); | ||
2005 | Vector3 pos | ||
2006 | = GetNewRezLocation( | ||
2007 | RayStart, RayEnd, RayTargetID, Quaternion.Identity, | ||
2008 | BypassRayCast, bRayEndIsIntersection, true, scale, false); | ||
2009 | |||
2010 | RezObject(part, item, pos, Quaternion.Identity, Vector3.Zero, 0); | ||
2011 | } | ||
1963 | } | 2012 | } |
1964 | 2013 | ||
1965 | /// <summary> | 2014 | /// <summary> |