aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs115
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs3
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
40namespace OpenSim.Region.ScriptEngine.Shared 40namespace 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