aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs334
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs48
2 files changed, 67 insertions, 315 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 8ac4c37..c0243a5 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -107,9 +107,6 @@ namespace OpenSim.Region.Framework.Scenes
107 [XmlIgnore] 107 [XmlIgnore]
108 public bool DIE_AT_EDGE; 108 public bool DIE_AT_EDGE;
109 109
110 [XmlIgnore]
111 public Dictionary<int, string> m_CollisionFilter;
112
113 // TODO: This needs to be persisted in next XML version update! 110 // TODO: This needs to be persisted in next XML version update!
114 [XmlIgnore] 111 [XmlIgnore]
115 public readonly int[] PayPrice = {-2,-2,-2,-2,-2}; 112 public readonly int[] PayPrice = {-2,-2,-2,-2,-2};
@@ -454,15 +451,6 @@ namespace OpenSim.Region.Framework.Scenes
454 ParentGroup.HasGroupChanged = true; 451 ParentGroup.HasGroupChanged = true;
455 } 452 }
456 } 453 }
457
458 public Dictionary<int, string> CollisionFilter
459 {
460 get { return m_CollisionFilter; }
461 set
462 {
463 m_CollisionFilter = value;
464 }
465 }
466 454
467 public ulong RegionHandle 455 public ulong RegionHandle
468 { 456 {
@@ -1886,52 +1874,20 @@ namespace OpenSim.Region.Framework.Scenes
1886 1874
1887 if (m_parentGroup.Scene == null) 1875 if (m_parentGroup.Scene == null)
1888 return; 1876 return;
1889 #region collision Filter 1877
1890 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId); 1878 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
1891 if (obj != null) 1879 if (obj != null)
1892 { 1880 {
1893 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 1881 DetectedObject detobj = new DetectedObject();
1894 { 1882 detobj.keyUUID = obj.UUID;
1895 string data = ""; 1883 detobj.nameStr = obj.Name;
1896 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 1884 detobj.ownerUUID = obj._ownerID;
1897 //If it is 1, it is to accept ONLY collisions from this object 1885 detobj.posVector = obj.AbsolutePosition;
1898 if(data != "") 1886 detobj.rotQuat = obj.GetWorldRotation();
1899 { 1887 detobj.velVector = obj.Velocity;
1900 DetectedObject detobj = new DetectedObject(); 1888 detobj.colliderType = 0;
1901 detobj.keyUUID = obj.UUID; 1889 detobj.groupUUID = obj._groupID;
1902 detobj.nameStr = obj.Name; 1890 colliding.Add(detobj);
1903 detobj.ownerUUID = obj._ownerID;
1904 detobj.posVector = obj.AbsolutePosition;
1905 detobj.rotQuat = obj.GetWorldRotation();
1906 detobj.velVector = obj.Velocity;
1907 detobj.colliderType = 0;
1908 detobj.groupUUID = obj._groupID;
1909 colliding.Add(detobj);
1910 }
1911 //If it is 0, it is to not accept collisions from this object
1912 else
1913 {
1914 }
1915 }
1916 else
1917 {
1918 string data = "";
1919 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
1920 //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
1921 if(data == "")
1922 {
1923 DetectedObject detobj = new DetectedObject();
1924 detobj.keyUUID = obj.UUID;
1925 detobj.nameStr = obj.Name;
1926 detobj.ownerUUID = obj._ownerID;
1927 detobj.posVector = obj.AbsolutePosition;
1928 detobj.rotQuat = obj.GetWorldRotation();
1929 detobj.velVector = obj.Velocity;
1930 detobj.colliderType = 0;
1931 detobj.groupUUID = obj._groupID;
1932 colliding.Add(detobj);
1933 }
1934 }
1935 } 1891 }
1936 else 1892 else
1937 { 1893 {
@@ -1943,52 +1899,19 @@ namespace OpenSim.Region.Framework.Scenes
1943 1899
1944 if (av.LocalId == localId) 1900 if (av.LocalId == localId)
1945 { 1901 {
1946 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 1902 DetectedObject detobj = new DetectedObject();
1947 { 1903 detobj.keyUUID = av.UUID;
1948 string data = ""; 1904 detobj.nameStr = av.ControllingClient.Name;
1949 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 1905 detobj.ownerUUID = av.UUID;
1950 //If it is 1, it is to accept ONLY collisions from this avatar 1906 detobj.posVector = av.AbsolutePosition;
1951 if(data != "") 1907 detobj.rotQuat = av.Rotation;
1952 { 1908 detobj.velVector = av.Velocity;
1953 DetectedObject detobj = new DetectedObject(); 1909 detobj.colliderType = 0;
1954 detobj.keyUUID = av.UUID; 1910 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
1955 detobj.nameStr = av.ControllingClient.Name; 1911 colliding.Add(detobj);
1956 detobj.ownerUUID = av.UUID;
1957 detobj.posVector = av.AbsolutePosition;
1958 detobj.rotQuat = av.Rotation;
1959 detobj.velVector = av.Velocity;
1960 detobj.colliderType = 0;
1961 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
1962 colliding.Add(detobj);
1963 }
1964 //If it is 0, it is to not accept collisions from this avatar
1965 else
1966 {
1967 }
1968 }
1969 else
1970 {
1971 string data = "";
1972 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
1973 //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
1974 if(data == "")
1975 {
1976 DetectedObject detobj = new DetectedObject();
1977 detobj.keyUUID = av.UUID;
1978 detobj.nameStr = av.ControllingClient.Name;
1979 detobj.ownerUUID = av.UUID;
1980 detobj.posVector = av.AbsolutePosition;
1981 detobj.rotQuat = av.Rotation;
1982 detobj.velVector = av.Velocity;
1983 detobj.colliderType = 0;
1984 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
1985 colliding.Add(detobj);
1986 }
1987 }
1988 } 1912 }
1989 } 1913 }
1990 } 1914 }
1991 #endregion
1992 } 1915 }
1993 if (colliding.Count > 0) 1916 if (colliding.Count > 0)
1994 { 1917 {
@@ -2022,105 +1945,41 @@ namespace OpenSim.Region.Framework.Scenes
2022 1945
2023 if (m_parentGroup.Scene == null) 1946 if (m_parentGroup.Scene == null)
2024 return; 1947 return;
2025 #region collision Filter 1948
2026 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId); 1949 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2027 if (obj != null) 1950 if (obj != null)
2028 { 1951 {
2029 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 1952 DetectedObject detobj = new DetectedObject();
2030 { 1953 detobj.keyUUID = obj.UUID;
2031 string data = ""; 1954 detobj.nameStr = obj.Name;
2032 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 1955 detobj.ownerUUID = obj._ownerID;
2033 //If it is 1, it is to accept ONLY collisions from this object 1956 detobj.posVector = obj.AbsolutePosition;
2034 if(data != "") 1957 detobj.rotQuat = obj.GetWorldRotation();
2035 { 1958 detobj.velVector = obj.Velocity;
2036 DetectedObject detobj = new DetectedObject(); 1959 detobj.colliderType = 0;
2037 detobj.keyUUID = obj.UUID; 1960 detobj.groupUUID = obj._groupID;
2038 detobj.nameStr = obj.Name; 1961 colliding.Add(detobj);
2039 detobj.ownerUUID = obj._ownerID;
2040 detobj.posVector = obj.AbsolutePosition;
2041 detobj.rotQuat = obj.GetWorldRotation();
2042 detobj.velVector = obj.Velocity;
2043 detobj.colliderType = 0;
2044 detobj.groupUUID = obj._groupID;
2045 colliding.Add(detobj);
2046 }
2047 //If it is 0, it is to not accept collisions from this object
2048 else
2049 {
2050 }
2051 }
2052 else
2053 {
2054 string data = "";
2055 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
2056 //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
2057 if(data == "")
2058 {
2059 DetectedObject detobj = new DetectedObject();
2060 detobj.keyUUID = obj.UUID;
2061 detobj.nameStr = obj.Name;
2062 detobj.ownerUUID = obj._ownerID;
2063 detobj.posVector = obj.AbsolutePosition;
2064 detobj.rotQuat = obj.GetWorldRotation();
2065 detobj.velVector = obj.Velocity;
2066 detobj.colliderType = 0;
2067 detobj.groupUUID = obj._groupID;
2068 colliding.Add(detobj);
2069 }
2070 }
2071 } 1962 }
2072 else 1963 else
2073 { 1964 {
2074 ScenePresence[] avlist = m_parentGroup.Scene.GetScenePresences(); 1965 ScenePresence[] avlist = m_parentGroup.Scene.GetScenePresences();
2075 1966
2076 for (int i = 0; i < avlist.Length; i++) 1967 for (int i = 0; i < avlist.Length; i++)
2077 { 1968 {
2078 ScenePresence av = avlist[i]; 1969 ScenePresence av = avlist[i];
2079 1970
2080 if (av.LocalId == localId) 1971 if (av.LocalId == localId)
2081 { 1972 {
2082 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 1973 DetectedObject detobj = new DetectedObject();
2083 { 1974 detobj.keyUUID = av.UUID;
2084 string data = ""; 1975 detobj.nameStr = av.Name;
2085 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 1976 detobj.ownerUUID = av.UUID;
2086 //If it is 1, it is to accept ONLY collisions from this avatar 1977 detobj.posVector = av.AbsolutePosition;
2087 if(data != "") 1978 detobj.rotQuat = av.Rotation;
2088 { 1979 detobj.velVector = av.Velocity;
2089 DetectedObject detobj = new DetectedObject(); 1980 detobj.colliderType = 0;
2090 detobj.keyUUID = av.UUID; 1981 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2091 detobj.nameStr = av.ControllingClient.Name; 1982 colliding.Add(detobj);
2092 detobj.ownerUUID = av.UUID;
2093 detobj.posVector = av.AbsolutePosition;
2094 detobj.rotQuat = av.Rotation;
2095 detobj.velVector = av.Velocity;
2096 detobj.colliderType = 0;
2097 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2098 colliding.Add(detobj);
2099 }
2100 //If it is 0, it is to not accept collisions from this avatar
2101 else
2102 {
2103 }
2104 }
2105 else
2106 {
2107 string data = "";
2108 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
2109 //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
2110 if(data == "")
2111 {
2112 DetectedObject detobj = new DetectedObject();
2113 detobj.keyUUID = av.UUID;
2114 detobj.nameStr = av.ControllingClient.Name;
2115 detobj.ownerUUID = av.UUID;
2116 detobj.posVector = av.AbsolutePosition;
2117 detobj.rotQuat = av.Rotation;
2118 detobj.velVector = av.Velocity;
2119 detobj.colliderType = 0;
2120 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2121 colliding.Add(detobj);
2122 }
2123 }
2124 } 1983 }
2125 } 1984 }
2126 } 1985 }
@@ -2138,7 +1997,6 @@ namespace OpenSim.Region.Framework.Scenes
2138 m_parentGroup.Scene.EventManager.TriggerScriptColliding(LocalId, CollidingMessage); 1997 m_parentGroup.Scene.EventManager.TriggerScriptColliding(LocalId, CollidingMessage);
2139 } 1998 }
2140 } 1999 }
2141 #endregion
2142 } 2000 }
2143 2001
2144 if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_end) != 0) 2002 if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_end) != 0)
@@ -2157,52 +2015,19 @@ namespace OpenSim.Region.Framework.Scenes
2157 return; 2015 return;
2158 if (m_parentGroup.Scene == null) 2016 if (m_parentGroup.Scene == null)
2159 return; 2017 return;
2160 #region collision Filter
2161 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId); 2018 SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
2162 if (obj != null) 2019 if (obj != null)
2163 { 2020 {
2164 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 2021 DetectedObject detobj = new DetectedObject();
2165 { 2022 detobj.keyUUID = obj.UUID;
2166 string data = ""; 2023 detobj.nameStr = obj.Name;
2167 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 2024 detobj.ownerUUID = obj._ownerID;
2168 //If it is 1, it is to accept ONLY collisions from this object 2025 detobj.posVector = obj.AbsolutePosition;
2169 if(data != "") 2026 detobj.rotQuat = obj.GetWorldRotation();
2170 { 2027 detobj.velVector = obj.Velocity;
2171 DetectedObject detobj = new DetectedObject(); 2028 detobj.colliderType = 0;
2172 detobj.keyUUID = obj.UUID; 2029 detobj.groupUUID = obj._groupID;
2173 detobj.nameStr = obj.Name; 2030 colliding.Add(detobj);
2174 detobj.ownerUUID = obj._ownerID;
2175 detobj.posVector = obj.AbsolutePosition;
2176 detobj.rotQuat = obj.GetWorldRotation();
2177 detobj.velVector = obj.Velocity;
2178 detobj.colliderType = 0;
2179 detobj.groupUUID = obj._groupID;
2180 colliding.Add(detobj);
2181 }
2182 //If it is 0, it is to not accept collisions from this object
2183 else
2184 {
2185 }
2186 }
2187 else
2188 {
2189 string data = "";
2190 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
2191 //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work
2192 if(data == "")
2193 {
2194 DetectedObject detobj = new DetectedObject();
2195 detobj.keyUUID = obj.UUID;
2196 detobj.nameStr = obj.Name;
2197 detobj.ownerUUID = obj._ownerID;
2198 detobj.posVector = obj.AbsolutePosition;
2199 detobj.rotQuat = obj.GetWorldRotation();
2200 detobj.velVector = obj.Velocity;
2201 detobj.colliderType = 0;
2202 detobj.groupUUID = obj._groupID;
2203 colliding.Add(detobj);
2204 }
2205 }
2206 } 2031 }
2207 else 2032 else
2208 { 2033 {
@@ -2214,52 +2039,19 @@ namespace OpenSim.Region.Framework.Scenes
2214 2039
2215 if (av.LocalId == localId) 2040 if (av.LocalId == localId)
2216 { 2041 {
2217 if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) 2042 DetectedObject detobj = new DetectedObject();
2218 { 2043 detobj.keyUUID = av.UUID;
2219 string data = ""; 2044 detobj.nameStr = av.Name;
2220 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); 2045 detobj.ownerUUID = av.UUID;
2221 //If it is 1, it is to accept ONLY collisions from this avatar 2046 detobj.posVector = av.AbsolutePosition;
2222 if(data != "") 2047 detobj.rotQuat = av.Rotation;
2223 { 2048 detobj.velVector = av.Velocity;
2224 DetectedObject detobj = new DetectedObject(); 2049 detobj.colliderType = 0;
2225 detobj.keyUUID = av.UUID; 2050 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2226 detobj.nameStr = av.ControllingClient.Name; 2051 colliding.Add(detobj);
2227 detobj.ownerUUID = av.UUID;
2228 detobj.posVector = av.AbsolutePosition;
2229 detobj.rotQuat = av.Rotation;
2230 detobj.velVector = av.Velocity;
2231 detobj.colliderType = 0;
2232 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2233 colliding.Add(detobj);
2234 }
2235 //If it is 0, it is to not accept collisions from this avatar
2236 else
2237 {
2238 }
2239 }
2240 else
2241 {
2242 string data = "";
2243 m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
2244 //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work
2245 if(data == "")
2246 {
2247 DetectedObject detobj = new DetectedObject();
2248 detobj.keyUUID = av.UUID;
2249 detobj.nameStr = av.ControllingClient.Name;
2250 detobj.ownerUUID = av.UUID;
2251 detobj.posVector = av.AbsolutePosition;
2252 detobj.rotQuat = av.Rotation;
2253 detobj.velVector = av.Velocity;
2254 detobj.colliderType = 0;
2255 detobj.groupUUID = av.ControllingClient.ActiveGroupId;
2256 colliding.Add(detobj);
2257 }
2258 }
2259 } 2052 }
2260 } 2053 }
2261 } 2054 }
2262 #endregion
2263 } 2055 }
2264 2056
2265 if (colliding.Count > 0) 2057 if (colliding.Count > 0)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 43df4ab..6102504 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2752,15 +2752,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2752 public void llCollisionFilter(string name, string id, int accept) 2752 public void llCollisionFilter(string name, string id, int accept)
2753 { 2753 {
2754 m_host.AddScriptLPS(1); 2754 m_host.AddScriptLPS(1);
2755 m_host.CollisionFilter.Clear(); 2755 NotImplemented("llCollisionFilter");
2756 if(id != null)
2757 {
2758 m_host.CollisionFilter.Add(accept,id);
2759 }
2760 else
2761 {
2762 m_host.CollisionFilter.Add(accept,name);
2763 }
2764 } 2756 }
2765 2757
2766 public void llTakeControls(int controls, int accept, int pass_on) 2758 public void llTakeControls(int controls, int accept, int pass_on)
@@ -8212,43 +8204,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8212 8204
8213 return -1; 8205 return -1;
8214 } 8206 }
8215 8207
8216 public void llSetInventoryPermMask(string item, int mask, int value) 8208 public void llSetInventoryPermMask(string item, int mask, int value)
8217 { 8209 {
8218 m_host.AddScriptLPS(1); 8210 m_host.AddScriptLPS(1);
8219 if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false)) 8211 NotImplemented("llSetInventoryPermMask");
8220 {
8221 if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID))
8222 {
8223 lock (m_host.TaskInventory)
8224 {
8225 foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory)
8226 {
8227 if (inv.Value.Name == item)
8228 {
8229 switch (mask)
8230 {
8231 case 0:
8232 inv.Value.BasePermissions = (uint)value;
8233 break;
8234 case 1:
8235 inv.Value.CurrentPermissions = (uint)value;
8236 break;
8237 case 2:
8238 inv.Value.GroupPermissions = (uint)value;
8239 break;
8240 case 3:
8241 inv.Value.EveryonePermissions = (uint)value;
8242 break;
8243 case 4:
8244 inv.Value.NextPermissions = (uint)value;
8245 break;
8246 }
8247 }
8248 }
8249 }
8250 }
8251 }
8252 } 8212 }
8253 8213
8254 public LSL_String llGetInventoryCreator(string item) 8214 public LSL_String llGetInventoryCreator(string item)