diff options
Diffstat (limited to 'OpenSim/Region')
5 files changed, 72 insertions, 3 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 130c869..2a513e9 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -407,6 +407,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
407 | 407 | ||
408 | public void DetachSingleAttachmentToGround(IScenePresence sp, uint soLocalId) | 408 | public void DetachSingleAttachmentToGround(IScenePresence sp, uint soLocalId) |
409 | { | 409 | { |
410 | DetachSingleAttachmentToGround(sp, soLocalId, sp.AbsolutePosition, Quaternion.Identity); | ||
411 | } | ||
412 | |||
413 | public void DetachSingleAttachmentToGround(IScenePresence sp, uint soLocalId, Vector3 absolutePos, Quaternion absoluteRot) | ||
414 | { | ||
410 | if (!Enabled) | 415 | if (!Enabled) |
411 | return; | 416 | return; |
412 | 417 | ||
@@ -448,7 +453,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
448 | so.FromItemID = UUID.Zero; | 453 | so.FromItemID = UUID.Zero; |
449 | 454 | ||
450 | SceneObjectPart rootPart = so.RootPart; | 455 | SceneObjectPart rootPart = so.RootPart; |
451 | so.AbsolutePosition = sp.AbsolutePosition; | 456 | so.AbsolutePosition = absolutePos; |
457 | if (absoluteRot != Quaternion.Identity) | ||
458 | { | ||
459 | so.UpdateGroupRotationR(absoluteRot); | ||
460 | } | ||
452 | so.AttachedAvatar = UUID.Zero; | 461 | so.AttachedAvatar = UUID.Zero; |
453 | rootPart.SetParentLocalId(0); | 462 | rootPart.SetParentLocalId(0); |
454 | so.ClearPartAttachmentData(); | 463 | so.ClearPartAttachmentData(); |
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs index 8155eab..620ec22 100644 --- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs | |||
@@ -109,6 +109,15 @@ namespace OpenSim.Region.Framework.Interfaces | |||
109 | void DetachSingleAttachmentToGround(IScenePresence sp, uint objectLocalID); | 109 | void DetachSingleAttachmentToGround(IScenePresence sp, uint objectLocalID); |
110 | 110 | ||
111 | /// <summary> | 111 | /// <summary> |
112 | /// Detach the given item to the ground at the specified coordinates & rotation | ||
113 | /// </summary> | ||
114 | /// <param name="sp"></param> | ||
115 | /// <param name="objectLocalID"></param> | ||
116 | /// <param name="absolutePos"></param> | ||
117 | /// <param name="absoluteRot"></param> | ||
118 | void DetachSingleAttachmentToGround(IScenePresence sp, uint objectLocalID, Vector3 absolutePos, Quaternion absoluteRot); | ||
119 | |||
120 | /// <summary> | ||
112 | /// Detach the given attachment so that it remains in the user's inventory. | 121 | /// Detach the given attachment so that it remains in the user's inventory. |
113 | /// </summary> | 122 | /// </summary> |
114 | /// <param name="sp">/param> | 123 | /// <param name="sp">/param> |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 8b73cd9..fec8a67 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -3549,6 +3549,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3549 | if (m_UrlModule != null) | 3549 | if (m_UrlModule != null) |
3550 | m_UrlModule.HttpContentType(new UUID(id),type); | 3550 | m_UrlModule.HttpContentType(new UUID(id),type); |
3551 | } | 3551 | } |
3552 | 3552 | ||
3553 | } | 3553 | public void osDropAttachment() |
3554 | { | ||
3555 | CheckThreatLevel(ThreatLevel.Moderate, "osDropAttachment"); | ||
3556 | m_host.AddScriptLPS(1); | ||
3557 | |||
3558 | IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule; | ||
3559 | ScenePresence sp = attachmentsModule == null ? null : m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.OwnerID); | ||
3560 | |||
3561 | if (attachmentsModule != null && sp != null) | ||
3562 | { | ||
3563 | attachmentsModule.DetachSingleAttachmentToGround(sp, m_host.ParentGroup.LocalId); | ||
3564 | } | ||
3565 | } | ||
3566 | |||
3567 | public void osDropAttachmentAt(LSL_Vector pos, LSL_Rotation rot) | ||
3568 | { | ||
3569 | CheckThreatLevel(ThreatLevel.Moderate, "osDropAttachment"); | ||
3570 | m_host.AddScriptLPS(1); | ||
3571 | |||
3572 | IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule; | ||
3573 | ScenePresence sp = attachmentsModule == null ? null : m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.OwnerID); | ||
3574 | |||
3575 | if (attachmentsModule != null && sp != null) | ||
3576 | { | ||
3577 | Vector3 omvPos = new Vector3((float)pos.x, (float)pos.y, (float)pos.z); | ||
3578 | Quaternion omvRot = LSL_Api.Rot2Quaternion(rot); | ||
3579 | attachmentsModule.DetachSingleAttachmentToGround(sp, m_host.ParentGroup.LocalId, omvPos, omvRot); | ||
3580 | } | ||
3581 | } | ||
3582 | } | ||
3554 | } \ No newline at end of file | 3583 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index 3985e66..e28473d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | |||
@@ -394,5 +394,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
394 | /// </summary> | 394 | /// </summary> |
395 | /// <returns></returns> | 395 | /// <returns></returns> |
396 | void osSetContentType(LSL_Key id, string type); | 396 | void osSetContentType(LSL_Key id, string type); |
397 | |||
398 | /// <summary> | ||
399 | /// Attempts to drop an attachment to the ground | ||
400 | /// </summary> | ||
401 | void osDropAttachment(); | ||
402 | |||
403 | /// <summary> | ||
404 | /// Attempts to drop an attachment at the specified coordinates. | ||
405 | /// </summary> | ||
406 | /// <param name="pos"></param> | ||
407 | /// <param name="rot"></param> | ||
408 | void osDropAttachmentAt(vector pos, rotation rot); | ||
397 | } | 409 | } |
398 | } | 410 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 52ca3da..bae5594 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -972,5 +972,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
972 | { | 972 | { |
973 | m_OSSL_Functions.osSetContentType(id,type); | 973 | m_OSSL_Functions.osSetContentType(id,type); |
974 | } | 974 | } |
975 | |||
976 | public void osDropAttachment() | ||
977 | { | ||
978 | m_OSSL_Functions.osDropAttachment(); | ||
979 | } | ||
980 | |||
981 | public void osDropAttachmentAt(vector pos, rotation rot) | ||
982 | { | ||
983 | m_OSSL_Functions.osDropAttachmentAt(pos, rot); | ||
984 | } | ||
975 | } | 985 | } |
976 | } | 986 | } |