diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 403 |
1 files changed, 198 insertions, 205 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index c7c416c..acab734 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -305,14 +305,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
305 | } | 305 | } |
306 | } | 306 | } |
307 | } | 307 | } |
308 | 308 | ||
309 | return UUID.Zero; | 309 | return UUID.Zero; |
310 | } | 310 | } |
311 | 311 | ||
312 | protected UUID InventoryKey(string name) | 312 | protected UUID InventoryKey(string name) |
313 | { | 313 | { |
314 | m_host.AddScriptLPS(1); | 314 | m_host.AddScriptLPS(1); |
315 | 315 | ||
316 | lock (m_host.TaskInventory) | 316 | lock (m_host.TaskInventory) |
317 | { | 317 | { |
318 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) | 318 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) |
@@ -323,7 +323,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
323 | } | 323 | } |
324 | } | 324 | } |
325 | } | 325 | } |
326 | 326 | ||
327 | return UUID.Zero; | 327 | return UUID.Zero; |
328 | } | 328 | } |
329 | 329 | ||
@@ -1580,7 +1580,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1580 | /// Set a light point on a part | 1580 | /// Set a light point on a part |
1581 | /// </summary> | 1581 | /// </summary> |
1582 | /// FIXME: Much of this code should probably be in SceneObjectGroup | 1582 | /// FIXME: Much of this code should probably be in SceneObjectGroup |
1583 | /// | 1583 | /// |
1584 | /// <param name="part"></param> | 1584 | /// <param name="part"></param> |
1585 | /// <param name="light"></param> | 1585 | /// <param name="light"></param> |
1586 | /// <param name="color"></param> | 1586 | /// <param name="color"></param> |
@@ -1633,7 +1633,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1633 | rgb.y += texcolor.G; | 1633 | rgb.y += texcolor.G; |
1634 | rgb.z += texcolor.B; | 1634 | rgb.z += texcolor.B; |
1635 | } | 1635 | } |
1636 | 1636 | ||
1637 | rgb.x /= (float)GetNumberOfSides(part); | 1637 | rgb.x /= (float)GetNumberOfSides(part); |
1638 | rgb.y /= (float)GetNumberOfSides(part); | 1638 | rgb.y /= (float)GetNumberOfSides(part); |
1639 | rgb.z /= (float)GetNumberOfSides(part); | 1639 | rgb.z /= (float)GetNumberOfSides(part); |
@@ -1849,16 +1849,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1849 | 1849 | ||
1850 | ScriptSleep(200); | 1850 | ScriptSleep(200); |
1851 | } | 1851 | } |
1852 | // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) | 1852 | |
1853 | // note linked setpos is capped "differently" | 1853 | // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) |
1854 | private LSL_Vector SetPosAdjust(LSL_Vector start, LSL_Vector end) | 1854 | // note linked setpos is capped "differently" |
1855 | { | 1855 | private LSL_Vector SetPosAdjust(LSL_Vector start, LSL_Vector end) |
1856 | if ( llVecDist(start, end) > 10.0f * m_ScriptDistanceFactor ) { | 1856 | { |
1857 | return start + m_ScriptDistanceFactor * 10.0f * llVecNorm(end - start); | 1857 | if (llVecDist(start, end) > 10.0f * m_ScriptDistanceFactor) |
1858 | } else { | 1858 | return start + m_ScriptDistanceFactor * 10.0f * llVecNorm(end - start); |
1859 | return end; | 1859 | else |
1860 | } | 1860 | return end; |
1861 | } | 1861 | } |
1862 | |||
1862 | protected void SetPos(SceneObjectPart part, LSL_Vector targetPos) | 1863 | protected void SetPos(SceneObjectPart part, LSL_Vector targetPos) |
1863 | { | 1864 | { |
1864 | // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) | 1865 | // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) |
@@ -1867,32 +1868,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1867 | float ground = World.GetGroundHeight((float)targetPos.x, (float)targetPos.y); | 1868 | float ground = World.GetGroundHeight((float)targetPos.x, (float)targetPos.y); |
1868 | bool disable_underground_movement = m_ScriptEngine.Config.GetBoolean("DisableUndergroundMovement", true); | 1869 | bool disable_underground_movement = m_ScriptEngine.Config.GetBoolean("DisableUndergroundMovement", true); |
1869 | 1870 | ||
1870 | |||
1871 | if (part.ParentGroup == null) | 1871 | if (part.ParentGroup == null) |
1872 | { | 1872 | { |
1873 | if ((targetPos.z < ground) && disable_underground_movement) | 1873 | if ((targetPos.z < ground) && disable_underground_movement) |
1874 | targetPos.z = ground; | 1874 | targetPos.z = ground; |
1875 | LSL_Vector real_vec = SetPosAdjust(currentPos, targetPos); | 1875 | LSL_Vector real_vec = SetPosAdjust(currentPos, targetPos); |
1876 | part.UpdateOffSet(new Vector3((float)real_vec.x, (float)real_vec.y, (float)real_vec.z)); } | 1876 | part.UpdateOffSet(new Vector3((float)real_vec.x, (float)real_vec.y, (float)real_vec.z)); |
1877 | } | ||
1877 | else if (part.ParentGroup.RootPart == part) | 1878 | else if (part.ParentGroup.RootPart == part) |
1878 | { | 1879 | { |
1879 | if ((targetPos.z < ground) && disable_underground_movement) | 1880 | if ((targetPos.z < ground) && disable_underground_movement) |
1880 | targetPos.z = ground; | 1881 | targetPos.z = ground; |
1881 | SceneObjectGroup parent = part.ParentGroup; | 1882 | SceneObjectGroup parent = part.ParentGroup; |
1882 | LSL_Vector real_vec = SetPosAdjust(currentPos, targetPos); | 1883 | LSL_Vector real_vec = SetPosAdjust(currentPos, targetPos); |
1883 | parent.UpdateGroupPosition(new Vector3((float)real_vec.x, (float)real_vec.y, (float)real_vec.z)); | 1884 | parent.UpdateGroupPosition(new Vector3((float)real_vec.x, (float)real_vec.y, (float)real_vec.z)); |
1884 | } | 1885 | } |
1885 | else | 1886 | else |
1886 | { | 1887 | { |
1887 | //it's late... i think this is right ? | 1888 | //it's late... i think this is right ? |
1888 | if ( llVecDist(new LSL_Vector(0,0,0), targetPos) <= 10.0f ) | 1889 | if (llVecDist(new LSL_Vector(0,0,0), targetPos) <= 10.0f) |
1889 | { | 1890 | { |
1890 | part.OffsetPosition = new Vector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z); | 1891 | part.OffsetPosition = new Vector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z); |
1891 | SceneObjectGroup parent = part.ParentGroup; | 1892 | SceneObjectGroup parent = part.ParentGroup; |
1892 | parent.HasGroupChanged = true; | 1893 | parent.HasGroupChanged = true; |
1893 | parent.ScheduleGroupForTerseUpdate(); | 1894 | parent.ScheduleGroupForTerseUpdate(); |
1894 | } | 1895 | } |
1895 | } | 1896 | } |
1896 | } | 1897 | } |
1897 | 1898 | ||
1898 | public LSL_Vector llGetPos() | 1899 | public LSL_Vector llGetPos() |
@@ -1908,14 +1909,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1908 | if (m_host.ParentID != 0) | 1909 | if (m_host.ParentID != 0) |
1909 | { | 1910 | { |
1910 | return new LSL_Vector(m_host.OffsetPosition.X, | 1911 | return new LSL_Vector(m_host.OffsetPosition.X, |
1911 | m_host.OffsetPosition.Y, | 1912 | m_host.OffsetPosition.Y, |
1912 | m_host.OffsetPosition.Z); | 1913 | m_host.OffsetPosition.Z); |
1913 | } | 1914 | } |
1914 | else | 1915 | else |
1915 | { | 1916 | { |
1916 | return new LSL_Vector(m_host.AbsolutePosition.X, | 1917 | return new LSL_Vector(m_host.AbsolutePosition.X, |
1917 | m_host.AbsolutePosition.Y, | 1918 | m_host.AbsolutePosition.Y, |
1918 | m_host.AbsolutePosition.Z); | 1919 | m_host.AbsolutePosition.Z); |
1919 | } | 1920 | } |
1920 | } | 1921 | } |
1921 | 1922 | ||
@@ -2072,7 +2073,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2072 | { | 2073 | { |
2073 | m_host.AddScriptLPS(1); | 2074 | m_host.AddScriptLPS(1); |
2074 | m_host.ApplyAngularImpulse(new Vector3((float)force.x, (float)force.y, (float)force.z), local != 0); | 2075 | m_host.ApplyAngularImpulse(new Vector3((float)force.x, (float)force.y, (float)force.z), local != 0); |
2075 | |||
2076 | } | 2076 | } |
2077 | 2077 | ||
2078 | public void llSetTorque(LSL_Vector torque, int local) | 2078 | public void llSetTorque(LSL_Vector torque, int local) |
@@ -2481,12 +2481,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2481 | m_host.AddScriptLPS(1); | 2481 | m_host.AddScriptLPS(1); |
2482 | 2482 | ||
2483 | TaskInventoryItem item = m_host.TaskInventory[invItemID]; | 2483 | TaskInventoryItem item = m_host.TaskInventory[invItemID]; |
2484 | 2484 | ||
2485 | lock (m_host.TaskInventory) | 2485 | lock (m_host.TaskInventory) |
2486 | { | 2486 | { |
2487 | item = m_host.TaskInventory[invItemID]; | 2487 | item = m_host.TaskInventory[invItemID]; |
2488 | } | 2488 | } |
2489 | 2489 | ||
2490 | if (item.PermsGranter == UUID.Zero) | 2490 | if (item.PermsGranter == UUID.Zero) |
2491 | return 0; | 2491 | return 0; |
2492 | 2492 | ||
@@ -2512,9 +2512,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2512 | return 0; | 2512 | return 0; |
2513 | } | 2513 | } |
2514 | 2514 | ||
2515 | bool result | 2515 | bool result = money.ObjectGiveMoney( |
2516 | = money.ObjectGiveMoney( | 2516 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); |
2517 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); | ||
2518 | 2517 | ||
2519 | if (result) | 2518 | if (result) |
2520 | return 1; | 2519 | return 1; |
@@ -2560,7 +2559,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2560 | 2559 | ||
2561 | if (dist > m_ScriptDistanceFactor * 10.0f) | 2560 | if (dist > m_ScriptDistanceFactor * 10.0f) |
2562 | return; | 2561 | return; |
2563 | 2562 | ||
2564 | TaskInventoryDictionary partInventory = (TaskInventoryDictionary)m_host.TaskInventory.Clone(); | 2563 | TaskInventoryDictionary partInventory = (TaskInventoryDictionary)m_host.TaskInventory.Clone(); |
2565 | 2564 | ||
2566 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in partInventory) | 2565 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in partInventory) |
@@ -2610,7 +2609,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2610 | return; | 2609 | return; |
2611 | } | 2610 | } |
2612 | } | 2611 | } |
2613 | 2612 | ||
2614 | llSay(0, "Could not find object " + inventory); | 2613 | llSay(0, "Could not find object " + inventory); |
2615 | } | 2614 | } |
2616 | 2615 | ||
@@ -2622,29 +2621,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2622 | public void llLookAt(LSL_Vector target, double strength, double damping) | 2621 | public void llLookAt(LSL_Vector target, double strength, double damping) |
2623 | { | 2622 | { |
2624 | // partial implementation, rotates objects correctly but does not apply strength or damping attributes | 2623 | // partial implementation, rotates objects correctly but does not apply strength or damping attributes |
2625 | 2624 | ||
2626 | m_host.AddScriptLPS(1); | 2625 | m_host.AddScriptLPS(1); |
2627 | // Determine where we are looking from | 2626 | // Determine where we are looking from |
2628 | LSL_Vector from = llGetPos(); | 2627 | LSL_Vector from = llGetPos(); |
2629 | 2628 | ||
2630 | // Work out the normalised vector from the source to the target | 2629 | // Work out the normalised vector from the source to the target |
2631 | LSL_Vector delta = llVecNorm(target - from); | 2630 | LSL_Vector delta = llVecNorm(target - from); |
2632 | LSL_Vector angle = new LSL_Vector(0,0,0); | 2631 | LSL_Vector angle = new LSL_Vector(0,0,0); |
2633 | 2632 | ||
2634 | // Calculate the yaw | 2633 | // Calculate the yaw |
2635 | // subtracting PI_BY_TWO is required to compensate for the odd SL co-ordinate system | 2634 | // subtracting PI_BY_TWO is required to compensate for the odd SL co-ordinate system |
2636 | angle.x = llAtan2(delta.z, delta.y) - ScriptBaseClass.PI_BY_TWO; | 2635 | angle.x = llAtan2(delta.z, delta.y) - ScriptBaseClass.PI_BY_TWO; |
2637 | 2636 | ||
2638 | // Calculate pitch | 2637 | // Calculate pitch |
2639 | angle.y = llAtan2(delta.x, llSqrt((delta.y * delta.y) + (delta.z * delta.z))); | 2638 | angle.y = llAtan2(delta.x, llSqrt((delta.y * delta.y) + (delta.z * delta.z))); |
2640 | 2639 | ||
2641 | // we need to convert from a vector describing | 2640 | // we need to convert from a vector describing |
2642 | // the angles of rotation in radians into rotation value | 2641 | // the angles of rotation in radians into rotation value |
2643 | 2642 | ||
2644 | LSL_Types.Quaternion rot = llEuler2Rot(angle); | 2643 | LSL_Types.Quaternion rot = llEuler2Rot(angle); |
2645 | 2644 | ||
2646 | // Orient the object to the angle calculated | 2645 | // Orient the object to the angle calculated |
2647 | llSetRot(rot); | 2646 | llSetRot(rot); |
2648 | } | 2647 | } |
2649 | 2648 | ||
2650 | public void llStopLookAt() | 2649 | public void llStopLookAt() |
@@ -2683,7 +2682,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2683 | public void llTakeControls(int controls, int accept, int pass_on) | 2682 | public void llTakeControls(int controls, int accept, int pass_on) |
2684 | { | 2683 | { |
2685 | TaskInventoryItem item; | 2684 | TaskInventoryItem item; |
2686 | 2685 | ||
2687 | lock (m_host.TaskInventory) | 2686 | lock (m_host.TaskInventory) |
2688 | { | 2687 | { |
2689 | if (!m_host.TaskInventory.ContainsKey(InventorySelf())) | 2688 | if (!m_host.TaskInventory.ContainsKey(InventorySelf())) |
@@ -2691,7 +2690,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2691 | else | 2690 | else |
2692 | item = m_host.TaskInventory[InventorySelf()]; | 2691 | item = m_host.TaskInventory[InventorySelf()]; |
2693 | } | 2692 | } |
2694 | 2693 | ||
2695 | if (item.PermsGranter != UUID.Zero) | 2694 | if (item.PermsGranter != UUID.Zero) |
2696 | { | 2695 | { |
2697 | ScenePresence presence = World.GetScenePresence(item.PermsGranter); | 2696 | ScenePresence presence = World.GetScenePresence(item.PermsGranter); |
@@ -2709,9 +2708,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2709 | } | 2708 | } |
2710 | 2709 | ||
2711 | public void llReleaseControls() | 2710 | public void llReleaseControls() |
2712 | { | 2711 | { |
2713 | TaskInventoryItem item; | 2712 | TaskInventoryItem item; |
2714 | 2713 | ||
2715 | lock (m_host.TaskInventory) | 2714 | lock (m_host.TaskInventory) |
2716 | { | 2715 | { |
2717 | if (!m_host.TaskInventory.ContainsKey(InventorySelf())) | 2716 | if (!m_host.TaskInventory.ContainsKey(InventorySelf())) |
@@ -2719,7 +2718,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2719 | else | 2718 | else |
2720 | item = m_host.TaskInventory[InventorySelf()]; | 2719 | item = m_host.TaskInventory[InventorySelf()]; |
2721 | } | 2720 | } |
2722 | 2721 | ||
2723 | m_host.AddScriptLPS(1); | 2722 | m_host.AddScriptLPS(1); |
2724 | 2723 | ||
2725 | if (item.PermsGranter != UUID.Zero) | 2724 | if (item.PermsGranter != UUID.Zero) |
@@ -2762,7 +2761,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2762 | else | 2761 | else |
2763 | item = m_host.TaskInventory[InventorySelf()]; | 2762 | item = m_host.TaskInventory[InventorySelf()]; |
2764 | } | 2763 | } |
2765 | 2764 | ||
2766 | if (item.PermsGranter != m_host.OwnerID) | 2765 | if (item.PermsGranter != m_host.OwnerID) |
2767 | return; | 2766 | return; |
2768 | 2767 | ||
@@ -2794,7 +2793,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2794 | else | 2793 | else |
2795 | item = m_host.TaskInventory[InventorySelf()]; | 2794 | item = m_host.TaskInventory[InventorySelf()]; |
2796 | } | 2795 | } |
2797 | 2796 | ||
2798 | if (item.PermsGranter != m_host.OwnerID) | 2797 | if (item.PermsGranter != m_host.OwnerID) |
2799 | return; | 2798 | return; |
2800 | 2799 | ||
@@ -2934,7 +2933,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2934 | m_host.AddScriptLPS(1); | 2933 | m_host.AddScriptLPS(1); |
2935 | if (m_host.ParentGroup != null) | 2934 | if (m_host.ParentGroup != null) |
2936 | { | 2935 | { |
2937 | if (!m_host.ParentGroup.IsDeleted) | 2936 | if (!m_host.ParentGroup.IsDeleted) |
2938 | { | 2937 | { |
2939 | m_host.ParentGroup.RootPart.SetBuoyancy((float)buoyancy); | 2938 | m_host.ParentGroup.RootPart.SetBuoyancy((float)buoyancy); |
2940 | } | 2939 | } |
@@ -3022,7 +3021,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3022 | return; | 3021 | return; |
3023 | 3022 | ||
3024 | TaskInventoryItem item; | 3023 | TaskInventoryItem item; |
3025 | 3024 | ||
3026 | lock (m_host.TaskInventory) | 3025 | lock (m_host.TaskInventory) |
3027 | { | 3026 | { |
3028 | if (!m_host.TaskInventory.ContainsKey(InventorySelf())) | 3027 | if (!m_host.TaskInventory.ContainsKey(InventorySelf())) |
@@ -3030,7 +3029,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3030 | else | 3029 | else |
3031 | item = m_host.TaskInventory[InventorySelf()]; | 3030 | item = m_host.TaskInventory[InventorySelf()]; |
3032 | } | 3031 | } |
3033 | 3032 | ||
3034 | if (item.PermsGranter == UUID.Zero) | 3033 | if (item.PermsGranter == UUID.Zero) |
3035 | return; | 3034 | return; |
3036 | 3035 | ||
@@ -3057,16 +3056,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3057 | UUID invItemID=InventorySelf(); | 3056 | UUID invItemID=InventorySelf(); |
3058 | if (invItemID == UUID.Zero) | 3057 | if (invItemID == UUID.Zero) |
3059 | return; | 3058 | return; |
3060 | 3059 | ||
3061 | TaskInventoryItem item; | 3060 | TaskInventoryItem item; |
3062 | 3061 | ||
3063 | lock (m_host.TaskInventory) | 3062 | lock (m_host.TaskInventory) |
3064 | { | 3063 | { |
3065 | if (!m_host.TaskInventory.ContainsKey(InventorySelf())) | 3064 | if (!m_host.TaskInventory.ContainsKey(InventorySelf())) |
3066 | return; | 3065 | return; |
3067 | else | 3066 | else |
3068 | item = m_host.TaskInventory[InventorySelf()]; | 3067 | item = m_host.TaskInventory[InventorySelf()]; |
3069 | } | 3068 | } |
3070 | 3069 | ||
3071 | if (item.PermsGranter == UUID.Zero) | 3070 | if (item.PermsGranter == UUID.Zero) |
3072 | return; | 3071 | return; |
@@ -3137,13 +3136,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3137 | 3136 | ||
3138 | if (invItemID == UUID.Zero) | 3137 | if (invItemID == UUID.Zero) |
3139 | return; // Not in a prim? How?? | 3138 | return; // Not in a prim? How?? |
3140 | 3139 | ||
3141 | TaskInventoryItem item; | 3140 | TaskInventoryItem item; |
3142 | 3141 | ||
3143 | lock (m_host.TaskInventory) | 3142 | lock (m_host.TaskInventory) |
3144 | { | 3143 | { |
3145 | item = m_host.TaskInventory[invItemID]; | 3144 | item = m_host.TaskInventory[invItemID]; |
3146 | } | 3145 | } |
3147 | 3146 | ||
3148 | if (agentID == UUID.Zero || perm == 0) // Releasing permissions | 3147 | if (agentID == UUID.Zero || perm == 0) // Releasing permissions |
3149 | { | 3148 | { |
@@ -3229,14 +3228,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3229 | m_host.TaskInventory[invItemID].PermsGranter = agentID; | 3228 | m_host.TaskInventory[invItemID].PermsGranter = agentID; |
3230 | m_host.TaskInventory[invItemID].PermsMask = 0; | 3229 | m_host.TaskInventory[invItemID].PermsMask = 0; |
3231 | } | 3230 | } |
3232 | 3231 | ||
3233 | presence.ControllingClient.OnScriptAnswer += handleScriptAnswer; | 3232 | presence.ControllingClient.OnScriptAnswer += handleScriptAnswer; |
3234 | m_waitingForScriptAnswer=true; | 3233 | m_waitingForScriptAnswer=true; |
3235 | } | 3234 | } |
3236 | 3235 | ||
3237 | presence.ControllingClient.SendScriptQuestion( | 3236 | presence.ControllingClient.SendScriptQuestion( |
3238 | m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, invItemID, perm); | 3237 | m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, invItemID, perm); |
3239 | 3238 | ||
3240 | return; | 3239 | return; |
3241 | } | 3240 | } |
3242 | 3241 | ||
@@ -3262,7 +3261,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3262 | 3261 | ||
3263 | if ((answer & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0) | 3262 | if ((answer & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0) |
3264 | llReleaseControls(); | 3263 | llReleaseControls(); |
3265 | 3264 | ||
3266 | lock (m_host.TaskInventory) | 3265 | lock (m_host.TaskInventory) |
3267 | { | 3266 | { |
3268 | m_host.TaskInventory[invItemID].PermsMask = answer; | 3267 | m_host.TaskInventory[invItemID].PermsMask = answer; |
@@ -3303,7 +3302,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3303 | if (item.Type == 10 && item.ItemID == m_itemID) | 3302 | if (item.Type == 10 && item.ItemID == m_itemID) |
3304 | { | 3303 | { |
3305 | int perms = item.PermsMask; | 3304 | int perms = item.PermsMask; |
3306 | if (m_automaticLinkPermission) | 3305 | if (m_automaticLinkPermission) |
3307 | perms |= ScriptBaseClass.PERMISSION_CHANGE_LINKS; | 3306 | perms |= ScriptBaseClass.PERMISSION_CHANGE_LINKS; |
3308 | return perms; | 3307 | return perms; |
3309 | } | 3308 | } |
@@ -3339,15 +3338,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3339 | { | 3338 | { |
3340 | m_host.AddScriptLPS(1); | 3339 | m_host.AddScriptLPS(1); |
3341 | UUID invItemID = InventorySelf(); | 3340 | UUID invItemID = InventorySelf(); |
3342 | 3341 | ||
3343 | TaskInventoryItem item; | 3342 | TaskInventoryItem item; |
3344 | lock (m_host.TaskInventory) | 3343 | lock (m_host.TaskInventory) |
3345 | { | 3344 | { |
3346 | item = m_host.TaskInventory[invItemID]; | 3345 | item = m_host.TaskInventory[invItemID]; |
3347 | } | 3346 | } |
3348 | 3347 | ||
3349 | if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | 3348 | if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 |
3350 | && !m_automaticLinkPermission) | 3349 | && !m_automaticLinkPermission) |
3351 | { | 3350 | { |
3352 | ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); | 3351 | ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); |
3353 | return; | 3352 | return; |
@@ -3357,13 +3356,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3357 | ScenePresence sp = World.GetScenePresence(item.PermsGranter); | 3356 | ScenePresence sp = World.GetScenePresence(item.PermsGranter); |
3358 | if (sp != null) | 3357 | if (sp != null) |
3359 | client = sp.ControllingClient; | 3358 | client = sp.ControllingClient; |
3360 | 3359 | ||
3361 | SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)target); | 3360 | SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)target); |
3362 | 3361 | ||
3363 | if (targetPart.ParentGroup.RootPart.AttachmentPoint != 0) | 3362 | if (targetPart.ParentGroup.RootPart.AttachmentPoint != 0) |
3364 | return; // Fail silently if attached | 3363 | return; // Fail silently if attached |
3365 | SceneObjectGroup parentPrim = null, childPrim = null; | 3364 | SceneObjectGroup parentPrim = null, childPrim = null; |
3366 | 3365 | ||
3367 | if (targetPart != null) | 3366 | if (targetPart != null) |
3368 | { | 3367 | { |
3369 | if (parent != 0) { | 3368 | if (parent != 0) { |
@@ -3381,12 +3380,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3381 | // if (uf != (Byte)0) | 3380 | // if (uf != (Byte)0) |
3382 | // parent.RootPart.UpdateFlag = uf; | 3381 | // parent.RootPart.UpdateFlag = uf; |
3383 | } | 3382 | } |
3384 | 3383 | ||
3385 | parentPrim.TriggerScriptChangedEvent(Changed.LINK); | 3384 | parentPrim.TriggerScriptChangedEvent(Changed.LINK); |
3386 | parentPrim.RootPart.AddFlag(PrimFlags.CreateSelected); | 3385 | parentPrim.RootPart.AddFlag(PrimFlags.CreateSelected); |
3387 | parentPrim.HasGroupChanged = true; | 3386 | parentPrim.HasGroupChanged = true; |
3388 | parentPrim.ScheduleGroupForFullUpdate(); | 3387 | parentPrim.ScheduleGroupForFullUpdate(); |
3389 | 3388 | ||
3390 | if (client != null) | 3389 | if (client != null) |
3391 | parentPrim.GetProperties(client); | 3390 | parentPrim.GetProperties(client); |
3392 | 3391 | ||
@@ -3397,7 +3396,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3397 | { | 3396 | { |
3398 | m_host.AddScriptLPS(1); | 3397 | m_host.AddScriptLPS(1); |
3399 | UUID invItemID = InventorySelf(); | 3398 | UUID invItemID = InventorySelf(); |
3400 | 3399 | ||
3401 | lock (m_host.TaskInventory) | 3400 | lock (m_host.TaskInventory) |
3402 | { | 3401 | { |
3403 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | 3402 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 |
@@ -3407,16 +3406,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3407 | return; | 3406 | return; |
3408 | } | 3407 | } |
3409 | } | 3408 | } |
3410 | 3409 | ||
3411 | if (linknum < ScriptBaseClass.LINK_THIS) | 3410 | if (linknum < ScriptBaseClass.LINK_THIS) |
3412 | return; | 3411 | return; |
3413 | 3412 | ||
3414 | SceneObjectGroup parentPrim = m_host.ParentGroup; | 3413 | SceneObjectGroup parentPrim = m_host.ParentGroup; |
3415 | 3414 | ||
3416 | if (parentPrim.RootPart.AttachmentPoint != 0) | 3415 | if (parentPrim.RootPart.AttachmentPoint != 0) |
3417 | return; // Fail silently if attached | 3416 | return; // Fail silently if attached |
3418 | SceneObjectPart childPrim = null; | 3417 | SceneObjectPart childPrim = null; |
3419 | 3418 | ||
3420 | switch (linknum) | 3419 | switch (linknum) |
3421 | { | 3420 | { |
3422 | case ScriptBaseClass.LINK_ROOT: | 3421 | case ScriptBaseClass.LINK_ROOT: |
@@ -3440,7 +3439,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3440 | childPrim = null; | 3439 | childPrim = null; |
3441 | break; | 3440 | break; |
3442 | } | 3441 | } |
3443 | 3442 | ||
3444 | if (linknum == ScriptBaseClass.LINK_ROOT) | 3443 | if (linknum == ScriptBaseClass.LINK_ROOT) |
3445 | { | 3444 | { |
3446 | // Restructuring Multiple Prims. | 3445 | // Restructuring Multiple Prims. |
@@ -3451,8 +3450,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3451 | parentPrim.DelinkFromGroup(part.LocalId, true); | 3450 | parentPrim.DelinkFromGroup(part.LocalId, true); |
3452 | } | 3451 | } |
3453 | parentPrim.TriggerScriptChangedEvent(Changed.LINK); | 3452 | parentPrim.TriggerScriptChangedEvent(Changed.LINK); |
3454 | 3453 | ||
3455 | if (parts.Count > 0) | 3454 | if (parts.Count > 0) |
3456 | { | 3455 | { |
3457 | SceneObjectPart newRoot = parts[0]; | 3456 | SceneObjectPart newRoot = parts[0]; |
3458 | parts.Remove(newRoot); | 3457 | parts.Remove(newRoot); |
@@ -3467,7 +3466,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3467 | { | 3466 | { |
3468 | if (childPrim == null) | 3467 | if (childPrim == null) |
3469 | return; | 3468 | return; |
3470 | 3469 | ||
3471 | parentPrim.DelinkFromGroup(childPrim.LocalId, true); | 3470 | parentPrim.DelinkFromGroup(childPrim.LocalId, true); |
3472 | parentPrim.TriggerScriptChangedEvent(Changed.LINK); | 3471 | parentPrim.TriggerScriptChangedEvent(Changed.LINK); |
3473 | } | 3472 | } |
@@ -3479,10 +3478,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3479 | SceneObjectGroup parentPrim = m_host.ParentGroup; | 3478 | SceneObjectGroup parentPrim = m_host.ParentGroup; |
3480 | if (parentPrim.RootPart.AttachmentPoint != 0) | 3479 | if (parentPrim.RootPart.AttachmentPoint != 0) |
3481 | return; // Fail silently if attached | 3480 | return; // Fail silently if attached |
3482 | 3481 | ||
3483 | List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Children.Values); | 3482 | List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Children.Values); |
3484 | parts.Remove(parentPrim.RootPart); | 3483 | parts.Remove(parentPrim.RootPart); |
3485 | 3484 | ||
3486 | foreach (SceneObjectPart part in parts) | 3485 | foreach (SceneObjectPart part in parts) |
3487 | { | 3486 | { |
3488 | parentPrim.DelinkFromGroup(part.LocalId, true); | 3487 | parentPrim.DelinkFromGroup(part.LocalId, true); |
@@ -3509,29 +3508,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3509 | /// time a blank name is returned is if the target prim has a blank | 3508 | /// time a blank name is returned is if the target prim has a blank |
3510 | /// name. If no prim with the given link number can be found then | 3509 | /// name. If no prim with the given link number can be found then |
3511 | /// usually NULL_KEY is returned but there are exceptions. | 3510 | /// usually NULL_KEY is returned but there are exceptions. |
3512 | /// | 3511 | /// |
3513 | /// In a single unlinked prim, A call with 0 returns the name, all | 3512 | /// In a single unlinked prim, A call with 0 returns the name, all |
3514 | /// other values for link number return NULL_KEY | 3513 | /// other values for link number return NULL_KEY |
3515 | /// | 3514 | /// |
3516 | /// In link sets it is more complicated. | 3515 | /// In link sets it is more complicated. |
3517 | /// | 3516 | /// |
3518 | /// If the script is in the root prim:- | 3517 | /// If the script is in the root prim:- |
3519 | /// A zero link number returns NULL_KEY. | 3518 | /// A zero link number returns NULL_KEY. |
3520 | /// Positive link numbers return the name of the prim, or NULL_KEY | 3519 | /// Positive link numbers return the name of the prim, or NULL_KEY |
3521 | /// if a prim does not exist at that position. | 3520 | /// if a prim does not exist at that position. |
3522 | /// Negative link numbers return the name of the first child prim. | 3521 | /// Negative link numbers return the name of the first child prim. |
3523 | /// | 3522 | /// |
3524 | /// If the script is in a child prim:- | 3523 | /// If the script is in a child prim:- |
3525 | /// Link numbers 0 or 1 return the name of the root prim. | 3524 | /// Link numbers 0 or 1 return the name of the root prim. |
3526 | /// Positive link numbers return the name of the prim or NULL_KEY | 3525 | /// Positive link numbers return the name of the prim or NULL_KEY |
3527 | /// if a prim does not exist at that position. | 3526 | /// if a prim does not exist at that position. |
3528 | /// Negative numbers return the name of the root prim. | 3527 | /// Negative numbers return the name of the root prim. |
3529 | /// | 3528 | /// |
3530 | /// References | 3529 | /// References |
3531 | /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetLinkName | 3530 | /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetLinkName |
3532 | /// Mentions NULL_KEY being returned | 3531 | /// Mentions NULL_KEY being returned |
3533 | /// http://wiki.secondlife.com/wiki/LlGetLinkName | 3532 | /// http://wiki.secondlife.com/wiki/LlGetLinkName |
3534 | /// Mentions using the LINK_* constants, some of which are negative | 3533 | /// Mentions using the LINK_* constants, some of which are negative |
3535 | /// </summary> | 3534 | /// </summary> |
3536 | public LSL_String llGetLinkName(int linknum) | 3535 | public LSL_String llGetLinkName(int linknum) |
3537 | { | 3536 | { |
@@ -3540,7 +3539,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3540 | // simplest case, this prims link number | 3539 | // simplest case, this prims link number |
3541 | if (m_host.LinkNum == linknum) | 3540 | if (m_host.LinkNum == linknum) |
3542 | return m_host.Name; | 3541 | return m_host.Name; |
3543 | 3542 | ||
3544 | // Single prim | 3543 | // Single prim |
3545 | if (m_host.LinkNum == 0) | 3544 | if (m_host.LinkNum == 0) |
3546 | { | 3545 | { |
@@ -3575,7 +3574,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3575 | { | 3574 | { |
3576 | m_host.AddScriptLPS(1); | 3575 | m_host.AddScriptLPS(1); |
3577 | int count = 0; | 3576 | int count = 0; |
3578 | 3577 | ||
3579 | lock (m_host.TaskInventory) | 3578 | lock (m_host.TaskInventory) |
3580 | { | 3579 | { |
3581 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) | 3580 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) |
@@ -3586,7 +3585,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3586 | } | 3585 | } |
3587 | } | 3586 | } |
3588 | } | 3587 | } |
3589 | 3588 | ||
3590 | return count; | 3589 | return count; |
3591 | } | 3590 | } |
3592 | 3591 | ||
@@ -3605,7 +3604,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3605 | } | 3604 | } |
3606 | } | 3605 | } |
3607 | } | 3606 | } |
3608 | 3607 | ||
3609 | if (keys.Count == 0) | 3608 | if (keys.Count == 0) |
3610 | { | 3609 | { |
3611 | return String.Empty; | 3610 | return String.Empty; |
@@ -3702,7 +3701,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3702 | public void llRemoveInventory(string name) | 3701 | public void llRemoveInventory(string name) |
3703 | { | 3702 | { |
3704 | m_host.AddScriptLPS(1); | 3703 | m_host.AddScriptLPS(1); |
3705 | 3704 | ||
3706 | lock (m_host.TaskInventory) | 3705 | lock (m_host.TaskInventory) |
3707 | { | 3706 | { |
3708 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) | 3707 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) |
@@ -3738,9 +3737,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3738 | public void llPassTouches(int pass) | 3737 | public void llPassTouches(int pass) |
3739 | { | 3738 | { |
3740 | m_host.AddScriptLPS(1); | 3739 | m_host.AddScriptLPS(1); |
3741 | if (pass != 0) | 3740 | if (pass != 0) |
3742 | m_host.PassTouches = true; | 3741 | m_host.PassTouches = true; |
3743 | else | 3742 | else |
3744 | m_host.PassTouches = false; | 3743 | m_host.PassTouches = false; |
3745 | } | 3744 | } |
3746 | 3745 | ||
@@ -3806,7 +3805,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3806 | m_host.AddScriptLPS(1); | 3805 | m_host.AddScriptLPS(1); |
3807 | 3806 | ||
3808 | TaskInventoryDictionary itemDictionary = (TaskInventoryDictionary)m_host.TaskInventory.Clone(); | 3807 | TaskInventoryDictionary itemDictionary = (TaskInventoryDictionary)m_host.TaskInventory.Clone(); |
3809 | 3808 | ||
3810 | foreach (TaskInventoryItem item in itemDictionary.Values) | 3809 | foreach (TaskInventoryItem item in itemDictionary.Values) |
3811 | { | 3810 | { |
3812 | if (item.Type == 3 && item.Name == name) | 3811 | if (item.Type == 3 && item.Name == name) |
@@ -3858,9 +3857,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3858 | ScenePresence presence = World.GetScenePresence(agentId); | 3857 | ScenePresence presence = World.GetScenePresence(agentId); |
3859 | if (presence != null) | 3858 | if (presence != null) |
3860 | { | 3859 | { |
3861 | // agent must be over the owners land | 3860 | // agent must be over the owners land |
3862 | if (m_host.OwnerID | 3861 | if (m_host.OwnerID == World.LandChannel.GetLandObject( |
3863 | == World.LandChannel.GetLandObject( | ||
3864 | presence.AbsolutePosition.X, presence.AbsolutePosition.Y).landData.OwnerID) | 3862 | presence.AbsolutePosition.X, presence.AbsolutePosition.Y).landData.OwnerID) |
3865 | { | 3863 | { |
3866 | presence.ControllingClient.SendTeleportLocationStart(); | 3864 | presence.ControllingClient.SendTeleportLocationStart(); |
@@ -3952,7 +3950,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3952 | foreach (SceneObjectPart part in parts) | 3950 | foreach (SceneObjectPart part in parts) |
3953 | { | 3951 | { |
3954 | TaskInventoryDictionary itemsDictionary = (TaskInventoryDictionary)part.TaskInventory.Clone(); | 3952 | TaskInventoryDictionary itemsDictionary = (TaskInventoryDictionary)part.TaskInventory.Clone(); |
3955 | 3953 | ||
3956 | foreach (TaskInventoryItem item in itemsDictionary.Values) | 3954 | foreach (TaskInventoryItem item in itemsDictionary.Values) |
3957 | { | 3955 | { |
3958 | if (item.Type == ScriptBaseClass.INVENTORY_SCRIPT) | 3956 | if (item.Type == ScriptBaseClass.INVENTORY_SCRIPT) |
@@ -3983,14 +3981,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3983 | 3981 | ||
3984 | bool pusheeIsAvatar = false; | 3982 | bool pusheeIsAvatar = false; |
3985 | UUID targetID = UUID.Zero; | 3983 | UUID targetID = UUID.Zero; |
3986 | 3984 | ||
3987 | if (!UUID.TryParse(target,out targetID)) | 3985 | if (!UUID.TryParse(target,out targetID)) |
3988 | return; | 3986 | return; |
3989 | 3987 | ||
3990 | ScenePresence pusheeav = null; | 3988 | ScenePresence pusheeav = null; |
3991 | Vector3 PusheePos = Vector3.Zero; | 3989 | Vector3 PusheePos = Vector3.Zero; |
3992 | SceneObjectPart pusheeob = null; | 3990 | SceneObjectPart pusheeob = null; |
3993 | |||
3994 | 3991 | ||
3995 | ScenePresence avatar = World.GetScenePresence(targetID); | 3992 | ScenePresence avatar = World.GetScenePresence(targetID); |
3996 | if (avatar != null) | 3993 | if (avatar != null) |
@@ -4417,13 +4414,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4417 | double angle = Math.Acos(a.x * b.x + a.y * b.y + a.z * b.z + a.s * b.s) * 2; | 4414 | double angle = Math.Acos(a.x * b.x + a.y * b.y + a.z * b.z + a.s * b.s) * 2; |
4418 | if (angle < 0) angle = -angle; | 4415 | if (angle < 0) angle = -angle; |
4419 | if (angle > Math.PI) return (Math.PI * 2 - angle); | 4416 | if (angle > Math.PI) return (Math.PI * 2 - angle); |
4420 | return angle; | 4417 | return angle; |
4421 | } | 4418 | } |
4422 | 4419 | ||
4423 | public LSL_String llGetInventoryKey(string name) | 4420 | public LSL_String llGetInventoryKey(string name) |
4424 | { | 4421 | { |
4425 | m_host.AddScriptLPS(1); | 4422 | m_host.AddScriptLPS(1); |
4426 | 4423 | ||
4427 | lock (m_host.TaskInventory) | 4424 | lock (m_host.TaskInventory) |
4428 | { | 4425 | { |
4429 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) | 4426 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) |
@@ -4439,9 +4436,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4439 | return UUID.Zero.ToString(); | 4436 | return UUID.Zero.ToString(); |
4440 | } | 4437 | } |
4441 | } | 4438 | } |
4439 | } | ||
4442 | } | 4440 | } |
4443 | } | 4441 | |
4444 | |||
4445 | return UUID.Zero.ToString(); | 4442 | return UUID.Zero.ToString(); |
4446 | } | 4443 | } |
4447 | 4444 | ||
@@ -5144,7 +5141,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5144 | // edge will be used to pass the Region Coordinates offset | 5141 | // edge will be used to pass the Region Coordinates offset |
5145 | // we want to check for a neighboring sim | 5142 | // we want to check for a neighboring sim |
5146 | LSL_Vector edge = new LSL_Vector(0, 0, 0); | 5143 | LSL_Vector edge = new LSL_Vector(0, 0, 0); |
5147 | 5144 | ||
5148 | if (dir.x == 0) | 5145 | if (dir.x == 0) |
5149 | { | 5146 | { |
5150 | if (dir.y == 0) | 5147 | if (dir.y == 0) |
@@ -5164,7 +5161,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5164 | LSL_Float mag; | 5161 | LSL_Float mag; |
5165 | if (dir.x > 0) | 5162 | if (dir.x > 0) |
5166 | { | 5163 | { |
5167 | mag = (Constants.RegionSize - pos.x) / dir.x; | 5164 | mag = (Constants.RegionSize - pos.x) / dir.x; |
5168 | } | 5165 | } |
5169 | else | 5166 | else |
5170 | { | 5167 | { |
@@ -5187,18 +5184,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5187 | edge.x = dir.x / Math.Abs(dir.x); | 5184 | edge.x = dir.x / Math.Abs(dir.x); |
5188 | } | 5185 | } |
5189 | } | 5186 | } |
5190 | 5187 | ||
5191 | List<SimpleRegionInfo> neighbors = World.CommsManager.GridService.RequestNeighbours(World.RegionInfo.RegionLocX, World.RegionInfo.RegionLocY); | 5188 | List<SimpleRegionInfo> neighbors = World.CommsManager.GridService.RequestNeighbours(World.RegionInfo.RegionLocX, World.RegionInfo.RegionLocY); |
5192 | 5189 | ||
5193 | uint neighborX = World.RegionInfo.RegionLocX + (uint)dir.x; | 5190 | uint neighborX = World.RegionInfo.RegionLocX + (uint)dir.x; |
5194 | uint neighborY = World.RegionInfo.RegionLocY + (uint)dir.y; | 5191 | uint neighborY = World.RegionInfo.RegionLocY + (uint)dir.y; |
5195 | 5192 | ||
5196 | foreach (SimpleRegionInfo sri in neighbors) | 5193 | foreach (SimpleRegionInfo sri in neighbors) |
5197 | { | 5194 | { |
5198 | if (sri.RegionLocX == neighborX && sri.RegionLocY == neighborY) | 5195 | if (sri.RegionLocX == neighborX && sri.RegionLocY == neighborY) |
5199 | return 0; | 5196 | return 0; |
5200 | } | 5197 | } |
5201 | 5198 | ||
5202 | return 1; | 5199 | return 1; |
5203 | } | 5200 | } |
5204 | 5201 | ||
@@ -5270,7 +5267,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5270 | flags |= ScriptBaseClass.AGENT_CROUCHING; | 5267 | flags |= ScriptBaseClass.AGENT_CROUCHING; |
5271 | } | 5268 | } |
5272 | 5269 | ||
5273 | if (agentMovementAnimation == "WALK" || agentMovementAnimation == "CROUCHWALK") | 5270 | if (agentMovementAnimation == "WALK" || agentMovementAnimation == "CROUCHWALK") |
5274 | { | 5271 | { |
5275 | flags |= ScriptBaseClass.AGENT_WALKING; | 5272 | flags |= ScriptBaseClass.AGENT_WALKING; |
5276 | } | 5273 | } |
@@ -5282,8 +5279,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5282 | // note: this may need some tweaking when walking downhill. you "fall down" for a brief instant | 5279 | // note: this may need some tweaking when walking downhill. you "fall down" for a brief instant |
5283 | // and don't collide when walking downhill, which instantly registers as in-air, briefly. should | 5280 | // and don't collide when walking downhill, which instantly registers as in-air, briefly. should |
5284 | // there be some minimum non-collision threshold time before claiming the avatar is in-air? | 5281 | // there be some minimum non-collision threshold time before claiming the avatar is in-air? |
5285 | if ((flags & ScriptBaseClass.AGENT_WALKING) == 0 && | 5282 | if ((flags & ScriptBaseClass.AGENT_WALKING) == 0 && |
5286 | agent.PhysicsActor != null && | 5283 | agent.PhysicsActor != null && |
5287 | !agent.PhysicsActor.IsColliding) | 5284 | !agent.PhysicsActor.IsColliding) |
5288 | { | 5285 | { |
5289 | flags |= ScriptBaseClass.AGENT_IN_AIR; | 5286 | flags |= ScriptBaseClass.AGENT_IN_AIR; |
@@ -5397,8 +5394,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5397 | if (presence != null) | 5394 | if (presence != null) |
5398 | { | 5395 | { |
5399 | // agent must be over the owners land | 5396 | // agent must be over the owners land |
5400 | if (m_host.OwnerID | 5397 | if (m_host.OwnerID == World.LandChannel.GetLandObject( |
5401 | == World.LandChannel.GetLandObject( | ||
5402 | presence.AbsolutePosition.X, presence.AbsolutePosition.Y).landData.OwnerID) | 5398 | presence.AbsolutePosition.X, presence.AbsolutePosition.Y).landData.OwnerID) |
5403 | World.TeleportClientHome(agentId, presence.ControllingClient); | 5399 | World.TeleportClientHome(agentId, presence.ControllingClient); |
5404 | } | 5400 | } |
@@ -5484,12 +5480,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5484 | UUID key = new UUID(); | 5480 | UUID key = new UUID(); |
5485 | if (UUID.TryParse(id, out key)) | 5481 | if (UUID.TryParse(id, out key)) |
5486 | { | 5482 | { |
5487 | ScenePresence presence = World.GetScenePresence(key); | 5483 | ScenePresence presence = World.GetScenePresence(key); |
5488 | if (presence != null) // object is an avatar | 5484 | if (presence != null) // object is an avatar |
5489 | { | 5485 | { |
5490 | if (m_host.OwnerID | 5486 | if (m_host.OwnerID |
5491 | == World.LandChannel.GetLandObject( | 5487 | == World.LandChannel.GetLandObject( |
5492 | presence.AbsolutePosition.X, presence.AbsolutePosition.Y).landData.OwnerID) | 5488 | presence.AbsolutePosition.X, presence.AbsolutePosition.Y).landData.OwnerID) |
5493 | return 1; | 5489 | return 1; |
5494 | } | 5490 | } |
5495 | else // object is not an avatar | 5491 | else // object is not an avatar |
@@ -5498,23 +5494,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5498 | if (obj != null) | 5494 | if (obj != null) |
5499 | if (m_host.OwnerID | 5495 | if (m_host.OwnerID |
5500 | == World.LandChannel.GetLandObject( | 5496 | == World.LandChannel.GetLandObject( |
5501 | obj.AbsolutePosition.X, obj.AbsolutePosition.Y).landData.OwnerID) | 5497 | obj.AbsolutePosition.X, obj.AbsolutePosition.Y).landData.OwnerID) |
5502 | return 1; | 5498 | return 1; |
5503 | } | 5499 | } |
5504 | } | 5500 | } |
5505 | 5501 | ||
5506 | return 0; | 5502 | return 0; |
5507 | } | 5503 | } |
5508 | 5504 | ||
5509 | public LSL_String llGetLandOwnerAt(LSL_Vector pos) | 5505 | public LSL_String llGetLandOwnerAt(LSL_Vector pos) |
5510 | { | 5506 | { |
5511 | m_host.AddScriptLPS(1); | 5507 | m_host.AddScriptLPS(1); |
5512 | return World.LandChannel.GetLandObject((float)pos.x, (float)pos.y).landData.OwnerID.ToString(); | 5508 | return World.LandChannel.GetLandObject((float)pos.x, (float)pos.y).landData.OwnerID.ToString(); |
5513 | } | 5509 | } |
5514 | 5510 | ||
5515 | /// <summary> | 5511 | /// <summary> |
5516 | /// According to http://lslwiki.net/lslwiki/wakka.php?wakka=llGetAgentSize | 5512 | /// According to http://lslwiki.net/lslwiki/wakka.php?wakka=llGetAgentSize |
5517 | /// only the height of avatars vary and that says:- | 5513 | /// only the height of avatars vary and that says: |
5518 | /// Width (x) and depth (y) are constant. (0.45m and 0.6m respectively). | 5514 | /// Width (x) and depth (y) are constant. (0.45m and 0.6m respectively). |
5519 | /// </summary> | 5515 | /// </summary> |
5520 | public LSL_Vector llGetAgentSize(string id) | 5516 | public LSL_Vector llGetAgentSize(string id) |
@@ -5936,7 +5932,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5936 | return inv.Key; | 5932 | return inv.Key; |
5937 | } | 5933 | } |
5938 | } | 5934 | } |
5939 | 5935 | ||
5940 | return UUID.Zero; | 5936 | return UUID.Zero; |
5941 | } | 5937 | } |
5942 | 5938 | ||
@@ -6028,7 +6024,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6028 | { | 6024 | { |
6029 | if (!m_host.ParentGroup.IsDeleted) | 6025 | if (!m_host.ParentGroup.IsDeleted) |
6030 | { | 6026 | { |
6031 | m_host.ParentGroup.RootPart.SetVehicleVectorParam(param, | 6027 | m_host.ParentGroup.RootPart.SetVehicleVectorParam(param, |
6032 | new PhysicsVector((float)vec.x, (float)vec.y, (float)vec.z)); | 6028 | new PhysicsVector((float)vec.x, (float)vec.y, (float)vec.z)); |
6033 | } | 6029 | } |
6034 | } | 6030 | } |
@@ -6156,10 +6152,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6156 | public void llDialog(string avatar, string message, LSL_List buttons, int chat_channel) | 6152 | public void llDialog(string avatar, string message, LSL_List buttons, int chat_channel) |
6157 | { | 6153 | { |
6158 | IDialogModule dm = World.RequestModuleInterface<IDialogModule>(); | 6154 | IDialogModule dm = World.RequestModuleInterface<IDialogModule>(); |
6159 | 6155 | ||
6160 | if (dm == null) | 6156 | if (dm == null) |
6161 | return; | 6157 | return; |
6162 | 6158 | ||
6163 | m_host.AddScriptLPS(1); | 6159 | m_host.AddScriptLPS(1); |
6164 | UUID av = new UUID(); | 6160 | UUID av = new UUID(); |
6165 | if (!UUID.TryParse(avatar,out av)) | 6161 | if (!UUID.TryParse(avatar,out av)) |
@@ -6187,11 +6183,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6187 | } | 6183 | } |
6188 | buts[i] = buttons.Data[i].ToString(); | 6184 | buts[i] = buttons.Data[i].ToString(); |
6189 | } | 6185 | } |
6190 | 6186 | ||
6191 | dm.SendDialogToUser( | 6187 | dm.SendDialogToUser( |
6192 | av, m_host.Name, m_host.UUID, m_host.OwnerID, | 6188 | av, m_host.Name, m_host.UUID, m_host.OwnerID, |
6193 | message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); | 6189 | message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); |
6194 | 6190 | ||
6195 | ConditionalScriptSleep(1000); | 6191 | ConditionalScriptSleep(1000); |
6196 | } | 6192 | } |
6197 | 6193 | ||
@@ -7079,14 +7075,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7079 | public void llSetParcelMusicURL(string url) | 7075 | public void llSetParcelMusicURL(string url) |
7080 | { | 7076 | { |
7081 | m_host.AddScriptLPS(1); | 7077 | m_host.AddScriptLPS(1); |
7082 | 7078 | ||
7083 | ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); | 7079 | ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); |
7084 | 7080 | ||
7085 | if (land.landData.OwnerID != m_host.ObjectOwner) | 7081 | if (land.landData.OwnerID != m_host.ObjectOwner) |
7086 | return; | 7082 | return; |
7087 | 7083 | ||
7088 | land.SetMusicUrl(url); | 7084 | land.SetMusicUrl(url); |
7089 | 7085 | ||
7090 | ConditionalScriptSleep(2000); | 7086 | ConditionalScriptSleep(2000); |
7091 | } | 7087 | } |
7092 | 7088 | ||
@@ -7234,7 +7230,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7234 | result.Add(upper); | 7230 | result.Add(upper); |
7235 | return result; | 7231 | return result; |
7236 | } | 7232 | } |
7237 | 7233 | ||
7238 | // Not found so return empty values | 7234 | // Not found so return empty values |
7239 | result.Add(new LSL_Vector()); | 7235 | result.Add(new LSL_Vector()); |
7240 | result.Add(new LSL_Vector()); | 7236 | result.Add(new LSL_Vector()); |
@@ -7358,10 +7354,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7358 | // vector tapera | 7354 | // vector tapera |
7359 | res.Add(new LSL_Vector(Shape.PathTaperX / 100.0, Shape.PathTaperY / 100.0, 0)); | 7355 | res.Add(new LSL_Vector(Shape.PathTaperX / 100.0, Shape.PathTaperY / 100.0, 0)); |
7360 | 7356 | ||
7361 | // float revolutions, | 7357 | // float revolutions |
7362 | res.Add(new LSL_Float(Shape.PathRevolutions / 50.0)); // needs fixing :( | 7358 | res.Add(new LSL_Float(Shape.PathRevolutions / 50.0)); // needs fixing :( |
7363 | 7359 | ||
7364 | // float radiusoffset, | 7360 | // float radiusoffset |
7365 | res.Add(new LSL_Float(Shape.PathRadiusOffset / 100.0)); | 7361 | res.Add(new LSL_Float(Shape.PathRadiusOffset / 100.0)); |
7366 | 7362 | ||
7367 | // float skew | 7363 | // float skew |
@@ -8036,7 +8032,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8036 | public LSL_Integer llGetInventoryPermMask(string item, int mask) | 8032 | public LSL_Integer llGetInventoryPermMask(string item, int mask) |
8037 | { | 8033 | { |
8038 | m_host.AddScriptLPS(1); | 8034 | m_host.AddScriptLPS(1); |
8039 | 8035 | ||
8040 | lock (m_host.TaskInventory) | 8036 | lock (m_host.TaskInventory) |
8041 | { | 8037 | { |
8042 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) | 8038 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) |
@@ -8059,7 +8055,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8059 | } | 8055 | } |
8060 | } | 8056 | } |
8061 | } | 8057 | } |
8062 | 8058 | ||
8063 | return -1; | 8059 | return -1; |
8064 | } | 8060 | } |
8065 | 8061 | ||
@@ -8072,7 +8068,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8072 | public LSL_String llGetInventoryCreator(string item) | 8068 | public LSL_String llGetInventoryCreator(string item) |
8073 | { | 8069 | { |
8074 | m_host.AddScriptLPS(1); | 8070 | m_host.AddScriptLPS(1); |
8075 | 8071 | ||
8076 | lock (m_host.TaskInventory) | 8072 | lock (m_host.TaskInventory) |
8077 | { | 8073 | { |
8078 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) | 8074 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) |
@@ -8083,9 +8079,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8083 | } | 8079 | } |
8084 | } | 8080 | } |
8085 | } | 8081 | } |
8086 | 8082 | ||
8087 | llSay(0, "No item name '" + item + "'"); | 8083 | llSay(0, "No item name '" + item + "'"); |
8088 | 8084 | ||
8089 | return String.Empty; | 8085 | return String.Empty; |
8090 | } | 8086 | } |
8091 | 8087 | ||
@@ -8093,7 +8089,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8093 | { | 8089 | { |
8094 | m_host.AddScriptLPS(1); | 8090 | m_host.AddScriptLPS(1); |
8095 | 8091 | ||
8096 | World.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Owner, 0, | 8092 | World.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Owner, 0, |
8097 | m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); | 8093 | m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); |
8098 | // IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); | 8094 | // IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); |
8099 | // wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg); | 8095 | // wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg); |
@@ -8309,7 +8305,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8309 | public void llLoadURL(string avatar_id, string message, string url) | 8305 | public void llLoadURL(string avatar_id, string message, string url) |
8310 | { | 8306 | { |
8311 | m_host.AddScriptLPS(1); | 8307 | m_host.AddScriptLPS(1); |
8312 | 8308 | ||
8313 | IDialogModule dm = World.RequestModuleInterface<IDialogModule>(); | 8309 | IDialogModule dm = World.RequestModuleInterface<IDialogModule>(); |
8314 | if (null != dm) | 8310 | if (null != dm) |
8315 | dm.SendUrlToUser( | 8311 | dm.SendUrlToUser( |
@@ -8322,7 +8318,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8322 | { | 8318 | { |
8323 | // TODO: Not implemented yet (missing in libomv?): | 8319 | // TODO: Not implemented yet (missing in libomv?): |
8324 | // PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later) | 8320 | // PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later) |
8325 | 8321 | ||
8326 | m_host.AddScriptLPS(1); | 8322 | m_host.AddScriptLPS(1); |
8327 | 8323 | ||
8328 | // according to the docs, this command only works if script owner and land owner are the same | 8324 | // according to the docs, this command only works if script owner and land owner are the same |
@@ -8330,23 +8326,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8330 | ILandObject landObject = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); | 8326 | ILandObject landObject = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); |
8331 | if (!World.Permissions.CanEditParcel(m_host.ObjectOwner, landObject)) return; | 8327 | if (!World.Permissions.CanEditParcel(m_host.ObjectOwner, landObject)) return; |
8332 | 8328 | ||
8333 | bool update = false; // send a ParcelMediaUpdate (and possibly change the land's media URL)? | 8329 | bool update = false; // send a ParcelMediaUpdate (and possibly change the land's media URL)? |
8334 | byte loop = 0; | 8330 | byte loop = 0; |
8335 | 8331 | ||
8336 | LandData landData = landObject.landData; | 8332 | LandData landData = landObject.landData; |
8337 | string url = landData.MediaURL; | 8333 | string url = landData.MediaURL; |
8338 | string texture = landData.MediaID.ToString(); | 8334 | string texture = landData.MediaID.ToString(); |
8339 | bool autoAlign = landData.MediaAutoScale != 0; | 8335 | bool autoAlign = landData.MediaAutoScale != 0; |
8340 | string mediaType = ""; // TODO these have to be added as soon as LandData supports it | 8336 | string mediaType = ""; // TODO these have to be added as soon as LandData supports it |
8341 | string description = ""; | 8337 | string description = ""; |
8342 | int width = 0; | 8338 | int width = 0; |
8343 | int height = 0; | 8339 | int height = 0; |
8344 | 8340 | ||
8345 | ParcelMediaCommandEnum? commandToSend = null; | 8341 | ParcelMediaCommandEnum? commandToSend = null; |
8346 | float time = 0.0f; // default is from start | 8342 | float time = 0.0f; // default is from start |
8347 | 8343 | ||
8348 | ScenePresence presence = null; | 8344 | ScenePresence presence = null; |
8349 | 8345 | ||
8350 | for (int i = 0; i < commandList.Data.Length; i++) | 8346 | for (int i = 0; i < commandList.Data.Length; i++) |
8351 | { | 8347 | { |
8352 | ParcelMediaCommandEnum command = (ParcelMediaCommandEnum)commandList.Data[i]; | 8348 | ParcelMediaCommandEnum command = (ParcelMediaCommandEnum)commandList.Data[i]; |
@@ -8386,7 +8382,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8386 | case ParcelMediaCommandEnum.Unload: | 8382 | case ParcelMediaCommandEnum.Unload: |
8387 | commandToSend = command; | 8383 | commandToSend = command; |
8388 | break; | 8384 | break; |
8389 | 8385 | ||
8390 | case ParcelMediaCommandEnum.Url: | 8386 | case ParcelMediaCommandEnum.Url: |
8391 | if ((i + 1) < commandList.Length) | 8387 | if ((i + 1) < commandList.Length) |
8392 | { | 8388 | { |
@@ -8491,7 +8487,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8491 | 8487 | ||
8492 | // if we didn't get a presence, we send to all and change the url | 8488 | // if we didn't get a presence, we send to all and change the url |
8493 | // if we did get a presence, we only send to the agent specified, and *don't change the land settings*! | 8489 | // if we did get a presence, we only send to the agent specified, and *don't change the land settings*! |
8494 | 8490 | ||
8495 | // did something important change or do we only start/stop/pause? | 8491 | // did something important change or do we only start/stop/pause? |
8496 | if (update) | 8492 | if (update) |
8497 | { | 8493 | { |
@@ -8500,7 +8496,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8500 | // we send to all | 8496 | // we send to all |
8501 | landData.MediaID = new UUID(texture); | 8497 | landData.MediaID = new UUID(texture); |
8502 | landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0; | 8498 | landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0; |
8503 | 8499 | ||
8504 | // do that one last, it will cause a ParcelPropertiesUpdate | 8500 | // do that one last, it will cause a ParcelPropertiesUpdate |
8505 | landObject.SetMediaUrl(url); | 8501 | landObject.SetMediaUrl(url); |
8506 | 8502 | ||
@@ -8514,7 +8510,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8514 | mediaType, | 8510 | mediaType, |
8515 | description, | 8511 | description, |
8516 | width, height, | 8512 | width, height, |
8517 | loop); | 8513 | loop); |
8518 | } | 8514 | } |
8519 | } | 8515 | } |
8520 | else if (!presence.IsChildAgent) | 8516 | else if (!presence.IsChildAgent) |
@@ -8526,7 +8522,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8526 | mediaType, | 8522 | mediaType, |
8527 | description, | 8523 | description, |
8528 | width, height, | 8524 | width, height, |
8529 | loop); | 8525 | loop); |
8530 | } | 8526 | } |
8531 | } | 8527 | } |
8532 | 8528 | ||
@@ -8605,7 +8601,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8605 | public LSL_Integer llGetInventoryType(string name) | 8601 | public LSL_Integer llGetInventoryType(string name) |
8606 | { | 8602 | { |
8607 | m_host.AddScriptLPS(1); | 8603 | m_host.AddScriptLPS(1); |
8608 | 8604 | ||
8609 | lock (m_host.TaskInventory) | 8605 | lock (m_host.TaskInventory) |
8610 | { | 8606 | { |
8611 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) | 8607 | foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory) |
@@ -8616,7 +8612,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8616 | } | 8612 | } |
8617 | } | 8613 | } |
8618 | } | 8614 | } |
8619 | 8615 | ||
8620 | return -1; | 8616 | return -1; |
8621 | } | 8617 | } |
8622 | 8618 | ||
@@ -8642,7 +8638,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8642 | { | 8638 | { |
8643 | m_host.AddScriptLPS(1); | 8639 | m_host.AddScriptLPS(1); |
8644 | UUID invItemID = InventorySelf(); | 8640 | UUID invItemID = InventorySelf(); |
8645 | 8641 | ||
8646 | if (invItemID == UUID.Zero) | 8642 | if (invItemID == UUID.Zero) |
8647 | return new LSL_Vector(); | 8643 | return new LSL_Vector(); |
8648 | 8644 | ||
@@ -8650,14 +8646,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8650 | { | 8646 | { |
8651 | if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) | 8647 | if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) |
8652 | return new LSL_Vector(); | 8648 | return new LSL_Vector(); |
8653 | 8649 | ||
8654 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) | 8650 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) |
8655 | { | 8651 | { |
8656 | ShoutError("No permissions to track the camera"); | 8652 | ShoutError("No permissions to track the camera"); |
8657 | return new LSL_Vector(); | 8653 | return new LSL_Vector(); |
8658 | } | 8654 | } |
8659 | } | 8655 | } |
8660 | 8656 | ||
8661 | ScenePresence presence = World.GetScenePresence(m_host.OwnerID); | 8657 | ScenePresence presence = World.GetScenePresence(m_host.OwnerID); |
8662 | if (presence != null) | 8658 | if (presence != null) |
8663 | { | 8659 | { |
@@ -8678,20 +8674,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8678 | { | 8674 | { |
8679 | if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) | 8675 | if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero) |
8680 | return new LSL_Rotation(); | 8676 | return new LSL_Rotation(); |
8681 | 8677 | ||
8682 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) | 8678 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) |
8683 | { | 8679 | { |
8684 | ShoutError("No permissions to track the camera"); | 8680 | ShoutError("No permissions to track the camera"); |
8685 | return new LSL_Rotation(); | 8681 | return new LSL_Rotation(); |
8686 | } | 8682 | } |
8687 | } | 8683 | } |
8688 | 8684 | ||
8689 | ScenePresence presence = World.GetScenePresence(m_host.OwnerID); | 8685 | ScenePresence presence = World.GetScenePresence(m_host.OwnerID); |
8690 | if (presence != null) | 8686 | if (presence != null) |
8691 | { | 8687 | { |
8692 | return new LSL_Rotation(presence.CameraRotation.X, presence.CameraRotation.Y, presence.CameraRotation.Z, presence.CameraRotation.W); | 8688 | return new LSL_Rotation(presence.CameraRotation.X, presence.CameraRotation.Y, presence.CameraRotation.Z, presence.CameraRotation.W); |
8693 | } | 8689 | } |
8694 | 8690 | ||
8695 | return new LSL_Rotation(); | 8691 | return new LSL_Rotation(); |
8696 | } | 8692 | } |
8697 | 8693 | ||
@@ -8838,7 +8834,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8838 | { | 8834 | { |
8839 | // we need the permission first, to know which avatar we want to set the camera for | 8835 | // we need the permission first, to know which avatar we want to set the camera for |
8840 | agentID = m_host.TaskInventory[invItemID].PermsGranter; | 8836 | agentID = m_host.TaskInventory[invItemID].PermsGranter; |
8841 | 8837 | ||
8842 | if (agentID == UUID.Zero) return; | 8838 | if (agentID == UUID.Zero) return; |
8843 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) return; | 8839 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) return; |
8844 | } | 8840 | } |
@@ -9012,9 +9008,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9012 | IConfigSource config = m_ScriptEngine.ConfigSource; | 9008 | IConfigSource config = m_ScriptEngine.ConfigSource; |
9013 | if (config.Configs["Network"] != null) | 9009 | if (config.Configs["Network"] != null) |
9014 | { | 9010 | { |
9015 | shard | 9011 | shard = config.Configs["Network"].GetString( |
9016 | = config.Configs["Network"].GetString( | 9012 | "user_server_url", "http://127.0.0.1:" + ConfigSettings.DefaultUserServerHttpPort.ToString()); |
9017 | "user_server_url", "http://127.0.0.1:" + ConfigSettings.DefaultUserServerHttpPort.ToString()); | ||
9018 | shard = config.Configs["Network"].GetString("shard", shard); | 9013 | shard = config.Configs["Network"].GetString("shard", shard); |
9019 | } | 9014 | } |
9020 | 9015 | ||
@@ -9039,7 +9034,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9039 | for (int i = 1; i < gnums.Length; i++) { | 9034 | for (int i = 1; i < gnums.Length; i++) { |
9040 | System.Text.RegularExpressions.Group g = m.Groups[gnums[i]]; | 9035 | System.Text.RegularExpressions.Group g = m.Groups[gnums[i]]; |
9041 | CaptureCollection cc = g.Captures; | 9036 | CaptureCollection cc = g.Captures; |
9042 | } | 9037 | } |
9043 | if (m.Groups.Count == 5) { | 9038 | if (m.Groups.Count == 5) { |
9044 | httpHeaders["Authorization"] = String.Format("Basic {0}", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(m.Groups[2].ToString() + ":" + m.Groups[3].ToString()))); | 9039 | httpHeaders["Authorization"] = String.Format("Basic {0}", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(m.Groups[2].ToString() + ":" + m.Groups[3].ToString()))); |
9045 | url = m.Groups[1].ToString() + m.Groups[4].ToString(); | 9040 | url = m.Groups[1].ToString() + m.Groups[4].ToString(); |
@@ -9064,7 +9059,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9064 | m_host.AddScriptLPS(1); | 9059 | m_host.AddScriptLPS(1); |
9065 | NotImplemented("llHTTPResponse"); | 9060 | NotImplemented("llHTTPResponse"); |
9066 | } | 9061 | } |
9067 | 9062 | ||
9068 | public void llResetLandBanList() | 9063 | public void llResetLandBanList() |
9069 | { | 9064 | { |
9070 | m_host.AddScriptLPS(1); | 9065 | m_host.AddScriptLPS(1); |
@@ -9360,7 +9355,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9360 | return item.ItemID; | 9355 | return item.ItemID; |
9361 | } | 9356 | } |
9362 | } | 9357 | } |
9363 | 9358 | ||
9364 | return UUID.Zero; | 9359 | return UUID.Zero; |
9365 | } | 9360 | } |
9366 | 9361 | ||
@@ -9388,21 +9383,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9388 | public delegate void AssetRequestCallback(UUID assetID, AssetBase asset); | 9383 | public delegate void AssetRequestCallback(UUID assetID, AssetBase asset); |
9389 | protected void WithNotecard(UUID assetID, AssetRequestCallback cb) | 9384 | protected void WithNotecard(UUID assetID, AssetRequestCallback cb) |
9390 | { | 9385 | { |
9391 | World.AssetService.Get(assetID.ToString(), this, | 9386 | World.AssetService.Get(assetID.ToString(), this, |
9392 | delegate(string i, object sender, AssetBase a) | 9387 | delegate(string i, object sender, AssetBase a) |
9393 | { | 9388 | { |
9394 | UUID uuid = UUID.Zero; | 9389 | UUID uuid = UUID.Zero; |
9395 | UUID.TryParse(i, out uuid); | 9390 | UUID.TryParse(i, out uuid); |
9396 | cb(uuid, a); | 9391 | cb(uuid, a); |
9397 | }); | 9392 | }); |
9398 | } | 9393 | } |
9399 | 9394 | ||
9400 | public LSL_String llGetNumberOfNotecardLines(string name) | 9395 | public LSL_String llGetNumberOfNotecardLines(string name) |
9401 | { | 9396 | { |
9402 | m_host.AddScriptLPS(1); | 9397 | m_host.AddScriptLPS(1); |
9403 | 9398 | ||
9404 | TaskInventoryDictionary itemsDictionary = (TaskInventoryDictionary)m_host.TaskInventory.Clone(); | 9399 | TaskInventoryDictionary itemsDictionary = (TaskInventoryDictionary)m_host.TaskInventory.Clone(); |
9405 | 9400 | ||
9406 | UUID assetID = UUID.Zero; | 9401 | UUID assetID = UUID.Zero; |
9407 | 9402 | ||
9408 | if (!UUID.TryParse(name, out assetID)) | 9403 | if (!UUID.TryParse(name, out assetID)) |
@@ -9436,7 +9431,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9436 | ConditionalScriptSleep(100); | 9431 | ConditionalScriptSleep(100); |
9437 | return tid.ToString(); | 9432 | return tid.ToString(); |
9438 | } | 9433 | } |
9439 | 9434 | ||
9440 | WithNotecard(assetID, delegate (UUID id, AssetBase a) | 9435 | WithNotecard(assetID, delegate (UUID id, AssetBase a) |
9441 | { | 9436 | { |
9442 | if (a == null || a.Type != 7) | 9437 | if (a == null || a.Type != 7) |
@@ -9460,11 +9455,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9460 | } | 9455 | } |
9461 | 9456 | ||
9462 | public LSL_String llGetNotecardLine(string name, int line) | 9457 | public LSL_String llGetNotecardLine(string name, int line) |
9463 | { | 9458 | { |
9464 | m_host.AddScriptLPS(1); | 9459 | m_host.AddScriptLPS(1); |
9465 | 9460 | ||
9466 | TaskInventoryDictionary itemsDictionary = (TaskInventoryDictionary)m_host.TaskInventory.Clone(); | 9461 | TaskInventoryDictionary itemsDictionary = (TaskInventoryDictionary)m_host.TaskInventory.Clone(); |
9467 | 9462 | ||
9468 | UUID assetID = UUID.Zero; | 9463 | UUID assetID = UUID.Zero; |
9469 | 9464 | ||
9470 | if (!UUID.TryParse(name, out assetID)) | 9465 | if (!UUID.TryParse(name, out assetID)) |
@@ -9489,7 +9484,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9489 | 9484 | ||
9490 | // was: UUID tid = tid = AsyncCommands. | 9485 | // was: UUID tid = tid = AsyncCommands. |
9491 | UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_localID, m_itemID, assetID.ToString()); | 9486 | UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_localID, m_itemID, assetID.ToString()); |
9492 | 9487 | ||
9493 | if (NotecardCache.IsCached(assetID)) | 9488 | if (NotecardCache.IsCached(assetID)) |
9494 | { | 9489 | { |
9495 | AsyncCommands. | 9490 | AsyncCommands. |
@@ -9498,7 +9493,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9498 | ConditionalScriptSleep(100); | 9493 | ConditionalScriptSleep(100); |
9499 | return tid.ToString(); | 9494 | return tid.ToString(); |
9500 | } | 9495 | } |
9501 | 9496 | ||
9502 | WithNotecard(assetID, delegate (UUID id, AssetBase a) | 9497 | WithNotecard(assetID, delegate (UUID id, AssetBase a) |
9503 | { | 9498 | { |
9504 | if (a == null || a.Type != 7) | 9499 | if (a == null || a.Type != 7) |
@@ -9512,15 +9507,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9512 | string data = enc.GetString(a.Data); | 9507 | string data = enc.GetString(a.Data); |
9513 | //m_log.Debug(data); | 9508 | //m_log.Debug(data); |
9514 | NotecardCache.Cache(id, data); | 9509 | NotecardCache.Cache(id, data); |
9515 | AsyncCommands. | 9510 | AsyncCommands.DataserverPlugin.DataserverReply(id.ToString(), |
9516 | DataserverPlugin.DataserverReply(id.ToString(), | 9511 | NotecardCache.GetLine(id, line, m_notecardLineReadCharsMax)); |
9517 | NotecardCache.GetLine(id, line, m_notecardLineReadCharsMax)); | ||
9518 | }); | 9512 | }); |
9519 | 9513 | ||
9520 | ConditionalScriptSleep(100); | 9514 | ConditionalScriptSleep(100); |
9521 | return tid.ToString(); | 9515 | return tid.ToString(); |
9522 | } | 9516 | } |
9523 | |||
9524 | } | 9517 | } |
9525 | 9518 | ||
9526 | public class NotecardCache | 9519 | public class NotecardCache |
@@ -9532,7 +9525,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9532 | } | 9525 | } |
9533 | 9526 | ||
9534 | protected static Dictionary<UUID, Notecard> m_Notecards = | 9527 | protected static Dictionary<UUID, Notecard> m_Notecards = |
9535 | new Dictionary<UUID, Notecard>(); | 9528 | new Dictionary<UUID, Notecard>(); |
9536 | 9529 | ||
9537 | public static void Cache(UUID assetID, string text) | 9530 | public static void Cache(UUID assetID, string text) |
9538 | { | 9531 | { |