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.bulletsim
parent
621d5b58e1
commit
98d7de22dc
|
@ -552,8 +552,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Rez an object into the scene from the user's inventory
|
/// Rez an object into the scene from the user's inventory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
/// FIXME: It would be really nice if inventory access modules didn't also actually do the work of rezzing
|
/// FIXME: It would be really nice if inventory access modules didn't also actually do the work of rezzing
|
||||||
/// things to the scene. The caller should be doing that, I think.
|
/// things to the scene. The caller should be doing that, I think.
|
||||||
|
/// </remarks>
|
||||||
/// <param name="remoteClient"></param>
|
/// <param name="remoteClient"></param>
|
||||||
/// <param name="itemID"></param>
|
/// <param name="itemID"></param>
|
||||||
/// <param name="RayEnd"></param>
|
/// <param name="RayEnd"></param>
|
||||||
|
@ -570,6 +572,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
||||||
bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment)
|
bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[INVENTORY ACCESS MODULE]: RezObject for {0}, item {1}", remoteClient.Name, itemID);
|
||||||
|
|
||||||
// Work out position details
|
// Work out position details
|
||||||
byte bRayEndIsIntersection = (byte)0;
|
byte bRayEndIsIntersection = (byte)0;
|
||||||
|
|
||||||
|
|
|
@ -1955,12 +1955,61 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
||||||
bool RezSelected, bool RemoveItem, UUID fromTaskID)
|
bool RezSelected, bool RemoveItem, UUID fromTaskID)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[PRIM INVENTORY]: RezObject from {0} for item {1} from task id {2}",
|
||||||
|
// remoteClient.Name, itemID, fromTaskID);
|
||||||
|
|
||||||
|
if (fromTaskID == UUID.Zero)
|
||||||
|
{
|
||||||
IInventoryAccessModule invAccess = RequestModuleInterface<IInventoryAccessModule>();
|
IInventoryAccessModule invAccess = RequestModuleInterface<IInventoryAccessModule>();
|
||||||
if (invAccess != null)
|
if (invAccess != null)
|
||||||
invAccess.RezObject(
|
invAccess.RezObject(
|
||||||
remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection,
|
remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection,
|
||||||
RezSelected, RemoveItem, fromTaskID, false);
|
RezSelected, RemoveItem, fromTaskID, false);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SceneObjectPart part = GetSceneObjectPart(fromTaskID);
|
||||||
|
if (part == null)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[TASK INVENTORY]: {0} tried to rez item id {1} from object id {2} but there is no such scene object",
|
||||||
|
remoteClient.Name, itemID, fromTaskID);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TaskInventoryItem item = part.Inventory.GetInventoryItem(itemID);
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[TASK INVENTORY]: {0} tried to rez item id {1} from object id {2} but there is no such item",
|
||||||
|
remoteClient.Name, itemID, fromTaskID);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Work out position details
|
||||||
|
byte bRayEndIsIntersection = (byte)0;
|
||||||
|
|
||||||
|
if (RayEndIsIntersection)
|
||||||
|
{
|
||||||
|
bRayEndIsIntersection = (byte)1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bRayEndIsIntersection = (byte)0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 scale = new Vector3(0.5f, 0.5f, 0.5f);
|
||||||
|
Vector3 pos
|
||||||
|
= GetNewRezLocation(
|
||||||
|
RayStart, RayEnd, RayTargetID, Quaternion.Identity,
|
||||||
|
BypassRayCast, bRayEndIsIntersection, true, scale, false);
|
||||||
|
|
||||||
|
RezObject(part, item, pos, Quaternion.Identity, Vector3.Zero, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Rez an object into the scene from a prim's inventory.
|
/// Rez an object into the scene from a prim's inventory.
|
||||||
|
|
Loading…
Reference in New Issue