diff options
Diffstat (limited to '')
3 files changed, 103 insertions, 19 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 22d247d..4bf8729 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1606,13 +1606,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1606 | 1606 | ||
1607 | if (!World.Permissions.CanEditParcelProperties(m_host.OwnerID, startLandObject, GroupPowers.LandOptions, false)) | 1607 | if (!World.Permissions.CanEditParcelProperties(m_host.OwnerID, startLandObject, GroupPowers.LandOptions, false)) |
1608 | { | 1608 | { |
1609 | OSSLShoutError("You do not have permission to modify the parcel"); | 1609 | OSSLShoutError("script owner does not have permission to modify the parcel"); |
1610 | return; | 1610 | return; |
1611 | } | 1611 | } |
1612 | 1612 | ||
1613 | // Create a new land data object we can modify | 1613 | // Create a new land data object we can modify |
1614 | LandData newLand = startLandObject.LandData.Copy(); | 1614 | LandData newLand = startLandObject.LandData.Copy(); |
1615 | UUID uuid; | 1615 | UUID uuid; |
1616 | EstateSettings es = World.RegionInfo.EstateSettings; | ||
1617 | |||
1618 | bool changed = false; | ||
1616 | 1619 | ||
1617 | // Process the rules, not sure what the impact would be of changing owner or group | 1620 | // Process the rules, not sure what the impact would be of changing owner or group |
1618 | for (int idx = 0; idx < rules.Length;) | 1621 | for (int idx = 0; idx < rules.Length;) |
@@ -1622,35 +1625,115 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1622 | switch (code) | 1625 | switch (code) |
1623 | { | 1626 | { |
1624 | case ScriptBaseClass.PARCEL_DETAILS_NAME: | 1627 | case ScriptBaseClass.PARCEL_DETAILS_NAME: |
1625 | newLand.Name = arg; | 1628 | if(newLand.Name != arg) |
1629 | { | ||
1630 | newLand.Name = arg; | ||
1631 | changed = true; | ||
1632 | } | ||
1626 | break; | 1633 | break; |
1627 | 1634 | ||
1628 | case ScriptBaseClass.PARCEL_DETAILS_DESC: | 1635 | case ScriptBaseClass.PARCEL_DETAILS_DESC: |
1629 | newLand.Description = arg; | 1636 | if(newLand.Description != arg) |
1637 | { | ||
1638 | newLand.Description = arg; | ||
1639 | changed = true; | ||
1640 | } | ||
1630 | break; | 1641 | break; |
1631 | 1642 | ||
1632 | case ScriptBaseClass.PARCEL_DETAILS_OWNER: | 1643 | case ScriptBaseClass.PARCEL_DETAILS_OWNER: |
1633 | CheckThreatLevel(ThreatLevel.VeryHigh, functionName); | 1644 | if(es != null && !es.IsEstateManagerOrOwner(m_host.OwnerID)) |
1634 | if (UUID.TryParse(arg, out uuid)) | 1645 | { |
1635 | newLand.OwnerID = uuid; | 1646 | OSSLError("script owner does not have permission to modify the parcel owner"); |
1647 | } | ||
1648 | else | ||
1649 | { | ||
1650 | if (UUID.TryParse(arg, out uuid)) | ||
1651 | { | ||
1652 | if(newLand.OwnerID != uuid) | ||
1653 | { | ||
1654 | changed = true; | ||
1655 | newLand.OwnerID = uuid; | ||
1656 | newLand.GroupID = UUID.Zero; | ||
1657 | } | ||
1658 | } | ||
1659 | } | ||
1636 | break; | 1660 | break; |
1637 | 1661 | ||
1638 | case ScriptBaseClass.PARCEL_DETAILS_GROUP: | 1662 | case ScriptBaseClass.PARCEL_DETAILS_GROUP: |
1639 | CheckThreatLevel(ThreatLevel.VeryHigh, functionName); | 1663 | if(m_host.OwnerID == newLand.OwnerID || es == null || es.IsEstateManagerOrOwner(m_host.OwnerID)) |
1640 | if (UUID.TryParse(arg, out uuid)) | 1664 | { |
1641 | newLand.GroupID = uuid; | 1665 | if (UUID.TryParse(arg, out uuid)) |
1666 | { | ||
1667 | if(newLand.GroupID != uuid) | ||
1668 | { | ||
1669 | IGroupsModule groupsModule = m_ScriptEngine.World.RequestModuleInterface<IGroupsModule>(); | ||
1670 | GroupMembershipData member = null; | ||
1671 | if (groupsModule != null) | ||
1672 | member = groupsModule.GetMembershipData(uuid, newLand.OwnerID); | ||
1673 | if (member == null) | ||
1674 | OSSLError(string.Format("land owner is not member of the new group for parcel")); | ||
1675 | else | ||
1676 | { | ||
1677 | changed = true; | ||
1678 | newLand.GroupID = uuid; | ||
1679 | } | ||
1680 | } | ||
1681 | } | ||
1682 | } | ||
1683 | else | ||
1684 | { | ||
1685 | OSSLError("script owner does not have permission to modify the parcel group"); | ||
1686 | } | ||
1642 | break; | 1687 | break; |
1643 | 1688 | ||
1644 | case ScriptBaseClass.PARCEL_DETAILS_CLAIMDATE: | 1689 | case ScriptBaseClass.PARCEL_DETAILS_CLAIMDATE: |
1645 | CheckThreatLevel(ThreatLevel.VeryHigh, functionName); | 1690 | if(es != null && !es.IsEstateManagerOrOwner(m_host.OwnerID)) |
1646 | newLand.ClaimDate = Convert.ToInt32(arg); | 1691 | { |
1647 | if (newLand.ClaimDate == 0) | 1692 | OSSLError("script owner does not have permission to modify the parcel CLAIM DATE"); |
1648 | newLand.ClaimDate = Util.UnixTimeSinceEpoch(); | 1693 | } |
1694 | else | ||
1695 | { | ||
1696 | int date = Convert.ToInt32(arg); | ||
1697 | if (date == 0) | ||
1698 | date = Util.UnixTimeSinceEpoch(); | ||
1699 | if(newLand.ClaimDate != date) | ||
1700 | { | ||
1701 | changed = true; | ||
1702 | newLand.ClaimDate = date; | ||
1703 | } | ||
1704 | } | ||
1649 | break; | 1705 | break; |
1650 | } | ||
1651 | } | ||
1652 | 1706 | ||
1653 | World.LandChannel.UpdateLandObject(newLand.LocalID,newLand); | 1707 | case ScriptBaseClass.PARCEL_DETAILS_SEE_AVATARS: |
1708 | bool newavs = (Convert.ToInt32(arg) != 0); | ||
1709 | if(newLand.SeeAVs != newavs) | ||
1710 | { | ||
1711 | changed = true; | ||
1712 | newLand.SeeAVs = newavs; | ||
1713 | } | ||
1714 | break; | ||
1715 | |||
1716 | case ScriptBaseClass.PARCEL_DETAILS_ANY_AVATAR_SOUNDS: | ||
1717 | bool newavsounds = (Convert.ToInt32(arg) != 0); | ||
1718 | if(newLand.AnyAVSounds != newavsounds) | ||
1719 | { | ||
1720 | changed = true; | ||
1721 | newLand.AnyAVSounds = newavsounds; | ||
1722 | } | ||
1723 | break; | ||
1724 | |||
1725 | case ScriptBaseClass.PARCEL_DETAILS_GROUP_SOUNDS: | ||
1726 | bool newgrpsounds = (Convert.ToInt32(arg) != 0); | ||
1727 | if(newLand.GroupAVSounds != newgrpsounds) | ||
1728 | { | ||
1729 | changed = true; | ||
1730 | newLand.GroupAVSounds = newgrpsounds; | ||
1731 | } | ||
1732 | break; | ||
1733 | } | ||
1734 | } | ||
1735 | if(changed) | ||
1736 | World.LandChannel.UpdateLandObject(newLand.LocalID,newLand); | ||
1654 | } | 1737 | } |
1655 | 1738 | ||
1656 | public double osList2Double(LSL_Types.list src, int index) | 1739 | public double osList2Double(LSL_Types.list src, int index) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index a277f6c..e4c1ca0 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs | |||
@@ -697,7 +697,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
697 | public const int PARCEL_DETAILS_GROUP = 3; | 697 | public const int PARCEL_DETAILS_GROUP = 3; |
698 | public const int PARCEL_DETAILS_AREA = 4; | 698 | public const int PARCEL_DETAILS_AREA = 4; |
699 | public const int PARCEL_DETAILS_ID = 5; | 699 | public const int PARCEL_DETAILS_ID = 5; |
700 | public const int PARCEL_DETAILS_SEE_AVATARS = 6; // not implemented | 700 | public const int PARCEL_DETAILS_SEE_AVATARS = 6; |
701 | public const int PARCEL_DETAILS_ANY_AVATAR_SOUNDS = 7; | ||
702 | public const int PARCEL_DETAILS_GROUP_SOUNDS = 8; | ||
701 | 703 | ||
702 | //osSetParcelDetails | 704 | //osSetParcelDetails |
703 | public const int PARCEL_DETAILS_CLAIMDATE = 10; | 705 | public const int PARCEL_DETAILS_CLAIMDATE = 10; |
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 4d7a698..8780e49 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -39,7 +39,6 @@ using OMV_Quaternion = OpenMetaverse.Quaternion; | |||
39 | 39 | ||
40 | namespace OpenSim.Region.ScriptEngine.Shared | 40 | namespace OpenSim.Region.ScriptEngine.Shared |
41 | { | 41 | { |
42 | [Serializable] | ||
43 | public partial class LSL_Types | 42 | public partial class LSL_Types |
44 | { | 43 | { |
45 | // Types are kept is separate .dll to avoid having to add whatever .dll it is in it to script AppDomain | 44 | // Types are kept is separate .dll to avoid having to add whatever .dll it is in it to script AppDomain |
@@ -526,7 +525,7 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
526 | } | 525 | } |
527 | 526 | ||
528 | [Serializable] | 527 | [Serializable] |
529 | public class list | 528 | public class list: MarshalByRefObject |
530 | { | 529 | { |
531 | private object[] m_data; | 530 | private object[] m_data; |
532 | 531 | ||